diff --git a/.eslintrc-hound.json b/.eslintrc-hound.json deleted file mode 100644 index 9866534ccf..0000000000 --- a/.eslintrc-hound.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "extends": ["airbnb-base", "prettier"], - "parserOptions": { - "ecmaVersion": "2020", - "ecmaFeatures": { - "jsx": true, - "modules": true - } - }, - "settings": { - "react": { - "pragma": "h", - "version": "15.0" - }, - "import/resolver": { - "webpack": { - "config": "webpack.config.js" - } - } - }, - "globals": { - "__DEV__": false, - "__DEMO__": false, - "__BUILD__": false, - "__VERSION__": false, - "__STATIC_PATH__": false, - "Polymer": true, - "webkitSpeechRecognition": false, - "ResizeObserver": false - }, - "env": { - "browser": true, - "mocha": true - }, - "rules": { - "class-methods-use-this": 0, - "new-cap": 0, - "prefer-template": 0, - "object-shorthand": 0, - "func-names": 0, - "prefer-arrow-callback": 0, - "no-underscore-dangle": 0, - "no-var": 0, - "strict": 0, - "prefer-spread": 0, - "no-plusplus": 0, - "no-bitwise": 0, - "comma-dangle": 0, - "vars-on-top": 0, - "no-continue": 0, - "no-param-reassign": 0, - "no-multi-assign": 0, - "radix": 0, - "no-alert": 0, - "no-return-await": 0, - "prefer-destructuring": 0, - "no-restricted-globals": [2, "event"], - "prefer-promise-reject-errors": 0, - "import/prefer-default-export": 0, - "import/no-unresolved": 0, - "import/extensions": [2, "ignorePackages"], - "object-curly-newline": 0, - "default-case": 0, - "react/jsx-no-bind": [2, { "ignoreRefs": true }], - "react/jsx-no-duplicate-props": 2, - "react/self-closing-comp": 2, - "react/prefer-es6-class": 2, - "react/no-string-refs": 2, - "react/require-render-return": 2, - "react/no-find-dom-node": 2, - "react/no-is-mounted": 2, - "react/jsx-no-comment-textnodes": 2, - "react/jsx-no-undef": 2, - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "no-restricted-syntax": [0, "ForOfStatement"], - "prettier/prettier": "error" - }, - "plugins": ["react", "prettier"] -} diff --git a/.eslintrc.json b/.eslintrc.json index 5bcf910f99..53eb374190 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,12 +1,100 @@ { - "extends": "./.eslintrc-hound.json", - "plugins": ["react"], + "extends": [ + "plugin:@typescript-eslint/recommended", + "airbnb-typescript/base", + "plugin:wc/recommended", + "plugin:lit/recommended", + "prettier", + "prettier/@typescript-eslint" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "ecmaFeatures": { + "jsx": true, + "modules": true + }, + "sourceType": "module", + "project": "./tsconfig.json" + }, + "settings": { + "react": { + "pragma": "h", + "version": "15.0" + }, + "import/resolver": { + "webpack": { + "config": "./webpack.config.js" + } + } + }, + "globals": { + "__DEV__": false, + "__DEMO__": false, + "__BUILD__": false, + "__VERSION__": false, + "__STATIC_PATH__": false, + "Polymer": true, + "webkitSpeechRecognition": false, + "ResizeObserver": false + }, "env": { - "browser": true + "browser": true, + "es6": true }, "rules": { - "import/no-unresolved": 2, - "linebreak-style": 0, - "implicit-arrow-linebreak": 0 - } + "class-methods-use-this": 0, + "new-cap": 0, + "prefer-template": 0, + "object-shorthand": 0, + "func-names": 0, + "prefer-arrow-callback": 0, + "no-underscore-dangle": 0, + "no-var": 0, + "strict": 0, + "prefer-spread": 0, + "no-plusplus": 0, + "no-bitwise": 0, + "comma-dangle": 0, + "vars-on-top": 0, + "no-continue": 0, + "no-param-reassign": 0, + "no-multi-assign": 0, + "radix": 0, + "no-alert": 0, + "no-return-await": 0, + "no-nested-ternary": 0, + "prefer-destructuring": 0, + "no-restricted-globals": [2, "event"], + "prefer-promise-reject-errors": 0, + "import/order": 0, + "import/prefer-default-export": 0, + "import/no-unresolved": 0, + "import/no-cycle": 0, + "import/extensions": [ + 2, + "ignorePackages", + { "ts": "never", "js": "never" } + ], + "no-restricted-syntax": ["error", "LabeledStatement", "WithStatement"], + "object-curly-newline": 0, + "default-case": 0, + "wc/no-self-class": 0, + "@typescript-eslint/camelcase": 0, + "@typescript-eslint/ban-ts-ignore": 0, + "@typescript-eslint/no-use-before-define": 0, + "@typescript-eslint/no-non-null-assertion": 0, + "@typescript-eslint/no-explicit-any": 0, + "@typescript-eslint/no-unused-vars": 0, + "@typescript-eslint/explicit-function-return-type": 0 + }, + "plugins": [ + "disable", + "import", + "react", + "lit", + "prettier", + "@typescript-eslint" + ], + "processor": "disable/disable" } diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md index 634724fcbe..640740f5ac 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md @@ -3,23 +3,24 @@ name: Request a feature for the UI, Frontend or Lovelace about: Request an new feature for the Home Assistant frontend. labels: feature request --- + + ## The request - - ## The alternatives + - ## Additional information - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f73933940c..a28fd83e4d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,7 +2,9 @@ You are amazing! Thanks for contributing to our project! Please, DO NOT DELETE ANY TEXT from this template! (unless instructed). --> + ## Breaking change + - ## Proposed change - - ## Type of change + @@ -36,6 +38,7 @@ - [ ] Code quality improvements to existing code or addition of tests ## Example configuration + - This PR fixes or closes issue: fixes # -- This PR is related to issue: -- Link to documentation pull request: +- This PR is related to issue: +- Link to documentation pull request: ## Checklist + + [docs-repository]: https://github.com/home-assistant/home-assistant.io diff --git a/.github/lock.yml b/.github/lock.yml index 63db6533f2..2566272cb3 100644 --- a/.github/lock.yml +++ b/.github/lock.yml @@ -24,4 +24,4 @@ only: pulls # Optionally, specify configuration settings just for `issues` or `pulls` issues: - daysUntilLock: 30 + daysUntilLock: 30 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 936394a327..984656a4b0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -39,9 +39,7 @@ jobs: - name: Build translations run: ./node_modules/.bin/gulp build-translations - name: Run eslint - run: ./node_modules/.bin/eslint src hassio/src gallery/src - - name: Run tslint - run: ./node_modules/.bin/tslint 'src/**/*.ts' 'hassio/src/**/*.ts' 'gallery/src/**/*.ts' 'cast/src/**/*.ts' 'test-mocha/**/*.ts' + run: ./node_modules/.bin/eslint '{**/src,src}/**/*.{js,ts,html}' --ignore-path .gitignore - name: Run tsc run: ./node_modules/.bin/tsc test: diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..324cce418c --- /dev/null +++ b/.prettierignore @@ -0,0 +1,37 @@ +build +build-translations/* +translations/* +node_modules/* +npm-debug.log +.DS_Store +hass_frontend/* +.reify-cache +demo/hademo-icons.html + +# Python stuff +*.py[cod] +*.egg +*.egg-info + +# venv stuff +pyvenv.cfg +pip-selfcheck.json +venv +.venv +lib +bin +dist + +# vscode +.vscode/* +!.vscode/extensions.json + +# Cast dev settings +src/cast/dev_const.ts + +# Secrets +.lokalise_token +yarn-error.log + +#asdf +.tool-versions diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 411ffee836..8bea127242 100755 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,6 @@ { "recommendations": [ "dbaeumer.vscode-eslint", - "ms-vscode.vscode-typescript-tslint-plugin", "esbenp.prettier-vscode", "bierner.lit-html", "runem.lit-plugin" diff --git a/cast/src/launcher/entrypoint.ts b/cast/src/launcher/entrypoint.ts index 74330ec866..db52293458 100644 --- a/cast/src/launcher/entrypoint.ts +++ b/cast/src/launcher/entrypoint.ts @@ -1,5 +1,5 @@ -import "../../../src/resources/ha-style"; -import "../../../src/resources/roboto"; import "../../../src/components/ha-iconset-svg"; +import "../../../src/resources/ha-style"; import "../../../src/resources/hass-icons"; +import "../../../src/resources/roboto"; import "./layout/hc-connect"; diff --git a/cast/src/launcher/layout/hc-cast.ts b/cast/src/launcher/layout/hc-cast.ts index b9bb9f76fb..69fbabcecd 100644 --- a/cast/src/launcher/layout/hc-cast.ts +++ b/cast/src/launcher/layout/hc-cast.ts @@ -1,51 +1,53 @@ +import "@polymer/iron-icon"; +import "@polymer/paper-item/paper-icon-item"; +import "@polymer/paper-listbox/paper-listbox"; +import { Auth, Connection } from "home-assistant-js-websocket"; import { + css, + CSSResult, customElement, + html, LitElement, property, TemplateResult, - html, - CSSResult, - css, } from "lit-element"; -import { Connection, Auth } from "home-assistant-js-websocket"; -import "@polymer/iron-icon"; -import "@polymer/paper-listbox/paper-listbox"; -import "@polymer/paper-item/paper-icon-item"; -import "../../../../src/components/ha-icon"; -import { - enableWrite, - askWrite, - saveTokens, -} from "../../../../src/common/auth/token_storage"; -import { - ensureConnectedCastSession, - castSendShowLovelaceView, -} from "../../../../src/cast/receiver_messages"; -import "../../../../src/layouts/loading-screen"; import { CastManager } from "../../../../src/cast/cast_manager"; import { - LovelaceConfig, - getLovelaceCollection, - getLegacyLovelaceCollection, -} from "../../../../src/data/lovelace"; -import "./hc-layout"; -import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config"; -import { toggleAttribute } from "../../../../src/common/dom/toggle_attribute"; + castSendShowLovelaceView, + ensureConnectedCastSession, +} from "../../../../src/cast/receiver_messages"; +import { + askWrite, + enableWrite, + saveTokens, +} from "../../../../src/common/auth/token_storage"; import { atLeastVersion } from "../../../../src/common/config/version"; +import { toggleAttribute } from "../../../../src/common/dom/toggle_attribute"; +import "../../../../src/components/ha-icon"; +import { + getLegacyLovelaceCollection, + getLovelaceCollection, + LovelaceConfig, +} from "../../../../src/data/lovelace"; +import "../../../../src/layouts/loading-screen"; +import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config"; +import "./hc-layout"; @customElement("hc-cast") class HcCast extends LitElement { @property() public auth!: Auth; + @property() public connection!: Connection; + @property() public castManager!: CastManager; + @property() private askWrite = false; + @property() private lovelaceConfig?: LovelaceConfig | null; protected render(): TemplateResult { if (this.lovelaceConfig === undefined) { - return html` - > - `; + return html` > `; } const error = @@ -75,9 +77,7 @@ class HcCast extends LitElement { ` : ""} ${error - ? html` -
${error}
- ` + ? html`
${error}
` : !this.castManager.status ? html`

diff --git a/cast/src/launcher/layout/hc-connect.ts b/cast/src/launcher/layout/hc-connect.ts index a2ab3fb179..1c9ca40e6c 100644 --- a/cast/src/launcher/layout/hc-connect.ts +++ b/cast/src/launcher/layout/hc-connect.ts @@ -1,35 +1,35 @@ +import "@material/mwc-button"; +import "@polymer/iron-icon"; +import "@polymer/paper-input/paper-input"; import { - LitElement, + Auth, + Connection, + createConnection, + ERR_CANNOT_CONNECT, + ERR_HASS_HOST_REQUIRED, + ERR_INVALID_AUTH, + ERR_INVALID_HTTPS_TO_HTTP, + getAuth, + getAuthOptions, +} from "home-assistant-js-websocket"; +import { + css, + CSSResult, customElement, + html, + LitElement, property, TemplateResult, - html, - CSSResult, - css, } from "lit-element"; -import { - getAuth, - createConnection, - Auth, - getAuthOptions, - ERR_HASS_HOST_REQUIRED, - ERR_INVALID_HTTPS_TO_HTTP, - Connection, - ERR_CANNOT_CONNECT, - ERR_INVALID_AUTH, -} from "home-assistant-js-websocket"; -import "@polymer/iron-icon"; -import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; +import { CastManager, getCastManager } from "../../../../src/cast/cast_manager"; +import { castSendShowDemo } from "../../../../src/cast/receiver_messages"; import { loadTokens, saveTokens, } from "../../../../src/common/auth/token_storage"; import "../../../../src/layouts/loading-screen"; -import { CastManager, getCastManager } from "../../../../src/cast/cast_manager"; -import "./hc-layout"; -import { castSendShowDemo } from "../../../../src/cast/receiver_messages"; import { registerServiceWorker } from "../../../../src/util/register-service-worker"; +import "./hc-layout"; const seeFAQ = (qid) => html` See the FAQ for more @@ -61,13 +61,19 @@ const INTRO = html` @customElement("hc-connect") export class HcConnect extends LitElement { @property() private loading = false; + // If we had stored credentials but we cannot connect, // show a screen asking retry or logout. @property() private cannotConnect = false; + @property() private error?: string | TemplateResult; + @property() private auth?: Auth; + @property() private connection?: Connection; + @property() private castManager?: CastManager | null; + private openDemo = false; protected render(): TemplateResult { @@ -92,9 +98,7 @@ export class HcConnect extends LitElement { } if (this.castManager === undefined || this.loading) { - return html` - - `; + return html` `; } if (this.castManager === null) { @@ -127,11 +131,7 @@ export class HcConnect extends LitElement { @keydown=${this._handleInputKeyDown} >

- ${this.error - ? html` -

${this.error}

- ` - : ""} + ${this.error ? html`

${this.error}

` : ""}
@@ -211,7 +211,8 @@ export class HcConnect extends LitElement { if (value === "") { this.error = "Please enter a Home Assistant URL."; return; - } else if (value.indexOf("://") === -1) { + } + if (value.indexOf("://") === -1) { this.error = "Please enter your full URL, including the protocol part (https://)."; return; diff --git a/cast/src/launcher/layout/hc-layout.ts b/cast/src/launcher/layout/hc-layout.ts index aaf9d8c17a..f9d82223b2 100644 --- a/cast/src/launcher/layout/hc-layout.ts +++ b/cast/src/launcher/layout/hc-layout.ts @@ -1,25 +1,28 @@ -import { - customElement, - LitElement, - TemplateResult, - html, - CSSResult, - css, - property, -} from "lit-element"; import { Auth, Connection, - HassUser, getUser, + HassUser, } from "home-assistant-js-websocket"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../../src/components/ha-card"; @customElement("hc-layout") class HcLayout extends LitElement { @property() public subtitle?: string | undefined; + @property() public auth?: Auth; + @property() public connection?: Connection; + @property() public user?: HassUser; protected render(): TemplateResult { @@ -37,11 +40,7 @@ class HcLayout extends LitElement { this.auth.data.hassUrl.indexOf("//") + 2 )} - ${this.user - ? html` - – ${this.user.name} - ` - : ""} + ${this.user ? html` – ${this.user.name} ` : ""}
` : ""} diff --git a/cast/src/receiver/cast_context.ts b/cast/src/receiver/cast_context.ts index 587624c74f..931a3353f0 100644 --- a/cast/src/receiver/cast_context.ts +++ b/cast/src/receiver/cast_context.ts @@ -1 +1,2 @@ +/* eslint-disable no-undef */ export const castContext = cast.framework.CastReceiverContext.getInstance(); diff --git a/cast/src/receiver/demo/cast-demo-entities.ts b/cast/src/receiver/demo/cast-demo-entities.ts index c0e8089e16..ff8956804c 100644 --- a/cast/src/receiver/demo/cast-demo-entities.ts +++ b/cast/src/receiver/demo/cast-demo-entities.ts @@ -1,4 +1,4 @@ -import { Entity, convertEntities } from "../../../../src/fake_data/entity"; +import { convertEntities, Entity } from "../../../../src/fake_data/entity"; export const castDemoEntities: () => Entity[] = () => convertEntities({ diff --git a/cast/src/receiver/demo/cast-demo-lovelace.ts b/cast/src/receiver/demo/cast-demo-lovelace.ts index 62f739e793..e948564485 100644 --- a/cast/src/receiver/demo/cast-demo-lovelace.ts +++ b/cast/src/receiver/demo/cast-demo-lovelace.ts @@ -1,6 +1,6 @@ import { - LovelaceConfig, LovelaceCardConfig, + LovelaceConfig, } from "../../../../src/data/lovelace"; import { castContext } from "../cast_context"; diff --git a/cast/src/receiver/entrypoint.ts b/cast/src/receiver/entrypoint.ts index 0430dbbf5a..c52c137048 100644 --- a/cast/src/receiver/entrypoint.ts +++ b/cast/src/receiver/entrypoint.ts @@ -1,9 +1,10 @@ +/* eslint-disable no-undef */ +import { CAST_NS } from "../../../src/cast/const"; +import { HassMessage } from "../../../src/cast/receiver_messages"; import "../../../src/resources/custom-card-support"; import { castContext } from "./cast_context"; -import { ReceivedMessage } from "./types"; -import { HassMessage } from "../../../src/cast/receiver_messages"; import { HcMain } from "./layout/hc-main"; -import { CAST_NS } from "../../../src/cast/const"; +import { ReceivedMessage } from "./types"; const controller = new HcMain(); document.body.append(controller); diff --git a/cast/src/receiver/layout/hc-demo.ts b/cast/src/receiver/layout/hc-demo.ts index 4b597d6e1f..b3c0fcab0e 100644 --- a/cast/src/receiver/layout/hc-demo.ts +++ b/cast/src/receiver/layout/hc-demo.ts @@ -1,19 +1,20 @@ -import { HassElement } from "../../../../src/state/hass-element"; -import "./hc-lovelace"; -import { customElement, TemplateResult, html, property } from "lit-element"; +import { customElement, html, property, TemplateResult } from "lit-element"; +import { mockHistory } from "../../../../demo/src/stubs/history"; +import { LovelaceConfig } from "../../../../src/data/lovelace"; import { MockHomeAssistant, provideHass, } from "../../../../src/fake_data/provide_hass"; +import { HassElement } from "../../../../src/state/hass-element"; import { HomeAssistant } from "../../../../src/types"; -import { LovelaceConfig } from "../../../../src/data/lovelace"; import { castDemoEntities } from "../demo/cast-demo-entities"; import { castDemoLovelace } from "../demo/cast-demo-lovelace"; -import { mockHistory } from "../../../../demo/src/stubs/history"; +import "./hc-lovelace"; @customElement("hc-demo") class HcDemo extends HassElement { @property() public lovelacePath!: string; + @property() private _lovelaceConfig?: LovelaceConfig; protected render(): TemplateResult { @@ -28,6 +29,7 @@ class HcDemo extends HassElement { > `; } + protected firstUpdated(changedProps) { super.firstUpdated(changedProps); this._initialize(); diff --git a/cast/src/receiver/layout/hc-launch-screen.ts b/cast/src/receiver/layout/hc-launch-screen.ts index ee2586e391..b2d729bf65 100644 --- a/cast/src/receiver/layout/hc-launch-screen.ts +++ b/cast/src/receiver/layout/hc-launch-screen.ts @@ -1,17 +1,18 @@ import { - LitElement, - TemplateResult, - html, - customElement, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; import { HomeAssistant } from "../../../../src/types"; @customElement("hc-launch-screen") class HcLaunchScreen extends LitElement { @property() public hass?: HomeAssistant; + @property() public error?: string; protected render(): TemplateResult { @@ -22,11 +23,7 @@ class HcLaunchScreen extends LitElement { />
${this.hass ? "Connected" : "Not Connected"} - ${this.error - ? html` -

Error: ${this.error}

- ` - : ""} + ${this.error ? html`

Error: ${this.error}

` : ""}
`; diff --git a/cast/src/receiver/layout/hc-lovelace.ts b/cast/src/receiver/layout/hc-lovelace.ts index fad09d6329..b8478cc370 100644 --- a/cast/src/receiver/layout/hc-lovelace.ts +++ b/cast/src/receiver/layout/hc-lovelace.ts @@ -1,17 +1,17 @@ import { - LitElement, - TemplateResult, - html, - customElement, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; import { LovelaceConfig } from "../../../../src/data/lovelace"; -import "../../../../src/panels/lovelace/views/hui-view"; -import "../../../../src/panels/lovelace/views/hui-panel-view"; -import { HomeAssistant } from "../../../../src/types"; import { Lovelace } from "../../../../src/panels/lovelace/types"; +import "../../../../src/panels/lovelace/views/hui-panel-view"; +import "../../../../src/panels/lovelace/views/hui-view"; +import { HomeAssistant } from "../../../../src/types"; import "./hc-launch-screen"; @customElement("hc-lovelace") diff --git a/cast/src/receiver/layout/hc-main.ts b/cast/src/receiver/layout/hc-main.ts index cb5773b416..9c6f92e016 100644 --- a/cast/src/receiver/layout/hc-main.ts +++ b/cast/src/receiver/layout/hc-main.ts @@ -1,31 +1,31 @@ import { - getAuth, createConnection, + getAuth, UnsubscribeFunc, } from "home-assistant-js-websocket"; -import { customElement, TemplateResult, html, property } from "lit-element"; -import { HassElement } from "../../../../src/state/hass-element"; -import { - HassMessage, - ConnectMessage, - ShowLovelaceViewMessage, - GetStatusMessage, - ShowDemoMessage, -} from "../../../../src/cast/receiver_messages"; -import { - LovelaceConfig, - getLovelaceCollection, - fetchResources, - LegacyLovelaceConfig, - getLegacyLovelaceCollection, -} from "../../../../src/data/lovelace"; -import "./hc-launch-screen"; -import { castContext } from "../cast_context"; +import { customElement, html, property, TemplateResult } from "lit-element"; import { CAST_NS } from "../../../../src/cast/const"; +import { + ConnectMessage, + GetStatusMessage, + HassMessage, + ShowDemoMessage, + ShowLovelaceViewMessage, +} from "../../../../src/cast/receiver_messages"; import { ReceiverStatusMessage } from "../../../../src/cast/sender_messages"; -import { loadLovelaceResources } from "../../../../src/panels/lovelace/common/load-resources"; -import { isNavigationClick } from "../../../../src/common/dom/is-navigation-click"; import { atLeastVersion } from "../../../../src/common/config/version"; +import { isNavigationClick } from "../../../../src/common/dom/is-navigation-click"; +import { + fetchResources, + getLegacyLovelaceCollection, + getLovelaceCollection, + LegacyLovelaceConfig, + LovelaceConfig, +} from "../../../../src/data/lovelace"; +import { loadLovelaceResources } from "../../../../src/panels/lovelace/common/load-resources"; +import { HassElement } from "../../../../src/state/hass-element"; +import { castContext } from "../cast_context"; +import "./hc-launch-screen"; let resourcesLoaded = false; @@ -40,6 +40,7 @@ export class HcMain extends HassElement { @property() private _error?: string; private _unsubLovelace?: UnsubscribeFunc; + private _urlPath?: string | null; public processIncomingMessage(msg: HassMessage) { @@ -52,16 +53,14 @@ export class HcMain extends HassElement { } else if (msg.type === "show_demo") { this._handleShowDemo(msg); } else { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.warn("unknown msg type", msg); } } protected render(): TemplateResult { if (this._showDemo) { - return html` - - `; + return html` `; } if ( diff --git a/cast/src/receiver/second-load.ts b/cast/src/receiver/second-load.ts index 97d76cdfd1..7fe5d01e02 100644 --- a/cast/src/receiver/second-load.ts +++ b/cast/src/receiver/second-load.ts @@ -1,5 +1,5 @@ import "web-animations-js/web-animations-next-lite.min"; +import "../../../src/components/ha-iconset-svg"; import "../../../src/resources/hass-icons"; import "../../../src/resources/roboto"; -import "../../../src/components/ha-iconset-svg"; import "./layout/hc-lovelace"; diff --git a/demo/src/configs/arsaboo/index.ts b/demo/src/configs/arsaboo/index.ts index 5b31d1cac0..991c0605fe 100644 --- a/demo/src/configs/arsaboo/index.ts +++ b/demo/src/configs/arsaboo/index.ts @@ -1,6 +1,6 @@ import { DemoConfig } from "../types"; -import { demoLovelaceArsaboo } from "./lovelace"; import { demoEntitiesArsaboo } from "./entities"; +import { demoLovelaceArsaboo } from "./lovelace"; import { demoThemeArsaboo } from "./theme"; export const demoArsaboo: DemoConfig = { diff --git a/demo/src/configs/demo-configs.ts b/demo/src/configs/demo-configs.ts index c0bfef2e35..7e586a7c71 100644 --- a/demo/src/configs/demo-configs.ts +++ b/demo/src/configs/demo-configs.ts @@ -21,7 +21,9 @@ export const demoConfigs: Array<() => Promise> = [ ), ]; -export let selectedDemoConfigIndex: number = 0; +// eslint-disable-next-line import/no-mutable-exports +export let selectedDemoConfigIndex = 0; +// eslint-disable-next-line import/no-mutable-exports export let selectedDemoConfig: Promise = demoConfigs[ selectedDemoConfigIndex ](); diff --git a/demo/src/configs/jimpower/index.ts b/demo/src/configs/jimpower/index.ts index c035b22fca..f0c8e24abf 100644 --- a/demo/src/configs/jimpower/index.ts +++ b/demo/src/configs/jimpower/index.ts @@ -1,6 +1,6 @@ import { DemoConfig } from "../types"; -import { demoLovelaceJimpower } from "./lovelace"; import { demoEntitiesJimpower } from "./entities"; +import { demoLovelaceJimpower } from "./lovelace"; import { demoThemeJimpower } from "./theme"; export const demoJimpower: DemoConfig = { diff --git a/demo/src/configs/kernehed/index.ts b/demo/src/configs/kernehed/index.ts index 6c20f83800..3c20f5a7a8 100644 --- a/demo/src/configs/kernehed/index.ts +++ b/demo/src/configs/kernehed/index.ts @@ -1,6 +1,6 @@ import { DemoConfig } from "../types"; -import { demoLovelaceKernehed } from "./lovelace"; import { demoEntitiesKernehed } from "./entities"; +import { demoLovelaceKernehed } from "./lovelace"; import { demoThemeKernehed } from "./theme"; export const demoKernehed: DemoConfig = { diff --git a/demo/src/configs/teachingbirds/index.ts b/demo/src/configs/teachingbirds/index.ts index 380ab6716f..ce1a743dcb 100644 --- a/demo/src/configs/teachingbirds/index.ts +++ b/demo/src/configs/teachingbirds/index.ts @@ -1,6 +1,6 @@ import { DemoConfig } from "../types"; -import { demoLovelaceTeachingbirds } from "./lovelace"; import { demoEntitiesTeachingbirds } from "./entities"; +import { demoLovelaceTeachingbirds } from "./lovelace"; import { demoThemeTeachingbirds } from "./theme"; export const demoTeachingbirds: DemoConfig = { diff --git a/demo/src/configs/types.ts b/demo/src/configs/types.ts index 34ffd8afa7..c0643d65ac 100644 --- a/demo/src/configs/types.ts +++ b/demo/src/configs/types.ts @@ -1,6 +1,6 @@ +import { LocalizeFunc } from "../../../src/common/translations/localize"; import { LovelaceConfig } from "../../../src/data/lovelace"; import { Entity } from "../../../src/fake_data/entity"; -import { LocalizeFunc } from "../../../src/common/translations/localize"; export interface DemoConfig { index?: number; diff --git a/demo/src/custom-cards/card-modder.js b/demo/src/custom-cards/card-modder.js index aaec2b7322..c915a95668 100644 --- a/demo/src/custom-cards/card-modder.js +++ b/demo/src/custom-cards/card-modder.js @@ -1,3 +1,4 @@ +/* eslint-disable */ import { LitElement } from "lit-element"; import "./card-tools"; diff --git a/demo/src/custom-cards/card-tools.js b/demo/src/custom-cards/card-tools.js index 17a9cb9973..39cf7598fb 100644 --- a/demo/src/custom-cards/card-tools.js +++ b/demo/src/custom-cards/card-tools.js @@ -1,4 +1,5 @@ -import { LitElement, html } from "lit-element"; +/* eslint-disable */ +import { html, LitElement } from "lit-element"; if (!window.cardTools) { const version = 0.2; diff --git a/demo/src/custom-cards/cast-demo-row.ts b/demo/src/custom-cards/cast-demo-row.ts index 4a19eaf373..746a0a2eae 100644 --- a/demo/src/custom-cards/cast-demo-row.ts +++ b/demo/src/custom-cards/cast-demo-row.ts @@ -1,21 +1,20 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "../../../src/components/ha-icon"; -import { - LovelaceRow, - CastConfig, -} from "../../../src/panels/lovelace/entity-rows/types"; -import { HomeAssistant } from "../../../src/types"; import { CastManager } from "../../../src/cast/cast_manager"; import { castSendShowDemo } from "../../../src/cast/receiver_messages"; +import "../../../src/components/ha-icon"; +import { + CastConfig, + LovelaceRow, +} from "../../../src/panels/lovelace/entity-rows/types"; +import { HomeAssistant } from "../../../src/types"; @customElement("cast-demo-row") class CastDemoRow extends LitElement implements LovelaceRow { @@ -52,6 +51,8 @@ class CastDemoRow extends LitElement implements LovelaceRow { this.requestUpdate(); }); mgr.castContext.addEventListener( + // eslint-disable-next-line no-undef + // @ts-ignore cast.framework.CastContextEventType.SESSION_STATE_CHANGED, (ev) => { // On Android, opening a new session always results in SESSION_RESUMED. diff --git a/demo/src/custom-cards/ha-demo-card.ts b/demo/src/custom-cards/ha-demo-card.ts index 45c887db9d..aeb248d79a 100644 --- a/demo/src/custom-cards/ha-demo-card.ts +++ b/demo/src/custom-cards/ha-demo-card.ts @@ -1,22 +1,32 @@ -import { LitElement, html, CSSResult, css, property } from "lit-element"; -import { until } from "lit-html/directives/until"; import "@material/mwc-button"; import "@polymer/paper-spinner/paper-spinner-lite"; +import { + css, + CSSResult, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { until } from "lit-html/directives/until"; import "../../../src/components/ha-card"; -import { LovelaceCard, Lovelace } from "../../../src/panels/lovelace/types"; import { LovelaceCardConfig } from "../../../src/data/lovelace"; import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; +import { Lovelace, LovelaceCard } from "../../../src/panels/lovelace/types"; import { demoConfigs, selectedDemoConfig, - setDemoConfig, selectedDemoConfigIndex, + setDemoConfig, } from "../configs/demo-configs"; export class HADemoCard extends LitElement implements LovelaceCard { @property() public lovelace?: Lovelace; + @property() public hass!: MockHomeAssistant; + @property() private _switching?: boolean; + private _hidden = localStorage.hide_demo_card; public getCardSize() { @@ -25,22 +35,21 @@ export class HADemoCard extends LitElement implements LovelaceCard { public setConfig( // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-unused-vars config: LovelaceCardConfig - // tslint:disable-next-line:no-empty + // eslint-disable-next-line @typescript-eslint/no-empty-function ) {} - protected render() { + protected render(): TemplateResult { if (this._hidden) { - return; + return html``; } return html`
${this._switching - ? html` - - ` + ? html` ` : until( selectedDemoConfig.then( (conf) => html` diff --git a/demo/src/entrypoint.ts b/demo/src/entrypoint.ts index bacc0978a8..20fdcb71ab 100644 --- a/demo/src/entrypoint.ts +++ b/demo/src/entrypoint.ts @@ -1,12 +1,10 @@ import "@polymer/paper-styles/typography"; import "@polymer/polymer/lib/elements/dom-if"; import "@polymer/polymer/lib/elements/dom-repeat"; - -import "../../src/resources/hass-icons"; -import "../../src/resources/ha-style"; -import "../../src/resources/roboto"; import "../../src/components/ha-iconset-svg"; - +import "../../src/resources/ha-style"; +import "../../src/resources/hass-icons"; +import "../../src/resources/roboto"; import "./ha-demo"; import "./resources/hademo-icons"; diff --git a/demo/src/ha-demo.ts b/demo/src/ha-demo.ts index 6eb383eb22..6fd33b7f57 100644 --- a/demo/src/ha-demo.ts +++ b/demo/src/ha-demo.ts @@ -1,23 +1,23 @@ -import { HomeAssistantAppEl } from "../../src/layouts/home-assistant"; -import { - provideHass, - MockHomeAssistant, -} from "../../src/fake_data/provide_hass"; +import { isNavigationClick } from "../../src/common/dom/is-navigation-click"; import { navigate } from "../../src/common/navigate"; -import { mockLovelace } from "./stubs/lovelace"; -import { mockAuth } from "./stubs/auth"; +import { + MockHomeAssistant, + provideHass, +} from "../../src/fake_data/provide_hass"; +import { HomeAssistantAppEl } from "../../src/layouts/home-assistant"; +import { HomeAssistant } from "../../src/types"; import { selectedDemoConfig } from "./configs/demo-configs"; -import { mockTranslations } from "./stubs/translations"; +import { mockAuth } from "./stubs/auth"; +import { mockEvents } from "./stubs/events"; +import { mockFrontend } from "./stubs/frontend"; import { mockHistory } from "./stubs/history"; +import { mockLovelace } from "./stubs/lovelace"; +import { mockMediaPlayer } from "./stubs/media_player"; +import { mockPersistentNotification } from "./stubs/persistent_notification"; import { mockShoppingList } from "./stubs/shopping_list"; import { mockSystemLog } from "./stubs/system_log"; import { mockTemplate } from "./stubs/template"; -import { mockEvents } from "./stubs/events"; -import { mockMediaPlayer } from "./stubs/media_player"; -import { HomeAssistant } from "../../src/types"; -import { mockFrontend } from "./stubs/frontend"; -import { mockPersistentNotification } from "./stubs/persistent_notification"; -import { isNavigationClick } from "../../src/common/dom/is-navigation-click"; +import { mockTranslations } from "./stubs/translations"; class HaDemo extends HomeAssistantAppEl { protected async _initialize() { diff --git a/demo/src/html/index.html.template b/demo/src/html/index.html.template index efd18b224f..a9decd4502 100644 --- a/demo/src/html/index.html.template +++ b/demo/src/html/index.html.template @@ -1,5 +1,5 @@ - + diff --git a/demo/src/stubs/history.ts b/demo/src/stubs/history.ts index 84ef96619a..96fd787037 100644 --- a/demo/src/stubs/history.ts +++ b/demo/src/stubs/history.ts @@ -1,5 +1,5 @@ -import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; import { HassEntity } from "home-assistant-js-websocket"; +import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; interface HistoryQueryParams { filter_entity_id: string; @@ -95,7 +95,7 @@ export const mockHistory = (mockHass: MockHomeAssistant) => { const numberState = Number(state.state); if (isNaN(numberState)) { - // tslint:disable-next-line + // eslint-disable-next-line console.log( "Ignoring state with unparsable state but with a unit", entityId, diff --git a/demo/src/stubs/lovelace.ts b/demo/src/stubs/lovelace.ts index 138a15aff4..3928e5eaf0 100644 --- a/demo/src/stubs/lovelace.ts +++ b/demo/src/stubs/lovelace.ts @@ -1,11 +1,9 @@ -import "../custom-cards/ha-demo-card"; -import "../custom-cards/cast-demo-row"; -// Not duplicate, one is for typing. -// tslint:disable-next-line -import { HADemoCard } from "../custom-cards/ha-demo-card"; -import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; +import type { LocalizeFunc } from "../../../src/common/translations/localize"; +import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; import { selectedDemoConfig } from "../configs/demo-configs"; -import { LocalizeFunc } from "../../../src/common/translations/localize"; +import "../custom-cards/cast-demo-row"; +import "../custom-cards/ha-demo-card"; +import type { HADemoCard } from "../custom-cards/ha-demo-card"; export const mockLovelace = ( hass: MockHomeAssistant, @@ -22,12 +20,12 @@ export const mockLovelace = ( }; customElements.whenDefined("hui-view").then(() => { - // tslint:disable-next-line + // eslint-disable-next-line const HUIView = customElements.get("hui-view"); // Patch HUI-VIEW to make the lovelace object available to the demo card const oldCreateCard = HUIView.prototype.createCardElement; - HUIView.prototype.createCardElement = function(config) { + HUIView.prototype.createCardElement = function (config) { const el = oldCreateCard.call(this, config); if (el.tagName === "HA-DEMO-CARD") { (el as HADemoCard).lovelace = this.lovelace; diff --git a/demo/src/stubs/persistent_notification.ts b/demo/src/stubs/persistent_notification.ts index 2dcd4f61bd..b5a2d7223d 100644 --- a/demo/src/stubs/persistent_notification.ts +++ b/demo/src/stubs/persistent_notification.ts @@ -1,5 +1,5 @@ -import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; import { PersistentNotification } from "../../../src/data/persistent_notification"; +import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; export const mockPersistentNotification = (hass: MockHomeAssistant) => { hass.mockWS("persistent_notification/get", () => diff --git a/demo/src/stubs/shopping_list.ts b/demo/src/stubs/shopping_list.ts index 44864e09cd..7b714a6e01 100644 --- a/demo/src/stubs/shopping_list.ts +++ b/demo/src/stubs/shopping_list.ts @@ -1,5 +1,5 @@ -import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; import { ShoppingListItem } from "../../../src/data/shopping-list"; +import { MockHomeAssistant } from "../../../src/fake_data/provide_hass"; let items: ShoppingListItem[] = [ { diff --git a/gallery/src/components/demo-card.js b/gallery/src/components/demo-card.js index c5b7846f39..6a88200a6c 100644 --- a/gallery/src/components/demo-card.js +++ b/gallery/src/components/demo-card.js @@ -1,7 +1,7 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import { safeLoad } from "js-yaml"; - import { createCardElement } from "../../../src/panels/lovelace/create-element/create-card-element"; class DemoCard extends PolymerElement { @@ -59,9 +59,6 @@ class DemoCard extends PolymerElement { ready() { super.ready(); - this.addEventListener("ll-rebuild", () => { - this._configChanged(this.config); - }); } _configChanged(config) { @@ -70,11 +67,31 @@ class DemoCard extends PolymerElement { card.removeChild(card.lastChild); } - const el = createCardElement(safeLoad(config.config)[0]); - el.hass = this.hass; + const el = this._createCardElement(safeLoad(config.config)[0]); card.appendChild(el); } + _createCardElement(cardConfig) { + const element = createCardElement(cardConfig); + if (this.hass) { + element.hass = this.hass; + } + element.addEventListener( + "ll-rebuild", + (ev) => { + ev.stopPropagation(); + this._rebuildCard(element, cardConfig); + }, + { once: true } + ); + return element; + } + + _rebuildCard(cardElToReplace, config) { + const newCardEl = this._createCardElement(config); + cardElToReplace.parentElement.replaceChild(newCardEl, cardElToReplace); + } + _hassChanged(hass) { const card = this.$.card.lastChild; if (card) card.hass = hass; diff --git a/gallery/src/components/demo-cards.js b/gallery/src/components/demo-cards.js index db01c7fe13..5b1c8123ad 100644 --- a/gallery/src/components/demo-cards.js +++ b/gallery/src/components/demo-cards.js @@ -1,9 +1,9 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -import { PolymerElement } from "@polymer/polymer/polymer-element"; import "@polymer/app-layout/app-toolbar/app-toolbar"; - -import "./demo-card"; +import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ +import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../src/components/ha-switch"; +import "./demo-card"; class DemoCards extends PolymerElement { static get template() { diff --git a/gallery/src/components/demo-more-info.js b/gallery/src/components/demo-more-info.js index ce5fda13d8..c1cac68c8b 100644 --- a/gallery/src/components/demo-more-info.js +++ b/gallery/src/components/demo-more-info.js @@ -1,9 +1,9 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../src/state-summary/state-card-content"; -import "../../../src/dialogs/more-info/controls/more-info-content"; import "../../../src/components/ha-card"; +import "../../../src/dialogs/more-info/controls/more-info-content"; +import "../../../src/state-summary/state-card-content"; class DemoMoreInfo extends PolymerElement { static get template() { diff --git a/gallery/src/components/demo-more-infos.js b/gallery/src/components/demo-more-infos.js index 8f82e2a8ab..f1de5f0908 100644 --- a/gallery/src/components/demo-more-infos.js +++ b/gallery/src/components/demo-more-infos.js @@ -1,9 +1,9 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -import { PolymerElement } from "@polymer/polymer/polymer-element"; import "@polymer/app-layout/app-toolbar/app-toolbar"; - -import "./demo-more-info"; +import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ +import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../../src/components/ha-switch"; +import "./demo-more-info"; class DemoMoreInfos extends PolymerElement { static get template() { diff --git a/gallery/src/demos/demo-hui-alarm-panel-card.ts b/gallery/src/demos/demo-hui-alarm-panel-card.ts index ac8b7e5def..12b5f130b4 100644 --- a/gallery/src/demos/demo-hui-alarm-panel-card.ts +++ b/gallery/src/demos/demo-hui-alarm-panel-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -12,6 +12,9 @@ const ENTITIES = [ getEntity("alarm_control_panel", "alarm_armed", "armed_home", { friendly_name: "Alarm", }), + getEntity("alarm_control_panel", "unavailable", "unavailable", { + friendly_name: "Alarm", + }), ]; const CONFIGS = [ @@ -39,6 +42,15 @@ const CONFIGS = [ - arm_home `, }, + { + heading: "Unavailable", + config: ` +- type: alarm-panel + entity: alarm_control_panel.unavailable + states: + - arm_home + `, + }, { heading: "Invalid Entity", config: ` @@ -72,6 +84,7 @@ class DemoAlarmPanelEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-conditional-card.ts b/gallery/src/demos/demo-hui-conditional-card.ts index d2fe9d88c0..e5ce595f91 100644 --- a/gallery/src/demos/demo-hui-conditional-card.ts +++ b/gallery/src/demos/demo-hui-conditional-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -77,6 +77,7 @@ class DemoConditional extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-entities-card.ts b/gallery/src/demos/demo-hui-entities-card.ts index 7e1e680763..bb0261e9d5 100644 --- a/gallery/src/demos/demo-hui-entities-card.ts +++ b/gallery/src/demos/demo-hui-entities-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -60,6 +60,36 @@ const ENTITIES = [ friendly_name: "Allowed Noise", icon: "mdi:bell-ring", }), + getEntity("light", "unavailable", "unavailable", { + friendly_name: "Bed Light", + }), + getEntity("lock", "unavailable", "unavailable", { + friendly_name: "Kitchen Door", + }), + getEntity("cover", "unavailable", "unavailable", { + friendly_name: "Kitchen Window", + supported_features: 11, + }), + getEntity("scene", "unavailable", "unavailable", { + friendly_name: "Romantic lights", + }), + getEntity("device_tracker", "unavailable", "unavailable", { + friendly_name: "Paulus", + }), + getEntity("climate", "unavailable", "unavailable", { + unit_of_measurement: "°F", + friendly_name: "Ecobee", + supported_features: 1014, + }), + getEntity("input_number", "unavailable", "unavailable", { + friendly_name: "Allowed Noise", + icon: "mdi:bell-ring", + }), + getEntity("input_select", "unavailable", "unavailable", { + unit_of_measurement: "dB", + friendly_name: "Who cooks", + icon: "mdi:cheff", + }), ]; const CONFIGS = [ @@ -121,6 +151,21 @@ const CONFIGS = [ title: Random group `, }, + { + heading: "Unavailable", + config: ` +- type: entities + entities: + - scene.unavailable + - device_tracker.unavailable + - cover.unavailable + - lock.unavailable + - light.unavailable + - climate.unavailable + - input_number.unavailable + - input_select.unavailable + `, + }, { heading: "Custom name, secondary info, custom icon", config: ` @@ -174,9 +219,7 @@ const CONFIGS = [ class DemoEntities extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -191,6 +234,7 @@ class DemoEntities extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-entity-button-card.ts b/gallery/src/demos/demo-hui-entity-button-card.ts index 254dc3f006..8c4c77e100 100644 --- a/gallery/src/demos/demo-hui-entity-button-card.ts +++ b/gallery/src/demos/demo-hui-entity-button-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -93,6 +93,7 @@ class DemoButtonEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-entity-filter-card.ts b/gallery/src/demos/demo-hui-entity-filter-card.ts index a428330f8e..66a0c08b70 100644 --- a/gallery/src/demos/demo-hui-entity-filter-card.ts +++ b/gallery/src/demos/demo-hui-entity-filter-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -91,9 +91,7 @@ const CONFIGS = [ class DemoFilter extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -108,6 +106,7 @@ class DemoFilter extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-gauge-card.ts b/gallery/src/demos/demo-hui-gauge-card.ts index 5f5e43644f..2963cab228 100644 --- a/gallery/src/demos/demo-hui-gauge-card.ts +++ b/gallery/src/demos/demo-hui-gauge-card.ts @@ -1,9 +1,9 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../components/demo-cards"; import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; +import "../components/demo-cards"; const ENTITIES = [ getEntity("sensor", "brightness", "12", {}), @@ -78,9 +78,7 @@ const CONFIGS = [ class DemoGaugeEntity extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -95,6 +93,7 @@ class DemoGaugeEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-glance-card.ts b/gallery/src/demos/demo-hui-glance-card.ts index 98ef7b0be3..5455232a3d 100644 --- a/gallery/src/demos/demo-hui-glance-card.ts +++ b/gallery/src/demos/demo-hui-glance-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -220,9 +220,7 @@ const CONFIGS = [ class DemoPicEntity extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -237,6 +235,7 @@ class DemoPicEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-iframe-card.ts b/gallery/src/demos/demo-hui-iframe-card.ts index d7651473b1..596f6d302f 100644 --- a/gallery/src/demos/demo-hui-iframe-card.ts +++ b/gallery/src/demos/demo-hui-iframe-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/demo-cards"; const CONFIGS = [ @@ -39,9 +39,7 @@ const CONFIGS = [ class DemoIframe extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { diff --git a/gallery/src/demos/demo-hui-light-card.ts b/gallery/src/demos/demo-hui-light-card.ts index 775d7423c3..552bb2b0df 100644 --- a/gallery/src/demos/demo-hui-light-card.ts +++ b/gallery/src/demos/demo-hui-light-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -10,6 +10,12 @@ const ENTITIES = [ friendly_name: "Bed Light", brightness: 130, }), + getEntity("light", "dim", "off", { + supported_features: 1, + }), + getEntity("light", "unavailable", "unavailable", { + supported_features: 1, + }), ]; const CONFIGS = [ @@ -20,13 +26,32 @@ const CONFIGS = [ entity: light.bed_light `, }, + { + heading: "Dim", + config: ` +- type: light + entity: light.dim + `, + }, + { + heading: "Unavailable", + config: ` +- type: light + entity: light.unavailable + `, + }, + { + heading: "Non existing", + config: ` +- type: light + entity: light.nonexisting + `, + }, ]; class DemoLightEntity extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -41,6 +66,7 @@ class DemoLightEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-map-card.ts b/gallery/src/demos/demo-hui-map-card.ts index 5979cdb393..df4c8844db 100644 --- a/gallery/src/demos/demo-hui-map-card.ts +++ b/gallery/src/demos/demo-hui-map-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -185,6 +185,7 @@ class DemoMap extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-markdown-card.ts b/gallery/src/demos/demo-hui-markdown-card.ts index fe0ca6d175..07e974316e 100644 --- a/gallery/src/demos/demo-hui-markdown-card.ts +++ b/gallery/src/demos/demo-hui-markdown-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/demo-cards"; const CONFIGS = [ @@ -254,9 +254,7 @@ const CONFIGS = [ class DemoMarkdown extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { diff --git a/gallery/src/demos/demo-hui-media-control-card.ts b/gallery/src/demos/demo-hui-media-control-card.ts index f79284a13f..a26a13a8a3 100644 --- a/gallery/src/demos/demo-hui-media-control-card.ts +++ b/gallery/src/demos/demo-hui-media-control-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; import { createMediaPlayerEntities } from "../data/media_players"; @@ -109,6 +109,7 @@ class DemoHuiMediControlCard extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(createMediaPlayerEntities()); } } diff --git a/gallery/src/demos/demo-hui-media-player-rows.ts b/gallery/src/demos/demo-hui-media-player-rows.ts index 5cf708cb9f..1077e7a7b8 100644 --- a/gallery/src/demos/demo-hui-media-player-rows.ts +++ b/gallery/src/demos/demo-hui-media-player-rows.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; import { createMediaPlayerEntities } from "../data/media_players"; @@ -57,6 +57,7 @@ class DemoHuiMediaPlayerRows extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(createMediaPlayerEntities()); } } diff --git a/gallery/src/demos/demo-hui-picture-elements-card.ts b/gallery/src/demos/demo-hui-picture-elements-card.ts index f231efc860..bed6be4c47 100644 --- a/gallery/src/demos/demo-hui-picture-elements-card.ts +++ b/gallery/src/demos/demo-hui-picture-elements-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -129,9 +129,7 @@ const CONFIGS = [ class DemoPicElements extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -146,6 +144,7 @@ class DemoPicElements extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-picture-entity-card.ts b/gallery/src/demos/demo-hui-picture-entity-card.ts index 1378707e45..d4df8f31f4 100644 --- a/gallery/src/demos/demo-hui-picture-entity-card.ts +++ b/gallery/src/demos/demo-hui-picture-entity-card.ts @@ -1,9 +1,9 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../components/demo-cards"; -import { provideHass } from "../../../src/fake_data/provide_hass"; import { getEntity } from "../../../src/fake_data/entity"; +import { provideHass } from "../../../src/fake_data/provide_hass"; +import "../components/demo-cards"; const ENTITIES = [ getEntity("light", "kitchen_lights", "on", { @@ -82,9 +82,7 @@ const CONFIGS = [ class DemoPicEntity extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -99,6 +97,7 @@ class DemoPicEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-picture-glance-card.ts b/gallery/src/demos/demo-hui-picture-glance-card.ts index faae58bd7b..684aaa2071 100644 --- a/gallery/src/demos/demo-hui-picture-glance-card.ts +++ b/gallery/src/demos/demo-hui-picture-glance-card.ts @@ -1,9 +1,9 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../components/demo-cards"; import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; +import "../components/demo-cards"; const ENTITIES = [ getEntity("switch", "decorative_lights", "on", { @@ -123,9 +123,7 @@ const CONFIGS = [ class DemoPicGlance extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -140,6 +138,7 @@ class DemoPicGlance extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-shopping-list-card.ts b/gallery/src/demos/demo-hui-shopping-list-card.ts index 8d62b43838..9abb1afc1e 100644 --- a/gallery/src/demos/demo-hui-shopping-list-card.ts +++ b/gallery/src/demos/demo-hui-shopping-list-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -22,9 +22,7 @@ const CONFIGS = [ class DemoShoppingListEntity extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -39,6 +37,7 @@ class DemoShoppingListEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.mockAPI("shopping_list", () => [ { name: "list", id: 1, complete: false }, diff --git a/gallery/src/demos/demo-hui-stack-card.ts b/gallery/src/demos/demo-hui-stack-card.ts index e34911f939..b746888dc1 100644 --- a/gallery/src/demos/demo-hui-stack-card.ts +++ b/gallery/src/demos/demo-hui-stack-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -93,9 +93,7 @@ const CONFIGS = [ class DemoStack extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -110,6 +108,7 @@ class DemoStack extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-hui-thermostat-card.ts b/gallery/src/demos/demo-hui-thermostat-card.ts index 45124374e0..81b344e689 100644 --- a/gallery/src/demos/demo-hui-thermostat-card.ts +++ b/gallery/src/demos/demo-hui-thermostat-card.ts @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-cards"; @@ -36,6 +36,9 @@ const ENTITIES = [ friendly_name: "Nest", supported_features: 43, }), + getEntity("climate", "unavailable", "unavailable", { + supported_features: 43, + }), ]; const CONFIGS = [ @@ -55,13 +58,25 @@ const CONFIGS = [ entity: climate.nest `, }, + { + heading: "Unavailable", + config: ` +- type: thermostat + entity: climate.unavailable + `, + }, + { + heading: "Non existing", + config: ` +- type: thermostat + entity: climate.nonexisting + `, + }, ]; class DemoThermostatEntity extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { @@ -76,6 +91,7 @@ class DemoThermostatEntity extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this.$.demos); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-more-info-light.ts b/gallery/src/demos/demo-more-info-light.ts index 07d9526007..67cd631b87 100644 --- a/gallery/src/demos/demo-more-info-light.ts +++ b/gallery/src/demos/demo-more-info-light.ts @@ -1,14 +1,12 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../src/dialogs/more-info/controls/more-info-content"; import "../../../src/components/ha-card"; - +import { SUPPORT_BRIGHTNESS } from "../../../src/data/light"; +import "../../../src/dialogs/more-info/controls/more-info-content"; import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; - import "../components/demo-more-infos"; -import { SUPPORT_BRIGHTNESS } from "../../../src/data/light"; const ENTITIES = [ getEntity("light", "bed_light", "on", { @@ -43,6 +41,7 @@ class DemoMoreInfoLight extends PolymerElement { public ready() { super.ready(); const hass = provideHass(this); + hass.updateTranslations(null, "en"); hass.addEntities(ENTITIES); } } diff --git a/gallery/src/demos/demo-util-long-press.ts b/gallery/src/demos/demo-util-long-press.ts index b1da49043e..518af1df39 100644 --- a/gallery/src/demos/demo-util-long-press.ts +++ b/gallery/src/demos/demo-util-long-press.ts @@ -1,9 +1,8 @@ -import { html, LitElement, TemplateResult } from "lit-element"; import "@material/mwc-button"; - +import { html, LitElement, TemplateResult } from "lit-element"; import "../../../src/components/ha-card"; -import { actionHandler } from "../../../src/panels/lovelace/common/directives/action-handler-directive"; import { ActionHandlerEvent } from "../../../src/data/lovelace"; +import { actionHandler } from "../../../src/panels/lovelace/common/directives/action-handler-directive"; export class DemoUtilLongPress extends LitElement { protected render(): TemplateResult { diff --git a/gallery/src/entrypoint.js b/gallery/src/entrypoint.js index 6e656edc98..4cf309e612 100644 --- a/gallery/src/entrypoint.js +++ b/gallery/src/entrypoint.js @@ -1,12 +1,10 @@ import "@polymer/paper-styles/typography"; import "@polymer/polymer/lib/elements/dom-if"; import "@polymer/polymer/lib/elements/dom-repeat"; - -import "../../src/resources/hass-icons"; -import "../../src/resources/ha-style"; -import "../../src/resources/roboto"; import "../../src/components/ha-iconset-svg"; - +import "../../src/resources/ha-style"; +import "../../src/resources/hass-icons"; +import "../../src/resources/roboto"; import "./ha-gallery"; document.body.appendChild(document.createElement("ha-gallery")); diff --git a/gallery/src/ha-gallery.js b/gallery/src/ha-gallery.js index a53fa66462..1c68e07e33 100644 --- a/gallery/src/ha-gallery.js +++ b/gallery/src/ha-gallery.js @@ -2,15 +2,16 @@ import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/iron-icon/iron-icon"; +import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; -import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../src/managers/notification-manager"; import "../../src/components/ha-card"; +import "../../src/managers/notification-manager"; +// eslint-disable-next-line no-undef const DEMOS = require.context("./demos", true, /^(.*\.(ts$))[^.]*$/im); const fixPath = (path) => path.substr(2, path.length - 5); diff --git a/hassio/src/addon-store/hassio-addon-repository.ts b/hassio/src/addon-store/hassio-addon-repository.ts index 5ff2ee32ee..080d4a3d77 100644 --- a/hassio/src/addon-store/hassio-addon-repository.ts +++ b/hassio/src/addon-store/hassio-addon-repository.ts @@ -1,29 +1,31 @@ +import "@polymer/paper-card/paper-card"; import { css, - TemplateResult, + CSSResultArray, html, LitElement, property, - CSSResultArray, + TemplateResult, } from "lit-element"; -import "@polymer/paper-card/paper-card"; import memoizeOne from "memoize-one"; - -import "../components/hassio-card-content"; -import { hassioStyle } from "../resources/hassio-style"; -import { HomeAssistant } from "../../../src/types"; +import { atLeastVersion } from "../../../src/common/config/version"; +import { navigate } from "../../../src/common/navigate"; import { HassioAddonInfo, HassioAddonRepository, } from "../../../src/data/hassio/addon"; -import { navigate } from "../../../src/common/navigate"; +import { HomeAssistant } from "../../../src/types"; +import "../components/hassio-card-content"; import { filterAndSort } from "../components/hassio-filter-addons"; -import { atLeastVersion } from "../../../src/common/config/version"; +import { hassioStyle } from "../resources/hassio-style"; class HassioAddonRepositoryEl extends LitElement { @property() public hass!: HomeAssistant; + @property() public repo!: HassioAddonRepository; + @property() public addons!: HassioAddonInfo[]; + @property() public filter!: string; private _getAddons = memoizeOne( @@ -64,52 +66,57 @@ class HassioAddonRepositoryEl extends LitElement {
${addons.map( (addon) => html` - -
- -
-
+ ${addon.advanced && !this.hass.userData?.showAdvanced + ? "" + : html` + +
+ +
+
+ `} ` )}
diff --git a/hassio/src/addon-store/hassio-addon-store.ts b/hassio/src/addon-store/hassio-addon-store.ts index 628ef2bef9..5d9093c90c 100644 --- a/hassio/src/addon-store/hassio-addon-store.ts +++ b/hassio/src/addon-store/hassio-addon-store.ts @@ -1,22 +1,22 @@ -import "./hassio-addon-repository"; -import "./hassio-repositories-editor"; -import { TemplateResult, html } from "lit-html"; import { - LitElement, - CSSResult, css, + CSSResult, + LitElement, property, PropertyValues, } from "lit-element"; -import { HomeAssistant } from "../../../src/types"; +import { html, TemplateResult } from "lit-html"; import { - HassioAddonRepository, - HassioAddonInfo, fetchHassioAddonsInfo, + HassioAddonInfo, + HassioAddonRepository, reloadHassioAddons, } from "../../../src/data/hassio/addon"; import "../../../src/layouts/loading-screen"; +import { HomeAssistant } from "../../../src/types"; import "../components/hassio-search-input"; +import "./hassio-addon-repository"; +import "./hassio-repositories-editor"; const sortRepos = (a: HassioAddonRepository, b: HassioAddonRepository) => { if (a.slug === "local") { @@ -36,8 +36,11 @@ const sortRepos = (a: HassioAddonRepository, b: HassioAddonRepository) => { class HassioAddonStore extends LitElement { @property() public hass!: HomeAssistant; + @property() private _addons?: HassioAddonInfo[]; + @property() private _repos?: HassioAddonRepository[]; + @property() private _filter?: string; public async refreshData() { @@ -50,9 +53,7 @@ class HassioAddonStore extends LitElement { protected render(): TemplateResult { if (!this._addons || !this._repos) { - return html` - - `; + return html` `; } const repos: TemplateResult[] = []; diff --git a/hassio/src/addon-store/hassio-repositories-editor.ts b/hassio/src/addon-store/hassio-repositories-editor.ts index 27241482b4..1a23949cdf 100644 --- a/hassio/src/addon-store/hassio-repositories-editor.ts +++ b/hassio/src/addon-store/hassio-repositories-editor.ts @@ -1,30 +1,31 @@ -import { - LitElement, - html, - CSSResultArray, - css, - property, - TemplateResult, - customElement, - PropertyValues, -} from "lit-element"; import "@polymer/iron-icon/iron-icon"; import "@polymer/paper-card/paper-card"; import "@polymer/paper-input/paper-input"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { repeat } from "lit-html/directives/repeat"; import memoizeOne from "memoize-one"; - import "../../../src/components/buttons/ha-call-api-button"; -import "../components/hassio-card-content"; -import { hassioStyle } from "../resources/hassio-style"; -import { HomeAssistant } from "../../../src/types"; import { HassioAddonRepository } from "../../../src/data/hassio/addon"; import { PolymerChangedEvent } from "../../../src/polymer-types"; -import { repeat } from "lit-html/directives/repeat"; +import { HomeAssistant } from "../../../src/types"; +import "../components/hassio-card-content"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-repositories-editor") class HassioRepositoriesEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public repos!: HassioAddonRepository[]; + @property() private _repoUrl = ""; private _sortedRepos = memoizeOne((repos: HassioAddonRepository[]) => diff --git a/hassio/src/addon-view/hassio-addon-audio.ts b/hassio/src/addon-view/hassio-addon-audio.ts index eeda1084a5..2a087ff351 100644 --- a/hassio/src/addon-view/hassio-addon-audio.ts +++ b/hassio/src/addon-view/hassio-addon-audio.ts @@ -1,5 +1,3 @@ -import "web-animations-js/web-animations-next-lite.min"; - import "@material/mwc-button"; import "@polymer/paper-card/paper-card"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; @@ -15,39 +13,41 @@ import { PropertyValues, TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../src/types"; +import "web-animations-js/web-animations-next-lite.min"; import { HassioAddonDetails, - setHassioAddonOption, HassioAddonSetOptionParams, + setHassioAddonOption, } from "../../../src/data/hassio/addon"; import { - HassioHardwareAudioDevice, fetchHassioHardwareAudio, + HassioHardwareAudioDevice, } from "../../../src/data/hassio/hardware"; -import { hassioStyle } from "../resources/hassio-style"; import { haStyle } from "../../../src/resources/styles"; +import { HomeAssistant } from "../../../src/types"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-addon-audio") class HassioAddonAudio extends LitElement { @property() public hass!: HomeAssistant; + @property() public addon!: HassioAddonDetails; + @property() private _error?: string; + @property() private _inputDevices?: HassioHardwareAudioDevice[]; + @property() private _outputDevices?: HassioHardwareAudioDevice[]; + @property() private _selectedInput!: null | string; + @property() private _selectedOutput!: null | string; protected render(): TemplateResult { return html`
- ${this._error - ? html` -
${this._error}
- ` - : ""} + ${this._error ? html`
${this._error}
` : ""} ${this._inputDevices && - this._inputDevices.map((item) => { - return html` - ${item.name} - `; - })} + this._inputDevices.map((item) => { + return html` + ${item.name} + `; + })} ${this._outputDevices && - this._outputDevices.map((item) => { - return html` - ${item.name} - `; - })} + this._outputDevices.map((item) => { + return html` + ${item.name} + `; + })}
diff --git a/hassio/src/addon-view/hassio-addon-config.ts b/hassio/src/addon-view/hassio-addon-config.ts index 1a91052163..5d18556ecc 100644 --- a/hassio/src/addon-view/hassio-addon-config.ts +++ b/hassio/src/addon-view/hassio-addon-config.ts @@ -1,5 +1,5 @@ -import "@polymer/iron-autogrow-textarea/iron-autogrow-textarea"; import "@material/mwc-button"; +import "@polymer/iron-autogrow-textarea/iron-autogrow-textarea"; import "@polymer/paper-card/paper-card"; import { css, @@ -9,29 +9,30 @@ import { LitElement, property, PropertyValues, - TemplateResult, query, + TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../src/types"; -import { - HassioAddonDetails, - setHassioAddonOption, - HassioAddonSetOptionParams, -} from "../../../src/data/hassio/addon"; -import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; import { fireEvent } from "../../../src/common/dom/fire_event"; import "../../../src/components/ha-yaml-editor"; -// tslint:disable-next-line: no-duplicate-imports -import { HaYamlEditor } from "../../../src/components/ha-yaml-editor"; +import type { HaYamlEditor } from "../../../src/components/ha-yaml-editor"; +import { + HassioAddonDetails, + HassioAddonSetOptionParams, + setHassioAddonOption, +} from "../../../src/data/hassio/addon"; import { showConfirmationDialog } from "../../../src/dialogs/generic/show-dialog-box"; +import { haStyle } from "../../../src/resources/styles"; +import type { HomeAssistant } from "../../../src/types"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-addon-config") class HassioAddonConfig extends LitElement { @property() public hass!: HomeAssistant; + @property() public addon!: HassioAddonDetails; + @property() private _error?: string; + @property({ type: Boolean }) private _configHasChanged = false; @query("ha-yaml-editor") private _editor!: HaYamlEditor; @@ -47,16 +48,8 @@ class HassioAddonConfig extends LitElement { - ${this._error - ? html` -
${this._error}
- ` - : ""} - ${valid - ? "" - : html` -
Invalid YAML
- `} + ${this._error ? html`
${this._error}
` : ""} + ${valid ? "" : html`
Invalid YAML
`}
@@ -140,8 +133,9 @@ class HassioAddonConfig extends LitElement { }; fireEvent(this, "hass-api-called", eventdata); } catch (err) { - this._error = `Failed to reset addon configuration, ${err.body?.message || - err}`; + this._error = `Failed to reset addon configuration, ${ + err.body?.message || err + }`; } } @@ -166,8 +160,9 @@ class HassioAddonConfig extends LitElement { }; fireEvent(this, "hass-api-called", eventdata); } catch (err) { - this._error = `Failed to save addon configuration, ${err.body?.message || - err}`; + this._error = `Failed to save addon configuration, ${ + err.body?.message || err + }`; } } } diff --git a/hassio/src/addon-view/hassio-addon-info.ts b/hassio/src/addon-view/hassio-addon-info.ts index 04b736f34f..1395a3ee43 100644 --- a/hassio/src/addon-view/hassio-addon-info.ts +++ b/hassio/src/addon-view/hassio-addon-info.ts @@ -12,31 +12,29 @@ import { TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; - +import { atLeastVersion } from "../../../src/common/config/version"; +import { fireEvent } from "../../../src/common/dom/fire_event"; +import { navigate } from "../../../src/common/navigate"; import "../../../src/components/buttons/ha-call-api-button"; import "../../../src/components/buttons/ha-progress-button"; import "../../../src/components/ha-label-badge"; import "../../../src/components/ha-markdown"; import "../../../src/components/ha-switch"; -import "../components/hassio-card-content"; - -import { fireEvent } from "../../../src/common/dom/fire_event"; import { + fetchHassioAddonChangelog, HassioAddonDetails, HassioAddonSetOptionParams, HassioAddonSetSecurityParams, + installHassioAddon, setHassioAddonOption, setHassioAddonSecurity, uninstallHassioAddon, - installHassioAddon, - fetchHassioAddonChangelog, } from "../../../src/data/hassio/addon"; -import { hassioStyle } from "../resources/hassio-style"; import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; -import { navigate } from "../../../src/common/navigate"; +import "../components/hassio-card-content"; import { showHassioMarkdownDialog } from "../dialogs/markdown/show-dialog-hassio-markdown"; -import { atLeastVersion } from "../../../src/common/config/version"; +import { hassioStyle } from "../resources/hassio-style"; const PERMIS_DESC = { rating: { @@ -94,8 +92,11 @@ const PERMIS_DESC = { @customElement("hassio-addon-info") class HassioAddonInfo extends LitElement { @property() public hass!: HomeAssistant; + @property() public addon!: HassioAddonDetails; + @property() private _error?: string; + @property({ type: Boolean }) private _installing = false; protected render(): TemplateResult { @@ -178,9 +179,7 @@ class HassioAddonInfo extends LitElement { > `} ` - : html` - ${this.addon.version_latest} - `} + : html` ${this.addon.version_latest} `}
@@ -379,11 +378,7 @@ class HassioAddonInfo extends LitElement { : ""} ` : ""} - ${this._error - ? html` -
${this._error}
- ` - : ""} + ${this._error ? html`
${this._error}
` : ""}
${this.addon.version @@ -721,8 +716,9 @@ class HassioAddonInfo extends LitElement { }; fireEvent(this, "hass-api-called", eventdata); } catch (err) { - this._error = `Failed to set addon security option, ${err.body?.message || - err}`; + this._error = `Failed to set addon security option, ${ + err.body?.message || err + }`; } } @@ -756,8 +752,9 @@ class HassioAddonInfo extends LitElement { content, }); } catch (err) { - this._error = `Failed to get addon changelog, ${err.body?.message || - err}`; + this._error = `Failed to get addon changelog, ${ + err.body?.message || err + }`; } } diff --git a/hassio/src/addon-view/hassio-addon-logs.ts b/hassio/src/addon-view/hassio-addon-logs.ts index 0f568df2c7..b5ad7f38e9 100644 --- a/hassio/src/addon-view/hassio-addon-logs.ts +++ b/hassio/src/addon-view/hassio-addon-logs.ts @@ -7,23 +7,26 @@ import { html, LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../src/types"; import { - HassioAddonDetails, fetchHassioAddonLogs, + HassioAddonDetails, } from "../../../src/data/hassio/addon"; +import { haStyle } from "../../../src/resources/styles"; +import { HomeAssistant } from "../../../src/types"; import { ANSI_HTML_STYLE, parseTextToColoredPre } from "../ansi-to-html"; import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; @customElement("hassio-addon-logs") class HassioAddonLogs extends LitElement { @property() public hass!: HomeAssistant; + @property() public addon!: HassioAddonDetails; + @property() private _error?: string; + @query("#content") private _logContent!: any; public async connectedCallback(): Promise { @@ -34,11 +37,7 @@ class HassioAddonLogs extends LitElement { protected render(): TemplateResult { return html` - ${this._error - ? html` -
${this._error}
- ` - : ""} + ${this._error ? html`
${this._error}
` : ""}
Refresh diff --git a/hassio/src/addon-view/hassio-addon-network.ts b/hassio/src/addon-view/hassio-addon-network.ts index 2ad9e008a7..914157438f 100644 --- a/hassio/src/addon-view/hassio-addon-network.ts +++ b/hassio/src/addon-view/hassio-addon-network.ts @@ -1,4 +1,5 @@ import "@polymer/paper-card/paper-card"; +import { PaperInputElement } from "@polymer/paper-input/paper-input"; import { css, CSSResult, @@ -9,18 +10,15 @@ import { PropertyValues, TemplateResult, } from "lit-element"; - -import { PaperInputElement } from "@polymer/paper-input/paper-input"; - -import { HomeAssistant } from "../../../src/types"; +import { fireEvent } from "../../../src/common/dom/fire_event"; import { HassioAddonDetails, HassioAddonSetOptionParams, setHassioAddonOption, } from "../../../src/data/hassio/addon"; -import { hassioStyle } from "../resources/hassio-style"; import { haStyle } from "../../../src/resources/styles"; -import { fireEvent } from "../../../src/common/dom/fire_event"; +import { HomeAssistant } from "../../../src/types"; +import { hassioStyle } from "../resources/hassio-style"; interface NetworkItem { description: string; @@ -35,8 +33,11 @@ interface NetworkItemInput extends PaperInputElement { @customElement("hassio-addon-network") class HassioAddonNetwork extends LitElement { @property() public hass!: HomeAssistant; + @property() public addon!: HassioAddonDetails; + @property() private _error?: string; + @property() private _config?: NetworkItem[]; public connectedCallback(): void { @@ -52,11 +53,7 @@ class HassioAddonNetwork extends LitElement { return html`
- ${this._error - ? html` -
${this._error}
- ` - : ""} + ${this._error ? html`
${this._error}
` : ""} @@ -164,8 +161,9 @@ class HassioAddonNetwork extends LitElement { }; fireEvent(this, "hass-api-called", eventdata); } catch (err) { - this._error = `Failed to set addon network configuration, ${err.body - ?.message || err}`; + this._error = `Failed to set addon network configuration, ${ + err.body?.message || err + }`; } } @@ -189,8 +187,9 @@ class HassioAddonNetwork extends LitElement { }; fireEvent(this, "hass-api-called", eventdata); } catch (err) { - this._error = `Failed to set addon network configuration, ${err.body - ?.message || err}`; + this._error = `Failed to set addon network configuration, ${ + err.body?.message || err + }`; } } } diff --git a/hassio/src/addon-view/hassio-addon-view.ts b/hassio/src/addon-view/hassio-addon-view.ts index 4f5b2cfd70..50dff7aa21 100644 --- a/hassio/src/addon-view/hassio-addon-view.ts +++ b/hassio/src/addon-view/hassio-addon-view.ts @@ -12,15 +12,13 @@ import { property, TemplateResult, } from "lit-element"; - -import { HomeAssistant, Route } from "../../../src/types"; import { - HassioAddonDetails, fetchHassioAddonInfo, + HassioAddonDetails, } from "../../../src/data/hassio/addon"; -import { hassioStyle } from "../resources/hassio-style"; import { haStyle } from "../../../src/resources/styles"; - +import { HomeAssistant, Route } from "../../../src/types"; +import { hassioStyle } from "../resources/hassio-style"; import "./hassio-addon-audio"; import "./hassio-addon-config"; import "./hassio-addon-info"; @@ -30,14 +28,14 @@ import "./hassio-addon-network"; @customElement("hassio-addon-view") class HassioAddonView extends LitElement { @property() public hass!: HomeAssistant; + @property() public route!: Route; + @property() public addon?: HassioAddonDetails; protected render(): TemplateResult { if (!this.addon) { - return html` - - `; + return html` `; } return html` diff --git a/hassio/src/ansi-to-html.ts b/hassio/src/ansi-to-html.ts index cbe66946bc..0601f5ba5a 100644 --- a/hassio/src/ansi-to-html.ts +++ b/hassio/src/ansi-to-html.ts @@ -112,7 +112,7 @@ export function parseTextToColoredPre(text) { /* eslint-disable no-cond-assign */ let match; - // tslint:disable-next-line + // eslint-disable-next-line while ((match = re.exec(text)) !== null) { const j = match!.index; addSpan(text.substring(i, j)); diff --git a/hassio/src/components/hassio-card-content.ts b/hassio/src/components/hassio-card-content.ts index 737c36edc3..a2174a77e9 100644 --- a/hassio/src/components/hassio-card-content.ts +++ b/hassio/src/components/hassio-card-content.ts @@ -1,37 +1,44 @@ -import { - LitElement, - TemplateResult, - html, - CSSResult, - css, - property, - customElement, -} from "lit-element"; import "@polymer/iron-icon/iron-icon"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../src/components/ha-relative-time"; import { HomeAssistant } from "../../../src/types"; @customElement("hassio-card-content") class HassioCardContent extends LitElement { @property() public hass!: HomeAssistant; + @property() public title!: string; + @property() public description?: string; - @property({ type: Boolean }) public available: boolean = true; - @property({ type: Boolean }) public showTopbar: boolean = false; + + @property({ type: Boolean }) public available = true; + + @property({ type: Boolean }) public showTopbar = false; + @property() public topbarClass?: string; + @property() public datetime?: string; + @property() public iconTitle?: string; + @property() public iconClass?: string; + @property() public icon = "hass:help-circle"; + @property() public iconImage?: string; protected render(): TemplateResult { return html` ${this.showTopbar - ? html` -
- ` + ? html`
` : ""} ${this.iconImage ? html` diff --git a/hassio/src/components/hassio-filter-addons.ts b/hassio/src/components/hassio-filter-addons.ts index 25eb72e5c3..270c8e7612 100644 --- a/hassio/src/components/hassio-filter-addons.ts +++ b/hassio/src/components/hassio-filter-addons.ts @@ -1,5 +1,5 @@ -import { HassioAddonInfo } from "../../../src/data/hassio/addon"; import * as Fuse from "fuse.js"; +import { HassioAddonInfo } from "../../../src/data/hassio/addon"; export function filterAndSort(addons: HassioAddonInfo[], filter: string) { const options: Fuse.FuseOptions = { diff --git a/hassio/src/components/hassio-search-input.ts b/hassio/src/components/hassio-search-input.ts index bfd55eff0e..ba4ac7c229 100644 --- a/hassio/src/components/hassio-search-input.ts +++ b/hassio/src/components/hassio-search-input.ts @@ -1,4 +1,7 @@ -import { TemplateResult, html } from "lit-html"; +import "@material/mwc-button"; +import "@polymer/iron-icon/iron-icon"; +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-input/paper-input"; import { css, CSSResult, @@ -6,11 +9,8 @@ import { LitElement, property, } from "lit-element"; +import { html, TemplateResult } from "lit-html"; import { fireEvent } from "../../../src/common/dom/fire_event"; -import "@polymer/iron-icon/iron-icon"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-icon-button/paper-icon-button"; -import "@material/mwc-button"; @customElement("hassio-search-input") class HassioSearchInput extends LitElement { @@ -30,16 +30,16 @@ class HassioSearchInput extends LitElement { class="prefix" > ${this.filter && - html` - - `} + html` + + `} `; diff --git a/hassio/src/dashboard/hassio-addons.ts b/hassio/src/dashboard/hassio-addons.ts index c59edcfc5e..1265512a9e 100644 --- a/hassio/src/dashboard/hassio-addons.ts +++ b/hassio/src/dashboard/hassio-addons.ts @@ -8,18 +8,18 @@ import { property, TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../src/types"; -import { HassioAddonInfo } from "../../../src/data/hassio/addon"; -import { navigate } from "../../../src/common/navigate"; -import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; -import "../components/hassio-card-content"; import { atLeastVersion } from "../../../src/common/config/version"; +import { navigate } from "../../../src/common/navigate"; +import { HassioAddonInfo } from "../../../src/data/hassio/addon"; +import { haStyle } from "../../../src/resources/styles"; +import { HomeAssistant } from "../../../src/types"; +import "../components/hassio-card-content"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-addons") class HassioAddons extends LitElement { @property() public hass!: HomeAssistant; + @property() public addons?: HassioAddonInfo[]; protected render(): TemplateResult { diff --git a/hassio/src/dashboard/hassio-dashboard.ts b/hassio/src/dashboard/hassio-dashboard.ts index a1db26663a..c847e3bc26 100644 --- a/hassio/src/dashboard/hassio-dashboard.ts +++ b/hassio/src/dashboard/hassio-dashboard.ts @@ -1,27 +1,30 @@ import { - LitElement, - TemplateResult, - html, - CSSResult, css, - property, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "./hassio-addons"; -import "./hassio-update"; -import { haStyle } from "../../../src/resources/styles"; -import { HomeAssistant } from "../../../src/types"; import { HassioHassOSInfo } from "../../../src/data/hassio/host"; import { - HassioSupervisorInfo, HassioHomeAssistantInfo, + HassioSupervisorInfo, } from "../../../src/data/hassio/supervisor"; +import { haStyle } from "../../../src/resources/styles"; +import { HomeAssistant } from "../../../src/types"; +import "./hassio-addons"; +import "./hassio-update"; @customElement("hassio-dashboard") class HassioDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public supervisorInfo!: HassioSupervisorInfo; + @property() public hassInfo!: HassioHomeAssistantInfo; + @property() public hassOsInfo!: HassioHassOSInfo; protected render(): TemplateResult { diff --git a/hassio/src/dashboard/hassio-update.ts b/hassio/src/dashboard/hassio-update.ts index d04ed1854a..926e4019e0 100644 --- a/hassio/src/dashboard/hassio-update.ts +++ b/hassio/src/dashboard/hassio-update.ts @@ -1,35 +1,36 @@ -import { - LitElement, - TemplateResult, - html, - CSSResult, - css, - property, - customElement, -} from "lit-element"; +import "@material/mwc-button"; import "@polymer/iron-icon/iron-icon"; - -import { HomeAssistant } from "../../../src/types"; +import "@polymer/paper-card/paper-card"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import "../../../src/components/buttons/ha-call-api-button"; import { HassioHassOSInfo } from "../../../src/data/hassio/host"; import { HassioHomeAssistantInfo, HassioSupervisorInfo, } from "../../../src/data/hassio/supervisor"; - -import { hassioStyle } from "../resources/hassio-style"; import { haStyle } from "../../../src/resources/styles"; - -import "@material/mwc-button"; -import "@polymer/paper-card/paper-card"; -import "../../../src/components/buttons/ha-call-api-button"; +import { HomeAssistant } from "../../../src/types"; import "../components/hassio-card-content"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-update") export class HassioUpdate extends LitElement { @property() public hass!: HomeAssistant; + @property() public hassInfo: HassioHomeAssistantInfo; + @property() public hassOsInfo?: HassioHassOSInfo; + @property() public supervisorInfo: HassioSupervisorInfo; + @property() private _error?: string; protected render(): TemplateResult { @@ -55,9 +56,7 @@ export class HassioUpdate extends LitElement { return html`
${this._error - ? html` -
Error: ${this._error}
- ` + ? html`
Error: ${this._error}
` : ""}

${updatesAvailable > 1 @@ -113,7 +112,7 @@ export class HassioUpdate extends LitElement { ${icon ? html`
- +
` : ""} @@ -138,7 +137,7 @@ export class HassioUpdate extends LitElement { `; } - private _apiCalled(ev) { + private _apiCalled(ev): void { if (ev.detail.success) { this._error = ""; return; @@ -146,9 +145,11 @@ export class HassioUpdate extends LitElement { const response = ev.detail.response; - typeof response.body === "object" - ? (this._error = response.body.message || "Unknown error") - : (this._error = response.body); + if (typeof response.body === "object") { + this._error = response.body.message || "Unknown error"; + } else { + this._error = response.body; + } } static get styles(): CSSResult[] { diff --git a/hassio/src/dialogs/markdown/dialog-hassio-markdown.ts b/hassio/src/dialogs/markdown/dialog-hassio-markdown.ts index a8af334830..c930ee9a44 100644 --- a/hassio/src/dialogs/markdown/dialog-hassio-markdown.ts +++ b/hassio/src/dialogs/markdown/dialog-hassio-markdown.ts @@ -1,7 +1,7 @@ import "@polymer/app-layout/app-toolbar/app-toolbar"; +import { PaperDialogElement } from "@polymer/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-icon-button/paper-icon-button"; -import { PaperDialogElement } from "@polymer/paper-dialog"; import { css, CSSResult, @@ -9,21 +9,21 @@ import { html, LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; - -import { hassioStyle } from "../../resources/hassio-style"; -import { haStyleDialog } from "../../../../src/resources/styles"; -import { HassioMarkdownDialogParams } from "./show-dialog-hassio-markdown"; - import "../../../../src/components/dialog/ha-paper-dialog"; import "../../../../src/components/ha-markdown"; +import { haStyleDialog } from "../../../../src/resources/styles"; +import { hassioStyle } from "../../resources/hassio-style"; +import { HassioMarkdownDialogParams } from "./show-dialog-hassio-markdown"; @customElement("dialog-hassio-markdown") class HassioMarkdownDialog extends LitElement { @property() public title!: string; + @property() public content!: string; + @query("#dialog") private _dialog!: PaperDialogElement; public showDialog(params: HassioMarkdownDialogParams) { diff --git a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts index 56baec7e8c..87f22529a2 100755 --- a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts @@ -1,11 +1,11 @@ import "@material/mwc-button"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/iron-icon/iron-icon"; +import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; +import { PaperDialogElement } from "@polymer/paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; -import { PaperDialogElement } from "@polymer/paper-dialog"; -import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; import { css, CSSResult, @@ -13,21 +13,19 @@ import { html, LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; - +import "../../../../src/components/dialog/ha-paper-dialog"; +import { getSignedPath } from "../../../../src/data/auth"; import { fetchHassioSnapshotInfo, HassioSnapshotDetail, } from "../../../../src/data/hassio/snapshot"; -import { getSignedPath } from "../../../../src/data/auth"; -import { HassioSnapshotDialogParams } from "./show-dialog-hassio-snapshot"; +import { PolymerChangedEvent } from "../../../../src/polymer-types"; import { haStyleDialog } from "../../../../src/resources/styles"; import { HomeAssistant } from "../../../../src/types"; -import { PolymerChangedEvent } from "../../../../src/polymer-types"; - -import "../../../../src/components/dialog/ha-paper-dialog"; +import { HassioSnapshotDialogParams } from "./show-dialog-hassio-snapshot"; const _computeFolders = (folders) => { const list: Array<{ slug: string; name: string; checked: boolean }> = []; @@ -75,13 +73,21 @@ interface FolderItem { @customElement("dialog-hassio-snapshot") class HassioSnapshotDialog extends LitElement { @property() public hass!: HomeAssistant; + @property() private _error?: string; + @property() private snapshot?: HassioSnapshotDetail; + @property() private _folders!: FolderItem[]; + @property() private _addons!: AddonItem[]; + @property() private _dialogParams?: HassioSnapshotDialogParams; + @property() private _snapshotPassword!: string; + @property() private _restoreHass: boolean | null | undefined = true; + @query("#dialog") private _dialog!: PaperDialogElement; public async showDialog(params: HassioSnapshotDialogParams) { @@ -129,8 +135,9 @@ class HassioSnapshotDialog extends LitElement {
Home Assistant:
Home Assistant ${this.snapshot.homeassistant} @@ -187,11 +194,7 @@ class HassioSnapshotDialog extends LitElement { > ` : ""} - ${this._error - ? html` -

Error: ${this._error}

- ` - : ""} + ${this._error ? html`

Error: ${this._error}

` : ""}
Actions:
    diff --git a/hassio/src/hassio-main.ts b/hassio/src/hassio-main.ts index ff5def6b41..029b419f5d 100644 --- a/hassio/src/hassio-main.ts +++ b/hassio/src/hassio-main.ts @@ -1,39 +1,38 @@ -import { customElement, PropertyValues, property } from "lit-element"; -import { PolymerElement } from "@polymer/polymer"; import "@polymer/paper-icon-button"; - -import "../../src/resources/ha-style"; +import { PolymerElement } from "@polymer/polymer"; +import { customElement, property, PropertyValues } from "lit-element"; import { applyThemesOnElement } from "../../src/common/dom/apply_themes_on_element"; import { fireEvent } from "../../src/common/dom/fire_event"; +import { navigate } from "../../src/common/navigate"; +import { fetchHassioAddonInfo } from "../../src/data/hassio/addon"; +import { + fetchHassioHassOsInfo, + fetchHassioHostInfo, + HassioHassOSInfo, + HassioHostInfo, +} from "../../src/data/hassio/host"; +import { + createHassioSession, + fetchHassioHomeAssistantInfo, + fetchHassioSupervisorInfo, + HassioHomeAssistantInfo, + HassioPanelInfo, + HassioSupervisorInfo, +} from "../../src/data/hassio/supervisor"; +import { + AlertDialogParams, + showAlertDialog, +} from "../../src/dialogs/generic/show-dialog-box"; +import { makeDialogManager } from "../../src/dialogs/make-dialog-manager"; import { HassRouterPage, RouterOptions, } from "../../src/layouts/hass-router-page"; -import { HomeAssistant } from "../../src/types"; -import { - fetchHassioSupervisorInfo, - fetchHassioHomeAssistantInfo, - HassioSupervisorInfo, - HassioHomeAssistantInfo, - createHassioSession, - HassioPanelInfo, -} from "../../src/data/hassio/supervisor"; -import { - fetchHassioHostInfo, - fetchHassioHassOsInfo, - HassioHostInfo, - HassioHassOSInfo, -} from "../../src/data/hassio/host"; -import { fetchHassioAddonInfo } from "../../src/data/hassio/addon"; -import { makeDialogManager } from "../../src/dialogs/make-dialog-manager"; import { ProvideHassLitMixin } from "../../src/mixins/provide-hass-lit-mixin"; +import "../../src/resources/ha-style"; +import { HomeAssistant } from "../../src/types"; // Don't codesplit it, that way the dashboard always loads fast. import "./hassio-pages-with-tabs"; -import { navigate } from "../../src/common/navigate"; -import { - showAlertDialog, - AlertDialogParams, -} from "../../src/dialogs/generic/show-dialog-box"; // The register callback of the IronA11yKeysBehavior inside paper-icon-button // is not called, causing _keyBindings to be uninitiliazed for paper-icon-button, @@ -44,7 +43,9 @@ customElements.get("paper-icon-button").prototype._keyBindings = {}; @customElement("hassio-main") class HassioMain extends ProvideHassLitMixin(HassRouterPage) { @property() public hass!: HomeAssistant; + @property() public panel!: HassioPanelInfo; + @property() public narrow!: boolean; protected routerOptions: RouterOptions = { @@ -76,9 +77,13 @@ class HassioMain extends ProvideHassLitMixin(HassRouterPage) { }, }, }; + @property() private _supervisorInfo: HassioSupervisorInfo; + @property() private _hostInfo: HassioHostInfo; + @property() private _hassOsInfo?: HassioHassOSInfo; + @property() private _hassInfo: HassioHomeAssistantInfo; protected firstUpdated(changedProps: PropertyValues) { diff --git a/hassio/src/hassio-pages-with-tabs.ts b/hassio/src/hassio-pages-with-tabs.ts index becdccdf49..ba646f42a1 100644 --- a/hassio/src/hassio-pages-with-tabs.ts +++ b/hassio/src/hassio-pages-with-tabs.ts @@ -1,44 +1,47 @@ -import { - LitElement, - TemplateResult, - html, - CSSResultArray, - css, - customElement, - property, -} from "lit-element"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-tabs/paper-tab"; import "@polymer/paper-tabs/paper-tabs"; - -import "../../src/components/ha-menu-button"; -import "../../src/resources/ha-style"; -import "./hassio-tabs-router"; - +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import scrollToTarget from "../../src/common/dom/scroll-to-target"; - +import { navigate } from "../../src/common/navigate"; +import "../../src/components/ha-menu-button"; +import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host"; +import { + HassioHomeAssistantInfo, + HassioSupervisorInfo, +} from "../../src/data/hassio/supervisor"; +import "../../src/resources/ha-style"; import { haStyle } from "../../src/resources/styles"; import { HomeAssistant, Route } from "../../src/types"; -import { navigate } from "../../src/common/navigate"; -import { HassioHostInfo, HassioHassOSInfo } from "../../src/data/hassio/host"; -import { - HassioSupervisorInfo, - HassioHomeAssistantInfo, -} from "../../src/data/hassio/supervisor"; +import "./hassio-tabs-router"; const HAS_REFRESH_BUTTON = ["store", "snapshots"]; @customElement("hassio-pages-with-tabs") class HassioPagesWithTabs extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() public supervisorInfo!: HassioSupervisorInfo; + @property() public hostInfo!: HassioHostInfo; + @property() public hassInfo!: HassioHomeAssistantInfo; + @property() public hassOsInfo!: HassioHassOSInfo; protected render(): TemplateResult { diff --git a/hassio/src/hassio-tabs-router.ts b/hassio/src/hassio-tabs-router.ts index a77d821bc8..dd4a66c270 100644 --- a/hassio/src/hassio-tabs-router.ts +++ b/hassio/src/hassio-tabs-router.ts @@ -1,28 +1,32 @@ +import { PolymerElement } from "@polymer/polymer"; +import { customElement, property } from "lit-element"; +import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host"; +import { + HassioHomeAssistantInfo, + HassioSupervisorInfo, +} from "../../src/data/hassio/supervisor"; import { HassRouterPage, RouterOptions, } from "../../src/layouts/hass-router-page"; -import { customElement, property } from "lit-element"; -import { PolymerElement } from "@polymer/polymer"; import { HomeAssistant } from "../../src/types"; +import "./addon-store/hassio-addon-store"; // Don't codesplit it, that way the dashboard always loads fast. import "./dashboard/hassio-dashboard"; // Don't codesplit the others, because it breaks the UI when pushed to a Pi import "./snapshots/hassio-snapshots"; -import "./addon-store/hassio-addon-store"; import "./system/hassio-system"; -import { HassioHostInfo, HassioHassOSInfo } from "../../src/data/hassio/host"; -import { - HassioSupervisorInfo, - HassioHomeAssistantInfo, -} from "../../src/data/hassio/supervisor"; @customElement("hassio-tabs-router") class HassioTabsRouter extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public supervisorInfo: HassioSupervisorInfo; + @property() public hostInfo: HassioHostInfo; + @property() public hassInfo: HassioHomeAssistantInfo; + @property() public hassOsInfo!: HassioHassOSInfo; protected routerOptions: RouterOptions = { diff --git a/hassio/src/ingress-view/hassio-ingress-view.ts b/hassio/src/ingress-view/hassio-ingress-view.ts index a9ccf349f1..2dffe09ca3 100644 --- a/hassio/src/ingress-view/hassio-ingress-view.ts +++ b/hassio/src/ingress-view/hassio-ingress-view.ts @@ -1,33 +1,33 @@ import { - LitElement, - customElement, - property, - TemplateResult, - html, - PropertyValues, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; -import { HomeAssistant, Route } from "../../../src/types"; -import { createHassioSession } from "../../../src/data/hassio/supervisor"; import { - HassioAddonDetails, fetchHassioAddonInfo, + HassioAddonDetails, } from "../../../src/data/hassio/addon"; +import { createHassioSession } from "../../../src/data/hassio/supervisor"; import "../../../src/layouts/hass-loading-screen"; import "../../../src/layouts/hass-subpage"; +import { HomeAssistant, Route } from "../../../src/types"; @customElement("hassio-ingress-view") class HassioIngressView extends LitElement { @property() public hass!: HomeAssistant; + @property() public route!: Route; + @property() private _addon?: HassioAddonDetails; protected render(): TemplateResult { if (!this._addon) { - return html` - - `; + return html` `; } return html` @@ -71,7 +71,7 @@ class HassioIngressView extends LitElement { this._addon = addon; } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error(err); alert(err.message || "Unknown error starting ingress."); history.back(); diff --git a/hassio/src/snapshots/hassio-snapshots.ts b/hassio/src/snapshots/hassio-snapshots.ts index 5a96d2cd67..529f9abb8d 100644 --- a/hassio/src/snapshots/hassio-snapshots.ts +++ b/hassio/src/snapshots/hassio-snapshots.ts @@ -1,46 +1,39 @@ -import { - LitElement, - TemplateResult, - html, - CSSResultArray, - css, - property, - PropertyValues, - customElement, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-card/paper-card"; import "@polymer/paper-checkbox/paper-checkbox"; +import type { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import "@polymer/paper-radio-button/paper-radio-button"; import "@polymer/paper-radio-group/paper-radio-group"; - -import "../components/hassio-card-content"; -import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; - -import { showHassioSnapshotDialog } from "../dialogs/snapshot/show-dialog-hassio-snapshot"; -import { HomeAssistant } from "../../../src/types"; +import type { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../src/common/dom/fire_event"; import { - HassioSnapshot, - fetchHassioSnapshots, - reloadHassioSnapshots, - HassioFullSnapshotCreateParams, - HassioPartialSnapshotCreateParams, createHassioFullSnapshot, createHassioPartialSnapshot, + fetchHassioSnapshots, + HassioFullSnapshotCreateParams, + HassioPartialSnapshotCreateParams, + HassioSnapshot, + reloadHassioSnapshots, } from "../../../src/data/hassio/snapshot"; import { HassioSupervisorInfo } from "../../../src/data/hassio/supervisor"; import { PolymerChangedEvent } from "../../../src/polymer-types"; -import { fireEvent } from "../../../src/common/dom/fire_event"; - -// Not duplicate, used for typing -// tslint:disable-next-line -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -// tslint:disable-next-line -import { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; -// tslint:disable-next-line -import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; +import { haStyle } from "../../../src/resources/styles"; +import { HomeAssistant } from "../../../src/types"; +import "../components/hassio-card-content"; +import { showHassioSnapshotDialog } from "../dialogs/snapshot/show-dialog-hassio-snapshot"; +import { hassioStyle } from "../resources/hassio-style"; interface CheckboxItem { slug: string; @@ -51,13 +44,21 @@ interface CheckboxItem { @customElement("hassio-snapshots") class HassioSnapshots extends LitElement { @property() public hass!: HomeAssistant; + @property() public supervisorInfo!: HassioSupervisorInfo; + @property() private _snapshotName = ""; + @property() private _snapshotPassword = ""; + @property() private _snapshotHasPassword = false; + @property() private _snapshotType: HassioSnapshot["type"] = "full"; + @property() private _snapshots?: HassioSnapshot[] = []; + @property() private _addonList: CheckboxItem[] = []; + @property() private _folderList: CheckboxItem[] = [ { slug: "homeassistant", @@ -68,7 +69,9 @@ class HassioSnapshots extends LitElement { { slug: "share", name: "Share", checked: true }, { slug: "addons/local", name: "Local add-ons", checked: true }, ]; + @property() private _creatingSnapshot = false; + @property() private _error = ""; public async refreshData() { @@ -157,9 +160,7 @@ class HassioSnapshots extends LitElement { ` : undefined} ${this._error !== "" - ? html` -

    ${this._error}

    - ` + ? html`

    ${this._error}

    ` : undefined}

diff --git a/hassio/src/system/hassio-host-info.ts b/hassio/src/system/hassio-host-info.ts index 3c50ece8af..11d0ae1a6c 100644 --- a/hassio/src/system/hassio-host-info.ts +++ b/hassio/src/system/hassio-host-info.ts @@ -9,24 +9,25 @@ import { property, TemplateResult, } from "lit-element"; - -import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; -import { - HassioHostInfo as HassioHostInfoType, - HassioHassOSInfo, -} from "../../../src/data/hassio/host"; +import "../../../src/components/buttons/ha-call-api-button"; import { fetchHassioHardwareInfo } from "../../../src/data/hassio/hardware"; +import { + HassioHassOSInfo, + HassioHostInfo as HassioHostInfoType, +} from "../../../src/data/hassio/host"; +import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; import { showHassioMarkdownDialog } from "../dialogs/markdown/show-dialog-hassio-markdown"; - -import "../../../src/components/buttons/ha-call-api-button"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-host-info") class HassioHostInfo extends LitElement { @property() public hass!: HomeAssistant; + @property() public hostInfo!: HassioHostInfoType; + @property() public hassOsInfo!: HassioHassOSInfo; + @property() private _errors?: string; public render(): TemplateResult | void { @@ -69,9 +70,7 @@ class HassioHostInfo extends LitElement { ` : ""} ${this._errors - ? html` -
Error: ${this._errors}
- ` + ? html`
Error: ${this._errors}
` : ""}
diff --git a/hassio/src/system/hassio-supervisor-info.ts b/hassio/src/system/hassio-supervisor-info.ts index 75892b731b..8b5ac797be 100644 --- a/hassio/src/system/hassio-supervisor-info.ts +++ b/hassio/src/system/hassio-supervisor-info.ts @@ -9,23 +9,23 @@ import { property, TemplateResult, } from "lit-element"; - import { fireEvent } from "../../../src/common/dom/fire_event"; +import "../../../src/components/buttons/ha-call-api-button"; import { HassioSupervisorInfo as HassioSupervisorInfoType, setSupervisorOption, SupervisorOptions, } from "../../../src/data/hassio/supervisor"; +import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; - -import "../../../src/components/buttons/ha-call-api-button"; @customElement("hassio-supervisor-info") class HassioSupervisorInfo extends LitElement { @property() public hass!: HomeAssistant; + @property() public supervisorInfo!: HassioSupervisorInfoType; + @property() private _errors?: string; public render(): TemplateResult | void { @@ -54,9 +54,7 @@ class HassioSupervisorInfo extends LitElement {
${this._errors - ? html` -
Error: ${this._errors}
- ` + ? html`
Error: ${this._errors}
` : ""}
diff --git a/hassio/src/system/hassio-supervisor-log.ts b/hassio/src/system/hassio-supervisor-log.ts index a111969bb7..654775f94d 100644 --- a/hassio/src/system/hassio-supervisor-log.ts +++ b/hassio/src/system/hassio-supervisor-log.ts @@ -7,20 +7,21 @@ import { html, LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; - -import { ANSI_HTML_STYLE, parseTextToColoredPre } from "../ansi-to-html"; -import { hassioStyle } from "../resources/hassio-style"; +import { fetchSupervisorLogs } from "../../../src/data/hassio/supervisor"; import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; -import { fetchSupervisorLogs } from "../../../src/data/hassio/supervisor"; +import { ANSI_HTML_STYLE, parseTextToColoredPre } from "../ansi-to-html"; +import { hassioStyle } from "../resources/hassio-style"; @customElement("hassio-supervisor-log") class HassioSupervisorLog extends LitElement { @property() public hass!: HomeAssistant; + @property() private _error?: string; + @query("#content") private _logContent!: HTMLDivElement; public async connectedCallback(): Promise { @@ -31,11 +32,7 @@ class HassioSupervisorLog extends LitElement { public render(): TemplateResult | void { return html` - ${this._error - ? html` -
${this._error}
- ` - : ""} + ${this._error ? html`
${this._error}
` : ""}
Refresh @@ -73,8 +70,9 @@ class HassioSupervisorLog extends LitElement { } this._logContent.appendChild(parseTextToColoredPre(content)); } catch (err) { - this._error = `Failed to get supervisor logs, ${err.body?.message || - err}`; + this._error = `Failed to get supervisor logs, ${ + err.body?.message || err + }`; } } diff --git a/hassio/src/system/hassio-system.ts b/hassio/src/system/hassio-system.ts index e1ea7eb668..ea60843d8c 100644 --- a/hassio/src/system/hassio-system.ts +++ b/hassio/src/system/hassio-system.ts @@ -8,16 +8,14 @@ import { property, TemplateResult, } from "lit-element"; - -import { hassioStyle } from "../resources/hassio-style"; -import { haStyle } from "../../../src/resources/styles"; import { - HassioHostInfo, HassioHassOSInfo, + HassioHostInfo, } from "../../../src/data/hassio/host"; import { HassioSupervisorInfo } from "../../../src/data/hassio/supervisor"; +import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; - +import { hassioStyle } from "../resources/hassio-style"; import "./hassio-host-info"; import "./hassio-supervisor-info"; import "./hassio-supervisor-log"; @@ -25,8 +23,11 @@ import "./hassio-supervisor-log"; @customElement("hassio-system") class HassioSystem extends LitElement { @property() public hass!: HomeAssistant; + @property() public supervisorInfo!: HassioSupervisorInfo; + @property() public hostInfo!: HassioHostInfo; + @property() public hassOsInfo!: HassioHassOSInfo; public render(): TemplateResult | void { diff --git a/package.json b/package.json index 54ad5befaf..bf87bfd3c5 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,14 @@ "version": "1.0.0", "scripts": { "build": "script/build_frontend", - "lint": "eslint src hassio/src gallery/src && tslint 'src/**/*.ts' 'hassio/src/**/*.ts' 'gallery/src/**/*.ts' 'cast/src/**/*.ts' 'test-mocha/**/*.ts' && tsc", - "lint-hassio": "eslint hassio/src && tslint 'hassio/src/**/*.ts'", + "lint:eslint": "eslint '{**/src,src}/**/*.{js,ts,html}' --ignore-path .gitignore", + "format:eslint": "eslint '{**/src,src}/**/*.{js,ts,html}' --fix --ignore-path .gitignore", + "lint:prettier": "prettier '{**/src,src}/**/*.{js,ts,json,css,md}' --check", + "format:prettier": "prettier '{**/src,src}/**/*.{js,ts,json,css,md}' --write", + "lint:types": "tsc", + "lint:lit": "lit-analyzer '{**/src,src}/**/*.ts'", + "lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:types", + "format": "npm run format:eslint && npm run format:prettier", "mocha": "node_modules/.bin/ts-mocha -p test-mocha/tsconfig.test.json --opts test-mocha/mocha.opts", "test": "npm run lint && npm run mocha", "docker_build": "sh ./script/docker_run.sh build $npm_package_version", @@ -110,20 +116,19 @@ "xss": "^1.0.6" }, "devDependencies": { - "@babel/core": "^7.8.4", + "@babel/core": "^7.9.0", "@babel/plugin-external-helpers": "^7.8.3", "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-decorators": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.5", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.8.3", - "@babel/preset-env": "^7.8.4", - "@babel/preset-typescript": "^7.8.3", + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/preset-env": "^7.9.5", + "@babel/preset-typescript": "^7.9.0", "@types/chai": "^4.1.7", "@types/chromecast-caf-receiver": "^3.0.12", - "@types/chromecast-caf-sender": "^1.0.1", "@types/codemirror": "^0.0.78", "@types/hls.js": "^0.12.3", "@types/js-yaml": "^3.12.1", @@ -132,17 +137,22 @@ "@types/memoize-one": "4.1.0", "@types/mocha": "^5.2.6", "@types/webspeechapi": "^0.0.29", - "babel-loader": "^8.0.5", + "@typescript-eslint/eslint-plugin": "^2.28.0", + "@typescript-eslint/parser": "^2.28.0", + "babel-loader": "^8.1.0", "chai": "^4.2.0", "copy-webpack-plugin": "^5.0.2", "del": "^4.0.0", - "eslint": "^6.3.0", - "eslint-config-airbnb-base": "^14.0.0", - "eslint-config-prettier": "^6.2.0", - "eslint-import-resolver-webpack": "^0.11.1", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-react": "^7.14.3", + "eslint": "^6.8.0", + "eslint-config-airbnb-typescript": "^7.2.1", + "eslint-config-prettier": "^6.10.1", + "eslint-import-resolver-webpack": "^0.12.1", + "eslint-plugin-disable": "^2.0.1", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-lit": "^1.2.0", + "eslint-plugin-prettier": "^3.1.3", + "eslint-plugin-react": "^7.19.0", + "eslint-plugin-wc": "^1.2.0", "fs-extra": "^7.0.1", "gulp": "^4.0.0", "gulp-foreach": "^0.1.0", @@ -156,23 +166,22 @@ "html-webpack-plugin": "^3.2.0", "husky": "^1.3.1", "lint-staged": "^8.1.5", + "lit-analyzer": "^1.1.10", "lodash.template": "^4.5.0", "map-stream": "^0.0.7", "merge-stream": "^1.0.1", "mocha": "^6.0.2", + "npm": "^6.14.4", "parse5": "^5.1.0", - "prettier": "^1.19.1", + "prettier": "^2.0.4", "raw-loader": "^2.0.0", "reify": "^0.18.1", "require-dir": "^1.2.0", "sinon": "^7.3.1", "terser-webpack-plugin": "^1.2.3", + "ts-lit-plugin": "^1.1.10", "ts-mocha": "^6.0.0", - "tslint": "^5.20.1", - "tslint-config-prettier": "^1.18.0", - "tslint-eslint-rules": "^5.4.0", - "tslint-plugin-prettier": "^2.0.1", - "typescript": "^3.7.2", + "typescript": "^3.8.3", "vinyl-buffer": "^1.0.1", "vinyl-source-stream": "^2.0.0", "web-component-tester": "^6.9.2", diff --git a/setup.py b/setup.py index c19a4a9a37..dd3fd6e59e 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20200407.2", + version="20200414.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", diff --git a/src/auth/ha-auth-flow.ts b/src/auth/ha-auth-flow.ts index c13df3d769..e6cbfc09a3 100644 --- a/src/auth/ha-auth-flow.ts +++ b/src/auth/ha-auth-flow.ts @@ -1,31 +1,39 @@ +import "@material/mwc-button"; import { - LitElement, + css, + CSSResult, html, + LitElement, property, PropertyValues, - CSSResult, - css, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; import "../components/ha-form/ha-form"; import "../components/ha-markdown"; -import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; import { AuthProvider } from "../data/auth"; import { DataEntryFlowStep, DataEntryFlowStepForm, } from "../data/data_entry_flow"; +import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; type State = "loading" | "error" | "step"; class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { @property() public authProvider?: AuthProvider; + @property() public clientId?: string; + @property() public redirectUri?: string; + @property() public oauth2State?: string; + @property() private _state: State = "loading"; + @property() private _stepData: any = {}; + @property() private _step?: DataEntryFlowStep; + @property() private _errorMessage?: string; protected render() { @@ -40,7 +48,7 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { super.firstUpdated(changedProps); if (this.clientId == null || this.redirectUri == null) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.error( "clientId and redirectUri must not be null", this.clientId, @@ -58,14 +66,14 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { }); } - protected updated(changedProps: PropertyValues) { + protected updated(changedProps: PropertyValues): void { super.updated(changedProps); if (changedProps.has("authProvider")) { this._providerChanged(this.authProvider); } } - private _renderForm() { + private _renderForm(): TemplateResult { switch (this._state) { case "step": if (this._step == null) { @@ -80,17 +88,15 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) {
`; case "error": - return html` -
Error: ${this._errorMessage}
- `; + return html`
Error: ${this._errorMessage}
`; case "loading": - return html` - ${this.localize("ui.panel.page-authorize.form.working")} - `; + return html` ${this.localize("ui.panel.page-authorize.form.working")} `; + default: + return html``; } } - private _renderStep(step: DataEntryFlowStep) { + private _renderStep(step: DataEntryFlowStep): TemplateResult { switch (step.type) { case "abort": return html` @@ -131,13 +137,13 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { method: "DELETE", credentials: "same-origin", }).catch((err) => { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.error("Error delete obsoleted auth flow", err); }); } if (newProvider == null) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.error("No auth provider"); this._state = "error"; this._errorMessage = this._unknownError(); @@ -170,7 +176,7 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { this._errorMessage = data.message; } } catch (err) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.error("Error starting auth flow", err); this._state = "error"; this._errorMessage = this._unknownError(); @@ -287,7 +293,7 @@ class HaAuthFlow extends litLocalizeLiteMixin(LitElement) { } await this._updateStep(newStep); } catch (err) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.error("Error submitting step", err); this._state = "error"; this._errorMessage = this._unknownError(); diff --git a/src/auth/ha-authorize.ts b/src/auth/ha-authorize.ts index bf8feb2685..f811a21186 100644 --- a/src/auth/ha-authorize.ts +++ b/src/auth/ha-authorize.ts @@ -1,19 +1,17 @@ -import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; import { - LitElement, - html, - PropertyValues, - CSSResult, css, + CSSResult, + html, + LitElement, property, + PropertyValues, } from "lit-element"; -import "./ha-auth-flow"; import { AuthProvider, fetchAuthProviders } from "../data/auth"; +import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; import { registerServiceWorker } from "../util/register-service-worker"; +import "./ha-auth-flow"; -import( - /* webpackChunkName: "pick-auth-provider" */ "../auth/ha-pick-auth-provider" -); +import(/* webpackChunkName: "pick-auth-provider" */ "./ha-pick-auth-provider"); interface QueryParams { client_id?: string; @@ -23,9 +21,13 @@ interface QueryParams { class HaAuthorize extends litLocalizeLiteMixin(LitElement) { @property() public clientId?: string; + @property() public redirectUri?: string; + @property() public oauth2State?: string; + @property() private _authProvider?: AuthProvider; + @property() private _authProviders?: AuthProvider[]; constructor() { @@ -123,6 +125,13 @@ class HaAuthorize extends litLocalizeLiteMixin(LitElement) { } } + protected updated(changedProps: PropertyValues) { + super.updated(changedProps); + if (changedProps.has("language")) { + document.querySelector("html")!.setAttribute("lang", this.language!); + } + } + private async _fetchAuthProviders() { // Fetch auth providers try { @@ -148,7 +157,7 @@ class HaAuthorize extends litLocalizeLiteMixin(LitElement) { this._authProviders = authProviders; this._authProvider = authProviders[0]; } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error("Error loading auth providers", err); } } diff --git a/src/auth/ha-pick-auth-provider.ts b/src/auth/ha-pick-auth-provider.ts index 942fb5b4cc..63e213e6d1 100644 --- a/src/auth/ha-pick-auth-provider.ts +++ b/src/auth/ha-pick-auth-provider.ts @@ -1,10 +1,10 @@ -import { LitElement, html, property } from "lit-element"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; -import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; +import { html, LitElement, property } from "lit-element"; import { fireEvent } from "../common/dom/fire_event"; import "../components/ha-icon-next"; import { AuthProvider } from "../data/auth"; +import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; declare global { interface HASSDomEvents { diff --git a/src/cards/ha-history_graph-card.js b/src/cards/ha-history_graph-card.js index c0f6e6d74f..33e2472d82 100644 --- a/src/cards/ha-history_graph-card.js +++ b/src/cards/ha-history_graph-card.js @@ -1,11 +1,10 @@ import "@polymer/paper-card/paper-card"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { computeStateName } from "../common/entity/compute_state_name"; import "../components/state-history-charts"; import "../data/ha-state-history-data"; - -import { computeStateName } from "../common/entity/compute_state_name"; import { EventsMixin } from "../mixins/events-mixin"; /* diff --git a/src/cast/cast_manager.ts b/src/cast/cast_manager.ts index 6c9ea0a8e1..6c4fcf13f4 100644 --- a/src/cast/cast_manager.ts +++ b/src/cast/cast_manager.ts @@ -1,17 +1,13 @@ +/* eslint-disable no-undef, no-console */ +import { Auth } from "home-assistant-js-websocket"; import { castApiAvailable } from "./cast_framework"; -import { CAST_APP_ID, CAST_NS, CAST_DEV } from "./const"; +import { CAST_APP_ID, CAST_DEV, CAST_NS } from "./const"; import { CAST_DEV_HASS_URL } from "./dev_const"; import { castSendAuth, HassMessage as ReceiverMessage, } from "./receiver_messages"; -import { - SessionStateEventData, - CastStateEventData, - // tslint:disable-next-line: no-implicit-dependencies -} from "chromecast-caf-receiver/cast.framework"; -import { SenderMessage, ReceiverStatusMessage } from "./sender_messages"; -import { Auth } from "home-assistant-js-websocket"; +import { ReceiverStatusMessage, SenderMessage } from "./sender_messages"; let managerProm: Promise | undefined; @@ -29,14 +25,14 @@ a user presses the cast button we send auth if not connected yet, then send command as usual. */ -/* tslint:disable:no-console */ - type CastEvent = "connection-changed" | "state-changed"; export class CastManager { public auth?: Auth; + // If the cast connection is connected to our Hass. public status?: ReceiverStatusMessage; + private _eventListeners: { [event: string]: CastEventListener[] } = {}; constructor(auth?: Auth) { @@ -48,10 +44,12 @@ export class CastManager { autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED, }); context.addEventListener( + // @ts-ignore cast.framework.CastContextEventType.SESSION_STATE_CHANGED, (ev) => this._sessionStateChanged(ev) ); context.addEventListener( + // @ts-ignore cast.framework.CastContextEventType.CAST_STATE_CHANGED, (ev) => this._castStateChanged(ev) ); @@ -92,6 +90,7 @@ export class CastManager { } public get castContext() { + // @ts-ignore return cast.framework.CastContext.getInstance(); } @@ -119,7 +118,7 @@ export class CastManager { } } - private _sessionStateChanged(ev: SessionStateEventData) { + private _sessionStateChanged(ev) { if (__DEV__) { console.log("Cast session state changed", ev.sessionState); } @@ -142,7 +141,7 @@ export class CastManager { } } - private _castStateChanged(ev: CastStateEventData) { + private _castStateChanged(ev) { if (__DEV__) { console.log("Cast state changed", ev.castState); } diff --git a/src/cast/receiver_messages.ts b/src/cast/receiver_messages.ts index 50757ffbde..460054135d 100644 --- a/src/cast/receiver_messages.ts +++ b/src/cast/receiver_messages.ts @@ -2,10 +2,9 @@ import { Auth } from "home-assistant-js-websocket"; import { CastManager } from "./cast_manager"; - -import { BaseCastMessage } from "./types"; import { CAST_DEV } from "./const"; import { CAST_DEV_HASS_URL } from "./dev_const"; +import { BaseCastMessage } from "./types"; export interface GetStatusMessage extends BaseCastMessage { type: "get_status"; @@ -60,7 +59,7 @@ export const castSendShowDemo = (cast: CastManager) => export const ensureConnectedCastSession = (cast: CastManager, auth: Auth) => { if (cast.castConnectedToOurHass) { - return; + return undefined; } return new Promise((resolve) => { diff --git a/src/common/dom/apply_themes_on_element.ts b/src/common/dom/apply_themes_on_element.ts index b8a275b35d..44f042beac 100644 --- a/src/common/dom/apply_themes_on_element.ts +++ b/src/common/dom/apply_themes_on_element.ts @@ -62,7 +62,7 @@ const processTheme = ( themes: HomeAssistant["themes"] ): ProcessedTheme | undefined => { if (!themes.themes[themeName]) { - return; + return undefined; } const theme: Theme = { ...derivedStyles, diff --git a/src/common/dom/dynamic-element-directive.ts b/src/common/dom/dynamic-element-directive.ts index a7b74ce1cd..8f05f437ef 100644 --- a/src/common/dom/dynamic-element-directive.ts +++ b/src/common/dom/dynamic-element-directive.ts @@ -1,4 +1,4 @@ -import { directive, Part, NodePart } from "lit-html"; +import { directive, NodePart, Part } from "lit-html"; export const dynamicElement = directive( (tag: string, properties?: { [key: string]: any }) => (part: Part): void => { diff --git a/src/common/dom/fire_event.ts b/src/common/dom/fire_event.ts index 2e3a136225..a72bb67ea5 100644 --- a/src/common/dom/fire_event.ts +++ b/src/common/dom/fire_event.ts @@ -29,7 +29,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. declare global { - // tslint:disable-next-line + // eslint-disable-next-line interface HASSDomEvents {} } diff --git a/src/common/dom/is-navigation-click.ts b/src/common/dom/is-navigation-click.ts index 3ab515b778..05edb52e14 100644 --- a/src/common/dom/is-navigation-click.ts +++ b/src/common/dom/is-navigation-click.ts @@ -7,7 +7,7 @@ export const isNavigationClick = (e: MouseEvent) => { e.ctrlKey || e.shiftKey ) { - return; + return undefined; } const anchor = e @@ -21,23 +21,23 @@ export const isNavigationClick = (e: MouseEvent) => { anchor.hasAttribute("download") || anchor.getAttribute("rel") === "external" ) { - return; + return undefined; } let href = anchor.href; if (!href || href.indexOf("mailto:") !== -1) { - return; + return undefined; } const location = window.location; const origin = location.origin || location.protocol + "//" + location.host; if (href.indexOf(origin) !== 0) { - return; + return undefined; } href = href.substr(origin.length); if (href === "#") { - return; + return undefined; } e.preventDefault(); diff --git a/src/common/dom/setup-leaflet-map.ts b/src/common/dom/setup-leaflet-map.ts index f29b5e257b..9d95f5aee2 100644 --- a/src/common/dom/setup-leaflet-map.ts +++ b/src/common/dom/setup-leaflet-map.ts @@ -12,7 +12,7 @@ export const setupLeafletMap = async ( if (!mapElement.parentNode) { throw new Error("Cannot setup Leaflet map on disconnected element"); } - // tslint:disable-next-line + // eslint-disable-next-line const Leaflet = (await import( /* webpackChunkName: "leaflet" */ "leaflet" )) as LeafletModuleType; diff --git a/src/common/dom/speech-recognition.ts b/src/common/dom/speech-recognition.ts index 6b7850dfeb..a3003974fb 100644 --- a/src/common/dom/speech-recognition.ts +++ b/src/common/dom/speech-recognition.ts @@ -1,4 +1,4 @@ -/* tslint:disable */ +/* eslint-disable */ // @ts-ignore export const SpeechRecognition = // @ts-ignore @@ -11,4 +11,4 @@ export const SpeechGrammarList = export const SpeechRecognitionEvent = // @ts-ignore window.SpeechRecognitionEvent || window.webkitSpeechRecognitionEvent; -/* tslint:enable */ +/* eslint-enable */ diff --git a/src/common/entity/can_toggle_state.ts b/src/common/entity/can_toggle_state.ts index 8043833804..f0480b60ff 100644 --- a/src/common/entity/can_toggle_state.ts +++ b/src/common/entity/can_toggle_state.ts @@ -1,7 +1,7 @@ import { HassEntity } from "home-assistant-js-websocket"; +import { HomeAssistant } from "../../types"; import { canToggleDomain } from "./can_toggle_domain"; import { computeStateDomain } from "./compute_state_domain"; -import { HomeAssistant } from "../../types"; import { supportsFeature } from "./supports-feature"; export const canToggleState = (hass: HomeAssistant, stateObj: HassEntity) => { diff --git a/src/common/entity/compute_state_display.ts b/src/common/entity/compute_state_display.ts index c802c7c56a..2159a4e69a 100644 --- a/src/common/entity/compute_state_display.ts +++ b/src/common/entity/compute_state_display.ts @@ -1,9 +1,9 @@ import { HassEntity } from "home-assistant-js-websocket"; -import { computeStateDomain } from "./compute_state_domain"; -import { formatDateTime } from "../datetime/format_date_time"; import { formatDate } from "../datetime/format_date"; +import { formatDateTime } from "../datetime/format_date_time"; import { formatTime } from "../datetime/format_time"; import { LocalizeFunc } from "../translations/localize"; +import { computeStateDomain } from "./compute_state_domain"; export const computeStateDisplay = ( localize: LocalizeFunc, diff --git a/src/common/entity/domain_icon.ts b/src/common/entity/domain_icon.ts index e735df808c..cf0617923b 100644 --- a/src/common/entity/domain_icon.ts +++ b/src/common/entity/domain_icon.ts @@ -107,7 +107,7 @@ export const domainIcon = (domain: string, state?: string): string => { } default: - // tslint:disable-next-line + // eslint-disable-next-line console.warn( "Unable to find icon for domain " + domain + " (" + state + ")" ); diff --git a/src/common/entity/extract_views.ts b/src/common/entity/extract_views.ts index 34965369ba..b29dff5cae 100644 --- a/src/common/entity/extract_views.ts +++ b/src/common/entity/extract_views.ts @@ -1,6 +1,6 @@ import { HassEntities } from "home-assistant-js-websocket"; -import { DEFAULT_VIEW_ENTITY_ID } from "../const"; import { GroupEntity } from "../../types"; +import { DEFAULT_VIEW_ENTITY_ID } from "../const"; // Return an ordered array of available views export const extractViews = (entities: HassEntities): GroupEntity[] => { diff --git a/src/common/entity/get_view_entities.ts b/src/common/entity/get_view_entities.ts index ac7cb86e0b..9b2155244f 100644 --- a/src/common/entity/get_view_entities.ts +++ b/src/common/entity/get_view_entities.ts @@ -1,7 +1,7 @@ import { HassEntities } from "home-assistant-js-websocket"; +import { GroupEntity } from "../../types"; import { computeDomain } from "./compute_domain"; import { getGroupEntities } from "./get_group_entities"; -import { GroupEntity } from "../../types"; // Return an object containing all entities that the view will show // including embedded groups. diff --git a/src/common/entity/input_dateteime_icon.ts b/src/common/entity/input_dateteime_icon.ts index 870ecf80c3..75644ad72b 100644 --- a/src/common/entity/input_dateteime_icon.ts +++ b/src/common/entity/input_dateteime_icon.ts @@ -1,6 +1,6 @@ /** Return an icon representing an input datetime state. */ -import { domainIcon } from "./domain_icon"; import { HassEntity } from "home-assistant-js-websocket"; +import { domainIcon } from "./domain_icon"; export const inputDateTimeIcon = (state: HassEntity): string => { if (!state.attributes.has_date) { diff --git a/src/common/entity/split_by_groups.ts b/src/common/entity/split_by_groups.ts index 72bf70bb50..f96be797c0 100644 --- a/src/common/entity/split_by_groups.ts +++ b/src/common/entity/split_by_groups.ts @@ -1,6 +1,6 @@ -import { computeDomain } from "./compute_domain"; import { HassEntities } from "home-assistant-js-websocket"; import { GroupEntity } from "../../types"; +import { computeDomain } from "./compute_domain"; // Split a collection into a list of groups and a 'rest' list of ungrouped // entities. diff --git a/src/common/entity/state_card_type.ts b/src/common/entity/state_card_type.ts index f3b759be2c..a24994d5b3 100644 --- a/src/common/entity/state_card_type.ts +++ b/src/common/entity/state_card_type.ts @@ -1,8 +1,8 @@ import { HassEntity } from "home-assistant-js-websocket"; +import { HomeAssistant } from "../../types"; +import { DOMAINS_WITH_CARD } from "../const"; import { canToggleState } from "./can_toggle_state"; import { computeStateDomain } from "./compute_state_domain"; -import { DOMAINS_WITH_CARD } from "../const"; -import { HomeAssistant } from "../../types"; export const stateCardType = (hass: HomeAssistant, stateObj: HassEntity) => { if (stateObj.state === "unavailable") { diff --git a/src/common/entity/state_icon.ts b/src/common/entity/state_icon.ts index aeb399e6c4..7291f6863e 100644 --- a/src/common/entity/state_icon.ts +++ b/src/common/entity/state_icon.ts @@ -2,12 +2,11 @@ import { HassEntity } from "home-assistant-js-websocket"; import { DEFAULT_DOMAIN_ICON } from "../const"; import { binarySensorIcon } from "./binary_sensor_icon"; - import { computeDomain } from "./compute_domain"; -import { domainIcon } from "./domain_icon"; import { coverIcon } from "./cover_icon"; -import { sensorIcon } from "./sensor_icon"; +import { domainIcon } from "./domain_icon"; import { inputDateTimeIcon } from "./input_dateteime_icon"; +import { sensorIcon } from "./sensor_icon"; const domainIcons = { binary_sensor: binarySensorIcon, diff --git a/src/common/entity/state_more_info_type.ts b/src/common/entity/state_more_info_type.ts index 028f4ed12e..170b83052d 100644 --- a/src/common/entity/state_more_info_type.ts +++ b/src/common/entity/state_more_info_type.ts @@ -1,6 +1,6 @@ import { HassEntity } from "home-assistant-js-websocket"; -import { computeStateDomain } from "./compute_state_domain"; import { DOMAINS_HIDE_MORE_INFO, DOMAINS_WITH_MORE_INFO } from "../const"; +import { computeStateDomain } from "./compute_state_domain"; export const stateMoreInfoType = (stateObj: HassEntity) => { const domain = computeStateDomain(stateObj); diff --git a/src/common/entity/supports-feature.ts b/src/common/entity/supports-feature.ts index 9aa833c035..24f1b598cc 100644 --- a/src/common/entity/supports-feature.ts +++ b/src/common/entity/supports-feature.ts @@ -4,6 +4,6 @@ export const supportsFeature = ( stateObj: HassEntity, feature: number ): boolean => { - // tslint:disable-next-line:no-bitwise + // eslint-disable-next-line:no-bitwise return (stateObj.attributes.supported_features! & feature) !== 0; }; diff --git a/src/common/entity/valid_entity_id.ts b/src/common/entity/valid_entity_id.ts index df89f88e54..4e8e6770f2 100644 --- a/src/common/entity/valid_entity_id.ts +++ b/src/common/entity/valid_entity_id.ts @@ -6,7 +6,7 @@ export const isValidEntityId = (entityId: string) => export const createValidEntityId = (input: string) => input .toLowerCase() - .replace(/\s|\'/g, "_") // replace spaces and quotes with underscore + .replace(/\s|'/g, "_") // replace spaces and quotes with underscore .replace(/\W/g, "") // remove not allowed chars .replace(/_{2,}/g, "_") // replace multiple underscores with 1 .replace(/_$/, ""); // remove underscores at the end diff --git a/src/common/navigate.ts b/src/common/navigate.ts index 20d45623c9..657bbbf528 100644 --- a/src/common/navigate.ts +++ b/src/common/navigate.ts @@ -9,23 +9,17 @@ declare global { } } -export const navigate = ( - _node: any, - path: string, - replace: boolean = false -) => { +export const navigate = (_node: any, path: string, replace = false) => { if (__DEMO__) { if (replace) { history.replaceState(null, "", `${location.pathname}#${path}`); } else { window.location.hash = path; } + } else if (replace) { + history.replaceState(null, "", path); } else { - if (replace) { - history.replaceState(null, "", path); - } else { - history.pushState(null, "", path); - } + history.pushState(null, "", path); } fireEvent(window, "location-changed", { replace, diff --git a/src/common/search/search-input.ts b/src/common/search/search-input.ts index d24295c5d4..c04395a8f5 100644 --- a/src/common/search/search-input.ts +++ b/src/common/search/search-input.ts @@ -1,4 +1,5 @@ -import { TemplateResult, html } from "lit-html"; +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-input/paper-input"; import { css, CSSResult, @@ -6,17 +7,18 @@ import { LitElement, property, } from "lit-element"; -import { fireEvent } from "../dom/fire_event"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-icon-button/paper-icon-button"; -import "../../components/ha-icon"; +import { html, TemplateResult } from "lit-html"; import { classMap } from "lit-html/directives/class-map"; +import "../../components/ha-icon"; +import { fireEvent } from "../dom/fire_event"; @customElement("search-input") class SearchInput extends LitElement { @property() public filter?: string; + @property({ type: Boolean, attribute: "no-label-float" }) public noLabelFloat? = false; + @property({ type: Boolean, attribute: "no-underline" }) public noUnderline = false; @@ -34,29 +36,27 @@ class SearchInput extends LitElement { } } -
- - - ${this.filter && - html` - - `} - -
+ + + ${this.filter && + html` + + `} + `; } @@ -74,16 +74,7 @@ class SearchInput extends LitElement { static get styles(): CSSResult { return css` - paper-input { - flex: 1 1 auto; - margin: 0 16px; - } - .search-container { - display: inline-flex; - width: 100%; - align-items: center; - } - .prefix { + ha-icon { margin: 8px; } `; diff --git a/src/common/string/slugify.ts b/src/common/string/slugify.ts index 74a21b5c8f..05c6f3352c 100644 --- a/src/common/string/slugify.ts +++ b/src/common/string/slugify.ts @@ -12,8 +12,8 @@ export const slugify = (value: string) => { .replace(/\s+/g, "-") // Replace spaces with - .replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters .replace(/&/g, "-and-") // Replace & with 'and' - .replace(/[^\w\-]+/g, "") // Remove all non-word characters - .replace(/\-\-+/g, "-") // Replace multiple - with single - + .replace(/[^\w-]+/g, "") // Remove all non-word characters + .replace(/--+/g, "-") // Replace multiple - with single - .replace(/^-+/, "") // Trim - from start of text .replace(/-+$/, ""); // Trim - from end of text }; diff --git a/src/common/util/debounce.ts b/src/common/util/debounce.ts index 4164edb75a..fedd679e2e 100644 --- a/src/common/util/debounce.ts +++ b/src/common/util/debounce.ts @@ -4,7 +4,7 @@ // be triggered. The function will be called after it stops being called for // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. -// tslint:disable-next-line: ban-types +// eslint-disable-next-line: ban-types export const debounce = ( func: T, wait, @@ -12,9 +12,9 @@ export const debounce = ( ): T => { let timeout; // @ts-ignore - return function(...args) { - // tslint:disable:no-this-assignment + return function (...args) { // @ts-ignore + // eslint-disable-next-line @typescript-eslint/no-this-alias const context = this; const later = () => { timeout = null; diff --git a/src/common/util/deep-equal.ts b/src/common/util/deep-equal.ts index 3342479564..780aef6952 100644 --- a/src/common/util/deep-equal.ts +++ b/src/common/util/deep-equal.ts @@ -79,8 +79,7 @@ export const deepEqual = (a: any, b: any): boolean => { return a.toString() === b.toString(); } - let keys: string[]; - keys = Object.keys(a); + const keys = Object.keys(a); length = keys.length; if (length !== Object.keys(b).length) { return false; @@ -103,5 +102,6 @@ export const deepEqual = (a: any, b: any): boolean => { } // true if both NaN, false otherwise + // eslint-disable-next-line no-self-compare return a !== a && b !== b; }; diff --git a/src/common/util/patch.ts b/src/common/util/patch.ts index 933ff0abdb..3ad6f8bece 100644 --- a/src/common/util/patch.ts +++ b/src/common/util/patch.ts @@ -1,21 +1,21 @@ -export const applyPatch = (data, path, value) => { +export const applyPatch = (data, path, value): void => { if (path.length === 1) { data[path[0]] = value; - } else { - if (!data[path[0]]) { - data[path[0]] = {}; - } - return applyPatch(data[path[0]], path.slice(1), value); + return; } + if (!data[path[0]]) { + data[path[0]] = {}; + } + // eslint-disable-next-line consistent-return + return applyPatch(data[path[0]], path.slice(1), value); }; -export const getPath = (data, path) => { +export const getPath = (data, path): any | undefined => { if (path.length === 1) { return data[path[0]]; - } else { - if (data[path[0]] === undefined) { - return undefined; - } - return getPath(data[path[0]], path.slice(1)); } + if (data[path[0]] === undefined) { + return undefined; + } + return getPath(data[path[0]], path.slice(1)); }; diff --git a/src/common/util/subscribe-one.ts b/src/common/util/subscribe-one.ts index 7480a517db..f86bfb7388 100644 --- a/src/common/util/subscribe-one.ts +++ b/src/common/util/subscribe-one.ts @@ -1,4 +1,4 @@ -import { UnsubscribeFunc, Connection } from "home-assistant-js-websocket"; +import { Connection, UnsubscribeFunc } from "home-assistant-js-websocket"; export const subscribeOne = async ( conn: Connection, diff --git a/src/components/buttons/ha-call-api-button.js b/src/components/buttons/ha-call-api-button.js index 59c7c8e748..ba090cc9fd 100644 --- a/src/components/buttons/ha-call-api-button.js +++ b/src/components/buttons/ha-call-api-button.js @@ -1,7 +1,6 @@ -import { LitElement, html } from "lit-element"; - -import "./ha-progress-button"; +import { html, LitElement } from "lit-element"; import { fireEvent } from "../../common/dom/fire_event"; +import "./ha-progress-button"; class HaCallApiButton extends LitElement { render() { diff --git a/src/components/buttons/ha-call-service-button.js b/src/components/buttons/ha-call-service-button.js index c8d7b79b56..5166c615e4 100644 --- a/src/components/buttons/ha-call-service-button.js +++ b/src/components/buttons/ha-call-service-button.js @@ -1,9 +1,9 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./ha-progress-button"; -import { EventsMixin } from "../../mixins/events-mixin"; import { showConfirmationDialog } from "../../dialogs/generic/show-dialog-box"; +import { EventsMixin } from "../../mixins/events-mixin"; +import "./ha-progress-button"; /* * @appliesMixin EventsMixin @@ -53,6 +53,7 @@ class HaCallServiceButton extends EventsMixin(PolymerElement) { callService() { this.progress = true; + // eslint-disable-next-line @typescript-eslint/no-this-alias var el = this; var eventData = { domain: this.domain, @@ -63,18 +64,18 @@ class HaCallServiceButton extends EventsMixin(PolymerElement) { this.hass .callService(this.domain, this.service, this.serviceData) .then( - function() { + function () { el.progress = false; el.$.progress.actionSuccess(); eventData.success = true; }, - function() { + function () { el.progress = false; el.$.progress.actionError(); eventData.success = false; } ) - .then(function() { + .then(function () { el.fire("hass-service-called", eventData); }); } diff --git a/src/components/buttons/ha-progress-button.js b/src/components/buttons/ha-progress-button.js index 9f14d21d18..50212e9967 100644 --- a/src/components/buttons/ha-progress-button.js +++ b/src/components/buttons/ha-progress-button.js @@ -1,6 +1,7 @@ import "@material/mwc-button"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaProgressButton extends PolymerElement { diff --git a/src/components/data-table/ha-data-table.ts b/src/components/data-table/ha-data-table.ts index b091357df9..fff8ab1bd0 100644 --- a/src/components/data-table/ha-data-table.ts +++ b/src/components/data-table/ha-data-table.ts @@ -1,36 +1,29 @@ import deepClone from "deep-clone-simple"; - -import { classMap } from "lit-html/directives/class-map"; - -import { scroll } from "lit-virtualizer"; - import { - html, - query, - CSSResult, css, + CSSResult, customElement, - property, - TemplateResult, - PropertyValues, + html, LitElement, + property, + PropertyValues, + query, + TemplateResult, } from "lit-element"; - -// eslint-disable-next-line import/no-webpack-loader-syntax -// @ts-ignore -// tslint:disable-next-line: no-implicit-dependencies -import sortFilterWorker from "workerize-loader!./sort_filter_worker"; - -import "../ha-icon"; -import "../../common/search/search-input"; -import "../ha-checkbox"; -// tslint:disable-next-line -import { HaCheckbox } from "../ha-checkbox"; -import { fireEvent } from "../../common/dom/fire_event"; -import { nextRender } from "../../common/util/render-status"; -import { debounce } from "../../common/util/debounce"; -import { styleMap } from "lit-html/directives/style-map"; +import { classMap } from "lit-html/directives/class-map"; import { ifDefined } from "lit-html/directives/if-defined"; +import { styleMap } from "lit-html/directives/style-map"; +import { scroll } from "lit-virtualizer"; +// @ts-ignore +// eslint-disable-next-line import/no-webpack-loader-syntax +import sortFilterWorker from "workerize-loader!./sort_filter_worker"; +import { fireEvent } from "../../common/dom/fire_event"; +import "../../common/search/search-input"; +import { debounce } from "../../common/util/debounce"; +import { nextRender } from "../../common/util/render-status"; +import "../ha-checkbox"; +import type { HaCheckbox } from "../ha-checkbox"; +import "../ha-icon"; declare global { // for fire event @@ -84,28 +77,46 @@ export interface DataTableRowData { @customElement("ha-data-table") export class HaDataTable extends LitElement { @property({ type: Object }) public columns: DataTableColumnContainer = {}; + @property({ type: Array }) public data: DataTableRowData[] = []; + @property({ type: Boolean }) public selectable = false; + @property({ type: Boolean }) public hasFab = false; + @property({ type: Boolean, attribute: "auto-height" }) public autoHeight = false; + @property({ type: String }) public id = "id"; + @property({ type: String }) public noDataText?: string; + @property({ type: String }) public filter = ""; + @property({ type: Boolean }) private _filterable = false; + @property({ type: String }) private _filter = ""; + @property({ type: String }) private _sortColumn?: string; + @property({ type: String }) private _sortDirection: SortingDirection = null; + @property({ type: Array }) private _filteredData: DataTableRowData[] = []; + @query("slot[name='header']") private _header!: HTMLSlotElement; + @query(".mdc-data-table__table") private _table!: HTMLDivElement; private _checkableRowsCount?: number; + private _checkedRows: string[] = []; + private _sortColumns: { [key: string]: DataTableSortColumnData; } = {}; + private curRequest = 0; + private _worker: any | undefined; private _debounceSearch = debounce( @@ -217,9 +228,9 @@ export class HaDataTable extends LitElement { class="mdc-data-table__row-checkbox" @change=${this._handleHeaderRowCheckboxClick} .indeterminate=${this._checkedRows.length && - this._checkedRows.length !== this._checkableRowsCount} + this._checkedRows.length !== this._checkableRowsCount} .checked=${this._checkedRows.length === - this._checkableRowsCount} + this._checkableRowsCount} >
@@ -288,9 +299,7 @@ export class HaDataTable extends LitElement { : [...this._filteredData, ...[{ empty: true }]], renderItem: (row: DataTableRowData) => { if (row.empty) { - return html` -
- `; + return html`
`; } return html`
{ protected NO_AUTOMATION_TEXT = "No actions"; + protected UNKNOWN_AUTOMATION_TEXT = "Unknown action"; constructor() { diff --git a/src/components/device/ha-device-automation-picker.ts b/src/components/device/ha-device-automation-picker.ts index e7237d106e..b32446710a 100644 --- a/src/components/device/ha-device-automation-picker.ts +++ b/src/components/device/ha-device-automation-picker.ts @@ -3,20 +3,20 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-listbox/paper-listbox"; import { - LitElement, - TemplateResult, - html, css, CSSResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; import { DeviceAutomation, deviceAutomationsEqual, } from "../../data/device_automation"; -import "../../components/ha-paper-dropdown-menu"; +import { HomeAssistant } from "../../types"; +import "../ha-paper-dropdown-menu"; const NO_AUTOMATION_KEY = "NO_AUTOMATION"; const UNKNOWN_AUTOMATION_KEY = "UNKNOWN_AUTOMATION"; @@ -25,11 +25,17 @@ export abstract class HaDeviceAutomationPicker< T extends DeviceAutomation > extends LitElement { @property() public hass!: HomeAssistant; + @property() public label?: string; + @property() public deviceId?: string; + @property() public value?: T; + protected NO_AUTOMATION_TEXT = "No automations"; + protected UNKNOWN_AUTOMATION_TEXT = "Unknown automation"; + @property() private _automations: T[] = []; // Trigger an empty render so we start with a clean DOM. @@ -40,10 +46,12 @@ export abstract class HaDeviceAutomationPicker< hass: HomeAssistant, automation: T ) => string; + private _fetchDeviceAutomations: ( hass: HomeAssistant, deviceId: string ) => Promise; + private _createNoAutomation: (deviceId?: string) => T; constructor( diff --git a/src/components/device/ha-device-condition-picker.ts b/src/components/device/ha-device-condition-picker.ts index d0a45fe8e8..dbe95c8f6a 100644 --- a/src/components/device/ha-device-condition-picker.ts +++ b/src/components/device/ha-device-condition-picker.ts @@ -4,7 +4,7 @@ import { fetchDeviceConditions, localizeDeviceAutomationCondition, } from "../../data/device_automation"; -import "../../components/ha-paper-dropdown-menu"; +import "../ha-paper-dropdown-menu"; import { HaDeviceAutomationPicker } from "./ha-device-automation-picker"; @customElement("ha-device-condition-picker") @@ -12,6 +12,7 @@ class HaDeviceConditionPicker extends HaDeviceAutomationPicker< DeviceCondition > { protected NO_AUTOMATION_TEXT = "No conditions"; + protected UNKNOWN_AUTOMATION_TEXT = "Unknown condition"; constructor() { diff --git a/src/components/device/ha-device-picker.ts b/src/components/device/ha-device-picker.ts index c232393e4c..a0d52389e7 100644 --- a/src/components/device/ha-device-picker.ts +++ b/src/components/device/ha-device-picker.ts @@ -1,40 +1,39 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; -import "@vaadin/vaadin-combo-box/theme/material/vaadin-combo-box-light"; import "@polymer/paper-listbox/paper-listbox"; -import memoizeOne from "memoize-one"; +import "@vaadin/vaadin-combo-box/theme/material/vaadin-combo-box-light"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, - html, css, CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { SubscribeMixin } from "../../mixins/subscribe-mixin"; - -import { HomeAssistant } from "../../types"; +import memoizeOne from "memoize-one"; import { fireEvent } from "../../common/dom/fire_event"; -import { - DeviceRegistryEntry, - subscribeDeviceRegistry, - computeDeviceName, - DeviceEntityLookup, -} from "../../data/device_registry"; +import { computeDomain } from "../../common/entity/compute_domain"; import { compare } from "../../common/string/compare"; -import { PolymerChangedEvent } from "../../polymer-types"; import { AreaRegistryEntry, subscribeAreaRegistry, } from "../../data/area_registry"; +import { + computeDeviceName, + DeviceEntityLookup, + DeviceRegistryEntry, + subscribeDeviceRegistry, +} from "../../data/device_registry"; import { EntityRegistryEntry, subscribeEntityRegistry, } from "../../data/entity_registry"; -import { computeDomain } from "../../common/entity/compute_domain"; +import { SubscribeMixin } from "../../mixins/subscribe-mixin"; +import { PolymerChangedEvent } from "../../polymer-types"; +import { HomeAssistant } from "../../types"; interface Device { name: string; @@ -67,11 +66,17 @@ const rowRenderer = (root: HTMLElement, _owner, model: { item: Device }) => { @customElement("ha-device-picker") export class HaDevicePicker extends SubscribeMixin(LitElement) { @property() public hass!: HomeAssistant; + @property() public label?: string; + @property() public value?: string; + @property() public devices?: DeviceRegistryEntry[]; + @property() public areas?: AreaRegistryEntry[]; + @property() public entities?: EntityRegistryEntry[]; + /** * Show only devices with entities from specific domains. * @type {Array} @@ -79,6 +84,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) { */ @property({ type: Array, attribute: "include-domains" }) public includeDomains?: string[]; + /** * Show no devices with entities of these domains. * @type {Array} @@ -86,6 +92,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) { */ @property({ type: Array, attribute: "exclude-domains" }) public excludeDomains?: string[]; + /** * Show only deviced with entities of these device classes. * @type {Array} @@ -93,6 +100,7 @@ export class HaDevicePicker extends SubscribeMixin(LitElement) { */ @property({ type: Array, attribute: "include-device-classes" }) public includeDeviceClasses?: string[]; + @property({ type: Boolean }) private _opened?: boolean; diff --git a/src/components/device/ha-device-trigger-picker.ts b/src/components/device/ha-device-trigger-picker.ts index a5913220ac..ec140426ae 100644 --- a/src/components/device/ha-device-trigger-picker.ts +++ b/src/components/device/ha-device-trigger-picker.ts @@ -4,12 +4,13 @@ import { fetchDeviceTriggers, localizeDeviceAutomationTrigger, } from "../../data/device_automation"; -import "../../components/ha-paper-dropdown-menu"; +import "../ha-paper-dropdown-menu"; import { HaDeviceAutomationPicker } from "./ha-device-automation-picker"; @customElement("ha-device-trigger-picker") class HaDeviceTriggerPicker extends HaDeviceAutomationPicker { protected NO_AUTOMATION_TEXT = "No triggers"; + protected UNKNOWN_AUTOMATION_TEXT = "Unknown trigger"; constructor() { diff --git a/src/components/device/ha-devices-picker.ts b/src/components/device/ha-devices-picker.ts index 1902a97c64..4f944c4717 100644 --- a/src/components/device/ha-devices-picker.ts +++ b/src/components/device/ha-devices-picker.ts @@ -1,22 +1,22 @@ -import { - LitElement, - TemplateResult, - property, - html, - customElement, -} from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button-light"; - -import { HomeAssistant } from "../../types"; -import { PolymerChangedEvent } from "../../polymer-types"; +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../../common/dom/fire_event"; - +import { PolymerChangedEvent } from "../../polymer-types"; +import { HomeAssistant } from "../../types"; import "./ha-device-picker"; @customElement("ha-devices-picker") class HaDevicesPicker extends LitElement { @property() public hass?: HomeAssistant; + @property() public value?: string[]; + /** * Show entities from specific domains. * @type {string} @@ -24,6 +24,7 @@ class HaDevicesPicker extends LitElement { */ @property({ type: Array, attribute: "include-domains" }) public includeDomains?: string[]; + /** * Show no entities of these domains. * @type {Array} @@ -31,10 +32,13 @@ class HaDevicesPicker extends LitElement { */ @property({ type: Array, attribute: "exclude-domains" }) public excludeDomains?: string[]; + @property({ attribute: "picked-device-label" }) @property({ type: Array, attribute: "include-device-classes" }) public includeDeviceClasses?: string[]; + public pickedDeviceLabel?: string; + @property({ attribute: "pick-device-label" }) public pickDeviceLabel?: string; protected render(): TemplateResult { diff --git a/src/components/dialog/ha-iron-focusables-helper.js b/src/components/dialog/ha-iron-focusables-helper.js index 4ae78090e5..7accb98257 100644 --- a/src/components/dialog/ha-iron-focusables-helper.js +++ b/src/components/dialog/ha-iron-focusables-helper.js @@ -11,9 +11,8 @@ found at http://polymer.github.io/PATENTS.txt /* Fixes issue with not using shadow dom properly in iron-overlay-behavior/icon-focusables-helper.js */ -import { dom } from "@polymer/polymer/lib/legacy/polymer.dom.js"; - -import { IronFocusablesHelper } from "@polymer/iron-overlay-behavior/iron-focusables-helper.js"; +import { IronFocusablesHelper } from "@polymer/iron-overlay-behavior/iron-focusables-helper"; +import { dom } from "@polymer/polymer/lib/legacy/polymer.dom"; export const HaIronFocusablesHelper = { /** @@ -23,7 +22,7 @@ export const HaIronFocusablesHelper = { * @param {!Node} node * @return {!Array} */ - getTabbableNodes: function(node) { + getTabbableNodes: function (node) { var result = []; // If there is at least one element with tabindex > 0, we need to sort // the final array by tabindex. @@ -43,7 +42,7 @@ export const HaIronFocusablesHelper = { * @return {boolean} * @private */ - _collectTabbableNodes: function(node, result) { + _collectTabbableNodes: function (node, result) { // If not an element or not visible, no need to explore children. if ( node.nodeType !== Node.ELEMENT_NODE || diff --git a/src/components/dialog/ha-paper-dialog.ts b/src/components/dialog/ha-paper-dialog.ts index 7ddef793c6..aec360155b 100644 --- a/src/components/dialog/ha-paper-dialog.ts +++ b/src/components/dialog/ha-paper-dialog.ts @@ -1,10 +1,12 @@ import "@polymer/paper-dialog/paper-dialog"; +import type { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; import { mixinBehaviors } from "@polymer/polymer/lib/legacy/class"; -import { HaIronFocusablesHelper } from "./ha-iron-focusables-helper.js"; -// tslint:disable-next-line -import { PaperDialogElement } from "@polymer/paper-dialog/paper-dialog"; +import type { Constructor } from "../../types"; +import { HaIronFocusablesHelper } from "./ha-iron-focusables-helper"; -const paperDialogClass = customElements.get("paper-dialog"); +const paperDialogClass = customElements.get("paper-dialog") as Constructor< + PaperDialogElement +>; // behavior that will override existing iron-overlay-behavior and call the fixed implementation const haTabFixBehaviorImpl = { @@ -25,4 +27,5 @@ declare global { "ha-paper-dialog": HaPaperDialog; } } +// @ts-ignore customElements.define("ha-paper-dialog", HaPaperDialog); diff --git a/src/components/entity/ha-chart-base.js b/src/components/entity/ha-chart-base.js index ffa76a1d56..e5598b35f7 100644 --- a/src/components/entity/ha-chart-base.js +++ b/src/components/entity/ha-chart-base.js @@ -1,12 +1,13 @@ -import { PolymerElement } from "@polymer/polymer/polymer-element"; +/* eslint-plugin-disable lit */ import { IronResizableBehavior } from "@polymer/iron-resizable-behavior/iron-resizable-behavior"; import "@polymer/paper-icon-button/paper-icon-button"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; -import { timeOut } from "@polymer/polymer/lib/utils/async"; import { mixinBehaviors } from "@polymer/polymer/lib/legacy/class"; - +import { timeOut } from "@polymer/polymer/lib/utils/async"; +import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; +import { html } from "@polymer/polymer/lib/utils/html-tag"; +import { PolymerElement } from "@polymer/polymer/polymer-element"; import { formatTime } from "../../common/datetime/format_time"; + // eslint-disable-next-line no-unused-vars /* global Chart moment Color */ diff --git a/src/components/entity/ha-entities-picker.ts b/src/components/entity/ha-entities-picker.ts index 05fd062eb5..4824bf046e 100644 --- a/src/components/entity/ha-entities-picker.ts +++ b/src/components/entity/ha-entities-picker.ts @@ -1,27 +1,25 @@ -import { - LitElement, - TemplateResult, - property, - html, - customElement, -} from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button-light"; - -import { HomeAssistant } from "../../types"; -import { PolymerChangedEvent } from "../../polymer-types"; +import type { HassEntity } from "home-assistant-js-websocket"; +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../../common/dom/fire_event"; import { isValidEntityId } from "../../common/entity/valid_entity_id"; - +import type { PolymerChangedEvent } from "../../polymer-types"; +import type { HomeAssistant } from "../../types"; import "./ha-entity-picker"; -// Not a duplicate, type import -// tslint:disable-next-line -import { HaEntityPickerEntityFilterFunc } from "./ha-entity-picker"; -import { HassEntity } from "home-assistant-js-websocket"; +import type { HaEntityPickerEntityFilterFunc } from "./ha-entity-picker"; @customElement("ha-entities-picker") class HaEntitiesPickerLight extends LitElement { @property() public hass?: HomeAssistant; + @property() public value?: string[]; + /** * Show entities from specific domains. * @type {string} @@ -29,6 +27,7 @@ class HaEntitiesPickerLight extends LitElement { */ @property({ type: Array, attribute: "include-domains" }) public includeDomains?: string[]; + /** * Show no entities of these domains. * @type {Array} @@ -36,8 +35,10 @@ class HaEntitiesPickerLight extends LitElement { */ @property({ type: Array, attribute: "exclude-domains" }) public excludeDomains?: string[]; + @property({ attribute: "picked-entity-label" }) public pickedEntityLabel?: string; + @property({ attribute: "pick-entity-label" }) public pickEntityLabel?: string; protected render(): TemplateResult { diff --git a/src/components/entity/ha-entity-picker.ts b/src/components/entity/ha-entity-picker.ts index d2ddd62165..393a77fb0c 100644 --- a/src/components/entity/ha-entity-picker.ts +++ b/src/components/entity/ha-entity-picker.ts @@ -3,25 +3,23 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-item/paper-item-body"; import "@vaadin/vaadin-combo-box/theme/material/vaadin-combo-box-light"; -import memoizeOne from "memoize-one"; - -import "./state-badge"; - -import { computeStateName } from "../../common/entity/compute_state_name"; +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, - html, css, CSSResult, + html, + LitElement, property, PropertyValues, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../types"; -import { HassEntity } from "home-assistant-js-websocket"; -import { PolymerChangedEvent } from "../../polymer-types"; +import memoizeOne from "memoize-one"; import { fireEvent } from "../../common/dom/fire_event"; import { computeDomain } from "../../common/entity/compute_domain"; +import { computeStateName } from "../../common/entity/compute_state_name"; +import { PolymerChangedEvent } from "../../polymer-types"; +import { HomeAssistant } from "../../types"; +import "./state-badge"; export type HaEntityPickerEntityFilterFunc = (entityId: HassEntity) => boolean; @@ -54,13 +52,19 @@ const rowRenderer = ( }; class HaEntityPicker extends LitElement { - @property({ type: Boolean }) public autofocus?: boolean; + @property({ type: Boolean }) public autofocus = false; + @property({ type: Boolean }) public disabled?: boolean; + @property({ type: Boolean, attribute: "allow-custom-entity" }) public allowCustomEntity; + @property() public hass?: HomeAssistant; + @property() public label?: string; + @property() public value?: string; + /** * Show entities from specific domains. * @type {Array} @@ -68,6 +72,7 @@ class HaEntityPicker extends LitElement { */ @property({ type: Array, attribute: "include-domains" }) public includeDomains?: string[]; + /** * Show no entities of these domains. * @type {Array} @@ -75,6 +80,7 @@ class HaEntityPicker extends LitElement { */ @property({ type: Array, attribute: "exclude-domains" }) public excludeDomains?: string[]; + /** * Show only entities of these device classes. * @type {Array} @@ -82,8 +88,11 @@ class HaEntityPicker extends LitElement { */ @property({ type: Array, attribute: "include-device-classes" }) public includeDeviceClasses?: string[]; + @property() public entityFilter?: HaEntityPickerEntityFilterFunc; + @property({ type: Boolean }) private _opened?: boolean; + @property() private _hass?: HomeAssistant; private _getStates = memoizeOne( diff --git a/src/components/entity/ha-entity-toggle.ts b/src/components/entity/ha-entity-toggle.ts index 6c5f757724..67549ca090 100644 --- a/src/components/entity/ha-entity-toggle.ts +++ b/src/components/entity/ha-entity-toggle.ts @@ -1,38 +1,38 @@ import "@polymer/paper-icon-button/paper-icon-button"; - -import { STATES_OFF } from "../../common/const"; +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, - html, - CSSResult, css, + CSSResult, + html, + LitElement, property, PropertyValues, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../types"; -import { HassEntity } from "home-assistant-js-websocket"; -import { forwardHaptic } from "../../data/haptics"; - +import { STATES_OFF } from "../../common/const"; import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { computeStateName } from "../../common/entity/compute_state_name"; - +import { UNAVAILABLE_STATES } from "../../data/entity"; +import { forwardHaptic } from "../../data/haptics"; +import { HomeAssistant } from "../../types"; import "../ha-switch"; const isOn = (stateObj?: HassEntity) => - stateObj !== undefined && !STATES_OFF.includes(stateObj.state); + stateObj !== undefined && + !STATES_OFF.includes(stateObj.state) && + !UNAVAILABLE_STATES.includes(stateObj.state); class HaEntityToggle extends LitElement { // hass is not a property so that we only re-render on stateObj changes public hass?: HomeAssistant; + @property() public stateObj?: HassEntity; - @property() private _isOn: boolean = false; + + @property() private _isOn = false; protected render(): TemplateResult { if (!this.stateObj) { - return html` - - `; + return html` `; } if (this.stateObj.attributes.assumed_state) { @@ -40,12 +40,14 @@ class HaEntityToggle extends LitElement { @@ -58,6 +60,7 @@ class HaEntityToggle extends LitElement { this._isOn ? "off" : "on" }`} .checked=${this._isOn} + .disabled=${UNAVAILABLE_STATES.includes(this.stateObj.state)} @change=${this._toggleChanged} > `; diff --git a/src/components/entity/ha-state-icon.js b/src/components/entity/ha-state-icon.js index 33923171fc..80a7ad22d1 100644 --- a/src/components/entity/ha-state-icon.js +++ b/src/components/entity/ha-state-icon.js @@ -1,14 +1,12 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../ha-icon"; import { stateIcon } from "../../common/entity/state_icon"; +import "../ha-icon"; class HaStateIcon extends PolymerElement { static get template() { - return html` - - `; + return html` `; } static get properties() { diff --git a/src/components/entity/ha-state-label-badge.ts b/src/components/entity/ha-state-label-badge.ts index ce8a4c6344..bc734dfd57 100644 --- a/src/components/entity/ha-state-label-badge.ts +++ b/src/components/entity/ha-state-label-badge.ts @@ -1,25 +1,22 @@ +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - html, - PropertyValues, - TemplateResult, css, CSSResult, customElement, + html, + LitElement, property, + PropertyValues, + TemplateResult, } from "lit-element"; - -import { HassEntity } from "home-assistant-js-websocket"; import { classMap } from "lit-html/directives/class-map"; -import { HomeAssistant } from "../../types"; - +import secondsToDuration from "../../common/datetime/seconds_to_duration"; import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { computeStateName } from "../../common/entity/compute_state_name"; import { domainIcon } from "../../common/entity/domain_icon"; import { stateIcon } from "../../common/entity/state_icon"; import { timerTimeRemaining } from "../../common/entity/timer_time_remaining"; -import secondsToDuration from "../../common/datetime/seconds_to_duration"; - +import { HomeAssistant } from "../../types"; import "../ha-label-badge"; @customElement("ha-state-label-badge") diff --git a/src/components/entity/state-badge.ts b/src/components/entity/state-badge.ts index 276ab53580..fc5522cedd 100644 --- a/src/components/entity/state-badge.ts +++ b/src/components/entity/state-badge.ts @@ -1,31 +1,34 @@ +import type { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, css, CSSResult, html, + LitElement, property, PropertyValues, query, + TemplateResult, } from "lit-element"; -import "../ha-icon"; +import { ifDefined } from "lit-html/directives/if-defined"; +import { computeActiveState } from "../../common/entity/compute_active_state"; import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { stateIcon } from "../../common/entity/state_icon"; -import { HassEntity } from "home-assistant-js-websocket"; -// Not duplicate, this is for typing. -// tslint:disable-next-line -import { HaIcon } from "../ha-icon"; -import { HomeAssistant } from "../../types"; -import { computeActiveState } from "../../common/entity/compute_active_state"; -import { ifDefined } from "lit-html/directives/if-defined"; import { iconColorCSS } from "../../common/style/icon_color_css"; +import type { HomeAssistant } from "../../types"; +import "../ha-icon"; +import type { HaIcon } from "../ha-icon"; export class StateBadge extends LitElement { public hass?: HomeAssistant; + @property() public stateObj?: HassEntity; + @property() public overrideIcon?: string; + @property() public overrideImage?: string; + @property({ type: Boolean }) public stateColor?: boolean; + @query("ha-icon") private _icon!: HaIcon; protected render(): TemplateResult { @@ -91,7 +94,7 @@ export class StateBadge extends LitElement { const errorMessage = `Type error: state-badge expected number, but type of ${ stateObj.entity_id }.attributes.brightness is ${typeof brightness} (${brightness})`; - // tslint:disable-next-line + // eslint-disable-next-line console.warn(errorMessage); } // lowest brighntess will be around 50% (that's pretty dark) diff --git a/src/components/entity/state-info.js b/src/components/entity/state-info.js index 2bcc4700fa..503240d847 100644 --- a/src/components/entity/state-info.js +++ b/src/components/entity/state-info.js @@ -1,10 +1,10 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../ha-relative-time"; -import "./state-badge"; import { computeStateName } from "../../common/entity/compute_state_name"; import { computeRTL } from "../../common/util/compute_rtl"; +import "../ha-relative-time"; +import "./state-badge"; class StateInfo extends PolymerElement { static get template() { @@ -62,9 +62,7 @@ class StateInfo extends PolymerElement { } static get stateBadgeTemplate() { - return html` - - `; + return html` `; } static get infoTemplate() { diff --git a/src/components/ha-area-picker.ts b/src/components/ha-area-picker.ts index 5e7e7f992d..01d5e71296 100644 --- a/src/components/ha-area-picker.ts +++ b/src/components/ha-area-picker.ts @@ -1,32 +1,31 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; -import "@vaadin/vaadin-combo-box/theme/material/vaadin-combo-box-light"; import "@polymer/paper-listbox/paper-listbox"; +import "@vaadin/vaadin-combo-box/theme/material/vaadin-combo-box-light"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, - html, css, CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { SubscribeMixin } from "../mixins/subscribe-mixin"; - -import { HomeAssistant } from "../types"; import { fireEvent } from "../common/dom/fire_event"; -import { PolymerChangedEvent } from "../polymer-types"; import { AreaRegistryEntry, - subscribeAreaRegistry, createAreaRegistryEntry, + subscribeAreaRegistry, } from "../data/area_registry"; import { - showPromptDialog, showAlertDialog, + showPromptDialog, } from "../dialogs/generic/show-dialog-box"; +import { SubscribeMixin } from "../mixins/subscribe-mixin"; +import { PolymerChangedEvent } from "../polymer-types"; +import { HomeAssistant } from "../types"; const rowRenderer = ( root: HTMLElement, @@ -62,11 +61,16 @@ const rowRenderer = ( @customElement("ha-area-picker") export class HaAreaPicker extends SubscribeMixin(LitElement) { @property() public hass!: HomeAssistant; + @property() public label?: string; + @property() public value?: string; + @property() public _areas?: AreaRegistryEntry[]; + @property({ type: Boolean, attribute: "no-add" }) public noAdd?: boolean; + @property() private _opened?: boolean; public hassSubscribe(): UnsubscribeFunc[] { diff --git a/src/components/ha-attributes.ts b/src/components/ha-attributes.ts index 42f5cbead8..abef729cf6 100644 --- a/src/components/ha-attributes.ts +++ b/src/components/ha-attributes.ts @@ -1,22 +1,22 @@ -import { - property, - LitElement, - TemplateResult, - html, - CSSResult, - css, - customElement, -} from "lit-element"; import { HassEntity } from "home-assistant-js-websocket"; - -import hassAttributeUtil from "../util/hass-attributes-util"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { until } from "lit-html/directives/until"; +import hassAttributeUtil from "../util/hass-attributes-util"; let jsYamlPromise: Promise; @customElement("ha-attributes") class HaAttributes extends LitElement { @property() public stateObj?: HassEntity; + @property() public extraFilters?: string; protected render(): TemplateResult { @@ -102,9 +102,7 @@ class HaAttributes extends LitElement { jsYamlPromise = import(/* webpackChunkName: "js-yaml" */ "js-yaml"); } const yaml = jsYamlPromise.then((jsYaml) => jsYaml.safeDump(value)); - return html` -
${until(yaml, "")}
- `; + return html`
${until(yaml, "")}
`; } return Array.isArray(value) ? value.join(", ") : value; } diff --git a/src/components/ha-camera-stream.ts b/src/components/ha-camera-stream.ts index 7b765b1586..90330b04cd 100644 --- a/src/components/ha-camera-stream.ts +++ b/src/components/ha-camera-stream.ts @@ -1,35 +1,39 @@ import { + css, + CSSResult, + customElement, + html, + LitElement, property, PropertyValues, - LitElement, TemplateResult, - html, - CSSResult, - css, - customElement, } from "lit-element"; - -import { computeStateName } from "../common/entity/compute_state_name"; -import { HomeAssistant, CameraEntity } from "../types"; import { fireEvent } from "../common/dom/fire_event"; +import { computeStateName } from "../common/entity/compute_state_name"; +import { supportsFeature } from "../common/entity/supports-feature"; import { CAMERA_SUPPORT_STREAM, - fetchStreamUrl, computeMJPEGStreamUrl, + fetchStreamUrl, } from "../data/camera"; -import { supportsFeature } from "../common/entity/supports-feature"; +import { CameraEntity, HomeAssistant } from "../types"; type HLSModule = typeof import("hls.js"); @customElement("ha-camera-stream") class HaCameraStream extends LitElement { @property() public hass?: HomeAssistant; + @property() public stateObj?: CameraEntity; + @property({ type: Boolean }) public showControls = false; + @property() private _attached = false; + // We keep track if we should force MJPEG with a string // that way it automatically resets if we change entity. @property() private _forceMJPEG: string | undefined = undefined; + private _hlsPolyfillInstance?: Hls; public connectedCallback() { @@ -121,7 +125,7 @@ class HaCameraStream extends LitElement { } private async _startHls(): Promise { - // tslint:disable-next-line + // eslint-disable-next-line const Hls = ((await import( /* webpackChunkName: "hls.js" */ "hls.js" )) as any).default as HLSModule; @@ -152,7 +156,7 @@ class HaCameraStream extends LitElement { return; } catch (err) { // Fails if we were unable to get a stream - // tslint:disable-next-line + // eslint-disable-next-line console.error(err); this._forceMJPEG = this.stateObj!.entity_id; } @@ -168,7 +172,7 @@ class HaCameraStream extends LitElement { private async _renderHLSPolyfill( videoEl: HTMLVideoElement, - // tslint:disable-next-line + // eslint-disable-next-line Hls: HLSModule, url: string ) { diff --git a/src/components/ha-card.ts b/src/components/ha-card.ts index ed604332ab..c37687190d 100644 --- a/src/components/ha-card.ts +++ b/src/components/ha-card.ts @@ -1,11 +1,11 @@ import { css, CSSResult, + customElement, html, LitElement, property, TemplateResult, - customElement, } from "lit-element"; @customElement("ha-card") @@ -63,9 +63,7 @@ class HaCard extends LitElement { protected render(): TemplateResult { return html` ${this.header - ? html` -
${this.header}
- ` + ? html`
${this.header}
` : html``} `; diff --git a/src/components/ha-checkbox.ts b/src/components/ha-checkbox.ts index 85362d134e..4c233f061b 100644 --- a/src/components/ha-checkbox.ts +++ b/src/components/ha-checkbox.ts @@ -1,10 +1,9 @@ -import { customElement, CSSResult, css } from "lit-element"; import "@material/mwc-checkbox"; -// tslint:disable-next-line -import { Checkbox } from "@material/mwc-checkbox"; +import type { Checkbox } from "@material/mwc-checkbox"; import { style } from "@material/mwc-checkbox/mwc-checkbox-css"; -import { Constructor } from "../types"; -// tslint:disable-next-line +import { css, CSSResult, customElement } from "lit-element"; +import type { Constructor } from "../types"; + const MwcCheckbox = customElements.get("mwc-checkbox") as Constructor; @customElement("ha-checkbox") diff --git a/src/components/ha-chips.ts b/src/components/ha-chips.ts index ffa7013d99..8a1363cf8f 100644 --- a/src/components/ha-chips.ts +++ b/src/components/ha-chips.ts @@ -1,16 +1,16 @@ +// @ts-ignore +import chipStyles from "@material/chips/dist/mdc.chips.min.css"; +import { ripple } from "@material/mwc-ripple/ripple-directive"; import { css, CSSResult, + customElement, html, LitElement, property, TemplateResult, - customElement, unsafeCSS, } from "lit-element"; -import { ripple } from "@material/mwc-ripple/ripple-directive"; -// @ts-ignore -import chipStyles from "@material/chips/dist/mdc.chips.min.css"; import { fireEvent } from "../common/dom/fire_event"; declare global { diff --git a/src/components/ha-climate-control.js b/src/components/ha-climate-control.js index abe9b7bf5a..aba4135cce 100644 --- a/src/components/ha-climate-control.js +++ b/src/components/ha-climate-control.js @@ -1,8 +1,8 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { EventsMixin } from "../mixins/events-mixin"; /* diff --git a/src/components/ha-climate-state.js b/src/components/ha-climate-state.js index 9586157d48..76002a1f91 100644 --- a/src/components/ha-climate-state.js +++ b/src/components/ha-climate-state.js @@ -1,8 +1,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import LocalizeMixin from "../mixins/localize-mixin"; import { CLIMATE_PRESET_NONE } from "../data/climate"; +import LocalizeMixin from "../mixins/localize-mixin"; /* * @appliesMixin LocalizeMixin diff --git a/src/components/ha-code-editor.ts b/src/components/ha-code-editor.ts index fcbc24306b..7986aa7467 100644 --- a/src/components/ha-code-editor.ts +++ b/src/components/ha-code-editor.ts @@ -1,12 +1,12 @@ -import { loadCodeMirror } from "../resources/codemirror.ondemand"; -import { fireEvent } from "../common/dom/fire_event"; -import { - UpdatingElement, - property, - customElement, - PropertyValues, -} from "lit-element"; import { Editor } from "codemirror"; +import { + customElement, + property, + PropertyValues, + UpdatingElement, +} from "lit-element"; +import { fireEvent } from "../common/dom/fire_event"; +import { loadCodeMirror } from "../resources/codemirror.ondemand"; declare global { interface HASSDomEvents { @@ -17,10 +17,15 @@ declare global { @customElement("ha-code-editor") export class HaCodeEditor extends UpdatingElement { public codemirror?: Editor; + @property() public mode?: string; + @property() public autofocus = false; + @property() public rtl = false; + @property() public error = false; + @property() private _value = ""; public set value(value: string) { @@ -32,7 +37,7 @@ export class HaCodeEditor extends UpdatingElement { } public get hasComments(): boolean { - return this.shadowRoot!.querySelector("span.cm-comment") ? true : false; + return !!this.shadowRoot!.querySelector("span.cm-comment"); } public connectedCallback() { diff --git a/src/components/ha-color-picker.js b/src/components/ha-color-picker.js index 8ab66513be..22ea627d6b 100644 --- a/src/components/ha-color-picker.js +++ b/src/components/ha-color-picker.js @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { EventsMixin } from "../mixins/events-mixin"; /** @@ -332,8 +332,9 @@ class HaColorPicker extends EventsMixin(PolymerElement) { applyColorToCanvas(hs) { // we're not really converting hs to hsl here, but we keep it cheap // setting the color on the interactionLayer, the svg elements can inherit - this.interactionLayer.style.color = `hsl(${hs.h}, 100%, ${100 - - hs.s * 50}%)`; + this.interactionLayer.style.color = `hsl(${hs.h}, 100%, ${ + 100 - hs.s * 50 + }%)`; } applyHsColor(hs) { diff --git a/src/components/ha-combo-box.js b/src/components/ha-combo-box.js index c2a7e34e42..bf6450c161 100644 --- a/src/components/ha-combo-box.js +++ b/src/components/ha-combo-box.js @@ -2,9 +2,9 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "@vaadin/vaadin-combo-box/theme/material/vaadin-combo-box-light"; - import { EventsMixin } from "../mixins/events-mixin"; class HaComboBox extends EventsMixin(PolymerElement) { diff --git a/src/components/ha-cover-controls.js b/src/components/ha-cover-controls.js index b669d23eb9..0e7eb841e8 100644 --- a/src/components/ha-cover-controls.js +++ b/src/components/ha-cover-controls.js @@ -1,7 +1,8 @@ import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { UNAVAILABLE_STATES } from "../data/entity"; import CoverEntity from "../util/cover-model"; class HaCoverControls extends PolymerElement { @@ -81,11 +82,17 @@ class HaCoverControls extends PolymerElement { } computeOpenDisabled(stateObj, entityObj) { + if (UNAVAILABLE_STATES.includes(stateObj.state)) { + return true; + } var assumedState = stateObj.attributes.assumed_state === true; return (entityObj.isFullyOpen || entityObj.isOpening) && !assumedState; } computeClosedDisabled(stateObj, entityObj) { + if (UNAVAILABLE_STATES.includes(stateObj.state)) { + return true; + } var assumedState = stateObj.attributes.assumed_state === true; return (entityObj.isFullyClosed || entityObj.isClosing) && !assumedState; } diff --git a/src/components/ha-cover-tilt-controls.js b/src/components/ha-cover-tilt-controls.js index 1852973d2d..399915c75a 100644 --- a/src/components/ha-cover-tilt-controls.js +++ b/src/components/ha-cover-tilt-controls.js @@ -1,8 +1,9 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { UNAVAILABLE_STATES } from "../data/entity"; import CoverEntity from "../util/cover-model"; class HaCoverTiltControls extends PolymerElement { @@ -63,11 +64,17 @@ class HaCoverTiltControls extends PolymerElement { } computeOpenDisabled(stateObj, entityObj) { + if (UNAVAILABLE_STATES.includes(stateObj.state)) { + return true; + } var assumedState = stateObj.attributes.assumed_state === true; return entityObj.isFullyOpenTilt && !assumedState; } computeClosedDisabled(stateObj, entityObj) { + if (UNAVAILABLE_STATES.includes(stateObj.state)) { + return true; + } var assumedState = stateObj.attributes.assumed_state === true; return entityObj.isFullyClosedTilt && !assumedState; } diff --git a/src/components/ha-date-input.ts b/src/components/ha-date-input.ts index 6f42cd8159..7504d38dcb 100644 --- a/src/components/ha-date-input.ts +++ b/src/components/ha-date-input.ts @@ -1,21 +1,22 @@ -import { - html, - css, - LitElement, - TemplateResult, - property, - customElement, -} from "lit-element"; - import "@polymer/paper-input/paper-input"; -// tslint:disable-next-line:no-duplicate-imports -import { PaperInputElement } from "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; @customElement("ha-date-input") export class HaDateInput extends LitElement { @property() public year?: string; + @property() public month?: string; + @property() public day?: string; + @property({ type: Boolean }) public disabled = false; static get styles() { diff --git a/src/components/ha-demo-badge.js b/src/components/ha-demo-badge.js index 2e3bc476fa..744562a613 100644 --- a/src/components/ha-demo-badge.js +++ b/src/components/ha-demo-badge.js @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "./ha-label-badge"; class HaDemoBadge extends PolymerElement { diff --git a/src/components/ha-dialog.ts b/src/components/ha-dialog.ts index 290f5ad22f..f65b9f273b 100644 --- a/src/components/ha-dialog.ts +++ b/src/components/ha-dialog.ts @@ -1,11 +1,10 @@ -import { customElement, CSSResult, css, html } from "lit-element"; -import "@polymer/paper-icon-button/paper-icon-button"; import "@material/mwc-dialog"; +import type { Dialog } from "@material/mwc-dialog"; import { style } from "@material/mwc-dialog/mwc-dialog-css"; -// tslint:disable-next-line -import { Dialog } from "@material/mwc-dialog"; -import { Constructor, HomeAssistant } from "../types"; -// tslint:disable-next-line +import "@polymer/paper-icon-button/paper-icon-button"; +import { css, CSSResult, customElement, html } from "lit-element"; +import type { Constructor, HomeAssistant } from "../types"; + const MwcDialog = customElements.get("mwc-dialog") as Constructor; export const createCloseHeading = (hass: HomeAssistant, title: string) => html` diff --git a/src/components/ha-fab.ts b/src/components/ha-fab.ts index e4dbebff2c..aa0f382cee 100644 --- a/src/components/ha-fab.ts +++ b/src/components/ha-fab.ts @@ -1,19 +1,17 @@ -import { classMap } from "lit-html/directives/class-map"; -import { html, customElement } from "lit-element"; -import { ripple } from "@material/mwc-ripple/ripple-directive"; - import "@material/mwc-fab"; -import { Constructor } from "../types"; -// tslint:disable-next-line -import { Fab } from "@material/mwc-fab"; -// tslint:disable-next-line +import type { Fab } from "@material/mwc-fab"; +import { ripple } from "@material/mwc-ripple/ripple-directive"; +import { customElement, html, TemplateResult } from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; +import type { Constructor } from "../types"; + const MwcFab = customElements.get("mwc-fab") as Constructor; @customElement("ha-fab") export class HaFab extends MwcFab { // We override the render method because we don't have an icon font and mwc-fab doesn't support our svg-icon sets. // Based on version mwc-fab 0.8 - protected render() { + protected render(): TemplateResult { const classes = { "mdc-fab--mini": this.mini, "mdc-fab--exited": this.exited, @@ -28,11 +26,7 @@ export class HaFab extends MwcFab { aria-label="${this.label || this.icon}" > ${showLabel && this.showIconAtEnd ? this.label : ""} - ${this.icon - ? html` - - ` - : ""} + ${this.icon ? html` ` : ""} ${showLabel && !this.showIconAtEnd ? this.label : ""} `; diff --git a/src/components/ha-form/ha-form-boolean.ts b/src/components/ha-form/ha-form-boolean.ts index cc5355274e..c8c956ceca 100644 --- a/src/components/ha-form/ha-form-boolean.ts +++ b/src/components/ha-form/ha-form-boolean.ts @@ -1,31 +1,32 @@ +import "@polymer/paper-checkbox/paper-checkbox"; +import type { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; import { - customElement, - LitElement, - html, - property, - TemplateResult, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, + property, query, + TemplateResult, } from "lit-element"; -import { - HaFormElement, +import { fireEvent } from "../../common/dom/fire_event"; +import type { HaFormBooleanData, HaFormBooleanSchema, + HaFormElement, } from "./ha-form"; -import { fireEvent } from "../../common/dom/fire_event"; - -import "@polymer/paper-checkbox/paper-checkbox"; -// Not duplicate, is for typing -// tslint:disable-next-line -import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; @customElement("ha-form-boolean") export class HaFormBoolean extends LitElement implements HaFormElement { @property() public schema!: HaFormBooleanSchema; + @property() public data!: HaFormBooleanData; + @property() public label!: string; + @property() public suffix!: string; + @query("paper-checkbox") private _input?: HTMLElement; public focus() { diff --git a/src/components/ha-form/ha-form-float.ts b/src/components/ha-form/ha-form-float.ts index ce6056300f..d915434a3d 100644 --- a/src/components/ha-form/ha-form-float.ts +++ b/src/components/ha-form/ha-form-float.ts @@ -1,25 +1,26 @@ +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { customElement, - LitElement, html, + LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; -import { HaFormElement, HaFormFloatData, HaFormFloatSchema } from "./ha-form"; import { fireEvent } from "../../common/dom/fire_event"; - -import "@polymer/paper-input/paper-input"; -// Not duplicate, is for typing -// tslint:disable-next-line -import { PaperInputElement } from "@polymer/paper-input/paper-input"; +import { HaFormElement, HaFormFloatData, HaFormFloatSchema } from "./ha-form"; @customElement("ha-form-float") export class HaFormFloat extends LitElement implements HaFormElement { @property() public schema!: HaFormFloatSchema; + @property() public data!: HaFormFloatData; + @property() public label!: string; + @property() public suffix!: string; + @query("paper-input") private _input?: HTMLElement; public focus() { diff --git a/src/components/ha-form/ha-form-integer.ts b/src/components/ha-form/ha-form-integer.ts index 155132c28c..9fe0929b84 100644 --- a/src/components/ha-form/ha-form-integer.ts +++ b/src/components/ha-form/ha-form-integer.ts @@ -1,34 +1,36 @@ +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; +import "@polymer/paper-slider/paper-slider"; +import type { PaperSliderElement } from "@polymer/paper-slider/paper-slider"; import { - customElement, - LitElement, - html, - property, - TemplateResult, - query, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, + property, + query, + TemplateResult, } from "lit-element"; +import { fireEvent } from "../../common/dom/fire_event"; +import { HaCheckbox } from "../ha-checkbox"; +import "../ha-paper-slider"; import { HaFormElement, HaFormIntegerData, HaFormIntegerSchema, } from "./ha-form"; -import { fireEvent } from "../../common/dom/fire_event"; - -import "../ha-paper-slider"; -import "@polymer/paper-input/paper-input"; -// Not duplicate, is for typing -// tslint:disable-next-line -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { PaperSliderElement } from "@polymer/paper-slider/paper-slider"; -import { HaCheckbox } from "../ha-checkbox"; @customElement("ha-form-integer") export class HaFormInteger extends LitElement implements HaFormElement { @property() public schema!: HaFormIntegerSchema; + @property() public data?: HaFormIntegerData; + @property() public label?: string; + @property() public suffix?: string; + @query("paper-input ha-paper-slider") private _input?: HTMLElement; public focus() { diff --git a/src/components/ha-form/ha-form-multi_select.ts b/src/components/ha-form/ha-form-multi_select.ts index dc85f3f6cc..80e25168c7 100644 --- a/src/components/ha-form/ha-form-multi_select.ts +++ b/src/components/ha-form/ha-form-multi_select.ts @@ -1,18 +1,18 @@ import "@polymer/paper-checkbox/paper-checkbox"; -import "@polymer/paper-menu-button/paper-menu-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-listbox/paper-listbox"; +import "@polymer/paper-menu-button/paper-menu-button"; import "@polymer/paper-ripple/paper-ripple"; import { + css, + CSSResult, customElement, html, LitElement, property, query, TemplateResult, - CSSResult, - css, } from "lit-element"; import { fireEvent } from "../../common/dom/fire_event"; import { @@ -24,10 +24,15 @@ import { @customElement("ha-form-multi_select") export class HaFormMultiSelect extends LitElement implements HaFormElement { @property() public schema!: HaFormMultiSelectSchema; + @property() public data!: HaFormMultiSelectData; + @property() public label!: string; + @property() public suffix!: string; + @property() private _init = false; + @query("paper-menu-button") private _input?: HTMLElement; public focus(): void { diff --git a/src/components/ha-form/ha-form-positive_time_period_dict.ts b/src/components/ha-form/ha-form-positive_time_period_dict.ts index d7ff9ebb59..3f4942c8ec 100644 --- a/src/components/ha-form/ha-form-positive_time_period_dict.ts +++ b/src/components/ha-form/ha-form-positive_time_period_dict.ts @@ -1,20 +1,24 @@ import { customElement, - LitElement, html, + LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; -import { HaFormElement, HaFormTimeData, HaFormTimeSchema } from "./ha-form"; import { fireEvent } from "../../common/dom/fire_event"; +import { HaFormElement, HaFormTimeData, HaFormTimeSchema } from "./ha-form"; @customElement("ha-form-positive_time_period_dict") export class HaFormTimePeriod extends LitElement implements HaFormElement { @property() public schema!: HaFormTimeSchema; + @property() public data!: HaFormTimeData; + @property() public label!: string; + @property() public suffix!: string; + @query("paper-time-input") private _input?: HTMLElement; public focus() { @@ -87,12 +91,12 @@ export class HaFormTimePeriod extends LitElement implements HaFormElement { let minutes = this._minutes; if (unit === "seconds" && value > 59) { - minutes = minutes + Math.floor(value / 60); + minutes += Math.floor(value / 60); value %= 60; } if (unit === "minutes" && value > 59) { - hours = hours + Math.floor(value / 60); + hours += Math.floor(value / 60); value %= 60; } diff --git a/src/components/ha-form/ha-form-select.ts b/src/components/ha-form/ha-form-select.ts index f650ac3bfd..2f3b82984c 100644 --- a/src/components/ha-form/ha-form-select.ts +++ b/src/components/ha-form/ha-form-select.ts @@ -1,26 +1,29 @@ -import { - customElement, - LitElement, - html, - property, - TemplateResult, - query, - CSSResult, - css, -} from "lit-element"; -import { HaFormElement, HaFormSelectData, HaFormSelectSchema } from "./ha-form"; -import { fireEvent } from "../../common/dom/fire_event"; - import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + query, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../common/dom/fire_event"; +import { HaFormElement, HaFormSelectData, HaFormSelectSchema } from "./ha-form"; @customElement("ha-form-select") export class HaFormSelect extends LitElement implements HaFormElement { @property() public schema!: HaFormSelectSchema; + @property() public data!: HaFormSelectData; + @property() public label!: string; + @property() public suffix!: string; + @query("paper-dropdown-menu") private _input?: HTMLElement; public focus() { diff --git a/src/components/ha-form/ha-form-string.ts b/src/components/ha-form/ha-form-string.ts index d7dab29dd2..9cafcf7985 100644 --- a/src/components/ha-form/ha-form-string.ts +++ b/src/components/ha-form/ha-form-string.ts @@ -1,31 +1,36 @@ +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { customElement, - LitElement, html, + LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; - -import { HaFormElement, HaFormStringData, HaFormStringSchema } from "./ha-form"; import { fireEvent } from "../../common/dom/fire_event"; - -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-icon-button/paper-icon-button"; -// Not duplicate, is for typing -// tslint:disable-next-line -import { PaperInputElement } from "@polymer/paper-input/paper-input"; +import type { + HaFormElement, + HaFormStringData, + HaFormStringSchema, +} from "./ha-form"; @customElement("ha-form-string") export class HaFormString extends LitElement implements HaFormElement { @property() public schema!: HaFormStringSchema; + @property() public data!: HaFormStringData; + @property() public label!: string; + @property() public suffix!: string; + @property() private _unmaskedPassword = false; + @query("paper-input") private _input?: HTMLElement; - public focus() { + public focus(): void { if (this._input) { this._input.focus(); } @@ -67,11 +72,11 @@ export class HaFormString extends LitElement implements HaFormElement { `; } - private _toggleUnmaskedPassword(ev: Event) { + private _toggleUnmaskedPassword(ev: Event): void { this._unmaskedPassword = (ev.target as any).active; } - private _valueChanged(ev: Event) { + private _valueChanged(ev: Event): void { const value = (ev.target as PaperInputElement).value; if (this.data === value) { return; @@ -81,7 +86,7 @@ export class HaFormString extends LitElement implements HaFormElement { }); } - private get _stringType() { + private get _stringType(): string { if (this.schema.format) { if (["email", "url"].includes(this.schema.format)) { return this.schema.format; diff --git a/src/components/ha-form/ha-form.ts b/src/components/ha-form/ha-form.ts index b02e638854..ff452c6590 100644 --- a/src/components/ha-form/ha-form.ts +++ b/src/components/ha-form/ha-form.ts @@ -1,21 +1,20 @@ import { - customElement, - LitElement, - html, - property, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, + property, } from "lit-element"; - -import "./ha-form-string"; -import "./ha-form-integer"; -import "./ha-form-float"; +import { dynamicElement } from "../../common/dom/dynamic-element-directive"; +import { fireEvent } from "../../common/dom/fire_event"; import "./ha-form-boolean"; -import "./ha-form-select"; +import "./ha-form-float"; +import "./ha-form-integer"; import "./ha-form-multi_select"; import "./ha-form-positive_time_period_dict"; -import { fireEvent } from "../../common/dom/fire_event"; -import { dynamicElement } from "../../common/dom/dynamic-element-directive"; +import "./ha-form-select"; +import "./ha-form-string"; export type HaFormSchema = | HaFormStringSchema @@ -103,10 +102,15 @@ export interface HaFormElement extends LitElement { @customElement("ha-form") export class HaForm extends LitElement implements HaFormElement { @property() public data!: HaFormDataContainer | HaFormData; + @property() public schema!: HaFormSchema; + @property() public error; + @property() public computeError?: (schema: HaFormSchema, error) => string; + @property() public computeLabel?: (schema: HaFormSchema) => string; + @property() public computeSuffix?: (schema: HaFormSchema) => string; public focus() { diff --git a/src/components/ha-icon-input.ts b/src/components/ha-icon-input.ts index 9621e267ed..83761e6c40 100644 --- a/src/components/ha-icon-input.ts +++ b/src/components/ha-icon-input.ts @@ -1,22 +1,25 @@ -import { - html, - css, - LitElement, - TemplateResult, - property, - customElement, -} from "lit-element"; - import "@polymer/paper-input/paper-input"; -import "./ha-icon"; +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../common/dom/fire_event"; +import "./ha-icon"; @customElement("ha-icon-input") export class HaIconInput extends LitElement { @property() public value?: string; + @property() public label?: string; + @property() public placeholder?: string; + @property({ attribute: "error-message" }) public errorMessage?: string; + @property({ type: Boolean }) public disabled = false; protected render(): TemplateResult { diff --git a/src/components/ha-icon-next.ts b/src/components/ha-icon-next.ts index 7a875d5e61..f1c216450f 100644 --- a/src/components/ha-icon-next.ts +++ b/src/components/ha-icon-next.ts @@ -1,6 +1,6 @@ import "@polymer/iron-icon/iron-icon"; // Not duplicate, this is for typing. -// tslint:disable-next-line +// eslint-disable-next-line import { HaIcon } from "./ha-icon"; export class HaIconNext extends HaIcon { diff --git a/src/components/ha-icon-prev.ts b/src/components/ha-icon-prev.ts index e8d58433e6..1d896882d7 100644 --- a/src/components/ha-icon-prev.ts +++ b/src/components/ha-icon-prev.ts @@ -1,6 +1,6 @@ import "@polymer/iron-icon/iron-icon"; // Not duplicate, this is for typing. -// tslint:disable-next-line +// eslint-disable-next-line import { HaIcon } from "./ha-icon"; export class HaIconPrev extends HaIcon { diff --git a/src/components/ha-icon.ts b/src/components/ha-icon.ts index 5d71f214ed..a707af0dc4 100644 --- a/src/components/ha-icon.ts +++ b/src/components/ha-icon.ts @@ -1,9 +1,6 @@ -import { Constructor } from "../types"; - import "@polymer/iron-icon/iron-icon"; -// Not duplicate, this is for typing. -// tslint:disable-next-line -import { IronIconElement } from "@polymer/iron-icon/iron-icon"; +import type { IronIconElement } from "@polymer/iron-icon/iron-icon"; +import { Constructor } from "../types"; const ironIconClass = customElements.get("iron-icon") as Constructor< IronIconElement diff --git a/src/components/ha-label-badge.ts b/src/components/ha-label-badge.ts index a77850cc8f..9f9f2fbcc6 100644 --- a/src/components/ha-label-badge.ts +++ b/src/components/ha-label-badge.ts @@ -1,20 +1,24 @@ import { + css, + CSSResult, html, LitElement, + property, PropertyValues, TemplateResult, - CSSResult, - css, - property, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import "./ha-icon"; class HaLabelBadge extends LitElement { @property() public value?: string; + @property() public icon?: string; + @property() public label?: string; + @property() public description?: string; + @property() public image?: string; protected render(): TemplateResult { @@ -28,14 +32,10 @@ class HaLabelBadge extends LitElement { })}" > ${this.icon && !this.value && !this.image - ? html` - - ` + ? html` ` : ""} ${this.value && !this.image - ? html` - ${this.value} - ` + ? html` ${this.value} ` : ""}
${this.label @@ -52,9 +52,7 @@ class HaLabelBadge extends LitElement { : ""}
${this.description - ? html` -
${this.description}
- ` + ? html`
${this.description}
` : ""}
`; diff --git a/src/components/ha-labeled-slider.js b/src/components/ha-labeled-slider.js index 90a94d7f9b..bbe09e6829 100644 --- a/src/components/ha-labeled-slider.js +++ b/src/components/ha-labeled-slider.js @@ -1,8 +1,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./ha-paper-slider"; import "./ha-icon"; +import "./ha-paper-slider"; class HaLabeledSlider extends PolymerElement { static get template() { diff --git a/src/components/ha-markdown.ts b/src/components/ha-markdown.ts index 00968a5ce9..ebc367122f 100644 --- a/src/components/ha-markdown.ts +++ b/src/components/ha-markdown.ts @@ -1,7 +1,6 @@ -import { UpdatingElement, property, customElement } from "lit-element"; -// eslint-disable-next-line import/no-webpack-loader-syntax +import { customElement, property, UpdatingElement } from "lit-element"; // @ts-ignore -// tslint:disable-next-line: no-implicit-dependencies +// eslint-disable-next-line import/no-webpack-loader-syntax import markdownWorker from "workerize-loader!../resources/markdown_worker"; import { fireEvent } from "../common/dom/fire_event"; @@ -10,6 +9,7 @@ let worker: any | undefined; @customElement("ha-markdown") class HaMarkdown extends UpdatingElement { @property() public content = ""; + @property({ type: Boolean }) public allowSvg = false; protected update(changedProps) { diff --git a/src/components/ha-menu-button.ts b/src/components/ha-menu-button.ts index 7f64e34432..239bfd7e9f 100644 --- a/src/components/ha-menu-button.ts +++ b/src/components/ha-menu-button.ts @@ -1,28 +1,33 @@ import "@polymer/paper-icon-button/paper-icon-button"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { + css, + CSSResult, + customElement, + html, + LitElement, property, TemplateResult, - LitElement, - html, - customElement, - CSSResult, - css, } from "lit-element"; - import { fireEvent } from "../common/dom/fire_event"; -import { HomeAssistant } from "../types"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { subscribeNotifications } from "../data/persistent_notification"; import { computeDomain } from "../common/entity/compute_domain"; +import { subscribeNotifications } from "../data/persistent_notification"; +import { HomeAssistant } from "../types"; @customElement("ha-menu-button") class HaMenuButton extends LitElement { @property({ type: Boolean }) public hassio = false; + @property() public narrow!: boolean; + @property() public hass!: HomeAssistant; + @property() private _hasNotifications = false; + private _alwaysVisible = false; + private _attachNotifOnConnect = false; + private _unsubNotifications?: UnsubscribeFunc; public connectedCallback() { @@ -55,11 +60,7 @@ class HaMenuButton extends LitElement { .icon=${this.hassio ? "hassio:menu" : "hass:menu"} @click=${this._toggleMenu} > - ${hasNotifications - ? html` -
- ` - : ""} + ${hasNotifications ? html`
` : ""} `; } diff --git a/src/components/ha-paper-icon-button-arrow-next.ts b/src/components/ha-paper-icon-button-arrow-next.ts index f0d4730385..99cbd85ad8 100644 --- a/src/components/ha-paper-icon-button-arrow-next.ts +++ b/src/components/ha-paper-icon-button-arrow-next.ts @@ -1,8 +1,6 @@ import "@polymer/paper-icon-button/paper-icon-button"; -import { Constructor } from "../types"; -// Not duplicate, this is for typing. -// tslint:disable-next-line -import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { Constructor } from "../types"; const paperIconButtonClass = customElements.get( "paper-icon-button" diff --git a/src/components/ha-paper-icon-button-arrow-prev.ts b/src/components/ha-paper-icon-button-arrow-prev.ts index d79c8c66f4..7fe19dea59 100644 --- a/src/components/ha-paper-icon-button-arrow-prev.ts +++ b/src/components/ha-paper-icon-button-arrow-prev.ts @@ -1,8 +1,6 @@ import "@polymer/paper-icon-button/paper-icon-button"; -import { Constructor } from "../types"; -// Not duplicate, this is for typing. -// tslint:disable-next-line -import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { Constructor } from "../types"; const paperIconButtonClass = customElements.get( "paper-icon-button" diff --git a/src/components/ha-paper-icon-button-next.ts b/src/components/ha-paper-icon-button-next.ts index cca612de4f..e119c7f4ce 100644 --- a/src/components/ha-paper-icon-button-next.ts +++ b/src/components/ha-paper-icon-button-next.ts @@ -1,8 +1,6 @@ import "@polymer/paper-icon-button/paper-icon-button"; -import { Constructor } from "../types"; -// Not duplicate, this is for typing. -// tslint:disable-next-line -import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { Constructor } from "../types"; const paperIconButtonClass = customElements.get( "paper-icon-button" diff --git a/src/components/ha-paper-icon-button-prev.ts b/src/components/ha-paper-icon-button-prev.ts index ca4c32ff1c..b2567f6c5f 100644 --- a/src/components/ha-paper-icon-button-prev.ts +++ b/src/components/ha-paper-icon-button-prev.ts @@ -1,8 +1,6 @@ import "@polymer/paper-icon-button/paper-icon-button"; -import { Constructor } from "../types"; -// Not duplicate, this is for typing. -// tslint:disable-next-line -import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { Constructor } from "../types"; const paperIconButtonClass = customElements.get( "paper-icon-button" diff --git a/src/components/ha-push-notifications-toggle.js b/src/components/ha-push-notifications-toggle.js index ccbd66a4e0..61aec06691 100644 --- a/src/components/ha-push-notifications-toggle.js +++ b/src/components/ha-push-notifications-toggle.js @@ -1,9 +1,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { getAppKey } from "../data/notify_html5"; import { EventsMixin } from "../mixins/events-mixin"; - import "./ha-switch"; export const pushSupported = diff --git a/src/components/ha-related-items.ts b/src/components/ha-related-items.ts index bc810e48e0..124c93404e 100644 --- a/src/components/ha-related-items.ts +++ b/src/components/ha-related-items.ts @@ -1,13 +1,13 @@ import { HassEntity, UnsubscribeFunc } from "home-assistant-js-websocket"; import { + css, + CSSResult, customElement, html, LitElement, property, PropertyValues, TemplateResult, - CSSResult, - css, } from "lit-element"; import { fireEvent } from "../common/dom/fire_event"; import { @@ -28,11 +28,17 @@ import "./ha-switch"; @customElement("ha-related-items") export class HaRelatedItems extends SubscribeMixin(LitElement) { @property() public hass!: HomeAssistant; + @property() public itemType!: ItemType; + @property() public itemId!: string; + @property() private _entries?: ConfigEntry[]; + @property() private _devices?: DeviceRegistryEntry[]; + @property() private _areas?: AreaRegistryEntry[]; + @property() private _related?: RelatedResult; public hassSubscribe(): UnsubscribeFunc[] { @@ -80,7 +86,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { (configEntry) => configEntry.entry_id === relatedConfigEntryId ); if (!entry) { - return; + return ""; } return html`

@@ -104,7 +110,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { (dev) => dev.id === relatedDeviceId ); if (!device) { - return; + return ""; } return html`

@@ -125,7 +131,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { (ar) => ar.area_id === relatedAreaId ); if (!area) { - return; + return ""; } return html`

@@ -146,7 +152,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { entityId ]; if (!entity) { - return; + return ""; } return html`
  • @@ -170,7 +176,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { ${this._related.group.map((groupId) => { const group: HassEntity | undefined = this.hass.states[groupId]; if (!group) { - return; + return ""; } return html`
  • @@ -196,7 +202,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { sceneId ]; if (!scene) { - return; + return ""; } return html`
  • @@ -224,7 +230,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { automationId ]; if (!automation) { - return; + return ""; } return html`
  • @@ -234,7 +240,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { .entityId="${automationId}" > ${automation.attributes.friendly_name || - automation.entity_id} + automation.entity_id}
  • `; @@ -253,7 +259,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { scriptId ]; if (!script) { - return; + return ""; } return html`
  • diff --git a/src/components/ha-relative-time.js b/src/components/ha-relative-time.js index 0d61285524..58d787ebb5 100644 --- a/src/components/ha-relative-time.js +++ b/src/components/ha-relative-time.js @@ -1,8 +1,7 @@ import { dom } from "@polymer/polymer/lib/legacy/polymer.dom"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import relativeTime from "../common/datetime/relative_time"; - import LocalizeMixin from "../mixins/localize-mixin"; /* diff --git a/src/components/ha-service-description.js b/src/components/ha-service-description.js index 9ca7caf944..c1e2596df6 100644 --- a/src/components/ha-service-description.js +++ b/src/components/ha-service-description.js @@ -1,11 +1,10 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaServiceDescription extends PolymerElement { static get template() { - return html` - [[_getDescription(hass, domain, service)]] - `; + return html` [[_getDescription(hass, domain, service)]] `; } static get properties() { diff --git a/src/components/ha-service-picker.js b/src/components/ha-service-picker.js index c10bb66a90..32aee922c9 100644 --- a/src/components/ha-service-picker.js +++ b/src/components/ha-service-picker.js @@ -1,9 +1,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./ha-combo-box"; - import LocalizeMixin from "../mixins/localize-mixin"; +import "./ha-combo-box"; /* * @appliesMixin LocalizeMixin diff --git a/src/components/ha-sidebar.ts b/src/components/ha-sidebar.ts index 743037a7ba..e3ba42aa8c 100644 --- a/src/components/ha-sidebar.ts +++ b/src/components/ha-sidebar.ts @@ -1,38 +1,36 @@ -import { - LitElement, - html, - CSSResult, - css, - PropertyValues, - property, - eventOptions, -} from "lit-element"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-icon-item"; +import type { PaperIconItemElement } from "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; -import "./ha-icon"; - -import "../components/user/ha-user-badge"; -import "../components/ha-menu-button"; -import { HomeAssistant, PanelInfo } from "../types"; -import { fireEvent } from "../common/dom/fire_event"; import { - getExternalConfig, - ExternalConfig, -} from "../external_app/external_config"; + css, + CSSResult, + eventOptions, + html, + LitElement, + property, + PropertyValues, +} from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; +import { fireEvent } from "../common/dom/fire_event"; +import { computeDomain } from "../common/entity/compute_domain"; +import { compare } from "../common/string/compare"; +import { computeRTL } from "../common/util/compute_rtl"; +import { getDefaultPanel } from "../data/panel"; import { PersistentNotification, subscribeNotifications, } from "../data/persistent_notification"; -import { computeDomain } from "../common/entity/compute_domain"; -import { classMap } from "lit-html/directives/class-map"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperIconItemElement } from "@polymer/paper-item/paper-icon-item"; -import { computeRTL } from "../common/util/compute_rtl"; -import { compare } from "../common/string/compare"; -import { getDefaultPanel } from "../data/panel"; +import { + ExternalConfig, + getExternalConfig, +} from "../external_app/external_config"; +import type { HomeAssistant, PanelInfo } from "../types"; +import "./ha-icon"; +import "./ha-menu-button"; +import "./user/ha-user-badge"; const SHOW_AFTER_SPACER = ["config", "developer-tools", "hassio"]; @@ -108,19 +106,25 @@ const computePanels = (hass: HomeAssistant): [PanelInfo[], PanelInfo[]] => { */ class HaSidebar extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; @property({ type: Boolean }) public alwaysExpand = false; + @property({ type: Boolean, reflect: true }) public expanded = false; @property() private _externalConfig?: ExternalConfig; + @property() private _notifications?: PersistentNotification[]; + // property used only in css // @ts-ignore @property({ type: Boolean, reflect: true }) private _rtl = false; private _mouseLeaveTimeout?: number; + private _tooltipHideTimeout?: number; + private _recentKeydownActiveUntil = 0; protected render() { diff --git a/src/components/ha-switch.ts b/src/components/ha-switch.ts index 89bae13454..0addeb5e1a 100644 --- a/src/components/ha-switch.ts +++ b/src/components/ha-switch.ts @@ -1,19 +1,18 @@ +import { ripple } from "@material/mwc-ripple/ripple-directive"; +import "@material/mwc-switch"; +import type { Switch } from "@material/mwc-switch"; +import { style } from "@material/mwc-switch/mwc-switch-css"; import { - customElement, - CSSResult, css, - query, + CSSResult, + customElement, html, property, + query, } from "lit-element"; -import "@material/mwc-switch"; -import { style } from "@material/mwc-switch/mwc-switch-css"; -// tslint:disable-next-line -import { Switch } from "@material/mwc-switch"; -import { Constructor } from "../types"; import { forwardHaptic } from "../data/haptics"; -import { ripple } from "@material/mwc-ripple/ripple-directive"; -// tslint:disable-next-line +import { Constructor } from "../types"; + const MwcSwitch = customElements.get("mwc-switch") as Constructor; @customElement("ha-switch") @@ -22,6 +21,7 @@ export class HaSwitch extends MwcSwitch { // Only set to true if the new value of the switch is applied right away when toggling. // Do not add haptic when a user is required to press save. @property({ type: Boolean }) public haptic = false; + @query("slot") private _slot!: HTMLSlotElement; protected firstUpdated() { diff --git a/src/components/ha-textarea.js b/src/components/ha-textarea.js index 70de137543..36aa884120 100644 --- a/src/components/ha-textarea.js +++ b/src/components/ha-textarea.js @@ -11,6 +11,7 @@ WebKit issue: https://bugs.webkit.org/show_bug.cgi?id=174629 import "@polymer/paper-input/paper-textarea"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaTextarea extends PolymerElement { diff --git a/src/components/ha-toast.ts b/src/components/ha-toast.ts index 9c57c0fd75..2b63661353 100644 --- a/src/components/ha-toast.ts +++ b/src/components/ha-toast.ts @@ -1,10 +1,14 @@ import "@polymer/paper-toast/paper-toast"; +import type { PaperToastElement } from "@polymer/paper-toast/paper-toast"; +import type { Constructor } from "../types"; -// tslint:disable-next-line -const PaperToast = customElements.get("paper-toast"); +const PaperToast = customElements.get("paper-toast") as Constructor< + PaperToastElement +>; export class HaToast extends PaperToast { private _resizeListener?: (obj: { matches: boolean }) => unknown; + private _mediaq?: MediaQueryList; public connectedCallback() { diff --git a/src/components/ha-vacuum-state.js b/src/components/ha-vacuum-state.js index 556dac2619..4688224380 100644 --- a/src/components/ha-vacuum-state.js +++ b/src/components/ha-vacuum-state.js @@ -1,7 +1,7 @@ import "@material/mwc-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import LocalizeMixin from "../mixins/localize-mixin"; const STATES_INTERCEPTABLE = { diff --git a/src/components/ha-water_heater-control.js b/src/components/ha-water_heater-control.js index 7fd7e55a2f..dc03b0507a 100644 --- a/src/components/ha-water_heater-control.js +++ b/src/components/ha-water_heater-control.js @@ -1,8 +1,8 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { EventsMixin } from "../mixins/events-mixin"; /* diff --git a/src/components/ha-water_heater-state.js b/src/components/ha-water_heater-state.js index 82c523614e..39766d0620 100644 --- a/src/components/ha-water_heater-state.js +++ b/src/components/ha-water_heater-state.js @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import LocalizeMixin from "../mixins/localize-mixin"; /* diff --git a/src/components/ha-yaml-editor.ts b/src/components/ha-yaml-editor.ts index 046fcd36ca..e49c0bd043 100644 --- a/src/components/ha-yaml-editor.ts +++ b/src/components/ha-yaml-editor.ts @@ -1,10 +1,16 @@ import { safeDump, safeLoad } from "js-yaml"; -import "./ha-code-editor"; -import { LitElement, property, customElement, html, query } from "lit-element"; +import { + customElement, + html, + LitElement, + property, + query, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../common/dom/fire_event"; import { afterNextRender } from "../common/util/render-status"; -// tslint:disable-next-line -import { HaCodeEditor } from "./ha-code-editor"; +import "./ha-code-editor"; +import type { HaCodeEditor } from "./ha-code-editor"; declare global { // for fire event @@ -13,12 +19,12 @@ declare global { } } -const isEmpty = (obj: object) => { +const isEmpty = (obj: object): boolean => { if (typeof obj !== "object") { return false; } for (const key in obj) { - if (obj.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { return false; } } @@ -28,13 +34,18 @@ const isEmpty = (obj: object) => { @customElement("ha-yaml-editor") export class HaYamlEditor extends LitElement { @property() public value?: any; + @property() public defaultValue?: any; + @property() public isValid = true; + @property() public label?: string; - @property() private _yaml: string = ""; + + @property() private _yaml = ""; + @query("ha-code-editor") private _editor?: HaCodeEditor; - public setValue(value) { + public setValue(value): void { try { this._yaml = value && !isEmpty(value) ? safeDump(value) : ""; } catch (err) { @@ -48,22 +59,18 @@ export class HaYamlEditor extends LitElement { }); } - protected firstUpdated() { + protected firstUpdated(): void { if (this.defaultValue) { this.setValue(this.defaultValue); } } - protected render() { + protected render(): TemplateResult { if (this._yaml === undefined) { - return; + return html``; } return html` - ${this.label - ? html` -

    ${this.label}

    - ` - : ""} + ${this.label ? html`

    ${this.label}

    ` : ""} - `; + return html`
    `; } protected firstUpdated(changedProps: PropertyValues): void { diff --git a/src/components/map/ha-locations-editor.ts b/src/components/map/ha-locations-editor.ts index fcf8c2b12a..6db95339ba 100644 --- a/src/components/map/ha-locations-editor.ts +++ b/src/components/map/ha-locations-editor.ts @@ -1,27 +1,27 @@ import { - LitElement, - property, - TemplateResult, - html, - CSSResult, - css, - customElement, - PropertyValues, -} from "lit-element"; -import { - Marker, - Map, + Circle, + DivIcon, DragEndEvent, LatLng, - Circle, + Map, + Marker, MarkerOptions, - DivIcon, } from "leaflet"; import { - setupLeafletMap, - LeafletModuleType, -} from "../../common/dom/setup-leaflet-map"; + css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../../common/dom/fire_event"; +import { + LeafletModuleType, + setupLeafletMap, +} from "../../common/dom/setup-leaflet-map"; import { defaultRadiusColor } from "../../data/zone"; declare global { @@ -48,13 +48,17 @@ export interface MarkerLocation { @customElement("ha-locations-editor") export class HaLocationsEditor extends LitElement { @property() public locations?: MarkerLocation[]; + public fitZoom = 16; - // tslint:disable-next-line + // eslint-disable-next-line private Leaflet?: LeafletModuleType; - // tslint:disable-next-line + + // eslint-disable-next-line private _leafletMap?: Map; + private _locationMarkers?: { [key: string]: Marker | Circle }; + private _circles: { [key: string]: Circle } = {}; public fitMap(): void { @@ -93,9 +97,7 @@ export class HaLocationsEditor extends LitElement { } protected render(): TemplateResult { - return html` -
    - `; + return html`
    `; } protected firstUpdated(changedProps: PropertyValues): void { diff --git a/src/components/map/ha-map.ts b/src/components/map/ha-map.ts index a0c3075d48..bf2263f506 100644 --- a/src/components/map/ha-map.ts +++ b/src/components/map/ha-map.ts @@ -17,21 +17,27 @@ import { import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { computeStateName } from "../../common/entity/compute_state_name"; import { debounce } from "../../common/util/debounce"; -import { HomeAssistant } from "../../types"; import "../../panels/map/ha-entity-marker"; +import { HomeAssistant } from "../../types"; @customElement("ha-map") class HaMap extends LitElement { @property() public hass?: HomeAssistant; @property() public entities?: string[]; + @property() public darkMode = false; + @property() public zoom?: number; - // tslint:disable-next-line + + // eslint-disable-next-line private Leaflet?: LeafletModuleType; + private _leafletMap?: Map; + // @ts-ignore private _resizeObserver?: ResizeObserver; + private _debouncedResizeListener = debounce( () => { if (!this._leafletMap) { @@ -42,8 +48,11 @@ class HaMap extends LitElement { 100, false ); + private _mapItems: Array = []; + private _mapZones: Array = []; + private _connected = false; public connectedCallback(): void { @@ -76,9 +85,7 @@ class HaMap extends LitElement { if (!this.entities) { return html``; } - return html` -
    - `; + return html`
    `; } protected firstUpdated(changedProps: PropertyValues): void { diff --git a/src/components/paper-time-input.js b/src/components/paper-time-input.js index 620da4d7b1..bb8aef1036 100644 --- a/src/components/paper-time-input.js +++ b/src/components/paper-time-input.js @@ -16,11 +16,12 @@ Custom property | Description | Default `--paper-time-input-cotnainer` | Mixin applied to the inputs | `{}` `--paper-time-dropdown-input-cotnainer` | Mixin applied to the dropdown input | `{}` */ -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-listbox/paper-listbox"; -import "@polymer/paper-item/paper-item"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-input/paper-input"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; export class PaperTimeInput extends PolymerElement { diff --git a/src/components/state-history-chart-line.js b/src/components/state-history-chart-line.js index 4456b285cc..4cc1321475 100644 --- a/src/components/state-history-chart-line.js +++ b/src/components/state-history-chart-line.js @@ -1,11 +1,10 @@ import "@polymer/polymer/lib/utils/debounce"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./entity/ha-chart-base"; - -import LocalizeMixin from "../mixins/localize-mixin"; import { formatDateTimeWithSeconds } from "../common/datetime/format_date_time"; +import LocalizeMixin from "../mixins/localize-mixin"; +import "./entity/ha-chart-base"; class StateHistoryChartLine extends LocalizeMixin(PolymerElement) { static get template() { diff --git a/src/components/state-history-chart-timeline.js b/src/components/state-history-chart-timeline.js index 0ef2c6194c..ada4aba6b4 100644 --- a/src/components/state-history-chart-timeline.js +++ b/src/components/state-history-chart-timeline.js @@ -1,13 +1,11 @@ import "@polymer/polymer/lib/utils/debounce"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import LocalizeMixin from "../mixins/localize-mixin"; - -import "./entity/ha-chart-base"; - import { formatDateTimeWithSeconds } from "../common/datetime/format_date_time"; import { computeRTL } from "../common/util/compute_rtl"; +import LocalizeMixin from "../mixins/localize-mixin"; +import "./entity/ha-chart-base"; class StateHistoryChartTimeline extends LocalizeMixin(PolymerElement) { static get template() { diff --git a/src/components/state-history-charts.js b/src/components/state-history-charts.js index 9f604b8079..2f87327481 100644 --- a/src/components/state-history-charts.js +++ b/src/components/state-history-charts.js @@ -1,12 +1,11 @@ import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import LocalizeMixin from "../mixins/localize-mixin"; import "./state-history-chart-line"; import "./state-history-chart-timeline"; -import LocalizeMixin from "../mixins/localize-mixin"; - class StateHistoryCharts extends LocalizeMixin(PolymerElement) { static get template() { return html` diff --git a/src/components/user/ha-user-badge.ts b/src/components/user/ha-user-badge.ts index f7685987f6..cd6dd3385d 100644 --- a/src/components/user/ha-user-badge.ts +++ b/src/components/user/ha-user-badge.ts @@ -1,15 +1,15 @@ import { - LitElement, - TemplateResult, css, CSSResult, - html, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; +import { toggleAttribute } from "../../common/dom/toggle_attribute"; import { User } from "../../data/user"; import { CurrentUser } from "../../types"; -import { toggleAttribute } from "../../common/dom/toggle_attribute"; const computeInitials = (name: string) => { if (!name) { @@ -34,9 +34,7 @@ class StateBadge extends LitElement { protected render(): TemplateResult { const user = this.user; const initials = user ? computeInitials(user.name) : "?"; - return html` - ${initials} - `; + return html` ${initials} `; } protected updated(changedProps) { diff --git a/src/components/user/ha-user-picker.ts b/src/components/user/ha-user-picker.ts index b76e8bff7e..ff5dc7c379 100644 --- a/src/components/user/ha-user-picker.ts +++ b/src/components/user/ha-user-picker.ts @@ -1,27 +1,30 @@ +import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-item/paper-item-body"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; import "@polymer/paper-listbox/paper-listbox"; -import memoizeOne from "memoize-one"; import { - LitElement, - TemplateResult, - html, css, CSSResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../types"; +import memoizeOne from "memoize-one"; import { fireEvent } from "../../common/dom/fire_event"; -import { User, fetchUsers } from "../../data/user"; import { compare } from "../../common/string/compare"; +import { fetchUsers, User } from "../../data/user"; +import { HomeAssistant } from "../../types"; class HaUserPicker extends LitElement { public hass?: HomeAssistant; + @property() public label?: string; + @property() public value?: string; + @property() public users?: User[]; private _sortedUsers = memoizeOne((users?: User[]) => { diff --git a/src/data/area_registry.ts b/src/data/area_registry.ts index ac9ed17504..63e8a38301 100644 --- a/src/data/area_registry.ts +++ b/src/data/area_registry.ts @@ -1,7 +1,7 @@ -import { createCollection, Connection } from "home-assistant-js-websocket"; -import { HomeAssistant } from "../types"; +import { Connection, createCollection } from "home-assistant-js-websocket"; import { compare } from "../common/string/compare"; import { debounce } from "../common/util/debounce"; +import { HomeAssistant } from "../types"; export interface AreaRegistryEntry { area_id: string; diff --git a/src/data/automation.ts b/src/data/automation.ts index cdb751040a..a2ff8e2654 100644 --- a/src/data/automation.ts +++ b/src/data/automation.ts @@ -1,9 +1,9 @@ import { - HassEntityBase, HassEntityAttributeBase, + HassEntityBase, } from "home-assistant-js-websocket"; -import { HomeAssistant } from "../types"; import { navigate } from "../common/navigate"; +import { HomeAssistant } from "../types"; import { DeviceCondition, DeviceTrigger } from "./device_automation"; import { Action } from "./script"; @@ -189,7 +189,7 @@ export const showAutomationEditor = ( data?: Partial ) => { inititialAutomationEditorData = data; - navigate(el, "/config/automation/new"); + navigate(el, "/config/automation/edit/new"); }; export const getAutomationEditorInitData = () => { diff --git a/src/data/cached-history.ts b/src/data/cached-history.ts index 005610e33c..e7c772cec3 100644 --- a/src/data/cached-history.ts +++ b/src/data/cached-history.ts @@ -1,13 +1,13 @@ +import { HassEntity } from "home-assistant-js-websocket"; +import { LocalizeFunc } from "../common/translations/localize"; +import { HomeAssistant } from "../types"; import { computeHistory, fetchRecent, HistoryResult, - TimelineEntity, LineChartUnit, + TimelineEntity, } from "./history"; -import { HomeAssistant } from "../types"; -import { HassEntity } from "home-assistant-js-websocket"; -import { LocalizeFunc } from "../common/translations/localize"; export interface CacheConfig { refresh: number; diff --git a/src/data/camera.ts b/src/data/camera.ts index 0bfb827308..1897a3565e 100644 --- a/src/data/camera.ts +++ b/src/data/camera.ts @@ -1,5 +1,5 @@ -import { HomeAssistant, CameraEntity } from "../types"; import { timeCachePromiseFunc } from "../common/util/time-cache-function-promise"; +import { CameraEntity, HomeAssistant } from "../types"; import { getSignedPath } from "./auth"; export const CAMERA_SUPPORT_ON_OFF = 1; diff --git a/src/data/climate.ts b/src/data/climate.ts index f61c98f8d0..a6fbea3bae 100644 --- a/src/data/climate.ts +++ b/src/data/climate.ts @@ -1,6 +1,6 @@ import { - HassEntityBase, HassEntityAttributeBase, + HassEntityBase, } from "home-assistant-js-websocket"; export type HvacMode = diff --git a/src/data/cloud.ts b/src/data/cloud.ts index 4d1ae35dcb..c642841584 100644 --- a/src/data/cloud.ts +++ b/src/data/cloud.ts @@ -1,7 +1,7 @@ -import { HomeAssistant } from "../types"; import { EntityFilter } from "../common/entity/entity_filter"; -import { AutomationConfig } from "./automation"; import { PlaceholderContainer } from "../panels/config/automation/thingtalk/dialog-thingtalk"; +import { HomeAssistant } from "../types"; +import { AutomationConfig } from "./automation"; interface CloudStatusBase { logged_in: boolean; diff --git a/src/data/config_flow.ts b/src/data/config_flow.ts index 7b922e6850..268e3e04ae 100644 --- a/src/data/config_flow.ts +++ b/src/data/config_flow.ts @@ -1,8 +1,8 @@ -import { HomeAssistant } from "../types"; -import { DataEntryFlowStep, DataEntryFlowProgress } from "./data_entry_flow"; -import { debounce } from "../common/util/debounce"; -import { getCollection, Connection } from "home-assistant-js-websocket"; +import { Connection, getCollection } from "home-assistant-js-websocket"; import { LocalizeFunc } from "../common/translations/localize"; +import { debounce } from "../common/util/debounce"; +import { HomeAssistant } from "../types"; +import { DataEntryFlowProgress, DataEntryFlowStep } from "./data_entry_flow"; export const DISCOVERY_SOURCES = ["unignore", "homekit", "ssdp", "zeroconf"]; diff --git a/src/data/conversation.ts b/src/data/conversation.ts index 6f57fe5cb2..10b9abe7ab 100644 --- a/src/data/conversation.ts +++ b/src/data/conversation.ts @@ -15,7 +15,7 @@ export interface AgentInfo { export const processText = ( hass: HomeAssistant, text: string, - // tslint:disable-next-line: variable-name + // eslint-disable-next-line: variable-name conversation_id: string ): Promise => hass.callWS({ diff --git a/src/data/core.ts b/src/data/core.ts index 8a6d9c099e..f02105ac19 100644 --- a/src/data/core.ts +++ b/src/data/core.ts @@ -1,5 +1,5 @@ -import { HomeAssistant } from "../types"; import { HassConfig } from "home-assistant-js-websocket"; +import { HomeAssistant } from "../types"; export interface ConfigUpdateValues { location_name: string; diff --git a/src/data/device_automation.ts b/src/data/device_automation.ts index 8cc269def7..03c58c36c1 100644 --- a/src/data/device_automation.ts +++ b/src/data/device_automation.ts @@ -1,5 +1,5 @@ -import { HomeAssistant } from "../types"; import { computeStateName } from "../common/entity/compute_state_name"; +import { HomeAssistant } from "../types"; export interface DeviceAutomation { device_id: string; @@ -10,8 +10,7 @@ export interface DeviceAutomation { event?: string; } -// tslint:disable-next-line: no-empty-interface -export interface DeviceAction extends DeviceAutomation {} +export type DeviceAction = DeviceAutomation; export interface DeviceCondition extends DeviceAutomation { condition: string; diff --git a/src/data/device_registry.ts b/src/data/device_registry.ts index 119231feec..da9919c6b4 100644 --- a/src/data/device_registry.ts +++ b/src/data/device_registry.ts @@ -1,8 +1,8 @@ -import { HomeAssistant } from "../types"; -import { createCollection, Connection } from "home-assistant-js-websocket"; -import { debounce } from "../common/util/debounce"; -import { EntityRegistryEntry } from "./entity_registry"; +import { Connection, createCollection } from "home-assistant-js-websocket"; import { computeStateName } from "../common/entity/compute_state_name"; +import { debounce } from "../common/util/debounce"; +import { HomeAssistant } from "../types"; +import { EntityRegistryEntry } from "./entity_registry"; export interface DeviceRegistryEntry { id: string; @@ -26,19 +26,6 @@ export interface DeviceRegistryEntryMutableParams { name_by_user?: string | null; } -export const computeDeviceName = ( - device: DeviceRegistryEntry, - hass: HomeAssistant, - entities?: EntityRegistryEntry[] | string[] -) => { - return ( - device.name_by_user || - device.name || - (entities && fallbackDeviceName(hass, entities)) || - hass.localize("ui.panel.config.devices.unnamed_device") - ); -}; - export const fallbackDeviceName = ( hass: HomeAssistant, entities: EntityRegistryEntry[] | string[] @@ -53,6 +40,19 @@ export const fallbackDeviceName = ( return undefined; }; +export const computeDeviceName = ( + device: DeviceRegistryEntry, + hass: HomeAssistant, + entities?: EntityRegistryEntry[] | string[] +) => { + return ( + device.name_by_user || + device.name || + (entities && fallbackDeviceName(hass, entities)) || + hass.localize("ui.panel.config.devices.unnamed_device") + ); +}; + export const devicesInArea = (devices: DeviceRegistryEntry[], areaId: string) => devices.filter((device) => device.area_id === areaId); diff --git a/src/data/entity.ts b/src/data/entity.ts index f4d78f3175..80f4e7c820 100644 --- a/src/data/entity.ts +++ b/src/data/entity.ts @@ -1,6 +1,8 @@ export const UNAVAILABLE = "unavailable"; export const UNKNOWN = "unknown"; +export const UNAVAILABLE_STATES = [UNAVAILABLE, UNKNOWN]; + export const ENTITY_COMPONENT_DOMAINS = [ "air_quality", "alarm_control_panel", diff --git a/src/data/entity_registry.ts b/src/data/entity_registry.ts index 18a1512b41..5abaa9084b 100644 --- a/src/data/entity_registry.ts +++ b/src/data/entity_registry.ts @@ -1,7 +1,7 @@ -import { createCollection, Connection } from "home-assistant-js-websocket"; -import { HomeAssistant } from "../types"; +import { Connection, createCollection } from "home-assistant-js-websocket"; import { computeStateName } from "../common/entity/compute_state_name"; import { debounce } from "../common/util/debounce"; +import { HomeAssistant } from "../types"; export interface EntityRegistryEntry { entity_id: string; diff --git a/src/data/ha-state-history-data.js b/src/data/ha-state-history-data.js index f4b8a449f1..bcce4509f8 100644 --- a/src/data/ha-state-history-data.js +++ b/src/data/ha-state-history-data.js @@ -1,11 +1,10 @@ import { timeOut } from "@polymer/polymer/lib/utils/async"; import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import LocalizeMixin from "../mixins/localize-mixin"; - -import { computeHistory, fetchDate } from "./history"; import { getRecent, getRecentWithCache } from "./cached-history"; +import { computeHistory, fetchDate } from "./history"; /* * @appliesMixin LocalizeMixin diff --git a/src/data/hassio/addon.ts b/src/data/hassio/addon.ts index 5127d4cbbe..ab4a1b0fcc 100644 --- a/src/data/hassio/addon.ts +++ b/src/data/hassio/addon.ts @@ -1,5 +1,5 @@ import { HomeAssistant } from "../../types"; -import { HassioResponse, hassioApiResultExtractor } from "./common"; +import { hassioApiResultExtractor, HassioResponse } from "./common"; export interface HassioAddonInfo { name: string; @@ -12,6 +12,7 @@ export interface HassioAddonInfo { detached: boolean; available: boolean; build: boolean; + advanced: boolean; url: string | null; icon: boolean; logo: boolean; diff --git a/src/data/hassio/hardware.ts b/src/data/hassio/hardware.ts index 98a4b3ca57..345bf0d1ba 100644 --- a/src/data/hassio/hardware.ts +++ b/src/data/hassio/hardware.ts @@ -1,5 +1,5 @@ import { HomeAssistant } from "../../types"; -import { HassioResponse, hassioApiResultExtractor } from "./common"; +import { hassioApiResultExtractor, HassioResponse } from "./common"; export interface HassioHardwareAudioDevice { device?: string | null; diff --git a/src/data/hassio/host.ts b/src/data/hassio/host.ts index 4eb473b342..af0a647902 100644 --- a/src/data/hassio/host.ts +++ b/src/data/hassio/host.ts @@ -1,5 +1,5 @@ import { HomeAssistant } from "../../types"; -import { HassioResponse, hassioApiResultExtractor } from "./common"; +import { hassioApiResultExtractor, HassioResponse } from "./common"; export type HassioHostInfo = any; diff --git a/src/data/hassio/snapshot.ts b/src/data/hassio/snapshot.ts index 1dabe53559..20d99cc5d4 100644 --- a/src/data/hassio/snapshot.ts +++ b/src/data/hassio/snapshot.ts @@ -1,5 +1,5 @@ import { HomeAssistant } from "../../types"; -import { HassioResponse, hassioApiResultExtractor } from "./common"; +import { hassioApiResultExtractor, HassioResponse } from "./common"; export interface HassioSnapshot { slug: string; diff --git a/src/data/hassio/supervisor.ts b/src/data/hassio/supervisor.ts index bed2c34d0a..ccd5ef4d52 100644 --- a/src/data/hassio/supervisor.ts +++ b/src/data/hassio/supervisor.ts @@ -1,5 +1,5 @@ import { HomeAssistant, PanelInfo } from "../../types"; -import { HassioResponse, hassioApiResultExtractor } from "./common"; +import { hassioApiResultExtractor, HassioResponse } from "./common"; export type HassioHomeAssistantInfo = any; export type HassioSupervisorInfo = any; diff --git a/src/data/history.ts b/src/data/history.ts index 1055ed0472..adfe9eba00 100644 --- a/src/data/history.ts +++ b/src/data/history.ts @@ -1,9 +1,9 @@ -import { computeStateName } from "../common/entity/compute_state_name"; -import { computeStateDomain } from "../common/entity/compute_state_domain"; import { HassEntity } from "home-assistant-js-websocket"; -import { HomeAssistant } from "../types"; -import { LocalizeFunc } from "../common/translations/localize"; import { computeStateDisplay } from "../common/entity/compute_state_display"; +import { computeStateDomain } from "../common/entity/compute_state_domain"; +import { computeStateName } from "../common/entity/compute_state_name"; +import { LocalizeFunc } from "../common/translations/localize"; +import { HomeAssistant } from "../types"; const DOMAINS_USE_LAST_UPDATED = ["climate", "water_heater"]; const LINE_ATTRIBUTES_TO_KEEP = [ diff --git a/src/data/lovelace.ts b/src/data/lovelace.ts index 4f62a24224..234825d018 100644 --- a/src/data/lovelace.ts +++ b/src/data/lovelace.ts @@ -1,10 +1,10 @@ -import { HomeAssistant } from "../types"; import { Connection, getCollection, HassEventBase, } from "home-assistant-js-websocket"; import { HASSDomEvent } from "../common/dom/fire_event"; +import { HomeAssistant } from "../types"; export interface LovelacePanelConfig { mode: "yaml" | "storage"; diff --git a/src/data/onboarding.ts b/src/data/onboarding.ts index 5ac72b2ba1..9fb5b309e1 100644 --- a/src/data/onboarding.ts +++ b/src/data/onboarding.ts @@ -1,7 +1,7 @@ -import { handleFetchPromise } from "../util/hass-call-api"; import { HomeAssistant } from "../types"; +import { handleFetchPromise } from "../util/hass-call-api"; -// tslint:disable-next-line: no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-interface export interface OnboardingCoreConfigStepResponse {} export interface OnboardingUserStepResponse { diff --git a/src/data/panel.ts b/src/data/panel.ts index 23abea278b..24e6e31627 100644 --- a/src/data/panel.ts +++ b/src/data/panel.ts @@ -1,24 +1,27 @@ -import { HomeAssistant, PanelInfo } from "../types"; import { fireEvent } from "../common/dom/fire_event"; +import { HomeAssistant, PanelInfo } from "../types"; /** Panel to show when no panel is picked. */ export const DEFAULT_PANEL = "lovelace"; -export const getStorageDefaultPanelUrlPath = () => +export const getStorageDefaultPanelUrlPath = (): string => localStorage.defaultPanel ? JSON.parse(localStorage.defaultPanel) : DEFAULT_PANEL; -export const setDefaultPanel = (element: HTMLElement, urlPath: string) => { +export const setDefaultPanel = ( + element: HTMLElement, + urlPath: string +): void => { fireEvent(element, "hass-default-panel", { defaultPanel: urlPath }); }; -export const getDefaultPanel = (hass: HomeAssistant) => +export const getDefaultPanel = (hass: HomeAssistant): PanelInfo => hass.panels[hass.defaultPanel]; export const getPanelTitle = (hass: HomeAssistant): string | undefined => { if (!hass.panels) { - return; + return undefined; } const panel = Object.values(hass.panels).find( @@ -26,7 +29,7 @@ export const getPanelTitle = (hass: HomeAssistant): string | undefined => { ); if (!panel) { - return; + return undefined; } if (panel.url_path === "lovelace") { diff --git a/src/data/persistent_notification.ts b/src/data/persistent_notification.ts index 1bfc33bd34..3407efe95e 100644 --- a/src/data/persistent_notification.ts +++ b/src/data/persistent_notification.ts @@ -1,6 +1,6 @@ import { - createCollection, Connection, + createCollection, HassEntity, } from "home-assistant-js-websocket"; diff --git a/src/data/scene.ts b/src/data/scene.ts index 6e3e65a66f..c0245a4f24 100644 --- a/src/data/scene.ts +++ b/src/data/scene.ts @@ -1,10 +1,9 @@ import { - HassEntityBase, HassEntityAttributeBase, + HassEntityBase, } from "home-assistant-js-websocket"; - -import { HomeAssistant, ServiceCallResponse } from "../types"; import { navigate } from "../common/navigate"; +import { HomeAssistant, ServiceCallResponse } from "../types"; export const SCENE_IGNORED_DOMAINS = [ "sensor", diff --git a/src/data/script.ts b/src/data/script.ts index c52979b664..5f027ce413 100644 --- a/src/data/script.ts +++ b/src/data/script.ts @@ -1,11 +1,11 @@ -import { HomeAssistant } from "../types"; -import { computeObjectId } from "../common/entity/compute_object_id"; -import { Condition } from "./automation"; import { - HassEntityBase, HassEntityAttributeBase, + HassEntityBase, } from "home-assistant-js-websocket"; +import { computeObjectId } from "../common/entity/compute_object_id"; import { navigate } from "../common/navigate"; +import { HomeAssistant } from "../types"; +import { Condition } from "./automation"; export interface ScriptEntity extends HassEntityBase { attributes: HassEntityAttributeBase & { @@ -74,7 +74,7 @@ export const showScriptEditor = ( data?: Partial ) => { inititialScriptEditorData = data; - navigate(el, "/config/script/new"); + navigate(el, "/config/script/edit/new"); }; export const getScriptEditorInitData = () => { diff --git a/src/data/timer.ts b/src/data/timer.ts index e55b936d15..8b54020a7d 100644 --- a/src/data/timer.ts +++ b/src/data/timer.ts @@ -1,6 +1,6 @@ import { - HassEntityBase, HassEntityAttributeBase, + HassEntityBase, } from "home-assistant-js-websocket"; export type TimerEntity = HassEntityBase & { diff --git a/src/data/user.ts b/src/data/user.ts index 905b138635..bd35ff1896 100644 --- a/src/data/user.ts +++ b/src/data/user.ts @@ -30,7 +30,7 @@ export const fetchUsers = async (hass: HomeAssistant) => export const createUser = async ( hass: HomeAssistant, name: string, - // tslint:disable-next-line: variable-name + // eslint-disable-next-line: variable-name group_ids?: User["group_ids"] ) => hass.callWS<{ user: User }>({ diff --git a/src/data/weather.ts b/src/data/weather.ts index 62a4ed423d..3c7b2d351a 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -44,7 +44,7 @@ export const cardinalDirections = [ const getWindBearingText = (degree: string): string => { const degreenum = parseInt(degree, 10); if (isFinite(degreenum)) { - // tslint:disable-next-line: no-bitwise + // eslint-disable-next-line no-bitwise return cardinalDirections[(((degreenum + 11.25) / 22.5) | 0) % 16]; } return degree; diff --git a/src/data/ws-panels.ts b/src/data/ws-panels.ts index a38c4ed252..984b2459cb 100644 --- a/src/data/ws-panels.ts +++ b/src/data/ws-panels.ts @@ -1,4 +1,4 @@ -import { createCollection, Connection } from "home-assistant-js-websocket"; +import { Connection, createCollection } from "home-assistant-js-websocket"; import { Panels } from "../types"; const fetchPanels = (conn) => diff --git a/src/data/ws-themes.ts b/src/data/ws-themes.ts index ed559e45c5..8f6d947e76 100644 --- a/src/data/ws-themes.ts +++ b/src/data/ws-themes.ts @@ -1,4 +1,4 @@ -import { createCollection, Connection } from "home-assistant-js-websocket"; +import { Connection, createCollection } from "home-assistant-js-websocket"; import { Themes } from "../types"; const fetchThemes = (conn) => diff --git a/src/data/ws-user.ts b/src/data/ws-user.ts index 2e171b8dab..8d8f2d1783 100644 --- a/src/data/ws-user.ts +++ b/src/data/ws-user.ts @@ -1,7 +1,7 @@ import { - getUser, Connection, getCollection, + getUser, } from "home-assistant-js-websocket"; import { CurrentUser } from "../types"; diff --git a/src/data/zone.ts b/src/data/zone.ts index d7d2306457..92151c4a58 100644 --- a/src/data/zone.ts +++ b/src/data/zone.ts @@ -1,9 +1,9 @@ -import { HomeAssistant } from "../types"; import { navigate } from "../common/navigate"; +import { HomeAssistant } from "../types"; export const defaultRadiusColor = "#FF9800"; -export const homeRadiusColor: string = "#03a9f4"; -export const passiveRadiusColor: string = "#9b9b9b"; +export const homeRadiusColor = "#03a9f4"; +export const passiveRadiusColor = "#9b9b9b"; export interface Zone { id: string; diff --git a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts index e60552b32b..bd4270ca67 100644 --- a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts +++ b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts @@ -1,36 +1,38 @@ -import { - LitElement, - html, - css, - CSSResult, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../components/dialog/ha-paper-dialog"; import "../../components/ha-switch"; - -import { HomeAssistant } from "../../types"; -import { ConfigEntrySystemOptionsDialogParams } from "./show-dialog-config-entry-system-options"; +import type { HaSwitch } from "../../components/ha-switch"; import { getConfigEntrySystemOptions, updateConfigEntrySystemOptions, } from "../../data/config_entries"; -import { PolymerChangedEvent } from "../../polymer-types"; +import type { PolymerChangedEvent } from "../../polymer-types"; import { haStyleDialog } from "../../resources/styles"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../components/ha-switch"; +import type { HomeAssistant } from "../../types"; +import { ConfigEntrySystemOptionsDialogParams } from "./show-dialog-config-entry-system-options"; @customElement("dialog-config-entry-system-options") class DialogConfigEntrySystemOptions extends LitElement { @property() public hass!: HomeAssistant; + @property() private _disableNewEntities!: boolean; + @property() private _error?: string; + @property() private _params?: ConfigEntrySystemOptionsDialogParams; + @property() private _loading?: boolean; + @property() private _submitting?: boolean; public async showDialog( @@ -77,9 +79,7 @@ class DialogConfigEntrySystemOptions extends LitElement { ` : html` ${this._error - ? html` -
    ${this._error}
    - ` + ? html`
    ${this._error}
    ` : ""}
    { @@ -184,9 +189,7 @@ class DataEntryFlowDialog extends LitElement { ` : this._devices === undefined || this._areas === undefined ? // When it's a create entry result, we will fetch device & area registry - html` - - ` + html` ` : html` - ` + ? html` ` : ""; }, @@ -63,9 +61,7 @@ export const showConfigFlowDialog = ( step.description_placeholders ); return description - ? html` - - ` + ? html` ` : ""; }, @@ -99,9 +95,7 @@ export const showConfigFlowDialog = ( )}

    ${description - ? html` - - ` + ? html` ` : ""} `; }, @@ -109,16 +103,15 @@ export const showConfigFlowDialog = ( renderCreateEntryDescription(hass, step) { const description = localizeKey( hass.localize, - `component.${step.handler}.config.create_entry.${step.description || - "default"}`, + `component.${step.handler}.config.create_entry.${ + step.description || "default" + }`, step.description_placeholders ); return html` ${description - ? html` - - ` + ? html` ` : ""}

    ${hass.localize( diff --git a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts index 490a6becc0..401c2a43e7 100644 --- a/src/dialogs/config-flow/show-dialog-data-entry-flow.ts +++ b/src/dialogs/config-flow/show-dialog-data-entry-flow.ts @@ -1,14 +1,14 @@ import { TemplateResult } from "lit-html"; import { fireEvent } from "../../common/dom/fire_event"; -import { HomeAssistant } from "../../types"; +import { HaFormSchema } from "../../components/ha-form/ha-form"; import { + DataEntryFlowStep, + DataEntryFlowStepAbort, DataEntryFlowStepCreateEntry, DataEntryFlowStepExternal, DataEntryFlowStepForm, - DataEntryFlowStep, - DataEntryFlowStepAbort, } from "../../data/data_entry_flow"; -import { HaFormSchema } from "../../components/ha-form/ha-form"; +import { HomeAssistant } from "../../types"; export interface FlowConfig { loadDevicesAndAreas: boolean; diff --git a/src/dialogs/config-flow/show-dialog-options-flow.ts b/src/dialogs/config-flow/show-dialog-options-flow.ts index 493b1d2b77..d2ccebecc2 100644 --- a/src/dialogs/config-flow/show-dialog-options-flow.ts +++ b/src/dialogs/config-flow/show-dialog-options-flow.ts @@ -1,16 +1,16 @@ -import { - fetchOptionsFlow, - handleOptionsFlowStep, - deleteOptionsFlow, - createOptionsFlow, -} from "../../data/options_flow"; import { html } from "lit-element"; import { localizeKey } from "../../common/translations/localize"; -import { - showFlowDialog, - loadDataEntryFlowDialog, -} from "./show-dialog-data-entry-flow"; import { ConfigEntry } from "../../data/config_entries"; +import { + createOptionsFlow, + deleteOptionsFlow, + fetchOptionsFlow, + handleOptionsFlowStep, +} from "../../data/options_flow"; +import { + loadDataEntryFlowDialog, + showFlowDialog, +} from "./show-dialog-data-entry-flow"; export const loadOptionsFlowDialog = loadDataEntryFlowDialog; @@ -38,9 +38,7 @@ export const showOptionsFlowDialog = ( ); return description - ? html` - - ` + ? html` ` : ""; }, @@ -59,9 +57,7 @@ export const showOptionsFlowDialog = ( step.description_placeholders ); return description - ? html` - - ` + ? html` ` : ""; }, diff --git a/src/dialogs/config-flow/step-flow-abort.ts b/src/dialogs/config-flow/step-flow-abort.ts index 211fa6c522..7309ff2226 100644 --- a/src/dialogs/config-flow/step-flow-abort.ts +++ b/src/dialogs/config-flow/step-flow-abort.ts @@ -1,18 +1,17 @@ -import { - LitElement, - TemplateResult, - html, - customElement, - property, - CSSResult, -} from "lit-element"; import "@material/mwc-button"; - +import { + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../common/dom/fire_event"; import { DataEntryFlowStepAbort } from "../../data/data_entry_flow"; import { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; -import { configFlowContentStyles } from "./styles"; import { FlowConfig } from "./show-dialog-data-entry-flow"; +import { configFlowContentStyles } from "./styles"; @customElement("step-flow-abort") class StepFlowAbort extends LitElement { diff --git a/src/dialogs/config-flow/step-flow-create-entry.ts b/src/dialogs/config-flow/step-flow-create-entry.ts index fe6d1ffeab..ee12067b20 100644 --- a/src/dialogs/config-flow/step-flow-create-entry.ts +++ b/src/dialogs/config-flow/step-flow-create-entry.ts @@ -1,27 +1,27 @@ -import { - LitElement, - TemplateResult, - html, - customElement, - property, - CSSResultArray, - css, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; -import "../../components/ha-area-picker"; -import { HomeAssistant } from "../../types"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../../common/dom/fire_event"; -import { configFlowContentStyles } from "./styles"; +import "../../components/ha-area-picker"; +import { DataEntryFlowStepCreateEntry } from "../../data/data_entry_flow"; import { DeviceRegistryEntry, updateDeviceRegistryEntry, } from "../../data/device_registry"; -import { DataEntryFlowStepCreateEntry } from "../../data/data_entry_flow"; -import { FlowConfig } from "./show-dialog-data-entry-flow"; +import { HomeAssistant } from "../../types"; import { showAlertDialog } from "../generic/show-dialog-box"; +import { FlowConfig } from "./show-dialog-data-entry-flow"; +import { configFlowContentStyles } from "./styles"; @customElement("step-flow-create-entry") class StepFlowCreateEntry extends LitElement { diff --git a/src/dialogs/config-flow/step-flow-external.ts b/src/dialogs/config-flow/step-flow-external.ts index fcc3efa51e..757399763d 100644 --- a/src/dialogs/config-flow/step-flow-external.ts +++ b/src/dialogs/config-flow/step-flow-external.ts @@ -1,22 +1,21 @@ -import { - LitElement, - TemplateResult, - html, - customElement, - property, - CSSResultArray, - css, -} from "lit-element"; import "@material/mwc-button"; - -import { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; -import { configFlowContentStyles } from "./styles"; import { - DataEntryFlowStepExternal, + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../common/dom/fire_event"; +import { DataEntryFlowProgressedEvent, + DataEntryFlowStepExternal, } from "../../data/data_entry_flow"; +import { HomeAssistant } from "../../types"; import { FlowConfig } from "./show-dialog-data-entry-flow"; +import { configFlowContentStyles } from "./styles"; @customElement("step-flow-external") class StepFlowExternal extends LitElement { diff --git a/src/dialogs/config-flow/step-flow-form.ts b/src/dialogs/config-flow/step-flow-form.ts index adf6a4ea5c..5fe6c98cd5 100644 --- a/src/dialogs/config-flow/step-flow-form.ts +++ b/src/dialogs/config-flow/step-flow-form.ts @@ -1,27 +1,25 @@ +import "@material/mwc-button"; +import "@polymer/paper-spinner/paper-spinner"; +import "@polymer/paper-tooltip/paper-tooltip"; import { - LitElement, - TemplateResult, - html, - CSSResultArray, css, + CSSResultArray, customElement, + html, + LitElement, property, PropertyValues, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "@polymer/paper-tooltip/paper-tooltip"; -import "@polymer/paper-spinner/paper-spinner"; - -import "../../components/ha-form/ha-form"; -import "../../components/ha-markdown"; -import "../../resources/ha-style"; -import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; +import "../../components/ha-form/ha-form"; +import type { HaFormSchema } from "../../components/ha-form/ha-form"; +import "../../components/ha-markdown"; +import type { DataEntryFlowStepForm } from "../../data/data_entry_flow"; +import "../../resources/ha-style"; +import type { HomeAssistant } from "../../types"; +import type { FlowConfig } from "./show-dialog-data-entry-flow"; import { configFlowContentStyles } from "./styles"; -import { DataEntryFlowStepForm } from "../../data/data_entry_flow"; -import { FlowConfig } from "./show-dialog-data-entry-flow"; -// tslint:disable-next-line -import { HaFormSchema } from "../../components/ha-form/ha-form"; @customElement("step-flow-form") class StepFlowForm extends LitElement { @@ -63,9 +61,7 @@ class StepFlowForm extends LitElement {

  • ${this._errorMsg - ? html` -
    ${this._errorMsg}
    - ` + ? html`
    ${this._errorMsg}
    ` : ""} ${this.flowConfig.renderShowFormStepDescription(this.hass, this.step)} - ${this.label - ? html` -
    ${this.label}
    - ` - : ""} + ${this.label ? html`
    ${this.label}
    ` : ""}
    `; @@ -32,6 +28,9 @@ class StepFlowLoading extends LitElement { padding: 50px 100px; text-align: center; } + paper-spinner-lite { + margin-top: 16px; + } `; } } diff --git a/src/dialogs/config-flow/step-flow-pick-handler.ts b/src/dialogs/config-flow/step-flow-pick-handler.ts index fab1731784..b060069e31 100644 --- a/src/dialogs/config-flow/step-flow-pick-handler.ts +++ b/src/dialogs/config-flow/step-flow-pick-handler.ts @@ -1,3 +1,7 @@ +import "@polymer/paper-item/paper-icon-item"; +import "@polymer/paper-item/paper-item-body"; +import "@polymer/paper-spinner/paper-spinner-lite"; +import * as Fuse from "fuse.js"; import { css, CSSResult, @@ -7,20 +11,15 @@ import { property, TemplateResult, } from "lit-element"; -import "@polymer/paper-spinner/paper-spinner-lite"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-item/paper-item-body"; -import { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; -import memoizeOne from "memoize-one"; -import * as Fuse from "fuse.js"; - -import "../../components/ha-icon-next"; -import "../../common/search/search-input"; +import { classMap } from "lit-html/directives/class-map"; import { styleMap } from "lit-html/directives/style-map"; +import memoizeOne from "memoize-one"; +import { fireEvent } from "../../common/dom/fire_event"; +import "../../common/search/search-input"; +import "../../components/ha-icon-next"; +import { HomeAssistant } from "../../types"; import { FlowConfig } from "./show-dialog-data-entry-flow"; import { configFlowContentStyles } from "./styles"; -import { classMap } from "lit-html/directives/class-map"; interface HandlerObj { name: string; @@ -32,9 +31,13 @@ class StepFlowPickHandler extends LitElement { public flowConfig!: FlowConfig; @property() public hass!: HomeAssistant; + @property() public handlers!: string[]; + @property() public showAdvanced?: boolean; + @property() private filter?: string; + private _width?: number; private _getHandlers = memoizeOne((h: string[], filter?: string) => { @@ -77,12 +80,25 @@ class StepFlowPickHandler extends LitElement { ${handlers.map( (handler: HandlerObj) => html` - + + + ${handler.name} - + ` )} @@ -144,6 +160,17 @@ class StepFlowPickHandler extends LitElement { return [ configFlowContentStyles, css` + img { + max-width: 40px; + max-height: 40px; + } + search-input { + display: block; + margin: -12px 16px 0; + } + ha-icon-next { + margin-right: 8px; + } div { overflow: auto; max-height: 600px; @@ -156,8 +183,9 @@ class StepFlowPickHandler extends LitElement { max-height: calc(100vh - 300px); } } - paper-item { + paper-icon-item { cursor: pointer; + margin-bottom: 4px; } p { text-align: center; diff --git a/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts b/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts index c53a6b933c..592299c605 100644 --- a/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts +++ b/src/dialogs/device-registry-detail/dialog-device-registry-detail.ts @@ -1,35 +1,36 @@ +import "@material/mwc-button/mwc-button"; +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-input/paper-input"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { - LitElement, - html, css, CSSResult, - TemplateResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-listbox/paper-listbox"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@material/mwc-button/mwc-button"; - import "../../components/dialog/ha-paper-dialog"; import "../../components/ha-area-picker"; - -import { DeviceRegistryDetailDialogParams } from "./show-dialog-device-registry-detail"; +import { computeDeviceName } from "../../data/device_registry"; import { PolymerChangedEvent } from "../../polymer-types"; import { haStyleDialog } from "../../resources/styles"; import { HomeAssistant } from "../../types"; -import { computeDeviceName } from "../../data/device_registry"; +import { DeviceRegistryDetailDialogParams } from "./show-dialog-device-registry-detail"; @customElement("dialog-device-registry-detail") class DialogDeviceRegistryDetail extends LitElement { @property() public hass!: HomeAssistant; @property() private _nameByUser!: string; + @property() private _error?: string; + @property() private _params?: DeviceRegistryDetailDialogParams; + @property() private _areaId?: string; private _submitting?: boolean; @@ -60,11 +61,7 @@ class DialogDeviceRegistryDetail extends LitElement { ${computeDeviceName(device, this.hass)} - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    { diff --git a/src/dialogs/generic/dialog-box.ts b/src/dialogs/generic/dialog-box.ts index 1301347f7e..1e2be3dea4 100644 --- a/src/dialogs/generic/dialog-box.ts +++ b/src/dialogs/generic/dialog-box.ts @@ -1,28 +1,28 @@ -import { - LitElement, - html, - css, - CSSResult, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; import "../../components/dialog/ha-paper-dialog"; import "../../components/ha-switch"; - -import { HomeAssistant } from "../../types"; -import { DialogParams } from "./show-dialog-box"; import { PolymerChangedEvent } from "../../polymer-types"; import { haStyleDialog } from "../../resources/styles"; -import { classMap } from "lit-html/directives/class-map"; +import { HomeAssistant } from "../../types"; +import { DialogParams } from "./show-dialog-box"; @customElement("dialog-box") class DialogBox extends LitElement { @property() public hass!: HomeAssistant; + @property() private _params?: DialogParams; + @property() private _value?: string; public async showDialog(params: DialogParams): Promise { @@ -84,13 +84,13 @@ class DialogBox extends LitElement {
    ${confirmPrompt && - html` - - ${this._params.dismissText - ? this._params.dismissText - : this.hass.localize("ui.dialogs.generic.cancel")} - - `} + html` + + ${this._params.dismissText + ? this._params.dismissText + : this.hass.localize("ui.dialogs.generic.cancel")} + + `} ${this._params.confirmText ? this._params.confirmText diff --git a/src/dialogs/generic/show-dialog-box.ts b/src/dialogs/generic/show-dialog-box.ts index 8b05578bd7..86c5cfee8b 100644 --- a/src/dialogs/generic/show-dialog-box.ts +++ b/src/dialogs/generic/show-dialog-box.ts @@ -1,5 +1,5 @@ -import { fireEvent } from "../../common/dom/fire_event"; import { TemplateResult } from "lit-html"; +import { fireEvent } from "../../common/dom/fire_event"; interface BaseDialogParams { confirmText?: string; diff --git a/src/dialogs/ha-more-info-dialog.js b/src/dialogs/ha-more-info-dialog.js index 135855db5b..f09a944540 100644 --- a/src/dialogs/ha-more-info-dialog.js +++ b/src/dialogs/ha-more-info-dialog.js @@ -1,15 +1,12 @@ import "@polymer/paper-dialog-behavior/paper-dialog-shared-styles"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../resources/ha-style"; - -import "./more-info/more-info-controls"; - import { computeStateDomain } from "../common/entity/compute_state_domain"; - import DialogMixin from "../mixins/dialog-mixin"; +import "../resources/ha-style"; +import "./more-info/more-info-controls"; /* * @appliesMixin DialogMixin diff --git a/src/dialogs/ha-store-auth-card.js b/src/dialogs/ha-store-auth-card.js index d63d805498..28df7c7249 100644 --- a/src/dialogs/ha-store-auth-card.js +++ b/src/dialogs/ha-store-auth-card.js @@ -1,10 +1,9 @@ import "@polymer/paper-card/paper-card"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { enableWrite } from "../common/auth/token_storage"; import LocalizeMixin from "../mixins/localize-mixin"; - import "../resources/ha-style"; class HaStoreAuth extends LocalizeMixin(PolymerElement) { diff --git a/src/dialogs/more-info/controls/more-info-alarm_control_panel.js b/src/dialogs/more-info/controls/more-info-alarm_control_panel.js index 64ab1d8ba5..016f72e118 100644 --- a/src/dialogs/more-info/controls/more-info-alarm_control_panel.js +++ b/src/dialogs/more-info/controls/more-info-alarm_control_panel.js @@ -1,11 +1,11 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import LocalizeMixin from "../../../mixins/localize-mixin"; import { fireEvent } from "../../../common/dom/fire_event"; +import LocalizeMixin from "../../../mixins/localize-mixin"; class MoreInfoAlarmControlPanel extends LocalizeMixin(PolymerElement) { static get template() { diff --git a/src/dialogs/more-info/controls/more-info-automation.ts b/src/dialogs/more-info/controls/more-info-automation.ts index 08b53b17cf..7e2651ec24 100644 --- a/src/dialogs/more-info/controls/more-info-automation.ts +++ b/src/dialogs/more-info/controls/more-info-automation.ts @@ -1,23 +1,22 @@ -import { - LitElement, - html, - TemplateResult, - CSSResult, - css, - property, - customElement, -} from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; import "@material/mwc-button"; - +import { HassEntity } from "home-assistant-js-websocket"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/ha-relative-time"; - -import { HomeAssistant } from "../../../types"; import { triggerAutomation } from "../../../data/automation"; +import { HomeAssistant } from "../../../types"; @customElement("more-info-automation") class MoreInfoAutomation extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; protected render(): TemplateResult { diff --git a/src/dialogs/more-info/controls/more-info-camera.ts b/src/dialogs/more-info/controls/more-info-camera.ts index 3dda7275b0..55623f58d5 100644 --- a/src/dialogs/more-info/controls/more-info-camera.ts +++ b/src/dialogs/more-info/controls/more-info-camera.ts @@ -1,31 +1,31 @@ +import "@polymer/paper-checkbox/paper-checkbox"; +import type { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; import { + css, + CSSResult, + html, + LitElement, property, PropertyValues, - LitElement, TemplateResult, - html, - CSSResult, - css, } from "lit-element"; - -import { HomeAssistant, CameraEntity } from "../../../types"; +import { supportsFeature } from "../../../common/entity/supports-feature"; +import "../../../components/ha-camera-stream"; import { - CAMERA_SUPPORT_STREAM, CameraPreferences, + CAMERA_SUPPORT_STREAM, fetchCameraPrefs, updateCameraPrefs, } from "../../../data/camera"; -import { supportsFeature } from "../../../common/entity/supports-feature"; -import "../../../components/ha-camera-stream"; -import "@polymer/paper-checkbox/paper-checkbox"; -// Not duplicate import, it's for typing -// tslint:disable-next-line -import { PaperCheckboxElement } from "@polymer/paper-checkbox/paper-checkbox"; +import type { CameraEntity, HomeAssistant } from "../../../types"; class MoreInfoCamera extends LitElement { @property() public hass?: HomeAssistant; + @property() public stateObj?: CameraEntity; + @property() private _cameraPrefs?: CameraPreferences; + @property() private _attached = false; public connectedCallback() { diff --git a/src/dialogs/more-info/controls/more-info-climate.ts b/src/dialogs/more-info/controls/more-info-climate.ts index bb1a4b2275..be4526fd8f 100644 --- a/src/dialogs/more-info/controls/more-info-climate.ts +++ b/src/dialogs/more-info/controls/more-info-climate.ts @@ -2,41 +2,40 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { - LitElement, - html, - TemplateResult, - CSSResult, css, + CSSResult, + html, + LitElement, property, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../../../components/ha-climate-control"; -import "../../../components/ha-paper-slider"; -import "../../../components/ha-paper-dropdown-menu"; -import "../../../components/ha-switch"; - +import { classMap } from "lit-html/directives/class-map"; +import { fireEvent } from "../../../common/dom/fire_event"; import { supportsFeature } from "../../../common/entity/supports-feature"; - import { computeRTLDirection } from "../../../common/util/compute_rtl"; -import { HomeAssistant } from "../../../types"; +import "../../../components/ha-climate-control"; +import "../../../components/ha-paper-dropdown-menu"; +import "../../../components/ha-paper-slider"; +import "../../../components/ha-switch"; import { ClimateEntity, + CLIMATE_SUPPORT_AUX_HEAT, + CLIMATE_SUPPORT_FAN_MODE, + CLIMATE_SUPPORT_PRESET_MODE, + CLIMATE_SUPPORT_SWING_MODE, + CLIMATE_SUPPORT_TARGET_HUMIDITY, CLIMATE_SUPPORT_TARGET_TEMPERATURE, CLIMATE_SUPPORT_TARGET_TEMPERATURE_RANGE, - CLIMATE_SUPPORT_TARGET_HUMIDITY, - CLIMATE_SUPPORT_FAN_MODE, - CLIMATE_SUPPORT_SWING_MODE, - CLIMATE_SUPPORT_AUX_HEAT, - CLIMATE_SUPPORT_PRESET_MODE, compareClimateHvacModes, } from "../../../data/climate"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { classMap } from "lit-html/directives/class-map"; +import { HomeAssistant } from "../../../types"; class MoreInfoClimate extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: ClimateEntity; + private _resizeDebounce?: number; protected render(): TemplateResult { diff --git a/src/dialogs/more-info/controls/more-info-configurator.js b/src/dialogs/more-info/controls/more-info-configurator.js index 6e8b060c1e..8d09e02953 100644 --- a/src/dialogs/more-info/controls/more-info-configurator.js +++ b/src/dialogs/more-info/controls/more-info-configurator.js @@ -1,11 +1,11 @@ +import "@material/mwc-button"; import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/iron-input/iron-input"; -import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../components/ha-markdown"; class MoreInfoConfigurator extends PolymerElement { @@ -110,7 +110,7 @@ class MoreInfoConfigurator extends PolymerElement { fieldInput: { type: Object, - value: function() { + value: function () { return {}; }, }, @@ -135,10 +135,10 @@ class MoreInfoConfigurator extends PolymerElement { this.isConfiguring = true; this.hass.callService("configurator", "configure", data).then( - function() { + function () { this.isConfiguring = false; }.bind(this), - function() { + function () { this.isConfiguring = false; }.bind(this) ); diff --git a/src/dialogs/more-info/controls/more-info-content.ts b/src/dialogs/more-info/controls/more-info-content.ts index c86b52b9dd..896d1c576b 100644 --- a/src/dialogs/more-info/controls/more-info-content.ts +++ b/src/dialogs/more-info/controls/more-info-content.ts @@ -1,6 +1,8 @@ -import { PropertyValues, UpdatingElement, property } from "lit-element"; import { HassEntity } from "home-assistant-js-websocket"; - +import { property, PropertyValues, UpdatingElement } from "lit-element"; +import dynamicContentUpdater from "../../../common/dom/dynamic_content_updater"; +import { stateMoreInfoType } from "../../../common/entity/state_more_info_type"; +import { HomeAssistant } from "../../../types"; import "./more-info-alarm_control_panel"; import "./more-info-automation"; import "./more-info-camera"; @@ -24,13 +26,11 @@ import "./more-info-vacuum"; import "./more-info-water_heater"; import "./more-info-weather"; -import { stateMoreInfoType } from "../../../common/entity/state_more_info_type"; -import dynamicContentUpdater from "../../../common/dom/dynamic_content_updater"; -import { HomeAssistant } from "../../../types"; - class MoreInfoContent extends UpdatingElement { @property() public hass?: HomeAssistant; + @property() public stateObj?: HassEntity; + private _detachedChild?: ChildNode; protected firstUpdated(): void { diff --git a/src/dialogs/more-info/controls/more-info-counter.ts b/src/dialogs/more-info/controls/more-info-counter.ts index c9ba166982..2ec001a01a 100644 --- a/src/dialogs/more-info/controls/more-info-counter.ts +++ b/src/dialogs/more-info/controls/more-info-counter.ts @@ -1,20 +1,20 @@ -import { - LitElement, - html, - TemplateResult, - CSSResult, - css, - property, - customElement, -} from "lit-element"; import "@material/mwc-button"; import { HassEntity } from "home-assistant-js-websocket"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { HomeAssistant } from "../../../types"; @customElement("more-info-counter") class MoreInfoCounter extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; protected render(): TemplateResult { diff --git a/src/dialogs/more-info/controls/more-info-cover.js b/src/dialogs/more-info/controls/more-info-cover.js index f075583d91..25e2bc18ec 100644 --- a/src/dialogs/more-info/controls/more-info-cover.js +++ b/src/dialogs/more-info/controls/more-info-cover.js @@ -1,16 +1,14 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { attributeClassNames } from "../../../common/entity/attribute_class_names"; +import { featureClassNames } from "../../../common/entity/feature_class_names"; import "../../../components/ha-cover-tilt-controls"; import "../../../components/ha-labeled-slider"; - -import CoverEntity from "../../../util/cover-model"; -import { featureClassNames } from "../../../common/entity/feature_class_names"; import LocalizeMixin from "../../../mixins/localize-mixin"; - -import { attributeClassNames } from "../../../common/entity/attribute_class_names"; +import CoverEntity from "../../../util/cover-model"; const FEATURE_CLASS_NAMES = { 128: "has-set_tilt_position", diff --git a/src/dialogs/more-info/controls/more-info-default.ts b/src/dialogs/more-info/controls/more-info-default.ts index 7b30893609..c9a3c49d71 100644 --- a/src/dialogs/more-info/controls/more-info-default.ts +++ b/src/dialogs/more-info/controls/more-info-default.ts @@ -1,19 +1,18 @@ -import { - LitElement, - html, - TemplateResult, - property, - customElement, -} from "lit-element"; import { HassEntity } from "home-assistant-js-websocket"; - -import { HomeAssistant } from "../../../types"; - +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/ha-attributes"; +import { HomeAssistant } from "../../../types"; @customElement("more-info-default") class MoreInfoDefault extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; protected render(): TemplateResult { @@ -21,9 +20,7 @@ class MoreInfoDefault extends LitElement { return html``; } - return html` - - `; + return html` `; } } diff --git a/src/dialogs/more-info/controls/more-info-fan.js b/src/dialogs/more-info/controls/more-info-fan.js index c27ac5bf26..0c0e0da0a2 100644 --- a/src/dialogs/more-info/controls/more-info-fan.js +++ b/src/dialogs/more-info/controls/more-info-fan.js @@ -3,15 +3,13 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { attributeClassNames } from "../../../common/entity/attribute_class_names"; import "../../../components/ha-attributes"; import "../../../components/ha-paper-dropdown-menu"; import "../../../components/ha-switch"; - import { EventsMixin } from "../../../mixins/events-mixin"; -import { attributeClassNames } from "../../../common/entity/attribute_class_names"; - import LocalizeMixin from "../../../mixins/localize-mixin"; /* diff --git a/src/dialogs/more-info/controls/more-info-group.js b/src/dialogs/more-info/controls/more-info-group.js index 81d2528b3c..28ae779d91 100644 --- a/src/dialogs/more-info/controls/more-info-group.js +++ b/src/dialogs/more-info/controls/more-info-group.js @@ -1,11 +1,10 @@ import { dom } from "@polymer/polymer/lib/legacy/polymer.dom"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../state-summary/state-card-content"; - -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; import dynamicContentUpdater from "../../../common/dom/dynamic_content_updater"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import "../../../state-summary/state-card-content"; class MoreInfoGroup extends PolymerElement { static get template() { diff --git a/src/dialogs/more-info/controls/more-info-history_graph.js b/src/dialogs/more-info/controls/more-info-history_graph.js index 160261e1ba..febd00b62f 100644 --- a/src/dialogs/more-info/controls/more-info-history_graph.js +++ b/src/dialogs/more-info/controls/more-info-history_graph.js @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../cards/ha-history_graph-card"; import "../../../components/ha-attributes"; diff --git a/src/dialogs/more-info/controls/more-info-input_datetime.js b/src/dialogs/more-info/controls/more-info-input_datetime.js index c96c526f53..7c15971929 100644 --- a/src/dialogs/more-info/controls/more-info-input_datetime.js +++ b/src/dialogs/more-info/controls/more-info-input_datetime.js @@ -1,14 +1,13 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "@vaadin/vaadin-date-picker/theme/material/vaadin-date-picker"; - +import { attributeClassNames } from "../../../common/entity/attribute_class_names"; import "../../../components/ha-relative-time"; import "../../../components/paper-time-input"; -import { attributeClassNames } from "../../../common/entity/attribute_class_names"; - class DatetimeInput extends PolymerElement { static get template() { return html` diff --git a/src/dialogs/more-info/controls/more-info-light.js b/src/dialogs/more-info/controls/more-info-light.js index a280e38eef..cc7590c197 100644 --- a/src/dialogs/more-info/controls/more-info-light.js +++ b/src/dialogs/more-info/controls/more-info-light.js @@ -1,16 +1,14 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { featureClassNames } from "../../../common/entity/feature_class_names"; import "../../../components/ha-attributes"; import "../../../components/ha-color-picker"; import "../../../components/ha-labeled-slider"; import "../../../components/ha-paper-dropdown-menu"; - -import { featureClassNames } from "../../../common/entity/feature_class_names"; import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; diff --git a/src/dialogs/more-info/controls/more-info-lock.js b/src/dialogs/more-info/controls/more-info-lock.js index f5577eb06c..7c7fe6f3c7 100644 --- a/src/dialogs/more-info/controls/more-info-lock.js +++ b/src/dialogs/more-info/controls/more-info-lock.js @@ -1,10 +1,9 @@ import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../components/ha-attributes"; - import LocalizeMixin from "../../../mixins/localize-mixin"; /* diff --git a/src/dialogs/more-info/controls/more-info-media_player.js b/src/dialogs/more-info/controls/more-info-media_player.js index c914e84ea7..0dbf26764f 100644 --- a/src/dialogs/more-info/controls/more-info-media_player.js +++ b/src/dialogs/more-info/controls/more-info-media_player.js @@ -4,17 +4,16 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../components/ha-paper-slider"; -import "../../../components/ha-paper-dropdown-menu"; -import HassMediaPlayerEntity from "../../../util/hass-media-player-model"; - -import { attributeClassNames } from "../../../common/entity/attribute_class_names"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { attributeClassNames } from "../../../common/entity/attribute_class_names"; +import { computeRTLDirection } from "../../../common/util/compute_rtl"; +import "../../../components/ha-paper-dropdown-menu"; +import "../../../components/ha-paper-slider"; import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; -import { computeRTLDirection } from "../../../common/util/compute_rtl"; +import HassMediaPlayerEntity from "../../../util/hass-media-player-model"; /* * @appliesMixin LocalizeMixin diff --git a/src/dialogs/more-info/controls/more-info-person.ts b/src/dialogs/more-info/controls/more-info-person.ts index 153a0c797e..746361146c 100644 --- a/src/dialogs/more-info/controls/more-info-person.ts +++ b/src/dialogs/more-info/controls/more-info-person.ts @@ -1,25 +1,24 @@ -import { - LitElement, - html, - TemplateResult, - CSSResult, - css, - property, - customElement, -} from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; import "@material/mwc-button"; - -import "../../../components/map/ha-map"; - -import { HomeAssistant } from "../../../types"; -import { showZoneEditor } from "../../../data/zone"; -import { fireEvent } from "../../../common/dom/fire_event"; +import { HassEntity } from "home-assistant-js-websocket"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import memoizeOne from "memoize-one"; +import { fireEvent } from "../../../common/dom/fire_event"; +import "../../../components/map/ha-map"; +import { showZoneEditor } from "../../../data/zone"; +import { HomeAssistant } from "../../../types"; @customElement("more-info-person") class MoreInfoPerson extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; private _entityArray = memoizeOne((entityId: string) => [entityId]); diff --git a/src/dialogs/more-info/controls/more-info-script.ts b/src/dialogs/more-info/controls/more-info-script.ts index 3c8146795f..83d7ccd31e 100644 --- a/src/dialogs/more-info/controls/more-info-script.ts +++ b/src/dialogs/more-info/controls/more-info-script.ts @@ -1,19 +1,18 @@ -import { - LitElement, - html, - TemplateResult, - property, - customElement, -} from "lit-element"; import { HassEntity } from "home-assistant-js-websocket"; - -import { HomeAssistant } from "../../../types"; - +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/ha-relative-time"; +import { HomeAssistant } from "../../../types"; @customElement("more-info-script") class MoreInfoScript extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; protected render(): TemplateResult { diff --git a/src/dialogs/more-info/controls/more-info-sun.ts b/src/dialogs/more-info/controls/more-info-sun.ts index 4cf93d0ed5..10b832f260 100644 --- a/src/dialogs/more-info/controls/more-info-sun.ts +++ b/src/dialogs/more-info/controls/more-info-sun.ts @@ -1,22 +1,21 @@ -import { - property, - LitElement, - TemplateResult, - html, - customElement, - CSSResult, - css, -} from "lit-element"; import { HassEntity } from "home-assistant-js-websocket"; - -import "../../../components/ha-relative-time"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { formatTime } from "../../../common/datetime/format_time"; +import "../../../components/ha-relative-time"; import { HomeAssistant } from "../../../types"; @customElement("more-info-sun") class MoreInfoSun extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; protected render(): TemplateResult { diff --git a/src/dialogs/more-info/controls/more-info-timer.ts b/src/dialogs/more-info/controls/more-info-timer.ts index 414f26ed8b..cbfa31c883 100644 --- a/src/dialogs/more-info/controls/more-info-timer.ts +++ b/src/dialogs/more-info/controls/more-info-timer.ts @@ -1,17 +1,15 @@ -import { - LitElement, - html, - TemplateResult, - CSSResult, - css, - property, - PropertyValues, - customElement, -} from "lit-element"; import "@material/mwc-button"; - -import { HomeAssistant } from "../../../types"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { TimerEntity } from "../../../data/timer"; +import { HomeAssistant } from "../../../types"; @customElement("more-info-timer") class MoreInfoTimer extends LitElement { @@ -70,13 +68,6 @@ class MoreInfoTimer extends LitElement { `; } - protected updated(changedProps: PropertyValues) { - super.updated(changedProps); - if (!changedProps.has("stateObj") || !this.stateObj) { - return; - } - } - private _handleActionClick(e: MouseEvent): void { const action = (e.currentTarget as any).action; this.hass.callService("timer", action, { diff --git a/src/dialogs/more-info/controls/more-info-vacuum.ts b/src/dialogs/more-info/controls/more-info-vacuum.ts index ce1c5a30ae..bd2bf1bc68 100644 --- a/src/dialogs/more-info/controls/more-info-vacuum.ts +++ b/src/dialogs/more-info/controls/more-info-vacuum.ts @@ -2,7 +2,6 @@ import "@polymer/iron-icon/iron-icon"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, @@ -12,13 +11,11 @@ import { property, TemplateResult, } from "lit-element"; - import { supportsFeature } from "../../../common/entity/supports-feature"; -import { HomeAssistant } from "../../../types"; - -import "../../../components/ha-paper-dropdown-menu"; import "../../../components/ha-attributes"; +import "../../../components/ha-paper-dropdown-menu"; import { + VacuumEntity, VACUUM_SUPPORT_BATTERY, VACUUM_SUPPORT_CLEAN_SPOT, VACUUM_SUPPORT_FAN_SPEED, @@ -28,8 +25,8 @@ import { VACUUM_SUPPORT_START, VACUUM_SUPPORT_STATUS, VACUUM_SUPPORT_STOP, - VacuumEntity, } from "../../../data/vacuum"; +import { HomeAssistant } from "../../../types"; interface VacuumCommand { translationKey: string; diff --git a/src/dialogs/more-info/controls/more-info-water_heater.js b/src/dialogs/more-info/controls/more-info-water_heater.js index 8438e59a3b..ce1c5e2994 100644 --- a/src/dialogs/more-info/controls/more-info-water_heater.js +++ b/src/dialogs/more-info/controls/more-info-water_heater.js @@ -4,17 +4,15 @@ import "@polymer/paper-listbox/paper-listbox"; import { timeOut } from "@polymer/polymer/lib/utils/async"; import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../components/ha-water_heater-control"; -import "../../../components/ha-paper-slider"; -import "../../../components/ha-paper-dropdown-menu"; -import "../../../components/ha-switch"; - -import { supportsFeature } from "../../../common/entity/supports-feature"; -import { EventsMixin } from "../../../mixins/events-mixin"; - import { featureClassNames } from "../../../common/entity/feature_class_names"; +import { supportsFeature } from "../../../common/entity/supports-feature"; +import "../../../components/ha-paper-dropdown-menu"; +import "../../../components/ha-paper-slider"; +import "../../../components/ha-switch"; +import "../../../components/ha-water_heater-control"; +import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; /* diff --git a/src/dialogs/more-info/controls/more-info-weather.ts b/src/dialogs/more-info/controls/more-info-weather.ts index 7806329424..a9e6c7ffa0 100644 --- a/src/dialogs/more-info/controls/more-info-weather.ts +++ b/src/dialogs/more-info/controls/more-info-weather.ts @@ -1,15 +1,14 @@ import "@polymer/iron-icon/iron-icon"; +import { HassEntity } from "home-assistant-js-websocket"; import { + css, + CSSResult, + customElement, LitElement, property, - CSSResult, - css, - customElement, PropertyValues, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; -import { TemplateResult, html } from "lit-html"; - +import { html, TemplateResult } from "lit-html"; import { HomeAssistant } from "../../../types"; const cardinalDirections = [ @@ -53,6 +52,7 @@ const weatherIcons = { @customElement("more-info-weather") class MoreInfoWeather extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj?: HassEntity; protected shouldUpdate(changedProps: PropertyValues): boolean { @@ -264,7 +264,7 @@ class MoreInfoWeather extends LitElement { private windBearingToText(degree: string): string { const degreenum = parseInt(degree, 10); if (isFinite(degreenum)) { - // tslint:disable-next-line: no-bitwise + // eslint-disable-next-line no-bitwise return cardinalDirections[(((degreenum + 11.25) / 22.5) | 0) % 16]; } return degree; @@ -273,9 +273,11 @@ class MoreInfoWeather extends LitElement { private getWind(speed: string, bearing: string) { if (bearing != null) { const cardinalDirection = this.windBearingToText(bearing); - return `${speed} ${this.getUnit("length")}/h (${this.hass.localize( - `ui.card.weather.cardinal_direction.${cardinalDirection.toLowerCase()}` - ) || cardinalDirection})`; + return `${speed} ${this.getUnit("length")}/h (${ + this.hass.localize( + `ui.card.weather.cardinal_direction.${cardinalDirection.toLowerCase()}` + ) || cardinalDirection + })`; } return `${speed} ${this.getUnit("length")}/h`; } diff --git a/src/dialogs/more-info/more-info-controls.js b/src/dialogs/more-info/more-info-controls.js index 0da3f5ac7c..aa98acb4a2 100644 --- a/src/dialogs/more-info/more-info-controls.js +++ b/src/dialogs/more-info/more-info-controls.js @@ -1,28 +1,26 @@ +import "@material/mwc-button"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-icon-button/paper-icon-button"; -import "@material/mwc-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../components/state-history-charts"; -import "../../data/ha-state-history-data"; -import "../../resources/ha-style"; -import "../../state-summary/state-card-content"; - -import "./controls/more-info-content"; - -import { navigate } from "../../common/navigate"; -import { computeStateName } from "../../common/entity/compute_state_name"; -import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { DOMAINS_MORE_INFO_NO_HISTORY } from "../../common/const"; +import { computeStateDomain } from "../../common/entity/compute_state_domain"; +import { computeStateName } from "../../common/entity/compute_state_name"; +import { navigate } from "../../common/navigate"; +import { computeRTL } from "../../common/util/compute_rtl"; +import "../../components/state-history-charts"; +import { removeEntityRegistryEntry } from "../../data/entity_registry"; +import "../../data/ha-state-history-data"; import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; -import { computeRTL } from "../../common/util/compute_rtl"; -import { removeEntityRegistryEntry } from "../../data/entity_registry"; -import { showConfirmationDialog } from "../generic/show-dialog-box"; import { showEntityEditorDialog } from "../../panels/config/entities/show-dialog-entity-editor"; +import "../../resources/ha-style"; +import "../../state-summary/state-card-content"; +import { showConfirmationDialog } from "../generic/show-dialog-box"; +import "./controls/more-info-content"; const DOMAINS_NO_INFO = ["camera", "configurator", "history_graph"]; const EDITABLE_DOMAINS_WITH_ID = ["scene", "automation"]; diff --git a/src/dialogs/notifications/configurator-notification-item.ts b/src/dialogs/notifications/configurator-notification-item.ts index 6a65ad0b8e..0c556dfc68 100644 --- a/src/dialogs/notifications/configurator-notification-item.ts +++ b/src/dialogs/notifications/configurator-notification-item.ts @@ -1,17 +1,15 @@ +import "@material/mwc-button"; import { + customElement, html, LitElement, - TemplateResult, property, - customElement, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - -import "./notification-item-template"; - -import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; import { PersitentNotificationEntity } from "../../data/persistent_notification"; +import { HomeAssistant } from "../../types"; +import "./notification-item-template"; @customElement("configurator-notification-item") export class HuiConfiguratorNotificationItem extends LitElement { diff --git a/src/dialogs/notifications/notification-drawer.js b/src/dialogs/notifications/notification-drawer.js index 3486556aca..2dc35ec70c 100644 --- a/src/dialogs/notifications/notification-drawer.js +++ b/src/dialogs/notifications/notification-drawer.js @@ -1,18 +1,17 @@ -import "@polymer/app-layout/app-drawer/app-drawer"; import "@material/mwc-button"; -import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/app-layout/app-drawer/app-drawer"; import "@polymer/app-layout/app-toolbar/app-toolbar"; - +import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./notification-item"; +import { computeDomain } from "../../common/entity/compute_domain"; import "../../components/ha-paper-icon-button-prev"; - +import { subscribeNotifications } from "../../data/persistent_notification"; import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; -import { subscribeNotifications } from "../../data/persistent_notification"; -import { computeDomain } from "../../common/entity/compute_domain"; +import "./notification-item"; + /* * @appliesMixin EventsMixin * @appliesMixin LocalizeMixin diff --git a/src/dialogs/notifications/notification-item-template.ts b/src/dialogs/notifications/notification-item-template.ts index c5b6f65802..bde508416d 100644 --- a/src/dialogs/notifications/notification-item-template.ts +++ b/src/dialogs/notifications/notification-item-template.ts @@ -1,12 +1,11 @@ import { + css, + CSSResult, + customElement, html, LitElement, TemplateResult, - customElement, - css, - CSSResult, } from "lit-element"; - import "../../components/ha-card"; @customElement("notification-item-template") diff --git a/src/dialogs/notifications/notification-item.ts b/src/dialogs/notifications/notification-item.ts index 12c96da45e..f540571965 100644 --- a/src/dialogs/notifications/notification-item.ts +++ b/src/dialogs/notifications/notification-item.ts @@ -1,19 +1,17 @@ +import { HassEntity } from "home-assistant-js-websocket"; import { + customElement, + html, LitElement, property, - customElement, PropertyValues, TemplateResult, - html, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; - +import { PersistentNotification } from "../../data/persistent_notification"; +import { HomeAssistant } from "../../types"; import "./configurator-notification-item"; import "./persistent-notification-item"; -import { HomeAssistant } from "../../types"; -import { PersistentNotification } from "../../data/persistent_notification"; - @customElement("notification-item") export class HuiNotificationItem extends LitElement { @property() public hass?: HomeAssistant; diff --git a/src/dialogs/notifications/persistent-notification-item.ts b/src/dialogs/notifications/persistent-notification-item.ts index 6689db8283..08f7720841 100644 --- a/src/dialogs/notifications/persistent-notification-item.ts +++ b/src/dialogs/notifications/persistent-notification-item.ts @@ -1,21 +1,19 @@ -import { - html, - LitElement, - TemplateResult, - property, - customElement, - css, - CSSResult, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-tooltip/paper-tooltip"; - -import "../../components/ha-relative-time"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../components/ha-markdown"; -import "./notification-item-template"; - -import { HomeAssistant } from "../../types"; +import "../../components/ha-relative-time"; import { PersistentNotification } from "../../data/persistent_notification"; +import { HomeAssistant } from "../../types"; +import "./notification-item-template"; @customElement("persistent-notification-item") export class HuiPersistentNotificationItem extends LitElement { diff --git a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts index d3813d6409..5468c66ac5 100644 --- a/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts +++ b/src/dialogs/voice-command-dialog/ha-voice-command-dialog.ts @@ -1,34 +1,33 @@ import "@polymer/iron-icon/iron-icon"; -import "@polymer/paper-icon-button/paper-icon-button"; -import "../../components/dialog/ha-paper-dialog"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; - +import type { PaperDialogScrollableElement } from "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { - LitElement, - html, - property, - CSSResult, css, + CSSResult, customElement, - query, + html, + LitElement, + property, PropertyValues, + query, TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../types"; +import { classMap } from "lit-html/directives/class-map"; import { fireEvent } from "../../common/dom/fire_event"; import { SpeechRecognition } from "../../common/dom/speech-recognition"; -import { - processText, - getAgentInfo, - setConversationOnboarding, - AgentInfo, -} from "../../data/conversation"; -import { classMap } from "lit-html/directives/class-map"; -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { haStyleDialog } from "../../resources/styles"; -// tslint:disable-next-line -import { PaperDialogScrollableElement } from "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { uid } from "../../common/util/uid"; +import "../../components/dialog/ha-paper-dialog"; +import { + AgentInfo, + getAgentInfo, + processText, + setConversationOnboarding, +} from "../../data/conversation"; +import { haStyleDialog } from "../../resources/styles"; +import type { HomeAssistant } from "../../types"; interface Message { who: string; @@ -44,17 +43,24 @@ interface Results { @customElement("ha-voice-command-dialog") export class HaVoiceCommandDialog extends LitElement { @property() public hass!: HomeAssistant; + @property() public results: Results | null = null; + @property() private _conversation: Message[] = [ { who: "hass", text: "", }, ]; + @property() private _opened = false; + @property() private _agentInfo?: AgentInfo; + @query("#messages") private messages!: PaperDialogScrollableElement; + private recognition!: SpeechRecognition; + private _conversationId?: string; public async showDialog(): Promise { @@ -244,6 +250,7 @@ export class HaVoiceCommandDialog extends LitElement { }; this.recognition.onerror = (event) => { this.recognition!.abort(); + // @ts-ignore if (event.error !== "aborted") { const text = this.results && this.results.transcript diff --git a/src/dialogs/zha-device-info-dialog/dialog-zha-device-info.ts b/src/dialogs/zha-device-info-dialog/dialog-zha-device-info.ts index 25efc62a52..d61c9a9102 100644 --- a/src/dialogs/zha-device-info-dialog/dialog-zha-device-info.ts +++ b/src/dialogs/zha-device-info-dialog/dialog-zha-device-info.ts @@ -1,30 +1,30 @@ +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { - LitElement, - html, css, CSSResult, - TemplateResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "../../components/dialog/ha-paper-dialog"; -// Not duplicate, is for typing -// tslint:disable-next-line -import { HaPaperDialog } from "../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../components/dialog/ha-paper-dialog"; +import { fetchZHADevice, ZHADevice } from "../../data/zha"; import "../../panels/config/zha/zha-device-card"; - -import { PolymerChangedEvent } from "../../polymer-types"; +import type { PolymerChangedEvent } from "../../polymer-types"; import { haStyleDialog } from "../../resources/styles"; -import { HomeAssistant } from "../../types"; -import { ZHADeviceInfoDialogParams } from "./show-dialog-zha-device-info"; -import { ZHADevice, fetchZHADevice } from "../../data/zha"; +import type { HomeAssistant } from "../../types"; +import type { ZHADeviceInfoDialogParams } from "./show-dialog-zha-device-info"; @customElement("dialog-zha-device-info") class DialogZHADeviceInfo extends LitElement { @property() public hass!: HomeAssistant; + @property() private _params?: ZHADeviceInfoDialogParams; + @property() private _error?: string; + @property() private _device?: ZHADevice; public async showDialog(params: ZHADeviceInfoDialogParams): Promise { @@ -46,9 +46,7 @@ class DialogZHADeviceInfo extends LitElement { @opened-changed=${this._openedChanged} > ${this._error - ? html` -
    ${this._error}
    - ` + ? html`
    ${this._error}
    ` : html` diff --git a/src/entrypoints/compatibility.ts b/src/entrypoints/compatibility.ts index 2a005ddbd3..e97a4ebc4a 100644 --- a/src/entrypoints/compatibility.ts +++ b/src/entrypoints/compatibility.ts @@ -1,7 +1,7 @@ -import "mdn-polyfills/Array.prototype.includes"; -import "unfetch/polyfill"; -import "regenerator-runtime/runtime"; import objAssign from "es6-object-assign"; +import "mdn-polyfills/Array.prototype.includes"; +import "regenerator-runtime/runtime"; +import "unfetch/polyfill"; objAssign.polyfill(); @@ -11,22 +11,21 @@ if (Object.values === undefined) { }; } -/* tslint:disable */ +/* eslint-disable */ // https://github.com/uxitten/polyfill/blob/master/string.polyfill.js // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart if (!String.prototype.padStart) { String.prototype.padStart = function padStart(targetLength, padString) { - targetLength = targetLength >> 0; //truncate if number, or convert non-number to 0; + targetLength >>= 0; // truncate if number, or convert non-number to 0; padString = String(typeof padString !== "undefined" ? padString : " "); if (this.length >= targetLength) { return String(this); - } else { - targetLength = targetLength - this.length; - if (targetLength > padString.length) { - padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed - } - return padString.slice(0, targetLength) + String(this); } + targetLength -= this.length; + if (targetLength > padString.length) { + padString += padString.repeat(targetLength / padString.length); // append to original to ensure we are longer than needed + } + return padString.slice(0, targetLength) + String(this); }; } -/* tslint:enable */ +/* eslint-enable */ diff --git a/src/entrypoints/core.ts b/src/entrypoints/core.ts index b45eb5fb48..9e738b8042 100644 --- a/src/entrypoints/core.ts +++ b/src/entrypoints/core.ts @@ -1,27 +1,27 @@ import { - getAuth, + Auth, + Connection, createConnection, + ERR_INVALID_AUTH, + getAuth, subscribeConfig, subscribeEntities, subscribeServices, - ERR_INVALID_AUTH, - Auth, - Connection, } from "home-assistant-js-websocket"; - import { loadTokens, saveTokens } from "../common/auth/token_storage"; -import { isExternal } from "../data/external"; -import { subscribePanels } from "../data/ws-panels"; -import { subscribeThemes } from "../data/ws-themes"; -import { subscribeUser } from "../data/ws-user"; -import { HomeAssistant } from "../types"; import { hassUrl } from "../data/auth"; +import { isExternal } from "../data/external"; import { subscribeFrontendUserData } from "../data/frontend"; import { fetchConfig, fetchResources, WindowWithLovelaceProm, } from "../data/lovelace"; +import { subscribePanels } from "../data/ws-panels"; +import { subscribeThemes } from "../data/ws-themes"; +import { subscribeUser } from "../data/ws-user"; +import type { ExternalAuth } from "../external_app/external_auth"; +import { HomeAssistant } from "../types"; declare global { interface Window { @@ -76,7 +76,9 @@ if (__DEV__) { delete Document.prototype.adoptedStyleSheets; performance.mark("hass-start"); } -window.hassConnection = authProm().then(connProm); +window.hassConnection = (authProm() as Promise).then( + connProm +); // Start fetching some of the data that we will need. window.hassConnection.then(({ conn }) => { diff --git a/src/entrypoints/custom-panel.ts b/src/entrypoints/custom-panel.ts index 9e14dc52c1..6ba448c0b4 100644 --- a/src/entrypoints/custom-panel.ts +++ b/src/entrypoints/custom-panel.ts @@ -1,11 +1,11 @@ -import { loadJS } from "../common/dom/load_resource"; -import { loadCustomPanel } from "../util/custom-panel/load-custom-panel"; -import { createCustomPanelElement } from "../util/custom-panel/create-custom-panel-element"; -import { setCustomPanelProperties } from "../util/custom-panel/set-custom-panel-properties"; -import { fireEvent } from "../common/dom/fire_event"; import { PolymerElement } from "@polymer/polymer"; -import { CustomPanelInfo } from "../data/panel_custom"; +import { fireEvent } from "../common/dom/fire_event"; +import { loadJS } from "../common/dom/load_resource"; import { webComponentsSupported } from "../common/feature-detect/support-web-components"; +import { CustomPanelInfo } from "../data/panel_custom"; +import { createCustomPanelElement } from "../util/custom-panel/create-custom-panel-element"; +import { loadCustomPanel } from "../util/custom-panel/load-custom-panel"; +import { setCustomPanelProperties } from "../util/custom-panel/set-custom-panel-properties"; declare global { interface Window { @@ -82,7 +82,7 @@ function initialize(panel: CustomPanelInfo, properties: {}) { document.body.appendChild(panelEl!); }, (err) => { - // tslint:disable-next-line + // eslint-disable-next-line console.error(err, panel); alert(`Unable to load the panel source: ${err}.`); } diff --git a/src/entrypoints/onboarding.ts b/src/entrypoints/onboarding.ts index 577a58c1ac..3be70289c8 100644 --- a/src/entrypoints/onboarding.ts +++ b/src/entrypoints/onboarding.ts @@ -1,7 +1,7 @@ import "../components/ha-iconset-svg"; +import "../onboarding/ha-onboarding"; import "../resources/ha-style"; import "../resources/roboto"; -import "../onboarding/ha-onboarding"; declare global { interface Window { diff --git a/src/entrypoints/service-worker-hass.js b/src/entrypoints/service-worker-hass.js index 45f37aa92d..1cd0038149 100644 --- a/src/entrypoints/service-worker-hass.js +++ b/src/entrypoints/service-worker-hass.js @@ -72,7 +72,7 @@ function initPushNotifications() { ); } - self.addEventListener("push", function(event) { + self.addEventListener("push", function (event) { var data; if (event.data) { data = event.data.json(); @@ -87,7 +87,7 @@ function initPushNotifications() { event.waitUntil( self.registration .showNotification(data.title, data) - .then(function(/* notification */) { + .then(function (/* notification */) { firePushCallback( { type: "received", @@ -101,7 +101,7 @@ function initPushNotifications() { } }); - self.addEventListener("notificationclick", function(event) { + self.addEventListener("notificationclick", function (event) { var url; notificationEventCallback("clicked", event); @@ -125,7 +125,7 @@ function initPushNotifications() { .matchAll({ type: "window", }) - .then(function(windowClients) { + .then(function (windowClients) { var i; var client; for (i = 0; i < windowClients.length; i++) { @@ -142,7 +142,7 @@ function initPushNotifications() { ); }); - self.addEventListener("notificationclose", function(event) { + self.addEventListener("notificationclose", function (event) { notificationEventCallback("closed", event); }); } diff --git a/src/external_app/external_auth.ts b/src/external_app/external_auth.ts index 5eb2ff4303..c3c6f0fe42 100644 --- a/src/external_app/external_auth.ts +++ b/src/external_app/external_auth.ts @@ -49,7 +49,7 @@ if (!window.externalApp && !window.webkit) { ); } -class ExternalAuth extends Auth { +export class ExternalAuth extends Auth { public external?: ExternalMessaging; constructor(hassUrl: string) { diff --git a/src/external_app/external_messaging.ts b/src/external_app/external_messaging.ts index 7d2cbc1b34..58f19ce7db 100644 --- a/src/external_app/external_messaging.ts +++ b/src/external_app/external_messaging.ts @@ -39,7 +39,9 @@ type ExternalMessage = ExternalMessageResult | ExternalMessageResultError; export class ExternalMessaging { public commands: { [msgId: number]: CommandInFlight } = {}; + public cache: { [key: string]: any } = {}; + public msgId = 0; public attach() { @@ -76,14 +78,14 @@ export class ExternalMessaging { public receiveMessage(msg: ExternalMessage) { if (__DEV__) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.log("Receiving message from external app", msg); } const pendingCmd = this.commands[msg.id]; if (!pendingCmd) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.warn(`Received unknown msg ID`, msg.id); return; } @@ -99,7 +101,7 @@ export class ExternalMessaging { protected _sendExternal(msg: InternalMessage) { if (__DEV__) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.log("Sending message to external app", msg); } if (window.externalApp) { diff --git a/src/fake_data/entity.ts b/src/fake_data/entity.ts index a386355eb6..56d1240c74 100644 --- a/src/fake_data/entity.ts +++ b/src/fake_data/entity.ts @@ -1,23 +1,30 @@ +/* eslint-disable max-classes-per-file */ import { - HassEntityAttributeBase, HassEntity, + HassEntityAttributeBase, } from "home-assistant-js-websocket"; -/* tslint:disable:max-classes-per-file */ - const now = () => new Date().toISOString(); const randomTime = () => new Date(new Date().getTime() - Math.random() * 80 * 60 * 1000).toISOString(); export class Entity { public domain: string; + public objectId: string; + public entityId: string; + public lastChanged: string; + public lastUpdated: string; + public state: string; + public baseAttributes: HassEntityAttributeBase & { [key: string]: any }; + public attributes: HassEntityAttributeBase & { [key: string]: any }; + public hass?: any; constructor(domain, objectId, state, baseAttributes) { @@ -33,7 +40,7 @@ export class Entity { } public async handleService(domain, service, data: { [key: string]: any }) { - // tslint:disable-next-line + // eslint-disable-next-line console.log( `Unmocked service for ${this.entityId}: ${domain}/${service}`, data @@ -47,7 +54,7 @@ export class Entity { state === this.state ? this.lastChanged : this.lastUpdated; this.attributes = { ...this.baseAttributes, ...attributes }; - // tslint:disable-next-line + // eslint-disable-next-line console.log("update", this.entityId, this); this.hass.updateStates({ @@ -73,7 +80,7 @@ class LightEntity extends Entity { } if (service === "turn_on") { - // tslint:disable-next-line + // eslint-disable-next-line let { brightness, hs_color, brightness_pct } = data; brightness = (255 * brightness_pct) / 100; this.update("on", { ...this.attributes, brightness, hs_color }); diff --git a/src/fake_data/provide_hass.ts b/src/fake_data/provide_hass.ts index 56b33b9b14..7fdec23d33 100644 --- a/src/fake_data/provide_hass.ts +++ b/src/fake_data/provide_hass.ts @@ -1,17 +1,17 @@ +import { HassEntities } from "home-assistant-js-websocket"; import { applyThemesOnElement, invalidateThemeCache, } from "../common/dom/apply_themes_on_element"; - -import { demoConfig } from "./demo_config"; -import { demoServices } from "./demo_services"; -import { demoPanels } from "./demo_panels"; -import { getEntity, Entity } from "./entity"; -import { HomeAssistant } from "../types"; -import { HassEntities } from "home-assistant-js-websocket"; -import { getLocalLanguage } from "../util/hass-translation"; -import { translationMetadata } from "../resources/translations-metadata"; +import { computeLocalize } from "../common/translations/localize"; import { DEFAULT_PANEL } from "../data/panel"; +import { translationMetadata } from "../resources/translations-metadata"; +import { HomeAssistant } from "../types"; +import { getLocalLanguage, getTranslation } from "../util/hass-translation"; +import { demoConfig } from "./demo_config"; +import { demoPanels } from "./demo_panels"; +import { demoServices } from "./demo_services"; +import { Entity, getEntity } from "./entity"; const ensureArray = (val: T | T[]): T[] => Array.isArray(val) ? val : [val]; @@ -28,6 +28,7 @@ export interface MockHomeAssistant extends HomeAssistant { updateHass(obj: Partial); updateStates(newStates: HassEntities); addEntities(entites: Entity | Entity[], replace?: boolean); + updateTranslations(fragment: null | string, language?: string); mockWS( type: string, callback: (msg: any, onChange?: (response: any) => void) => any @@ -52,13 +53,29 @@ export const provideHass = ( } = {}; const entities = {}; + function updateTranslations(fragment: null | string, language?: string) { + const lang = language || getLocalLanguage(); + getTranslation(fragment, lang).then((translation) => { + const resources = { + [lang]: { + ...(hass().resources && hass().resources[lang]), + ...translation.data, + }, + }; + hass().updateHass({ + resources, + localize: computeLocalize(elements[0], lang, resources), + }); + }); + } + function updateStates(newStates: HassEntities) { hass().updateHass({ states: { ...hass().states, ...newStates }, }); } - function addEntities(newEntities, replace: boolean = false) { + function addEntities(newEntities, replace = false) { const states = {}; ensureArray(newEntities).forEach((ent) => { ent.hass = hass(); @@ -114,7 +131,7 @@ export const provideHass = ( if (callback) { callback(msg); } else { - // tslint:disable-next-line + // eslint-disable-next-line console.error(`Unknown WS command: ${msg.type}`); } }, @@ -193,7 +210,7 @@ export const provideHass = ( ) ); } else { - // tslint:disable-next-line + // eslint-disable-next-line console.log("unmocked callService", domain, service, data); } }, @@ -220,6 +237,7 @@ export const provideHass = ( }); }, updateStates, + updateTranslations, addEntities, mockWS(type, callback) { wsCommands[type] = callback; diff --git a/src/html/authorize.html.template b/src/html/authorize.html.template index 9b057978f9..719a014799 100644 --- a/src/html/authorize.html.template +++ b/src/html/authorize.html.template @@ -1,5 +1,5 @@ - + Home Assistant diff --git a/src/html/index.html.template b/src/html/index.html.template index de55383946..befab71586 100644 --- a/src/html/index.html.template +++ b/src/html/index.html.template @@ -1,5 +1,5 @@ - + - + Home Assistant diff --git a/src/layouts/ha-init-page.ts b/src/layouts/ha-init-page.ts index 6d34ae4e14..7a36e41448 100644 --- a/src/layouts/ha-init-page.ts +++ b/src/layouts/ha-init-page.ts @@ -1,7 +1,6 @@ -import "@polymer/paper-spinner/paper-spinner-lite"; import "@material/mwc-button"; - -import { LitElement, html, CSSResult, css, property } from "lit-element"; +import "@polymer/paper-spinner/paper-spinner-lite"; +import { css, CSSResult, html, LitElement, property } from "lit-element"; import { removeInitSkeleton } from "../util/init-skeleton"; class HaInitPage extends LitElement { diff --git a/src/layouts/hass-error-screen.ts b/src/layouts/hass-error-screen.ts index ad2bd94455..f8838eff85 100644 --- a/src/layouts/hass-error-screen.ts +++ b/src/layouts/hass-error-screen.ts @@ -1,13 +1,13 @@ -import { - LitElement, - CSSResultArray, - css, - TemplateResult, - html, - property, - customElement, -} from "lit-element"; import "@material/mwc-button"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "./hass-subpage"; @customElement("hass-error-screen") diff --git a/src/layouts/hass-loading-screen.ts b/src/layouts/hass-loading-screen.ts index e0670fa4ee..dc04a89a6a 100644 --- a/src/layouts/hass-loading-screen.ts +++ b/src/layouts/hass-loading-screen.ts @@ -1,13 +1,13 @@ import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-spinner/paper-spinner-lite"; import { - LitElement, - TemplateResult, - html, - CSSResultArray, css, + CSSResultArray, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; import "../components/ha-menu-button"; import "../components/ha-paper-icon-button-arrow-prev"; @@ -17,7 +17,9 @@ import { HomeAssistant } from "../types"; @customElement("hass-loading-screen") class HassLoadingScreen extends LitElement { @property({ type: Boolean }) public rootnav? = false; + @property() public hass?: HomeAssistant; + @property() public narrow?: boolean; protected render(): TemplateResult { diff --git a/src/layouts/hass-router-page.ts b/src/layouts/hass-router-page.ts index ae66380088..dcb312bd26 100644 --- a/src/layouts/hass-router-page.ts +++ b/src/layouts/hass-router-page.ts @@ -1,9 +1,9 @@ -import { UpdatingElement, property, PropertyValues } from "lit-element"; +import { property, PropertyValues, UpdatingElement } from "lit-element"; +import memoizeOne from "memoize-one"; +import { navigate } from "../common/navigate"; +import { Route } from "../types"; import "./hass-error-screen"; import "./hass-loading-screen"; -import { Route } from "../types"; -import { navigate } from "../common/navigate"; -import memoizeOne from "memoize-one"; const extractPage = (path: string, defaultPage: string) => { if (path === "") { @@ -52,9 +52,13 @@ export class HassRouterPage extends UpdatingElement { protected routerOptions!: RouterOptions; protected _currentPage = ""; + private _currentLoadProm?: Promise; + private _cache = {}; + private _initialLoadDone = false; + private _computeTail = memoizeOne((route: Route) => { const dividerPos = route.path.indexOf("/", 1); return dividerPos === -1 @@ -145,7 +149,7 @@ export class HassRouterPage extends UpdatingElement { // Check when loading the page source failed. loadProm.catch((err) => { - // tslint:disable-next-line + // eslint-disable-next-line console.error("Error loading page", newPage, err); // Verify that we're still trying to show the same page. diff --git a/src/layouts/hass-subpage.ts b/src/layouts/hass-subpage.ts index 827828fedd..74b7d27421 100644 --- a/src/layouts/hass-subpage.ts +++ b/src/layouts/hass-subpage.ts @@ -1,22 +1,24 @@ import { + css, + CSSResult, + customElement, + html, LitElement, property, TemplateResult, - html, - customElement, - css, - CSSResult, } from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; import "../components/ha-menu-button"; import "../components/ha-paper-icon-button-arrow-prev"; -import { classMap } from "lit-html/directives/class-map"; @customElement("hass-subpage") class HassSubpage extends LitElement { @property() public header?: string; + @property({ type: Boolean }) public showBackButton = true; + @property({ type: Boolean }) public hassio = false; diff --git a/src/layouts/hass-tabs-subpage-data-table.ts b/src/layouts/hass-tabs-subpage-data-table.ts index 143b965cbf..d761ec0e6c 100644 --- a/src/layouts/hass-tabs-subpage-data-table.ts +++ b/src/layouts/hass-tabs-subpage-data-table.ts @@ -9,74 +9,86 @@ import { TemplateResult, } from "lit-element"; import "../components/data-table/ha-data-table"; -// tslint:disable-next-line -import { - HaDataTable, +import type { DataTableColumnContainer, DataTableRowData, + HaDataTable, } from "../components/data-table/ha-data-table"; +import type { HomeAssistant, Route } from "../types"; import "./hass-tabs-subpage"; -import { HomeAssistant, Route } from "../types"; -// tslint:disable-next-line -import { PageNavigation } from "./hass-tabs-subpage"; +import type { PageNavigation } from "./hass-tabs-subpage"; @customElement("hass-tabs-subpage-data-table") export class HaTabsSubpageDataTable extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property({ type: Boolean, reflect: true }) public narrow!: boolean; + /** * Object with the columns. * @type {Object} */ @property({ type: Object }) public columns: DataTableColumnContainer = {}; + /** * Data to show in the table. * @type {Array} */ @property({ type: Array }) public data: DataTableRowData[] = []; + /** * Should rows be selectable. * @type {Boolean} */ @property({ type: Boolean }) public selectable = false; + /** * Do we need to add padding for a fab. * @type {Boolean} */ @property({ type: Boolean }) public hasFab = false; + /** * Field with a unique id per entry in data. * @type {String} */ @property({ type: String }) public id = "id"; + /** * String to filter the data in the data table on. * @type {String} */ @property({ type: String }) public filter = ""; + /** * What path to use when the back button is pressed. * @type {String} * @attr back-path */ @property({ type: String, attribute: "back-path" }) public backPath?: string; + /** * Function to call when the back button is pressed. * @type {() => void} */ @property() public backCallback?: () => void; + /** * String to show when there are no records in the data table. * @type {String} */ @property({ type: String }) public noDataText?: string; + @property() public route!: Route; + /** * Array of tabs to show on the page. * @type {Array} */ @property() public tabs!: PageNavigation[]; + @query("ha-data-table") private _dataTable!: HaDataTable; public clearSelection() { @@ -135,9 +147,7 @@ export class HaTabsSubpageDataTable extends LitElement { >
    ` - : html` -
    - `} + : html`
    `} `; @@ -160,9 +170,11 @@ export class HaTabsSubpageDataTable extends LitElement { } .table-header { border-bottom: 1px solid rgba(var(--rgb-primary-text-color), 0.12); + padding: 0 16px; } .search-toolbar { color: var(--secondary-text-color); + padding: 0 16px; } search-input { position: relative; diff --git a/src/layouts/hass-tabs-subpage.ts b/src/layouts/hass-tabs-subpage.ts index 2198acf49b..cf2c593c22 100644 --- a/src/layouts/hass-tabs-subpage.ts +++ b/src/layouts/hass-tabs-subpage.ts @@ -1,21 +1,21 @@ +import "@material/mwc-ripple"; import { - LitElement, - property, - TemplateResult, - html, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; +import memoizeOne from "memoize-one"; +import { isComponentLoaded } from "../common/config/is_component_loaded"; +import { navigate } from "../common/navigate"; import "../components/ha-menu-button"; import "../components/ha-paper-icon-button-arrow-prev"; -import { classMap } from "lit-html/directives/class-map"; -import { Route, HomeAssistant } from "../types"; -import { navigate } from "../common/navigate"; -import "@material/mwc-ripple"; -import { isComponentLoaded } from "../common/config/is_component_loaded"; -import memoizeOne from "memoize-one"; +import { HomeAssistant, Route } from "../types"; export interface PageNavigation { path: string; @@ -31,12 +31,19 @@ export interface PageNavigation { @customElement("hass-tabs-subpage") class HassTabsSubpage extends LitElement { @property() public hass!: HomeAssistant; + @property({ type: String, attribute: "back-path" }) public backPath?: string; + @property() public backCallback?: () => void; + @property({ type: Boolean }) public hassio = false; + @property() public route!: Route; + @property() public tabs!: PageNavigation[]; + @property({ type: Boolean, reflect: true }) public narrow = false; + @property() private _activeTab?: PageNavigation; private _getTabs = memoizeOne( @@ -67,9 +74,7 @@ class HassTabsSubpage extends LitElement { .path=${page.path} > ${this.narrow - ? html` - - ` + ? html` ` : ""} ${!this.narrow || page === activeTab ? html` @@ -114,9 +119,7 @@ class HassTabsSubpage extends LitElement { @click=${this._backTapped} > ${this.narrow - ? html` -
    - ` + ? html`
    ` : ""} ${tabs.length > 1 || !this.narrow ? html` diff --git a/src/layouts/home-assistant-main.ts b/src/layouts/home-assistant-main.ts index 593e26f095..9959397dca 100644 --- a/src/layouts/home-assistant-main.ts +++ b/src/layouts/home-assistant-main.ts @@ -1,27 +1,23 @@ -import { - LitElement, - html, - TemplateResult, - CSSResult, - css, - PropertyValues, - property, -} from "lit-element"; import "@polymer/app-layout/app-drawer-layout/app-drawer-layout"; +import type { AppDrawerLayoutElement } from "@polymer/app-layout/app-drawer-layout/app-drawer-layout"; import "@polymer/app-layout/app-drawer/app-drawer"; -// Not a duplicate, it's for typing -// tslint:disable-next-line -import { AppDrawerElement } from "@polymer/app-layout/app-drawer/app-drawer"; +import type { AppDrawerElement } from "@polymer/app-layout/app-drawer/app-drawer"; import "@polymer/iron-media-query/iron-media-query"; - -import "./partial-panel-resolver"; -import { HomeAssistant, Route } from "../types"; +import { + css, + CSSResult, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../common/dom/fire_event"; -import { PolymerChangedEvent } from "../polymer-types"; -// tslint:disable-next-line: no-duplicate-imports -import { AppDrawerLayoutElement } from "@polymer/app-layout/app-drawer-layout/app-drawer-layout"; -import { showNotificationDrawer } from "../dialogs/notifications/show-notification-drawer"; import { toggleAttribute } from "../common/dom/toggle_attribute"; +import { showNotificationDrawer } from "../dialogs/notifications/show-notification-drawer"; +import type { PolymerChangedEvent } from "../polymer-types"; +import type { HomeAssistant, Route } from "../types"; +import "./partial-panel-resolver"; const NON_SWIPABLE_PANELS = ["map"]; @@ -35,7 +31,9 @@ declare global { class HomeAssistantMain extends LitElement { @property() public hass!: HomeAssistant; + @property() public route?: Route; + @property({ type: Boolean }) private narrow?: boolean; protected render(): TemplateResult { @@ -68,13 +66,13 @@ class HomeAssistantMain extends LitElement { .disableSwipe=${disableSwipe} .swipeOpen=${!disableSwipe} .persistent=${!this.narrow && - this.hass.dockedSidebar !== "always_hidden"} + this.hass.dockedSidebar !== "always_hidden"} > diff --git a/src/layouts/home-assistant.ts b/src/layouts/home-assistant.ts index c27bce6453..97b908001f 100644 --- a/src/layouts/home-assistant.ts +++ b/src/layouts/home-assistant.ts @@ -1,22 +1,27 @@ import "@polymer/app-route/app-location"; -import { html, PropertyValues, property } from "lit-element"; - -import "./home-assistant-main"; -import "./ha-init-page"; -import "../resources/ha-style"; -import "../resources/custom-card-support"; -import { registerServiceWorker } from "../util/register-service-worker"; - -import { Route, HomeAssistant } from "../types"; +import { html, property, PropertyValues } from "lit-element"; import { navigate } from "../common/navigate"; -import { HassElement } from "../state/hass-element"; import { getStorageDefaultPanelUrlPath } from "../data/panel"; +import "../resources/custom-card-support"; +import "../resources/ha-style"; +import { HassElement } from "../state/hass-element"; +import { HomeAssistant, Route } from "../types"; +import { + registerServiceWorker, + supportsServiceWorker, +} from "../util/register-service-worker"; +import "./ha-init-page"; +import "./home-assistant-main"; export class HomeAssistantAppEl extends HassElement { @property() private _route?: Route; + @property() private _error = false; + @property() private _panelUrl?: string; + private _haVersion?: string; + protected render() { const hass = this.hass; @@ -34,9 +39,7 @@ export class HomeAssistantAppEl extends HassElement { .route=${this._route} > ` - : html` - - `} + : html` `} `; } @@ -64,13 +67,32 @@ export class HomeAssistantAppEl extends HassElement { } } + protected hassReconnected() { + super.hassReconnected(); + + // If backend has been upgraded, make sure we update frontend + if (this.hass!.connection.haVersion !== this._haVersion) { + if (supportsServiceWorker()) { + navigator.serviceWorker.getRegistration().then((registration) => { + if (registration) { + registration.update(); + } else { + location.reload(true); + } + }); + } else { + location.reload(true); + } + } + } + protected async _initialize() { try { const { auth, conn } = await window.hassConnection; + this._haVersion = conn.haVersion; this.initializeHass(auth, conn); } catch (err) { this._error = true; - return; } } diff --git a/src/layouts/loading-screen.ts b/src/layouts/loading-screen.ts index 1533cb6244..060e97b147 100644 --- a/src/layouts/loading-screen.ts +++ b/src/layouts/loading-screen.ts @@ -1,19 +1,17 @@ import "@polymer/paper-spinner/paper-spinner-lite"; import { + css, + CSSResult, + customElement, + html, LitElement, TemplateResult, - html, - css, - customElement, - CSSResult, } from "lit-element"; @customElement("loading-screen") class LoadingScreen extends LitElement { protected render(): TemplateResult { - return html` - - `; + return html` `; } static get styles(): CSSResult { diff --git a/src/layouts/partial-panel-resolver.ts b/src/layouts/partial-panel-resolver.ts index 2f9c360939..89b018bb84 100644 --- a/src/layouts/partial-panel-resolver.ts +++ b/src/layouts/partial-panel-resolver.ts @@ -1,14 +1,13 @@ -import { property, customElement, PropertyValues } from "lit-element"; import { PolymerElement } from "@polymer/polymer"; - +import { customElement, property, PropertyValues } from "lit-element"; +import { deepEqual } from "../common/util/deep-equal"; import { HomeAssistant, Panels } from "../types"; +import { removeInitSkeleton } from "../util/init-skeleton"; import { HassRouterPage, - RouterOptions, RouteOptions, + RouterOptions, } from "./hass-router-page"; -import { removeInitSkeleton } from "../util/init-skeleton"; -import { deepEqual } from "../common/util/deep-equal"; const CACHE_URL_PATHS = ["lovelace", "developer-tools"]; const COMPONENTS = { @@ -82,6 +81,7 @@ const getRoutes = (panels: Panels): RouterOptions => { @customElement("partial-panel-resolver") class PartialPanelResolver extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow?: boolean; protected updated(changedProps: PropertyValues) { diff --git a/src/managers/notification-manager.ts b/src/managers/notification-manager.ts index c9322e480d..1607fadc20 100644 --- a/src/managers/notification-manager.ts +++ b/src/managers/notification-manager.ts @@ -1,19 +1,17 @@ +import "@material/mwc-button"; import { - LitElement, - query, - property, - TemplateResult, - html, css, CSSResult, + html, + LitElement, + property, + query, + TemplateResult, } from "lit-element"; import { computeRTL } from "../common/util/compute_rtl"; -import { HomeAssistant } from "../types"; -import "@material/mwc-button"; import "../components/ha-toast"; -// Typing -// tslint:disable-next-line: no-duplicate-imports -import { HaToast } from "../components/ha-toast"; +import type { HaToast } from "../components/ha-toast"; +import type { HomeAssistant } from "../types"; export interface ShowToastParams { message: string; @@ -31,7 +29,8 @@ class NotificationManager extends LitElement { @property() public hass!: HomeAssistant; @property() private _action?: ToastActionParams; - @property() private _noCancelOnOutsideClick: boolean = false; + + @property() private _noCancelOnOutsideClick = false; @query("ha-toast") private _toast!: HaToast; diff --git a/src/mixins/dialog-mixin.js b/src/mixins/dialog-mixin.js index 9d54050f56..cc8103935a 100644 --- a/src/mixins/dialog-mixin.js +++ b/src/mixins/dialog-mixin.js @@ -1,6 +1,6 @@ -import { dedupingMixin } from "@polymer/polymer/lib/utils/mixin"; import { PaperDialogBehavior } from "@polymer/paper-dialog-behavior/paper-dialog-behavior"; import { mixinBehaviors } from "@polymer/polymer/lib/legacy/class"; +import { dedupingMixin } from "@polymer/polymer/lib/utils/mixin"; import { EventsMixin } from "./events-mixin"; /** * @polymerMixin diff --git a/src/mixins/events-mixin.js b/src/mixins/events-mixin.js index d9f1c28fe3..a380e2cedd 100644 --- a/src/mixins/events-mixin.js +++ b/src/mixins/events-mixin.js @@ -1,5 +1,4 @@ import { dedupingMixin } from "@polymer/polymer/lib/utils/mixin"; - import { fireEvent } from "../common/dom/fire_event"; // Polymer legacy event helpers used courtesy of the Polymer project. diff --git a/src/mixins/lit-localize-lite-mixin.ts b/src/mixins/lit-localize-lite-mixin.ts index c99d32c5a8..a43ce610a1 100644 --- a/src/mixins/lit-localize-lite-mixin.ts +++ b/src/mixins/lit-localize-lite-mixin.ts @@ -1,7 +1,7 @@ -import { LitElement, PropertyValues, property } from "lit-element"; -import { getLocalLanguage, getTranslation } from "../util/hass-translation"; +import { LitElement, property, PropertyValues } from "lit-element"; import { computeLocalize, LocalizeFunc } from "../common/translations/localize"; import { Constructor, Resources } from "../types"; +import { getLocalLanguage, getTranslation } from "../util/hass-translation"; const empty = () => ""; @@ -11,31 +11,35 @@ export const litLocalizeLiteMixin = >( class LitLocalizeLiteClass extends superClass { // Initialized to empty will prevent undefined errors if called before connected to DOM. @property() public localize: LocalizeFunc = empty; + @property() public resources?: Resources; + // Use browser language setup before login. @property() public language?: string = getLocalLanguage(); + @property() public translationFragment?: string; public connectedCallback(): void { super.connectedCallback(); this._initializeLocalizeLite(); - this.localize = computeLocalize( - this.constructor.prototype, - this.language!, - this.resources! - ); } protected updated(changedProperties: PropertyValues) { super.updated(changedProperties); + if (changedProperties.get("translationFragment")) { + this._initializeLocalizeLite(); + } + if ( - changedProperties.has("language") || - changedProperties.has("resources") + this.language && + this.resources && + (changedProperties.has("language") || + changedProperties.has("resources")) ) { this.localize = computeLocalize( this.constructor.prototype, - this.language!, - this.resources! + this.language, + this.resources ); } } @@ -52,7 +56,7 @@ export const litLocalizeLiteMixin = >( setTimeout( () => !this.resources && - // tslint:disable-next-line + // eslint-disable-next-line console.error( "Forgot to pass in resources or set translationFragment for", this.nodeName diff --git a/src/mixins/provide-hass-lit-mixin.ts b/src/mixins/provide-hass-lit-mixin.ts index afc25f399e..ba9ab227c3 100644 --- a/src/mixins/provide-hass-lit-mixin.ts +++ b/src/mixins/provide-hass-lit-mixin.ts @@ -1,17 +1,16 @@ -import { UpdatingElement, PropertyValues } from "lit-element"; -import { HomeAssistant, Constructor } from "../types"; +import { PropertyValues, UpdatingElement } from "lit-element"; +import { Constructor, HomeAssistant } from "../types"; export interface ProvideHassElement { provideHass(element: HTMLElement); } -/* tslint:disable-next-line:variable-name */ export const ProvideHassLitMixin = >( superClass: T ) => class extends superClass { protected hass!: HomeAssistant; - /* tslint:disable-next-line:variable-name */ + private __provideHass: HTMLElement[] = []; public provideHass(el) { diff --git a/src/mixins/subscribe-mixin.ts b/src/mixins/subscribe-mixin.ts index 034235fa30..a4d877a85f 100644 --- a/src/mixins/subscribe-mixin.ts +++ b/src/mixins/subscribe-mixin.ts @@ -1,19 +1,17 @@ -import { PropertyValues, property, UpdatingElement } from "lit-element"; import { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { HomeAssistant, Constructor } from "../types"; +import { property, PropertyValues, UpdatingElement } from "lit-element"; +import { Constructor, HomeAssistant } from "../types"; export interface HassSubscribeElement { hassSubscribe(): UnsubscribeFunc[]; } -/* tslint:disable-next-line:variable-name */ export const SubscribeMixin = >( superClass: T ) => { class SubscribeClass extends superClass { @property() public hass?: HomeAssistant; - /* tslint:disable-next-line:variable-name */ private __unsubs?: UnsubscribeFunc[]; public connectedCallback() { diff --git a/src/onboarding/ha-onboarding.ts b/src/onboarding/ha-onboarding.ts index 9fa2cb8d75..c11e3a26c7 100644 --- a/src/onboarding/ha-onboarding.ts +++ b/src/onboarding/ha-onboarding.ts @@ -1,32 +1,32 @@ import { - html, - PropertyValues, - customElement, - TemplateResult, - property, -} from "lit-element"; -import { - getAuth, + Auth, createConnection, genClientId, - Auth, + getAuth, subscribeConfig, } from "home-assistant-js-websocket"; -import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; import { + customElement, + html, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { HASSDomEvent } from "../common/dom/fire_event"; +import { subscribeOne } from "../common/util/subscribe-one"; +import { hassUrl } from "../data/auth"; +import { + fetchOnboardingOverview, + OnboardingResponses, OnboardingStep, ValidOnboardingStep, - OnboardingResponses, - fetchOnboardingOverview, } from "../data/onboarding"; +import { subscribeUser } from "../data/ws-user"; +import { litLocalizeLiteMixin } from "../mixins/lit-localize-lite-mixin"; +import { HassElement } from "../state/hass-element"; import { registerServiceWorker } from "../util/register-service-worker"; -import { HASSDomEvent } from "../common/dom/fire_event"; import "./onboarding-create-user"; import "./onboarding-loading"; -import { hassUrl } from "../data/auth"; -import { HassElement } from "../state/hass-element"; -import { subscribeOne } from "../common/util/subscribe-one"; -import { subscribeUser } from "../data/ws-user"; interface OnboardingEvent { type: T; @@ -48,30 +48,32 @@ class HaOnboarding extends litLocalizeLiteMixin(HassElement) { public translationFragment = "page-onboarding"; @property() private _loading = false; + @property() private _steps?: OnboardingStep[]; protected render(): TemplateResult { const step = this._curStep()!; if (this._loading || !step) { - return html` - - `; - } else if (step.step === "user") { + return html` `; + } + if (step.step === "user") { return html` `; - } else if (step.step === "core_config") { + } + if (step.step === "core_config") { return html` `; - } else if (step.step === "integration") { + } + if (step.step === "integration") { return html` this._handleStepDone(ev)); } + protected updated(changedProps: PropertyValues) { + super.updated(changedProps); + if (changedProps.has("language")) { + document.querySelector("html")!.setAttribute("lang", this.language!); + } + } + private _curStep() { return this._steps ? this._steps.find((stp) => !stp.done) : undefined; } diff --git a/src/onboarding/integration-badge.ts b/src/onboarding/integration-badge.ts index b9f1de5426..9588492d08 100644 --- a/src/onboarding/integration-badge.ts +++ b/src/onboarding/integration-badge.ts @@ -1,19 +1,22 @@ import { - LitElement, - TemplateResult, - html, - customElement, - property, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; import "../components/ha-icon"; @customElement("integration-badge") class IntegrationBadge extends LitElement { @property() public icon!: string; + @property() public title!: string; + @property() public badgeIcon?: string; + @property({ type: Boolean, reflect: true }) public clickable = false; protected render(): TemplateResult { @@ -21,9 +24,7 @@ class IntegrationBadge extends LitElement {
    ${this.badgeIcon - ? html` - - ` + ? html` ` : ""}
    ${this.title}
    diff --git a/src/onboarding/onboarding-core-config.ts b/src/onboarding/onboarding-core-config.ts index 4cd12f4b75..0f69b3c03b 100644 --- a/src/onboarding/onboarding-core-config.ts +++ b/src/onboarding/onboarding-core-config.ts @@ -1,44 +1,48 @@ -import { - LitElement, - customElement, - property, - TemplateResult, - html, - CSSResult, - css, -} from "lit-element"; import "@material/mwc-button/mwc-button"; import "@polymer/paper-input/paper-input"; -import "@polymer/paper-radio-group/paper-radio-group"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import "@polymer/paper-radio-button/paper-radio-button"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { HomeAssistant } from "../types"; +import "@polymer/paper-radio-group/paper-radio-group"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../common/dom/fire_event"; +import type { LocalizeFunc } from "../common/translations/localize"; +import "../components/map/ha-location-editor"; +import { createTimezoneListEl } from "../components/timezone-datalist"; import { ConfigUpdateValues, detectCoreConfig, saveCoreConfig, } from "../data/core"; -import { PolymerChangedEvent } from "../polymer-types"; import { onboardCoreConfigStep } from "../data/onboarding"; -import { fireEvent } from "../common/dom/fire_event"; -import { LocalizeFunc } from "../common/translations/localize"; -import { createTimezoneListEl } from "../components/timezone-datalist"; -import "../components/map/ha-location-editor"; +import type { PolymerChangedEvent } from "../polymer-types"; +import type { HomeAssistant } from "../types"; const amsterdam = [52.3731339, 4.8903147]; @customElement("onboarding-core-config") class OnboardingCoreConfig extends LitElement { @property() public hass!: HomeAssistant; + @property() public onboardingLocalize!: LocalizeFunc; @property() private _working = false; @property() private _name!: ConfigUpdateValues["location_name"]; + @property() private _location!: [number, number]; + @property() private _elevation!: string; + @property() private _unitSystem!: ConfigUpdateValues["unit_system"]; + @property() private _timeZone!: string; protected render(): TemplateResult { diff --git a/src/onboarding/onboarding-create-user.ts b/src/onboarding/onboarding-create-user.ts index 0f8699e9dd..c1b6d16149 100644 --- a/src/onboarding/onboarding-create-user.ts +++ b/src/onboarding/onboarding-create-user.ts @@ -1,31 +1,37 @@ -import "@polymer/paper-input/paper-input"; import "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; +import { genClientId } from "home-assistant-js-websocket"; import { - LitElement, - CSSResult, css, - html, - PropertyValues, - property, + CSSResult, customElement, + html, + LitElement, + property, + PropertyValues, TemplateResult, } from "lit-element"; -import { genClientId } from "home-assistant-js-websocket"; +import { fireEvent } from "../common/dom/fire_event"; +import { LocalizeFunc } from "../common/translations/localize"; import { onboardUserStep } from "../data/onboarding"; import { PolymerChangedEvent } from "../polymer-types"; -import { LocalizeFunc } from "../common/translations/localize"; -import { fireEvent } from "../common/dom/fire_event"; @customElement("onboarding-create-user") class OnboardingCreateUser extends LitElement { @property() public localize!: LocalizeFunc; + @property() public language!: string; @property() private _name = ""; + @property() private _username = ""; + @property() private _password = ""; + @property() private _passwordConfirm = ""; + @property() private _loading = false; + @property() private _errorMsg?: string = undefined; protected render(): TemplateResult { @@ -100,9 +106,11 @@ class OnboardingCreateUser extends LitElement { @value-changed=${this._handleValueChanged} required type='password' - .invalid=${this._password !== "" && + .invalid=${ + this._password !== "" && this._passwordConfirm !== "" && - this._passwordConfirm !== this._password} + this._passwordConfirm !== this._password + } .errorMessage="${this.localize( "ui.panel.page-onboarding.user.error.password_not_match" )}" @@ -183,7 +191,7 @@ class OnboardingCreateUser extends LitElement { result, }); } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error(err); this._loading = false; this._errorMsg = err.body.message; diff --git a/src/onboarding/onboarding-integrations.ts b/src/onboarding/onboarding-integrations.ts index 816902c625..4ee2639e55 100644 --- a/src/onboarding/onboarding-integrations.ts +++ b/src/onboarding/onboarding-integrations.ts @@ -1,39 +1,43 @@ -import { - LitElement, - TemplateResult, - html, - customElement, - PropertyValues, - property, - CSSResult, - css, -} from "lit-element"; import "@material/mwc-button/mwc-button"; +import { genClientId } from "home-assistant-js-websocket"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../common/dom/fire_event"; +import { compare } from "../common/string/compare"; +import { LocalizeFunc } from "../common/translations/localize"; +import { ConfigEntry, getConfigEntries } from "../data/config_entries"; +import { + getConfigFlowInProgressCollection, + localizeConfigFlowTitle, + subscribeConfigFlowInProgress, +} from "../data/config_flow"; +import { DataEntryFlowProgress } from "../data/data_entry_flow"; +import { onboardIntegrationStep } from "../data/onboarding"; import { loadConfigFlowDialog, showConfigFlowDialog, } from "../dialogs/config-flow/show-dialog-config-flow"; import { HomeAssistant } from "../types"; -import { getConfigEntries, ConfigEntry } from "../data/config_entries"; -import { compare } from "../common/string/compare"; import "./integration-badge"; -import { LocalizeFunc } from "../common/translations/localize"; -import { fireEvent } from "../common/dom/fire_event"; -import { onboardIntegrationStep } from "../data/onboarding"; -import { genClientId } from "home-assistant-js-websocket"; -import { DataEntryFlowProgress } from "../data/data_entry_flow"; -import { - localizeConfigFlowTitle, - subscribeConfigFlowInProgress, - getConfigFlowInProgressCollection, -} from "../data/config_flow"; @customElement("onboarding-integrations") class OnboardingIntegrations extends LitElement { @property() public hass!: HomeAssistant; + @property() public onboardingLocalize!: LocalizeFunc; + @property() private _entries?: ConfigEntry[]; + @property() private _discovered?: DataEntryFlowProgress[]; + private _unsubEvents?: () => void; public connectedCallback() { diff --git a/src/onboarding/onboarding-loading.ts b/src/onboarding/onboarding-loading.ts index 75845879c2..96703c6a6c 100644 --- a/src/onboarding/onboarding-loading.ts +++ b/src/onboarding/onboarding-loading.ts @@ -1,18 +1,16 @@ import { + css, + CSSResult, + customElement, + html, LitElement, TemplateResult, - html, - customElement, - CSSResult, - css, } from "lit-element"; @customElement("onboarding-loading") class OnboardingLoading extends LitElement { protected render(): TemplateResult { - return html` -
    - `; + return html`
    `; } static get styles(): CSSResult { diff --git a/src/panels/calendar/ha-big-calendar.js b/src/panels/calendar/ha-big-calendar.js index 65e13eb23f..cff20e98b6 100644 --- a/src/panels/calendar/ha-big-calendar.js +++ b/src/panels/calendar/ha-big-calendar.js @@ -1,14 +1,13 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -/* eslint-disable */ -import { render } from "react-dom"; -import React from "react"; -/* eslint-enable */ -import BigCalendar from "react-big-calendar"; import moment from "moment"; +// eslint-disable-next-line import/no-duplicates,import/no-extraneous-dependencies +import React from "react"; +import BigCalendar from "react-big-calendar"; +// eslint-disable-next-line import/no-duplicates,import/no-extraneous-dependencies +import { render } from "react-dom"; import { EventsMixin } from "../../mixins/events-mixin"; - import "../../resources/ha-style"; BigCalendar.setLocalizer(BigCalendar.momentLocalizer(moment)); diff --git a/src/panels/calendar/ha-panel-calendar.js b/src/panels/calendar/ha-panel-calendar.js index a22a502c5e..3a3e432516 100644 --- a/src/panels/calendar/ha-panel-calendar.js +++ b/src/panels/calendar/ha-panel-calendar.js @@ -1,21 +1,20 @@ import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; -import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import moment from "moment"; import dates from "react-big-calendar/lib/utils/dates"; - -import "../../components/ha-menu-button"; import "../../components/ha-card"; +import "../../components/ha-menu-button"; +import LocalizeMixin from "../../mixins/localize-mixin"; import "../../resources/ha-style"; import "./ha-big-calendar"; -import LocalizeMixin from "../../mixins/localize-mixin"; - const DEFAULT_VIEW = "month"; /* @@ -195,17 +194,11 @@ class HaPanelCalendar extends LocalizeMixin(PolymerElement) { startDate = moment(this.currentDate).startOf("isoWeek"); endDate = moment(this.currentDate).endOf("isoWeek"); } else if (this.currentView === "month") { - startDate = moment(this.currentDate) - .startOf("month") - .subtract(7, "days"); - endDate = moment(this.currentDate) - .endOf("month") - .add(7, "days"); + startDate = moment(this.currentDate).startOf("month").subtract(7, "days"); + endDate = moment(this.currentDate).endOf("month").add(7, "days"); } else if (this.currentView === "agenda") { startDate = moment(this.currentDate).startOf("day"); - endDate = moment(this.currentDate) - .endOf("day") - .add(1, "month"); + endDate = moment(this.currentDate).endOf("day").add(1, "month"); } return [startDate.toISOString(), endDate.toISOString()]; } diff --git a/src/panels/config/areas/dialog-area-registry-detail.ts b/src/panels/config/areas/dialog-area-registry-detail.ts index 3bfa1a0a99..cf6b1a32a1 100644 --- a/src/panels/config/areas/dialog-area-registry-detail.ts +++ b/src/panels/config/areas/dialog-area-registry-detail.ts @@ -1,27 +1,30 @@ -import { - LitElement, - html, - css, - CSSResult, - TemplateResult, - property, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; - +import { + css, + CSSResult, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/dialog/ha-paper-dialog"; -import { AreaRegistryDetailDialogParams } from "./show-dialog-area-registry-detail"; +import { AreaRegistryEntryMutableParams } from "../../../data/area_registry"; import { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; -import { AreaRegistryEntryMutableParams } from "../../../data/area_registry"; +import { AreaRegistryDetailDialogParams } from "./show-dialog-area-registry-detail"; class DialogAreaDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _name!: string; + @property() private _error?: string; + @property() private _params?: AreaRegistryDetailDialogParams; + @property() private _submitting?: boolean; public async showDialog( @@ -51,17 +54,9 @@ class DialogAreaDetail extends LitElement { : this.hass.localize("ui.panel.config.areas.editor.default_name")} - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    - ${entry - ? html` -
    Area ID: ${entry.area_id}
    - ` - : ""} + ${entry ? html`
    Area ID: ${entry.area_id}
    ` : ""} { @customElement("ha-automation-action-row") export default class HaAutomationActionRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public action!: Action; + @property() public index!: number; + @property() public totalActions!: number; + @property() private _yamlMode = false; protected render() { diff --git a/src/panels/config/automation/action/ha-automation-action.ts b/src/panels/config/automation/action/ha-automation-action.ts index 0be017cf98..35369a26df 100644 --- a/src/panels/config/automation/action/ha-automation-action.ts +++ b/src/panels/config/automation/action/ha-automation-action.ts @@ -12,12 +12,12 @@ import "../../../../components/ha-card"; import { Action } from "../../../../data/script"; import { HomeAssistant } from "../../../../types"; import "./ha-automation-action-row"; - import { HaDeviceAction } from "./types/ha-automation-action-device_id"; @customElement("ha-automation-action") export default class HaAutomationAction extends LitElement { @property() public hass!: HomeAssistant; + @property() public actions!: Action[]; protected render() { diff --git a/src/panels/config/automation/action/types/ha-automation-action-condition.ts b/src/panels/config/automation/action/types/ha-automation-action-condition.ts index 967455ffbb..195e716804 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-condition.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-condition.ts @@ -1,14 +1,14 @@ -import "../../condition/ha-automation-condition-editor"; - -import { LitElement, property, customElement, html } from "lit-element"; -import { ActionElement } from "../ha-automation-action-row"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; import { Condition } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; +import "../../condition/ha-automation-condition-editor"; +import { ActionElement } from "../ha-automation-action-row"; @customElement("ha-automation-action-condition") export class HaConditionAction extends LitElement implements ActionElement { @property() public hass!: HomeAssistant; + @property() public action!: Condition; public static get defaultConfig() { diff --git a/src/panels/config/automation/action/types/ha-automation-action-delay.ts b/src/panels/config/automation/action/types/ha-automation-action-delay.ts index 1559f1410b..5067408ec2 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-delay.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-delay.ts @@ -1,15 +1,15 @@ import "@polymer/paper-input/paper-input"; -import "../../../../../components/ha-service-picker"; +import { customElement, html, LitElement, property } from "lit-element"; import "../../../../../components/entity/ha-entity-picker"; - -import { LitElement, property, customElement, html } from "lit-element"; -import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; -import { HomeAssistant } from "../../../../../types"; +import "../../../../../components/ha-service-picker"; import { DelayAction } from "../../../../../data/script"; +import { HomeAssistant } from "../../../../../types"; +import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; @customElement("ha-automation-action-delay") export class HaDelayAction extends LitElement implements ActionElement { @property() public hass!: HomeAssistant; + @property() public action!: DelayAction; public static get defaultConfig() { diff --git a/src/panels/config/automation/action/types/ha-automation-action-device_id.ts b/src/panels/config/automation/action/types/ha-automation-action-device_id.ts index a3b0290f84..db56b9aa84 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-device_id.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-device_id.ts @@ -1,23 +1,26 @@ -import "../../../../../components/device/ha-device-picker"; -import "../../../../../components/device/ha-device-action-picker"; -import "../../../../../components/ha-form/ha-form"; - -import { - fetchDeviceActionCapabilities, - deviceAutomationsEqual, - DeviceAction, -} from "../../../../../data/device_automation"; -import { LitElement, customElement, property, html } from "lit-element"; -import { fireEvent } from "../../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, html, LitElement, property } from "lit-element"; import memoizeOne from "memoize-one"; +import { fireEvent } from "../../../../../common/dom/fire_event"; +import "../../../../../components/device/ha-device-action-picker"; +import "../../../../../components/device/ha-device-picker"; +import "../../../../../components/ha-form/ha-form"; +import { + DeviceAction, + deviceAutomationsEqual, + fetchDeviceActionCapabilities, +} from "../../../../../data/device_automation"; +import { HomeAssistant } from "../../../../../types"; @customElement("ha-automation-action-device_id") export class HaDeviceAction extends LitElement { @property() public hass!: HomeAssistant; + @property() public action!: DeviceAction; + @property() private _deviceId?: string; + @property() private _capabilities?; + private _origAction?: DeviceAction; public static get defaultConfig() { diff --git a/src/panels/config/automation/action/types/ha-automation-action-event.ts b/src/panels/config/automation/action/types/ha-automation-action-event.ts index 115b11680b..dc876a9fdd 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-event.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-event.ts @@ -1,27 +1,28 @@ import "@polymer/paper-input/paper-input"; -import "../../../../../components/ha-service-picker"; -import "../../../../../components/entity/ha-entity-picker"; -import "../../../../../components/ha-yaml-editor"; - import { + customElement, LitElement, property, - customElement, PropertyValues, query, } from "lit-element"; -import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; -import { HomeAssistant } from "../../../../../types"; import { html } from "lit-html"; -import { EventAction } from "../../../../../data/script"; -// tslint:disable-next-line -import { HaYamlEditor } from "../../../../../components/ha-yaml-editor"; +import "../../../../../components/entity/ha-entity-picker"; +import "../../../../../components/ha-service-picker"; +import "../../../../../components/ha-yaml-editor"; +import type { HaYamlEditor } from "../../../../../components/ha-yaml-editor"; +import type { EventAction } from "../../../../../data/script"; +import type { HomeAssistant } from "../../../../../types"; +import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; @customElement("ha-automation-action-event") export class HaEventAction extends LitElement implements ActionElement { @property() public hass!: HomeAssistant; + @property() public action!: EventAction; + @query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor; + private _actionData?: EventAction["event_data"]; public static get defaultConfig(): EventAction { diff --git a/src/panels/config/automation/action/types/ha-automation-action-scene.ts b/src/panels/config/automation/action/types/ha-automation-action-scene.ts index 112ab89b81..3399286deb 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-scene.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-scene.ts @@ -1,15 +1,15 @@ -import "../../../../../components/entity/ha-entity-picker"; - -import { LitElement, property, customElement, html } from "lit-element"; -import { ActionElement } from "../ha-automation-action-row"; -import { HomeAssistant } from "../../../../../types"; -import { PolymerChangedEvent } from "../../../../../polymer-types"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; +import "../../../../../components/entity/ha-entity-picker"; import { SceneAction } from "../../../../../data/script"; +import { PolymerChangedEvent } from "../../../../../polymer-types"; +import { HomeAssistant } from "../../../../../types"; +import { ActionElement } from "../ha-automation-action-row"; @customElement("ha-automation-action-scene") export class HaSceneAction extends LitElement implements ActionElement { @property() public hass!: HomeAssistant; + @property() public action!: SceneAction; public static get defaultConfig(): SceneAction { diff --git a/src/panels/config/automation/action/types/ha-automation-action-service.ts b/src/panels/config/automation/action/types/ha-automation-action-service.ts index a0ac5a6ebe..4a7751e9c3 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-service.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-service.ts @@ -1,32 +1,33 @@ import "@polymer/paper-input/paper-input"; -import "../../../../../components/ha-service-picker"; -import "../../../../../components/entity/ha-entity-picker"; -import "../../../../../components/ha-yaml-editor"; - import { + customElement, LitElement, property, - customElement, PropertyValues, query, } from "lit-element"; -import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; -import { HomeAssistant } from "../../../../../types"; import { html } from "lit-html"; import memoizeOne from "memoize-one"; +import { fireEvent } from "../../../../../common/dom/fire_event"; import { computeDomain } from "../../../../../common/entity/compute_domain"; import { computeObjectId } from "../../../../../common/entity/compute_object_id"; -import { PolymerChangedEvent } from "../../../../../polymer-types"; -import { fireEvent } from "../../../../../common/dom/fire_event"; +import "../../../../../components/entity/ha-entity-picker"; +import "../../../../../components/ha-service-picker"; +import "../../../../../components/ha-yaml-editor"; +import type { HaYamlEditor } from "../../../../../components/ha-yaml-editor"; import { ServiceAction } from "../../../../../data/script"; -// tslint:disable-next-line -import { HaYamlEditor } from "../../../../../components/ha-yaml-editor"; +import type { PolymerChangedEvent } from "../../../../../polymer-types"; +import type { HomeAssistant } from "../../../../../types"; +import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; @customElement("ha-automation-action-service") export class HaServiceAction extends LitElement implements ActionElement { @property() public hass!: HomeAssistant; + @property() public action!: ServiceAction; + @query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor; + private _actionData?: ServiceAction["data"]; public static get defaultConfig() { diff --git a/src/panels/config/automation/action/types/ha-automation-action-wait_template.ts b/src/panels/config/automation/action/types/ha-automation-action-wait_template.ts index 5d54469acd..d785160071 100644 --- a/src/panels/config/automation/action/types/ha-automation-action-wait_template.ts +++ b/src/panels/config/automation/action/types/ha-automation-action-wait_template.ts @@ -1,14 +1,14 @@ import "@polymer/paper-input/paper-input"; - -import { LitElement, property, customElement } from "lit-element"; -import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, LitElement, property } from "lit-element"; import { html } from "lit-html"; import { WaitAction } from "../../../../../data/script"; +import { HomeAssistant } from "../../../../../types"; +import { ActionElement, handleChangeEvent } from "../ha-automation-action-row"; @customElement("ha-automation-action-wait_template") export class HaWaitAction extends LitElement implements ActionElement { @property() public hass!: HomeAssistant; + @property() public action!: WaitAction; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/ha-automation-condition-editor.ts b/src/panels/config/automation/condition/ha-automation-condition-editor.ts index 4082b68265..ef6d855c4d 100644 --- a/src/panels/config/automation/condition/ha-automation-condition-editor.ts +++ b/src/panels/config/automation/condition/ha-automation-condition-editor.ts @@ -1,23 +1,21 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; -// tslint:disable-next-line -import { PaperListboxElement } from "@polymer/paper-listbox/paper-listbox"; +import type { PaperListboxElement } from "@polymer/paper-listbox/paper-listbox"; import { customElement, html, LitElement, property } from "lit-element"; import { dynamicElement } from "../../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-card"; -import { HomeAssistant } from "../../../../types"; - +import type { Condition } from "../../../../data/automation"; +import type { HomeAssistant } from "../../../../types"; +import "./types/ha-automation-condition-and"; import "./types/ha-automation-condition-device"; -import "./types/ha-automation-condition-state"; import "./types/ha-automation-condition-numeric_state"; +import "./types/ha-automation-condition-or"; +import "./types/ha-automation-condition-state"; import "./types/ha-automation-condition-sun"; import "./types/ha-automation-condition-template"; import "./types/ha-automation-condition-time"; import "./types/ha-automation-condition-zone"; -import "./types/ha-automation-condition-and"; -import "./types/ha-automation-condition-or"; -import { Condition } from "../../../../data/automation"; const OPTIONS = [ "device", @@ -34,7 +32,9 @@ const OPTIONS = [ @customElement("ha-automation-condition-editor") export default class HaAutomationConditionEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public condition!: Condition; + @property() public yamlMode = false; protected render() { diff --git a/src/panels/config/automation/condition/ha-automation-condition-row.ts b/src/panels/config/automation/condition/ha-automation-condition-row.ts index e96beacab1..2a78ded2c2 100644 --- a/src/panels/config/automation/condition/ha-automation-condition-row.ts +++ b/src/panels/config/automation/condition/ha-automation-condition-row.ts @@ -11,11 +11,10 @@ import { } from "lit-element"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-card"; -import { HomeAssistant } from "../../../../types"; -import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; - -import "./ha-automation-condition-editor"; import { Condition } from "../../../../data/automation"; +import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; +import { HomeAssistant } from "../../../../types"; +import "./ha-automation-condition-editor"; export interface ConditionElement extends LitElement { condition: Condition; @@ -49,7 +48,9 @@ export const handleChangeEvent = ( @customElement("ha-automation-condition-row") export default class HaAutomationConditionRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public condition!: Condition; + @property() private _yamlMode = false; protected render() { diff --git a/src/panels/config/automation/condition/ha-automation-condition.ts b/src/panels/config/automation/condition/ha-automation-condition.ts index db368c4864..c65502bfa4 100644 --- a/src/panels/config/automation/condition/ha-automation-condition.ts +++ b/src/panels/config/automation/condition/ha-automation-condition.ts @@ -1,25 +1,23 @@ +import "@material/mwc-button"; import { - LitElement, + css, + CSSResult, customElement, html, + LitElement, property, - CSSResult, - css, } from "lit-element"; -import "@material/mwc-button"; -import "../../../../components/ha-card"; - -import { HaDeviceCondition } from "./types/ha-automation-condition-device"; - import { fireEvent } from "../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../types"; - -import "./ha-automation-condition-row"; +import "../../../../components/ha-card"; import { Condition } from "../../../../data/automation"; +import { HomeAssistant } from "../../../../types"; +import "./ha-automation-condition-row"; +import { HaDeviceCondition } from "./types/ha-automation-condition-device"; @customElement("ha-automation-condition") export default class HaAutomationCondition extends LitElement { @property() public hass!: HomeAssistant; + @property() public conditions!: Condition[]; protected render() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-and.ts b/src/panels/config/automation/condition/types/ha-automation-condition-and.ts index 111bd727b5..92148e5ffb 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-and.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-and.ts @@ -1,5 +1,5 @@ -import { HaLogicalCondition } from "./ha-automation-condition-logical"; import { customElement } from "lit-element"; +import { HaLogicalCondition } from "./ha-automation-condition-logical"; @customElement("ha-automation-condition-and") export class HaAndCondition extends HaLogicalCondition {} diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-device.ts b/src/panels/config/automation/condition/types/ha-automation-condition-device.ts index 1d5bfd4ff1..8ce4b90277 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-device.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-device.ts @@ -1,22 +1,25 @@ -import "../../../../../components/device/ha-device-picker"; +import { customElement, html, LitElement, property } from "lit-element"; +import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/device/ha-device-condition-picker"; +import "../../../../../components/device/ha-device-picker"; import "../../../../../components/ha-form/ha-form"; - import { - fetchDeviceConditionCapabilities, deviceAutomationsEqual, DeviceCondition, + fetchDeviceConditionCapabilities, } from "../../../../../data/device_automation"; -import { LitElement, customElement, property, html } from "lit-element"; -import { fireEvent } from "../../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../../types"; @customElement("ha-automation-condition-device") export class HaDeviceCondition extends LitElement { @property() public hass!: HomeAssistant; + @property() public condition!: DeviceCondition; + @property() private _deviceId?: string; + @property() private _capabilities?; + private _origCondition?: DeviceCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts b/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts index 5cff91242d..d2c4b3e607 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-logical.ts @@ -1,13 +1,14 @@ import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../../types"; -import { ConditionElement } from "../ha-automation-condition-row"; -import "../ha-automation-condition"; import { LogicalCondition } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; +import "../ha-automation-condition"; +import { ConditionElement } from "../ha-automation-condition-row"; @customElement("ha-automation-condition-logical") export class HaLogicalCondition extends LitElement implements ConditionElement { @property() public hass!: HomeAssistant; + @property() public condition!: LogicalCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts b/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts index 2ddb37d04b..c7755a2cf1 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-numeric_state.ts @@ -1,16 +1,16 @@ import "@polymer/paper-input/paper-input"; -import "../../../../../components/ha-textarea"; - -import "../../../../../components/entity/ha-entity-picker"; -import { LitElement, html, customElement, property } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import { handleChangeEvent } from "../ha-automation-condition-row"; +import "../../../../../components/entity/ha-entity-picker"; +import "../../../../../components/ha-textarea"; import { NumericStateCondition } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; +import { handleChangeEvent } from "../ha-automation-condition-row"; @customElement("ha-automation-condition-numeric_state") export default class HaNumericStateCondition extends LitElement { @property() public hass!: HomeAssistant; + @property() public condition!: NumericStateCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-or.ts b/src/panels/config/automation/condition/types/ha-automation-condition-or.ts index 796b8a012e..38152f3bbc 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-or.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-or.ts @@ -1,5 +1,5 @@ -import { HaLogicalCondition } from "./ha-automation-condition-logical"; import { customElement } from "lit-element"; +import { HaLogicalCondition } from "./ha-automation-condition-logical"; @customElement("ha-automation-condition-or") export class HaOrCondition extends HaLogicalCondition {} diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-state.ts b/src/panels/config/automation/condition/types/ha-automation-condition-state.ts index 11ff6cc085..7627c88916 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-state.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-state.ts @@ -2,17 +2,18 @@ import "@polymer/paper-input/paper-input"; import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/entity/ha-entity-picker"; +import { StateCondition } from "../../../../../data/automation"; +import { PolymerChangedEvent } from "../../../../../polymer-types"; import { HomeAssistant } from "../../../../../types"; import { - handleChangeEvent, ConditionElement, + handleChangeEvent, } from "../ha-automation-condition-row"; -import { PolymerChangedEvent } from "../../../../../polymer-types"; -import { StateCondition } from "../../../../../data/automation"; @customElement("ha-automation-condition-state") export class HaStateCondition extends LitElement implements ConditionElement { @property() public hass!: HomeAssistant; + @property() public condition!: StateCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-sun.ts b/src/panels/config/automation/condition/types/ha-automation-condition-sun.ts index 8975e889fa..99386c1f26 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-sun.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-sun.ts @@ -1,20 +1,20 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-radio-button/paper-radio-button"; import "@polymer/paper-radio-group/paper-radio-group"; -// tslint:disable-next-line -import { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; -import { LitElement, customElement, property, html } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; -import { - handleChangeEvent, - ConditionElement, -} from "../ha-automation-condition-row"; +import type { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import { SunCondition } from "../../../../../data/automation"; +import type { SunCondition } from "../../../../../data/automation"; +import type { HomeAssistant } from "../../../../../types"; +import { + ConditionElement, + handleChangeEvent, +} from "../ha-automation-condition-row"; @customElement("ha-automation-condition-sun") export class HaSunCondition extends LitElement implements ConditionElement { @property() public hass!: HomeAssistant; + @property() public condition!: SunCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-template.ts b/src/panels/config/automation/condition/types/ha-automation-condition-template.ts index b33cfa6d2f..4e79bc9004 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-template.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-template.ts @@ -1,12 +1,13 @@ +import { customElement, html, LitElement, property } from "lit-element"; import "../../../../../components/ha-textarea"; -import { LitElement, property, html, customElement } from "lit-element"; +import { TemplateCondition } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent } from "../ha-automation-condition-row"; -import { TemplateCondition } from "../../../../../data/automation"; @customElement("ha-automation-condition-template") export class HaTemplateCondition extends LitElement { @property() public hass!: HomeAssistant; + @property() public condition!: TemplateCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-time.ts b/src/panels/config/automation/condition/types/ha-automation-condition-time.ts index b42af4f4af..708624abfd 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-time.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-time.ts @@ -1,15 +1,16 @@ import "@polymer/paper-input/paper-input"; -import { LitElement, html, property, customElement } from "lit-element"; +import { customElement, html, LitElement, property } from "lit-element"; +import { TimeCondition } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import { - handleChangeEvent, ConditionElement, + handleChangeEvent, } from "../ha-automation-condition-row"; -import { TimeCondition } from "../../../../../data/automation"; @customElement("ha-automation-condition-time") export class HaTimeCondition extends LitElement implements ConditionElement { @property() public hass!: HomeAssistant; + @property() public condition!: TimeCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts b/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts index edd2fac186..213fb1966e 100644 --- a/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts +++ b/src/panels/config/automation/condition/types/ha-automation-condition-zone.ts @@ -1,13 +1,12 @@ import "@polymer/paper-radio-button/paper-radio-button"; -import "../../../../../components/entity/ha-entity-picker"; - -import { hasLocation } from "../../../../../common/entity/has_location"; -import { computeStateDomain } from "../../../../../common/entity/compute_state_domain"; -import { LitElement, property, html, customElement } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; -import { PolymerChangedEvent } from "../../../../../polymer-types"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; +import { computeStateDomain } from "../../../../../common/entity/compute_state_domain"; +import { hasLocation } from "../../../../../common/entity/has_location"; +import "../../../../../components/entity/ha-entity-picker"; import { ZoneCondition } from "../../../../../data/automation"; +import { PolymerChangedEvent } from "../../../../../polymer-types"; +import { HomeAssistant } from "../../../../../types"; function zoneAndLocationFilter(stateObj) { return hasLocation(stateObj) && computeStateDomain(stateObj) !== "zone"; @@ -16,6 +15,7 @@ function zoneAndLocationFilter(stateObj) { @customElement("ha-automation-condition-zone") export class HaZoneCondition extends LitElement { @property() public hass!: HomeAssistant; + @property() public condition!: ZoneCondition; public static get defaultConfig() { diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index 82acdecdda..fa7f671b90 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -44,13 +44,21 @@ import { HaDeviceTrigger } from "./trigger/types/ha-automation-trigger-device"; export class HaAutomationEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public automation!: AutomationEntity; + @property() public isWide?: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() public creatingNew?: boolean; + @property() private _config?: AutomationConfig; + @property() private _dirty?: boolean; + @property() private _errors?: string; protected render(): TemplateResult { @@ -74,23 +82,15 @@ export class HaAutomationEditor extends LitElement { @click=${this._deleteConfirm} > `} - ${this._errors - ? html` -
    ${this._errors}
    - ` - : ""} + ${this._errors ? html`
    ${this._errors}
    ` : ""} ${this._config ? html` ${this.narrow - ? html` - ${this._config?.alias} - ` + ? html` ${this._config?.alias} ` : ""} ${!this.narrow - ? html` - ${this._config.alias} - ` + ? html` ${this._config.alias} ` : ""} ${this.hass.localize( @@ -298,7 +298,7 @@ export class HaAutomationEditor extends LitElement { if (changedProps.has("creatingNew") && this.creatingNew && this.hass) { const initData = getAutomationEditorInitData(); - this._dirty = initData ? true : false; + this._dirty = !!initData; this._config = { alias: this.hass.localize( "ui.panel.config.automation.editor.default_name" diff --git a/src/panels/config/automation/ha-automation-picker.ts b/src/panels/config/automation/ha-automation-picker.ts index 64dcd7b99b..68da1c886e 100644 --- a/src/panels/config/automation/ha-automation-picker.ts +++ b/src/panels/config/automation/ha-automation-picker.ts @@ -1,44 +1,46 @@ -import { - LitElement, - TemplateResult, - html, - CSSResultArray, - css, - property, - customElement, -} from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-tooltip/paper-tooltip"; -import "../../../layouts/hass-tabs-subpage-data-table"; - -import "../../../components/ha-fab"; -import "../../../components/entity/ha-entity-toggle"; - -import { computeStateName } from "../../../common/entity/compute_state_name"; -import { computeRTL } from "../../../common/util/compute_rtl"; -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant, Route } from "../../../types"; import { - AutomationEntity, - showAutomationEditor, - AutomationConfig, - triggerAutomation, -} from "../../../data/automation"; + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { ifDefined } from "lit-html/directives/if-defined"; +import memoizeOne from "memoize-one"; +import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { formatDateTime } from "../../../common/datetime/format_date_time"; import { fireEvent } from "../../../common/dom/fire_event"; -import { showThingtalkDialog } from "./show-dialog-thingtalk"; -import { isComponentLoaded } from "../../../common/config/is_component_loaded"; -import { configSections } from "../ha-panel-config"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { computeRTL } from "../../../common/util/compute_rtl"; import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table"; -import memoizeOne from "memoize-one"; -import { ifDefined } from "lit-html/directives/if-defined"; +import "../../../components/entity/ha-entity-toggle"; +import "../../../components/ha-fab"; +import { + AutomationConfig, + AutomationEntity, + showAutomationEditor, + triggerAutomation, +} from "../../../data/automation"; +import "../../../layouts/hass-tabs-subpage-data-table"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant, Route } from "../../../types"; +import { configSections } from "../ha-panel-config"; +import { showThingtalkDialog } from "./show-dialog-thingtalk"; @customElement("ha-automation-picker") class HaAutomationPicker extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() public automations!: AutomationEntity[]; private _automations = memoizeOne((automations: AutomationEntity[]) => { diff --git a/src/panels/config/automation/ha-config-automation.js b/src/panels/config/automation/ha-config-automation.js deleted file mode 100644 index d1ed22cc7d..0000000000 --- a/src/panels/config/automation/ha-config-automation.js +++ /dev/null @@ -1,119 +0,0 @@ -import "@polymer/app-route/app-route"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./ha-automation-editor"; -import "./ha-automation-picker"; - -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; - -class HaConfigAutomation extends PolymerElement { - static get template() { - return html` - - - - - - - - `; - } - - static get properties() { - return { - hass: Object, - route: Object, - isWide: Boolean, - narrow: Boolean, - _routeData: Object, - _routeMatches: Boolean, - _creatingNew: Boolean, - _edittingAutomation: Boolean, - - automations: { - type: Array, - computed: "computeAutomations(hass)", - }, - - automation: { - type: Object, - computed: - "computeAutomation(automations, _edittingAutomation, _routeData)", - }, - - showEditor: { - type: Boolean, - computed: "computeShowEditor(_edittingAutomation, _creatingNew)", - }, - }; - } - - disconnectedCallback() { - super.disconnectedCallback(); - this.route = { path: "", prefix: "" }; - } - - computeAutomation(automations, edittingAddon, routeData) { - if (!automations || !edittingAddon) { - return null; - } - for (var i = 0; i < automations.length; i++) { - if (automations[i].attributes.id === routeData.automation) { - return automations[i]; - } - } - return null; - } - - computeAutomations(hass) { - var automations = []; - - Object.keys(hass.states).forEach(function(key) { - var entity = hass.states[key]; - - if (computeStateDomain(entity) === "automation") { - automations.push(entity); - } - }); - - return automations; - } - - computeShowEditor(_edittingAutomation, _creatingNew) { - return _creatingNew || _edittingAutomation; - } -} - -customElements.define("ha-config-automation", HaConfigAutomation); diff --git a/src/panels/config/automation/ha-config-automation.ts b/src/panels/config/automation/ha-config-automation.ts new file mode 100644 index 0000000000..a6b86837b6 --- /dev/null +++ b/src/panels/config/automation/ha-config-automation.ts @@ -0,0 +1,86 @@ +import { HassEntities } from "home-assistant-js-websocket"; +import { customElement, property, PropertyValues } from "lit-element"; +import memoizeOne from "memoize-one"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { AutomationEntity } from "../../../data/automation"; +import { + HassRouterPage, + RouterOptions, +} from "../../../layouts/hass-router-page"; +import { HomeAssistant } from "../../../types"; +import "./ha-automation-editor"; +import "./ha-automation-picker"; + +@customElement("ha-config-automation") +class HaConfigAutomation extends HassRouterPage { + @property() public hass!: HomeAssistant; + + @property() public narrow!: boolean; + + @property() public isWide!: boolean; + + @property() public showAdvanced!: boolean; + + @property() public automations: AutomationEntity[] = []; + + protected routerOptions: RouterOptions = { + defaultPage: "dashboard", + routes: { + dashboard: { + tag: "ha-automation-picker", + cache: true, + }, + edit: { + tag: "ha-automation-editor", + }, + }, + }; + + private _computeAutomations = memoizeOne((states: HassEntities) => { + const automations: AutomationEntity[] = []; + Object.values(states).forEach((state) => { + if ( + computeStateDomain(state) === "automation" && + !state.attributes.hidden + ) { + automations.push(state as AutomationEntity); + } + }); + + return automations; + }); + + protected updatePageEl(pageEl, changedProps: PropertyValues) { + pageEl.hass = this.hass; + pageEl.narrow = this.narrow; + pageEl.isWide = this.isWide; + pageEl.route = this.routeTail; + pageEl.showAdvanced = this.showAdvanced; + + if (this.hass) { + pageEl.automations = this._computeAutomations(this.hass.states); + } + + if ( + (!changedProps || changedProps.has("route")) && + this._currentPage === "edit" + ) { + pageEl.creatingNew = undefined; + const automationId = this.routeTail.path.substr(1); + pageEl.creatingNew = automationId === "new"; + pageEl.automation = + automationId === "new" + ? undefined + : pageEl.automations.find( + (entity: AutomationEntity) => + entity.attributes.id === automationId + ); + } + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-config-automation": HaConfigAutomation; + } +} diff --git a/src/panels/config/automation/thingtalk/dialog-thingtalk.ts b/src/panels/config/automation/thingtalk/dialog-thingtalk.ts index 4d2ad0aee5..096b1e0e5b 100644 --- a/src/panels/config/automation/thingtalk/dialog-thingtalk.ts +++ b/src/panels/config/automation/thingtalk/dialog-thingtalk.ts @@ -1,30 +1,27 @@ -import { - LitElement, - html, - css, - CSSResult, - TemplateResult, - property, - customElement, - query, -} from "lit-element"; +import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import "@polymer/paper-spinner/paper-spinner"; -import "@material/mwc-button"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + query, + TemplateResult, +} from "lit-element"; import "../../../../components/dialog/ha-paper-dialog"; -import "./ha-thingtalk-placeholders"; -import { ThingtalkDialogParams } from "../show-dialog-thingtalk"; -import { PolymerChangedEvent } from "../../../../polymer-types"; -import { haStyleDialog, haStyle } from "../../../../resources/styles"; -import { HomeAssistant } from "../../../../types"; -// tslint:disable-next-line -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { AutomationConfig } from "../../../../data/automation"; -// tslint:disable-next-line -import { PlaceholderValues } from "./ha-thingtalk-placeholders"; +import type { AutomationConfig } from "../../../../data/automation"; import { convertThingTalk } from "../../../../data/cloud"; +import type { PolymerChangedEvent } from "../../../../polymer-types"; +import { haStyle, haStyleDialog } from "../../../../resources/styles"; +import type { HomeAssistant } from "../../../../types"; +import type { ThingtalkDialogParams } from "../show-dialog-thingtalk"; +import "./ha-thingtalk-placeholders"; +import type { PlaceholderValues } from "./ha-thingtalk-placeholders"; export interface Placeholder { name: string; @@ -41,15 +38,21 @@ export interface PlaceholderContainer { @customElement("ha-dialog-thinktalk") class DialogThingtalk extends LitElement { @property() public hass!: HomeAssistant; + @property() private _error?: string; + @property() private _params?: ThingtalkDialogParams; - @property() private _submitting: boolean = false; + + @property() private _submitting = false; + @property() private _opened = false; + @property() private _placeholders?: PlaceholderContainer; @query("#input") private _input?: PaperInputElement; private _value!: string; + private _config!: Partial; public showDialog(params: ThingtalkDialogParams): void { @@ -83,11 +86,7 @@ class DialogThingtalk extends LitElement { >

    Create a new automation

    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""} Type below what this automation should do, and we will try to convert it into a Home Assistant automation. (only English is supported for now)

    diff --git a/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts b/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts index da21508a6d..ea937d71a3 100644 --- a/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts +++ b/src/panels/config/automation/thingtalk/ha-thingtalk-placeholders.ts @@ -1,34 +1,32 @@ +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - html, - TemplateResult, - property, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../../../../components/device/ha-area-devices-picker"; - -import { HomeAssistant } from "../../../../types"; -import { PolymerChangedEvent } from "../../../../polymer-types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { haStyleDialog } from "../../../../resources/styles"; -import { PlaceholderContainer, Placeholder } from "./dialog-thingtalk"; -import { SubscribeMixin } from "../../../../mixins/subscribe-mixin"; -import { subscribeEntityRegistry } from "../../../../data/entity_registry"; import { computeDomain } from "../../../../common/entity/compute_domain"; -import { HassEntity } from "home-assistant-js-websocket"; -import { getPath, applyPatch } from "../../../../common/util/patch"; +import { applyPatch, getPath } from "../../../../common/util/patch"; +import "../../../../components/device/ha-area-devices-picker"; import { - subscribeAreaRegistry, AreaRegistryEntry, + subscribeAreaRegistry, } from "../../../../data/area_registry"; import { - subscribeDeviceRegistry, DeviceRegistryEntry, + subscribeDeviceRegistry, } from "../../../../data/device_registry"; +import { subscribeEntityRegistry } from "../../../../data/entity_registry"; +import { SubscribeMixin } from "../../../../mixins/subscribe-mixin"; +import { PolymerChangedEvent } from "../../../../polymer-types"; +import { haStyleDialog } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; +import { Placeholder, PlaceholderContainer } from "./dialog-thingtalk"; declare global { // for fire event @@ -64,15 +62,25 @@ interface DeviceEntitiesLookup { @customElement("ha-thingtalk-placeholders") export class ThingTalkPlaceholders extends SubscribeMixin(LitElement) { @property() public hass!: HomeAssistant; + @property() public opened!: boolean; + public skip!: () => void; + @property() public placeholders!: PlaceholderContainer; + @property() private _error?: string; + private _deviceEntityLookup: DeviceEntitiesLookup = {}; + @property() private _extraInfo: ExtraInfo = {}; + @property() private _placeholderValues: PlaceholderValues = {}; + private _devices?: DeviceRegistryEntry[]; + private _areas?: AreaRegistryEntry[]; + private _search = false; public hassSubscribe() { @@ -122,11 +130,7 @@ export class ThingTalkPlaceholders extends SubscribeMixin(LitElement) { >

    Great! Now we need to link some devices.

    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""} ${Object.entries(this.placeholders).map( ([type, placeholders]) => html` @@ -200,7 +204,8 @@ export class ThingTalkPlaceholders extends SubscribeMixin(LitElement) { ` : ""} `; - } else if (placeholder.fields.includes("entity_id")) { + } + if (placeholder.fields.includes("entity_id")) { return html` ${placeholder.domains}
    ${placeholder.fields.map( - (field) => - html` - ${field}
    - ` + (field) => html` ${field}
    ` )}
    `; diff --git a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts index 0cce5fa0be..8de3792209 100644 --- a/src/panels/config/automation/trigger/ha-automation-trigger-row.ts +++ b/src/panels/config/automation/trigger/ha-automation-trigger-row.ts @@ -1,8 +1,7 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; -// tslint:disable-next-line -import { PaperListboxElement } from "@polymer/paper-listbox/paper-listbox"; +import type { PaperListboxElement } from "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-menu-button/paper-menu-button"; import { css, @@ -15,16 +14,16 @@ import { import { dynamicElement } from "../../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-card"; -import { HomeAssistant } from "../../../../types"; +import type { Trigger } from "../../../../data/automation"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; - +import type { HomeAssistant } from "../../../../types"; import "./types/ha-automation-trigger-device"; import "./types/ha-automation-trigger-event"; -import "./types/ha-automation-trigger-state"; import "./types/ha-automation-trigger-geo_location"; import "./types/ha-automation-trigger-homeassistant"; import "./types/ha-automation-trigger-mqtt"; import "./types/ha-automation-trigger-numeric_state"; +import "./types/ha-automation-trigger-state"; import "./types/ha-automation-trigger-sun"; import "./types/ha-automation-trigger-template"; import "./types/ha-automation-trigger-time"; @@ -32,8 +31,6 @@ import "./types/ha-automation-trigger-time_pattern"; import "./types/ha-automation-trigger-webhook"; import "./types/ha-automation-trigger-zone"; -import { Trigger } from "../../../../data/automation"; - const OPTIONS = [ "device", "event", @@ -79,7 +76,9 @@ export const handleChangeEvent = (element: TriggerElement, ev: CustomEvent) => { @customElement("ha-automation-trigger-row") export default class HaAutomationTriggerRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: Trigger; + @property() private _yamlMode = false; protected render() { diff --git a/src/panels/config/automation/trigger/ha-automation-trigger.ts b/src/panels/config/automation/trigger/ha-automation-trigger.ts index 407b495743..39d8467a1e 100644 --- a/src/panels/config/automation/trigger/ha-automation-trigger.ts +++ b/src/panels/config/automation/trigger/ha-automation-trigger.ts @@ -1,24 +1,23 @@ +import "@material/mwc-button"; import { - LitElement, + css, + CSSResult, customElement, html, + LitElement, property, - CSSResult, - css, } from "lit-element"; -import "@material/mwc-button"; -import "../../../../components/ha-card"; - import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/ha-card"; +import { Trigger } from "../../../../data/automation"; import { HomeAssistant } from "../../../../types"; - import "./ha-automation-trigger-row"; import { HaDeviceTrigger } from "./types/ha-automation-trigger-device"; -import { Trigger } from "../../../../data/automation"; @customElement("ha-automation-trigger") export default class HaAutomationTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public triggers!: Trigger[]; protected render() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-device.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-device.ts index 2dae62ad1b..bc41a6da57 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-device.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-device.ts @@ -1,22 +1,25 @@ +import { customElement, html, LitElement, property } from "lit-element"; +import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/device/ha-device-picker"; import "../../../../../components/device/ha-device-trigger-picker"; import "../../../../../components/ha-form/ha-form"; - import { - fetchDeviceTriggerCapabilities, deviceAutomationsEqual, DeviceTrigger, + fetchDeviceTriggerCapabilities, } from "../../../../../data/device_automation"; -import { LitElement, customElement, property, html } from "lit-element"; -import { fireEvent } from "../../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../../types"; @customElement("ha-automation-trigger-device") export class HaDeviceTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: DeviceTrigger; + @property() private _deviceId?: string; + @property() private _capabilities?; + private _origTrigger?: DeviceTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-event.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-event.ts index dfc130bc42..c8ba2e984e 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-event.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-event.ts @@ -1,18 +1,18 @@ import "@polymer/paper-input/paper-input"; -import "../../../../../components/ha-yaml-editor"; - -import { LitElement, property, customElement } from "lit-element"; -import { - TriggerElement, - handleChangeEvent, -} from "../ha-automation-trigger-row"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, LitElement, property } from "lit-element"; import { html } from "lit-html"; +import "../../../../../components/ha-yaml-editor"; import { EventTrigger } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; +import { + handleChangeEvent, + TriggerElement, +} from "../ha-automation-trigger-row"; @customElement("ha-automation-trigger-event") export class HaEventTrigger extends LitElement implements TriggerElement { @property() public hass!: HomeAssistant; + @property() public trigger!: EventTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-geo_location.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-geo_location.ts index 1fadc057c9..ef5f470101 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-geo_location.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-geo_location.ts @@ -1,17 +1,17 @@ import "@polymer/paper-radio-button/paper-radio-button"; import "@polymer/paper-radio-group/paper-radio-group"; -// tslint:disable-next-line -import { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; -import "../../../../../components/entity/ha-entity-picker"; -import { LitElement, customElement, property, html } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; -import { handleChangeEvent } from "../ha-automation-trigger-row"; +import type { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import { GeoLocationTrigger } from "../../../../../data/automation"; +import "../../../../../components/entity/ha-entity-picker"; +import type { GeoLocationTrigger } from "../../../../../data/automation"; +import type { HomeAssistant } from "../../../../../types"; +import { handleChangeEvent } from "../ha-automation-trigger-row"; @customElement("ha-automation-trigger-geo_location") export default class HaGeolocationTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: GeoLocationTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-homeassistant.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-homeassistant.ts index 2f7d6064ef..e6e2136cca 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-homeassistant.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-homeassistant.ts @@ -1,15 +1,15 @@ import "@polymer/paper-radio-button/paper-radio-button"; import "@polymer/paper-radio-group/paper-radio-group"; -// tslint:disable-next-line -import { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; -import { LitElement, html, property, customElement } from "lit-element"; +import type { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../../types"; -import { HassTrigger } from "../../../../../data/automation"; +import type { HassTrigger } from "../../../../../data/automation"; +import type { HomeAssistant } from "../../../../../types"; @customElement("ha-automation-trigger-homeassistant") export default class HaHassTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: HassTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-mqtt.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-mqtt.ts index 51dde6bc27..2f55a97a9a 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-mqtt.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-mqtt.ts @@ -1,15 +1,16 @@ import "@polymer/paper-input/paper-input"; -import { LitElement, customElement, property, html } from "lit-element"; +import { customElement, html, LitElement, property } from "lit-element"; +import { MqttTrigger } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent, TriggerElement, } from "../ha-automation-trigger-row"; -import { MqttTrigger } from "../../../../../data/automation"; @customElement("ha-automation-trigger-mqtt") export class HaMQTTTrigger extends LitElement implements TriggerElement { @property() public hass!: HomeAssistant; + @property() public trigger!: MqttTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts index aac65f7661..8c3b151a2b 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-numeric_state.ts @@ -1,16 +1,16 @@ import "@polymer/paper-input/paper-input"; -import "../../../../../components/ha-textarea"; - -import "../../../../../components/entity/ha-entity-picker"; -import { LitElement, html, customElement, property } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; +import "../../../../../components/entity/ha-entity-picker"; +import "../../../../../components/ha-textarea"; +import { ForDict, NumericStateTrigger } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent } from "../ha-automation-trigger-row"; -import { NumericStateTrigger, ForDict } from "../../../../../data/automation"; @customElement("ha-automation-trigger-numeric_state") export default class HaNumericStateTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: NumericStateTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts index 2f93511553..02a9f03c54 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-state.ts @@ -2,17 +2,18 @@ import "@polymer/paper-input/paper-input"; import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/entity/ha-entity-picker"; +import { ForDict, StateTrigger } from "../../../../../data/automation"; +import { PolymerChangedEvent } from "../../../../../polymer-types"; import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent, TriggerElement, } from "../ha-automation-trigger-row"; -import { PolymerChangedEvent } from "../../../../../polymer-types"; -import { StateTrigger, ForDict } from "../../../../../data/automation"; @customElement("ha-automation-trigger-state") export class HaStateTrigger extends LitElement implements TriggerElement { @property() public hass!: HomeAssistant; + @property() public trigger!: StateTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-sun.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-sun.ts index 5bd0ea9e30..349f391842 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-sun.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-sun.ts @@ -1,20 +1,20 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-radio-button/paper-radio-button"; import "@polymer/paper-radio-group/paper-radio-group"; -// tslint:disable-next-line -import { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; -import { LitElement, customElement, property, html } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; +import type { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; +import { customElement, html, LitElement, property } from "lit-element"; +import { fireEvent } from "../../../../../common/dom/fire_event"; +import type { SunTrigger } from "../../../../../data/automation"; +import type { HomeAssistant } from "../../../../../types"; import { handleChangeEvent, TriggerElement, } from "../ha-automation-trigger-row"; -import { fireEvent } from "../../../../../common/dom/fire_event"; -import { SunTrigger } from "../../../../../data/automation"; @customElement("ha-automation-trigger-sun") export class HaSunTrigger extends LitElement implements TriggerElement { @property() public hass!: HomeAssistant; + @property() public trigger!: SunTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-template.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-template.ts index f321750103..fb5622c4b5 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-template.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-template.ts @@ -1,12 +1,13 @@ +import { customElement, html, LitElement, property } from "lit-element"; import "../../../../../components/ha-textarea"; -import { LitElement, property, html, customElement } from "lit-element"; +import { TemplateTrigger } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent } from "../ha-automation-trigger-row"; -import { TemplateTrigger } from "../../../../../data/automation"; @customElement("ha-automation-trigger-template") export class HaTemplateTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: TemplateTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-time.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-time.ts index 1a4de2776c..f308b59187 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-time.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-time.ts @@ -1,15 +1,16 @@ import "@polymer/paper-input/paper-input"; -import { LitElement, html, property, customElement } from "lit-element"; +import { customElement, html, LitElement, property } from "lit-element"; +import { TimeTrigger } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent, TriggerElement, } from "../ha-automation-trigger-row"; -import { TimeTrigger } from "../../../../../data/automation"; @customElement("ha-automation-trigger-time") export class HaTimeTrigger extends LitElement implements TriggerElement { @property() public hass!: HomeAssistant; + @property() public trigger!: TimeTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-time_pattern.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-time_pattern.ts index c15352abbb..db0b0dc906 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-time_pattern.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-time_pattern.ts @@ -1,15 +1,16 @@ import "@polymer/paper-input/paper-input"; -import { LitElement, property, html, customElement } from "lit-element"; -import { - TriggerElement, - handleChangeEvent, -} from "../ha-automation-trigger-row"; -import { HomeAssistant } from "../../../../../types"; +import { customElement, html, LitElement, property } from "lit-element"; import { TimePatternTrigger } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; +import { + handleChangeEvent, + TriggerElement, +} from "../ha-automation-trigger-row"; @customElement("ha-automation-trigger-time_pattern") export class HaTimePatternTrigger extends LitElement implements TriggerElement { @property() public hass!: HomeAssistant; + @property() public trigger!: TimePatternTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts index 0456665d4c..0ca2a1fe65 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-webhook.ts @@ -1,12 +1,13 @@ import "@polymer/paper-input/paper-input"; -import { LitElement, customElement, property, html } from "lit-element"; +import { customElement, html, LitElement, property } from "lit-element"; +import { WebhookTrigger } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; import { handleChangeEvent } from "../ha-automation-trigger-row"; -import { WebhookTrigger } from "../../../../../data/automation"; @customElement("ha-automation-trigger-webhook") export class HaWebhookTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: WebhookTrigger; public static get defaultConfig() { diff --git a/src/panels/config/automation/trigger/types/ha-automation-trigger-zone.ts b/src/panels/config/automation/trigger/types/ha-automation-trigger-zone.ts index 935ed86dd8..2b658e8046 100644 --- a/src/panels/config/automation/trigger/types/ha-automation-trigger-zone.ts +++ b/src/panels/config/automation/trigger/types/ha-automation-trigger-zone.ts @@ -1,16 +1,14 @@ import "@polymer/paper-radio-button/paper-radio-button"; import "@polymer/paper-radio-group/paper-radio-group"; -// tslint:disable-next-line -import { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; -import "../../../../../components/entity/ha-entity-picker"; - -import { hasLocation } from "../../../../../common/entity/has_location"; -import { computeStateDomain } from "../../../../../common/entity/compute_state_domain"; -import { LitElement, property, html, customElement } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; -import { PolymerChangedEvent } from "../../../../../polymer-types"; +import type { PaperRadioGroupElement } from "@polymer/paper-radio-group/paper-radio-group"; +import { customElement, html, LitElement, property } from "lit-element"; import { fireEvent } from "../../../../../common/dom/fire_event"; -import { ZoneTrigger } from "../../../../../data/automation"; +import { computeStateDomain } from "../../../../../common/entity/compute_state_domain"; +import { hasLocation } from "../../../../../common/entity/has_location"; +import "../../../../../components/entity/ha-entity-picker"; +import type { ZoneTrigger } from "../../../../../data/automation"; +import type { PolymerChangedEvent } from "../../../../../polymer-types"; +import type { HomeAssistant } from "../../../../../types"; function zoneAndLocationFilter(stateObj) { return hasLocation(stateObj) && computeStateDomain(stateObj) !== "zone"; @@ -19,6 +17,7 @@ function zoneAndLocationFilter(stateObj) { @customElement("ha-automation-trigger-zone") export class HaZoneTrigger extends LitElement { @property() public hass!: HomeAssistant; + @property() public trigger!: ZoneTrigger; public static get defaultConfig() { diff --git a/src/panels/config/cloud/account/cloud-account.js b/src/panels/config/cloud/account/cloud-account.js index 765d1a9f22..5f47122819 100644 --- a/src/panels/config/cloud/account/cloud-account.js +++ b/src/panels/config/cloud/account/cloud-account.js @@ -1,23 +1,21 @@ import "@material/mwc-button"; import "@polymer/paper-item/paper-item-body"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../../components/ha-card"; +import { formatDateTime } from "../../../../common/datetime/format_date_time"; import "../../../../components/buttons/ha-call-api-button"; +import "../../../../components/ha-card"; +import { fetchCloudSubscriptionInfo } from "../../../../data/cloud"; import "../../../../layouts/hass-subpage"; +import { EventsMixin } from "../../../../mixins/events-mixin"; +import LocalizeMixin from "../../../../mixins/localize-mixin"; import "../../../../resources/ha-style"; import "../../ha-config-section"; -import "./cloud-webhooks"; import "./cloud-alexa-pref"; import "./cloud-google-pref"; import "./cloud-remote-pref"; - -import { EventsMixin } from "../../../../mixins/events-mixin"; -import { fetchCloudSubscriptionInfo } from "../../../../data/cloud"; - -import { formatDateTime } from "../../../../common/datetime/format_date_time"; -import LocalizeMixin from "../../../../mixins/localize-mixin"; +import "./cloud-webhooks"; /* * @appliesMixin EventsMixin diff --git a/src/panels/config/cloud/account/cloud-alexa-pref.ts b/src/panels/config/cloud/account/cloud-alexa-pref.ts index 45d2deee12..bedd66fe3e 100644 --- a/src/panels/config/cloud/account/cloud-alexa-pref.ts +++ b/src/panels/config/cloud/account/cloud-alexa-pref.ts @@ -1,26 +1,25 @@ +import "@material/mwc-button"; import { + css, + CSSResult, html, LitElement, - TemplateResult, - CSSResult, - css, property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - +import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-card"; import "../../../../components/ha-switch"; - -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../../../components/ha-switch"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../types"; -import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud"; +import type { HaSwitch } from "../../../../components/ha-switch"; import { syncCloudAlexaEntities } from "../../../../data/alexa"; +import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud"; +import type { HomeAssistant } from "../../../../types"; export class CloudAlexaPref extends LitElement { @property() public hass?: HomeAssistant; + @property() public cloudStatus?: CloudStatusLoggedIn; + @property() private _syncing = false; protected render(): TemplateResult { diff --git a/src/panels/config/cloud/account/cloud-google-pref.ts b/src/panels/config/cloud/account/cloud-google-pref.ts index 8cd4af956e..f701a27e8c 100644 --- a/src/panels/config/cloud/account/cloud-google-pref.ts +++ b/src/panels/config/cloud/account/cloud-google-pref.ts @@ -1,27 +1,25 @@ +import "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { + css, + CSSResult, html, LitElement, - TemplateResult, - CSSResult, - css, property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "../../../../components/buttons/ha-call-api-button"; - -import "../../../../components/ha-card"; -import "../../../../components/ha-switch"; - -// tslint:disable-next-line -import { HaSwitch } from "../../../../components/ha-switch"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../types"; +import "../../../../components/buttons/ha-call-api-button"; +import "../../../../components/ha-card"; +import type { HaSwitch } from "../../../../components/ha-switch"; import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud"; -import { PaperInputElement } from "@polymer/paper-input/paper-input"; +import type { HomeAssistant } from "../../../../types"; import { showSaveSuccessToast } from "../../../../util/toast-saved-success"; export class CloudGooglePref extends LitElement { @property() public hass?: HomeAssistant; + @property() public cloudStatus?: CloudStatusLoggedIn; protected render(): TemplateResult { diff --git a/src/panels/config/cloud/account/cloud-remote-pref.ts b/src/panels/config/cloud/account/cloud-remote-pref.ts index 3ea34f0797..7455d1d9bc 100644 --- a/src/panels/config/cloud/account/cloud-remote-pref.ts +++ b/src/panels/config/cloud/account/cloud-remote-pref.ts @@ -1,32 +1,31 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - CSSResult, - css, - property, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-item/paper-item-body"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-card"; import "../../../../components/ha-switch"; - -// tslint:disable-next-line -import { HaSwitch } from "../../../../components/ha-switch"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { HomeAssistant } from "../../../../types"; +// eslint-disable-next-line +import type { HaSwitch } from "../../../../components/ha-switch"; import { + CloudStatusLoggedIn, connectCloudRemote, disconnectCloudRemote, - CloudStatusLoggedIn, } from "../../../../data/cloud"; +import type { HomeAssistant } from "../../../../types"; import { showCloudCertificateDialog } from "../dialog-cloud-certificate/show-dialog-cloud-certificate"; @customElement("cloud-remote-pref") export class CloudRemotePref extends LitElement { @property() public hass?: HomeAssistant; + @property() public cloudStatus?: CloudStatusLoggedIn; protected render(): TemplateResult { diff --git a/src/panels/config/cloud/account/cloud-webhooks.ts b/src/panels/config/cloud/account/cloud-webhooks.ts index 8aed1c75ae..58a9053a91 100644 --- a/src/panels/config/cloud/account/cloud-webhooks.ts +++ b/src/panels/config/cloud/account/cloud-webhooks.ts @@ -1,26 +1,28 @@ -import { html, LitElement, PropertyValues, property } from "lit-element"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-spinner/paper-spinner"; - +import { html, LitElement, property, PropertyValues } from "lit-element"; import "../../../../components/ha-card"; import "../../../../components/ha-switch"; - -import { HomeAssistant, WebhookError } from "../../../../types"; -import { Webhook, fetchWebhooks } from "../../../../data/webhook"; import { + CloudStatusLoggedIn, + CloudWebhook, createCloudhook, deleteCloudhook, - CloudWebhook, - CloudStatusLoggedIn, } from "../../../../data/cloud"; +import { fetchWebhooks, Webhook } from "../../../../data/webhook"; +import { HomeAssistant, WebhookError } from "../../../../types"; import { showManageCloudhookDialog } from "../dialog-manage-cloudhook/show-dialog-manage-cloudhook"; export class CloudWebhooks extends LitElement { @property() public hass?: HomeAssistant; + @property() public cloudStatus?: CloudStatusLoggedIn; + @property() private _cloudHooks?: { [webhookId: string]: CloudWebhook }; + @property() private _localHooks?: Webhook[]; + @property() private _progress: string[]; constructor() { @@ -128,9 +130,7 @@ export class CloudWebhooks extends LitElement { )} ` - : html` - - `} + : html` `}
    ` ); diff --git a/src/panels/config/cloud/alexa/cloud-alexa.ts b/src/panels/config/cloud/alexa/cloud-alexa.ts index d1980bcea6..1ef8340a2a 100644 --- a/src/panels/config/cloud/alexa/cloud-alexa.ts +++ b/src/panels/config/cloud/alexa/cloud-alexa.ts @@ -1,42 +1,38 @@ -import { - LitElement, - TemplateResult, - html, - CSSResult, - css, - customElement, - property, -} from "lit-element"; import "@polymer/paper-icon-button"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import memoizeOne from "memoize-one"; - -import "../../../../layouts/hass-subpage"; -import "../../../../layouts/hass-loading-screen"; -import "../../../../components/ha-card"; -import "../../../../components/ha-switch"; -import "../../../../components/entity/state-info"; - -import { HomeAssistant } from "../../../../types"; -import { - CloudStatusLoggedIn, - CloudPreferences, - updateCloudAlexaEntityConfig, - AlexaEntityConfig, -} from "../../../../data/cloud"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import { computeDomain } from "../../../../common/entity/compute_domain"; +import { computeStateName } from "../../../../common/entity/compute_state_name"; import { + EntityFilter, generateFilter, isEmptyFilter, - EntityFilter, } from "../../../../common/entity/entity_filter"; import { compare } from "../../../../common/string/compare"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler"; +import "../../../../components/entity/state-info"; +import "../../../../components/ha-card"; +import "../../../../components/ha-switch"; +import type { HaSwitch } from "../../../../components/ha-switch"; import { AlexaEntity, fetchCloudAlexaEntities } from "../../../../data/alexa"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../../../components/ha-switch"; - -import { computeStateName } from "../../../../common/entity/compute_state_name"; -import { computeDomain } from "../../../../common/entity/compute_domain"; +import { + AlexaEntityConfig, + CloudPreferences, + CloudStatusLoggedIn, + updateCloudAlexaEntityConfig, +} from "../../../../data/cloud"; +import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler"; +import "../../../../layouts/hass-loading-screen"; +import "../../../../layouts/hass-subpage"; +import type { HomeAssistant } from "../../../../types"; const DEFAULT_CONFIG_EXPOSE = true; const IGNORE_INTERFACES = ["Alexa.EndpointHealth"]; @@ -59,8 +55,11 @@ class CloudAlexa extends LitElement { @property() private _entityConfigs: CloudPreferences["alexa_entity_configs"] = {}; + private _popstateSyncAttached = false; + private _popstateReloadStatusAttached = false; + private _isInitialExposed?: Set; private _getEntityFilterFunc = memoizeOne((filter: EntityFilter) => @@ -74,9 +73,7 @@ class CloudAlexa extends LitElement { protected render(): TemplateResult { if (this._entities === undefined) { - return html` - - `; + return html` `; } const emptyFilter = isEmptyFilter(this.cloudStatus.alexa_entities); const filterFunc = this._getEntityFilterFunc( @@ -152,13 +149,7 @@ class CloudAlexa extends LitElement { "ui.panel.config.cloud.alexa.title" )}"> - ${selected}${ - !this.narrow - ? html` - selected - ` - : "" - } + ${selected}${!this.narrow ? html` selected ` : ""} ${ emptyFilter diff --git a/src/panels/config/cloud/dialog-cloud-certificate/dialog-cloud-certificate.ts b/src/panels/config/cloud/dialog-cloud-certificate/dialog-cloud-certificate.ts index 89df7f4812..92ca9af54c 100644 --- a/src/panels/config/cloud/dialog-cloud-certificate/dialog-cloud-certificate.ts +++ b/src/panels/config/cloud/dialog-cloud-certificate/dialog-cloud-certificate.ts @@ -1,22 +1,18 @@ +import "@material/mwc-button"; import { - html, - LitElement, css, CSSResult, customElement, + html, + LitElement, property, } from "lit-element"; - -import "@material/mwc-button"; -import "../../../../components/dialog/ha-paper-dialog"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; - -import { HomeAssistant } from "../../../../types"; -import { haStyle } from "../../../../resources/styles"; -import { CloudCertificateParams as CloudCertificateDialogParams } from "./show-dialog-cloud-certificate"; import { formatDateTime } from "../../../../common/datetime/format_date_time"; +import "../../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import { haStyle } from "../../../../resources/styles"; +import type { HomeAssistant } from "../../../../types"; +import type { CloudCertificateParams as CloudCertificateDialogParams } from "./show-dialog-cloud-certificate"; @customElement("dialog-cloud-certificate") class DialogCloudCertificate extends LitElement { diff --git a/src/panels/config/cloud/dialog-manage-cloudhook/dialog-manage-cloudhook.ts b/src/panels/config/cloud/dialog-manage-cloudhook/dialog-manage-cloudhook.ts index b619490d2c..2e54752063 100644 --- a/src/panels/config/cloud/dialog-manage-cloudhook/dialog-manage-cloudhook.ts +++ b/src/panels/config/cloud/dialog-manage-cloudhook/dialog-manage-cloudhook.ts @@ -1,24 +1,20 @@ -import { html, LitElement, css, CSSResult, property } from "lit-element"; - import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; +import { css, CSSResult, html, LitElement, property } from "lit-element"; import "../../../../components/dialog/ha-paper-dialog"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; -// tslint:disable-next-line -import { PaperInputElement } from "@polymer/paper-input/paper-input"; - -import { HomeAssistant } from "../../../../types"; -import { haStyle } from "../../../../resources/styles"; -import { WebhookDialogParams } from "./show-dialog-manage-cloudhook"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; +import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; +import { WebhookDialogParams } from "./show-dialog-manage-cloudhook"; const inputLabel = "Public URL – Click to copy to clipboard"; export class DialogManageCloudhook extends LitElement { protected hass?: HomeAssistant; + @property() private _params?: WebhookDialogParams; public async showDialog(params: WebhookDialogParams) { diff --git a/src/panels/config/cloud/dialog-manage-cloudhook/show-dialog-manage-cloudhook.ts b/src/panels/config/cloud/dialog-manage-cloudhook/show-dialog-manage-cloudhook.ts index a5951e23b7..bba3c83be6 100644 --- a/src/panels/config/cloud/dialog-manage-cloudhook/show-dialog-manage-cloudhook.ts +++ b/src/panels/config/cloud/dialog-manage-cloudhook/show-dialog-manage-cloudhook.ts @@ -1,6 +1,6 @@ import { fireEvent } from "../../../../common/dom/fire_event"; -import { Webhook } from "../../../../data/webhook"; import { CloudWebhook } from "../../../../data/cloud"; +import { Webhook } from "../../../../data/webhook"; export interface WebhookDialogParams { webhook: Webhook; diff --git a/src/panels/config/cloud/forgot-password/cloud-forgot-password.js b/src/panels/config/cloud/forgot-password/cloud-forgot-password.js index b036f3bf65..656db3782c 100644 --- a/src/panels/config/cloud/forgot-password/cloud-forgot-password.js +++ b/src/panels/config/cloud/forgot-password/cloud-forgot-password.js @@ -1,13 +1,14 @@ import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../../components/ha-card"; import "../../../../components/buttons/ha-progress-button"; +import "../../../../components/ha-card"; import "../../../../layouts/hass-subpage"; -import "../../../../resources/ha-style"; import { EventsMixin } from "../../../../mixins/events-mixin"; import LocalizeMixin from "../../../../mixins/localize-mixin"; +import "../../../../resources/ha-style"; + /* * @appliesMixin EventsMixin * @appliesMixin LocalizeMixin diff --git a/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts b/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts index d964d152f0..fa38b2b254 100644 --- a/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts +++ b/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts @@ -1,47 +1,43 @@ +import "@polymer/paper-icon-button"; import { - LitElement, - TemplateResult, - html, - CSSResult, css, + CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; import memoizeOne from "memoize-one"; -import "@polymer/paper-icon-button"; - -import "../../../../layouts/hass-subpage"; -import "../../../../layouts/hass-loading-screen"; -import "../../../../components/ha-card"; -import "../../../../components/entity/state-info"; -import "../../../../components/ha-switch"; - -import { HomeAssistant } from "../../../../types"; -import { - CloudStatusLoggedIn, - CloudPreferences, - updateCloudGoogleEntityConfig, - cloudSyncGoogleAssistant, - GoogleEntityConfig, -} from "../../../../data/cloud"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import { computeDomain } from "../../../../common/entity/compute_domain"; +import { computeStateName } from "../../../../common/entity/compute_state_name"; import { + EntityFilter, generateFilter, isEmptyFilter, - EntityFilter, } from "../../../../common/entity/entity_filter"; import { compare } from "../../../../common/string/compare"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { showToast } from "../../../../util/toast"; -import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler"; +import "../../../../components/entity/state-info"; +import "../../../../components/ha-card"; +import "../../../../components/ha-switch"; +import type { HaSwitch } from "../../../../components/ha-switch"; +import { + CloudPreferences, + CloudStatusLoggedIn, + cloudSyncGoogleAssistant, + GoogleEntityConfig, + updateCloudGoogleEntityConfig, +} from "../../../../data/cloud"; import { - GoogleEntity, fetchCloudGoogleEntities, + GoogleEntity, } from "../../../../data/google_assistant"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../../../components/ha-switch"; - -import { computeStateName } from "../../../../common/entity/compute_state_name"; -import { computeDomain } from "../../../../common/entity/compute_domain"; +import { showDomainTogglerDialog } from "../../../../dialogs/domain-toggler/show-dialog-domain-toggler"; +import "../../../../layouts/hass-loading-screen"; +import "../../../../layouts/hass-subpage"; +import type { HomeAssistant } from "../../../../types"; +import { showToast } from "../../../../util/toast"; const DEFAULT_CONFIG_EXPOSE = true; @@ -53,13 +49,20 @@ const configIsExposed = (config: GoogleEntityConfig) => @customElement("cloud-google-assistant") class CloudGoogleAssistant extends LitElement { @property() public hass!: HomeAssistant; + @property() public cloudStatus!: CloudStatusLoggedIn; + @property() public narrow!: boolean; + @property() private _entities?: GoogleEntity[]; + @property() private _entityConfigs: CloudPreferences["google_entity_configs"] = {}; + private _popstateSyncAttached = false; + private _popstateReloadStatusAttached = false; + private _isInitialExposed?: Set; private _getEntityFilterFunc = memoizeOne((filter: EntityFilter) => @@ -73,9 +76,7 @@ class CloudGoogleAssistant extends LitElement { protected render(): TemplateResult { if (this._entities === undefined) { - return html` - - `; + return html` `; } const emptyFilter = isEmptyFilter(this.cloudStatus.google_entities); const filterFunc = this._getEntityFilterFunc( @@ -161,13 +162,7 @@ class CloudGoogleAssistant extends LitElement { "ui.panel.config.cloud.google.title" )}"> - ${selected}${ - !this.narrow - ? html` - selected - ` - : "" - } + ${selected}${!this.narrow ? html` selected ` : ""} ${ emptyFilter diff --git a/src/panels/config/cloud/ha-config-cloud.ts b/src/panels/config/cloud/ha-config-cloud.ts index 986f206c22..93d4bef9fd 100644 --- a/src/panels/config/cloud/ha-config-cloud.ts +++ b/src/panels/config/cloud/ha-config-cloud.ts @@ -1,15 +1,15 @@ -import "./account/cloud-account"; -import "./login/cloud-login"; +import { PolymerElement } from "@polymer/polymer"; +import { customElement, property } from "lit-element"; +import { navigate } from "../../../common/navigate"; +import { CloudStatus } from "../../../data/cloud"; import { HassRouterPage, RouterOptions, } from "../../../layouts/hass-router-page"; -import { property, customElement } from "lit-element"; -import { HomeAssistant, Route } from "../../../types"; -import { navigate } from "../../../common/navigate"; -import { CloudStatus } from "../../../data/cloud"; import { PolymerChangedEvent } from "../../../polymer-types"; -import { PolymerElement } from "@polymer/polymer"; +import { HomeAssistant, Route } from "../../../types"; +import "./account/cloud-account"; +import "./login/cloud-login"; const LOGGED_IN_URLS = ["account", "google-assistant", "alexa"]; const NOT_LOGGED_IN_URLS = ["login", "register", "forgot-password"]; @@ -17,9 +17,13 @@ const NOT_LOGGED_IN_URLS = ["login", "register", "forgot-password"]; @customElement("ha-config-cloud") class HaConfigCloud extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() public cloudStatus!: CloudStatus; protected routerOptions: RouterOptions = { @@ -32,10 +36,8 @@ class HaConfigCloud extends HassRouterPage { if (!LOGGED_IN_URLS.includes(page)) { return "account"; } - } else { - if (!NOT_LOGGED_IN_URLS.includes(page)) { - return "login"; - } + } else if (!NOT_LOGGED_IN_URLS.includes(page)) { + return "login"; } return undefined; }, @@ -76,8 +78,11 @@ class HaConfigCloud extends HassRouterPage { }; @property() private _flashMessage = ""; + @property() private _loginEmail = ""; + private _resolveCloudStatusLoaded!: () => void; + private _cloudStatusLoaded = new Promise((resolve) => { this._resolveCloudStatusLoaded = resolve; }); diff --git a/src/panels/config/cloud/login/cloud-login.js b/src/panels/config/cloud/login/cloud-login.js index d45f8daaf4..5f271c7987 100644 --- a/src/panels/config/cloud/login/cloud-login.js +++ b/src/panels/config/cloud/login/cloud-login.js @@ -1,22 +1,22 @@ import "@material/mwc-button"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-ripple/paper-ripple"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../../components/ha-card"; import "../../../../components/buttons/ha-progress-button"; -import "../../../../layouts/hass-subpage"; -import "../../../../resources/ha-style"; - -import "../../ha-config-section"; -import { EventsMixin } from "../../../../mixins/events-mixin"; -import NavigateMixin from "../../../../mixins/navigate-mixin"; +import "../../../../components/ha-card"; import "../../../../components/ha-icon-next"; +import "../../../../layouts/hass-subpage"; +import { EventsMixin } from "../../../../mixins/events-mixin"; import LocalizeMixin from "../../../../mixins/localize-mixin"; +import NavigateMixin from "../../../../mixins/navigate-mixin"; +import "../../../../resources/ha-style"; +import "../../ha-config-section"; + /* * @appliesMixin NavigateMixin * @appliesMixin EventsMixin diff --git a/src/panels/config/cloud/register/cloud-register.js b/src/panels/config/cloud/register/cloud-register.js index e82ecc8806..90d43735f5 100644 --- a/src/panels/config/cloud/register/cloud-register.js +++ b/src/panels/config/cloud/register/cloud-register.js @@ -1,14 +1,14 @@ import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../../components/ha-card"; import "../../../../components/buttons/ha-progress-button"; +import "../../../../components/ha-card"; import "../../../../layouts/hass-subpage"; -import "../../../../resources/ha-style"; -import "../../ha-config-section"; import { EventsMixin } from "../../../../mixins/events-mixin"; import LocalizeMixin from "../../../../mixins/localize-mixin"; +import "../../../../resources/ha-style"; +import "../../ha-config-section"; /* * @appliesMixin EventsMixin diff --git a/src/panels/config/core/ha-config-core-form.ts b/src/panels/config/core/ha-config-core-form.ts index 5e16bce60d..57dc3327d9 100644 --- a/src/panels/config/core/ha-config-core-form.ts +++ b/src/panels/config/core/ha-config-core-form.ts @@ -1,25 +1,24 @@ -import { - LitElement, - customElement, - property, - TemplateResult, - html, - CSSResult, - css, -} from "lit-element"; import "@material/mwc-button/mwc-button"; import "@polymer/paper-input/paper-input"; -import "@polymer/paper-radio-group/paper-radio-group"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import "@polymer/paper-radio-button/paper-radio-button"; -import { HomeAssistant } from "../../../types"; -import "../../../components/ha-card"; -import { PolymerChangedEvent } from "../../../polymer-types"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperInputElement } from "@polymer/paper-input/paper-input"; +import "@polymer/paper-radio-group/paper-radio-group"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { UNIT_C } from "../../../common/const"; -import { ConfigUpdateValues, saveCoreConfig } from "../../../data/core"; -import { createTimezoneListEl } from "../../../components/timezone-datalist"; +import "../../../components/ha-card"; import "../../../components/map/ha-location-editor"; +import { createTimezoneListEl } from "../../../components/timezone-datalist"; +import { ConfigUpdateValues, saveCoreConfig } from "../../../data/core"; +import type { PolymerChangedEvent } from "../../../polymer-types"; +import type { HomeAssistant } from "../../../types"; @customElement("ha-config-core-form") class ConfigCoreForm extends LitElement { @@ -30,7 +29,9 @@ class ConfigCoreForm extends LitElement { @property() private _location!: [number, number]; @property() private _elevation!: string; + @property() private _unitSystem!: ConfigUpdateValues["unit_system"]; + @property() private _timeZone!: string; protected render(): TemplateResult { diff --git a/src/panels/config/core/ha-config-core.js b/src/panels/config/core/ha-config-core.js index 723d74f9f1..eade141912 100644 --- a/src/panels/config/core/ha-config-core.js +++ b/src/panels/config/core/ha-config-core.js @@ -2,16 +2,13 @@ import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../layouts/hass-tabs-subpage"; -import "../../../resources/ha-style"; - -import "./ha-config-section-core"; - -import { configSections } from "../ha-panel-config"; - import LocalizeMixin from "../../../mixins/localize-mixin"; +import "../../../resources/ha-style"; +import { configSections } from "../ha-panel-config"; +import "./ha-config-section-core"; /* * @appliesMixin LocalizeMixin diff --git a/src/panels/config/core/ha-config-name-form.ts b/src/panels/config/core/ha-config-name-form.ts index 63993c5f23..6543546c67 100644 --- a/src/panels/config/core/ha-config-name-form.ts +++ b/src/panels/config/core/ha-config-name-form.ts @@ -1,20 +1,19 @@ -import { - LitElement, - customElement, - property, - TemplateResult, - html, -} from "lit-element"; import "@material/mwc-button/mwc-button"; import "@polymer/paper-input/paper-input"; -import "@polymer/paper-radio-group/paper-radio-group"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import "@polymer/paper-radio-button/paper-radio-button"; -import { HomeAssistant } from "../../../types"; +import "@polymer/paper-radio-group/paper-radio-group"; +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/ha-card"; -import { PolymerChangedEvent } from "../../../polymer-types"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperInputElement } from "@polymer/paper-input/paper-input"; import { ConfigUpdateValues, saveCoreConfig } from "../../../data/core"; +import type { PolymerChangedEvent } from "../../../polymer-types"; +import type { HomeAssistant } from "../../../types"; @customElement("ha-config-name-form") class ConfigNameForm extends LitElement { diff --git a/src/panels/config/core/ha-config-section-core.js b/src/panels/config/core/ha-config-section-core.js index 04be1e7684..e33196a147 100644 --- a/src/panels/config/core/ha-config-section-core.js +++ b/src/panels/config/core/ha-config-section-core.js @@ -1,19 +1,16 @@ import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../components/ha-card"; -import "../../../components/buttons/ha-call-service-button"; -import "../../../resources/ha-style"; - -import "../ha-config-section"; - import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; import LocalizeMixin from "../../../mixins/localize-mixin"; - -import "./ha-config-name-form"; +import "../../../resources/ha-style"; +import "../ha-config-section"; import "./ha-config-core-form"; +import "./ha-config-name-form"; /* * @appliesMixin LocalizeMixin diff --git a/src/panels/config/customize/ha-config-customize.js b/src/panels/config/customize/ha-config-customize.js index abd812191f..12ce05aba7 100644 --- a/src/panels/config/customize/ha-config-customize.js +++ b/src/panels/config/customize/ha-config-customize.js @@ -1,21 +1,18 @@ import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../../layouts/hass-tabs-subpage"; -import "../../../resources/ha-style"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { sortStatesByName } from "../../../common/entity/states_sort_by_name"; import "../../../components/ha-paper-icon-button-arrow-prev"; - +import "../../../layouts/hass-tabs-subpage"; +import LocalizeMixin from "../../../mixins/localize-mixin"; +import "../../../resources/ha-style"; import "../ha-config-section"; import "../ha-entity-config"; -import "./ha-form-customize"; - -import { computeStateName } from "../../../common/entity/compute_state_name"; -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; -import { sortStatesByName } from "../../../common/entity/states_sort_by_name"; -import LocalizeMixin from "../../../mixins/localize-mixin"; - import { configSections } from "../ha-panel-config"; +import "./ha-form-customize"; /* * @appliesMixin LocalizeMixin diff --git a/src/panels/config/customize/ha-customize-attribute.js b/src/panels/config/customize/ha-customize-attribute.js index fdfc7f9dad..2ab31914f7 100644 --- a/src/panels/config/customize/ha-customize-attribute.js +++ b/src/panels/config/customize/ha-customize-attribute.js @@ -1,7 +1,7 @@ import "@polymer/paper-icon-button/paper-icon-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import hassAttributeUtil from "../../../util/hass-attributes-util"; import "../ha-form-style"; import "./types/ha-customize-array"; diff --git a/src/panels/config/customize/ha-form-customize-attributes.js b/src/panels/config/customize/ha-form-customize-attributes.js index c71779c885..2c0def4524 100644 --- a/src/panels/config/customize/ha-form-customize-attributes.js +++ b/src/panels/config/customize/ha-form-customize-attributes.js @@ -1,7 +1,7 @@ import { MutableData } from "@polymer/polymer/lib/mixins/mutable-data"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "./ha-customize-attribute"; class HaFormCustomizeAttributes extends MutableData(PolymerElement) { diff --git a/src/panels/config/customize/ha-form-customize.js b/src/panels/config/customize/ha-form-customize.js index 4f486b3575..90844f93f4 100644 --- a/src/panels/config/customize/ha-form-customize.js +++ b/src/panels/config/customize/ha-form-customize.js @@ -2,14 +2,13 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; import LocalizeMixin from "../../../mixins/localize-mixin"; - import hassAttributeUtil from "../../../util/hass-attributes-util"; import "./ha-form-customize-attributes"; -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; - class HaFormCustomize extends LocalizeMixin(PolymerElement) { static get template() { return html` diff --git a/src/panels/config/customize/types/ha-customize-array.js b/src/panels/config/customize/types/ha-customize-array.js index c300a8ed91..fe7147d0e9 100644 --- a/src/panels/config/customize/types/ha-customize-array.js +++ b/src/panels/config/customize/types/ha-customize-array.js @@ -2,8 +2,8 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { EventsMixin } from "../../../../mixins/events-mixin"; /* diff --git a/src/panels/config/customize/types/ha-customize-boolean.js b/src/panels/config/customize/types/ha-customize-boolean.js index b4483acfff..bf6aa5c7db 100644 --- a/src/panels/config/customize/types/ha-customize-boolean.js +++ b/src/panels/config/customize/types/ha-customize-boolean.js @@ -1,5 +1,6 @@ import "@polymer/paper-checkbox/paper-checkbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaCustomizeBoolean extends PolymerElement { diff --git a/src/panels/config/customize/types/ha-customize-icon.js b/src/panels/config/customize/types/ha-customize-icon.js index 563d9e3f99..919719fbd5 100644 --- a/src/panels/config/customize/types/ha-customize-icon.js +++ b/src/panels/config/customize/types/ha-customize-icon.js @@ -1,6 +1,7 @@ import "@polymer/iron-icon/iron-icon"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaCustomizeIcon extends PolymerElement { diff --git a/src/panels/config/customize/types/ha-customize-key-value.js b/src/panels/config/customize/types/ha-customize-key-value.js index e30b9b0e6a..528ee13694 100644 --- a/src/panels/config/customize/types/ha-customize-key-value.js +++ b/src/panels/config/customize/types/ha-customize-key-value.js @@ -1,5 +1,6 @@ import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaCustomizeKeyValue extends PolymerElement { diff --git a/src/panels/config/customize/types/ha-customize-string.js b/src/panels/config/customize/types/ha-customize-string.js index e1c94a0c29..71b142a5a1 100644 --- a/src/panels/config/customize/types/ha-customize-string.js +++ b/src/panels/config/customize/types/ha-customize-string.js @@ -1,5 +1,6 @@ import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaCustomizeString extends PolymerElement { diff --git a/src/panels/config/dashboard/ha-config-dashboard.ts b/src/panels/config/dashboard/ha-config-dashboard.ts index a24e7cb76e..3671555353 100644 --- a/src/panels/config/dashboard/ha-config-dashboard.ts +++ b/src/panels/config/dashboard/ha-config-dashboard.ts @@ -1,36 +1,36 @@ -import { - LitElement, - TemplateResult, - html, - CSSResultArray, - css, - customElement, - property, -} from "lit-element"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; - -import "../../../components/ha-menu-button"; - -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; -import { CloudStatus } from "../../../data/cloud"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; - import "../../../components/ha-card"; import "../../../components/ha-icon-next"; - +import "../../../components/ha-menu-button"; +import { CloudStatus } from "../../../data/cloud"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; import "../ha-config-section"; -import "./ha-config-navigation"; import { configSections } from "../ha-panel-config"; +import "./ha-config-navigation"; @customElement("ha-config-dashboard") class HaConfigDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public cloudStatus?: CloudStatus; + @property() public showAdvanced!: boolean; protected render(): TemplateResult { diff --git a/src/panels/config/dashboard/ha-config-navigation.ts b/src/panels/config/dashboard/ha-config-navigation.ts index 2d0116daf1..56b899aeac 100644 --- a/src/panels/config/dashboard/ha-config-navigation.ts +++ b/src/panels/config/dashboard/ha-config-navigation.ts @@ -1,28 +1,28 @@ import "@polymer/iron-icon/iron-icon"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-icon-item"; - +import "@polymer/paper-item/paper-item-body"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; - import "../../../components/ha-card"; import "../../../components/ha-icon-next"; -import { - LitElement, - html, - TemplateResult, - property, - customElement, - CSSResult, - css, -} from "lit-element"; -import { HomeAssistant } from "../../../types"; import { CloudStatus, CloudStatusLoggedIn } from "../../../data/cloud"; import { PageNavigation } from "../../../layouts/hass-tabs-subpage"; +import { HomeAssistant } from "../../../types"; @customElement("ha-config-navigation") class HaConfigNavigation extends LitElement { @property() public hass!: HomeAssistant; + @property() public showAdvanced!: boolean; + @property() public pages!: PageNavigation[]; protected render(): TemplateResult { diff --git a/src/panels/config/devices/device-detail/ha-device-actions-card.ts b/src/panels/config/devices/device-detail/ha-device-actions-card.ts index 45b933b343..a5d5e4507f 100644 --- a/src/panels/config/devices/device-detail/ha-device-actions-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-actions-card.ts @@ -1,16 +1,15 @@ import { customElement } from "lit-element"; +import "../../../../components/ha-card"; import { DeviceAction, localizeDeviceAutomationAction, } from "../../../../data/device_automation"; - -import "../../../../components/ha-card"; - import { HaDeviceAutomationCard } from "./ha-device-automation-card"; @customElement("ha-device-actions-card") export class HaDeviceActionsCard extends HaDeviceAutomationCard { protected type = "action"; + protected headerKey = "ui.panel.config.devices.automation.actions.caption"; constructor() { diff --git a/src/panels/config/devices/device-detail/ha-device-automation-card.ts b/src/panels/config/devices/device-detail/ha-device-automation-card.ts index c2ca072ab6..3549a9b9b8 100644 --- a/src/panels/config/devices/device-detail/ha-device-automation-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-automation-card.ts @@ -1,28 +1,31 @@ import { - LitElement, - TemplateResult, - html, - property, - CSSResult, css, + CSSResult, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../../types"; -import { DeviceAutomation } from "../../../../data/device_automation"; - import "../../../../components/ha-card"; import "../../../../components/ha-chips"; import { showAutomationEditor } from "../../../../data/automation"; +import { DeviceAutomation } from "../../../../data/device_automation"; import { showScriptEditor } from "../../../../data/script"; +import { HomeAssistant } from "../../../../types"; export abstract class HaDeviceAutomationCard< T extends DeviceAutomation > extends LitElement { @property() public hass!: HomeAssistant; + @property() public deviceId?: string; + @property() public script = false; + @property() public automations: T[] = []; protected headerKey = ""; + protected type = ""; private _localizeDeviceAutomation: ( diff --git a/src/panels/config/devices/device-detail/ha-device-automation-dialog.ts b/src/panels/config/devices/device-detail/ha-device-automation-dialog.ts index 7514d29bb8..326cf503b8 100644 --- a/src/panels/config/devices/device-detail/ha-device-automation-dialog.ts +++ b/src/panels/config/devices/device-detail/ha-device-automation-dialog.ts @@ -1,34 +1,37 @@ import { - LitElement, - html, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - import "../../../../components/ha-dialog"; -import "./ha-device-triggers-card"; -import "./ha-device-conditions-card"; -import "./ha-device-actions-card"; -import { DeviceAutomationDialogParams } from "./show-dialog-device-automation"; -import { HomeAssistant } from "../../../../types"; import { - DeviceTrigger, - DeviceCondition, DeviceAction, - fetchDeviceTriggers, - fetchDeviceConditions, + DeviceCondition, + DeviceTrigger, fetchDeviceActions, + fetchDeviceConditions, + fetchDeviceTriggers, } from "../../../../data/device_automation"; import { haStyleDialog } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; +import "./ha-device-actions-card"; +import "./ha-device-conditions-card"; +import "./ha-device-triggers-card"; +import { DeviceAutomationDialogParams } from "./show-dialog-device-automation"; @customElement("dialog-device-automation") export class DialogDeviceAutomation extends LitElement { @property() public hass!: HomeAssistant; + @property() private _triggers: DeviceTrigger[] = []; + @property() private _conditions: DeviceCondition[] = []; + @property() private _actions: DeviceAction[] = []; + @property() private _params?: DeviceAutomationDialogParams; public async showDialog(params: DeviceAutomationDialogParams): Promise { @@ -53,18 +56,18 @@ export class DialogDeviceAutomation extends LitElement { const { deviceId, script } = this._params; - fetchDeviceActions(this.hass, deviceId).then( - (actions) => (this._actions = actions) - ); + fetchDeviceActions(this.hass, deviceId).then((actions) => { + this._actions = actions; + }); if (script) { return; } - fetchDeviceTriggers(this.hass, deviceId).then( - (triggers) => (this._triggers = triggers) - ); - fetchDeviceConditions(this.hass, deviceId).then( - (conditions) => (this._conditions = conditions) - ); + fetchDeviceTriggers(this.hass, deviceId).then((triggers) => { + this._triggers = triggers; + }); + fetchDeviceConditions(this.hass, deviceId).then((conditions) => { + this._conditions = conditions; + }); } protected render(): TemplateResult | void { diff --git a/src/panels/config/devices/device-detail/ha-device-card-mqtt.ts b/src/panels/config/devices/device-detail/ha-device-card-mqtt.ts index a4233b7c8a..cce083ac15 100644 --- a/src/panels/config/devices/device-detail/ha-device-card-mqtt.ts +++ b/src/panels/config/devices/device-detail/ha-device-card-mqtt.ts @@ -1,20 +1,21 @@ -import { DeviceRegistryEntry } from "../../../../data/device_registry"; -import { removeMQTTDeviceEntry } from "../../../../data/mqtt"; import { - LitElement, - html, + CSSResult, customElement, + html, + LitElement, property, TemplateResult, - CSSResult, } from "lit-element"; +import { DeviceRegistryEntry } from "../../../../data/device_registry"; +import { removeMQTTDeviceEntry } from "../../../../data/mqtt"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; -import { HomeAssistant } from "../../../../types"; import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; @customElement("ha-device-card-mqtt") export class HaDeviceCardMqtt extends LitElement { @property() public hass!: HomeAssistant; + @property() public device!: DeviceRegistryEntry; protected render(): TemplateResult { diff --git a/src/panels/config/devices/device-detail/ha-device-conditions-card.ts b/src/panels/config/devices/device-detail/ha-device-conditions-card.ts index a56119d480..74fbd99b33 100644 --- a/src/panels/config/devices/device-detail/ha-device-conditions-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-conditions-card.ts @@ -1,11 +1,9 @@ import { customElement } from "lit-element"; +import "../../../../components/ha-card"; import { DeviceCondition, localizeDeviceAutomationCondition, } from "../../../../data/device_automation"; - -import "../../../../components/ha-card"; - import { HaDeviceAutomationCard } from "./ha-device-automation-card"; @customElement("ha-device-conditions-card") @@ -13,6 +11,7 @@ export class HaDeviceConditionsCard extends HaDeviceAutomationCard< DeviceCondition > { protected type = "condition"; + protected headerKey = "ui.panel.config.devices.automation.conditions.caption"; constructor() { diff --git a/src/panels/config/devices/device-detail/ha-device-entities-card.ts b/src/panels/config/devices/device-detail/ha-device-entities-card.ts index dcf006bf08..23bb2af680 100644 --- a/src/panels/config/devices/device-detail/ha-device-entities-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-entities-card.ts @@ -1,40 +1,41 @@ +import "@polymer/paper-item/paper-icon-item"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import { - LitElement, - TemplateResult, - html, - property, - customElement, css, CSSResult, - queryAll, + customElement, + html, + LitElement, + property, PropertyValues, + queryAll, + TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../../types"; - -import "../../../../components/entity/state-badge"; - -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-item/paper-icon-item"; -import "@polymer/paper-item/paper-item-body"; - -import "../../../../components/ha-card"; -import "../../../../components/ha-icon"; -import { showEntityEditorDialog } from "../../entities/show-dialog-entity-editor"; import { computeDomain } from "../../../../common/entity/compute_domain"; import { domainIcon } from "../../../../common/entity/domain_icon"; -import { EntityRegistryStateEntry } from "../ha-config-device-page"; -import { addEntitiesToLovelaceView } from "../../../lovelace/editor/add-entities-to-view"; +import "../../../../components/entity/state-badge"; +import "../../../../components/ha-card"; +import "../../../../components/ha-icon"; +import { HomeAssistant } from "../../../../types"; import { createRowElement } from "../../../lovelace/create-element/create-row-element"; +import { addEntitiesToLovelaceView } from "../../../lovelace/editor/add-entities-to-view"; import { LovelaceRow } from "../../../lovelace/entity-rows/types"; +import { showEntityEditorDialog } from "../../entities/show-dialog-entity-editor"; +import { EntityRegistryStateEntry } from "../ha-config-device-page"; @customElement("ha-device-entities-card") export class HaDeviceEntitiesCard extends LitElement { @property() public hass!: HomeAssistant; + @property() public deviceId!: string; + @property() public entities!: EntityRegistryStateEntry[]; + @property() public narrow!: boolean; + @property() private _showDisabled = false; + @queryAll("#entities > *") private _entityRows?: LovelaceRow[]; protected updated(changedProps: PropertyValues): void { @@ -126,9 +127,7 @@ export class HaDeviceEntitiesCard extends LitElement { element.entry = entry; element.addEventListener("hass-more-info", (ev) => this._openEditEntry(ev)); - return html` -
    ${element}
    - `; + return html`
    ${element}
    `; } private _renderEntry(entry: EntityRegistryStateEntry): TemplateResult { diff --git a/src/panels/config/devices/device-detail/ha-device-info-card.ts b/src/panels/config/devices/device-detail/ha-device-info-card.ts index 7ad3e79ea4..67cbabc5ce 100644 --- a/src/panels/config/devices/device-detail/ha-device-info-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-info-card.ts @@ -1,26 +1,30 @@ import { - DeviceRegistryEntry, - computeDeviceName, -} from "../../../../data/device_registry"; -import { loadDeviceRegistryDetailDialog } from "../../../../dialogs/device-registry-detail/show-dialog-device-registry-detail"; -import { - LitElement, - html, + css, + CSSResult, customElement, + html, + LitElement, property, TemplateResult, - CSSResult, - css, } from "lit-element"; -import { HomeAssistant } from "../../../../types"; import { AreaRegistryEntry } from "../../../../data/area_registry"; +import { + computeDeviceName, + DeviceRegistryEntry, +} from "../../../../data/device_registry"; +import { loadDeviceRegistryDetailDialog } from "../../../../dialogs/device-registry-detail/show-dialog-device-registry-detail"; +import { HomeAssistant } from "../../../../types"; @customElement("ha-device-info-card") export class HaDeviceCard extends LitElement { @property() public hass!: HomeAssistant; + @property() public device!: DeviceRegistryEntry; + @property() public devices!: DeviceRegistryEntry[]; + @property() public areas!: AreaRegistryEntry[]; + @property() public narrow!: boolean; protected render(): TemplateResult { @@ -28,9 +32,7 @@ export class HaDeviceCard extends LitElement {
    ${this.device.model - ? html` -
    ${this.device.model}
    - ` + ? html`
    ${this.device.model}
    ` : ""} ${this.device.manufacturer ? html` diff --git a/src/panels/config/devices/device-detail/ha-device-triggers-card.ts b/src/panels/config/devices/device-detail/ha-device-triggers-card.ts index 7920681605..40d6e458f0 100644 --- a/src/panels/config/devices/device-detail/ha-device-triggers-card.ts +++ b/src/panels/config/devices/device-detail/ha-device-triggers-card.ts @@ -3,7 +3,6 @@ import { DeviceTrigger, localizeDeviceAutomationTrigger, } from "../../../../data/device_automation"; - import { HaDeviceAutomationCard } from "./ha-device-automation-card"; @customElement("ha-device-triggers-card") @@ -11,6 +10,7 @@ export class HaDeviceTriggersCard extends HaDeviceAutomationCard< DeviceTrigger > { protected type = "trigger"; + protected headerKey = "ui.panel.config.devices.automation.triggers.caption"; constructor() { diff --git a/src/panels/config/devices/ha-config-device-page.ts b/src/panels/config/devices/ha-config-device-page.ts index b6f02d3812..bb2daabd0c 100644 --- a/src/panels/config/devices/ha-config-device-page.ts +++ b/src/panels/config/devices/ha-config-device-page.ts @@ -13,8 +13,8 @@ import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { computeStateName } from "../../../common/entity/compute_state_name"; import { createValidEntityId } from "../../../common/entity/valid_entity_id"; import { compare } from "../../../common/string/compare"; -import "../../../components/ha-icon-next"; import "../../../components/entity/ha-state-icon"; +import "../../../components/ha-icon-next"; import { AreaRegistryEntry } from "../../../data/area_registry"; import { ConfigEntry } from "../../../data/config_entries"; import { @@ -50,15 +50,25 @@ export interface EntityRegistryStateEntry extends EntityRegistryEntry { @customElement("ha-config-device-page") export class HaConfigDevicePage extends LitElement { @property() public hass!: HomeAssistant; + @property() public devices!: DeviceRegistryEntry[]; + @property() public entries!: ConfigEntry[]; + @property() public entities!: EntityRegistryEntry[]; + @property() public areas!: AreaRegistryEntry[]; + @property() public deviceId!: string; + @property({ type: Boolean, reflect: true }) public narrow!: boolean; + @property() public isWide!: boolean; + @property() public showAdvanced!: boolean; + @property() public route!: Route; + @property() private _related?: RelatedResult; private _device = memoizeOne( diff --git a/src/panels/config/devices/ha-config-devices-dashboard.ts b/src/panels/config/devices/ha-config-devices-dashboard.ts index 28bc4922e0..885873e253 100644 --- a/src/panels/config/devices/ha-config-devices-dashboard.ts +++ b/src/panels/config/devices/ha-config-devices-dashboard.ts @@ -1,46 +1,53 @@ -import "../../../layouts/hass-tabs-subpage-data-table"; - import { - LitElement, - html, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { HomeAssistant, Route } from "../../../types"; -import { - DeviceRegistryEntry, - computeDeviceName, - DeviceEntityLookup, -} from "../../../data/device_registry"; -import { - EntityRegistryEntry, - findBatteryEntity, -} from "../../../data/entity_registry"; -import { ConfigEntry } from "../../../data/config_entries"; -import { AreaRegistryEntry } from "../../../data/area_registry"; -import { configSections } from "../ha-panel-config"; import memoizeOne from "memoize-one"; +import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { navigate } from "../../../common/navigate"; import { LocalizeFunc } from "../../../common/translations/localize"; -import { DeviceRowData } from "./ha-devices-data-table"; import { DataTableColumnContainer, DataTableRowData, RowClickedEvent, } from "../../../components/data-table/ha-data-table"; -import { navigate } from "../../../common/navigate"; -import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { AreaRegistryEntry } from "../../../data/area_registry"; +import { ConfigEntry } from "../../../data/config_entries"; +import { + computeDeviceName, + DeviceEntityLookup, + DeviceRegistryEntry, +} from "../../../data/device_registry"; +import { + EntityRegistryEntry, + findBatteryEntity, +} from "../../../data/entity_registry"; +import "../../../layouts/hass-tabs-subpage-data-table"; +import { HomeAssistant, Route } from "../../../types"; +import { configSections } from "../ha-panel-config"; +import { DeviceRowData } from "./ha-devices-data-table"; @customElement("ha-config-devices-dashboard") export class HaConfigDeviceDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow = false; + @property() public isWide = false; + @property() public devices!: DeviceRegistryEntry[]; + @property() public entries!: ConfigEntry[]; + @property() public entities!: EntityRegistryEntry[]; + @property() public areas!: AreaRegistryEntry[]; + @property() public domain!: string; + @property() public route!: Route; private _devices = memoizeOne( @@ -160,9 +167,7 @@ export class HaConfigDeviceDashboard extends LitElement { .stateObj=${battery} > ` - : html` - - - `; + : html` - `; }, }, } @@ -228,9 +233,7 @@ export class HaConfigDeviceDashboard extends LitElement { .stateObj=${battery} > ` - : html` - - - `; + : html` - `; }, }, } diff --git a/src/panels/config/devices/ha-config-devices.ts b/src/panels/config/devices/ha-config-devices.ts index 191e520181..f02b1f1178 100644 --- a/src/panels/config/devices/ha-config-devices.ts +++ b/src/panels/config/devices/ha-config-devices.ts @@ -1,32 +1,35 @@ -import "./ha-config-devices-dashboard"; -import "./ha-config-device-page"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; +import { customElement, property, PropertyValues } from "lit-element"; import { compare } from "../../../common/string/compare"; import { - subscribeAreaRegistry, AreaRegistryEntry, + subscribeAreaRegistry, } from "../../../data/area_registry"; -import { - HassRouterPage, - RouterOptions, -} from "../../../layouts/hass-router-page"; -import { property, customElement, PropertyValues } from "lit-element"; -import { HomeAssistant } from "../../../types"; import { ConfigEntry, getConfigEntries } from "../../../data/config_entries"; +import { + DeviceRegistryEntry, + subscribeDeviceRegistry, +} from "../../../data/device_registry"; import { EntityRegistryEntry, subscribeEntityRegistry, } from "../../../data/entity_registry"; import { - DeviceRegistryEntry, - subscribeDeviceRegistry, -} from "../../../data/device_registry"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; + HassRouterPage, + RouterOptions, +} from "../../../layouts/hass-router-page"; +import { HomeAssistant } from "../../../types"; +import "./ha-config-device-page"; +import "./ha-config-devices-dashboard"; @customElement("ha-config-devices") class HaConfigDevices extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public showAdvanced!: boolean; protected routerOptions: RouterOptions = { @@ -43,8 +46,11 @@ class HaConfigDevices extends HassRouterPage { }; @property() private _configEntries: ConfigEntry[] = []; + @property() private _entityRegistryEntries: EntityRegistryEntry[] = []; + @property() private _deviceRegistryEntries: DeviceRegistryEntry[] = []; + @property() private _areas: AreaRegistryEntry[] = []; private _unsubs?: UnsubscribeFunc[]; diff --git a/src/panels/config/devices/ha-devices-data-table.ts b/src/panels/config/devices/ha-devices-data-table.ts index 9a0bbdfc5c..e0ab9b78b8 100644 --- a/src/panels/config/devices/ha-devices-data-table.ts +++ b/src/panels/config/devices/ha-devices-data-table.ts @@ -1,36 +1,32 @@ -import "../../../components/data-table/ha-data-table"; -import "../../../components/entity/ha-state-icon"; - -import memoizeOne from "memoize-one"; - import { - LitElement, - html, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../types"; -// tslint:disable-next-line -import { +import memoizeOne from "memoize-one"; +import { navigate } from "../../../common/navigate"; +import { LocalizeFunc } from "../../../common/translations/localize"; +import "../../../components/data-table/ha-data-table"; +import type { DataTableColumnContainer, - RowClickedEvent, DataTableRowData, + RowClickedEvent, } from "../../../components/data-table/ha-data-table"; -// tslint:disable-next-line +import "../../../components/entity/ha-state-icon"; +import type { AreaRegistryEntry } from "../../../data/area_registry"; +import type { ConfigEntry } from "../../../data/config_entries"; import { - DeviceRegistryEntry, computeDeviceName, DeviceEntityLookup, + DeviceRegistryEntry, } from "../../../data/device_registry"; import { EntityRegistryEntry, findBatteryEntity, } from "../../../data/entity_registry"; -import { ConfigEntry } from "../../../data/config_entries"; -import { AreaRegistryEntry } from "../../../data/area_registry"; -import { navigate } from "../../../common/navigate"; -import { LocalizeFunc } from "../../../common/translations/localize"; +import type { HomeAssistant } from "../../../types"; export interface DeviceRowData extends DeviceRegistryEntry { device?: DeviceRowData; @@ -42,11 +38,17 @@ export interface DeviceRowData extends DeviceRegistryEntry { @customElement("ha-devices-data-table") export class HaDevicesDataTable extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow = false; + @property() public devices!: DeviceRegistryEntry[]; + @property() public entries!: ConfigEntry[]; + @property() public entities!: EntityRegistryEntry[]; + @property() public areas!: AreaRegistryEntry[]; + @property() public domain!: string; private _devices = memoizeOne( @@ -221,9 +223,7 @@ export class HaDevicesDataTable extends LitElement { .stateObj=${battery} > ` - : html` - - - `; + : html` - `; }, }, } diff --git a/src/panels/config/entities/dialog-entity-editor.ts b/src/panels/config/entities/dialog-entity-editor.ts index 8122cfd666..24a8928abe 100644 --- a/src/panels/config/entities/dialog-entity-editor.ts +++ b/src/panels/config/entities/dialog-entity-editor.ts @@ -13,24 +13,23 @@ import { TemplateResult, } from "lit-element"; import { cache } from "lit-html/directives/cache"; -import { PLATFORMS_WITH_SETTINGS_TAB } from "./const"; import { dynamicElement } from "../../../common/dom/dynamic-element-directive"; import { fireEvent } from "../../../common/dom/fire_event"; import { computeStateName } from "../../../common/entity/compute_state_name"; import "../../../components/dialog/ha-paper-dialog"; -// tslint:disable-next-line: no-duplicate-imports -import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; import "../../../components/ha-related-items"; import { EntityRegistryEntry, ExtEntityRegistryEntry, getExtendedEntityRegistryEntry, } from "../../../data/entity_registry"; -import { PolymerChangedEvent } from "../../../polymer-types"; +import type { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; +import type { HomeAssistant } from "../../../types"; +import { PLATFORMS_WITH_SETTINGS_TAB } from "./const"; import "./entity-registry-settings"; -import { EntityRegistryDetailDialogParams } from "./show-dialog-entity-editor"; +import type { EntityRegistryDetailDialogParams } from "./show-dialog-entity-editor"; interface Tabs { [key: string]: Tab; @@ -44,15 +43,22 @@ interface Tab { @customElement("dialog-entity-editor") export class DialogEntityEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() private _params?: EntityRegistryDetailDialogParams; + @property() private _entry?: | EntityRegistryEntry | ExtEntityRegistryEntry | null; + @property() private _curTab?: string; + @property() private _extraTabs: Tabs = {}; + @property() private _settingsElementTag?: string; + @query("ha-paper-dialog") private _dialog!: HaPaperDialog; + private _curTabIndex = 0; public async showDialog( diff --git a/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts b/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts index 5332e305e4..24ef2e3046 100644 --- a/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts +++ b/src/panels/config/entities/editor-tabs/settings/entity-settings-helper-tab.ts @@ -43,16 +43,15 @@ import { updateInputText, } from "../../../../../data/input_text"; import { showConfirmationDialog } from "../../../../../dialogs/generic/show-dialog-box"; -import { HomeAssistant } from "../../../../../types"; +import type { HomeAssistant } from "../../../../../types"; +import type { Helper } from "../../../helpers/const"; import "../../../helpers/forms/ha-input_boolean-form"; -import "../../../helpers/forms/ha-input_text-form"; import "../../../helpers/forms/ha-input_datetime-form"; -import "../../../helpers/forms/ha-input_select-form"; import "../../../helpers/forms/ha-input_number-form"; -import { Helper } from "../../../helpers/const"; +import "../../../helpers/forms/ha-input_select-form"; +import "../../../helpers/forms/ha-input_text-form"; import "../../entity-registry-basic-editor"; -// tslint:disable-next-line: no-duplicate-imports -import { HaEntityRegistryBasicEditor } from "../../entity-registry-basic-editor"; +import type { HaEntityRegistryBasicEditor } from "../../entity-registry-basic-editor"; const HELPERS = { input_boolean: { @@ -85,12 +84,19 @@ const HELPERS = { @customElement("entity-settings-helper-tab") export class EntityRegistrySettingsHelper extends LitElement { @property() public hass!: HomeAssistant; + @property() public entry!: ExtEntityRegistryEntry; + @property() public dialogElement!: HaPaperDialog; + @property() private _error?: string; + @property() private _item?: Helper | null; + @property() private _submitting?: boolean; + @property() private _componentLoaded?: boolean; + @query("ha-registry-basic-editor") private _registryEditor?: HaEntityRegistryBasicEditor; @@ -115,11 +121,7 @@ export class EntityRegistrySettingsHelper extends LitElement { const stateObj = this.hass.states[this.entry.entity_id]; return html` - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    ${!this._componentLoaded ? this.hass.localize( @@ -149,7 +151,7 @@ export class EntityRegistrySettingsHelper extends LitElement { class="warning" @click=${this._confirmDeleteItem} .disabled=${this._submitting || - (!this._item && !stateObj?.attributes.restored)} + (!this._item && !stateObj?.attributes.restored)} > ${this.hass.localize("ui.dialogs.entity_registry.editor.delete")} diff --git a/src/panels/config/entities/entity-registry-basic-editor.ts b/src/panels/config/entities/entity-registry-basic-editor.ts index b2ea726182..419321241f 100644 --- a/src/panels/config/entities/entity-registry-basic-editor.ts +++ b/src/panels/config/entities/entity-registry-basic-editor.ts @@ -1,33 +1,36 @@ -import { - html, - css, - LitElement, - TemplateResult, - property, - customElement, - PropertyValues, -} from "lit-element"; - import "@polymer/paper-input/paper-input"; -import "../../../components/ha-switch"; import { - ExtEntityRegistryEntry, + css, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { computeDomain } from "../../../common/entity/compute_domain"; +import "../../../components/ha-switch"; +import type { HaSwitch } from "../../../components/ha-switch"; +import { EntityRegistryEntryUpdateParams, + ExtEntityRegistryEntry, updateEntityRegistryEntry, } from "../../../data/entity_registry"; -import { HomeAssistant } from "../../../types"; -import { PolymerChangedEvent } from "../../../polymer-types"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../../components/ha-switch"; -import { computeDomain } from "../../../common/entity/compute_domain"; +import type { PolymerChangedEvent } from "../../../polymer-types"; +import type { HomeAssistant } from "../../../types"; @customElement("ha-registry-basic-editor") export class HaEntityRegistryBasicEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public entry!: ExtEntityRegistryEntry; + @property() private _origEntityId!: string; + @property() private _entityId!: string; + @property() private _disabledBy!: string | null; + @property() private _submitting?: boolean; public async updateEntry(): Promise { @@ -40,8 +43,6 @@ export class HaEntityRegistryBasicEditor extends LitElement { } try { await updateEntityRegistryEntry(this.hass!, this._origEntityId, params); - } catch (err) { - throw err; } finally { this._submitting = false; } diff --git a/src/panels/config/entities/entity-registry-settings.ts b/src/panels/config/entities/entity-registry-settings.ts index d26b1461fc..4fb5140153 100644 --- a/src/panels/config/entities/entity-registry-settings.ts +++ b/src/panels/config/entities/entity-registry-settings.ts @@ -12,32 +12,40 @@ import { } from "lit-element"; import { fireEvent } from "../../../common/dom/fire_event"; import { computeDomain } from "../../../common/entity/compute_domain"; -import "../../../components/ha-switch"; import "../../../components/ha-icon-input"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../../components/ha-switch"; +import "../../../components/ha-switch"; +import type { HaSwitch } from "../../../components/ha-switch"; import { - removeEntityRegistryEntry, - updateEntityRegistryEntry, EntityRegistryEntryUpdateParams, ExtEntityRegistryEntry, + removeEntityRegistryEntry, + updateEntityRegistryEntry, } from "../../../data/entity_registry"; import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; -import { PolymerChangedEvent } from "../../../polymer-types"; -import { HomeAssistant } from "../../../types"; +import type { PolymerChangedEvent } from "../../../polymer-types"; import { haStyle } from "../../../resources/styles"; +import type { HomeAssistant } from "../../../types"; @customElement("entity-registry-settings") export class EntityRegistrySettings extends LitElement { @property() public hass!: HomeAssistant; + @property() public entry!: ExtEntityRegistryEntry; + @property() public dialogElement!: HTMLElement; + @property() private _name!: string; + @property() private _icon!: string; + @property() private _entityId!: string; + @property() private _disabledBy!: string | null; + @property() private _error?: string; + @property() private _submitting?: boolean; + private _origEntityId!: string; protected updated(changedProperties: PropertyValues) { @@ -73,11 +81,7 @@ export class EntityRegistrySettings extends LitElement {
    ` : ""} - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    ${this.hass.localize("ui.dialogs.entity_registry.editor.delete")} diff --git a/src/panels/config/entities/ha-config-entities.ts b/src/panels/config/entities/ha-config-entities.ts index 6069d3e40e..f9c793bb8b 100644 --- a/src/panels/config/entities/ha-config-entities.ts +++ b/src/panels/config/entities/ha-config-entities.ts @@ -14,19 +14,22 @@ import { query, TemplateResult, } from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; import { styleMap } from "lit-html/directives/style-map"; import memoize from "memoize-one"; +import type { HASSDomEvent } from "../../../common/dom/fire_event"; import { computeDomain } from "../../../common/entity/compute_domain"; +import { computeStateName } from "../../../common/entity/compute_state_name"; import { domainIcon } from "../../../common/entity/domain_icon"; import { stateIcon } from "../../../common/entity/state_icon"; -import { +import "../../../common/search/search-input"; +import type { DataTableColumnContainer, DataTableColumnData, RowClickedEvent, SelectionChangedEvent, } from "../../../components/data-table/ha-data-table"; import "../../../components/ha-icon"; -import "../../../common/search/search-input"; import { computeEntityRegistryName, EntityRegistryEntry, @@ -37,19 +40,15 @@ import { import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; import "../../../layouts/hass-loading-screen"; import "../../../layouts/hass-tabs-subpage-data-table"; +import type { HaTabsSubpageDataTable } from "../../../layouts/hass-tabs-subpage-data-table"; import { SubscribeMixin } from "../../../mixins/subscribe-mixin"; -import { HomeAssistant, Route } from "../../../types"; +import type { HomeAssistant, Route } from "../../../types"; +import { configSections } from "../ha-panel-config"; import { DialogEntityEditor } from "./dialog-entity-editor"; import { loadEntityEditorDialog, showEntityEditorDialog, } from "./show-dialog-entity-editor"; -import { configSections } from "../ha-panel-config"; -import { classMap } from "lit-html/directives/class-map"; -import { computeStateName } from "../../../common/entity/compute_state_name"; -// tslint:disable-next-line: no-duplicate-imports -import { HaTabsSubpageDataTable } from "../../../layouts/hass-tabs-subpage-data-table"; -import { HASSDomEvent } from "../../../common/dom/fire_event"; export interface StateEntity extends EntityRegistryEntry { readonly?: boolean; @@ -66,18 +65,30 @@ export interface EntityRow extends StateEntity { @customElement("ha-config-entities") export class HaConfigEntities extends SubscribeMixin(LitElement) { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() private _entities?: EntityRegistryEntry[]; + @property() private _stateEntities: StateEntity[] = []; + @property() private _showDisabled = false; + @property() private _showUnavailable = true; + @property() private _showReadOnly = true; + @property() private _filter = ""; + @property() private _selectedEntities: string[] = []; + @query("hass-tabs-subpage-data-table") private _dataTable!: HaTabsSubpageDataTable; + private getDialog?: () => DialogEntityEditor | undefined; private _columns = memoize( @@ -156,7 +167,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { ${name}
    ${entity.entity_id} | ${this.hass.localize(`component.${entity.platform}.config.title`) || - entity.platform} + entity.platform} `; }; columns.status = statusColumn; @@ -196,7 +207,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { showReadOnly: boolean ): EntityRow[] => { if (!showDisabled) { - entities = entities.filter((entity) => !Boolean(entity.disabled_by)); + entities = entities.filter((entity) => !entity.disabled_by); } const result: EntityRow[] = []; @@ -264,9 +275,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { protected render(): TemplateResult { if (!this.hass || this._entities === undefined) { - return html` - - `; + return html` `; } const headerToolbar = this._selectedEntities.length ? html` @@ -624,6 +633,7 @@ export class HaConfigEntities extends SubscribeMixin(LitElement) { border-bottom: 1px solid rgba(var(--rgb-primary-text-color), 0.12); } search-input { + margin-left: 16px; flex-grow: 1; position: relative; top: 2px; diff --git a/src/panels/config/ha-config-section.ts b/src/panels/config/ha-config-section.ts index 2e4e70db3c..5f76bdfdd2 100644 --- a/src/panels/config/ha-config-section.ts +++ b/src/panels/config/ha-config-section.ts @@ -1,9 +1,9 @@ -import { customElement, LitElement, html, css, property } from "lit-element"; +import { css, customElement, html, LitElement, property } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; @customElement("ha-config-section") export class HaConfigSection extends LitElement { - @property() public isWide: boolean = false; + @property() public isWide = false; protected render() { return html` diff --git a/src/panels/config/ha-entity-config.js b/src/panels/config/ha-entity-config.js index c026143958..da870762c0 100644 --- a/src/panels/config/ha-entity-config.js +++ b/src/panels/config/ha-entity-config.js @@ -4,10 +4,10 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../components/ha-card"; - import { computeStateName } from "../../common/entity/compute_state_name"; +import "../../components/ha-card"; class HaEntityConfig extends PolymerElement { static get template() { @@ -180,7 +180,7 @@ class HaEntityConfig extends PolymerElement { var oldEntityId = oldEntities[this.selectedEntity].entity_id; - var newIndex = entities.findIndex(function(ent) { + var newIndex = entities.findIndex(function (ent) { return ent.entity_id === oldEntityId; }); @@ -198,16 +198,18 @@ class HaEntityConfig extends PolymerElement { if (!entity) return; this.formState = "loading"; + // eslint-disable-next-line @typescript-eslint/no-this-alias var el = this; - this.formEl.loadEntity(entity).then(function() { + this.formEl.loadEntity(entity).then(function () { el.formState = "editing"; }); } saveEntity() { this.formState = "saving"; + // eslint-disable-next-line @typescript-eslint/no-this-alias var el = this; - this.formEl.saveEntity().then(function() { + this.formEl.saveEntity().then(function () { el.formState = "editing"; }); } diff --git a/src/panels/config/ha-panel-config.ts b/src/panels/config/ha-panel-config.ts index d39c741185..2b7b3529e6 100644 --- a/src/panels/config/ha-panel-config.ts +++ b/src/panels/config/ha-panel-config.ts @@ -1,14 +1,14 @@ -import { property, PropertyValues, customElement } from "lit-element"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item"; -import "../../layouts/hass-loading-screen"; -import { isComponentLoaded } from "../../common/config/is_component_loaded"; -import { HomeAssistant, Route } from "../../types"; -import { CloudStatus, fetchCloudStatus } from "../../data/cloud"; -import { listenMediaQuery } from "../../common/dom/media_query"; -import { HassRouterPage, RouterOptions } from "../../layouts/hass-router-page"; +import "@polymer/paper-item/paper-item-body"; import { PolymerElement } from "@polymer/polymer"; +import { customElement, property, PropertyValues } from "lit-element"; +import { isComponentLoaded } from "../../common/config/is_component_loaded"; +import { listenMediaQuery } from "../../common/dom/media_query"; +import { CloudStatus, fetchCloudStatus } from "../../data/cloud"; +import "../../layouts/hass-loading-screen"; +import { HassRouterPage, RouterOptions } from "../../layouts/hass-router-page"; import { PageNavigation } from "../../layouts/hass-tabs-subpage"; +import { HomeAssistant, Route } from "../../types"; declare global { // for fire event @@ -147,7 +147,9 @@ export const configSections: { [name: string]: PageNavigation[] } = { @customElement("ha-panel-config") class HaPanelConfig extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public route!: Route; protected routerOptions: RouterOptions = { @@ -289,8 +291,10 @@ class HaPanelConfig extends HassRouterPage { }, }; - @property() private _wideSidebar: boolean = false; - @property() private _wide: boolean = false; + @property() private _wideSidebar = false; + + @property() private _wide = false; + @property() private _cloudStatus?: CloudStatus; private _listeners: Array<() => void> = []; diff --git a/src/panels/config/helpers/const.ts b/src/panels/config/helpers/const.ts index 944abf5bd1..d273290613 100644 --- a/src/panels/config/helpers/const.ts +++ b/src/panels/config/helpers/const.ts @@ -1,12 +1,8 @@ import { InputBoolean } from "../../../data/input_boolean"; - -import { InputText } from "../../../data/input_text"; - -import { InputNumber } from "../../../data/input_number"; - -import { InputSelect } from "../../../data/input_select"; - import { InputDateTime } from "../../../data/input_datetime"; +import { InputNumber } from "../../../data/input_number"; +import { InputSelect } from "../../../data/input_select"; +import { InputText } from "../../../data/input_text"; export const HELPER_DOMAINS = [ "input_boolean", diff --git a/src/panels/config/helpers/dialog-helper-detail.ts b/src/panels/config/helpers/dialog-helper-detail.ts index df24aeccb0..4f1db280d8 100644 --- a/src/panels/config/helpers/dialog-helper-detail.ts +++ b/src/panels/config/helpers/dialog-helper-detail.ts @@ -1,3 +1,5 @@ +import "@polymer/paper-item/paper-icon-item"; +import "@polymer/paper-tooltip/paper-tooltip"; import { css, CSSResult, @@ -5,29 +7,27 @@ import { html, LitElement, property, - TemplateResult, query, + TemplateResult, } from "lit-element"; -import "../../../components/ha-dialog"; -import { HomeAssistant } from "../../../types"; -import { dynamicElement } from "../../../common/dom/dynamic-element-directive"; -import { createInputBoolean } from "../../../data/input_boolean"; -import { createInputText } from "../../../data/input_text"; -import { createInputNumber } from "../../../data/input_number"; -import { createInputDateTime } from "../../../data/input_datetime"; -import { createInputSelect } from "../../../data/input_select"; -import { isComponentLoaded } from "../../../common/config/is_component_loaded"; -import { Helper } from "./const"; -import "@polymer/paper-item/paper-icon-item"; -import "@polymer/paper-tooltip/paper-tooltip"; -import "./forms/ha-input_boolean-form"; -import "./forms/ha-input_text-form"; -import "./forms/ha-input_datetime-form"; -import "./forms/ha-input_select-form"; -import "./forms/ha-input_number-form"; -import { domainIcon } from "../../../common/entity/domain_icon"; import { classMap } from "lit-html/directives/class-map"; +import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { dynamicElement } from "../../../common/dom/dynamic-element-directive"; +import { domainIcon } from "../../../common/entity/domain_icon"; +import "../../../components/ha-dialog"; +import { createInputBoolean } from "../../../data/input_boolean"; +import { createInputDateTime } from "../../../data/input_datetime"; +import { createInputNumber } from "../../../data/input_number"; +import { createInputSelect } from "../../../data/input_select"; +import { createInputText } from "../../../data/input_text"; import { haStyleDialog } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; +import { Helper } from "./const"; +import "./forms/ha-input_boolean-form"; +import "./forms/ha-input_datetime-form"; +import "./forms/ha-input_number-form"; +import "./forms/ha-input_select-form"; +import "./forms/ha-input_text-form"; const HELPERS = { input_boolean: createInputBoolean, @@ -40,11 +40,17 @@ const HELPERS = { @customElement("dialog-helper-detail") export class DialogHelperDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _item?: Helper; + @property() private _opened = false; + @property() private _platform?: string; + @property() private _error?: string; + @property() private _submitting = false; + @query(".form") private _form?: HTMLDivElement; public async showDialog(): Promise { @@ -81,9 +87,7 @@ export class DialogHelperDetail extends LitElement { ? html`
    ${this._error - ? html` -
    ${this._error}
    - ` + ? html`
    ${this._error}
    ` : ""} ${dynamicElement(`ha-${this._platform}-form`, { hass: this.hass, diff --git a/src/panels/config/helpers/forms/ha-input_boolean-form.ts b/src/panels/config/helpers/forms/ha-input_boolean-form.ts index 1d1bfe6b35..fc44075538 100644 --- a/src/panels/config/helpers/forms/ha-input_boolean-form.ts +++ b/src/panels/config/helpers/forms/ha-input_boolean-form.ts @@ -1,28 +1,30 @@ +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; - -import "../../../../components/ha-switch"; -import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; -import { InputBoolean } from "../../../../data/input_boolean"; import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/ha-icon-input"; +import "../../../../components/ha-switch"; +import { InputBoolean } from "../../../../data/input_boolean"; import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; @customElement("ha-input_boolean-form") class HaInputBooleanForm extends LitElement { @property() public hass!: HomeAssistant; + @property() public new?: boolean; + private _item?: InputBoolean; + @property() private _name!: string; + @property() private _icon!: string; set item(item: InputBoolean) { diff --git a/src/panels/config/helpers/forms/ha-input_datetime-form.ts b/src/panels/config/helpers/forms/ha-input_datetime-form.ts index 2e71669226..98532d7ba0 100644 --- a/src/panels/config/helpers/forms/ha-input_datetime-form.ts +++ b/src/panels/config/helpers/forms/ha-input_datetime-form.ts @@ -1,29 +1,32 @@ +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; - -import "../../../../components/ha-switch"; -import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { haStyle } from "../../../../resources/styles"; +import "../../../../components/ha-icon-input"; +import "../../../../components/ha-switch"; import { InputDateTime } from "../../../../data/input_datetime"; +import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; @customElement("ha-input_datetime-form") class HaInputDateTimeForm extends LitElement { @property() public hass!: HomeAssistant; + @property() public new?: boolean; + private _item?: InputDateTime; + @property() private _name!: string; + @property() private _icon!: string; + @property() private _mode!: "date" | "time" | "datetime"; set item(item: InputDateTime) { diff --git a/src/panels/config/helpers/forms/ha-input_number-form.ts b/src/panels/config/helpers/forms/ha-input_number-form.ts index 99a4dddf14..c1a6340e7d 100644 --- a/src/panels/config/helpers/forms/ha-input_number-form.ts +++ b/src/panels/config/helpers/forms/ha-input_number-form.ts @@ -1,34 +1,41 @@ +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; - -import "../../../../components/ha-switch"; -import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { haStyle } from "../../../../resources/styles"; +import "../../../../components/ha-icon-input"; +import "../../../../components/ha-switch"; import { InputNumber } from "../../../../data/input_number"; +import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; @customElement("ha-input_number-form") class HaInputNumberForm extends LitElement { @property() public hass!: HomeAssistant; + @property() public new?: boolean; + private _item?: Partial; + @property() private _name!: string; + @property() private _icon!: string; + @property() private _max?: number; + @property() private _min?: number; + @property() private _mode?: string; + @property() private _step?: number; - // tslint:disable-next-line: variable-name + + // eslint-disable-next-line: variable-name @property() private _unit_of_measurement?: string; set item(item: InputNumber) { diff --git a/src/panels/config/helpers/forms/ha-input_select-form.ts b/src/panels/config/helpers/forms/ha-input_select-form.ts index 6b0a23b24b..bfbe3a1c3a 100644 --- a/src/panels/config/helpers/forms/ha-input_select-form.ts +++ b/src/panels/config/helpers/forms/ha-input_select-form.ts @@ -1,34 +1,37 @@ +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, query, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; - -import "../../../../components/ha-switch"; -import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { haStyle } from "../../../../resources/styles"; -import { InputSelect } from "../../../../data/input_select"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperInputElement } from "@polymer/paper-input/paper-input"; +import "../../../../components/ha-icon-input"; +import "../../../../components/ha-switch"; +import type { InputSelect } from "../../../../data/input_select"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; +import { haStyle } from "../../../../resources/styles"; +import type { HomeAssistant } from "../../../../types"; @customElement("ha-input_select-form") class HaInputSelectForm extends LitElement { @property() public hass!: HomeAssistant; + @property() public new?: boolean; + private _item?: InputSelect; + @property() private _name!: string; + @property() private _icon!: string; + @property() private _options: string[] = []; + @query("#option_input") private _optionInput?: PaperInputElement; set item(item: InputSelect) { diff --git a/src/panels/config/helpers/forms/ha-input_text-form.ts b/src/panels/config/helpers/forms/ha-input_text-form.ts index aa9cde3041..5967c8f481 100644 --- a/src/panels/config/helpers/forms/ha-input_text-form.ts +++ b/src/panels/config/helpers/forms/ha-input_text-form.ts @@ -1,32 +1,38 @@ +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; - -import "../../../../components/ha-switch"; -import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; -import { InputText } from "../../../../data/input_text"; import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/ha-icon-input"; +import "../../../../components/ha-switch"; +import { InputText } from "../../../../data/input_text"; import { haStyle } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; @customElement("ha-input_text-form") class HaInputTextForm extends LitElement { @property() public hass!: HomeAssistant; + @property() public new?: boolean; + private _item?: InputText; + @property() private _name!: string; + @property() private _icon!: string; + @property() private _max?: number; + @property() private _min?: number; + @property() private _mode?: string; + @property() private _pattern?: string; set item(item: InputText) { diff --git a/src/panels/config/helpers/ha-config-helpers.ts b/src/panels/config/helpers/ha-config-helpers.ts index 0841b0a9fc..fb5af2a7d2 100644 --- a/src/panels/config/helpers/ha-config-helpers.ts +++ b/src/panels/config/helpers/ha-config-helpers.ts @@ -5,17 +5,18 @@ import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-tooltip/paper-tooltip"; import { HassEntity } from "home-assistant-js-websocket"; import { + css, + CSSResult, customElement, html, LitElement, property, PropertyValues, TemplateResult, - CSSResult, - css, } from "lit-element"; import memoize from "memoize-one"; import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { domainIcon } from "../../../common/entity/domain_icon"; import "../../../common/search/search-input"; import { DataTableColumnContainer, @@ -26,18 +27,21 @@ import "../../../components/ha-icon"; import "../../../layouts/hass-loading-screen"; import "../../../layouts/hass-tabs-subpage-data-table"; import { HomeAssistant, Route } from "../../../types"; -import { configSections } from "../ha-panel-config"; import { showEntityEditorDialog } from "../entities/show-dialog-entity-editor"; -import { showHelperDetailDialog } from "./show-dialog-helper-detail"; +import { configSections } from "../ha-panel-config"; import { HELPER_DOMAINS } from "./const"; -import { domainIcon } from "../../../common/entity/domain_icon"; +import { showHelperDetailDialog } from "./show-dialog-helper-detail"; @customElement("ha-config-helpers") export class HaConfigHelpers extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() private _stateItems: HassEntity[] = []; private _columns = memoize( @@ -91,7 +95,7 @@ export class HaConfigHelpers extends LitElement { template: (type) => html` ${this.hass.localize(`ui.panel.config.helpers.types.${type}`) || - type} + type} `, }; columns.editable = { @@ -134,9 +138,7 @@ export class HaConfigHelpers extends LitElement { protected render(): TemplateResult { if (!this.hass || this._stateItems === undefined) { - return html` - - `; + return html` `; } return html` diff --git a/src/panels/config/integrations/config-entry/ha-ce-entities-card.js b/src/panels/config/integrations/config-entry/ha-ce-entities-card.js index 63cd18774d..343c801bf1 100644 --- a/src/panels/config/integrations/config-entry/ha-ce-entities-card.js +++ b/src/panels/config/integrations/config-entry/ha-ce-entities-card.js @@ -1,15 +1,14 @@ import "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-item/paper-item-body"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import "../../../../components/entity/state-badge"; import "../../../../components/ha-card"; +import { computeEntityRegistryName } from "../../../../data/entity_registry"; import "../../../../layouts/hass-subpage"; - import { EventsMixin } from "../../../../mixins/events-mixin"; import LocalizeMixIn from "../../../../mixins/localize-mixin"; -import "../../../../components/entity/state-badge"; -import { computeEntityRegistryName } from "../../../../data/entity_registry"; /* * @appliesMixin LocalizeMixIn diff --git a/src/panels/config/integrations/config-entry/ha-config-entry-page.ts b/src/panels/config/integrations/config-entry/ha-config-entry-page.ts index bc2923aed4..d02eaa66a3 100755 --- a/src/panels/config/integrations/config-entry/ha-config-entry-page.ts +++ b/src/panels/config/integrations/config-entry/ha-config-entry-page.ts @@ -1,34 +1,39 @@ +import { css, CSSResult, html, LitElement, property } from "lit-element"; import memoizeOne from "memoize-one"; -import "../../../../layouts/hass-subpage"; -import "../../../../layouts/hass-error-screen"; - -import "../../devices/ha-devices-data-table"; -import "./ha-ce-entities-card"; -import { showOptionsFlowDialog } from "../../../../dialogs/config-flow/show-dialog-options-flow"; -import { property, LitElement, CSSResult, css, html } from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; import { navigate } from "../../../../common/navigate"; -import { HomeAssistant } from "../../../../types"; +import { AreaRegistryEntry } from "../../../../data/area_registry"; import { ConfigEntry, deleteConfigEntry, } from "../../../../data/config_entries"; -import { EntityRegistryEntry } from "../../../../data/entity_registry"; import { DeviceRegistryEntry } from "../../../../data/device_registry"; -import { AreaRegistryEntry } from "../../../../data/area_registry"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { EntityRegistryEntry } from "../../../../data/entity_registry"; import { showConfigEntrySystemOptionsDialog } from "../../../../dialogs/config-entry-system-options/show-dialog-config-entry-system-options"; +import { showOptionsFlowDialog } from "../../../../dialogs/config-flow/show-dialog-options-flow"; import { showAlertDialog, showConfirmationDialog, } from "../../../../dialogs/generic/show-dialog-box"; +import "../../../../layouts/hass-error-screen"; +import "../../../../layouts/hass-subpage"; +import { HomeAssistant } from "../../../../types"; +import "../../devices/ha-devices-data-table"; +import "./ha-ce-entities-card"; class HaConfigEntryPage extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public configEntryId!: string; + @property() public configEntries!: ConfigEntry[]; + @property() public entityRegistryEntries!: EntityRegistryEntry[]; + @property() public deviceRegistryEntries!: DeviceRegistryEntry[]; + @property() public areas!: AreaRegistryEntry[]; private get _configEntry(): ConfigEntry | undefined { diff --git a/src/panels/config/integrations/ha-config-entries-dashboard.ts b/src/panels/config/integrations/ha-config-entries-dashboard.ts index 0b6387d3fa..6873673dd2 100644 --- a/src/panels/config/integrations/ha-config-entries-dashboard.ts +++ b/src/panels/config/integrations/ha-config-entries-dashboard.ts @@ -1,57 +1,57 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; -import "@polymer/paper-tooltip/paper-tooltip"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/iron-icon/iron-icon"; -import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; - +import "@polymer/paper-listbox/paper-listbox"; +import "@polymer/paper-tooltip/paper-tooltip"; import { HassEntity } from "home-assistant-js-websocket"; - -import "../../../components/ha-card"; -import "../../../components/ha-icon-next"; -import "../../../components/ha-fab"; -import "../../../components/entity/ha-state-icon"; -import "../../../layouts/hass-tabs-subpage"; -import "../../../resources/ha-style"; -import "../../../components/ha-icon"; - -import { computeRTL } from "../../../common/util/compute_rtl"; -import "../ha-config-section"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../common/dom/fire_event"; import { computeStateName } from "../../../common/entity/compute_state_name"; +import { computeRTL } from "../../../common/util/compute_rtl"; +import "../../../components/entity/ha-state-icon"; +import "../../../components/ha-card"; +import "../../../components/ha-fab"; +import "../../../components/ha-icon"; +import "../../../components/ha-icon-next"; +import { ConfigEntry, deleteConfigEntry } from "../../../data/config_entries"; +import { + DISCOVERY_SOURCES, + ignoreConfigFlow, + localizeConfigFlowTitle, +} from "../../../data/config_flow"; +import { DataEntryFlowProgress } from "../../../data/data_entry_flow"; +import { EntityRegistryEntry } from "../../../data/entity_registry"; import { loadConfigFlowDialog, showConfigFlowDialog, } from "../../../dialogs/config-flow/show-dialog-config-flow"; -import { - localizeConfigFlowTitle, - ignoreConfigFlow, - DISCOVERY_SOURCES, -} from "../../../data/config_flow"; -import { - LitElement, - TemplateResult, - html, - property, - customElement, - css, - CSSResult, -} from "lit-element"; -import { HomeAssistant, Route } from "../../../types"; -import { ConfigEntry, deleteConfigEntry } from "../../../data/config_entries"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { EntityRegistryEntry } from "../../../data/entity_registry"; -import { DataEntryFlowProgress } from "../../../data/data_entry_flow"; import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; +import "../../../layouts/hass-tabs-subpage"; +import "../../../resources/ha-style"; +import { HomeAssistant, Route } from "../../../types"; +import "../ha-config-section"; import { configSections } from "../ha-panel-config"; @customElement("ha-config-entries-dashboard") export class HaConfigManagerDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public showAdvanced!: boolean; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; @property() private configEntries!: ConfigEntry[]; @@ -66,6 +66,7 @@ export class HaConfigManagerDashboard extends LitElement { * For example, can be discovered devices that require more config. */ @property() private configEntriesInProgress!: DataEntryFlowProgress[]; + @property() private _showIgnored = false; public connectedCallback() { diff --git a/src/panels/config/integrations/ha-config-integrations.ts b/src/panels/config/integrations/ha-config-integrations.ts index 511f4e6390..15cf0a5804 100644 --- a/src/panels/config/integrations/ha-config-integrations.ts +++ b/src/panels/config/integrations/ha-config-integrations.ts @@ -1,33 +1,32 @@ import "@polymer/app-route/app-route"; -import { property, customElement, PropertyValues } from "lit-element"; - -import "./ha-config-entries-dashboard"; -import "./config-entry/ha-config-entry-page"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; +import { customElement, property, PropertyValues } from "lit-element"; import { compare } from "../../../common/string/compare"; import { - subscribeAreaRegistry, AreaRegistryEntry, + subscribeAreaRegistry, } from "../../../data/area_registry"; -import { - HassRouterPage, - RouterOptions, -} from "../../../layouts/hass-router-page"; -import { HomeAssistant } from "../../../types"; import { ConfigEntry, getConfigEntries } from "../../../data/config_entries"; +import { + getConfigFlowInProgressCollection, + subscribeConfigFlowInProgress, +} from "../../../data/config_flow"; +import { DataEntryFlowProgress } from "../../../data/data_entry_flow"; +import { + DeviceRegistryEntry, + subscribeDeviceRegistry, +} from "../../../data/device_registry"; import { EntityRegistryEntry, subscribeEntityRegistry, } from "../../../data/entity_registry"; import { - DeviceRegistryEntry, - subscribeDeviceRegistry, -} from "../../../data/device_registry"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { DataEntryFlowProgress } from "../../../data/data_entry_flow"; -import { - subscribeConfigFlowInProgress, - getConfigFlowInProgressCollection, -} from "../../../data/config_flow"; + HassRouterPage, + RouterOptions, +} from "../../../layouts/hass-router-page"; +import { HomeAssistant } from "../../../types"; +import "./config-entry/ha-config-entry-page"; +import "./ha-config-entries-dashboard"; declare global { interface HASSDomEvents { @@ -38,8 +37,11 @@ declare global { @customElement("ha-config-integrations") class HaConfigIntegrations extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public showAdvanced!: boolean; protected routerOptions: RouterOptions = { @@ -55,9 +57,13 @@ class HaConfigIntegrations extends HassRouterPage { }; @property() private _configEntries: ConfigEntry[] = []; + @property() private _configEntriesInProgress: DataEntryFlowProgress[] = []; + @property() private _entityRegistryEntries: EntityRegistryEntry[] = []; + @property() private _deviceRegistryEntries: DeviceRegistryEntry[] = []; + @property() private _areas: AreaRegistryEntry[] = []; private _unsubs?: UnsubscribeFunc[]; diff --git a/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts b/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts index f393113eca..365d57d316 100644 --- a/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts +++ b/src/panels/config/lovelace/dashboards/dialog-lovelace-dashboard-detail.ts @@ -7,31 +7,38 @@ import { property, TemplateResult, } from "lit-element"; +import { createCloseHeading } from "../../../../components/ha-dialog"; import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; +import { HaSwitch } from "../../../../components/ha-switch"; import { LovelaceDashboard, - LovelaceDashboardMutableParams, LovelaceDashboardCreateParams, + LovelaceDashboardMutableParams, } from "../../../../data/lovelace"; -import { LovelaceDashboardDetailsDialogParams } from "./show-dialog-lovelace-dashboard-detail"; +import { DEFAULT_PANEL, setDefaultPanel } from "../../../../data/panel"; import { PolymerChangedEvent } from "../../../../polymer-types"; -import { HaSwitch } from "../../../../components/ha-switch"; -import { createCloseHeading } from "../../../../components/ha-dialog"; import { haStyleDialog } from "../../../../resources/styles"; -import { setDefaultPanel, DEFAULT_PANEL } from "../../../../data/panel"; +import { HomeAssistant } from "../../../../types"; +import { LovelaceDashboardDetailsDialogParams } from "./show-dialog-lovelace-dashboard-detail"; @customElement("dialog-lovelace-dashboard-detail") export class DialogLovelaceDashboardDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _params?: LovelaceDashboardDetailsDialogParams; + @property() private _urlPath!: LovelaceDashboard["url_path"]; + @property() private _showInSidebar!: boolean; + @property() private _icon!: string; + @property() private _title!: string; + @property() private _requireAdmin!: LovelaceDashboard["require_admin"]; @property() private _error?: string; + @property() private _submitting = false; public async showDialog( @@ -92,9 +99,7 @@ export class DialogLovelaceDashboardDetail extends LitElement { ) : html` ${this._error - ? html` -
    ${this._error}
    - ` + ? html`
    ${this._error}
    ` : ""}
    ${this._params.urlPath === defaultPanelUrlPath ? this.hass.localize( diff --git a/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts b/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts index 10a675ff49..4b9bafe7fc 100644 --- a/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts +++ b/src/panels/config/lovelace/dashboards/ha-config-lovelace-dashboards.ts @@ -1,45 +1,49 @@ +import "@polymer/paper-tooltip/paper-tooltip"; import { + css, + CSSResult, customElement, html, LitElement, property, PropertyValues, TemplateResult, - CSSResult, - css, } from "lit-element"; import memoize from "memoize-one"; -import "@polymer/paper-tooltip/paper-tooltip"; +import { navigate } from "../../../../common/navigate"; +import { compare } from "../../../../common/string/compare"; import { DataTableColumnContainer, RowClickedEvent, } from "../../../../components/data-table/ha-data-table"; -import "../../../../components/ha-icon"; import "../../../../components/ha-fab"; +import "../../../../components/ha-icon"; +import { + createDashboard, + deleteDashboard, + fetchDashboards, + LovelaceDashboard, + LovelaceDashboardCreateParams, + LovelacePanelConfig, + updateDashboard, +} from "../../../../data/lovelace"; +import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; import "../../../../layouts/hass-loading-screen"; import "../../../../layouts/hass-tabs-subpage-data-table"; import { HomeAssistant, Route } from "../../../../types"; -import { - LovelaceDashboard, - fetchDashboards, - createDashboard, - updateDashboard, - deleteDashboard, - LovelaceDashboardCreateParams, - LovelacePanelConfig, -} from "../../../../data/lovelace"; -import { showDashboardDetailDialog } from "./show-dialog-lovelace-dashboard-detail"; -import { compare } from "../../../../common/string/compare"; -import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; import { lovelaceTabs } from "../ha-config-lovelace"; -import { navigate } from "../../../../common/navigate"; +import { showDashboardDetailDialog } from "./show-dialog-lovelace-dashboard-detail"; @customElement("ha-config-lovelace-dashboards") export class HaConfigLovelaceDashboards extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() private _dashboards: LovelaceDashboard[] = []; private _columns = memoize( @@ -50,9 +54,7 @@ export class HaConfigLovelaceDashboards extends LitElement { type: "icon", template: (icon) => icon - ? html` - - ` + ? html` ` : html``, }, title: { @@ -87,9 +89,7 @@ export class HaConfigLovelaceDashboards extends LitElement { ${this.hass.localize( `ui.panel.config.lovelace.dashboards.conf_mode.${dashboard.mode}` )}${dashboard.filename - ? html` - - ${dashboard.filename} - ` + ? html` - ${dashboard.filename} ` : ""}
    ` @@ -132,12 +132,8 @@ export class HaConfigLovelaceDashboards extends LitElement { width: "100px", template: (requireAdmin: boolean) => requireAdmin - ? html` - - ` - : html` - - - `, + ? html` ` + : html` - `, }; columns.show_in_sidebar = { title: this.hass.localize( @@ -146,13 +142,7 @@ export class HaConfigLovelaceDashboards extends LitElement { type: "icon", width: "121px", template: (sidebar) => - sidebar - ? html` - - ` - : html` - - - `, + sidebar ? html` ` : html` - `, }; } @@ -210,9 +200,7 @@ export class HaConfigLovelaceDashboards extends LitElement { protected render(): TemplateResult { if (!this.hass || this._dashboards === undefined) { - return html` - - `; + return html` `; } return html` diff --git a/src/panels/config/lovelace/dashboards/show-dialog-lovelace-dashboard-detail.ts b/src/panels/config/lovelace/dashboards/show-dialog-lovelace-dashboard-detail.ts index b0dedf4966..49a316eadf 100644 --- a/src/panels/config/lovelace/dashboards/show-dialog-lovelace-dashboard-detail.ts +++ b/src/panels/config/lovelace/dashboards/show-dialog-lovelace-dashboard-detail.ts @@ -1,8 +1,8 @@ import { fireEvent } from "../../../../common/dom/fire_event"; import { LovelaceDashboard, - LovelaceDashboardMutableParams, LovelaceDashboardCreateParams, + LovelaceDashboardMutableParams, } from "../../../../data/lovelace"; export interface LovelaceDashboardDetailsDialogParams { diff --git a/src/panels/config/lovelace/ha-config-lovelace.ts b/src/panels/config/lovelace/ha-config-lovelace.ts index d509d9161b..837f1686a2 100644 --- a/src/panels/config/lovelace/ha-config-lovelace.ts +++ b/src/panels/config/lovelace/ha-config-lovelace.ts @@ -1,8 +1,8 @@ +import { customElement, property } from "lit-element"; import { HassRouterPage, RouterOptions, } from "../../../layouts/hass-router-page"; -import { property, customElement } from "lit-element"; import { HomeAssistant } from "../../../types"; export const lovelaceTabs = [ @@ -24,7 +24,9 @@ export const lovelaceTabs = [ @customElement("ha-config-lovelace") class HaConfigLovelace extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; protected routerOptions: RouterOptions = { diff --git a/src/panels/config/lovelace/resources/dialog-lovelace-resource-detail.ts b/src/panels/config/lovelace/resources/dialog-lovelace-resource-detail.ts index 7fce68b229..b369bfac8a 100644 --- a/src/panels/config/lovelace/resources/dialog-lovelace-resource-detail.ts +++ b/src/panels/config/lovelace/resources/dialog-lovelace-resource-detail.ts @@ -7,23 +7,28 @@ import { property, TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../../types"; +import { createCloseHeading } from "../../../../components/ha-dialog"; import { LovelaceResource, LovelaceResourcesMutableParams, } from "../../../../data/lovelace"; -import { LovelaceResourceDetailsDialogParams } from "./show-dialog-lovelace-resource-detail"; import { PolymerChangedEvent } from "../../../../polymer-types"; -import { createCloseHeading } from "../../../../components/ha-dialog"; import { haStyleDialog } from "../../../../resources/styles"; +import { HomeAssistant } from "../../../../types"; +import { LovelaceResourceDetailsDialogParams } from "./show-dialog-lovelace-resource-detail"; @customElement("dialog-lovelace-resource-detail") export class DialogLovelaceResourceDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _params?: LovelaceResourceDetailsDialogParams; + @property() private _url!: LovelaceResource["url"]; + @property() private _type!: LovelaceResource["type"]; + @property() private _error?: string; + @property() private _submitting = false; public async showDialog( @@ -62,11 +67,7 @@ export class DialogLovelaceResourceDetail extends LitElement { )} >
    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}

    ${this.hass!.localize( diff --git a/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts b/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts index a746d7209c..30f5556ffa 100644 --- a/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts +++ b/src/panels/config/lovelace/resources/ha-config-lovelace-resources.ts @@ -4,48 +4,51 @@ import "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-tooltip/paper-tooltip"; import { + css, + CSSResult, customElement, html, LitElement, property, PropertyValues, TemplateResult, - CSSResult, - css, } from "lit-element"; import memoize from "memoize-one"; -import "../../../../common/search/search-input"; +import { compare } from "../../../../common/string/compare"; import { DataTableColumnContainer, RowClickedEvent, } from "../../../../components/data-table/ha-data-table"; -import "../../../../components/ha-icon"; import "../../../../components/ha-fab"; +import "../../../../components/ha-icon"; +import { + createResource, + deleteResource, + fetchResources, + LovelaceResource, + updateResource, +} from "../../../../data/lovelace"; +import { + showAlertDialog, + showConfirmationDialog, +} from "../../../../dialogs/generic/show-dialog-box"; import "../../../../layouts/hass-loading-screen"; import "../../../../layouts/hass-tabs-subpage-data-table"; import { HomeAssistant, Route } from "../../../../types"; -import { - LovelaceResource, - fetchResources, - createResource, - updateResource, - deleteResource, -} from "../../../../data/lovelace"; -import { showResourceDetailDialog } from "./show-dialog-lovelace-resource-detail"; -import { compare } from "../../../../common/string/compare"; -import { - showConfirmationDialog, - showAlertDialog, -} from "../../../../dialogs/generic/show-dialog-box"; -import { lovelaceTabs } from "../ha-config-lovelace"; import { loadLovelaceResources } from "../../../lovelace/common/load-resources"; +import { lovelaceTabs } from "../ha-config-lovelace"; +import { showResourceDetailDialog } from "./show-dialog-lovelace-resource-detail"; @customElement("ha-config-lovelace-resources") export class HaConfigLovelaceRescources extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() private _resources: LovelaceResource[] = []; private _columns = memoize( @@ -80,9 +83,7 @@ export class HaConfigLovelaceRescources extends LitElement { protected render(): TemplateResult { if (!this.hass || this._resources === undefined) { - return html` - - `; + return html` `; } return html` diff --git a/src/panels/config/person/dialog-person-detail.ts b/src/panels/config/person/dialog-person-detail.ts index 7bb5e4fd18..570b4574a9 100644 --- a/src/panels/config/person/dialog-person-detail.ts +++ b/src/panels/config/person/dialog-person-detail.ts @@ -1,33 +1,37 @@ +import "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; import memoizeOne from "memoize-one"; - -import "@polymer/paper-input/paper-input"; -import "@material/mwc-button"; - import "../../../components/entity/ha-entities-picker"; -import "../../../components/user/ha-user-picker"; -import { PersonDetailDialogParams } from "./show-dialog-person-detail"; -import { PolymerChangedEvent } from "../../../polymer-types"; -import { HomeAssistant } from "../../../types"; -import { PersonMutableParams } from "../../../data/person"; import { createCloseHeading } from "../../../components/ha-dialog"; +import "../../../components/user/ha-user-picker"; +import { PersonMutableParams } from "../../../data/person"; +import { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; +import { PersonDetailDialogParams } from "./show-dialog-person-detail"; class DialogPersonDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _name!: string; + @property() private _userId?: string; + @property() private _deviceTrackers!: string[]; + @property() private _error?: string; + @property() private _params?: PersonDetailDialogParams; - @property() private _submitting: boolean = false; + + @property() private _submitting = false; private _deviceTrackersAvailable = memoizeOne((hass) => { return Object.keys(hass.states).some( @@ -70,11 +74,7 @@ class DialogPersonDetail extends LitElement { )} >
    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    ; protected render(): TemplateResult { @@ -46,9 +51,7 @@ class HaConfigPerson extends LitElement { this._storageItems === undefined || this._configItems === undefined ) { - return html` - - `; + return html` `; } const hass = this.hass; return html` diff --git a/src/panels/config/scene/ha-config-scene.ts b/src/panels/config/scene/ha-config-scene.ts index 2488a5a6d1..e39f5da51e 100644 --- a/src/panels/config/scene/ha-config-scene.ts +++ b/src/panels/config/scene/ha-config-scene.ts @@ -1,23 +1,26 @@ -import "./ha-scene-editor"; -import "./ha-scene-dashboard"; - +import { HassEntities } from "home-assistant-js-websocket"; +import { customElement, property, PropertyValues } from "lit-element"; +import memoizeOne from "memoize-one"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { SceneEntity } from "../../../data/scene"; import { HassRouterPage, RouterOptions, } from "../../../layouts/hass-router-page"; -import { property, customElement, PropertyValues } from "lit-element"; import { HomeAssistant } from "../../../types"; -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; -import { SceneEntity } from "../../../data/scene"; -import memoizeOne from "memoize-one"; -import { HassEntities } from "home-assistant-js-websocket"; +import "./ha-scene-dashboard"; +import "./ha-scene-editor"; @customElement("ha-config-scene") class HaConfigScene extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public showAdvanced!: boolean; + @property() public scenes: SceneEntity[] = []; protected routerOptions: RouterOptions = { @@ -61,7 +64,7 @@ class HaConfigScene extends HassRouterPage { ) { pageEl.creatingNew = undefined; const sceneId = this.routeTail.path.substr(1); - pageEl.creatingNew = sceneId === "new" ? true : false; + pageEl.creatingNew = sceneId === "new"; pageEl.scene = sceneId === "new" ? undefined diff --git a/src/panels/config/scene/ha-scene-dashboard.ts b/src/panels/config/scene/ha-scene-dashboard.ts index e65c80f599..23dec6542e 100644 --- a/src/panels/config/scene/ha-scene-dashboard.ts +++ b/src/panels/config/scene/ha-scene-dashboard.ts @@ -28,9 +28,13 @@ import { configSections } from "../ha-panel-config"; @customElement("ha-scene-dashboard") class HaSceneDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public route!: Route; + @property() public scenes!: SceneEntity[]; private _scenes = memoizeOne((scenes: SceneEntity[]) => { diff --git a/src/panels/config/scene/ha-scene-editor.ts b/src/panels/config/scene/ha-scene-editor.ts index 93a2c8640c..85ac9d69dc 100644 --- a/src/panels/config/scene/ha-scene-editor.ts +++ b/src/panels/config/scene/ha-scene-editor.ts @@ -69,22 +69,39 @@ interface DeviceEntitiesLookup { @customElement("ha-scene-editor") export class HaSceneEditor extends SubscribeMixin(LitElement) { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public route!: Route; + @property() public scene?: SceneEntity; + @property() public creatingNew?: boolean; + @property() public showAdvanced!: boolean; + @property() private _dirty?: boolean; + @property() private _errors?: string; + @property() private _config!: SceneConfig; + @property() private _entities: string[] = []; + @property() private _devices: string[] = []; + @property() private _deviceRegistryEntries: DeviceRegistryEntry[] = []; + @property() private _entityRegistryEntries: EntityRegistryEntry[] = []; + private _storedStates: SceneEntities = {}; + private _unsubscribeEvents?: () => void; + @property() private _deviceEntityLookup: DeviceEntitiesLookup = {}; + private _activateContextId?: string; private _getEntitiesDevices = memoizeOne( @@ -188,18 +205,10 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) { ${ this._errors - ? html` -
    ${this._errors}
    - ` - : "" - } - ${ - this.narrow - ? html` - ${name} - ` + ? html`
    ${this._errors}
    ` : "" } + ${this.narrow ? html` ${name} ` : ""}
    - ${ - !this.narrow - ? html` - ${name} - ` - : "" - } + ${!this.narrow ? html` ${name} ` : ""}
    ${this.hass.localize( "ui.panel.config.scene.editor.introduction" @@ -296,7 +299,7 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) { .label=${this.hass.localize( "ui.panel.config.scene.editor.devices.add" )} - /> + >
    @@ -372,7 +375,7 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) { label=${this.hass.localize( "ui.panel.config.scene.editor.entities.add" )} - /> + >
    @@ -640,7 +643,7 @@ export class HaSceneEditor extends SubscribeMixin(LitElement) { private _getCurrentState(entityId: string) { const stateObj = this.hass.states[entityId]; if (!stateObj) { - return; + return undefined; } return { ...stateObj.attributes, state: stateObj.state }; } diff --git a/src/panels/config/script/ha-config-script.js b/src/panels/config/script/ha-config-script.js deleted file mode 100644 index 6a316d55f6..0000000000 --- a/src/panels/config/script/ha-config-script.js +++ /dev/null @@ -1,113 +0,0 @@ -import "@polymer/app-route/app-route"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "./ha-script-editor"; -import "./ha-script-picker"; - -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; - -class HaConfigScript extends PolymerElement { - static get template() { - return html` - - - - - - - - `; - } - - static get properties() { - return { - hass: Object, - route: Object, - isWide: Boolean, - narrow: Boolean, - _routeData: Object, - _routeMatches: Boolean, - _creatingNew: Boolean, - _edittingScript: Boolean, - - scripts: { - type: Array, - computed: "computeScripts(hass)", - }, - - script: { - type: Object, - computed: "computeScript(scripts, _edittingScript, _routeData)", - }, - - showEditor: { - type: Boolean, - computed: "computeShowEditor(_edittingScript, _creatingNew)", - }, - }; - } - - computeScript(scripts, edittingAddon, routeData) { - if (!scripts || !edittingAddon) { - return null; - } - for (var i = 0; i < scripts.length; i++) { - if (scripts[i].entity_id === routeData.script) { - return scripts[i]; - } - } - return null; - } - - computeScripts(hass) { - var scripts = []; - - Object.keys(hass.states).forEach(function(key) { - var entity = hass.states[key]; - - if (computeStateDomain(entity) === "script") { - scripts.push(entity); - } - }); - - return scripts; - } - - computeShowEditor(_edittingScript, _creatingNew) { - return _creatingNew || _edittingScript; - } -} - -customElements.define("ha-config-script", HaConfigScript); diff --git a/src/panels/config/script/ha-config-script.ts b/src/panels/config/script/ha-config-script.ts new file mode 100644 index 0000000000..46ec4bf970 --- /dev/null +++ b/src/panels/config/script/ha-config-script.ts @@ -0,0 +1,81 @@ +import { HassEntities, HassEntity } from "home-assistant-js-websocket"; +import { customElement, property, PropertyValues } from "lit-element"; +import memoizeOne from "memoize-one"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { + HassRouterPage, + RouterOptions, +} from "../../../layouts/hass-router-page"; +import { HomeAssistant } from "../../../types"; +import "./ha-script-editor"; +import "./ha-script-picker"; + +@customElement("ha-config-script") +class HaConfigScript extends HassRouterPage { + @property() public hass!: HomeAssistant; + + @property() public narrow!: boolean; + + @property() public isWide!: boolean; + + @property() public showAdvanced!: boolean; + + @property() public scripts: HassEntity[] = []; + + protected routerOptions: RouterOptions = { + defaultPage: "dashboard", + routes: { + dashboard: { + tag: "ha-script-picker", + cache: true, + }, + edit: { + tag: "ha-script-editor", + }, + }, + }; + + private _computeScripts = memoizeOne((states: HassEntities) => { + const scripts: HassEntity[] = []; + Object.values(states).forEach((state) => { + if (computeStateDomain(state) === "script" && !state.attributes.hidden) { + scripts.push(state); + } + }); + + return scripts; + }); + + protected updatePageEl(pageEl, changedProps: PropertyValues) { + pageEl.hass = this.hass; + pageEl.narrow = this.narrow; + pageEl.isWide = this.isWide; + pageEl.route = this.routeTail; + pageEl.showAdvanced = this.showAdvanced; + + if (this.hass) { + pageEl.scripts = this._computeScripts(this.hass.states); + } + + if ( + (!changedProps || changedProps.has("route")) && + this._currentPage === "edit" + ) { + pageEl.creatingNew = undefined; + const scriptEntityId = this.routeTail.path.substr(1); + pageEl.creatingNew = scriptEntityId === "new"; + pageEl.script = + scriptEntityId === "new" + ? undefined + : pageEl.scripts.find( + (entity: HassEntity) => entity.entity_id === scriptEntityId + ); + } + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-config-script": HaConfigScript; + } +} diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index 67367e1d64..cf37ad7098 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -35,13 +35,21 @@ import { configSections } from "../ha-panel-config"; export class HaScriptEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public script!: ScriptEntity; + @property() public isWide?: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() public creatingNew?: boolean; + @property() private _config?: ScriptConfig; + @property() private _dirty?: boolean; + @property() private _errors?: string; protected render(): TemplateResult { @@ -66,15 +74,11 @@ export class HaScriptEditor extends LitElement { > `} ${this.narrow - ? html` - ${this._config?.alias} - ` + ? html` ${this._config?.alias} ` : ""}
    ${this._errors - ? html` -
    ${this._errors}
    - ` + ? html`
    ${this._errors}
    ` : ""}
    ${this._config.alias} - ` + ? html` ${this._config.alias} ` : ""} ${this.hass.localize( @@ -202,7 +204,7 @@ export class HaScriptEditor extends LitElement { if (changedProps.has("creatingNew") && this.creatingNew && this.hass) { const initData = getScriptEditorInitData(); - this._dirty = initData ? true : false; + this._dirty = !!initData; this._config = { alias: this.hass.localize("ui.panel.config.script.editor.default_name"), sequence: [{ ...HaDeviceAction.defaultConfig }], diff --git a/src/panels/config/script/ha-script-picker.ts b/src/panels/config/script/ha-script-picker.ts index 7447e3fa04..8b8af148d1 100644 --- a/src/panels/config/script/ha-script-picker.ts +++ b/src/panels/config/script/ha-script-picker.ts @@ -17,19 +17,23 @@ import { computeRTL } from "../../../common/util/compute_rtl"; import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table"; import "../../../components/ha-fab"; import { triggerScript } from "../../../data/script"; +import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import "../../../layouts/hass-tabs-subpage-data-table"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant, Route } from "../../../types"; import { showToast } from "../../../util/toast"; import { configSections } from "../ha-panel-config"; -import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; @customElement("ha-script-picker") class HaScriptPicker extends LitElement { @property() public hass!: HomeAssistant; + @property() public scripts!: HassEntity[]; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; private _scripts = memoizeOne((scripts: HassEntity[]) => { @@ -134,7 +138,7 @@ class HaScriptPicker extends LitElement { @click=${this._showHelp} > - +
    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""} { this._params = params; @@ -52,11 +57,7 @@ class DialogUserDetail extends LitElement { .heading=${createCloseHeading(this.hass, user.name)} >
    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    ${this.hass.localize("ui.panel.config.users.editor.id")}: ${user.id}
    @@ -139,8 +140,8 @@ class DialogUserDetail extends LitElement { ${this.hass!.localize("ui.panel.config.users.editor.update_user")} diff --git a/src/panels/config/users/ha-config-users.ts b/src/panels/config/users/ha-config-users.ts index f466b8d47c..d9bae12aab 100644 --- a/src/panels/config/users/ha-config-users.ts +++ b/src/panels/config/users/ha-config-users.ts @@ -1,34 +1,37 @@ -import "../../../layouts/hass-tabs-subpage-data-table"; -import "../../../components/ha-fab"; - -import { computeRTL } from "../../../common/util/compute_rtl"; -import { configSections } from "../ha-panel-config"; import { + css, + customElement, LitElement, property, - css, PropertyValues, - customElement, } from "lit-element"; -import { HomeAssistant, Route } from "../../../types"; import { html } from "lit-html"; -import { HASSDomEvent } from "../../../common/dom/fire_event"; -import { User, fetchUsers, updateUser, deleteUser } from "../../../data/user"; import memoizeOne from "memoize-one"; +import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { computeRTL } from "../../../common/util/compute_rtl"; import { DataTableColumnContainer, RowClickedEvent, } from "../../../components/data-table/ha-data-table"; -import { showUserDetailDialog } from "./show-dialog-user-detail"; -import { showAddUserDialog } from "./show-dialog-add-user"; +import "../../../components/ha-fab"; +import { deleteUser, fetchUsers, updateUser, User } from "../../../data/user"; import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; +import "../../../layouts/hass-tabs-subpage-data-table"; +import { HomeAssistant, Route } from "../../../types"; +import { configSections } from "../ha-panel-config"; +import { showAddUserDialog } from "./show-dialog-add-user"; +import { showUserDetailDialog } from "./show-dialog-user-detail"; @customElement("ha-config-users") export class HaConfigUsers extends LitElement { @property() public hass!: HomeAssistant; + @property() public _users: User[] = []; + @property() public isWide!: boolean; + @property() public narrow!: boolean; + @property() public route!: Route; private _columns = memoizeOne( @@ -44,7 +47,7 @@ export class HaConfigUsers extends LitElement { grows: true, template: (name) => html` ${name || - this.hass!.localize("ui.panel.config.users.editor.unnamed_user")} + this.hass!.localize("ui.panel.config.users.editor.unnamed_user")} `, }, group_ids: { @@ -67,9 +70,7 @@ export class HaConfigUsers extends LitElement { filterable: true, template: (generated) => html` ${generated - ? html` - - ` + ? html` ` : ""} `, }, diff --git a/src/panels/config/users/show-dialog-user-detail.ts b/src/panels/config/users/show-dialog-user-detail.ts index 0f04236a56..bcdeeb5a57 100644 --- a/src/panels/config/users/show-dialog-user-detail.ts +++ b/src/panels/config/users/show-dialog-user-detail.ts @@ -1,5 +1,5 @@ import { fireEvent } from "../../../common/dom/fire_event"; -import { User, UpdateUserParams } from "../../../data/user"; +import { UpdateUserParams, User } from "../../../data/user"; export interface UserDetailDialogParams { entry: User; diff --git a/src/panels/config/zha/functions.ts b/src/panels/config/zha/functions.ts index 065eb9867e..065fe14ee9 100644 --- a/src/panels/config/zha/functions.ts +++ b/src/panels/config/zha/functions.ts @@ -1,4 +1,4 @@ -import { ZHADevice, ZHAGroup, Cluster } from "../../../data/zha"; +import { Cluster, ZHADevice, ZHAGroup } from "../../../data/zha"; export const formatAsPaddedHex = (value: string | number): string => { let hex = value; diff --git a/src/panels/config/zha/types.ts b/src/panels/config/zha/types.ts index c785614efb..19bff74ff5 100644 --- a/src/panels/config/zha/types.ts +++ b/src/panels/config/zha/types.ts @@ -1,4 +1,4 @@ -import { ZHADevice, Cluster } from "../../../data/zha"; +import { Cluster, ZHADevice } from "../../../data/zha"; export interface PickerTarget extends EventTarget { selected: number; diff --git a/src/panels/config/zha/zha-add-devices-page.ts b/src/panels/config/zha/zha-add-devices-page.ts index 05d627c80a..b80bfa791d 100644 --- a/src/panels/config/zha/zha-add-devices-page.ts +++ b/src/panels/config/zha/zha-add-devices-page.ts @@ -1,11 +1,6 @@ -import "../../../components/ha-service-description"; -import "../../../components/ha-textarea"; -import "../../../layouts/hass-subpage"; -import "./zha-device-card"; import "@material/mwc-button"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-spinner/paper-spinner"; - import { css, CSSResult, @@ -15,30 +10,45 @@ import { property, TemplateResult, } from "lit-element"; - +import "../../../components/ha-service-description"; +import "../../../components/ha-textarea"; import { ZHADevice } from "../../../data/zha"; +import "../../../layouts/hass-subpage"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant, Route } from "../../../types"; +import "./zha-device-card"; @customElement("zha-add-devices-page") class ZHAAddDevicesPage extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide?: boolean; + @property() public route?: Route; + @property() private _error?: string; + @property() private _discoveredDevices: ZHADevice[] = []; - @property() private _formattedEvents: string = ""; - @property() private _active: boolean = false; - @property() private _showHelp: boolean = false; + + @property() private _formattedEvents = ""; + + @property() private _active = false; + + @property() private _showHelp = false; + private _ieeeAddress?: string; + private _addDevicesTimeoutHandle: any = undefined; + private _subscribed?: Promise<() => Promise>; public connectedCallback(): void { super.connectedCallback(); - this.route && this.route.path && this.route.path !== "" - ? (this._ieeeAddress = this.route.path.substring(1)) - : (this._ieeeAddress = undefined); + if (this.route && this.route.path && this.route.path !== "") { + this._ieeeAddress = this.route.path.substring(1); + } else { + this._ieeeAddress = undefined; + } this._subscribe(); } @@ -88,16 +98,12 @@ class ZHAAddDevicesPage extends LitElement { domain="zha" service="permit" class="help-text" - /> + > ` : ""}
    `} - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    ${this._discoveredDevices.length < 1 @@ -170,7 +176,7 @@ class ZHAAddDevicesPage extends LitElement { this._active = true; this._addDevicesTimeoutHandle = setTimeout( () => this._unsubscribe(), - 75000 + 120000 ); } diff --git a/src/panels/config/zha/zha-add-group-page.ts b/src/panels/config/zha/zha-add-group-page.ts index 7daf692795..c52e6da84a 100644 --- a/src/panels/config/zha/zha-add-group-page.ts +++ b/src/panels/config/zha/zha-add-group-page.ts @@ -1,46 +1,51 @@ +import "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; +import "@polymer/paper-spinner/paper-spinner"; import { - property, - LitElement, - html, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, query, } from "lit-element"; - -import "../../../layouts/hass-subpage"; -import "../../../layouts/hass-error-screen"; -import "../ha-config-section"; -import { HomeAssistant } from "../../../types"; +import type { HASSDomEvent } from "../../../common/dom/fire_event"; +import { navigate } from "../../../common/navigate"; +import type { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; import { - ZHADevice, - fetchGroupableDevices, addGroup, + fetchGroupableDevices, + ZHADevice, ZHAGroup, } from "../../../data/zha"; +import "../../../layouts/hass-error-screen"; +import "../../../layouts/hass-subpage"; +import type { PolymerChangedEvent } from "../../../polymer-types"; +import type { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import "./zha-devices-data-table"; -import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; -import { navigate } from "../../../common/navigate"; -import { PolymerChangedEvent } from "../../../polymer-types"; -import "@polymer/paper-spinner/paper-spinner"; -import "@material/mwc-button"; -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { HASSDomEvent } from "../../../common/dom/fire_event"; -// tslint:disable-next-line: no-duplicate-imports -import { ZHADevicesDataTable } from "./zha-devices-data-table"; +import type { ZHADevicesDataTable } from "./zha-devices-data-table"; @customElement("zha-add-group-page") export class ZHAAddGroupPage extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public devices: ZHADevice[] = []; - @property() private _processingAdd: boolean = false; - @property() private _groupName: string = ""; + + @property() private _processingAdd = false; + + @property() private _groupName = ""; + @query("zha-devices-data-table") private _zhaDevicesDataTable!: ZHADevicesDataTable; - private _firstUpdatedCalled: boolean = false; + private _firstUpdatedCalled = false; + private _selectedDevicesToAdd: string[] = []; public connectedCallback(): void { @@ -94,8 +99,8 @@ export class ZHAAddGroupPage extends LitElement {
    diff --git a/src/panels/config/zha/zha-cluster-attributes.ts b/src/panels/config/zha/zha-cluster-attributes.ts index ed909c8458..44b1901149 100644 --- a/src/panels/config/zha/zha-cluster-attributes.ts +++ b/src/panels/config/zha/zha-cluster-attributes.ts @@ -1,24 +1,21 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../ha-config-section"; import "@material/mwc-button"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, html, LitElement, + property, PropertyValues, TemplateResult, - property, } from "lit-element"; - +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { Attribute, Cluster, @@ -29,6 +26,7 @@ import { } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import { formatAsPaddedHex } from "./functions"; import { ChangeEvent, @@ -38,14 +36,23 @@ import { export class ZHAClusterAttributes extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public showHelp = false; + @property() public selectedNode?: ZHADevice; + @property() public selectedCluster?: Cluster; + @property() private _attributes: Attribute[] = []; + @property() private _selectedAttributeIndex = -1; + @property() private _attributeValue?: any = ""; + @property() private _manufacturerCodeOverride?: string | number; + @property() private _setAttributeServiceData?: SetAttributeServiceData; protected updated(changedProperties: PropertyValues): void { @@ -97,9 +104,9 @@ export class ZHAClusterAttributes extends LitElement { (entry) => html` ${entry.name + - " (id: " + - formatAsPaddedHex(entry.id) + - ")"} ` )} @@ -207,7 +214,7 @@ export class ZHAClusterAttributes extends LitElement { | ReadAttributeServiceData | undefined { if (!this.selectedCluster || !this.selectedNode) { - return; + return undefined; } return { ieee: this.selectedNode!.ieee, @@ -225,7 +232,7 @@ export class ZHAClusterAttributes extends LitElement { | SetAttributeServiceData | undefined { if (!this.selectedCluster || !this.selectedNode) { - return; + return undefined; } return { ieee: this.selectedNode!.ieee, diff --git a/src/panels/config/zha/zha-cluster-commands.ts b/src/panels/config/zha/zha-cluster-commands.ts index a4455a8ca0..0af3b55dd6 100644 --- a/src/panels/config/zha/zha-cluster-commands.ts +++ b/src/panels/config/zha/zha-cluster-commands.ts @@ -1,23 +1,20 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../ha-config-section"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, html, LitElement, + property, PropertyValues, TemplateResult, - property, } from "lit-element"; - +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { Cluster, Command, @@ -26,6 +23,7 @@ import { } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import { formatAsPaddedHex } from "./functions"; import { ChangeEvent, @@ -35,13 +33,21 @@ import { export class ZHAClusterCommands extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public selectedNode?: ZHADevice; + @property() public selectedCluster?: Cluster; + @property() private _showHelp = false; + @property() private _commands: Command[] = []; + @property() private _selectedCommandIndex = -1; + @property() private _manufacturerCodeOverride?: number; + @property() private _issueClusterCommandServiceData?: IssueCommandServiceData; protected updated(changedProperties: PropertyValues): void { @@ -92,9 +98,9 @@ export class ZHAClusterCommands extends LitElement { (entry) => html` ${entry.name + - " (id: " + - formatAsPaddedHex(entry.id) + - ")"} ` )} @@ -173,7 +179,7 @@ export class ZHAClusterCommands extends LitElement { | IssueCommandServiceData | undefined { if (!this.selectedNode || !this.selectedCluster) { - return; + return undefined; } return { ieee: this.selectedNode!.ieee, diff --git a/src/panels/config/zha/zha-clusters-data-table.ts b/src/panels/config/zha/zha-clusters-data-table.ts index 9216b832e5..e5750edcd3 100644 --- a/src/panels/config/zha/zha-clusters-data-table.ts +++ b/src/panels/config/zha/zha-clusters-data-table.ts @@ -1,24 +1,20 @@ -import "../../../components/data-table/ha-data-table"; -import "../../../components/entity/ha-state-icon"; - -import memoizeOne from "memoize-one"; - import { - LitElement, - html, - TemplateResult, - property, customElement, + html, + LitElement, + property, query, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../types"; -// tslint:disable-next-line -import { +import memoizeOne from "memoize-one"; +import "../../../components/data-table/ha-data-table"; +import type { DataTableColumnContainer, HaDataTable, } from "../../../components/data-table/ha-data-table"; -// tslint:disable-next-line -import { Cluster } from "../../../data/zha"; +import "../../../components/entity/ha-state-icon"; +import type { Cluster } from "../../../data/zha"; +import type { HomeAssistant } from "../../../types"; import { formatAsPaddedHex } from "./functions"; export interface ClusterRowData extends Cluster { @@ -29,8 +25,11 @@ export interface ClusterRowData extends Cluster { @customElement("zha-clusters-data-table") export class ZHAClustersDataTable extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow = false; + @property() public clusters: Cluster[] = []; + @query("ha-data-table") private _dataTable!: HaDataTable; private _clusters = memoizeOne((clusters: Cluster[]) => { @@ -67,9 +66,7 @@ export class ZHAClustersDataTable extends LitElement { id: { title: "ID", template: (id: number) => { - return html` - ${formatAsPaddedHex(id)} - `; + return html` ${formatAsPaddedHex(id)} `; }, sortable: true, width: "15%", diff --git a/src/panels/config/zha/zha-clusters.ts b/src/panels/config/zha/zha-clusters.ts index 86c6f2d8ef..a10fabc1c2 100644 --- a/src/panels/config/zha/zha-clusters.ts +++ b/src/panels/config/zha/zha-clusters.ts @@ -1,26 +1,24 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../ha-config-section"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, html, LitElement, + property, PropertyValues, TemplateResult, - property, } from "lit-element"; - import { fireEvent } from "../../../common/dom/fire_event"; +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { Cluster, fetchClustersForZhaNode, ZHADevice } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import { computeClusterKey } from "./functions"; import { ItemSelectedEvent } from "./types"; @@ -35,10 +33,15 @@ declare global { export class ZHAClusters extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public selectedDevice?: ZHADevice; + @property() public showHelp = false; + @property() private _selectedClusterIndex = -1; + @property() private _clusters: Cluster[] = []; protected updated(changedProperties: PropertyValues): void { diff --git a/src/panels/config/zha/zha-config-dashboard-router.ts b/src/panels/config/zha/zha-config-dashboard-router.ts index dc8f4b3c22..fe71707a75 100644 --- a/src/panels/config/zha/zha-config-dashboard-router.ts +++ b/src/panels/config/zha/zha-config-dashboard-router.ts @@ -1,14 +1,16 @@ +import { customElement, property } from "lit-element"; import { HassRouterPage, RouterOptions, } from "../../../layouts/hass-router-page"; -import { customElement, property } from "lit-element"; import { HomeAssistant } from "../../../types"; @customElement("zha-config-dashboard-router") class ZHAConfigDashboardRouter extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() public narrow!: boolean; protected routerOptions: RouterOptions = { diff --git a/src/panels/config/zha/zha-config-dashboard.ts b/src/panels/config/zha/zha-config-dashboard.ts index d9f4f43e7f..f277ae2e54 100644 --- a/src/panels/config/zha/zha-config-dashboard.ts +++ b/src/panels/config/zha/zha-config-dashboard.ts @@ -1,32 +1,31 @@ +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import { - LitElement, - TemplateResult, - html, - CSSResultArray, css, + CSSResultArray, customElement, + html, + LitElement, property, PropertyValues, + TemplateResult, } from "lit-element"; -import "@polymer/paper-item/paper-item-body"; -import "@polymer/paper-item/paper-item"; -import "../../../components/ha-card"; -import "../../../components/ha-icon-next"; -import "../../../layouts/hass-subpage"; -import "../ha-config-section"; - -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant, Route } from "../../../types"; -import { fetchDevices, ZHADevice } from "../../../data/zha"; -import { sortZHADevices, formatAsPaddedHex } from "./functions"; import memoizeOne from "memoize-one"; +import { navigate } from "../../../common/navigate"; import "../../../components/data-table/ha-data-table"; -// tslint:disable-next-line: no-duplicate-imports -import { +import type { DataTableColumnContainer, RowClickedEvent, } from "../../../components/data-table/ha-data-table"; -import { navigate } from "../../../common/navigate"; +import "../../../components/ha-card"; +import "../../../components/ha-icon-next"; +import { fetchDevices } from "../../../data/zha"; +import type { ZHADevice } from "../../../data/zha"; +import "../../../layouts/hass-subpage"; +import { haStyle } from "../../../resources/styles"; +import type { HomeAssistant, Route } from "../../../types"; +import "../ha-config-section"; +import { formatAsPaddedHex, sortZHADevices } from "./functions"; export interface DeviceRowData extends ZHADevice { device?: DeviceRowData; @@ -35,12 +34,18 @@ export interface DeviceRowData extends ZHADevice { @customElement("zha-config-dashboard") class ZHAConfigDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public route!: Route; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() private _devices: ZHADevice[] = []; + private pages: string[] = ["add", "groups"]; - private _firstUpdatedCalled: boolean = false; + + private _firstUpdatedCalled = false; private _memoizeDevices = memoizeOne((devices: ZHADevice[]) => { let outputDevices: DeviceRowData[] = devices; diff --git a/src/panels/config/zha/zha-device-binding.ts b/src/panels/config/zha/zha-device-binding.ts index 5aeaf74c7d..e1e3c5c792 100644 --- a/src/panels/config/zha/zha-device-binding.ts +++ b/src/panels/config/zha/zha-device-binding.ts @@ -1,12 +1,8 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../ha-config-section"; import "@material/mwc-button/mwc-button"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, @@ -17,21 +13,29 @@ import { PropertyValues, TemplateResult, } from "lit-element"; - +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { bindDevices, unbindDevices, ZHADevice } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import { ItemSelectedEvent } from "./types"; -import "@polymer/paper-item/paper-item"; @customElement("zha-device-binding-control") export class ZHADeviceBindingControl extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public selectedDevice?: ZHADevice; - @property() private _showHelp: boolean = false; - @property() private _bindTargetIndex: number = -1; + + @property() private _showHelp = false; + + @property() private _bindTargetIndex = -1; + @property() private bindableDevices: ZHADevice[] = []; + @property() private _deviceToBind?: ZHADevice; protected updated(changedProperties: PropertyValues): void { diff --git a/src/panels/config/zha/zha-device-card.ts b/src/panels/config/zha/zha-device-card.ts index ec00a3de10..af597ec060 100644 --- a/src/panels/config/zha/zha-device-card.ts +++ b/src/panels/config/zha/zha-device-card.ts @@ -1,7 +1,3 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/entity/state-badge"; -import "../../../components/ha-card"; import "@material/mwc-button"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-input/paper-input"; @@ -9,7 +5,7 @@ import "@polymer/paper-item/paper-icon-item"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-listbox/paper-listbox"; - +import { HassEvent, UnsubscribeFunc } from "home-assistant-js-websocket"; import { css, CSSResult, @@ -20,8 +16,13 @@ import { PropertyValues, TemplateResult, } from "lit-element"; - import { fireEvent } from "../../../common/dom/fire_event"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { navigate } from "../../../common/navigate"; +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/entity/state-badge"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { AreaRegistryEntry, subscribeAreaRegistry, @@ -37,12 +38,9 @@ import { } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; -import { ItemSelectedEvent, NodeServiceData } from "./types"; -import { navigate } from "../../../common/navigate"; -import { UnsubscribeFunc, HassEvent } from "home-assistant-js-websocket"; -import { formatAsPaddedHex } from "./functions"; -import { computeStateName } from "../../../common/entity/compute_state_name"; import { addEntitiesToLovelaceView } from "../../lovelace/editor/add-entities-to-view"; +import { formatAsPaddedHex } from "./functions"; +import { ItemSelectedEvent, NodeServiceData } from "./types"; declare global { // for fire event @@ -56,19 +54,33 @@ declare global { @customElement("zha-device-card") class ZHADeviceCard extends LitElement { @property() public hass!: HomeAssistant; + @property() public device?: ZHADevice; + @property({ type: Boolean }) public narrow?: boolean; + @property({ type: Boolean }) public showHelp?: boolean = false; + @property({ type: Boolean }) public showActions?: boolean = true; + @property({ type: Boolean }) public showName?: boolean = true; + @property({ type: Boolean }) public showEntityDetail?: boolean = true; + @property({ type: Boolean }) public showModelInfo?: boolean = true; + @property({ type: Boolean }) public showEditableInfo?: boolean = true; + @property() private _serviceData?: NodeServiceData; + @property() private _areas: AreaRegistryEntry[] = []; - @property() private _selectedAreaIndex: number = -1; + + @property() private _selectedAreaIndex = -1; + @property() private _userGivenName?: string; + private _unsubAreas?: UnsubscribeFunc; + private _unsubEntities?: UnsubscribeFunc; public disconnectedCallback() { @@ -102,7 +114,9 @@ class ZHADeviceCard extends LitElement { }); } }, "entity_registry_updated") - .then((unsub) => (this._unsubEntities = unsub)); + .then((unsub) => { + this._unsubEntities = unsub; + }); } protected firstUpdated(changedProperties: PropertyValues): void { @@ -167,21 +181,29 @@ class ZHADeviceCard extends LitElement {
    Device Type:
    ${this.device!.device_type}
    LQI:
    -
    ${this.device!.lqi || - this.hass!.localize("ui.dialogs.zha_device_info.unknown")}
    +
    ${ + this.device!.lqi || + this.hass!.localize("ui.dialogs.zha_device_info.unknown") + }
    RSSI:
    -
    ${this.device!.rssi || - this.hass!.localize("ui.dialogs.zha_device_info.unknown")}
    +
    ${ + this.device!.rssi || + this.hass!.localize("ui.dialogs.zha_device_info.unknown") + }
    ${this.hass!.localize( "ui.dialogs.zha_device_info.last_seen" )}:
    -
    ${this.device!.last_seen || - this.hass!.localize("ui.dialogs.zha_device_info.unknown")}
    +
    ${ + this.device!.last_seen || + this.hass!.localize("ui.dialogs.zha_device_info.unknown") + }
    ${this.hass!.localize( "ui.dialogs.zha_device_info.power_source" )}:
    -
    ${this.device!.power_source || - this.hass!.localize("ui.dialogs.zha_device_info.unknown")}
    +
    ${ + this.device!.power_source || + this.hass!.localize("ui.dialogs.zha_device_info.unknown") + }
    ${ this.device!.quirk_applied ? html` @@ -283,45 +305,50 @@ class ZHADeviceCard extends LitElement { this.showActions ? html`
    - - ${this.hass!.localize( - "ui.dialogs.zha_device_info.buttons.reconfigure" - )} - - ${this.showHelp + ${this.device!.device_type !== "Coordinator" ? html` -
    + ${this.hass!.localize( - "ui.dialogs.zha_device_info.services.reconfigure" + "ui.dialogs.zha_device_info.buttons.reconfigure" )} -
    - ` - : ""} + + ${this.showHelp + ? html` +
    + ${this.hass!.localize( + "ui.dialogs.zha_device_info.services.reconfigure" + )} +
    + ` + : ""} - - ${this.hass!.localize( - "ui.dialogs.zha_device_info.buttons.remove" - )} - - ${this.showHelp - ? html` -
    - ${this.hass!.localize( - "ui.dialogs.zha_device_info.services.remove" + + .serviceData=${this._serviceData} + > + ${this.hass!.localize( + "ui.dialogs.zha_device_info.buttons.remove" + )} + + ${this.showHelp + ? html` +
    + ${this.hass!.localize( + "ui.dialogs.zha_device_info.services.remove" + )} +
    + ` + : ""} ` : ""} ${this.device!.power_source === "Mains" && - this.device!.device_type === "Router" + (this.device!.device_type === "Router" || + this.device!.device_type === "Coordinator") ? html` ${this.hass!.localize( @@ -335,7 +362,7 @@ class ZHADeviceCard extends LitElement { domain="zha" service="permit" class="help-text2" - /> + > ` : ""} ` diff --git a/src/panels/config/zha/zha-device-page.ts b/src/panels/config/zha/zha-device-page.ts index 4b152925e3..92711fd4d4 100755 --- a/src/panels/config/zha/zha-device-page.ts +++ b/src/panels/config/zha/zha-device-page.ts @@ -1,47 +1,52 @@ -import "../../../layouts/hass-subpage"; -import "../../../components/ha-paper-icon-button-arrow-prev"; -import "./zha-device-binding"; -import "./zha-group-binding"; -import "./zha-cluster-attributes"; -import "./zha-cluster-commands"; -import "./zha-clusters"; -import "./zha-node"; import "@polymer/paper-icon-button/paper-icon-button"; - import { + css, CSSResult, + customElement, html, LitElement, property, PropertyValues, TemplateResult, - customElement, - css, } from "lit-element"; - import { HASSDomEvent } from "../../../common/dom/fire_event"; +import "../../../components/ha-paper-icon-button-arrow-prev"; import { Cluster, fetchBindableDevices, - ZHADevice, - fetchZHADevice, - ZHAGroup, fetchGroups, + fetchZHADevice, + ZHADevice, + ZHAGroup, } from "../../../data/zha"; +import "../../../layouts/hass-subpage"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { sortZHADevices, sortZHAGroups } from "./functions"; import { ZHAClusterSelectedParams } from "./types"; +import "./zha-cluster-attributes"; +import "./zha-cluster-commands"; +import "./zha-clusters"; +import "./zha-device-binding"; +import "./zha-group-binding"; +import "./zha-node"; @customElement("zha-device-page") export class ZHADevicePage extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public ieee?: string; + @property() public device?: ZHADevice; + @property() public narrow?: boolean; + @property() private _selectedCluster?: Cluster; + @property() private _bindableDevices: ZHADevice[] = []; + @property() private _groups: ZHAGroup[] = []; protected updated(changedProperties: PropertyValues): void { @@ -111,7 +116,7 @@ export class ZHADevicePage extends LitElement { : ""} ` : ""} -
    +
    `; } diff --git a/src/panels/config/zha/zha-devices-data-table.ts b/src/panels/config/zha/zha-devices-data-table.ts index 7824e178ca..3808868633 100644 --- a/src/panels/config/zha/zha-devices-data-table.ts +++ b/src/panels/config/zha/zha-devices-data-table.ts @@ -1,25 +1,21 @@ -import "../../../components/data-table/ha-data-table"; -import "../../../components/entity/ha-state-icon"; - -import memoizeOne from "memoize-one"; - import { - LitElement, - html, - TemplateResult, - property, customElement, + html, + LitElement, + property, query, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../types"; -// tslint:disable-next-line -import { +import memoizeOne from "memoize-one"; +import "../../../components/data-table/ha-data-table"; +import type { DataTableColumnContainer, HaDataTable, } from "../../../components/data-table/ha-data-table"; -// tslint:disable-next-line -import { ZHADevice } from "../../../data/zha"; +import "../../../components/entity/ha-state-icon"; +import type { ZHADevice } from "../../../data/zha"; import { showZHADeviceInfoDialog } from "../../../dialogs/zha-device-info-dialog/show-dialog-zha-device-info"; +import type { HomeAssistant } from "../../../types"; export interface DeviceRowData extends ZHADevice { device?: DeviceRowData; @@ -28,9 +24,13 @@ export interface DeviceRowData extends ZHADevice { @customElement("zha-devices-data-table") export class ZHADevicesDataTable extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow = false; + @property({ type: Boolean }) public selectable = false; + @property() public devices: ZHADevice[] = []; + @query("ha-data-table") private _dataTable!: HaDataTable; private _devices = memoizeOne((devices: ZHADevice[]) => { diff --git a/src/panels/config/zha/zha-group-binding.ts b/src/panels/config/zha/zha-group-binding.ts index 543735a7fb..1f54489981 100644 --- a/src/panels/config/zha/zha-group-binding.ts +++ b/src/panels/config/zha/zha-group-binding.ts @@ -1,12 +1,8 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../ha-config-section"; import "@material/mwc-button/mwc-button"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, @@ -15,41 +11,53 @@ import { LitElement, property, PropertyValues, - TemplateResult, query, + TemplateResult, } from "lit-element"; - +import type { HASSDomEvent } from "../../../common/dom/fire_event"; +import "../../../components/buttons/ha-call-service-button"; +import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { bindDeviceToGroup, + Cluster, + fetchClustersForZhaNode, unbindDeviceFromGroup, ZHADevice, ZHAGroup, - Cluster, - fetchClustersForZhaNode, } from "../../../data/zha"; -import "./zha-clusters-data-table"; import { haStyle } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; +import type { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import { ItemSelectedEvent } from "./types"; -import "@polymer/paper-item/paper-item"; -import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; -import { HASSDomEvent } from "../../../common/dom/fire_event"; -// tslint:disable-next-line: no-duplicate-imports -import { ZHAClustersDataTable } from "./zha-clusters-data-table"; +import "./zha-clusters-data-table"; +import type { ZHAClustersDataTable } from "./zha-clusters-data-table"; @customElement("zha-group-binding-control") export class ZHAGroupBindingControl extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public narrow?: boolean; + @property() public selectedDevice?: ZHADevice; - @property() private _showHelp: boolean = false; - @property() private _bindTargetIndex: number = -1; + + @property() private _showHelp = false; + + @property() private _bindTargetIndex = -1; + @property() private groups: ZHAGroup[] = []; + @property() private _selectedClusters: string[] = []; + @property() private _clusters: Cluster[] = []; + private _groupToBind?: ZHAGroup; + private _clustersToBind?: Cluster[]; + @query("zha-clusters-data-table") private _zhaClustersDataTable!: ZHAClustersDataTable; @@ -99,9 +107,7 @@ export class ZHAGroupBindingControl extends LitElement { @iron-select="${this._bindTargetIndexChanged}" > ${this.groups.map( - (group) => html` - ${group.name} - ` + (group) => html` ${group.name} ` )} diff --git a/src/panels/config/zha/zha-group-page.ts b/src/panels/config/zha/zha-group-page.ts index cb2dce1c0b..55a6397112 100644 --- a/src/panels/config/zha/zha-group-page.ts +++ b/src/panels/config/zha/zha-group-page.ts @@ -1,53 +1,61 @@ +import "@material/mwc-button"; +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-spinner/paper-spinner"; import { - property, - LitElement, - html, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, } from "lit-element"; - import memoizeOne from "memoize-one"; - -import "../../../layouts/hass-subpage"; -import "../../../layouts/hass-error-screen"; -import "../ha-config-section"; -import { HomeAssistant } from "../../../types"; +import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { navigate } from "../../../common/navigate"; +import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; import { + addMembersToGroup, + fetchGroup, + fetchGroupableDevices, + removeGroups, + removeMembersFromGroup, ZHADevice, ZHAGroup, - fetchGroup, - removeGroups, - fetchGroupableDevices, - addMembersToGroup, - removeMembersFromGroup, } from "../../../data/zha"; +import "../../../layouts/hass-error-screen"; +import "../../../layouts/hass-subpage"; +import { HomeAssistant } from "../../../types"; +import "../ha-config-section"; import { formatAsPaddedHex } from "./functions"; import "./zha-device-card"; import "./zha-devices-data-table"; -import { navigate } from "../../../common/navigate"; -import "@polymer/paper-icon-button/paper-icon-button"; -import "@polymer/paper-spinner/paper-spinner"; -import "@material/mwc-button"; -import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; -import { HASSDomEvent } from "../../../common/dom/fire_event"; @customElement("zha-group-page") export class ZHAGroupPage extends LitElement { @property() public hass!: HomeAssistant; + @property() public group?: ZHAGroup; + @property() public groupId!: number; + @property() public narrow!: boolean; + @property() public isWide!: boolean; + @property() public devices: ZHADevice[] = []; - @property() private _processingAdd: boolean = false; - @property() private _processingRemove: boolean = false; + + @property() private _processingAdd = false; + + @property() private _processingRemove = false; + @property() private _filteredDevices: ZHADevice[] = []; + @property() private _selectedDevicesToAdd: string[] = []; + @property() private _selectedDevicesToRemove: string[] = []; - private _firstUpdatedCalled: boolean = false; + private _firstUpdatedCalled = false; private _members = memoizeOne( (group: ZHAGroup): ZHADevice[] => group.members @@ -152,7 +160,7 @@ export class ZHAGroupPage extends LitElement {
    @@ -186,7 +194,7 @@ export class ZHAGroupPage extends LitElement {
    diff --git a/src/panels/config/zha/zha-groups-dashboard.ts b/src/panels/config/zha/zha-groups-dashboard.ts index cee06458ca..974fb1da96 100644 --- a/src/panels/config/zha/zha-groups-dashboard.ts +++ b/src/panels/config/zha/zha-groups-dashboard.ts @@ -1,34 +1,38 @@ -import "./zha-groups-data-table"; - -import { - LitElement, - html, - TemplateResult, - property, - customElement, - CSSResult, - css, - PropertyValues, -} from "lit-element"; -import { HomeAssistant } from "../../../types"; -import { ZHAGroup, fetchGroups, removeGroups } from "../../../data/zha"; -import { sortZHAGroups } from "./functions"; -import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; import "@material/mwc-button"; -import "@polymer/paper-spinner/paper-spinner"; import "@polymer/paper-icon-button/paper-icon-button"; -import { navigate } from "../../../common/navigate"; -import "../../../layouts/hass-subpage"; +import "@polymer/paper-spinner/paper-spinner"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { navigate } from "../../../common/navigate"; +import { SelectionChangedEvent } from "../../../components/data-table/ha-data-table"; +import { fetchGroups, removeGroups, ZHAGroup } from "../../../data/zha"; +import "../../../layouts/hass-subpage"; +import { HomeAssistant } from "../../../types"; +import { sortZHAGroups } from "./functions"; +import "./zha-groups-data-table"; @customElement("zha-groups-dashboard") export class ZHAGroupsDashboard extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow = false; + @property() public _groups?: ZHAGroup[]; - @property() private _processingRemove: boolean = false; + + @property() private _processingRemove = false; + @property() private _selectedGroupsToRemove: number[] = []; - private _firstUpdatedCalled: boolean = false; + + private _firstUpdatedCalled = false; public connectedCallback(): void { super.connectedCallback(); @@ -80,7 +84,7 @@ export class ZHAGroupsDashboard extends LitElement {
    diff --git a/src/panels/config/zha/zha-groups-data-table.ts b/src/panels/config/zha/zha-groups-data-table.ts index d1cc0a03d5..ead1a9f20a 100644 --- a/src/panels/config/zha/zha-groups-data-table.ts +++ b/src/panels/config/zha/zha-groups-data-table.ts @@ -1,26 +1,22 @@ -import "../../../components/data-table/ha-data-table"; -import "../../../components/entity/ha-state-icon"; - -import memoizeOne from "memoize-one"; - import { - LitElement, - html, - TemplateResult, - property, customElement, + html, + LitElement, + property, query, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../types"; -// tslint:disable-next-line -import { +import memoizeOne from "memoize-one"; +import { navigate } from "../../../common/navigate"; +import "../../../components/data-table/ha-data-table"; +import type { DataTableColumnContainer, HaDataTable, } from "../../../components/data-table/ha-data-table"; -// tslint:disable-next-line -import { ZHAGroup, ZHADevice } from "../../../data/zha"; +import "../../../components/entity/ha-state-icon"; +import type { ZHADevice, ZHAGroup } from "../../../data/zha"; +import type { HomeAssistant } from "../../../types"; import { formatAsPaddedHex } from "./functions"; -import { navigate } from "../../../common/navigate"; export interface GroupRowData extends ZHAGroup { group?: GroupRowData; @@ -30,9 +26,13 @@ export interface GroupRowData extends ZHAGroup { @customElement("zha-groups-data-table") export class ZHAGroupsDataTable extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow = false; + @property() public groups: ZHAGroup[] = []; + @property() public selectable = false; + @query("ha-data-table") private _dataTable!: HaDataTable; private _groups = memoizeOne((groups: ZHAGroup[]) => { @@ -83,9 +83,7 @@ export class ZHAGroupsDataTable extends LitElement { type: "numeric", width: "15%", template: (groupId: number) => { - return html` - ${formatAsPaddedHex(groupId)} - `; + return html` ${formatAsPaddedHex(groupId)} `; }, sortable: true, }, @@ -94,9 +92,7 @@ export class ZHAGroupsDataTable extends LitElement { type: "numeric", width: "15%", template: (members: ZHADevice[]) => { - return html` - ${members.length} - `; + return html` ${members.length} `; }, sortable: true, }, diff --git a/src/panels/config/zha/zha-node.ts b/src/panels/config/zha/zha-node.ts index b0f1468369..fa9e3382b8 100644 --- a/src/panels/config/zha/zha-node.ts +++ b/src/panels/config/zha/zha-node.ts @@ -1,10 +1,4 @@ -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../ha-config-section"; -import "./zha-device-card"; import "@polymer/paper-icon-button/paper-icon-button"; - import { css, CSSResult, @@ -14,18 +8,25 @@ import { property, TemplateResult, } from "lit-element"; - +import { navigate } from "../../../common/navigate"; +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; +import "../../../components/ha-service-description"; import { ZHADevice } from "../../../data/zha"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; -import { navigate } from "../../../common/navigate"; +import "../ha-config-section"; +import "./zha-device-card"; @customElement("zha-node") export class ZHANode extends LitElement { @property() public hass?: HomeAssistant; + @property() public isWide?: boolean; + @property() public device?: ZHADevice; - @property() private _showHelp: boolean = false; + + @property() private _showHelp = false; protected render(): TemplateResult { return html` @@ -67,7 +68,7 @@ export class ZHANode extends LitElement { showName showModelInfo .showEntityDetail=${false} - .showActions="${this.device.device_type !== "Coordinator"}" + showActions @zha-device-removed=${this._onDeviceRemoved} > ` diff --git a/src/panels/config/zone/dialog-zone-detail.ts b/src/panels/config/zone/dialog-zone-detail.ts index b216e6cfe8..71096cc4a4 100644 --- a/src/panels/config/zone/dialog-zone-detail.ts +++ b/src/panels/config/zone/dialog-zone-detail.ts @@ -1,41 +1,47 @@ +import "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; -import "@material/mwc-button"; - -import "../../../components/map/ha-location-editor"; -import "../../../components/ha-switch"; - -import { ZoneDetailDialogParams } from "./show-dialog-zone-detail"; -import { HomeAssistant } from "../../../types"; -import { - ZoneMutableParams, - passiveRadiusColor, - defaultRadiusColor, - getZoneEditorInitData, -} from "../../../data/zone"; import { addDistanceToCoord } from "../../../common/location/add_distance_to_coord"; import { createCloseHeading } from "../../../components/ha-dialog"; +import "../../../components/ha-switch"; +import "../../../components/map/ha-location-editor"; +import { + defaultRadiusColor, + getZoneEditorInitData, + passiveRadiusColor, + ZoneMutableParams, +} from "../../../data/zone"; import { haStyleDialog } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; +import { ZoneDetailDialogParams } from "./show-dialog-zone-detail"; class DialogZoneDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _name!: string; + @property() private _icon!: string; + @property() private _latitude!: number; + @property() private _longitude!: number; + @property() private _passive!: boolean; + @property() private _radius!: number; + @property() private _error?: string; + @property() private _params?: ZoneDetailDialogParams; - @property() private _submitting: boolean = false; + + @property() private _submitting = false; public async showDialog(params: ZoneDetailDialogParams): Promise { this._params = params; @@ -96,11 +102,7 @@ class DialogZoneDetail extends LitElement { )} >
    - ${this._error - ? html` -
    ${this._error}
    - ` - : ""} + ${this._error ? html`
    ${this._error}
    ` : ""}
    - `; + return html` `; } const hass = this.hass; const listBox = @@ -406,7 +410,7 @@ export class HaConfigZone extends SubscribeMixin(LitElement) { private async _updateEntry( entry: Zone, values: Partial, - fitMap: boolean = false + fitMap = false ) { const updated = await updateZone(this.hass!, entry!.id, values); this._storageItems = this._storageItems!.map((ent) => diff --git a/src/panels/config/zwave/ha-config-zwave.js b/src/panels/config/zwave/ha-config-zwave.js index cb0a6639eb..16f0522d37 100644 --- a/src/panels/config/zwave/ha-config-zwave.js +++ b/src/panels/config/zwave/ha-config-zwave.js @@ -6,31 +6,29 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { sortStatesByName } from "../../../common/entity/states_sort_by_name"; import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-menu-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-paper-icon-button-arrow-prev"; -import "../../../layouts/ha-app-layout"; -import "../../../resources/ha-style"; import "../../../components/ha-card"; - +import "../../../components/ha-menu-button"; +import "../../../components/ha-paper-icon-button-arrow-prev"; +import "../../../components/ha-service-description"; +import "../../../layouts/ha-app-layout"; +import { EventsMixin } from "../../../mixins/events-mixin"; +import LocalizeMixin from "../../../mixins/localize-mixin"; +import "../../../resources/ha-style"; import "../ha-config-section"; import "../ha-form-style"; import "./zwave-groups"; import "./zwave-log"; import "./zwave-network"; import "./zwave-node-config"; +import "./zwave-node-protection"; import "./zwave-usercodes"; import "./zwave-values"; -import "./zwave-node-protection"; - -import { sortStatesByName } from "../../../common/entity/states_sort_by_name"; -import { computeStateName } from "../../../common/entity/compute_state_name"; -import { computeStateDomain } from "../../../common/entity/compute_state_domain"; -import { EventsMixin } from "../../../mixins/events-mixin"; -import LocalizeMixin from "../../../mixins/localize-mixin"; /* * @appliesMixin LocalizeMixin diff --git a/src/panels/config/zwave/zwave-groups.js b/src/panels/config/zwave/zwave-groups.js index 5b67a07f3c..165cfbbcfd 100644 --- a/src/panels/config/zwave/zwave-groups.js +++ b/src/panels/config/zwave/zwave-groups.js @@ -2,13 +2,12 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import { computeStateName } from "../../../common/entity/compute_state_name"; import "../../../components/buttons/ha-call-service-button"; import "../../../components/ha-card"; -import { computeStateName } from "../../../common/entity/compute_state_name"; - class ZwaveGroups extends PolymerElement { static get template() { return html` diff --git a/src/panels/config/zwave/zwave-log-dialog.js b/src/panels/config/zwave/zwave-log-dialog.js index c85617702e..8f2c271c62 100644 --- a/src/panels/config/zwave/zwave-log-dialog.js +++ b/src/panels/config/zwave/zwave-log-dialog.js @@ -1,11 +1,10 @@ import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../components/dialog/ha-paper-dialog"; -import "../../../resources/ha-style"; - import { EventsMixin } from "../../../mixins/events-mixin"; +import "../../../resources/ha-style"; class ZwaveLogDialog extends EventsMixin(PolymerElement) { static get template() { diff --git a/src/panels/config/zwave/zwave-log.js b/src/panels/config/zwave/zwave-log.js index af91e490fc..b933bdd7ee 100755 --- a/src/panels/config/zwave/zwave-log.js +++ b/src/panels/config/zwave/zwave-log.js @@ -2,13 +2,13 @@ import "@material/mwc-button"; import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; -import LocalizeMixin from "../../../mixins/localize-mixin"; -import { EventsMixin } from "../../../mixins/events-mixin"; import isPwa from "../../../common/config/is_pwa"; - -import "../ha-config-section"; import "../../../components/ha-card"; +import { EventsMixin } from "../../../mixins/events-mixin"; +import LocalizeMixin from "../../../mixins/localize-mixin"; +import "../ha-config-section"; let registeredDialog = false; diff --git a/src/panels/config/zwave/zwave-network.ts b/src/panels/config/zwave/zwave-network.ts index 05dc9e73ab..187e22d742 100644 --- a/src/panels/config/zwave/zwave-network.ts +++ b/src/panels/config/zwave/zwave-network.ts @@ -1,6 +1,6 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-spinner/paper-spinner"; - +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { css, CSSResult, @@ -10,32 +10,33 @@ import { property, TemplateResult, } from "lit-element"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; - -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; +import "../../../components/buttons/ha-call-api-button"; +import "../../../components/buttons/ha-call-service-button"; +import "../../../components/ha-card"; +import "../../../components/ha-icon"; +import "../../../components/ha-service-description"; import { fetchNetworkStatus, ZWaveNetworkStatus, - ZWAVE_NETWORK_STATE_STOPPED, - ZWAVE_NETWORK_STATE_STARTED, ZWAVE_NETWORK_STATE_AWAKED, ZWAVE_NETWORK_STATE_READY, + ZWAVE_NETWORK_STATE_STARTED, + ZWAVE_NETWORK_STATE_STOPPED, } from "../../../data/zwave"; - -import "../../../components/buttons/ha-call-api-button"; -import "../../../components/buttons/ha-call-service-button"; -import "../../../components/ha-service-description"; -import "../../../components/ha-card"; -import "../../../components/ha-icon"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; import "../ha-config-section"; @customElement("zwave-network") export class ZwaveNetwork extends LitElement { @property() public hass!: HomeAssistant; + @property() public isWide!: boolean; + @property() private _showHelp = false; + @property() private _networkStatus?: ZWaveNetworkStatus; + @property() private _unsubs: Array> = []; public disconnectedCallback(): void { @@ -133,9 +134,7 @@ export class ZwaveNetwork extends LitElement { ${this._generateServiceButton("heal_network")} ${this._generateServiceButton("test_network")} ` - : html` - ${this._generateServiceButton("start_network")} - `} + : html` ${this._generateServiceButton("start_network")} `}
    ${this._networkStatus.state >= ZWAVE_NETWORK_STATE_AWAKED ? html` diff --git a/src/panels/config/zwave/zwave-node-config.ts b/src/panels/config/zwave/zwave-node-config.ts index 9b38099a2c..b50ef6f2c7 100644 --- a/src/panels/config/zwave/zwave-node-config.ts +++ b/src/panels/config/zwave/zwave-node-config.ts @@ -2,7 +2,6 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, @@ -10,31 +9,36 @@ import { html, LitElement, property, - TemplateResult, PropertyValues, + TemplateResult, } from "lit-element"; - -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; - import "../../../components/buttons/ha-call-service-button"; import "../../../components/ha-card"; import { - ZWaveConfigItem, - ZWaveNode, - ZWaveConfigServiceData, fetchNodeConfig, + ZWaveConfigItem, + ZWaveConfigServiceData, + ZWaveNode, } from "../../../data/zwave"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; @customElement("zwave-node-config") export class ZwaveNodeConfig extends LitElement { @property() public hass!: HomeAssistant; + @property() public nodes: ZWaveNode[] = []; + @property() public config: ZWaveConfigItem[] = []; - @property() public selectedNode: number = -1; + + @property() public selectedNode = -1; + @property() private _configItem?: ZWaveConfigItem; - @property() private _wakeupInput: number = -1; - @property() private _selectedConfigParameter: number = -1; + + @property() private _wakeupInput = -1; + + @property() private _selectedConfigParameter = -1; + @property() private _selectedConfigValue: number | string = -1; protected render(): TemplateResult { @@ -286,11 +290,8 @@ export class ZwaveNodeConfig extends LitElement { return; } this._configItem = undefined; - this._wakeupInput = this.nodes[this.selectedNode].attributes.hasOwnProperty( - "wake_up_interval" - ) - ? this.nodes[this.selectedNode].attributes.wake_up_interval! - : -1; + this._wakeupInput = + this.nodes[this.selectedNode].attributes.wake_up_interval || -1; } private _onWakeupIntervalChanged(value: ChangeEvent): void { diff --git a/src/panels/config/zwave/zwave-node-protection.js b/src/panels/config/zwave/zwave-node-protection.js index 4bc5eb452d..c980187c5c 100644 --- a/src/panels/config/zwave/zwave-node-protection.js +++ b/src/panels/config/zwave/zwave-node-protection.js @@ -3,8 +3,8 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../components/buttons/ha-call-api-button"; import "../../../components/ha-card"; diff --git a/src/panels/config/zwave/zwave-usercodes.js b/src/panels/config/zwave/zwave-usercodes.js index accda0f215..2ab33eba5d 100644 --- a/src/panels/config/zwave/zwave-usercodes.js +++ b/src/panels/config/zwave/zwave-usercodes.js @@ -3,8 +3,8 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../../components/buttons/ha-call-service-button"; import "../../../components/ha-card"; diff --git a/src/panels/config/zwave/zwave-values.ts b/src/panels/config/zwave/zwave-values.ts index a06d933ded..20b5eeec35 100644 --- a/src/panels/config/zwave/zwave-values.ts +++ b/src/panels/config/zwave/zwave-values.ts @@ -1,7 +1,6 @@ import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - import { css, CSSResult, @@ -11,20 +10,19 @@ import { property, TemplateResult, } from "lit-element"; - -import { haStyle } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; - import "../../../components/buttons/ha-call-service-button"; import "../../../components/ha-card"; - import { ZWaveValue } from "../../../data/zwave"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; @customElement("zwave-values") export class ZwaveValues extends LitElement { @property() public hass!: HomeAssistant; + @property() public values: ZWaveValue[] = []; - @property() private _selectedValue: number = -1; + + @property() private _selectedValue = -1; protected render(): TemplateResult { return html` diff --git a/src/panels/custom/ha-panel-custom.ts b/src/panels/custom/ha-panel-custom.ts index fc4d302073..6de6709a60 100644 --- a/src/panels/custom/ha-panel-custom.ts +++ b/src/panels/custom/ha-panel-custom.ts @@ -1,10 +1,10 @@ import { property, PropertyValues, UpdatingElement } from "lit-element"; -import { loadCustomPanel } from "../../util/custom-panel/load-custom-panel"; -import { createCustomPanelElement } from "../../util/custom-panel/create-custom-panel-element"; -import { setCustomPanelProperties } from "../../util/custom-panel/set-custom-panel-properties"; -import { HomeAssistant, Route } from "../../types"; -import { CustomPanelInfo } from "../../data/panel_custom"; import { navigate } from "../../common/navigate"; +import { CustomPanelInfo } from "../../data/panel_custom"; +import { HomeAssistant, Route } from "../../types"; +import { createCustomPanelElement } from "../../util/custom-panel/create-custom-panel-element"; +import { loadCustomPanel } from "../../util/custom-panel/load-custom-panel"; +import { setCustomPanelProperties } from "../../util/custom-panel/set-custom-panel-properties"; declare global { interface Window { @@ -14,9 +14,13 @@ declare global { export class HaPanelCustom extends UpdatingElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public route!: Route; + @property() public panel!: CustomPanelInfo; + private _setProperties?: (props: {}) => void | undefined; // Since navigate fires events on `window`, we need to expose this as a function diff --git a/src/panels/developer-tools/developer-tools-router.ts b/src/panels/developer-tools/developer-tools-router.ts index 7af7705ac1..ecb4caf2ad 100644 --- a/src/panels/developer-tools/developer-tools-router.ts +++ b/src/panels/developer-tools/developer-tools-router.ts @@ -1,11 +1,12 @@ -import { HassRouterPage, RouterOptions } from "../../layouts/hass-router-page"; -import { customElement, property } from "lit-element"; import { PolymerElement } from "@polymer/polymer"; +import { customElement, property } from "lit-element"; +import { HassRouterPage, RouterOptions } from "../../layouts/hass-router-page"; import { HomeAssistant } from "../../types"; @customElement("developer-tools-router") class DeveloperToolsRouter extends HassRouterPage { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; protected routerOptions: RouterOptions = { diff --git a/src/panels/developer-tools/event/developer-tools-event.js b/src/panels/developer-tools/event/developer-tools-event.js index e2ea852a8e..b861cb77e9 100644 --- a/src/panels/developer-tools/event/developer-tools-event.js +++ b/src/panels/developer-tools/event/developer-tools-event.js @@ -1,18 +1,17 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { safeLoad } from "js-yaml"; - import "../../../components/ha-code-editor"; -import "../../../resources/ha-style"; -import "./events-list"; -import "./event-subscribe-card"; +import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; -import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; +import "../../../resources/ha-style"; +import "./event-subscribe-card"; +import "./events-list"; const ERROR_SENTINEL = {}; /* @@ -165,7 +164,7 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) { return; } this.hass.callApi("POST", "events/" + this.eventType, this.parsedJSON).then( - function() { + function () { this.fire("hass-notification", { message: this.hass.localize( "ui.panel.developer-tools.tabs.events.notification_event_fired", diff --git a/src/panels/developer-tools/event/event-subscribe-card.ts b/src/panels/developer-tools/event/event-subscribe-card.ts index 4816672d59..7e64b3ba34 100644 --- a/src/panels/developer-tools/event/event-subscribe-card.ts +++ b/src/panels/developer-tools/event/event-subscribe-card.ts @@ -1,19 +1,19 @@ -import { - LitElement, - customElement, - TemplateResult, - html, - property, - CSSResult, - css, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; import { HassEvent } from "home-assistant-js-websocket"; -import { HomeAssistant } from "../../../types"; -import { PolymerChangedEvent } from "../../../polymer-types"; -import "../../../components/ha-card"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { formatTime } from "../../../common/datetime/format_time"; +import "../../../components/ha-card"; +import { PolymerChangedEvent } from "../../../polymer-types"; +import { HomeAssistant } from "../../../types"; @customElement("event-subscribe-card") class EventSubscribeCard extends LitElement { diff --git a/src/panels/developer-tools/event/events-list.js b/src/panels/developer-tools/event/events-list.js index b3f5e4e0c3..86cb30bee4 100644 --- a/src/panels/developer-tools/event/events-list.js +++ b/src/panels/developer-tools/event/events-list.js @@ -1,6 +1,6 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { compare } from "../../../common/string/compare"; import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; @@ -58,7 +58,7 @@ class EventsList extends EventsMixin(LocalizeMixin(PolymerElement)) { connectedCallback() { super.connectedCallback(); this.hass.callApi("GET", "events").then( - function(events) { + function (events) { this.events = events.sort((e1, e2) => compare(e1.event, e2.event)); }.bind(this) ); diff --git a/src/panels/developer-tools/ha-panel-developer-tools.ts b/src/panels/developer-tools/ha-panel-developer-tools.ts index 41f4c6c1da..c0f9adbc18 100644 --- a/src/panels/developer-tools/ha-panel-developer-tools.ts +++ b/src/panels/developer-tools/ha-panel-developer-tools.ts @@ -1,33 +1,32 @@ -import { - LitElement, - TemplateResult, - html, - CSSResultArray, - css, - customElement, - property, -} from "lit-element"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-tabs/paper-tab"; import "@polymer/paper-tabs/paper-tabs"; - -import "../../components/ha-menu-button"; -import "./developer-tools-router"; - +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { isComponentLoaded } from "../../common/config/is_component_loaded"; import scrollToTarget from "../../common/dom/scroll-to-target"; - +import { navigate } from "../../common/navigate"; +import "../../components/ha-menu-button"; import { haStyle } from "../../resources/styles"; import { HomeAssistant, Route } from "../../types"; -import { navigate } from "../../common/navigate"; -import { isComponentLoaded } from "../../common/config/is_component_loaded"; +import "./developer-tools-router"; @customElement("ha-panel-developer-tools") class PanelDeveloperTools extends LitElement { @property() public hass!: HomeAssistant; + @property() public route!: Route; + @property() public narrow!: boolean; protected render(): TemplateResult { diff --git a/src/panels/developer-tools/info/developer-tools-info.ts b/src/panels/developer-tools/info/developer-tools-info.ts index 2576fda229..4bebb76103 100644 --- a/src/panels/developer-tools/info/developer-tools-info.ts +++ b/src/panels/developer-tools/info/developer-tools-info.ts @@ -1,17 +1,15 @@ import { - LitElement, - html, - CSSResult, css, - TemplateResult, + CSSResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../types"; import { haStyle } from "../../../resources/styles"; - -import "./system-health-card"; +import { HomeAssistant } from "../../../types"; import "./integrations-card"; +import "./system-health-card"; const JS_TYPE = __BUILD__; const JS_VERSION = __VERSION__; diff --git a/src/panels/developer-tools/info/integrations-card.ts b/src/panels/developer-tools/info/integrations-card.ts index b1663a57c6..14b9a5914e 100644 --- a/src/panels/developer-tools/info/integrations-card.ts +++ b/src/panels/developer-tools/info/integrations-card.ts @@ -1,18 +1,18 @@ import { + css, + CSSResult, + customElement, + html, LitElement, property, TemplateResult, - html, - customElement, - CSSResult, - css, } from "lit-element"; -import { HomeAssistant } from "../../../types"; import memoizeOne from "memoize-one"; import { integrationDocsUrl, integrationIssuesUrl, } from "../../../data/integration"; +import { HomeAssistant } from "../../../types"; @customElement("integrations-card") class IntegrationsCard extends LitElement { @@ -30,6 +30,16 @@ class IntegrationsCard extends LitElement { ${this._sortedIntegrations(this.hass!.config.components).map( (domain) => html` + + + ${domain} { if (a === "homeassistant") { @@ -33,6 +32,7 @@ const sortKeys = (a: string, b: string) => { class SystemHealthCard extends LitElement { @property() public hass!: HomeAssistant; + @property() private _info?: SystemHealthInfo; protected render(): TemplateResult { @@ -64,9 +64,7 @@ class SystemHealthCard extends LitElement { } if (domain !== "homeassistant") { sections.push( - html` -

    ${this.hass.localize(`domain.${domain}`) || domain}

    - ` + html`

    ${this.hass.localize(`domain.${domain}`) || domain}

    ` ); } sections.push(html` diff --git a/src/panels/developer-tools/logs/developer-tools-logs.ts b/src/panels/developer-tools/logs/developer-tools-logs.ts index fdb8fbb272..5a027e3e0f 100644 --- a/src/panels/developer-tools/logs/developer-tools-logs.ts +++ b/src/panels/developer-tools/logs/developer-tools-logs.ts @@ -1,21 +1,18 @@ import { - LitElement, - html, - CSSResult, css, - TemplateResult, + CSSResult, + customElement, + html, + LitElement, property, query, - customElement, + TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../types"; import { haStyle } from "../../../resources/styles"; - -import "../logs/system-log-card"; -import "../logs/error-log-card"; -// tslint:disable-next-line -import { SystemLogCard } from "../logs/system-log-card"; +import { HomeAssistant } from "../../../types"; +import "./error-log-card"; +import "./system-log-card"; +import type { SystemLogCard } from "./system-log-card"; @customElement("developer-tools-logs") export class HaPanelDevLogs extends LitElement { diff --git a/src/panels/developer-tools/logs/dialog-system-log-detail.ts b/src/panels/developer-tools/logs/dialog-system-log-detail.ts index b1e48d19a5..c9b54b6943 100644 --- a/src/panels/developer-tools/logs/dialog-system-log-detail.ts +++ b/src/panels/developer-tools/logs/dialog-system-log-detail.ts @@ -1,29 +1,28 @@ +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import { - LitElement, - html, css, CSSResult, - TemplateResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; - import "../../../components/dialog/ha-paper-dialog"; - -import { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail"; +import { + domainToName, + integrationDocsUrl, + integrationIssuesUrl, +} from "../../../data/integration"; +import { getLoggedErrorIntegration } from "../../../data/system_log"; import { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; -import { - integrationDocsUrl, - integrationIssuesUrl, - domainToName, -} from "../../../data/integration"; +import { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail"; import { formatSystemLogTime } from "./util"; -import { getLoggedErrorIntegration } from "../../../data/system_log"; class DialogSystemLogDetail extends LitElement { @property() public hass!: HomeAssistant; + @property() private _params?: SystemLogDetailDialogParams; public async showDialog(params: SystemLogDetailDialogParams): Promise { @@ -91,20 +90,11 @@ class DialogSystemLogDetail extends LitElement { ${item.message.length > 1 ? html`
      - ${item.message.map( - (msg) => - html` -
    • ${msg}
    • - ` - )} + ${item.message.map((msg) => html`
    • ${msg}
    • `)}
    ` : item.message[0]} - ${item.exception - ? html` -
    ${item.exception}
    - ` - : html``} + ${item.exception ? html`
    ${item.exception}
    ` : html``} `; diff --git a/src/panels/developer-tools/logs/error-log-card.ts b/src/panels/developer-tools/logs/error-log-card.ts index fcb7bf476a..9975997c13 100644 --- a/src/panels/developer-tools/logs/error-log-card.ts +++ b/src/panels/developer-tools/logs/error-log-card.ts @@ -1,19 +1,19 @@ -import { - LitElement, - html, - CSSResult, - css, - TemplateResult, - property, -} from "lit-element"; -import "@polymer/paper-icon-button/paper-icon-button"; import "@material/mwc-button"; - -import { HomeAssistant } from "../../../types"; +import "@polymer/paper-icon-button/paper-icon-button"; +import { + css, + CSSResult, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fetchErrorLog } from "../../../data/error_log"; +import { HomeAssistant } from "../../../types"; class ErrorLogCard extends LitElement { @property() public hass!: HomeAssistant; + @property() private _errorLog?: string; protected render(): TemplateResult { diff --git a/src/panels/developer-tools/logs/system-log-card.ts b/src/panels/developer-tools/logs/system-log-card.ts index 72d59cdbd1..cf0b9f0c21 100644 --- a/src/panels/developer-tools/logs/system-log-card.ts +++ b/src/panels/developer-tools/logs/system-log-card.ts @@ -1,33 +1,35 @@ -import { - LitElement, - html, - CSSResult, - css, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-icon-button/paper-icon-button"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-spinner/paper-spinner"; -import "../../../components/ha-card"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/buttons/ha-call-service-button"; import "../../../components/buttons/ha-progress-button"; -import { HomeAssistant } from "../../../types"; +import "../../../components/ha-card"; +import { domainToName } from "../../../data/integration"; import { - LoggedError, fetchSystemLog, getLoggedErrorIntegration, + LoggedError, } from "../../../data/system_log"; +import { HomeAssistant } from "../../../types"; import { showSystemLogDetailDialog } from "./show-dialog-system-log-detail"; import { formatSystemLogTime } from "./util"; -import { domainToName } from "../../../data/integration"; @customElement("system-log-card") export class SystemLogCard extends LitElement { @property() public hass!: HomeAssistant; + public loaded = false; + @property() private _items?: LoggedError[]; public async fetchData(): Promise { diff --git a/src/panels/developer-tools/logs/util.ts b/src/panels/developer-tools/logs/util.ts index 53912f5f91..ae795d9ffb 100644 --- a/src/panels/developer-tools/logs/util.ts +++ b/src/panels/developer-tools/logs/util.ts @@ -1,5 +1,4 @@ import { formatDateTimeWithSeconds } from "../../../common/datetime/format_date_time"; - import { formatTimeWithSeconds } from "../../../common/datetime/format_time"; export const formatSystemLogTime = (date, language: string) => { diff --git a/src/panels/developer-tools/mqtt/developer-tools-mqtt.ts b/src/panels/developer-tools/mqtt/developer-tools-mqtt.ts index e527f4d0dc..5ed1c38b88 100644 --- a/src/panels/developer-tools/mqtt/developer-tools-mqtt.ts +++ b/src/panels/developer-tools/mqtt/developer-tools-mqtt.ts @@ -1,20 +1,18 @@ -import { - LitElement, - customElement, - TemplateResult, - html, - property, - CSSResultArray, - css, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; - -import { HomeAssistant } from "../../../types"; - -import { haStyle } from "../../../resources/styles"; +import { + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import "../../../components/ha-card"; import "../../../components/ha-code-editor"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; import "./mqtt-subscribe-card"; @customElement("developer-tools-mqtt") @@ -25,7 +23,7 @@ class HaPanelDevMqtt extends LitElement { @property() private payload = ""; - private inited: boolean = false; + private inited = false; protected firstUpdated() { if (localStorage && localStorage["panel-dev-mqtt-topic"]) { diff --git a/src/panels/developer-tools/mqtt/mqtt-subscribe-card.ts b/src/panels/developer-tools/mqtt/mqtt-subscribe-card.ts index 67d128ff7a..0c65086c02 100644 --- a/src/panels/developer-tools/mqtt/mqtt-subscribe-card.ts +++ b/src/panels/developer-tools/mqtt/mqtt-subscribe-card.ts @@ -1,19 +1,18 @@ -import { - LitElement, - customElement, - TemplateResult, - html, - property, - CSSResult, - css, -} from "lit-element"; import "@material/mwc-button"; import "@polymer/paper-input/paper-input"; -import { HomeAssistant } from "../../../types"; -import "../../../components/ha-card"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { formatTime } from "../../../common/datetime/format_time"; - -import { subscribeMQTTTopic, MQTTMessage } from "../../../data/mqtt"; +import "../../../components/ha-card"; +import { MQTTMessage, subscribeMQTTTopic } from "../../../data/mqtt"; +import { HomeAssistant } from "../../../types"; @customElement("mqtt-subscribe-card") class MqttSubscribeCard extends LitElement { diff --git a/src/panels/developer-tools/service/developer-tools-service.js b/src/panels/developer-tools/service/developer-tools-service.js index f4a057f910..c34299a020 100644 --- a/src/panels/developer-tools/service/developer-tools-service.js +++ b/src/panels/developer-tools/service/developer-tools-service.js @@ -1,17 +1,16 @@ import "@material/mwc-button"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { safeDump, safeLoad } from "js-yaml"; - -import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity"; import "../../../components/entity/ha-entity-picker"; import "../../../components/ha-code-editor"; import "../../../components/ha-service-picker"; +import { ENTITY_COMPONENT_DOMAINS } from "../../../data/entity"; +import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; +import LocalizeMixin from "../../../mixins/localize-mixin"; import "../../../resources/ha-style"; import "../../../util/app-localstorage-document"; -import LocalizeMixin from "../../../mixins/localize-mixin"; -import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; const ERROR_SENTINEL = {}; /* @@ -241,7 +240,7 @@ class HaPanelDevService extends LocalizeMixin(PolymerElement) { if (!(service in serviceDomains[domain])) return []; const fields = serviceDomains[domain][service].fields; - return Object.keys(fields).map(function(field) { + return Object.keys(fields).map(function (field) { return { key: field, ...fields[field] }; }); } diff --git a/src/panels/developer-tools/state/developer-tools-state.js b/src/panels/developer-tools/state/developer-tools-state.js index f1f56b963a..6472cbe813 100644 --- a/src/panels/developer-tools/state/developer-tools-state.js +++ b/src/panels/developer-tools/state/developer-tools-state.js @@ -2,16 +2,15 @@ import "@material/mwc-button"; import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { safeDump, safeLoad } from "js-yaml"; - import "../../../components/entity/ha-entity-picker"; import "../../../components/ha-code-editor"; -import "../../../resources/ha-style"; +import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { EventsMixin } from "../../../mixins/events-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; -import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; +import "../../../resources/ha-style"; const ERROR_SENTINEL = {}; /* @@ -247,6 +246,9 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { return; } var state = this.hass.states[this._entityId]; + if (!state) { + return; + } this._state = state.state; this._stateAttributes = safeDump(state.attributes); } @@ -273,10 +275,10 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { computeEntities(hass, _entityFilter, _stateFilter, _attributeFilter) { return Object.keys(hass.states) - .map(function(key) { + .map(function (key) { return hass.states[key]; }) - .filter(function(value) { + .filter(function (value) { if (!value.entity_id.includes(_entityFilter.toLowerCase())) { return false; } @@ -315,9 +317,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { if ( attributeValue !== null && - JSON.stringify(attributeValue) - .toLowerCase() - .includes(valueFilter) + JSON.stringify(attributeValue).toLowerCase().includes(valueFilter) ) { return true; } @@ -329,7 +329,7 @@ class HaPanelDevState extends EventsMixin(LocalizeMixin(PolymerElement)) { return true; }) - .sort(function(entityA, entityB) { + .sort(function (entityA, entityB) { if (entityA.entity_id < entityB.entity_id) { return -1; } diff --git a/src/panels/developer-tools/template/developer-tools-template.js b/src/panels/developer-tools/template/developer-tools-template.js index f4804d665d..2475a7b256 100644 --- a/src/panels/developer-tools/template/developer-tools-template.js +++ b/src/panels/developer-tools/template/developer-tools-template.js @@ -2,10 +2,10 @@ import "@polymer/paper-spinner/paper-spinner"; import { timeOut } from "@polymer/polymer/lib/utils/async"; import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; -import LocalizeMixin from "../../../mixins/localize-mixin"; import "../../../components/ha-code-editor"; - +import LocalizeMixin from "../../../mixins/localize-mixin"; import "../../../resources/ha-style"; class HaPanelDevTemplate extends LocalizeMixin(PolymerElement) { @@ -183,11 +183,11 @@ For loop example: this.rendering = true; this.hass.callApi("POST", "template", { template: this.template }).then( - function(processed) { + function (processed) { this.processed = processed; this.rendering = false; }.bind(this), - function(error) { + function (error) { this.processed = (error && error.body && error.body.message) || this.hass.localize( diff --git a/src/panels/history/ha-panel-history.js b/src/panels/history/ha-panel-history.js index 432f24d247..3538059837 100644 --- a/src/panels/history/ha-panel-history.js +++ b/src/panels/history/ha-panel-history.js @@ -7,19 +7,18 @@ import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "@vaadin/vaadin-date-picker/theme/material/vaadin-date-picker"; - +import { formatDate } from "../../common/datetime/format_date"; +import { computeRTL } from "../../common/util/compute_rtl"; import "../../components/ha-menu-button"; import "../../components/state-history-charts"; import "../../data/ha-state-history-data"; +import LocalizeMixin from "../../mixins/localize-mixin"; import "../../resources/ha-date-picker-style"; import "../../resources/ha-style"; -import { formatDate } from "../../common/datetime/format_date"; -import LocalizeMixin from "../../mixins/localize-mixin"; -import { computeRTL } from "../../common/util/compute_rtl"; - /* * @appliesMixin LocalizeMixin */ @@ -149,7 +148,7 @@ class HaPanelHistory extends LocalizeMixin(PolymerElement) { // ISO8601 formatted date string _currentDate: { type: String, - value: function() { + value: function () { var value = new Date(); var today = new Date( Date.UTC(value.getFullYear(), value.getMonth(), value.getDate()) diff --git a/src/panels/iframe/ha-panel-iframe.js b/src/panels/iframe/ha-panel-iframe.js index 787ef88cbd..ea7826dfc3 100644 --- a/src/panels/iframe/ha-panel-iframe.js +++ b/src/panels/iframe/ha-panel-iframe.js @@ -1,7 +1,7 @@ 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 "../../resources/ha-style"; diff --git a/src/panels/logbook/ha-logbook-data.js b/src/panels/logbook/ha-logbook-data.js index 12a1969f4f..461fea1f60 100644 --- a/src/panels/logbook/ha-logbook-data.js +++ b/src/panels/logbook/ha-logbook-data.js @@ -1,3 +1,4 @@ +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; const DATA_CACHE = {}; @@ -78,8 +79,8 @@ class HaLogbookData extends PolymerElement { } if (entityId !== ALL_ENTITIES && DATA_CACHE[period][date][ALL_ENTITIES]) { - return DATA_CACHE[period][date][ALL_ENTITIES].then(function(entities) { - return entities.filter(function(entity) { + return DATA_CACHE[period][date][ALL_ENTITIES].then(function (entities) { + return entities.filter(function (entity) { return entity.entity_id === entityId; }); }); @@ -100,11 +101,11 @@ class HaLogbookData extends PolymerElement { } return this.hass.callApi("GET", url).then( - function(logbookEntries) { + function (logbookEntries) { logbookEntries.reverse(); return logbookEntries; }, - function() { + function () { return null; } ); diff --git a/src/panels/logbook/ha-logbook.ts b/src/panels/logbook/ha-logbook.ts index ef6a841ca6..ded1e6a288 100644 --- a/src/panels/logbook/ha-logbook.ts +++ b/src/panels/logbook/ha-logbook.ts @@ -1,26 +1,28 @@ -import "../../components/ha-icon"; -import { formatTimeWithSeconds } from "../../common/datetime/format_time"; +import { + css, + CSSResult, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { scroll } from "lit-virtualizer"; import { formatDate } from "../../common/datetime/format_date"; +import { formatTimeWithSeconds } from "../../common/datetime/format_time"; +import { fireEvent } from "../../common/dom/fire_event"; import { domainIcon } from "../../common/entity/domain_icon"; import { stateIcon } from "../../common/entity/state_icon"; import { computeRTL } from "../../common/util/compute_rtl"; -import { - LitElement, - html, - property, - TemplateResult, - CSSResult, - css, - PropertyValues, -} from "lit-element"; -import { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; -import { scroll } from "lit-virtualizer"; +import "../../components/ha-icon"; import { LogbookEntry } from "../../data/logbook"; +import { HomeAssistant } from "../../types"; class HaLogbook extends LitElement { @property() public hass!: HomeAssistant; + @property() public entries: LogbookEntry[] = []; + @property({ attribute: "rtl", type: Boolean, reflect: true }) // @ts-ignore private _rtl = false; @@ -88,9 +90,7 @@ class HaLogbook extends LitElement { >
    ${!item.entity_id - ? html` - ${item.name} - ` + ? html` ${item.name} ` : html` { const el = document.createElement("hui-error-badge"); diff --git a/src/panels/lovelace/badges/hui-state-label-badge.ts b/src/panels/lovelace/badges/hui-state-label-badge.ts index 1535a68963..501e9cd185 100644 --- a/src/panels/lovelace/badges/hui-state-label-badge.ts +++ b/src/panels/lovelace/badges/hui-state-label-badge.ts @@ -1,28 +1,27 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - CSSResult, - css, + TemplateResult, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; - import "../../../components/entity/ha-state-label-badge"; -import "../components/hui-warning-element"; - -import { LovelaceBadge } from "../types"; -import { HomeAssistant } from "../../../types"; -import { StateLabelBadgeConfig } from "./types"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import "../components/hui-warning-element"; +import { LovelaceBadge } from "../types"; +import { StateLabelBadgeConfig } from "./types"; @customElement("hui-state-label-badge") export class HuiStateLabelBadge extends LitElement implements LovelaceBadge { @property() public hass?: HomeAssistant; + @property() protected _config?: StateLabelBadgeConfig; public setConfig(config: StateLabelBadgeConfig): void { diff --git a/src/panels/lovelace/badges/types.ts b/src/panels/lovelace/badges/types.ts index 7b28dae4fb..4868a4bda0 100644 --- a/src/panels/lovelace/badges/types.ts +++ b/src/panels/lovelace/badges/types.ts @@ -1,4 +1,4 @@ -import { LovelaceBadgeConfig, ActionConfig } from "../../../data/lovelace"; +import { ActionConfig, LovelaceBadgeConfig } from "../../../data/lovelace"; import { EntityFilterEntityConfig } from "../entity-rows/types"; export interface EntityFilterBadgeConfig extends LovelaceBadgeConfig { diff --git a/src/panels/lovelace/cards/hui-alarm-panel-card.ts b/src/panels/lovelace/cards/hui-alarm-panel-card.ts index a58a20ccdf..230b86700c 100644 --- a/src/panels/lovelace/cards/hui-alarm-panel-card.ts +++ b/src/panels/lovelace/cards/hui-alarm-panel-card.ts @@ -1,31 +1,30 @@ +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { + css, + CSSResult, + customElement, html, LitElement, - PropertyValues, - TemplateResult, - CSSResult, - css, property, - customElement, + PropertyValues, query, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; - +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/ha-card"; import "../../../components/ha-label-badge"; -import "../components/hui-warning"; - -import { LovelaceCard } from "../types"; -import { HomeAssistant } from "../../../types"; import { callAlarmAction, FORMAT_NUMBER, } from "../../../data/alarm_control_panel"; -import { AlarmPanelCardConfig } from "./types"; -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import type { HomeAssistant } from "../../../types"; import { findEntities } from "../common/find-entites"; -import { fireEvent } from "../../../common/dom/fire_event"; +import "../components/hui-warning"; +import type { LovelaceCard } from "../types"; +import { AlarmPanelCardConfig } from "./types"; const ICONS = { armed_away: "hass:shield-lock", @@ -165,8 +164,8 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard { return html` ${BUTTONS.map((value) => { return value === "" - ? html` - - ` + ? html` ` : html` ${this._config.name || - (stateObj ? computeStateName(stateObj) : "")} + (stateObj ? computeStateName(stateObj) : "")} ` : ""} diff --git a/src/panels/lovelace/cards/hui-conditional-card.ts b/src/panels/lovelace/cards/hui-conditional-card.ts index 1cca6391fc..4c445e1d7b 100644 --- a/src/panels/lovelace/cards/hui-conditional-card.ts +++ b/src/panels/lovelace/cards/hui-conditional-card.ts @@ -1,11 +1,10 @@ import { customElement } from "lit-element"; - +import { LovelaceCardConfig } from "../../../data/lovelace"; +import { computeCardSize } from "../common/compute-card-size"; import { HuiConditionalBase } from "../components/hui-conditional-base"; import { createCardElement } from "../create-element/create-card-element"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { computeCardSize } from "../common/compute-card-size"; import { ConditionalCardConfig } from "./types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; @customElement("hui-conditional-card") class HuiConditionalCard extends HuiConditionalBase implements LovelaceCard { diff --git a/src/panels/lovelace/cards/hui-empty-state-card.ts b/src/panels/lovelace/cards/hui-empty-state-card.ts index 2119c1f8f4..8118ffc1dd 100644 --- a/src/panels/lovelace/cards/hui-empty-state-card.ts +++ b/src/panels/lovelace/cards/hui-empty-state-card.ts @@ -1,17 +1,15 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - CSSResult, - css, - customElement, property, + TemplateResult, } from "lit-element"; - import "../../../components/ha-card"; - -import { LovelaceCard } from "../types"; import { HomeAssistant } from "../../../types"; +import { LovelaceCard } from "../types"; import { EmptyStateCardConfig } from "./types"; @customElement("hui-empty-state-card") @@ -23,7 +21,7 @@ export class HuiEmptyStateCard extends LitElement implements LovelaceCard { } public setConfig(_config: EmptyStateCardConfig): void { - // tslint:disable-next-line + // eslint-disable-next-line } protected render(): TemplateResult { diff --git a/src/panels/lovelace/cards/hui-entities-card.ts b/src/panels/lovelace/cards/hui-entities-card.ts index 3797bd24e9..dd01b242a9 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -1,33 +1,31 @@ import { - html, - LitElement, - PropertyValues, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; - +import { DOMAINS_TOGGLE } from "../../../common/const"; +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { computeDomain } from "../../../common/entity/compute_domain"; import "../../../components/ha-card"; -import "../components/hui-entities-toggle"; - import { HomeAssistant } from "../../../types"; +import { findEntities } from "../common/find-entites"; +import { processConfigEntities } from "../common/process-config-entities"; +import "../components/hui-entities-toggle"; +import { createHeaderFooterElement } from "../create-element/create-header-footer-element"; +import { createRowElement } from "../create-element/create-row-element"; import { LovelaceRow } from "../entity-rows/types"; +import { LovelaceHeaderFooterConfig } from "../header-footer/types"; import { LovelaceCard, LovelaceCardEditor, LovelaceHeaderFooter, } from "../types"; -import { processConfigEntities } from "../common/process-config-entities"; -import { createRowElement } from "../create-element/create-row-element"; import { EntitiesCardConfig, EntitiesCardEntityConfig } from "./types"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; -import { createHeaderFooterElement } from "../create-element/create-header-footer-element"; -import { LovelaceHeaderFooterConfig } from "../header-footer/types"; -import { DOMAINS_TOGGLE } from "../../../common/const"; -import { computeDomain } from "../../../common/entity/compute_domain"; -import { findEntities } from "../common/find-entites"; @customElement("hui-entities-card") class HuiEntitiesCard extends LitElement implements LovelaceCard { @@ -60,6 +58,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { private _hass?: HomeAssistant; private _configEntities?: EntitiesCardEntityConfig[]; + private _showHeaderToggle?: boolean; set hass(hass: HomeAssistant) { @@ -210,6 +209,14 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { margin: 8px 0; } + #states > *:first-child { + margin-top: 0; + } + + #states > *:last-child { + margin-bottom: 0; + } + #states > div > * { overflow: hidden; } @@ -246,9 +253,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { if (this._hass) { element.hass = this._hass; } - return html` - - `; + return html` `; } private renderEntity(entityConf: EntitiesCardEntityConfig): TemplateResult { @@ -264,9 +269,7 @@ class HuiEntitiesCard extends LitElement implements LovelaceCard { element.hass = this._hass; } - return html` -
    ${element}
    - `; + return html`
    ${element}
    `; } } diff --git a/src/panels/lovelace/cards/hui-entity-button-card.ts b/src/panels/lovelace/cards/hui-entity-button-card.ts index e062d189a2..7955ccf040 100644 --- a/src/panels/lovelace/cards/hui-entity-button-card.ts +++ b/src/panels/lovelace/cards/hui-entity-button-card.ts @@ -1,5 +1,4 @@ import { customElement } from "lit-element"; - import { HuiButtonCard } from "./hui-button-card"; @customElement("hui-entity-button-card") diff --git a/src/panels/lovelace/cards/hui-entity-card.ts b/src/panels/lovelace/cards/hui-entity-card.ts index 6d0f2aa4f8..e161b87bdf 100644 --- a/src/panels/lovelace/cards/hui-entity-card.ts +++ b/src/panels/lovelace/cards/hui-entity-card.ts @@ -1,37 +1,34 @@ import { - html, - LitElement, - PropertyValues, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; - import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { fireEvent } from "../../../common/dom/fire_event"; import { computeStateName } from "../../../common/entity/compute_state_name"; import { stateIcon } from "../../../common/entity/state_icon"; - +import { isValidEntityId } from "../../../common/entity/valid_entity_id"; import "../../../components/ha-card"; import "../../../components/ha-icon"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; +import { findEntities } from "../common/find-entites"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-warning"; - +import { createHeaderFooterElement } from "../create-element/create-header-footer-element"; import { LovelaceCard, LovelaceCardEditor, LovelaceHeaderFooter, } from "../types"; -import { HomeAssistant } from "../../../types"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { EntityCardConfig } from "./types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { isValidEntityId } from "../../../common/entity/valid_entity_id"; -import { findEntities } from "../common/find-entites"; -import { createHeaderFooterElement } from "../create-element/create-header-footer-element"; -import { UNKNOWN, UNAVAILABLE } from "../../../data/entity"; import { HuiErrorCard } from "./hui-error-card"; +import { EntityCardConfig } from "./types"; @customElement("hui-entity-card") export class HuiEntityCard extends LitElement implements LovelaceCard { @@ -63,7 +60,9 @@ export class HuiEntityCard extends LitElement implements LovelaceCard { } @property() public hass?: HomeAssistant; + @property() private _config?: EntityCardConfig; + private _footerElement?: HuiErrorCard | LovelaceHeaderFooter; public setConfig(config: EntityCardConfig): void { @@ -105,7 +104,7 @@ export class HuiEntityCard extends LitElement implements LovelaceCard { const showUnit = this._config.attribute ? this._config.attribute in stateObj.attributes - : stateObj.state !== UNKNOWN && stateObj.state !== UNAVAILABLE; + : !UNAVAILABLE_STATES.includes(stateObj.state); return html` @@ -140,9 +139,9 @@ export class HuiEntityCard extends LitElement implements LovelaceCard { ? html` ${this._config.unit || - (this._config.attribute - ? "" - : stateObj.attributes.unit_of_measurement)} ` : ""} diff --git a/src/panels/lovelace/cards/hui-entity-filter-card.ts b/src/panels/lovelace/cards/hui-entity-filter-card.ts index 53fbe8bd49..16e141e058 100644 --- a/src/panels/lovelace/cards/hui-entity-filter-card.ts +++ b/src/panels/lovelace/cards/hui-entity-filter-card.ts @@ -1,20 +1,27 @@ -import { createCardElement } from "../create-element/create-card-element"; -import { processConfigEntities } from "../common/process-config-entities"; -import { LovelaceCard } from "../types"; import { LovelaceCardConfig } from "../../../data/lovelace"; -import { EntityFilterEntityConfig } from "../entity-rows/types"; import { HomeAssistant } from "../../../types"; -import { EntityFilterCardConfig } from "./types"; import { evaluateFilter } from "../common/evaluate-filter"; +import { processConfigEntities } from "../common/process-config-entities"; +import { createCardElement } from "../create-element/create-card-element"; +import { EntityFilterEntityConfig } from "../entity-rows/types"; +import { LovelaceCard } from "../types"; +import { EntityFilterCardConfig } from "./types"; class EntityFilterCard extends HTMLElement implements LovelaceCard { public isPanel?: boolean; + private _editMode = false; + private _element?: LovelaceCard; + private _config?: EntityFilterCardConfig; + private _configEntities?: EntityFilterEntityConfig[]; + private _baseCardConfig?: LovelaceCardConfig; + private _hass?: HomeAssistant; + private _oldEntities?: EntityFilterEntityConfig[]; public getCardSize(): number { diff --git a/src/panels/lovelace/cards/hui-error-card.ts b/src/panels/lovelace/cards/hui-error-card.ts index 088703a930..e66da1aa88 100644 --- a/src/panels/lovelace/cards/hui-error-card.ts +++ b/src/panels/lovelace/cards/hui-error-card.ts @@ -1,16 +1,15 @@ +import { safeDump } from "js-yaml"; import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { safeDump } from "js-yaml"; - -import { LovelaceCard } from "../types"; import { HomeAssistant } from "../../../types"; +import { LovelaceCard } from "../types"; import { ErrorCardConfig } from "./types"; export const createErrorCardElement = (config: ErrorCardConfig) => { @@ -47,9 +46,7 @@ export class HuiErrorCard extends LitElement implements LovelaceCard { return html` ${this._config.error} ${this._config.origConfig - ? html` -
    ${safeDump(this._config.origConfig)}
    - ` + ? html`
    ${safeDump(this._config.origConfig)}
    ` : ""} `; } diff --git a/src/panels/lovelace/cards/hui-gauge-card.ts b/src/panels/lovelace/cards/hui-gauge-card.ts index 74a4ba1100..c2e24d6d00 100644 --- a/src/panels/lovelace/cards/hui-gauge-card.ts +++ b/src/panels/lovelace/cards/hui-gauge-card.ts @@ -1,29 +1,26 @@ +import { HassEntity } from "home-assistant-js-websocket/dist/types"; import { - html, - LitElement, - PropertyValues, - TemplateResult, css, CSSResult, - property, customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; import { styleMap } from "lit-html/directives/style-map"; - -import "../../../components/ha-card"; -import "../components/hui-warning"; - -import { isValidEntityId } from "../../../common/entity/valid_entity_id"; import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; -import { computeStateName } from "../../../common/entity/compute_state_name"; - -import { HomeAssistant } from "../../../types"; import { fireEvent } from "../../../common/dom/fire_event"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { isValidEntityId } from "../../../common/entity/valid_entity_id"; +import "../../../components/ha-card"; +import { HomeAssistant } from "../../../types"; +import { findEntities } from "../common/find-entites"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-warning"; import { LovelaceCard, LovelaceCardEditor } from "../types"; import { GaugeCardConfig } from "./types"; -import { findEntities } from "../common/find-entites"; -import { HassEntity } from "home-assistant-js-websocket/dist/types"; export const severityMap = { red: "var(--label-badge-red)", @@ -67,6 +64,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { @property() public hass?: HomeAssistant; @property() private _baseUnit = "50px"; + @property() private _config?: GaugeCardConfig; private _updated?: boolean; @@ -146,8 +144,8 @@ class HuiGaugeCard extends LitElement implements LovelaceCard {
    ${stateObj.state} ${this._config.unit || - stateObj.attributes.unit_of_measurement || - ""} + stateObj.attributes.unit_of_measurement || + ""}
    ${this._config.name || computeStateName(stateObj)} @@ -164,6 +162,7 @@ class HuiGaugeCard extends LitElement implements LovelaceCard { protected firstUpdated(): void { this._updated = true; this._setBaseUnit(); + // eslint-disable-next-line wc/no-self-class this.classList.add("init"); } diff --git a/src/panels/lovelace/cards/hui-glance-card.ts b/src/panels/lovelace/cards/hui-glance-card.ts index c892148259..8d4041e5d0 100644 --- a/src/panels/lovelace/cards/hui-glance-card.ts +++ b/src/panels/lovelace/cards/hui-glance-card.ts @@ -1,37 +1,34 @@ import { - html, - LitElement, - PropertyValues, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import { ifDefined } from "lit-html/directives/if-defined"; - -import { computeStateName } from "../../../common/entity/compute_state_name"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import relativeTime from "../../../common/datetime/relative_time"; - +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { computeDomain } from "../../../common/entity/compute_domain"; +import { computeStateDisplay } from "../../../common/entity/compute_state_display"; +import { computeStateName } from "../../../common/entity/compute_state_name"; import "../../../components/entity/state-badge"; import "../../../components/ha-card"; import "../../../components/ha-icon"; -import "../components/hui-warning-element"; - -import { computeStateDisplay } from "../../../common/entity/compute_state_display"; -import { HomeAssistant } from "../../../types"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { processConfigEntities } from "../common/process-config-entities"; -import { GlanceCardConfig, GlanceConfigEntity } from "./types"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; import { ActionHandlerEvent } from "../../../data/lovelace"; -import { handleAction } from "../common/handle-action"; -import { computeDomain } from "../../../common/entity/compute_domain"; -import { UNAVAILABLE, UNKNOWN } from "../../../data/entity"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { findEntities } from "../common/find-entites"; +import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { processConfigEntities } from "../common/process-config-entities"; +import "../components/hui-warning-element"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { GlanceCardConfig, GlanceConfigEntity } from "./types"; @customElement("hui-glance-card") export class HuiGlanceCard extends LitElement implements LovelaceCard { @@ -254,7 +251,7 @@ export class HuiGlanceCard extends LitElement implements LovelaceCard { .overrideImage=${entityConf.image} .stateColor=${(entityConf.state_color === false || entityConf.state_color) ?? - this._config!.state_color} + this._config!.state_color} > ` : ""} @@ -263,8 +260,7 @@ export class HuiGlanceCard extends LitElement implements LovelaceCard {
    ${computeDomain(entityConf.entity) === "sensor" && stateObj.attributes.device_class === "timestamp" && - stateObj.state !== UNAVAILABLE && - stateObj.state !== UNKNOWN + !UNAVAILABLE_STATES.includes(stateObj.state) ? html` - ${stateObj.state === UNAVAILABLE - ? html` - - ` - : ""}
    -
    - % -
    + ${UNAVAILABLE_STATES.includes(stateObj.state) + ? html` +
    + ${this.hass.localize(`state.default.${stateObj.state}`) || + stateObj.state} +
    + ` + : html` +
    + % +
    + `} ${this._config.name || computeStateName(stateObj)}
    @@ -267,10 +266,6 @@ export class HuiLightCard extends LitElement implements LovelaceCard { display: block; } - hui-unavailable { - cursor: pointer; - } - ha-card { height: 100%; box-sizing: border-box; @@ -353,9 +348,6 @@ export class HuiLightCard extends LitElement implements LovelaceCard { transition: opacity 0.5s ease-in-out; -moz-transition: opacity 0.5s ease-in-out; -webkit-transition: opacity 0.5s ease-in-out; - cursor: pointer; - pointer-events: none; - padding-left: 0.5em; } .show_brightness { diff --git a/src/panels/lovelace/cards/hui-map-card.ts b/src/panels/lovelace/cards/hui-map-card.ts index 445177e44b..cf9e230067 100644 --- a/src/panels/lovelace/cards/hui-map-card.ts +++ b/src/panels/lovelace/cards/hui-map-card.ts @@ -1,46 +1,43 @@ import "@polymer/paper-icon-button/paper-icon-button"; +import { HassEntity } from "home-assistant-js-websocket"; import { - Layer, - Marker, Circle, - Map, CircleMarker, - Polyline, LatLngTuple, + Layer, + Map, + Marker, + Polyline, } from "leaflet"; import { - LitElement, - TemplateResult, css, - html, - property, - PropertyValues, CSSResult, customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; -import "../../map/ha-entity-marker"; - +import { classMap } from "lit-html/directives/class-map"; import { - setupLeafletMap, createTileLayer, LeafletModuleType, + setupLeafletMap, } from "../../../common/dom/setup-leaflet-map"; +import { computeDomain } from "../../../common/entity/compute_domain"; import { computeStateDomain } from "../../../common/entity/compute_state_domain"; import { computeStateName } from "../../../common/entity/compute_state_name"; import { debounce } from "../../../common/util/debounce"; import parseAspectRatio from "../../../common/util/parse-aspect-ratio"; -import { computeDomain } from "../../../common/entity/compute_domain"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceCard } from "../types"; -import { EntityConfig } from "../entity-rows/types"; -import { processConfigEntities } from "../common/process-config-entities"; -import { MapCardConfig } from "./types"; -import { classMap } from "lit-html/directives/class-map"; -import { findEntities } from "../common/find-entites"; - -import { HassEntity } from "home-assistant-js-websocket"; import { fetchRecent } from "../../../data/history"; +import { HomeAssistant } from "../../../types"; +import "../../map/ha-entity-marker"; +import { findEntities } from "../common/find-entites"; +import { processConfigEntities } from "../common/process-config-entities"; +import { EntityConfig } from "../entity-rows/types"; +import { LovelaceCard } from "../types"; +import { MapCardConfig } from "./types"; @customElement("hui-map-card") class HuiMapCard extends LitElement implements LovelaceCard { @@ -73,21 +70,28 @@ class HuiMapCard extends LitElement implements LovelaceCard { @property({ type: Boolean, reflect: true }) public isPanel = false; + @property({ type: Boolean, reflect: true }) public editMode = false; @property() private _history?: HassEntity[][]; + private _date?: Date; @property() private _config?: MapCardConfig; + private _configEntities?: EntityConfig[]; - // tslint:disable-next-line + + // eslint-disable-next-line private Leaflet?: LeafletModuleType; + private _leafletMap?: Map; + // @ts-ignore private _resizeObserver?: ResizeObserver; + private _debouncedResizeListener = debounce( () => { if (!this._leafletMap) { @@ -98,12 +102,19 @@ class HuiMapCard extends LitElement implements LovelaceCard { 100, false ); + private _mapItems: Array = []; + private _mapZones: Array = []; + private _mapPaths: Array = []; + private _connected = false; + private _colorDict: { [key: string]: string } = {}; - private _colorIndex: number = 0; + + private _colorIndex = 0; + private _colors: string[] = [ "#0288D1", "#00AA00", diff --git a/src/panels/lovelace/cards/hui-markdown-card.ts b/src/panels/lovelace/cards/hui-markdown-card.ts index ec317d0ce4..a9d5a970c0 100644 --- a/src/panels/lovelace/cards/hui-markdown-card.ts +++ b/src/panels/lovelace/cards/hui-markdown-card.ts @@ -1,24 +1,22 @@ +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; - +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import "../../../components/ha-card"; import "../../../components/ha-markdown"; - +import { subscribeRenderTemplate } from "../../../data/ws-templates"; import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; import { MarkdownCardConfig } from "./types"; -import { subscribeRenderTemplate } from "../../../data/ws-templates"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; @customElement("hui-markdown-card") export class HuiMarkdownCard extends LitElement implements LovelaceCard { @@ -38,8 +36,11 @@ export class HuiMarkdownCard extends LitElement implements LovelaceCard { } @property() private _config?: MarkdownCardConfig; + @property() private _content?: string = ""; + @property() private _unsubRenderTemplate?: Promise; + @property() private _hass?: HomeAssistant; public getCardSize(): number { diff --git a/src/panels/lovelace/cards/hui-media-control-card.ts b/src/panels/lovelace/cards/hui-media-control-card.ts index 9e60be8de2..50811470fc 100644 --- a/src/panels/lovelace/cards/hui-media-control-card.ts +++ b/src/panels/lovelace/cards/hui-media-control-card.ts @@ -1,55 +1,51 @@ +import "@polymer/paper-icon-button/paper-icon-button"; +import type { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-progress/paper-progress"; +import type { PaperProgressElement } from "@polymer/paper-progress/paper-progress"; import { - html, - LitElement, - PropertyValues, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, query, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import { styleMap } from "lit-html/directives/style-map"; import Vibrant from "node-vibrant"; import { Swatch } from "node-vibrant/lib/color"; -import "@polymer/paper-icon-button/paper-icon-button"; -import "@polymer/paper-progress/paper-progress"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperProgressElement } from "@polymer/paper-progress/paper-progress"; - -import { MediaControlCardConfig } from "./types"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { HomeAssistant, MediaEntity } from "../../../types"; -import { debounce } from "../../../common/util/debounce"; -import { fireEvent } from "../../../common/dom/fire_event"; import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { fireEvent } from "../../../common/dom/fire_event"; import { computeStateName } from "../../../common/entity/compute_state_name"; -import { supportsFeature } from "../../../common/entity/supports-feature"; import { stateIcon } from "../../../common/entity/state_icon"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { contrast } from "../common/color/contrast"; -import { findEntities } from "../common/find-entites"; -import { UNAVAILABLE, UNKNOWN } from "../../../data/entity"; -import { - SUPPORT_PAUSE, - SUPPORT_TURN_ON, - SUPPORT_PREVIOUS_TRACK, - SUPPORT_NEXT_TRACK, - SUPPORTS_PLAY, - SUPPORT_STOP, - SUPPORT_SEEK, - CONTRAST_RATIO, - getCurrentProgress, - computeMediaDescription, - SUPPORT_TURN_OFF, -} from "../../../data/media-player"; - +import { supportsFeature } from "../../../common/entity/supports-feature"; +import { debounce } from "../../../common/util/debounce"; import "../../../components/ha-card"; import "../../../components/ha-icon"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; +import { + computeMediaDescription, + CONTRAST_RATIO, + getCurrentProgress, + SUPPORTS_PLAY, + SUPPORT_NEXT_TRACK, + SUPPORT_PAUSE, + SUPPORT_PREVIOUS_TRACK, + SUPPORT_SEEK, + SUPPORT_STOP, + SUPPORT_TURN_OFF, + SUPPORT_TURN_ON, +} from "../../../data/media-player"; +import type { HomeAssistant, MediaEntity } from "../../../types"; +import { contrast } from "../common/color/contrast"; +import { findEntities } from "../common/find-entites"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-marquee"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperIconButtonElement } from "@polymer/paper-icon-button/paper-icon-button"; +import type { LovelaceCard, LovelaceCardEditor } from "../types"; +import { MediaControlCardConfig } from "./types"; function getContrastRatio( rgb1: [number, number, number], @@ -67,9 +63,9 @@ const DEBUG_COLOR = __DEV__ && false; const logColor = ( color: Swatch, - label: string = `${color.getHex()} - ${color.getPopulation()}` + label = `${color.getHex()} - ${color.getPopulation()}` ) => - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log( `%c${label}`, `color: ${color.getBodyTextColor()}; background-color: ${color.getHex()}` @@ -144,15 +140,15 @@ const customGenerator = (colors: Swatch[]) => { } if (DEBUG_COLOR) { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log(); - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log( "%cPicked colors", `color: ${foregroundColor}; background-color: ${backgroundColor.hex}; font-weight: bold; padding: 16px;` ); colors.forEach((color) => logColor(color)); - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.log(); } @@ -192,15 +188,25 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard { } @property() public hass?: HomeAssistant; + @property() private _config?: MediaControlCardConfig; + @property() private _foregroundColor?: string; + @property() private _backgroundColor?: string; - @property() private _narrow: boolean = false; - @property() private _veryNarrow: boolean = false; - @property() private _cardHeight: number = 0; + + @property() private _narrow = false; + + @property() private _veryNarrow = false; + + @property() private _cardHeight = 0; + @query("paper-progress") private _progressBar?: PaperProgressElement; - @property() private _marqueeActive: boolean = false; + + @property() private _marqueeActive = false; + private _progressInterval?: number; + private _resizeObserver?: ResizeObserver; public getCardSize(): number { @@ -285,8 +291,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard { const isOffState = state === "off"; const isUnavailable = - state === UNAVAILABLE || - state === UNKNOWN || + UNAVAILABLE_STATES.includes(state) || (state === "off" && !supportsFeature(stateObj, SUPPORT_TURN_ON)); const hasNoImage = !this._image; const controls = this._getControls(); @@ -342,7 +347,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
    ${this._config!.name || - computeStateName(this.hass!.states[this._config!.entity])} + computeStateName(this.hass!.states[this._config!.entity])}
    @@ -370,7 +375,7 @@ export class HuiMediaControlCard extends LitElement implements LovelaceCard {
    { - // tslint:disable-next-line:no-console + // eslint-disable-next-line no-console console.error("Error getting Image Colors", err); this._foregroundColor = undefined; this._backgroundColor = undefined; diff --git a/src/panels/lovelace/cards/hui-picture-card.ts b/src/panels/lovelace/cards/hui-picture-card.ts index 8807c146c4..f07f18fa5b 100644 --- a/src/panels/lovelace/cards/hui-picture-card.ts +++ b/src/panels/lovelace/cards/hui-picture-card.ts @@ -1,26 +1,24 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; -import { ifDefined } from "lit-html/directives/if-defined"; - -import "../../../components/ha-card"; - -import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { HomeAssistant } from "../../../types"; import { classMap } from "lit-html/directives/class-map"; -import { PictureCardConfig } from "./types"; +import { ifDefined } from "lit-html/directives/if-defined"; import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; +import "../../../components/ha-card"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { PictureCardConfig } from "./types"; @customElement("hui-picture-card") export class HuiPictureCard extends LitElement implements LovelaceCard { @@ -30,6 +28,7 @@ export class HuiPictureCard extends LitElement implements LovelaceCard { ); return document.createElement("hui-picture-card-editor"); } + public static getStubConfig(): PictureCardConfig { return { type: "picture", diff --git a/src/panels/lovelace/cards/hui-picture-elements-card.ts b/src/panels/lovelace/cards/hui-picture-elements-card.ts index 64491e73d6..a21722bf17 100644 --- a/src/panels/lovelace/cards/hui-picture-elements-card.ts +++ b/src/panels/lovelace/cards/hui-picture-elements-card.ts @@ -1,21 +1,20 @@ import { - html, - LitElement, - TemplateResult, - property, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; - -import { createStyledHuiElement } from "./picture-elements/create-styled-hui-element"; -import { LovelaceCard } from "../types"; -import { HomeAssistant } from "../../../types"; -import { LovelaceElementConfig, LovelaceElement } from "../elements/types"; -import { PictureElementsCardConfig } from "./types"; import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { HomeAssistant } from "../../../types"; import { findEntities } from "../common/find-entites"; +import { LovelaceElement, LovelaceElementConfig } from "../elements/types"; +import { LovelaceCard } from "../types"; +import { createStyledHuiElement } from "./picture-elements/create-styled-hui-element"; +import { PictureElementsCardConfig } from "./types"; @customElement("hui-picture-elements-card") class HuiPictureElementsCard extends LitElement implements LovelaceCard { diff --git a/src/panels/lovelace/cards/hui-picture-entity-card.ts b/src/panels/lovelace/cards/hui-picture-entity-card.ts index f295f28d96..16d24baf33 100644 --- a/src/panels/lovelace/cards/hui-picture-entity-card.ts +++ b/src/panels/lovelace/cards/hui-picture-entity-card.ts @@ -1,35 +1,32 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import { ifDefined } from "lit-html/directives/if-defined"; - +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { computeDomain } from "../../../common/entity/compute_domain"; +import { computeStateDisplay } from "../../../common/entity/compute_state_display"; +import { computeStateName } from "../../../common/entity/compute_state_name"; import "../../../components/ha-card"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; +import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; +import { findEntities } from "../common/find-entites"; +import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-image"; import "../components/hui-warning"; - -import { computeDomain } from "../../../common/entity/compute_domain"; -import { computeStateName } from "../../../common/entity/compute_state_name"; - -import { computeStateDisplay } from "../../../common/entity/compute_state_display"; -import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { UNAVAILABLE } from "../../../data/entity"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; import { PictureEntityCardConfig } from "./types"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; -import { ActionHandlerEvent } from "../../../data/lovelace"; -import { handleAction } from "../common/handle-action"; -import { findEntities } from "../common/find-entites"; @customElement("hui-picture-entity-card") class HuiPictureEntityCard extends LitElement implements LovelaceCard { @@ -145,13 +142,9 @@ class HuiPictureEntityCard extends LitElement implements LovelaceCard {
    `; } else if (this._config.show_name) { - footer = html` - - `; + footer = html` `; } else if (this._config.show_state) { - footer = html` - - `; + footer = html` `; } return html` @@ -178,7 +171,7 @@ class HuiPictureEntityCard extends LitElement implements LovelaceCard { : undefined )} class=${classMap({ - clickable: stateObj.state !== UNAVAILABLE, + clickable: !UNAVAILABLE_STATES.includes(stateObj.state), })} > ${footer} diff --git a/src/panels/lovelace/cards/hui-picture-glance-card.ts b/src/panels/lovelace/cards/hui-picture-glance-card.ts index 3bfa381dd8..5f2eac9b6f 100644 --- a/src/panels/lovelace/cards/hui-picture-glance-card.ts +++ b/src/panels/lovelace/cards/hui-picture-glance-card.ts @@ -1,37 +1,35 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import { ifDefined } from "lit-html/directives/if-defined"; - +import { DOMAINS_TOGGLE } from "../../../common/const"; +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { computeDomain } from "../../../common/entity/compute_domain"; +import { computeStateDisplay } from "../../../common/entity/compute_state_display"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { stateIcon } from "../../../common/entity/state_icon"; import "../../../components/ha-card"; import "../../../components/ha-icon"; +import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; +import { findEntities } from "../common/find-entites"; +import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { processConfigEntities } from "../common/process-config-entities"; import "../components/hui-image"; import "../components/hui-warning-element"; - -import { computeStateName } from "../../../common/entity/compute_state_name"; -import { computeDomain } from "../../../common/entity/compute_domain"; -import { stateIcon } from "../../../common/entity/state_icon"; -import { computeStateDisplay } from "../../../common/entity/compute_state_display"; -import { DOMAINS_TOGGLE } from "../../../common/const"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { HomeAssistant } from "../../../types"; -import { processConfigEntities } from "../common/process-config-entities"; import { PictureGlanceCardConfig, PictureGlanceEntityConfig } from "./types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; -import { ActionHandlerEvent } from "../../../data/lovelace"; -import { handleAction } from "../common/handle-action"; -import { findEntities } from "../common/find-entites"; const STATES_OFF = new Set(["closed", "locked", "not_home", "off"]); @@ -200,9 +198,7 @@ class HuiPictureGlanceCard extends LitElement implements LovelaceCard { >
    ${this._config.title - ? html` -
    ${this._config.title}
    - ` + ? html`
    ${this._config.title}
    ` : ""}
    ${this._entitiesDialog!.map((entityConf) => @@ -267,9 +263,7 @@ class HuiPictureGlanceCard extends LitElement implements LovelaceCard { `}" > ${this._config!.show_state !== true && entityConf.show_state !== true - ? html` -
    - ` + ? html`
    ` : html`
    ${entityConf.attribute diff --git a/src/panels/lovelace/cards/hui-plant-status-card.ts b/src/panels/lovelace/cards/hui-plant-status-card.ts index d1bcb57da8..1efc825119 100644 --- a/src/panels/lovelace/cards/hui-plant-status-card.ts +++ b/src/panels/lovelace/cards/hui-plant-status-card.ts @@ -1,28 +1,25 @@ +import { HassEntity } from "home-assistant-js-websocket"; import { - html, - LitElement, - TemplateResult, css, CSSResult, - property, customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; - +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { fireEvent } from "../../../common/dom/fire_event"; +import { computeStateName } from "../../../common/entity/compute_state_name"; import "../../../components/ha-card"; import "../../../components/ha-icon"; - -import { computeStateName } from "../../../common/entity/compute_state_name"; - -import { LovelaceCardEditor, LovelaceCard } from "../types"; import { HomeAssistant } from "../../../types"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { PlantStatusCardConfig, PlantAttributeTarget } from "./types"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import { actionHandler } from "../common/directives/action-handler-directive"; import { findEntities } from "../common/find-entites"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { PlantAttributeTarget, PlantStatusCardConfig } from "./types"; const SENSORS = { moisture: "hass:water", diff --git a/src/panels/lovelace/cards/hui-safe-mode-card.ts b/src/panels/lovelace/cards/hui-safe-mode-card.ts index 7b7fa5b340..02e6e5c236 100644 --- a/src/panels/lovelace/cards/hui-safe-mode-card.ts +++ b/src/panels/lovelace/cards/hui-safe-mode-card.ts @@ -1,18 +1,17 @@ +import "@material/mwc-button"; import { - html, - LitElement, - TemplateResult, - customElement, css, CSSResult, + customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - import "../../../components/ha-card"; -import "../../../panels/developer-tools/logs/error-log-card"; -import { LovelaceCard } from "../types"; import { HomeAssistant } from "../../../types"; +import "../../developer-tools/logs/error-log-card"; +import { LovelaceCard } from "../types"; @customElement("hui-safe-mode-card") export class HuiSafeModeCard extends LitElement implements LovelaceCard { diff --git a/src/panels/lovelace/cards/hui-sensor-card.ts b/src/panels/lovelace/cards/hui-sensor-card.ts index b3718308c4..f708e6bdac 100644 --- a/src/panels/lovelace/cards/hui-sensor-card.ts +++ b/src/panels/lovelace/cards/hui-sensor-card.ts @@ -1,12 +1,11 @@ -import { customElement } from "lit-element"; import { HassEntity } from "home-assistant-js-websocket/dist/types"; - -import { LovelaceCardEditor } from "../types"; +import { customElement } from "lit-element"; import { HomeAssistant } from "../../../types"; -import { SensorCardConfig, EntityCardConfig } from "./types"; -import { GraphHeaderFooterConfig } from "../header-footer/types"; import { findEntities } from "../common/find-entites"; +import { GraphHeaderFooterConfig } from "../header-footer/types"; +import { LovelaceCardEditor } from "../types"; import { HuiEntityCard } from "./hui-entity-card"; +import { EntityCardConfig, SensorCardConfig } from "./types"; @customElement("hui-sensor-card") class HuiSensorCard extends HuiEntityCard { diff --git a/src/panels/lovelace/cards/hui-shopping-list-card.ts b/src/panels/lovelace/cards/hui-shopping-list-card.ts index 5e57fa5abf..6abafeed3a 100644 --- a/src/panels/lovelace/cards/hui-shopping-list-card.ts +++ b/src/panels/lovelace/cards/hui-shopping-list-card.ts @@ -1,32 +1,30 @@ +import "@polymer/paper-checkbox/paper-checkbox"; +import { PaperInputElement } from "@polymer/paper-input/paper-input"; import { - html, - LitElement, - TemplateResult, css, CSSResult, - property, customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; -import { repeat } from "lit-html/directives/repeat"; import { classMap } from "lit-html/directives/class-map"; -import { PaperInputElement } from "@polymer/paper-input/paper-input"; -import "@polymer/paper-checkbox/paper-checkbox"; - +import { repeat } from "lit-html/directives/repeat"; +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import "../../../components/ha-card"; import "../../../components/ha-icon"; - +import { + addItem, + clearItems, + fetchItems, + ShoppingListItem, + updateItem, +} from "../../../data/shopping-list"; import { HomeAssistant } from "../../../types"; import { LovelaceCard, LovelaceCardEditor } from "../types"; -import { - fetchItems, - updateItem, - ShoppingListItem, - clearItems, - addItem, -} from "../../../data/shopping-list"; -import { ShoppingListCardConfig, SensorCardConfig } from "./types"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { SensorCardConfig, ShoppingListCardConfig } from "./types"; @customElement("hui-shopping-list-card") class HuiShoppingListCard extends LitElement implements LovelaceCard { diff --git a/src/panels/lovelace/cards/hui-stack-card.ts b/src/panels/lovelace/cards/hui-stack-card.ts index 1c6b1c4c12..85f155c26f 100644 --- a/src/panels/lovelace/cards/hui-stack-card.ts +++ b/src/panels/lovelace/cards/hui-stack-card.ts @@ -1,17 +1,16 @@ import { + css, + CSSResult, html, LitElement, - TemplateResult, - CSSResult, - css, property, PropertyValues, + TemplateResult, } from "lit-element"; - -import { createCardElement } from "../create-element/create-card-element"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; import { LovelaceCardConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; +import { createCardElement } from "../create-element/create-card-element"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; import { StackCardConfig } from "./types"; export abstract class HuiStackCard extends LitElement implements LovelaceCard { @@ -27,8 +26,11 @@ export abstract class HuiStackCard extends LitElement implements LovelaceCard { } @property() public hass?: HomeAssistant; + @property() public editMode?: boolean; + @property() protected _cards?: LovelaceCard[]; + @property() private _config?: StackCardConfig; public getCardSize(): number { @@ -68,9 +70,7 @@ export abstract class HuiStackCard extends LitElement implements LovelaceCard { return html` ${this._config.title - ? html` -
    ${this._config.title}
    - ` + ? html`
    ${this._config.title}
    ` : ""}
    ${this._cards}
    `; diff --git a/src/panels/lovelace/cards/hui-thermostat-card.ts b/src/panels/lovelace/cards/hui-thermostat-card.ts index 5161d76fae..a625062ea4 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -1,41 +1,37 @@ -import { - html, - LitElement, - PropertyValues, - TemplateResult, - customElement, - property, - css, - CSSResult, - svg, -} from "lit-element"; -import { classMap } from "lit-html/directives/class-map"; import "@polymer/paper-icon-button/paper-icon-button"; import "@thomasloven/round-slider"; - -import "../../../components/ha-card"; -import "../components/hui-warning"; -import "../components/hui-unavailable"; - -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; -import { computeStateName } from "../../../common/entity/compute_state_name"; - -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { HomeAssistant } from "../../../types"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { HassEntity } from "home-assistant-js-websocket"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + svg, + TemplateResult, +} from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; import { UNIT_F } from "../../../common/const"; +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import { fireEvent } from "../../../common/dom/fire_event"; -import { ThermostatCardConfig } from "./types"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import "../../../components/ha-card"; import { ClimateEntity, - HvacMode, - compareClimateHvacModes, CLIMATE_PRESET_NONE, + compareClimateHvacModes, + HvacMode, } from "../../../data/climate"; -import { HassEntity } from "home-assistant-js-websocket"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; +import { HomeAssistant } from "../../../types"; import { actionHandler } from "../common/directives/action-handler-directive"; import { findEntities } from "../common/find-entites"; -import { UNAVAILABLE } from "../../../data/entity"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-warning"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { ThermostatCardConfig } from "./types"; const modeIcons: { [mode in HvacMode]: string } = { auto: "hass:calendar-repeat", @@ -75,7 +71,9 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { } @property() public hass?: HomeAssistant; + @property() private _config?: ThermostatCardConfig; + @property() private _setTemp?: number | number[]; public getCardSize(): number { @@ -127,23 +125,20 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { ? stateObj.attributes.temperature : stateObj.attributes.min_temp; - const slider = - stateObj.state === "unavailable" - ? html` - - ` - : html` - - `; + const slider = UNAVAILABLE_STATES.includes(stateObj.state) + ? html` ` + : html` + + `; const currentTemperature = !isNaN(stateObj.attributes.current_temperature) ? svg` @@ -224,14 +219,6 @@ export class HuiThermostatCard extends LitElement implements LovelaceCard { [mode]: true, })} > - ${stateObj.state === UNAVAILABLE - ? html` - - ` - : ""}
    ${this.hass.localize(`state.weather.${stateObj.state}`) || - stateObj.state} + stateObj.state}
    ${(this._config && this._config.name) || computeStateName(stateObj)}
    @@ -316,7 +313,7 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { private windBearingToText(degree: string): string { const degreenum = parseInt(degree, 10); if (isFinite(degreenum)) { - // tslint:disable-next-line: no-bitwise + // eslint-disable-next-line no-bitwise return cardinalDirections[(((degreenum + 11.25) / 22.5) | 0) % 16]; } return degree; @@ -325,9 +322,11 @@ class HuiWeatherForecastCard extends LitElement implements LovelaceCard { private getWindBearing(bearing: string): string { if (bearing != null) { const cardinalDirection = this.windBearingToText(bearing); - return `(${this.hass!.localize( - `ui.card.weather.cardinal_direction.${cardinalDirection.toLowerCase()}` - ) || cardinalDirection})`; + return `(${ + this.hass!.localize( + `ui.card.weather.cardinal_direction.${cardinalDirection.toLowerCase()}` + ) || cardinalDirection + })`; } return ``; } diff --git a/src/panels/lovelace/cards/picture-elements/create-styled-hui-element.ts b/src/panels/lovelace/cards/picture-elements/create-styled-hui-element.ts index 97afade546..181412bc98 100644 --- a/src/panels/lovelace/cards/picture-elements/create-styled-hui-element.ts +++ b/src/panels/lovelace/cards/picture-elements/create-styled-hui-element.ts @@ -1,5 +1,5 @@ -import { LovelaceElement, LovelaceElementConfig } from "../../elements/types"; import { createHuiElement } from "../../create-element/create-hui-element"; +import { LovelaceElement, LovelaceElementConfig } from "../../elements/types"; export function createStyledHuiElement( elementConfig: LovelaceElementConfig diff --git a/src/panels/lovelace/cards/types.ts b/src/panels/lovelace/cards/types.ts index 77f910c082..8fb6bfeb7e 100644 --- a/src/panels/lovelace/cards/types.ts +++ b/src/panels/lovelace/cards/types.ts @@ -1,8 +1,8 @@ -import { LovelaceCardConfig, ActionConfig } from "../../../data/lovelace"; +import { ActionConfig, LovelaceCardConfig } from "../../../data/lovelace"; import { Condition } from "../common/validate-condition"; -import { EntityConfig, EntityFilterEntityConfig } from "../entity-rows/types"; -import { LovelaceElementConfig } from "../elements/types"; import { HuiImage } from "../components/hui-image"; +import { LovelaceElementConfig } from "../elements/types"; +import { EntityConfig, EntityFilterEntityConfig } from "../entity-rows/types"; import { LovelaceHeaderFooterConfig } from "../header-footer/types"; export interface AlarmPanelCardConfig extends LovelaceCardConfig { diff --git a/src/panels/lovelace/common/color/luminanace.ts b/src/panels/lovelace/common/color/luminanace.ts index 8ebf11195f..d2fdb0bd3a 100644 --- a/src/panels/lovelace/common/color/luminanace.ts +++ b/src/panels/lovelace/common/color/luminanace.ts @@ -1,7 +1,7 @@ export const luminanace = (r: number, g: number, b: number): number => { const a = [r, g, b].map((v) => { v /= 255; - return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); + return v <= 0.03928 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4; }); return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722; }; diff --git a/src/panels/lovelace/common/compute-tooltip.ts b/src/panels/lovelace/common/compute-tooltip.ts index b5d7ed9955..d6dc844a07 100644 --- a/src/panels/lovelace/common/compute-tooltip.ts +++ b/src/panels/lovelace/common/compute-tooltip.ts @@ -1,6 +1,6 @@ import { computeStateName } from "../../../common/entity/compute_state_name"; -import { HomeAssistant } from "../../../types"; import { ActionConfig } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; interface Config { entity?: string; @@ -10,43 +10,6 @@ interface Config { double_tap_action?: ActionConfig; } -export const computeTooltip = (hass: HomeAssistant, config: Config): string => { - if (config.title === null) { - return ""; - } - - if (config.title) { - return config.title; - } - - let stateName = ""; - let tooltip = ""; - - if (config.entity) { - stateName = - config.entity in hass.states - ? computeStateName(hass.states[config.entity]) - : config.entity; - } - - if (!config.tap_action && !config.hold_action) { - return stateName; - } - - const tapTooltip = config.tap_action - ? computeActionTooltip(hass, stateName, config.tap_action, false) - : ""; - const holdTooltip = config.hold_action - ? computeActionTooltip(hass, stateName, config.hold_action, true) - : ""; - - const newline = tapTooltip && holdTooltip ? "\n" : ""; - - tooltip = tapTooltip + newline + holdTooltip; - - return tooltip; -}; - function computeActionTooltip( hass: HomeAssistant, state: string, @@ -102,3 +65,40 @@ function computeActionTooltip( return tooltip; } + +export const computeTooltip = (hass: HomeAssistant, config: Config): string => { + if (config.title === null) { + return ""; + } + + if (config.title) { + return config.title; + } + + let stateName = ""; + let tooltip = ""; + + if (config.entity) { + stateName = + config.entity in hass.states + ? computeStateName(hass.states[config.entity]) + : config.entity; + } + + if (!config.tap_action && !config.hold_action) { + return stateName; + } + + const tapTooltip = config.tap_action + ? computeActionTooltip(hass, stateName, config.tap_action, false) + : ""; + const holdTooltip = config.hold_action + ? computeActionTooltip(hass, stateName, config.hold_action, true) + : ""; + + const newline = tapTooltip && holdTooltip ? "\n" : ""; + + tooltip = tapTooltip + newline + holdTooltip; + + return tooltip; +}; diff --git a/src/panels/lovelace/common/compute-unused-entities.ts b/src/panels/lovelace/common/compute-unused-entities.ts index 2dbcc6905e..a675923541 100755 --- a/src/panels/lovelace/common/compute-unused-entities.ts +++ b/src/panels/lovelace/common/compute-unused-entities.ts @@ -1,4 +1,4 @@ -import { LovelaceConfig, ActionConfig } from "../../../data/lovelace"; +import { ActionConfig, LovelaceConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; export const EXCLUDED_DOMAINS = ["zone", "persistent_notification"]; @@ -67,15 +67,6 @@ export const computeUsedEntities = (config: LovelaceConfig): Set => { return entities; }; -export const computeUnusedEntities = ( - hass: HomeAssistant, - config: LovelaceConfig -): Set => { - const usedEntities = computeUsedEntities(config); - const unusedEntities = calcUnusedEntities(hass, usedEntities); - return unusedEntities; -}; - export const calcUnusedEntities = ( hass: HomeAssistant, usedEntities: Set @@ -93,3 +84,12 @@ export const calcUnusedEntities = ( return unusedEntities; }; + +export const computeUnusedEntities = ( + hass: HomeAssistant, + config: LovelaceConfig +): Set => { + const usedEntities = computeUsedEntities(config); + const unusedEntities = calcUnusedEntities(hass, usedEntities); + return unusedEntities; +}; diff --git a/src/panels/lovelace/common/directives/action-handler-directive.ts b/src/panels/lovelace/common/directives/action-handler-directive.ts index 9ff99f7987..083b69568a 100644 --- a/src/panels/lovelace/common/directives/action-handler-directive.ts +++ b/src/panels/lovelace/common/directives/action-handler-directive.ts @@ -1,12 +1,11 @@ -import { directive, PropertyPart } from "lit-html"; import "@material/mwc-ripple"; -// tslint:disable-next-line -import { Ripple } from "@material/mwc-ripple"; -import { - ActionHandlerOptions, - ActionHandlerDetail, -} from "../../../../data/lovelace"; +import type { Ripple } from "@material/mwc-ripple"; +import { directive, PropertyPart } from "lit-html"; import { fireEvent } from "../../../../common/dom/fire_event"; +import { + ActionHandlerDetail, + ActionHandlerOptions, +} from "../../../../data/lovelace"; const isTouch = "ontouchstart" in window || @@ -29,9 +28,13 @@ declare global { class ActionHandler extends HTMLElement implements ActionHandler { public holdTime = 500; + public ripple: Ripple; + protected timer?: number; + protected held = false; + private dblClickTimeout?: number; constructor() { @@ -110,13 +113,6 @@ class ActionHandler extends HTMLElement implements ActionHandler { }, this.holdTime); }; - const handleEnter = (ev: KeyboardEvent) => { - if (ev.keyCode !== 13) { - return; - } - end(ev); - }; - const end = (ev: Event) => { // Prevent mouse event if touch event ev.preventDefault(); @@ -150,6 +146,13 @@ class ActionHandler extends HTMLElement implements ActionHandler { } }; + const handleEnter = (ev: KeyboardEvent) => { + if (ev.keyCode !== 13) { + return; + } + end(ev); + }; + element.addEventListener("touchstart", start, { passive: true }); element.addEventListener("touchend", end); element.addEventListener("touchcancel", end); diff --git a/src/panels/lovelace/common/entity/toggle-entity.ts b/src/panels/lovelace/common/entity/toggle-entity.ts index 8470cfb6dd..c2c406da31 100644 --- a/src/panels/lovelace/common/entity/toggle-entity.ts +++ b/src/panels/lovelace/common/entity/toggle-entity.ts @@ -1,6 +1,7 @@ import { STATES_OFF } from "../../../../common/const"; -import { turnOnOffEntity } from "./turn-on-off-entity"; import { HomeAssistant, ServiceCallResponse } from "../../../../types"; +import { turnOnOffEntity } from "./turn-on-off-entity"; + export const toggleEntity = ( hass: HomeAssistant, entityId: string diff --git a/src/panels/lovelace/common/entity/turn-on-off-entities.ts b/src/panels/lovelace/common/entity/turn-on-off-entities.ts index 1ad24203b2..fadbf9da38 100644 --- a/src/panels/lovelace/common/entity/turn-on-off-entities.ts +++ b/src/panels/lovelace/common/entity/turn-on-off-entities.ts @@ -1,5 +1,5 @@ -import { computeDomain } from "../../../../common/entity/compute_domain"; import { STATES_OFF } from "../../../../common/const"; +import { computeDomain } from "../../../../common/entity/compute_domain"; import { HomeAssistant } from "../../../../types"; export const turnOnOffEntities = ( diff --git a/src/panels/lovelace/common/find-entites.ts b/src/panels/lovelace/common/find-entites.ts index c6eca98d39..533274a8fb 100644 --- a/src/panels/lovelace/common/find-entites.ts +++ b/src/panels/lovelace/common/find-entites.ts @@ -1,6 +1,6 @@ -import { HomeAssistant } from "../../../types"; -import { computeDomain } from "../../../common/entity/compute_domain"; import { HassEntity } from "home-assistant-js-websocket"; +import { computeDomain } from "../../../common/entity/compute_domain"; +import { HomeAssistant } from "../../../types"; const arrayFilter = ( array: any[], @@ -39,8 +39,6 @@ export const findEntities = ( includeDomains?: string[], entityFilter?: (stateObj: HassEntity) => boolean ) => { - let entityIds: string[]; - const conditions: Array<(value: string) => boolean> = []; if (includeDomains?.length) { @@ -53,7 +51,7 @@ export const findEntities = ( ); } - entityIds = arrayFilter(entities, conditions, maxEntities); + const entityIds = arrayFilter(entities, conditions, maxEntities); if (entityIds.length < maxEntities && entitiesFallback.length) { const fallbackEntityIds = findEntities( diff --git a/src/panels/lovelace/common/generate-lovelace-config.ts b/src/panels/lovelace/common/generate-lovelace-config.ts index fb33e183fd..a5aafbadeb 100644 --- a/src/panels/lovelace/common/generate-lovelace-config.ts +++ b/src/panels/lovelace/common/generate-lovelace-config.ts @@ -1,48 +1,46 @@ -import { HomeAssistant, GroupEntity } from "../../../types"; import { - LovelaceConfig, - LovelaceCardConfig, - LovelaceViewConfig, -} from "../../../data/lovelace"; -import { - HassEntity, - HassEntities, HassConfig, + HassEntities, + HassEntity, } from "home-assistant-js-websocket"; - -import { extractViews } from "../../../common/entity/extract_views"; -import { getViewEntities } from "../../../common/entity/get_view_entities"; -import { computeStateName } from "../../../common/entity/compute_state_name"; -import { splitByGroups } from "../../../common/entity/split_by_groups"; +import { computeDomain } from "../../../common/entity/compute_domain"; import { computeObjectId } from "../../../common/entity/compute_object_id"; import { computeStateDomain } from "../../../common/entity/compute_state_domain"; -import { computeDomain } from "../../../common/entity/compute_domain"; - -import { LovelaceRowConfig, WeblinkConfig } from "../entity-rows/types"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { extractViews } from "../../../common/entity/extract_views"; +import { getViewEntities } from "../../../common/entity/get_view_entities"; +import { splitByGroups } from "../../../common/entity/split_by_groups"; +import { compare } from "../../../common/string/compare"; import { LocalizeFunc } from "../../../common/translations/localize"; -import { - EntitiesCardConfig, - AlarmPanelCardConfig, - PictureEntityCardConfig, - ThermostatCardConfig, - LightCardConfig, -} from "../cards/types"; -import { - subscribeAreaRegistry, - AreaRegistryEntry, -} from "../../../data/area_registry"; import { subscribeOne } from "../../../common/util/subscribe-one"; import { - subscribeDeviceRegistry, + AreaRegistryEntry, + subscribeAreaRegistry, +} from "../../../data/area_registry"; +import { DeviceRegistryEntry, + subscribeDeviceRegistry, } from "../../../data/device_registry"; import { - subscribeEntityRegistry, EntityRegistryEntry, + subscribeEntityRegistry, } from "../../../data/entity_registry"; -import { processEditorEntities } from "../editor/process-editor-entities"; +import { + LovelaceCardConfig, + LovelaceConfig, + LovelaceViewConfig, +} from "../../../data/lovelace"; import { SENSOR_DEVICE_CLASS_BATTERY } from "../../../data/sensor"; -import { compare } from "../../../common/string/compare"; +import { GroupEntity, HomeAssistant } from "../../../types"; +import { + AlarmPanelCardConfig, + EntitiesCardConfig, + LightCardConfig, + PictureEntityCardConfig, + ThermostatCardConfig, +} from "../cards/types"; +import { processEditorEntities } from "../editor/process-editor-entities"; +import { LovelaceRowConfig, WeblinkConfig } from "../entity-rows/types"; const DEFAULT_VIEW_ENTITY_ID = "group.default_view"; const DOMAINS_BADGES = [ @@ -193,6 +191,7 @@ export const computeCards = ( const entityConf = titlePrefix && stateObj && + // eslint-disable-next-line no-cond-assign (name = computeStateName(stateObj)).startsWith(titlePrefix) ? { entity: entityId, @@ -229,61 +228,6 @@ const computeDefaultViewStates = (entities: HassEntities): HassEntities => { return states; }; -export const generateDefaultViewConfig = ( - areaEntries: AreaRegistryEntry[], - deviceEntries: DeviceRegistryEntry[], - entityEntries: EntityRegistryEntry[], - entities: HassEntities, - localize: LocalizeFunc -): LovelaceViewConfig => { - const states = computeDefaultViewStates(entities); - const path = "default_view"; - const title = "Home"; - const icon = undefined; - - // In the case of a default view, we want to use the group order attribute - const groupOrders = {}; - Object.keys(states).forEach((entityId) => { - const stateObj = states[entityId]; - if (stateObj.attributes.order) { - groupOrders[entityId] = stateObj.attributes.order; - } - }); - - const splittedByAreas = splitByAreas( - areaEntries, - deviceEntries, - entityEntries, - states - ); - - const config = generateViewConfig( - localize, - path, - title, - icon, - splittedByAreas.otherEntities, - groupOrders - ); - - const areaCards: LovelaceCardConfig[] = []; - - splittedByAreas.areasWithEntities.forEach(([area, areaEntities]) => { - areaCards.push( - ...computeCards( - areaEntities.map((entity) => [entity.entity_id, entity]), - { - title: area.name, - } - ) - ); - }); - - config.cards!.unshift(...areaCards); - - return config; -}; - const generateViewConfig = ( localize: LocalizeFunc, path: string, @@ -377,30 +321,59 @@ const generateViewConfig = ( return view; }; -export const generateLovelaceConfigFromHass = async (hass: HomeAssistant) => { - // We want to keep the registry subscriptions alive after generating the UI - // so that we don't serve up stale data after changing areas. - if (!subscribedRegistries) { - subscribedRegistries = true; - subscribeAreaRegistry(hass.connection, () => undefined); - subscribeDeviceRegistry(hass.connection, () => undefined); - subscribeEntityRegistry(hass.connection, () => undefined); - } +export const generateDefaultViewConfig = ( + areaEntries: AreaRegistryEntry[], + deviceEntries: DeviceRegistryEntry[], + entityEntries: EntityRegistryEntry[], + entities: HassEntities, + localize: LocalizeFunc +): LovelaceViewConfig => { + const states = computeDefaultViewStates(entities); + const path = "default_view"; + const title = "Home"; + const icon = undefined; - const [areaEntries, deviceEntries, entityEntries] = await Promise.all([ - subscribeOne(hass.connection, subscribeAreaRegistry), - subscribeOne(hass.connection, subscribeDeviceRegistry), - subscribeOne(hass.connection, subscribeEntityRegistry), - ]); + // In the case of a default view, we want to use the group order attribute + const groupOrders = {}; + Object.keys(states).forEach((entityId) => { + const stateObj = states[entityId]; + if (stateObj.attributes.order) { + groupOrders[entityId] = stateObj.attributes.order; + } + }); - return generateLovelaceConfigFromData( - hass.config, + const splittedByAreas = splitByAreas( areaEntries, deviceEntries, entityEntries, - hass.states, - hass.localize + states ); + + const config = generateViewConfig( + localize, + path, + title, + icon, + splittedByAreas.otherEntities, + groupOrders + ); + + const areaCards: LovelaceCardConfig[] = []; + + splittedByAreas.areasWithEntities.forEach(([area, areaEntities]) => { + areaCards.push( + ...computeCards( + areaEntities.map((entity) => [entity.entity_id, entity]), + { + title: area.name, + } + ) + ); + }); + + config.cards!.unshift(...areaCards); + + return config; }; export const generateLovelaceConfigFromData = async ( @@ -489,3 +462,31 @@ export const generateLovelaceConfigFromData = async ( views, }; }; + +export const generateLovelaceConfigFromHass = async ( + hass: HomeAssistant +): Promise => { + // We want to keep the registry subscriptions alive after generating the UI + // so that we don't serve up stale data after changing areas. + if (!subscribedRegistries) { + subscribedRegistries = true; + subscribeAreaRegistry(hass.connection, () => undefined); + subscribeDeviceRegistry(hass.connection, () => undefined); + subscribeEntityRegistry(hass.connection, () => undefined); + } + + const [areaEntries, deviceEntries, entityEntries] = await Promise.all([ + subscribeOne(hass.connection, subscribeAreaRegistry), + subscribeOne(hass.connection, subscribeDeviceRegistry), + subscribeOne(hass.connection, subscribeEntityRegistry), + ]); + + return generateLovelaceConfigFromData( + hass.config, + areaEntries, + deviceEntries, + entityEntries, + hass.states, + hass.localize + ); +}; diff --git a/src/panels/lovelace/common/graph/coordinates.ts b/src/panels/lovelace/common/graph/coordinates.ts index 807a2d61d0..4005db859f 100644 --- a/src/panels/lovelace/common/graph/coordinates.ts +++ b/src/panels/lovelace/common/graph/coordinates.ts @@ -64,17 +64,13 @@ export const coordinates = ( width: number, detail: number ): number[][] | undefined => { - history.forEach((item) => (item.state = Number(item.state))); + history.forEach((item) => { + item.state = Number(item.state); + }); history = history.filter((item) => !Number.isNaN(item.state)); - const min = Math.min.apply( - Math, - history.map((item) => item.state) - ); - const max = Math.max.apply( - Math, - history.map((item) => item.state) - ); + const min = Math.min(...history.map((item) => item.state)); + const max = Math.max(...history.map((item) => item.state)); const now = new Date().getTime(); const reduce = (res, item, point) => { diff --git a/src/panels/lovelace/common/graph/get-history-coordinates.ts b/src/panels/lovelace/common/graph/get-history-coordinates.ts index 73157df094..9e0d2ba864 100644 --- a/src/panels/lovelace/common/graph/get-history-coordinates.ts +++ b/src/panels/lovelace/common/graph/get-history-coordinates.ts @@ -1,13 +1,13 @@ import { fetchRecent } from "../../../../data/history"; -import { coordinates } from "../graph/coordinates"; import { HomeAssistant } from "../../../../types"; +import { coordinates } from "./coordinates"; export const getHistoryCoordinates = async ( hass: HomeAssistant, entity: string, hours: number, detail: number -) => { +): Promise => { const endTime = new Date(); const startTime = new Date(); startTime.setHours(endTime.getHours() - hours); @@ -15,7 +15,7 @@ export const getHistoryCoordinates = async ( const stateHistory = await fetchRecent(hass, entity, startTime, endTime); if (stateHistory.length < 1 || stateHistory[0].length < 1) { - return; + return undefined; } const coords = coordinates(stateHistory[0], hours, 500, detail); diff --git a/src/panels/lovelace/common/handle-action.ts b/src/panels/lovelace/common/handle-action.ts index dd577c1d63..2147176c9a 100644 --- a/src/panels/lovelace/common/handle-action.ts +++ b/src/panels/lovelace/common/handle-action.ts @@ -1,9 +1,9 @@ -import { HomeAssistant } from "../../../types"; import { fireEvent } from "../../../common/dom/fire_event"; import { navigate } from "../../../common/navigate"; -import { toggleEntity } from "./entity/toggle-entity"; -import { ActionConfig } from "../../../data/lovelace"; import { forwardHaptic } from "../../../data/haptics"; +import { ActionConfig } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { toggleEntity } from "./entity/toggle-entity"; declare global { interface HASSDomEvents { @@ -59,30 +59,33 @@ export const handleAction = ( } switch (actionConfig.action) { - case "more-info": + case "more-info": { if (config.entity || config.camera_image) { fireEvent(node, "hass-more-info", { entityId: config.entity ? config.entity : config.camera_image!, }); } break; + } case "navigate": if (actionConfig.navigation_path) { navigate(node, actionConfig.navigation_path); } break; - case "url": + case "url": { if (actionConfig.url_path) { window.open(actionConfig.url_path); } break; - case "toggle": + } + case "toggle": { if (config.entity) { toggleEntity(hass, config.entity!); forwardHaptic("light"); } break; - case "call-service": + } + case "call-service": { if (!actionConfig.service) { forwardHaptic("failure"); return; @@ -91,7 +94,9 @@ export const handleAction = ( hass.callService(domain, service, actionConfig.service_data); forwardHaptic("light"); break; - case "fire-dom-event": + } + case "fire-dom-event": { fireEvent(node, "ll-custom", actionConfig); + } } }; diff --git a/src/panels/lovelace/common/has-changed.ts b/src/panels/lovelace/common/has-changed.ts index 121e0e39e3..b46962bb5f 100644 --- a/src/panels/lovelace/common/has-changed.ts +++ b/src/panels/lovelace/common/has-changed.ts @@ -1,5 +1,5 @@ -import { HomeAssistant } from "../../../types"; import { PropertyValues } from "lit-element"; +import { HomeAssistant } from "../../../types"; // Check if config or Entity changed export function hasConfigOrEntityChanged( diff --git a/src/panels/lovelace/common/load-resources.ts b/src/panels/lovelace/common/load-resources.ts index 1b58eeb509..c996f25562 100644 --- a/src/panels/lovelace/common/load-resources.ts +++ b/src/panels/lovelace/common/load-resources.ts @@ -1,5 +1,4 @@ -import { loadModule, loadCSS, loadJS } from "../../../common/dom/load_resource"; - +import { loadCSS, loadJS, loadModule } from "../../../common/dom/load_resource"; import { LovelaceResource } from "../../../data/lovelace"; // CSS and JS should only be imported once. Modules and HTML are safe. @@ -38,7 +37,7 @@ export const loadLovelaceResources = ( break; default: - // tslint:disable-next-line + // eslint-disable-next-line console.warn(`Unknown resource type specified: ${resource.type}`); } }); diff --git a/src/panels/lovelace/common/process-config-entities.ts b/src/panels/lovelace/common/process-config-entities.ts index d20b03f907..e0b9045432 100644 --- a/src/panels/lovelace/common/process-config-entities.ts +++ b/src/panels/lovelace/common/process-config-entities.ts @@ -22,7 +22,6 @@ export const processConfigEntities = ( let config: T; if (typeof entityConf === "string") { - // tslint:disable-next-line:no-object-literal-type-assertion config = { entity: entityConf } as T; } else if (typeof entityConf === "object" && !Array.isArray(entityConf)) { if (!entityConf.entity) { diff --git a/src/panels/lovelace/components/hui-action-editor.ts b/src/panels/lovelace/components/hui-action-editor.ts index 1fdd456131..5899360217 100644 --- a/src/panels/lovelace/components/hui-action-editor.ts +++ b/src/panels/lovelace/components/hui-action-editor.ts @@ -1,26 +1,24 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; -import "@polymer/paper-input/paper-textarea"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-input/paper-textarea"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - -import "../../../components/ha-service-picker"; - -import { HomeAssistant } from "../../../types"; +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent, HASSDomEvent } from "../../../common/dom/fire_event"; -import { EditorTarget } from "../editor/types"; +import "../../../components/ha-service-picker"; import { ActionConfig, - NavigateActionConfig, CallServiceActionConfig, + NavigateActionConfig, UrlActionConfig, } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { EditorTarget } from "../editor/types"; declare global { // for fire event @@ -77,9 +75,7 @@ export class HuiActionEditor extends LitElement { .selected="${this.actions.indexOf(this._action)}" > ${this.actions.map((action) => { - return html` - ${action} - `; + return html` ${action} `; })} diff --git a/src/panels/lovelace/components/hui-buttons-base.ts b/src/panels/lovelace/components/hui-buttons-base.ts index 3533028682..cc9f2fb4e3 100644 --- a/src/panels/lovelace/components/hui-buttons-base.ts +++ b/src/panels/lovelace/components/hui-buttons-base.ts @@ -1,33 +1,32 @@ +import "@material/mwc-ripple"; import { - html, - LitElement, - TemplateResult, - customElement, css, CSSResult, - queryAll, + customElement, + html, + LitElement, property, + queryAll, + TemplateResult, } from "lit-element"; -import "@material/mwc-ripple"; - -import "../../../components/entity/state-badge"; -import "../../../components/ha-icon"; - -import { HomeAssistant } from "../../../types"; -import { computeTooltip } from "../common/compute-tooltip"; -// tslint:disable-next-line: no-duplicate-imports -import { StateBadge } from "../../../components/entity/state-badge"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; -import { ActionHandlerEvent } from "../../../data/lovelace"; -import { handleAction } from "../common/handle-action"; -import { EntitiesCardEntityConfig } from "../cards/types"; import { computeStateName } from "../../../common/entity/compute_state_name"; +import "../../../components/entity/state-badge"; +import type { StateBadge } from "../../../components/entity/state-badge"; +import "../../../components/ha-icon"; +import type { ActionHandlerEvent } from "../../../data/lovelace"; +import type { HomeAssistant } from "../../../types"; +import type { EntitiesCardEntityConfig } from "../cards/types"; +import { computeTooltip } from "../common/compute-tooltip"; +import { actionHandler } from "../common/directives/action-handler-directive"; +import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; @customElement("hui-buttons-base") export class HuiButtonsBase extends LitElement { @property() public configEntities?: EntitiesCardEntityConfig[]; + @queryAll("state-badge") protected _badges!: StateBadge[]; + private _hass?: HomeAssistant; set hass(hass: HomeAssistant) { diff --git a/src/panels/lovelace/components/hui-card-options.ts b/src/panels/lovelace/components/hui-card-options.ts index c7c3f0fd64..5f006a5ce7 100644 --- a/src/panels/lovelace/components/hui-card-options.ts +++ b/src/panels/lovelace/components/hui-card-options.ts @@ -1,24 +1,23 @@ -import { - html, - LitElement, - customElement, - property, - css, - CSSResult, - TemplateResult, -} from "lit-element"; import "@material/mwc-button"; -import "@polymer/paper-menu-button/paper-menu-button"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-listbox/paper-listbox"; - -import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog"; -import { confDeleteCard } from "../editor/delete-card"; -import { HomeAssistant } from "../../../types"; +import "@polymer/paper-menu-button/paper-menu-button"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { LovelaceCardConfig } from "../../../data/lovelace"; -import { Lovelace } from "../types"; -import { swapCard } from "../editor/config-util"; +import { HomeAssistant } from "../../../types"; +import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog"; import { showMoveCardViewDialog } from "../editor/card-editor/show-move-card-view-dialog"; +import { swapCard } from "../editor/config-util"; +import { confDeleteCard } from "../editor/delete-card"; +import { Lovelace } from "../types"; @customElement("hui-card-options") export class HuiCardOptions extends LitElement { @@ -50,7 +49,7 @@ export class HuiCardOptions extends LitElement { @click=${this._cardDown} ?disabled=${this.lovelace!.config.views[this.path![0]].cards! .length === - this.path![1] + 1} + this.path![1] + 1} > ${this.label || - this.hass!.localize( - "ui.panel.lovelace.editor.card.generic.entities" - ) + - " (" + - this.hass!.localize( - "ui.panel.lovelace.editor.card.config.required" - ) + - ")"} + this.hass!.localize("ui.panel.lovelace.editor.card.generic.entities") + + " (" + + this.hass!.localize("ui.panel.lovelace.editor.card.config.required") + + ")"}

    ${this.entities.map((entityConf, index) => { diff --git a/src/panels/lovelace/components/hui-generic-entity-row.ts b/src/panels/lovelace/components/hui-generic-entity-row.ts index 8889459310..abc946bbce 100644 --- a/src/panels/lovelace/components/hui-generic-entity-row.ts +++ b/src/panels/lovelace/components/hui-generic-entity-row.ts @@ -1,31 +1,29 @@ -import { computeStateName } from "../../../common/entity/compute_state_name"; import { - LitElement, - html, css, CSSResult, - PropertyValues, + html, + LitElement, property, + PropertyValues, TemplateResult, } from "lit-element"; -import { ifDefined } from "lit-html/directives/if-defined"; - -import "../../../components/entity/state-badge"; -import "../../../components/ha-relative-time"; -import "../../../components/ha-icon"; -import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { computeRTL } from "../../../common/util/compute_rtl"; -import { toggleAttribute } from "../../../common/dom/toggle_attribute"; -import { DOMAINS_HIDE_MORE_INFO } from "../../../common/const"; -import { computeDomain } from "../../../common/entity/compute_domain"; import { classMap } from "lit-html/directives/class-map"; +import { ifDefined } from "lit-html/directives/if-defined"; +import { DOMAINS_HIDE_MORE_INFO } from "../../../common/const"; +import { toggleAttribute } from "../../../common/dom/toggle_attribute"; +import { computeDomain } from "../../../common/entity/compute_domain"; +import { computeStateName } from "../../../common/entity/compute_state_name"; +import { computeRTL } from "../../../common/util/compute_rtl"; +import "../../../components/entity/state-badge"; +import "../../../components/ha-icon"; +import "../../../components/ha-relative-time"; +import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; import { EntitiesCardEntityConfig } from "../cards/types"; import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; -import { ActionHandlerEvent } from "../../../data/lovelace"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import "./hui-warning"; class HuiGenericEntityRow extends LitElement { @property() public hass?: HomeAssistant; @@ -94,27 +92,27 @@ class HuiGenericEntityRow extends LitElement { ? html`
    ${this.secondaryText || - (this.config.secondary_info === "entity-id" - ? stateObj.entity_id - : this.config.secondary_info === "last-changed" + (this.config.secondary_info === "entity-id" + ? stateObj.entity_id + : this.config.secondary_info === "last-changed" + ? html` + + ` + : this.config.secondary_info === "last-triggered" + ? stateObj.attributes.last_triggered ? html` ` - : this.config.secondary_info === "last-triggered" - ? stateObj.attributes.last_triggered - ? html` - - ` - : this.hass.localize( - "ui.panel.lovelace.cards.entities.never_triggered" - ) - : "")} + : this.hass.localize( + "ui.panel.lovelace.cards.entities.never_triggered" + ) + : "")}
    ` : ""} diff --git a/src/panels/lovelace/components/hui-graph-base.ts b/src/panels/lovelace/components/hui-graph-base.ts index 05d3d6a222..5c88b8f582 100644 --- a/src/panels/lovelace/components/hui-graph-base.ts +++ b/src/panels/lovelace/components/hui-graph-base.ts @@ -1,21 +1,21 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, - svg, + customElement, + html, + LitElement, + property, PropertyValues, + svg, + TemplateResult, } from "lit-element"; - import { strokeWidth } from "../../../data/graph"; import { getPath } from "../common/graph/get-path"; @customElement("hui-graph-base") export class HuiGraphBase extends LitElement { @property() public coordinates?: any; + @property() private _path?: string; protected render(): TemplateResult { diff --git a/src/panels/lovelace/components/hui-image.ts b/src/panels/lovelace/components/hui-image.ts index ff48cc9910..c443bff079 100644 --- a/src/panels/lovelace/components/hui-image.ts +++ b/src/panels/lovelace/components/hui-image.ts @@ -1,21 +1,20 @@ -import { STATES_OFF } from "../../../common/const"; - -import parseAspectRatio from "../../../common/util/parse-aspect-ratio"; import { - LitElement, - TemplateResult, - html, - property, - CSSResult, css, + CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, query, - customElement, + TemplateResult, } from "lit-element"; -import { HomeAssistant, CameraEntity } from "../../../types"; -import { styleMap } from "lit-html/directives/style-map"; import { classMap } from "lit-html/directives/class-map"; +import { styleMap } from "lit-html/directives/style-map"; +import { STATES_OFF } from "../../../common/const"; +import parseAspectRatio from "../../../common/util/parse-aspect-ratio"; import { fetchThumbnailUrlWithCache } from "../../../data/camera"; +import { CameraEntity, HomeAssistant } from "../../../types"; const UPDATE_INTERVAL = 10000; const DEFAULT_FILTER = "grayscale(100%)"; @@ -164,7 +163,6 @@ export class HuiImage extends LitElement { if (changedProps.has("cameraImage") && this.cameraView !== "live") { this._updateCameraImageSrc(); this._startUpdateCameraInterval(); - return; } } diff --git a/src/panels/lovelace/components/hui-input-list-editor.ts b/src/panels/lovelace/components/hui-input-list-editor.ts index f102d9d965..0b5ea2e893 100644 --- a/src/panels/lovelace/components/hui-input-list-editor.ts +++ b/src/panels/lovelace/components/hui-input-list-editor.ts @@ -1,23 +1,23 @@ +import "@polymer/paper-input/paper-input"; import { - html, css, + CSSResult, + customElement, + html, LitElement, property, TemplateResult, - CSSResult, - customElement, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import { HomeAssistant } from "../../../types"; import { fireEvent } from "../../../common/dom/fire_event"; - +import { HomeAssistant } from "../../../types"; import { EditorTarget } from "../editor/types"; @customElement("hui-input-list-editor") export class HuiInputListEditor extends LitElement { @property() protected value?: string[]; + @property() protected hass?: HomeAssistant; + @property() protected inputLabel?: string; protected render(): TemplateResult { diff --git a/src/panels/lovelace/components/hui-marquee.ts b/src/panels/lovelace/components/hui-marquee.ts index 967ae88277..907b5fc602 100644 --- a/src/panels/lovelace/components/hui-marquee.ts +++ b/src/panels/lovelace/components/hui-marquee.ts @@ -1,29 +1,33 @@ import { - html, - LitElement, - PropertyValues, - TemplateResult, - customElement, css, CSSResult, + customElement, + html, + LitElement, property, + PropertyValues, + TemplateResult, } from "lit-element"; @customElement("hui-marquee") class HuiMarquee extends LitElement { @property() public text?: string; + @property({ type: Boolean }) public active?: boolean; + @property({ reflect: true, type: Boolean, attribute: "animating" }) private _animating = false; protected firstUpdated(changedProps) { super.firstUpdated(changedProps); + // eslint-disable-next-line wc/no-self-class this.addEventListener("mouseover", () => this.classList.add("hovering"), { // Capture because we need to run before a parent sets active on us. // Hovering will disable the overflow, allowing us to calc if we overflow. capture: true, }); + // eslint-disable-next-line wc/no-self-class this.addEventListener("mouseout", () => this.classList.remove("hovering")); } @@ -51,11 +55,7 @@ class HuiMarquee extends LitElement { return html`
    ${this.text} - ${this._animating - ? html` - ${this.text} - ` - : ""} + ${this._animating ? html` ${this.text} ` : ""}
    `; } diff --git a/src/panels/lovelace/components/hui-theme-select-editor.ts b/src/panels/lovelace/components/hui-theme-select-editor.ts index 9d206be7f5..a684a3ba3a 100644 --- a/src/panels/lovelace/components/hui-theme-select-editor.ts +++ b/src/panels/lovelace/components/hui-theme-select-editor.ts @@ -1,32 +1,33 @@ +import "@material/mwc-button"; import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - -import { HomeAssistant } from "../../../types"; import { fireEvent } from "../../../common/dom/fire_event"; +import { HomeAssistant } from "../../../types"; @customElement("hui-theme-select-editor") export class HuiThemeSelectEditor extends LitElement { @property() public value?: string; + @property() public label?: string; + @property() public hass?: HomeAssistant; protected render(): TemplateResult { return html` { - return html` - ${theme} - `; + return html` ${theme} `; })} diff --git a/src/panels/lovelace/components/hui-timestamp-display.ts b/src/panels/lovelace/components/hui-timestamp-display.ts index 809e559b39..ac753e4405 100644 --- a/src/panels/lovelace/components/hui-timestamp-display.ts +++ b/src/panels/lovelace/components/hui-timestamp-display.ts @@ -1,17 +1,16 @@ import { + customElement, html, LitElement, + property, PropertyValues, TemplateResult, - customElement, - property, } from "lit-element"; - -import { HomeAssistant } from "../../../types"; import { formatDate } from "../../../common/datetime/format_date"; import { formatDateTime } from "../../../common/datetime/format_date_time"; import { formatTime } from "../../../common/datetime/format_time"; import relativeTime from "../../../common/datetime/relative_time"; +import { HomeAssistant } from "../../../types"; const FORMATS: { [key: string]: (ts: Date, lang: string) => string } = { date: formatDate, @@ -57,26 +56,18 @@ class HuiTimestampDisplay extends LitElement { } if (isNaN(this.ts.getTime())) { - return html` - Invalid date - `; + return html` Invalid date `; } const format = this._format; if (INTERVAL_FORMAT.includes(format)) { - return html` - ${this._relative} - `; + return html` ${this._relative} `; } if (format in FORMATS) { - return html` - ${FORMATS[format](this.ts, this.hass.language)} - `; + return html` ${FORMATS[format](this.ts, this.hass.language)} `; } - return html` - Invalid format - `; + return html` Invalid format `; } protected updated(changedProperties: PropertyValues): void { diff --git a/src/panels/lovelace/components/hui-unavailable.ts b/src/panels/lovelace/components/hui-unavailable.ts deleted file mode 100644 index f6ff8bbc17..0000000000 --- a/src/panels/lovelace/components/hui-unavailable.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - html, - LitElement, - TemplateResult, - CSSResult, - css, - customElement, - property, -} from "lit-element"; - -@customElement("hui-unavailable") -export class HuiUnavailable extends LitElement { - @property() public text?: string; - - protected render(): TemplateResult { - return html` -
    -
    ${this.text}
    - `; - } - - static get styles(): CSSResult { - return css` - .disabled-overlay { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: var(--state-icon-unavailable-color); - opacity: 0.6; - z-index: 50; - } - - .disabled-overlay-text { - position: absolute; - top: 50%; - left: 50%; - font-size: 24px; - text-align: center; - color: var(--primary-text-color); - transform: translate(-50%, -50%); - -ms-transform: translate(-50%, -50%); - z-index: 50; - opacity: 0.7; - } - `; - } -} - -declare global { - interface HTMLElementTagNameMap { - "hui-unavailable": HuiUnavailable; - } -} diff --git a/src/panels/lovelace/components/hui-views-list.ts b/src/panels/lovelace/components/hui-views-list.ts index 89c270f949..db4e74e1de 100644 --- a/src/panels/lovelace/components/hui-views-list.ts +++ b/src/panels/lovelace/components/hui-views-list.ts @@ -1,17 +1,17 @@ +import "@polymer/paper-item/paper-icon-item"; +import "@polymer/paper-listbox/paper-listbox"; import { + css, + CSSResult, customElement, + html, LitElement, property, TemplateResult, - html, - CSSResult, - css, } from "lit-element"; -import "@polymer/paper-listbox/paper-listbox"; -import "@polymer/paper-item/paper-icon-item"; -import "../../../../src/components/ha-icon"; -import { toggleAttribute } from "../../../../src/common/dom/toggle_attribute"; import { fireEvent } from "../../../common/dom/fire_event"; +import { toggleAttribute } from "../../../common/dom/toggle_attribute"; +import "../../../components/ha-icon"; import { LovelaceConfig } from "../../../data/lovelace"; declare global { @@ -25,6 +25,7 @@ declare global { @customElement("hui-views-list") class HuiViewsList extends LitElement { @property() private lovelaceConfig?: LovelaceConfig | undefined; + @property() private selected?: number | undefined; protected render(): TemplateResult { diff --git a/src/panels/lovelace/components/hui-warning-element.ts b/src/panels/lovelace/components/hui-warning-element.ts index 1e9b557772..e41c4fb503 100644 --- a/src/panels/lovelace/components/hui-warning-element.ts +++ b/src/panels/lovelace/components/hui-warning-element.ts @@ -1,13 +1,12 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - CSSResult, - css, - customElement, property, + TemplateResult, } from "lit-element"; - import "../../../components/ha-icon"; @customElement("hui-warning-element") @@ -15,9 +14,7 @@ export class HuiWarningElement extends LitElement { @property() public label?: string; protected render(): TemplateResult { - return html` - - `; + return html` `; } static get styles(): CSSResult { diff --git a/src/panels/lovelace/components/hui-warning.ts b/src/panels/lovelace/components/hui-warning.ts index 174b897acf..fc903156d5 100644 --- a/src/panels/lovelace/components/hui-warning.ts +++ b/src/panels/lovelace/components/hui-warning.ts @@ -1,18 +1,16 @@ import { + css, + CSSResult, + customElement, html, LitElement, TemplateResult, - CSSResult, - css, - customElement, } from "lit-element"; @customElement("hui-warning") export class HuiWarning extends LitElement { protected render(): TemplateResult { - return html` - - `; + return html` `; } static get styles(): CSSResult { diff --git a/src/panels/lovelace/create-element/create-badge-element.ts b/src/panels/lovelace/create-element/create-badge-element.ts index 120a51b98e..5df44df0ad 100644 --- a/src/panels/lovelace/create-element/create-badge-element.ts +++ b/src/panels/lovelace/create-element/create-badge-element.ts @@ -1,6 +1,5 @@ -import "../badges/hui-state-label-badge"; - import { LovelaceBadgeConfig } from "../../../data/lovelace"; +import "../badges/hui-state-label-badge"; import { createLovelaceElement } from "./create-element-base"; const ALWAYS_LOADED_TYPES = new Set(["error", "state-label"]); diff --git a/src/panels/lovelace/create-element/create-card-element.ts b/src/panels/lovelace/create-element/create-card-element.ts index 3a2ed953d0..6b586fa678 100644 --- a/src/panels/lovelace/create-element/create-card-element.ts +++ b/src/panels/lovelace/create-element/create-card-element.ts @@ -1,7 +1,8 @@ -import "../cards/hui-entities-card"; -import "../cards/hui-entity-card"; +import { LovelaceCardConfig } from "../../../data/lovelace"; import "../cards/hui-button-card"; +import "../cards/hui-entities-card"; import "../cards/hui-entity-button-card"; +import "../cards/hui-entity-card"; import "../cards/hui-glance-card"; import "../cards/hui-history-graph-card"; import "../cards/hui-horizontal-stack-card"; @@ -10,7 +11,6 @@ import "../cards/hui-sensor-card"; import "../cards/hui-thermostat-card"; import "../cards/hui-vertical-stack-card"; import "../cards/hui-weather-forecast-card"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { createLovelaceElement, getLovelaceElementClass, diff --git a/src/panels/lovelace/create-element/create-element-base.ts b/src/panels/lovelace/create-element/create-element-base.ts index c2c01cb279..88b46a6ec0 100644 --- a/src/panels/lovelace/create-element/create-element-base.ts +++ b/src/panels/lovelace/create-element/create-element-base.ts @@ -1,23 +1,23 @@ -import { - LovelaceCardConfig, - LovelaceBadgeConfig, -} from "../../../data/lovelace"; -import { - HuiErrorCard, - createErrorCardElement, - createErrorCardConfig, -} from "../cards/hui-error-card"; -import { - LovelaceCard, - LovelaceBadge, - LovelaceHeaderFooter, - LovelaceCardConstructor, -} from "../types"; import { fireEvent } from "../../../common/dom/fire_event"; -import { LovelaceElementConfig, LovelaceElement } from "../elements/types"; +import { + LovelaceBadgeConfig, + LovelaceCardConfig, +} from "../../../data/lovelace"; +import { CUSTOM_TYPE_PREFIX } from "../../../data/lovelace_custom_cards"; +import { + createErrorCardConfig, + createErrorCardElement, + HuiErrorCard, +} from "../cards/hui-error-card"; +import { LovelaceElement, LovelaceElementConfig } from "../elements/types"; import { LovelaceRow, LovelaceRowConfig } from "../entity-rows/types"; import { LovelaceHeaderFooterConfig } from "../header-footer/types"; -import { CUSTOM_TYPE_PREFIX } from "../../../data/lovelace_custom_cards"; +import { + LovelaceBadge, + LovelaceCard, + LovelaceCardConstructor, + LovelaceHeaderFooter, +} from "../types"; const TIMEOUT = 2000; @@ -60,8 +60,9 @@ const _createElement = ( // @ts-ignore element.setConfig(config); } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error(tag, err); + // eslint-disable-next-line @typescript-eslint/no-use-before-define return _createErrorElement(err.message, config); } return element; @@ -173,19 +174,20 @@ export const getLovelaceElementClass = async < if (customTag) { const customCls = customElements.get(customTag); - return customCls - ? customCls - : new Promise((resolve, reject) => { - // We will give custom components up to TIMEOUT seconds to get defined - setTimeout( - () => reject(new Error(`Custom element not found: ${customTag}`)), - TIMEOUT - ); + return ( + customCls || + new Promise((resolve, reject) => { + // We will give custom components up to TIMEOUT seconds to get defined + setTimeout( + () => reject(new Error(`Custom element not found: ${customTag}`)), + TIMEOUT + ); - customElements - .whenDefined(customTag) - .then(() => resolve(customElements.get(customTag))); - }); + customElements + .whenDefined(customTag) + .then(() => resolve(customElements.get(customTag))); + }) + ); } const tag = `hui-${type}-${tagSuffix}`; diff --git a/src/panels/lovelace/create-element/create-hui-element.ts b/src/panels/lovelace/create-element/create-hui-element.ts index d61546046a..aacf1614cd 100644 --- a/src/panels/lovelace/create-element/create-hui-element.ts +++ b/src/panels/lovelace/create-element/create-hui-element.ts @@ -5,7 +5,6 @@ import "../elements/hui-service-button-element"; import "../elements/hui-state-badge-element"; import "../elements/hui-state-icon-element"; import "../elements/hui-state-label-element"; - import { LovelaceElementConfig } from "../elements/types"; import { createLovelaceElement } from "./create-element-base"; diff --git a/src/panels/lovelace/create-element/create-row-element.ts b/src/panels/lovelace/create-element/create-row-element.ts index 8fd0e6019e..e29f8ea9b8 100644 --- a/src/panels/lovelace/create-element/create-row-element.ts +++ b/src/panels/lovelace/create-element/create-row-element.ts @@ -4,10 +4,10 @@ import "../entity-rows/hui-script-entity-row"; import "../entity-rows/hui-sensor-entity-row"; import "../entity-rows/hui-text-entity-row"; import "../entity-rows/hui-toggle-entity-row"; -import "../special-rows/hui-button-row"; -import "../special-rows/hui-attribute-row"; -import "../special-rows/hui-call-service-row"; import { EntityConfig } from "../entity-rows/types"; +import "../special-rows/hui-attribute-row"; +import "../special-rows/hui-button-row"; +import "../special-rows/hui-call-service-row"; import { createLovelaceElement } from "./create-element-base"; const ALWAYS_LOADED_TYPES = new Set([ diff --git a/src/panels/lovelace/custom-card-helpers.ts b/src/panels/lovelace/custom-card-helpers.ts index 0de17cc064..2896d349b2 100644 --- a/src/panels/lovelace/custom-card-helpers.ts +++ b/src/panels/lovelace/custom-card-helpers.ts @@ -1,5 +1,5 @@ -export { createRowElement } from "./create-element/create-row-element"; -export { createCardElement } from "./create-element/create-card-element"; export { createBadgeElement } from "./create-element/create-badge-element"; +export { createCardElement } from "./create-element/create-card-element"; export { createHeaderFooterElement } from "./create-element/create-header-footer-element"; export { createHuiElement } from "./create-element/create-hui-element"; +export { createRowElement } from "./create-element/create-row-element"; diff --git a/src/panels/lovelace/editor/add-entities-to-view.ts b/src/panels/lovelace/editor/add-entities-to-view.ts index b5f6240296..686b544bf5 100644 --- a/src/panels/lovelace/editor/add-entities-to-view.ts +++ b/src/panels/lovelace/editor/add-entities-to-view.ts @@ -1,11 +1,11 @@ -import { HomeAssistant } from "../../../types"; import { - LovelaceConfig, fetchConfig, + LovelaceConfig, saveConfig, } from "../../../data/lovelace"; -import { showSelectViewDialog } from "./select-view/show-select-view-dialog"; +import { HomeAssistant } from "../../../types"; import { showSuggestCardDialog } from "./card-editor/show-suggest-card-dialog"; +import { showSelectViewDialog } from "./select-view/show-select-view-dialog"; export const addEntitiesToLovelaceView = async ( element: HTMLElement, diff --git a/src/panels/lovelace/editor/card-editor/hui-card-editor.ts b/src/panels/lovelace/editor/card-editor/hui-card-editor.ts index 69b7a24891..490222ae80 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-editor.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-editor.ts @@ -1,29 +1,27 @@ +import "@material/mwc-button"; +import { safeDump, safeLoad } from "js-yaml"; import { - html, css, - LitElement, - TemplateResult, CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; - -import { safeDump, safeLoad } from "js-yaml"; - -import "@material/mwc-button"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; -import { LovelaceCardEditor } from "../../types"; -import { computeRTL } from "../../../../common/util/compute_rtl"; - -import "../../../../components/ha-code-editor"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { HaCodeEditor } from "../../../../components/ha-code-editor"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { EntityConfig } from "../../entity-rows/types"; +import { computeRTL } from "../../../../common/util/compute_rtl"; +import "../../../../components/ha-code-editor"; +import type { HaCodeEditor } from "../../../../components/ha-code-editor"; +import type { + LovelaceCardConfig, + LovelaceConfig, +} from "../../../../data/lovelace"; +import type { HomeAssistant } from "../../../../types"; import { getCardElementClass } from "../../create-element/create-card-element"; -import { GUIModeChangedEvent } from "../types"; +import type { EntityConfig } from "../../entity-rows/types"; +import type { LovelaceCardEditor } from "../../types"; +import type { GUIModeChangedEvent } from "../types"; export interface ConfigChangedEvent { config: LovelaceCardConfig; @@ -50,22 +48,31 @@ export interface UIConfigChangedEvent extends Event { @customElement("hui-card-editor") export class HuiCardEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public lovelace?: LovelaceConfig; @property() private _yaml?: string; + @property() private _config?: LovelaceCardConfig; + @property() private _configElement?: LovelaceCardEditor; + @property() private _configElType?: string; - @property() private _GUImode: boolean = true; + + @property() private _GUImode = true; + // Error: Configuration broken - do not save @property() private _error?: string; + // Warning: GUI editor can't handle configuration - ok to save @property() private _warning?: string; - @property() private _loading: boolean = false; + + @property() private _loading = false; public get yaml(): string { return this._yaml || ""; } + public set yaml(_yaml: string) { this._yaml = _yaml; try { @@ -85,6 +92,7 @@ export class HuiCardEditor extends LitElement { public get value(): LovelaceCardConfig | undefined { return this._config; } + public set value(config: LovelaceCardConfig | undefined) { if (JSON.stringify(config) !== JSON.stringify(this._config || {})) { this.yaml = safeDump(config); @@ -208,6 +216,7 @@ export class HuiCardEditor extends LitElement { const config = ev.detail.config; this.value = config; } + private _handleYAMLChanged(ev) { ev.stopPropagation(); const newYaml = ev.detail.value; diff --git a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts index 2e22f0232e..0c8550f39a 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-picker.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-picker.ts @@ -1,33 +1,32 @@ import { - html, css, - LitElement, - TemplateResult, CSSResult, customElement, + html, + LitElement, property, PropertyValues, + TemplateResult, } from "lit-element"; -import { until } from "lit-html/directives/until"; import { classMap } from "lit-html/directives/class-map"; - -import { CardPickTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCard } from "../../types"; -import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; +import { until } from "lit-html/directives/until"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { createCardElement } from "../../create-element/create-card-element"; -import { getCardStubConfig } from "../get-card-stub-config"; -import { - computeUsedEntities, - calcUnusedEntities, -} from "../../common/compute-unused-entities"; -import { UNKNOWN, UNAVAILABLE } from "../../../../data/entity"; +import { UNAVAILABLE_STATES } from "../../../../data/entity"; +import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; import { customCards, - getCustomCardEntry, CUSTOM_TYPE_PREFIX, + getCustomCardEntry, } from "../../../../data/lovelace_custom_cards"; +import { HomeAssistant } from "../../../../types"; +import { + calcUnusedEntities, + computeUsedEntities, +} from "../../common/compute-unused-entities"; +import { createCardElement } from "../../create-element/create-card-element"; +import { LovelaceCard } from "../../types"; +import { getCardStubConfig } from "../get-card-stub-config"; +import { CardPickTarget } from "../types"; const previewCards: string[] = [ "alarm-panel", @@ -63,9 +62,13 @@ const nonPreviewCards: string[] = [ @customElement("hui-card-picker") export class HuiCardPicker extends LitElement { @property() public hass?: HomeAssistant; + public lovelace?: LovelaceConfig; + public cardPicked?: (cardConf: LovelaceCardConfig) => void; + private _unusedEntities?: string[]; + private _usedEntities?: string[]; protected render(): TemplateResult { @@ -168,14 +171,12 @@ export class HuiCardPicker extends LitElement { this._usedEntities = [...usedEntities].filter( (eid) => this.hass!.states[eid] && - this.hass!.states[eid].state !== UNKNOWN && - this.hass!.states[eid].state !== UNAVAILABLE + !UNAVAILABLE_STATES.includes(this.hass!.states[eid].state) ); this._unusedEntities = [...unusedEntities].filter( (eid) => this.hass!.states[eid] && - this.hass!.states[eid].state !== UNKNOWN && - this.hass!.states[eid].state !== UNAVAILABLE + !UNAVAILABLE_STATES.includes(this.hass!.states[eid].state) ); this.requestUpdate(); @@ -280,8 +281,8 @@ export class HuiCardPicker extends LitElement { private async _renderCardElement( type: string, - noElement: boolean = false, - isCustom: boolean = false + noElement = false, + isCustom = false ): Promise { const customCard = isCustom ? getCustomCardEntry(type) : undefined; if (isCustom) { diff --git a/src/panels/lovelace/editor/card-editor/hui-card-preview.ts b/src/panels/lovelace/editor/card-editor/hui-card-preview.ts index 8850d46c15..fb622e95fc 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-preview.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-preview.ts @@ -1,16 +1,17 @@ import "@polymer/paper-input/paper-textarea"; - -import { createCardElement } from "../../create-element/create-card-element"; -import { HomeAssistant } from "../../../../types"; +import { computeRTL } from "../../../../common/util/compute_rtl"; import { LovelaceCardConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { createErrorCardConfig } from "../../cards/hui-error-card"; +import { createCardElement } from "../../create-element/create-card-element"; import { LovelaceCard } from "../../types"; import { ConfigError } from "../types"; -import { createErrorCardConfig } from "../../cards/hui-error-card"; -import { computeRTL } from "../../../../common/util/compute_rtl"; export class HuiCardPreview extends HTMLElement { private _hass?: HomeAssistant; + private _element?: LovelaceCard; + private _config?: LovelaceCardConfig; private get _error() { diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-delete-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-delete-card.ts index d555eba729..3d1b64d988 100644 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-delete-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-delete-card.ts @@ -1,32 +1,31 @@ +import deepFreeze from "deep-freeze"; import { css, - html, - LitElement, - TemplateResult, CSSResultArray, customElement, + html, + LitElement, property, query, + TemplateResult, } from "lit-element"; - -import "./hui-card-preview"; -import "../../../../components/dialog/ha-paper-dialog"; - -import deepFreeze from "deep-freeze"; - -// tslint:disable-next-line: no-duplicate-imports -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardConfig } from "../../../../data/lovelace"; -import { haStyleDialog } from "../../../../resources/styles"; -import { DeleteCardDialogParams } from "./show-delete-card-dialog"; import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import type { LovelaceCardConfig } from "../../../../data/lovelace"; +import { haStyleDialog } from "../../../../resources/styles"; +import type { HomeAssistant } from "../../../../types"; +import "./hui-card-preview"; +import type { DeleteCardDialogParams } from "./show-delete-card-dialog"; @customElement("hui-dialog-delete-card") export class HuiDialogDeleteCard extends LitElement { @property() protected hass!: HomeAssistant; + @property() private _params?: DeleteCardDialogParams; + @property() private _cardConfig?: LovelaceCardConfig; + @query("ha-paper-dialog") private _dialog!: HaPaperDialog; public async showDialog(params: DeleteCardDialogParams): Promise { diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts index 59dee5b1f6..3599c85a93 100755 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-edit-card.ts @@ -1,34 +1,30 @@ +import deepFreeze from "deep-freeze"; import { css, - html, - LitElement, - TemplateResult, CSSResultArray, customElement, + html, + LitElement, property, query, + TemplateResult, } from "lit-element"; - -import deepFreeze from "deep-freeze"; - -import { HomeAssistant } from "../../../../types"; -import { HASSDomEvent } from "../../../../common/dom/fire_event"; -import { +import type { HASSDomEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/dialog/ha-paper-dialog"; +import type { LovelaceCardConfig, LovelaceViewConfig, } from "../../../../data/lovelace"; -import "./hui-card-editor"; -// tslint:disable-next-line -import { HuiCardEditor, ConfigChangedEvent } from "./hui-card-editor"; -import "./hui-card-preview"; -import "./hui-card-picker"; -import { EditCardDialogParams } from "./show-edit-card-dialog"; -import { addCard, replaceCard } from "../config-util"; - -import "../../../../components/dialog/ha-paper-dialog"; import { haStyleDialog } from "../../../../resources/styles"; +import type { HomeAssistant } from "../../../../types"; import { showSaveSuccessToast } from "../../../../util/toast-saved-success"; -import { GUIModeChangedEvent } from "../types"; +import { addCard, replaceCard } from "../config-util"; +import type { GUIModeChangedEvent } from "../types"; +import "./hui-card-editor"; +import type { ConfigChangedEvent, HuiCardEditor } from "./hui-card-editor"; +import "./hui-card-picker"; +import "./hui-card-preview"; +import type { EditCardDialogParams } from "./show-edit-card-dialog"; declare global { // for fire event @@ -48,13 +44,17 @@ export class HuiDialogEditCard extends LitElement { @property() private _params?: EditCardDialogParams; @property() private _cardConfig?: LovelaceCardConfig; + @property() private _viewConfig!: LovelaceViewConfig; - @property() private _saving: boolean = false; + @property() private _saving = false; + @property() private _error?: string; + @property() private _guiModeAvailable? = true; @query("hui-card-editor") private _cardEditorEl?: HuiCardEditor; + @property() private _GUImode = true; public async showDialog(params: EditCardDialogParams): Promise { diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts index 5cc1497877..ad969baf53 100644 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-move-card-view.ts @@ -1,22 +1,19 @@ +import "@polymer/paper-item/paper-item"; import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-item/paper-item"; import "../../../../components/dialog/ha-paper-dialog"; -// tslint:disable-next-line:no-duplicate-imports -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; - +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import type { PolymerChangedEvent } from "../../../../polymer-types"; import "../../components/hui-views-list"; - import { moveCard } from "../config-util"; -import { MoveCardViewDialogParams } from "./show-move-card-view-dialog"; -import { PolymerChangedEvent } from "../../../../polymer-types"; +import type { MoveCardViewDialogParams } from "./show-move-card-view-dialog"; @customElement("hui-dialog-move-card-view") export class HuiDialogMoveCardView extends LitElement { diff --git a/src/panels/lovelace/editor/card-editor/hui-dialog-suggest-card.ts b/src/panels/lovelace/editor/card-editor/hui-dialog-suggest-card.ts index 283cb9f4d3..dd3e333d65 100755 --- a/src/panels/lovelace/editor/card-editor/hui-dialog-suggest-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-dialog-suggest-card.ts @@ -1,41 +1,42 @@ +import deepFreeze from "deep-freeze"; import { css, - html, - LitElement, - TemplateResult, CSSResultArray, customElement, + html, + LitElement, property, query, + TemplateResult, } from "lit-element"; - -import deepFreeze from "deep-freeze"; - -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardConfig } from "../../../../data/lovelace"; -import "./hui-card-preview"; -import { addCards } from "../config-util"; - -import "../../../../components/ha-yaml-editor"; import "../../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import "../../../../components/ha-yaml-editor"; +import type { HaYamlEditor } from "../../../../components/ha-yaml-editor"; +import { LovelaceCardConfig } from "../../../../data/lovelace"; import { haStyleDialog } from "../../../../resources/styles"; -import { showEditCardDialog } from "./show-edit-card-dialog"; -import { computeCards } from "../../common/generate-lovelace-config"; -import { SuggestCardDialogParams } from "./show-suggest-card-dialog"; +import { HomeAssistant } from "../../../../types"; import { showSaveSuccessToast } from "../../../../util/toast-saved-success"; -// tslint:disable-next-line -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; -// tslint:disable-next-line -import { HaYamlEditor } from "../../../../components/ha-yaml-editor"; +import { computeCards } from "../../common/generate-lovelace-config"; +import { addCards } from "../config-util"; +import "./hui-card-preview"; +import { showEditCardDialog } from "./show-edit-card-dialog"; +import { SuggestCardDialogParams } from "./show-suggest-card-dialog"; @customElement("hui-dialog-suggest-card") export class HuiDialogSuggestCard extends LitElement { @property() protected hass!: HomeAssistant; + @property() private _params?: SuggestCardDialogParams; + @property() private _cardConfig?: LovelaceCardConfig[]; - @property() private _saving: boolean = false; - @property() private _yamlMode: boolean = false; + + @property() private _saving = false; + + @property() private _yamlMode = false; + @query("ha-paper-dialog") private _dialog?: HaPaperDialog; + @query("ha-yaml-editor") private _yamlEditor?: HaYamlEditor; public async showDialog(params: SuggestCardDialogParams): Promise { diff --git a/src/panels/lovelace/editor/card-editor/show-edit-card-dialog.ts b/src/panels/lovelace/editor/card-editor/show-edit-card-dialog.ts index fd794affb2..18b0d820e3 100644 --- a/src/panels/lovelace/editor/card-editor/show-edit-card-dialog.ts +++ b/src/panels/lovelace/editor/card-editor/show-edit-card-dialog.ts @@ -1,5 +1,5 @@ import { fireEvent } from "../../../../common/dom/fire_event"; -import { LovelaceConfig, LovelaceCardConfig } from "../../../../data/lovelace"; +import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; export interface EditCardDialogParams { lovelaceConfig: LovelaceConfig; diff --git a/src/panels/lovelace/editor/card-editor/show-suggest-card-dialog.ts b/src/panels/lovelace/editor/card-editor/show-suggest-card-dialog.ts index 1dce62e34c..a5ec08a9db 100644 --- a/src/panels/lovelace/editor/card-editor/show-suggest-card-dialog.ts +++ b/src/panels/lovelace/editor/card-editor/show-suggest-card-dialog.ts @@ -1,5 +1,5 @@ import { fireEvent } from "../../../../common/dom/fire_event"; -import { LovelaceConfig, LovelaceCardConfig } from "../../../../data/lovelace"; +import { LovelaceCardConfig, LovelaceConfig } from "../../../../data/lovelace"; export interface SuggestCardDialogParams { lovelaceConfig?: LovelaceConfig; diff --git a/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts index a2ab98022b..4d4dde3186 100644 --- a/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-alarm-panel-card-editor.ts @@ -1,27 +1,25 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, - CSSResult, - css, -} from "lit-element"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; -import { AlarmPanelCardConfig } from "../../cards/types"; - import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-icon"; +import { HomeAssistant } from "../../../../types"; +import { AlarmPanelCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -78,7 +76,7 @@ export class HuiAlarmPanelCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["alarm_control_panel"]' + .include-domains=${["alarm_control_panel"]} @change="${this._valueChanged}" allow-custom-entity > @@ -113,9 +111,7 @@ export class HuiAlarmPanelCardEditor extends LitElement > ${states.map((state) => { - return html` - ${state} - `; + return html` ${state} `; })} diff --git a/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts index d0f1299c17..ac90dca17e 100644 --- a/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-button-card-editor.ts @@ -1,30 +1,28 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-action-editor"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; -import "../../../../components/ha-icon-input"; - -import { struct } from "../../common/structs/struct"; -import { - EntitiesEditorEvent, - EditorTarget, - actionConfigStruct, -} from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; -import { ActionConfig } from "../../../../data/lovelace"; -import { ButtonCardConfig } from "../../cards/types"; import { stateIcon } from "../../../../common/entity/state_icon"; +import "../../../../components/ha-icon-input"; +import { ActionConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { ButtonCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-action-editor"; +import "../../components/hui-entity-editor"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { + actionConfigStruct, + EditorTarget, + EntitiesEditorEvent, +} from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -136,8 +134,9 @@ export class HuiButtonCardEditor extends LitElement "ui.panel.lovelace.editor.card.config.optional" )})" .value=${this._icon} - .placeholder=${this._icon || - stateIcon(this.hass.states[this._entity])} + .placeholder=${ + this._icon || stateIcon(this.hass.states[this._entity]) + } .configValue=${"icon"} @value-changed=${this._valueChanged} > diff --git a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts index 1675f6e883..086c58d4fc 100644 --- a/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-conditional-card-editor.ts @@ -1,27 +1,25 @@ +import "@polymer/paper-tabs"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - CSSResult, - css, query, + TemplateResult, } from "lit-element"; -import "@polymer/paper-tabs"; - -import { struct } from "../../common/structs/struct"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { ConditionalCardConfig } from "../../cards/types"; import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; -import { LovelaceConfig } from "../../../../data/lovelace"; - import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-switch"; +import { LovelaceConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { ConditionalCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import { LovelaceCardEditor } from "../../types"; import { - HuiCardEditor, ConfigChangedEvent, + HuiCardEditor, } from "../card-editor/hui-card-editor"; import { GUIModeChangedEvent } from "../types"; @@ -40,11 +38,17 @@ const cardConfigStruct = struct({ export class HuiConditionalCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; + @property() public lovelace?: LovelaceConfig; + @property() private _config?: ConditionalCardConfig; + @property() private _GUImode = true; + @property() private _guiModeAvailable? = true; - @property() private _cardTab: boolean = false; + + @property() private _cardTab = false; + @query("hui-card-editor") private _cardEditorEl?: HuiCardEditor; public setConfig(config: ConditionalCardConfig): void { @@ -242,6 +246,7 @@ export class HuiConditionalCardEditor extends LitElement target.value = ""; fireEvent(this, "config-changed", { config: this._config }); } + private _changeCondition(ev: Event): void { const target = ev.target as any; if (!this._config || !target) { @@ -265,11 +270,9 @@ export class HuiConditionalCardEditor extends LitElement condition.state_not = condition.state; delete condition.state; } - } else { - if (condition.state_not) { - condition.state = condition.state_not; - delete condition.state_not; - } + } else if (condition.state_not) { + condition.state = condition.state_not; + delete condition.state_not; } } this._config.conditions[target.index] = condition; diff --git a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts index 9e32bf222a..6427ce9d1b 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entities-card-editor.ts @@ -1,37 +1,35 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/state-badge"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; import "../../../../components/ha-card"; import "../../../../components/ha-icon"; import "../../../../components/ha-switch"; - -import { processEditorEntities } from "../process-editor-entities"; -import { struct } from "../../common/structs/struct"; -import { - EntitiesEditorEvent, - EditorTarget, - entitiesConfigStruct, -} from "../types"; import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; import { EntitiesCardConfig, EntitiesCardEntityConfig, } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-entity-editor"; +import "../../components/hui-theme-select-editor"; import { headerFooterConfigStructs } from "../../header-footer/types"; +import { LovelaceCardEditor } from "../../types"; +import { processEditorEntities } from "../process-editor-entities"; +import { + EditorTarget, + entitiesConfigStruct, + EntitiesEditorEvent, +} from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts index 0acfa9caa4..6206f7260a 100644 --- a/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-entity-card-editor.ts @@ -1,26 +1,24 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-action-editor"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; -import "../../../../components/ha-icon-input"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; -import { EntityCardConfig } from "../../cards/types"; -import { headerFooterConfigStructs } from "../../header-footer/types"; import { stateIcon } from "../../../../common/entity/state_icon"; +import "../../../../components/ha-icon-input"; +import { HomeAssistant } from "../../../../types"; +import { EntityCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-action-editor"; +import "../../components/hui-entity-editor"; +import "../../components/hui-theme-select-editor"; +import { headerFooterConfigStructs } from "../../header-footer/types"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -108,7 +106,7 @@ export class HuiEntityCardEditor extends LitElement )})" .value=${this._icon} .placeholder=${this._icon || - stateIcon(this.hass.states[this._entity])} + stateIcon(this.hass.states[this._entity])} .configValue=${"icon"} @value-changed=${this._valueChanged} > diff --git a/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts index 23e3e4eef3..4f85e75ddb 100644 --- a/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-gauge-card-editor.ts @@ -1,25 +1,23 @@ +import "@polymer/paper-input/paper-input"; import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; -import "../../../../components/ha-switch"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; +import "../../../../components/ha-switch"; +import { HomeAssistant } from "../../../../types"; import { GaugeCardConfig, SeverityConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-entity-editor"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -89,7 +87,7 @@ export class HuiGaugeCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["sensor"]' + .include-domains=${["sensor"]} @change="${this._valueChanged}" allow-custom-entity > diff --git a/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts index a019bc6a89..51d0bf0e93 100644 --- a/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-glance-card-editor.ts @@ -1,33 +1,31 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/state-badge"; -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; import "../../../../components/ha-card"; import "../../../../components/ha-icon"; import "../../../../components/ha-switch"; - +import { HomeAssistant } from "../../../../types"; +import { ConfigEntity, GlanceCardConfig } from "../../cards/types"; import { struct } from "../../common/structs/struct"; +import "../../components/hui-entity-editor"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; import { processEditorEntities } from "../process-editor-entities"; import { - EntitiesEditorEvent, EditorTarget, entitiesConfigStruct, + EntitiesEditorEvent, } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; import { configElementStyle } from "./config-elements-style"; -import { GlanceCardConfig, ConfigEntity } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts index 9d8f777fa4..916e8db9ce 100644 --- a/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-history-graph-card-editor.ts @@ -1,23 +1,21 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-entity-editor"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { EntityConfig } from "../../entity-rows/types"; -import { processEditorEntities } from "../process-editor-entities"; -import { configElementStyle } from "./config-elements-style"; +import { HomeAssistant } from "../../../../types"; import { HistoryGraphCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-entity-editor"; +import { EntityConfig } from "../../entity-rows/types"; +import { LovelaceCardEditor } from "../../types"; +import { processEditorEntities } from "../process-editor-entities"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const entitiesConfigStruct = struct.union([ { diff --git a/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts index 39ba0c4194..cba612b982 100644 --- a/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-iframe-card-editor.ts @@ -1,19 +1,18 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; +import { HomeAssistant } from "../../../../types"; import { IframeCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts index 1a76e716b2..c05d30178c 100644 --- a/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-light-card-editor.ts @@ -1,30 +1,28 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-theme-select-editor"; -import "../../components/hui-action-editor"; -import "../../../../components/ha-icon-input"; -import "../../components/hui-entity-editor"; - -import { struct } from "../../common/structs/struct"; -import { - EntitiesEditorEvent, - EditorTarget, - actionConfigStruct, -} from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; -import { LightCardConfig } from "../../cards/types"; import { stateIcon } from "../../../../common/entity/state_icon"; +import "../../../../components/ha-icon-input"; import { ActionConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { LightCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-action-editor"; +import "../../components/hui-entity-editor"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { + actionConfigStruct, + EditorTarget, + EntitiesEditorEvent, +} from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -97,7 +95,7 @@ export class HuiLightCardEditor extends LitElement .hass=${this.hass} .value=${this._entity} .configValue=${"entity"} - include-domains='["light"]' + .include-domains=${["light"]} @change=${this._valueChanged} allow-custom-entity > @@ -120,7 +118,7 @@ export class HuiLightCardEditor extends LitElement )})" .value=${this._icon} .placeholder=${this._icon || - stateIcon(this.hass.states[this._entity])} + stateIcon(this.hass.states[this._entity])} .configValue=${"icon"} @value-changed=${this._valueChanged} > diff --git a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts index 3eb81676b1..62fc12f5f3 100644 --- a/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-map-card-editor.ts @@ -1,31 +1,29 @@ -import { - html, - css, - LitElement, - TemplateResult, - customElement, - property, - CSSResult, -} from "lit-element"; import "@polymer/paper-input/paper-input"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import { PolymerChangedEvent } from "../../../../polymer-types"; +import { HomeAssistant } from "../../../../types"; +import { MapCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import "../../components/hui-entity-editor"; import "../../components/hui-input-list-editor"; - -import { struct } from "../../common/structs/struct"; +import { EntityConfig } from "../../entity-rows/types"; +import { LovelaceCardEditor } from "../../types"; +import { processEditorEntities } from "../process-editor-entities"; import { - EntitiesEditorEvent, EditorTarget, entitiesConfigStruct, + EntitiesEditorEvent, } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; import { configElementStyle } from "./config-elements-style"; -import { processEditorEntities } from "../process-editor-entities"; -import { EntityConfig } from "../../entity-rows/types"; -import { PolymerChangedEvent } from "../../../../polymer-types"; -import { MapCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts index 372d64d2ac..b98e9076c5 100644 --- a/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-markdown-card-editor.ts @@ -1,22 +1,20 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-input/paper-textarea"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; +import { HomeAssistant } from "../../../../types"; import { MarkdownCardConfig } from "../../cards/types"; - +import { struct } from "../../common/structs/struct"; import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts index b740bae1be..5f78265b17 100644 --- a/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-media-control-card-editor.ts @@ -1,19 +1,17 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; - import "../../../../components/entity/ha-entity-picker"; +import { HomeAssistant } from "../../../../types"; import { MediaControlCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; const cardConfigStruct = struct({ type: "string", @@ -52,7 +50,7 @@ export class HuiMediaControlCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["media_player"]' + .include-domains=${["media_player"]} @change="${this._valueChanged}" allow-custom-entity > diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts index eaab41e64d..8828484b30 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-card-editor.ts @@ -1,27 +1,25 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - +import { fireEvent } from "../../../../common/dom/fire_event"; +import { ActionConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { PictureCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import "../../components/hui-action-editor"; import "../../components/hui-theme-select-editor"; - -import { struct } from "../../common/structs/struct"; -import { - EntitiesEditorEvent, - EditorTarget, - actionConfigStruct, -} from "../types"; -import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { + actionConfigStruct, + EditorTarget, + EntitiesEditorEvent, +} from "../types"; import { configElementStyle } from "./config-elements-style"; -import { ActionConfig } from "../../../../data/lovelace"; -import { PictureCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts index 52ae73dc25..3d7b46d751 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-entity-card-editor.ts @@ -1,32 +1,30 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; -import "@polymer/paper-input/paper-input"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/ha-switch"; +import { ActionConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { PictureEntityCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import "../../components/hui-action-editor"; import "../../components/hui-entity-editor"; -import "../../../../components/ha-switch"; import "../../components/hui-theme-select-editor"; - -import { struct } from "../../common/structs/struct"; -import { - EntitiesEditorEvent, - EditorTarget, - actionConfigStruct, -} from "../types"; -import { HomeAssistant } from "../../../../types"; import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { + actionConfigStruct, + EditorTarget, + EntitiesEditorEvent, +} from "../types"; import { configElementStyle } from "./config-elements-style"; -import { ActionConfig } from "../../../../data/lovelace"; -import { PictureEntityCardConfig } from "../../cards/types"; const cardConfigStruct = struct({ type: "string", @@ -152,7 +150,7 @@ export class HuiPictureEntityCardEditor extends LitElement .value="${this._camera_image}" .configValue=${"camera_image"} @change="${this._valueChanged}" - include-domains='["camera"]' + .include-domains=${["camera"]} allow-custom-entity >
    @@ -170,9 +168,7 @@ export class HuiPictureEntityCardEditor extends LitElement .selected="${views.indexOf(this._camera_view)}" > ${views.map((view) => { - return html` - ${view} - `; + return html` ${view} `; })} @@ -268,9 +264,7 @@ export class HuiPictureEntityCardEditor extends LitElement [target.configValue!]: target.checked !== undefined ? target.checked - : value - ? value - : target.config, + : value || target.config, }; } } diff --git a/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts index 677e110767..c45f910ce1 100644 --- a/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-picture-glance-card-editor.ts @@ -1,35 +1,33 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; -import "@polymer/paper-input/paper-input"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import "../../../../components/entity/ha-entity-picker"; +import { ActionConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { PictureGlanceCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import "../../components/hui-action-editor"; import "../../components/hui-entity-editor"; -import "../../../../components/entity/ha-entity-picker"; import "../../components/hui-theme-select-editor"; - -import { struct } from "../../common/structs/struct"; -import { - EntitiesEditorEvent, - EditorTarget, - actionConfigStruct, - entitiesConfigStruct, -} from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; -import { ActionConfig } from "../../../../data/lovelace"; -import { PictureGlanceCardConfig } from "../../cards/types"; import { EntityConfig } from "../../entity-rows/types"; +import { LovelaceCardEditor } from "../../types"; import { processEditorEntities } from "../process-editor-entities"; +import { + actionConfigStruct, + EditorTarget, + entitiesConfigStruct, + EntitiesEditorEvent, +} from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -152,7 +150,7 @@ export class HuiPictureGlanceCardEditor extends LitElement .configValue=${"camera_image"} @change="${this._valueChanged}" allow-custom-entity - include-domains='["camera"]' + .include-domains=${["camera"]} >
    ${views.map((view) => { - return html` - ${view} - `; + return html` ${view} `; })} @@ -267,7 +263,7 @@ export class HuiPictureGlanceCardEditor extends LitElement } else { this._config = { ...this._config, - [target.configValue!]: value ? value : target.config, + [target.configValue!]: value || target.config, }; } } diff --git a/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts index 7ac5ba8b34..7dfed2b84b 100644 --- a/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-plant-status-card-editor.ts @@ -1,23 +1,21 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - +import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-icon"; -import "../../components/hui-theme-select-editor"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; import { PlantStatusCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -67,7 +65,7 @@ export class HuiPlantStatusCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["plant"]' + .include-domains=${["plant"]} @change="${this._valueChanged}" allow-custom-entity > diff --git a/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts index 631b079101..8b7077e2ec 100644 --- a/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-sensor-card-editor.ts @@ -1,27 +1,25 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; -import "@polymer/paper-input/paper-input"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - -import "../../components/hui-theme-select-editor"; +import { + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import { stateIcon } from "../../../../common/entity/state_icon"; import "../../../../components/entity/ha-entity-picker"; import "../../../../components/ha-icon-input"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; import { SensorCardConfig } from "../../cards/types"; -import { stateIcon } from "../../../../common/entity/state_icon"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -98,7 +96,7 @@ export class HuiSensorCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["sensor"]' + .include-domains=${["sensor"]} @change="${this._valueChanged}" allow-custom-entity > @@ -121,7 +119,7 @@ export class HuiSensorCardEditor extends LitElement )})" .value=${this._icon} .placeholder=${this._icon || - stateIcon(this.hass.states[this._entity])} + stateIcon(this.hass.states[this._entity])} .configValue=${"icon"} @value-changed=${this._valueChanged} > @@ -139,9 +137,7 @@ export class HuiSensorCardEditor extends LitElement .selected="${graphs.indexOf(this._graph)}" > ${graphs.map((graph) => { - return html` - ${graph} - `; + return html` ${graph} `; })} diff --git a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts index a6c2a01f1d..98fea1a69b 100644 --- a/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-shopping-list-editor.ts @@ -1,23 +1,21 @@ -import { - html, - CSSResult, - css, - LitElement, - TemplateResult, - customElement, - property, -} from "lit-element"; import "@polymer/paper-input/paper-input"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { ShoppingListCardConfig } from "../../cards/types"; - +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { isComponentLoaded } from "../../../../common/config/is_component_loaded"; +import { fireEvent } from "../../../../common/dom/fire_event"; +import { HomeAssistant } from "../../../../types"; +import { ShoppingListCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; const cardConfigStruct = struct({ type: "string", diff --git a/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts index 44ff449cfd..ffc36e9247 100644 --- a/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-stack-card-editor.ts @@ -1,24 +1,23 @@ +import "@polymer/paper-tabs"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - CSSResult, - css, query, + TemplateResult, } from "lit-element"; -import "@polymer/paper-tabs"; - -import { struct } from "../../common/structs/struct"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; -import { StackCardConfig } from "../../cards/types"; import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; import { LovelaceConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { StackCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import { LovelaceCardEditor } from "../../types"; import { - HuiCardEditor, ConfigChangedEvent, + HuiCardEditor, } from "../card-editor/hui-card-editor"; import { GUIModeChangedEvent } from "../types"; @@ -32,11 +31,17 @@ const cardConfigStruct = struct({ export class HuiStackCardEditor extends LitElement implements LovelaceCardEditor { @property() public hass?: HomeAssistant; + @property() public lovelace?: LovelaceConfig; + @property() private _config?: StackCardConfig; - @property() private _selectedCard: number = 0; + + @property() private _selectedCard = 0; + @property() private _GUImode = true; + @property() private _guiModeAvailable? = true; + @query("hui-card-editor") private _cardEditorEl?: HuiCardEditor; public setConfig(config: StackCardConfig): void { diff --git a/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts index f767d5429b..ba4116614f 100644 --- a/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-thermostat-card-editor.ts @@ -1,22 +1,20 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-theme-select-editor"; -import "../../../../components/entity/ha-entity-picker"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; +import "../../../../components/entity/ha-entity-picker"; +import { HomeAssistant } from "../../../../types"; import { ThermostatCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -66,7 +64,7 @@ export class HuiThermostatCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["climate"]' + .include-domains=${["climate"]} @change="${this._valueChanged}" allow-custom-entity > diff --git a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts index 0c89045edd..2bf907a919 100644 --- a/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts +++ b/src/panels/lovelace/editor/config-elements/hui-weather-forecast-card-editor.ts @@ -1,21 +1,19 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; - -import "../../../../components/entity/ha-entity-picker"; -import "../../components/hui-theme-select-editor"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceCardEditor } from "../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "./config-elements-style"; +import "../../../../components/entity/ha-entity-picker"; +import { HomeAssistant } from "../../../../types"; import { WeatherForecastCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; +import { LovelaceCardEditor } from "../../types"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; +import { configElementStyle } from "./config-elements-style"; const cardConfigStruct = struct({ type: "string", @@ -65,7 +63,7 @@ export class HuiWeatherForecastCardEditor extends LitElement .hass=${this.hass} .value="${this._entity}" .configValue=${"entity"} - include-domains='["weather"]' + .include-domains=${["weather"]} @change="${this._valueChanged}" allow-custom-entity > diff --git a/src/panels/lovelace/editor/config-util.ts b/src/panels/lovelace/editor/config-util.ts index 34679b0ab7..2bae8eaf49 100644 --- a/src/panels/lovelace/editor/config-util.ts +++ b/src/panels/lovelace/editor/config-util.ts @@ -1,6 +1,6 @@ import { - LovelaceConfig, LovelaceCardConfig, + LovelaceConfig, LovelaceViewConfig, } from "../../../data/lovelace"; diff --git a/src/panels/lovelace/editor/delete-card.ts b/src/panels/lovelace/editor/delete-card.ts index 10ea035d15..ebbd6a71bf 100644 --- a/src/panels/lovelace/editor/delete-card.ts +++ b/src/panels/lovelace/editor/delete-card.ts @@ -1,9 +1,9 @@ -import { Lovelace } from "../types"; -import { deleteCard, insertCard } from "./config-util"; import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { HomeAssistant } from "../../../types"; -import { showDeleteCardDialog } from "./card-editor/show-delete-card-dialog"; import { showDeleteSuccessToast } from "../../../util/toast-deleted-success"; +import { Lovelace } from "../types"; +import { showDeleteCardDialog } from "./card-editor/show-delete-card-dialog"; +import { deleteCard, insertCard } from "./config-util"; export async function confDeleteCard( element: HTMLElement, diff --git a/src/panels/lovelace/editor/get-card-stub-config.ts b/src/panels/lovelace/editor/get-card-stub-config.ts index fce349e1f4..a6352787e4 100644 --- a/src/panels/lovelace/editor/get-card-stub-config.ts +++ b/src/panels/lovelace/editor/get-card-stub-config.ts @@ -1,5 +1,5 @@ -import { HomeAssistant } from "../../../types"; import { LovelaceCardConfig } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; import { getCardElementClass } from "../create-element/create-card-element"; export const getCardStubConfig = async ( diff --git a/src/panels/lovelace/editor/hui-badge-preview.ts b/src/panels/lovelace/editor/hui-badge-preview.ts index b8d0dc728d..055ba85cd4 100644 --- a/src/panels/lovelace/editor/hui-badge-preview.ts +++ b/src/panels/lovelace/editor/hui-badge-preview.ts @@ -1,16 +1,17 @@ -import { HomeAssistant } from "../../../types"; -import { LovelaceBadgeConfig } from "../../../data/lovelace"; -import { ConfigError } from "./types"; import { computeRTL } from "../../../common/util/compute_rtl"; -import { LovelaceBadge } from "../types"; -import { createBadgeElement } from "../create-element/create-badge-element"; -import { createErrorBadgeConfig } from "../badges/hui-error-badge"; - import "../../../components/entity/ha-state-label-badge"; +import { LovelaceBadgeConfig } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { createErrorBadgeConfig } from "../badges/hui-error-badge"; +import { createBadgeElement } from "../create-element/create-badge-element"; +import { LovelaceBadge } from "../types"; +import { ConfigError } from "./types"; export class HuiBadgePreview extends HTMLElement { private _hass?: HomeAssistant; + private _element?: LovelaceBadge; + private _config?: LovelaceBadgeConfig; private get _error() { diff --git a/src/panels/lovelace/editor/hui-dialog-save-config.ts b/src/panels/lovelace/editor/hui-dialog-save-config.ts index b092a0ee44..30f60d2a04 100644 --- a/src/panels/lovelace/editor/hui-dialog-save-config.ts +++ b/src/panels/lovelace/editor/hui-dialog-save-config.ts @@ -1,26 +1,24 @@ +import "@material/mwc-button"; +import "@polymer/paper-spinner/paper-spinner"; import { - html, css, - LitElement, - TemplateResult, CSSResult, customElement, + html, + LitElement, property, query, + TemplateResult, } from "lit-element"; -import "@polymer/paper-spinner/paper-spinner"; +import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; import "../../../components/ha-switch"; import "../../../components/ha-yaml-editor"; -// tslint:disable-next-line:no-duplicate-imports -import { HaPaperDialog } from "../../../components/dialog/ha-paper-dialog"; -import "@material/mwc-button"; - +import type { PolymerChangedEvent } from "../../../polymer-types"; import { haStyleDialog } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; -import { SaveDialogParams } from "./show-save-config-dialog"; -import { PolymerChangedEvent } from "../../../polymer-types"; -import { fireEvent } from "../../../common/dom/fire_event"; +import type { HomeAssistant } from "../../../types"; +import type { SaveDialogParams } from "./show-save-config-dialog"; const EMPTY_CONFIG = { views: [] }; @@ -29,9 +27,11 @@ export class HuiSaveConfig extends LitElement { @property() public hass?: HomeAssistant; @property() private _params?: SaveDialogParams; + @property() private _emptyConfig = false; @property() private _saving: boolean; + @query("ha-paper-dialog") private _dialog?: HaPaperDialog; public constructor() { diff --git a/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts b/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts index 8fe4a68a42..c0d4b0dedc 100644 --- a/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts +++ b/src/panels/lovelace/editor/lovelace-editor/hui-dialog-edit-lovelace.ts @@ -1,25 +1,22 @@ -import { - html, - css, - LitElement, - TemplateResult, - CSSResult, - customElement, - property, -} from "lit-element"; -import "@polymer/paper-spinner/paper-spinner"; -import "../../../../components/dialog/ha-paper-dialog"; -// tslint:disable-next-line:no-duplicate-imports -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; - +import "@polymer/paper-spinner/paper-spinner"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import "../../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import type { LovelaceConfig } from "../../../../data/lovelace"; import { haStyleDialog } from "../../../../resources/styles"; - +import type { HomeAssistant } from "../../../../types"; +import type { Lovelace } from "../../types"; import "./hui-lovelace-editor"; -import { HomeAssistant } from "../../../../types"; -import { LovelaceConfig } from "../../../../data/lovelace"; -import { Lovelace } from "../../types"; @customElement("hui-dialog-edit-lovelace") export class HuiDialogEditLovelace extends LitElement { diff --git a/src/panels/lovelace/editor/lovelace-editor/hui-lovelace-editor.ts b/src/panels/lovelace/editor/lovelace-editor/hui-lovelace-editor.ts index fb0e945d41..1163f71680 100644 --- a/src/panels/lovelace/editor/lovelace-editor/hui-lovelace-editor.ts +++ b/src/panels/lovelace/editor/lovelace-editor/hui-lovelace-editor.ts @@ -1,18 +1,16 @@ +import "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import { EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "../config-elements/config-elements-style"; - import { LovelaceConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import { configElementStyle } from "../config-elements/config-elements-style"; +import { EditorTarget } from "../types"; declare global { interface HASSDomEvents { diff --git a/src/panels/lovelace/editor/select-view/hui-dialog-select-view.ts b/src/panels/lovelace/editor/select-view/hui-dialog-select-view.ts index ed7cefdc42..9aae8ec878 100644 --- a/src/panels/lovelace/editor/select-view/hui-dialog-select-view.ts +++ b/src/panels/lovelace/editor/select-view/hui-dialog-select-view.ts @@ -1,20 +1,16 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; - -import "../../../../components/dialog/ha-paper-dialog"; import { toggleAttribute } from "../../../../common/dom/toggle_attribute"; +import "../../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import type { PolymerChangedEvent } from "../../../../polymer-types"; import "../../components/hui-views-list"; - -// tslint:disable-next-line:no-duplicate-imports -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; - -import { SelectViewDialogParams } from "./show-select-view-dialog"; -import { PolymerChangedEvent } from "../../../../polymer-types"; +import type { SelectViewDialogParams } from "./show-select-view-dialog"; @customElement("hui-dialog-select-view") export class HuiDialogSelectView extends LitElement { diff --git a/src/panels/lovelace/editor/types.ts b/src/panels/lovelace/editor/types.ts index 7dda045726..b9a79c53f1 100644 --- a/src/panels/lovelace/editor/types.ts +++ b/src/panels/lovelace/editor/types.ts @@ -1,12 +1,11 @@ import { + ActionConfig, LovelaceCardConfig, LovelaceViewConfig, - ActionConfig, ShowViewConfig, } from "../../../data/lovelace"; -import { EntityConfig } from "../entity-rows/types"; -import { InputType } from "zlib"; import { struct } from "../common/structs/struct"; +import { EntityConfig } from "../entity-rows/types"; export interface YamlChangedEvent extends Event { detail: { @@ -51,7 +50,7 @@ export interface EditorTarget extends EventTarget { index?: number; checked?: boolean; configValue?: string; - type?: InputType; + type?: HTMLInputElement["type"]; config: ActionConfig; } diff --git a/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts b/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts index 5e3211039f..2c17ab3ea0 100644 --- a/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts +++ b/src/panels/lovelace/editor/unused-entities/hui-unused-entities.ts @@ -1,40 +1,32 @@ import { - html, - LitElement, - TemplateResult, - PropertyValues, - property, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, } from "lit-element"; - import { classMap } from "lit-html/directives/class-map"; - import memoizeOne from "memoize-one"; - -import "../../../../components/ha-fab"; -import "../../../../components/entity/state-badge"; -import "../../../../components/ha-relative-time"; -import "../../../../components/ha-icon"; - -import "../../../../components/data-table/ha-data-table"; -// tslint:disable-next-line -import { - SelectionChangedEvent, - DataTableColumnContainer, -} from "../../../../components/data-table/ha-data-table"; - -import { computeStateName } from "../../../../common/entity/compute_state_name"; -import { computeDomain } from "../../../../common/entity/compute_domain"; - -import { computeRTL } from "../../../../common/util/compute_rtl"; -import { computeUnusedEntities } from "../../common/compute-unused-entities"; - -import { HomeAssistant } from "../../../../types"; -import { Lovelace } from "../../types"; -import { LovelaceConfig } from "../../../../data/lovelace"; import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; +import { computeDomain } from "../../../../common/entity/compute_domain"; +import { computeStateName } from "../../../../common/entity/compute_state_name"; +import { computeRTL } from "../../../../common/util/compute_rtl"; +import "../../../../components/data-table/ha-data-table"; +import type { + DataTableColumnContainer, + SelectionChangedEvent, +} from "../../../../components/data-table/ha-data-table"; +import "../../../../components/entity/state-badge"; +import "../../../../components/ha-fab"; +import "../../../../components/ha-icon"; +import "../../../../components/ha-relative-time"; +import type { LovelaceConfig } from "../../../../data/lovelace"; +import type { HomeAssistant } from "../../../../types"; +import { computeUnusedEntities } from "../../common/compute-unused-entities"; +import type { Lovelace } from "../../types"; import { addEntitiesToLovelaceView } from "../add-entities-to-view"; @customElement("hui-unused-entities") diff --git a/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts b/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts index 44ae74d34b..b8616528af 100644 --- a/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts +++ b/src/panels/lovelace/editor/view-editor/hui-dialog-edit-view.ts @@ -1,13 +1,12 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; - -import { HomeAssistant } from "../../../../types"; import { HASSDomEvent } from "../../../../common/dom/fire_event"; +import { HomeAssistant } from "../../../../types"; import "./hui-edit-view"; import { EditViewDialogParams } from "./show-edit-view-dialog"; diff --git a/src/panels/lovelace/editor/view-editor/hui-edit-view.ts b/src/panels/lovelace/editor/view-editor/hui-edit-view.ts index 041bbf3f9d..3dbf9d8176 100644 --- a/src/panels/lovelace/editor/view-editor/hui-edit-view.ts +++ b/src/panels/lovelace/editor/view-editor/hui-edit-view.ts @@ -1,49 +1,45 @@ -import { - html, - css, - LitElement, - TemplateResult, - CSSResult, - customElement, - property, -} from "lit-element"; - +import "@material/mwc-button"; +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-spinner/paper-spinner"; import "@polymer/paper-tabs/paper-tab"; import "@polymer/paper-tabs/paper-tabs"; -import "@polymer/paper-icon-button/paper-icon-button.js"; -import "../../../../components/dialog/ha-paper-dialog"; -// tslint:disable-next-line:no-duplicate-imports -import { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; -import "@material/mwc-button"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; - -import { haStyleDialog } from "../../../../resources/styles"; - -import "../../components/hui-entity-editor"; -import "./hui-view-editor"; -import "./hui-view-visibility-editor"; -import "../hui-badge-preview"; -import { HomeAssistant } from "../../../../types"; import { - LovelaceViewConfig, - LovelaceCardConfig, - LovelaceBadgeConfig, -} from "../../../../data/lovelace"; + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; +import { navigate } from "../../../../common/navigate"; +import "../../../../components/dialog/ha-paper-dialog"; +import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import type { + LovelaceBadgeConfig, + LovelaceCardConfig, + LovelaceViewConfig, +} from "../../../../data/lovelace"; +import { + showAlertDialog, + showConfirmationDialog, +} from "../../../../dialogs/generic/show-dialog-box"; +import { haStyleDialog } from "../../../../resources/styles"; +import type { HomeAssistant } from "../../../../types"; +import "../../components/hui-entity-editor"; +import type { Lovelace } from "../../types"; +import { addView, deleteView, replaceView } from "../config-util"; +import "../hui-badge-preview"; +import { processEditorEntities } from "../process-editor-entities"; import { EntitiesEditorEvent, ViewEditEvent, ViewVisibilityChangeEvent, } from "../types"; -import { processEditorEntities } from "../process-editor-entities"; -import { navigate } from "../../../../common/navigate"; -import { Lovelace } from "../../types"; -import { deleteView, addView, replaceView } from "../config-util"; -import { - showAlertDialog, - showConfirmationDialog, -} from "../../../../dialogs/generic/show-dialog-box"; +import "./hui-view-editor"; +import "./hui-view-visibility-editor"; @customElement("hui-edit-view") export class HuiEditView extends LitElement { @@ -155,9 +151,7 @@ export class HuiEditView extends LitElement { `; break; case "tab-cards": - content = html` - Cards - `; + content = html` Cards `; break; } return html` diff --git a/src/panels/lovelace/editor/view-editor/hui-view-editor.ts b/src/panels/lovelace/editor/view-editor/hui-view-editor.ts index baeb0aa393..77e66babe7 100644 --- a/src/panels/lovelace/editor/view-editor/hui-view-editor.ts +++ b/src/panels/lovelace/editor/view-editor/hui-view-editor.ts @@ -1,23 +1,21 @@ +import "@polymer/paper-input/paper-input"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - CSSResult, - css, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import { EditorTarget } from "../types"; -import { HomeAssistant } from "../../../../types"; import { fireEvent } from "../../../../common/dom/fire_event"; -import { configElementStyle } from "../config-elements/config-elements-style"; -import { LovelaceViewConfig } from "../../../../data/lovelace"; import { slugify } from "../../../../common/string/slugify"; - -import "../../components/hui-theme-select-editor"; import "../../../../components/ha-switch"; +import { LovelaceViewConfig } from "../../../../data/lovelace"; +import { HomeAssistant } from "../../../../types"; +import "../../components/hui-theme-select-editor"; +import { configElementStyle } from "../config-elements/config-elements-style"; +import { EditorTarget } from "../types"; declare global { interface HASSDomEvents { @@ -30,8 +28,11 @@ declare global { @customElement("hui-view-editor") export class HuiViewEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public isNew!: boolean; + @property() private _config!: LovelaceViewConfig; + private _suggestedPath = false; get _path(): string { diff --git a/src/panels/lovelace/editor/view-editor/hui-view-visibility-editor.ts b/src/panels/lovelace/editor/view-editor/hui-view-visibility-editor.ts index b13c01cab9..361a28ba73 100644 --- a/src/panels/lovelace/editor/view-editor/hui-view-visibility-editor.ts +++ b/src/panels/lovelace/editor/view-editor/hui-view-visibility-editor.ts @@ -1,24 +1,22 @@ -import { - html, - LitElement, - TemplateResult, - customElement, - property, - PropertyValues, - CSSResult, - css, -} from "lit-element"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item-body"; - -import { HomeAssistant } from "../../../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; -import { LovelaceViewConfig, ShowViewConfig } from "../../../../data/lovelace"; - -import { fetchUsers, User } from "../../../../data/user"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; import memoizeOne from "memoize-one"; +import { fireEvent } from "../../../../common/dom/fire_event"; import { compare } from "../../../../common/string/compare"; import { HaSwitch } from "../../../../components/ha-switch"; +import { LovelaceViewConfig, ShowViewConfig } from "../../../../data/lovelace"; +import { fetchUsers, User } from "../../../../data/user"; +import { HomeAssistant } from "../../../../types"; declare global { interface HASSDomEvents { @@ -37,8 +35,11 @@ export class HuiViewVisibilityEditor extends LitElement { } @property() public hass!: HomeAssistant; + @property() public _config!: LovelaceViewConfig; + @property() private _users!: User[]; + @property() private _visible!: boolean | ShowViewConfig[]; private _sortedUsers = memoizeOne((users: User[]) => { diff --git a/src/panels/lovelace/editor/view-editor/show-edit-view-dialog.ts b/src/panels/lovelace/editor/view-editor/show-edit-view-dialog.ts index f2700da45e..c752aa3eb2 100644 --- a/src/panels/lovelace/editor/view-editor/show-edit-view-dialog.ts +++ b/src/panels/lovelace/editor/view-editor/show-edit-view-dialog.ts @@ -1,4 +1,4 @@ -import { HASSDomEvent, fireEvent } from "../../../../common/dom/fire_event"; +import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; import { Lovelace } from "../../types"; declare global { diff --git a/src/panels/lovelace/elements/hui-conditional-element.ts b/src/panels/lovelace/elements/hui-conditional-element.ts index 648c15af40..661098f4d4 100644 --- a/src/panels/lovelace/elements/hui-conditional-element.ts +++ b/src/panels/lovelace/elements/hui-conditional-element.ts @@ -1,18 +1,20 @@ +import { HomeAssistant } from "../../../types"; +import { createStyledHuiElement } from "../cards/picture-elements/create-styled-hui-element"; import { checkConditionsMet, validateConditionalConfig, -} from "../../lovelace/common/validate-condition"; -import { createStyledHuiElement } from "../cards/picture-elements/create-styled-hui-element"; +} from "../common/validate-condition"; import { + ConditionalElementConfig, LovelaceElement, LovelaceElementConfig, - ConditionalElementConfig, } from "./types"; -import { HomeAssistant } from "../../../types"; class HuiConditionalElement extends HTMLElement implements LovelaceElement { public _hass?: HomeAssistant; + private _config?: ConditionalElementConfig; + private _elements: LovelaceElement[] = []; public setConfig(config: ConditionalElementConfig): void { @@ -27,7 +29,7 @@ class HuiConditionalElement extends HTMLElement implements LovelaceElement { } if (this._elements.length > 0) { - this._elements.map((el: LovelaceElement) => { + this._elements.forEach((el: LovelaceElement) => { if (el.parentElement) { el.parentElement.removeChild(el); } @@ -38,7 +40,7 @@ class HuiConditionalElement extends HTMLElement implements LovelaceElement { this._config = config; - this._config.elements.map((elementConfig: LovelaceElementConfig) => { + this._config.elements.forEach((elementConfig: LovelaceElementConfig) => { this._elements.push(createStyledHuiElement(elementConfig)); }); @@ -58,7 +60,7 @@ class HuiConditionalElement extends HTMLElement implements LovelaceElement { const visible = checkConditionsMet(this._config.conditions, this._hass); - this._elements.map((el: LovelaceElement) => { + this._elements.forEach((el: LovelaceElement) => { if (visible) { el.hass = this._hass; if (!el.parentElement) { diff --git a/src/panels/lovelace/elements/hui-icon-element.ts b/src/panels/lovelace/elements/hui-icon-element.ts index 17310b4c2e..5acfffce73 100644 --- a/src/panels/lovelace/elements/hui-icon-element.ts +++ b/src/panels/lovelace/elements/hui-icon-element.ts @@ -1,27 +1,26 @@ import { - html, - LitElement, - TemplateResult, - property, css, CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; - import "../../../components/ha-icon"; - -import { computeTooltip } from "../common/compute-tooltip"; -import { LovelaceElement, IconElementConfig } from "./types"; -import { HomeAssistant } from "../../../types"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { computeTooltip } from "../common/compute-tooltip"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { IconElementConfig, LovelaceElement } from "./types"; @customElement("hui-icon-element") export class HuiIconElement extends LitElement implements LovelaceElement { public hass?: HomeAssistant; + @property() private _config?: IconElementConfig; public setConfig(config: IconElementConfig): void { diff --git a/src/panels/lovelace/elements/hui-image-element.ts b/src/panels/lovelace/elements/hui-image-element.ts index 07279d200c..9192007704 100644 --- a/src/panels/lovelace/elements/hui-image-element.ts +++ b/src/panels/lovelace/elements/hui-image-element.ts @@ -1,27 +1,26 @@ import { - html, - LitElement, - TemplateResult, - property, - customElement, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; - -import "../components/hui-image"; - -import { computeTooltip } from "../common/compute-tooltip"; -import { LovelaceElement, ImageElementConfig } from "./types"; -import { HomeAssistant } from "../../../types"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { computeTooltip } from "../common/compute-tooltip"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import "../components/hui-image"; +import { ImageElementConfig, LovelaceElement } from "./types"; @customElement("hui-image-element") export class HuiImageElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; + @property() private _config?: ImageElementConfig; public setConfig(config: ImageElementConfig): void { @@ -29,6 +28,7 @@ export class HuiImageElement extends LitElement implements LovelaceElement { throw Error("Error in element configuration"); } + // eslint-disable-next-line wc/no-self-class this.classList.toggle( "clickable", config.tap_action && config.tap_action.action !== "none" diff --git a/src/panels/lovelace/elements/hui-service-button-element.ts b/src/panels/lovelace/elements/hui-service-button-element.ts index 5558a7b0c6..b6acdcb407 100644 --- a/src/panels/lovelace/elements/hui-service-button-element.ts +++ b/src/panels/lovelace/elements/hui-service-button-element.ts @@ -1,24 +1,25 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - customElement, - CSSResult, - css, + TemplateResult, } from "lit-element"; - import "../../../components/buttons/ha-call-service-button"; - -import { LovelaceElement, ServiceButtonElementConfig } from "./types"; import { HomeAssistant } from "../../../types"; +import { LovelaceElement, ServiceButtonElementConfig } from "./types"; @customElement("hui-service-button-element") export class HuiServiceButtonElement extends LitElement implements LovelaceElement { public hass?: HomeAssistant; + @property() private _config?: ServiceButtonElementConfig; + private _domain?: string; + private _service?: string; static get properties() { diff --git a/src/panels/lovelace/elements/hui-state-badge-element.ts b/src/panels/lovelace/elements/hui-state-badge-element.ts index 2f9d24a219..a07334619c 100644 --- a/src/panels/lovelace/elements/hui-state-badge-element.ts +++ b/src/panels/lovelace/elements/hui-state-badge-element.ts @@ -1,29 +1,28 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, PropertyValues, + TemplateResult, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; - -import "../../../components/entity/ha-state-label-badge"; -import "../components/hui-warning-element"; - import { computeStateName } from "../../../common/entity/compute_state_name"; -import { LovelaceElement, StateBadgeElementConfig } from "./types"; -import { HomeAssistant } from "../../../types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; +import "../../../components/entity/ha-state-label-badge"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-warning-element"; +import { LovelaceElement, StateBadgeElementConfig } from "./types"; @customElement("hui-state-badge-element") export class HuiStateBadgeElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; + @property() private _config?: StateBadgeElementConfig; public setConfig(config: StateBadgeElementConfig): void { diff --git a/src/panels/lovelace/elements/hui-state-icon-element.ts b/src/panels/lovelace/elements/hui-state-icon-element.ts index e2d2e3084f..73497579e8 100644 --- a/src/panels/lovelace/elements/hui-state-icon-element.ts +++ b/src/panels/lovelace/elements/hui-state-icon-element.ts @@ -1,30 +1,29 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; - import "../../../components/entity/state-badge"; -import "../components/hui-warning-element"; - -import { computeTooltip } from "../common/compute-tooltip"; -import { LovelaceElement, StateIconElementConfig } from "./types"; -import { HomeAssistant } from "../../../types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { computeTooltip } from "../common/compute-tooltip"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-warning-element"; +import { LovelaceElement, StateIconElementConfig } from "./types"; @customElement("hui-state-icon-element") export class HuiStateIconElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; + @property() private _config?: StateIconElementConfig; public setConfig(config: StateIconElementConfig): void { diff --git a/src/panels/lovelace/elements/hui-state-label-element.ts b/src/panels/lovelace/elements/hui-state-label-element.ts index 93aa196d33..a43cc7f9ff 100644 --- a/src/panels/lovelace/elements/hui-state-label-element.ts +++ b/src/panels/lovelace/elements/hui-state-label-element.ts @@ -1,30 +1,29 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; import { ifDefined } from "lit-html/directives/if-defined"; - -import "../components/hui-warning-element"; - import { computeStateDisplay } from "../../../common/entity/compute_state_display"; -import { computeTooltip } from "../common/compute-tooltip"; -import { LovelaceElement, StateLabelElementConfig } from "./types"; -import { HomeAssistant } from "../../../types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { computeTooltip } from "../common/compute-tooltip"; +import { actionHandler } from "../common/directives/action-handler-directive"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-warning-element"; +import { LovelaceElement, StateLabelElementConfig } from "./types"; @customElement("hui-state-label-element") class HuiStateLabelElement extends LitElement implements LovelaceElement { @property() public hass?: HomeAssistant; + @property() private _config?: StateLabelElementConfig; public setConfig(config: StateLabelElementConfig): void { diff --git a/src/panels/lovelace/elements/types.ts b/src/panels/lovelace/elements/types.ts index f12137d58f..46374b34c2 100644 --- a/src/panels/lovelace/elements/types.ts +++ b/src/panels/lovelace/elements/types.ts @@ -1,6 +1,6 @@ +import { ActionConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; import { Condition } from "../common/validate-condition"; -import { ActionConfig } from "../../../data/lovelace"; interface LovelaceElementConfigBase { type: string; diff --git a/src/panels/lovelace/entity-rows/hui-climate-entity-row.ts b/src/panels/lovelace/entity-rows/hui-climate-entity-row.ts index 9d8b04c1b3..4c36a5723f 100644 --- a/src/panels/lovelace/entity-rows/hui-climate-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-climate-entity-row.ts @@ -1,21 +1,19 @@ import { - html, - LitElement, - TemplateResult, - property, css, CSSResult, customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; - import "../../../components/ha-climate-state"; +import { HomeAssistant } from "../../../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-climate-entity-row") class HuiClimateEntityRow extends LitElement implements LovelaceRow { diff --git a/src/panels/lovelace/entity-rows/hui-cover-entity-row.ts b/src/panels/lovelace/entity-rows/hui-cover-entity-row.ts index dbd67cb5b2..ee48aa9f10 100644 --- a/src/panels/lovelace/entity-rows/hui-cover-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-cover-entity-row.ts @@ -1,23 +1,21 @@ import { - html, - LitElement, - TemplateResult, - property, css, CSSResult, customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; import "../../../components/ha-cover-controls"; import "../../../components/ha-cover-tilt-controls"; -import "../components/hui-warning"; - -import { isTiltOnly } from "../../../util/cover-model"; import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; +import { isTiltOnly } from "../../../util/cover-model"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-cover-entity-row") class HuiCoverEntityRow extends LitElement implements LovelaceRow { diff --git a/src/panels/lovelace/entity-rows/hui-group-entity-row.ts b/src/panels/lovelace/entity-rows/hui-group-entity-row.ts index f60e6a966d..d34420252b 100644 --- a/src/panels/lovelace/entity-rows/hui-group-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-group-entity-row.ts @@ -1,21 +1,19 @@ import { + customElement, html, LitElement, - TemplateResult, property, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; -import "../../../components/entity/ha-entity-toggle"; -import "../components/hui-warning"; - -import { computeStateDisplay } from "../../../common/entity/compute_state_display"; import { DOMAINS_TOGGLE } from "../../../common/const"; +import { computeStateDisplay } from "../../../common/entity/compute_state_display"; +import "../../../components/entity/ha-entity-toggle"; import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-group-entity-row") class HuiGroupEntityRow extends LitElement implements LovelaceRow { diff --git a/src/panels/lovelace/entity-rows/hui-input-datetime-entity-row.ts b/src/panels/lovelace/entity-rows/hui-input-datetime-entity-row.ts index 7afbc34dd6..c19ca31356 100644 --- a/src/panels/lovelace/entity-rows/hui-input-datetime-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-input-datetime-entity-row.ts @@ -1,28 +1,26 @@ import { + customElement, html, LitElement, - TemplateResult, property, PropertyValues, - customElement, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; -import "../../../components/paper-time-input.js"; -// tslint:disable-next-line:no-duplicate-imports -import { PaperTimeInput } from "../../../components/paper-time-input.js"; import "../../../components/ha-date-input"; -// tslint:disable-next-line:no-duplicate-imports -import { HaDateInput } from "../../../components/ha-date-input"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; +import type { HaDateInput } from "../../../components/ha-date-input"; +import "../../../components/paper-time-input"; +import type { PaperTimeInput } from "../../../components/paper-time-input"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; import { setInputDateTimeValue } from "../../../data/input_datetime"; +import type { HomeAssistant } from "../../../types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import type { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-input-datetime-entity-row") class HuiInputDatetimeEntityRow extends LitElement implements LovelaceRow { @property() public hass?: HomeAssistant; + @property() private _config?: EntityConfig; public setConfig(config: EntityConfig): void { @@ -60,6 +58,7 @@ class HuiInputDatetimeEntityRow extends LitElement implements LovelaceRow { ${stateObj.attributes.has_date ? html` - ` - : ""} ${stateObj.attributes.options ? stateObj.attributes.options.map( - (option) => html` - ${option} - ` + (option) => html` ${option} ` ) : ""} @@ -149,10 +136,6 @@ class HuiInputSelectEntityRow extends LitElement implements LovelaceRow { handleAction(this, this.hass!, this._config!, ev.detail.action!); } - private _showMoreInfo() { - fireEvent(this, "hass-more-info", { entityId: this._config!.entity }); - } - static get styles(): CSSResult { return css` :host { @@ -175,9 +158,6 @@ class HuiInputSelectEntityRow extends LitElement implements LovelaceRow { background: var(--divider-color); border-radius: 100%; } - hui-unavailable { - cursor: pointer; - } `; } diff --git a/src/panels/lovelace/entity-rows/hui-input-text-entity-row.ts b/src/panels/lovelace/entity-rows/hui-input-text-entity-row.ts index e8fa7eb863..d2fcf6a71e 100644 --- a/src/panels/lovelace/entity-rows/hui-input-text-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-input-text-entity-row.ts @@ -1,20 +1,19 @@ +import { PaperInputElement } from "@polymer/paper-input/paper-input"; import { + customElement, html, LitElement, - TemplateResult, property, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; -import { PaperInputElement } from "@polymer/paper-input/paper-input"; - +import { UNAVAILABLE_STATES } from "../../../data/entity"; +import { setValue } from "../../../data/input_text"; +import { HomeAssistant } from "../../../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; -import { setValue } from "../../../data/input_text"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-input-text-entity-row") class HuiInputTextEntityRow extends LitElement implements LovelaceRow { @@ -56,6 +55,7 @@ class HuiInputTextEntityRow extends LitElement implements LovelaceRow { - + ${stateObj.state === "locked" ? this.hass!.localize("ui.card.lock.unlock") : this.hass!.localize("ui.card.lock.lock")} diff --git a/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts b/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts index e0b3180095..6dd073cf07 100644 --- a/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-media-player-entity-row.ts @@ -1,46 +1,49 @@ +import "@polymer/paper-icon-button/paper-icon-button"; +import { HassEntity } from "home-assistant-js-websocket"; import { - html, - LitElement, - TemplateResult, css, CSSResult, - property, customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; -import "@polymer/paper-icon-button/paper-icon-button"; - -import "../components/hui-generic-entity-row"; -import "../components/hui-warning"; -import "../../../components/ha-slider"; - -import { LovelaceRow, EntityConfig } from "./types"; -import { HomeAssistant } from "../../../types"; -import { HassEntity } from "home-assistant-js-websocket"; import { supportsFeature } from "../../../common/entity/supports-feature"; +import { computeRTLDirection } from "../../../common/util/compute_rtl"; +import { debounce } from "../../../common/util/debounce"; +import "../../../components/ha-slider"; +import { UNAVAILABLE, UNKNOWN } from "../../../data/entity"; import { SUPPORTS_PLAY, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, - SUPPORT_TURN_ON, - SUPPORT_TURN_OFF, SUPPORT_PREVIOUS_TRACK, - SUPPORT_VOLUME_SET, - SUPPORT_VOLUME_MUTE, + SUPPORT_TURN_OFF, + SUPPORT_TURN_ON, SUPPORT_VOLUME_BUTTONS, + SUPPORT_VOLUME_MUTE, + SUPPORT_VOLUME_SET, } from "../../../data/media-player"; +import { HomeAssistant } from "../../../types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { computeRTLDirection } from "../../../common/util/compute_rtl"; -import { debounce } from "../../../common/util/debounce"; -import { UNAVAILABLE, UNKNOWN } from "../../../data/entity"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-media-player-entity-row") class HuiMediaPlayerEntityRow extends LitElement implements LovelaceRow { @property() public hass?: HomeAssistant; + @property() private _config?: EntityConfig; + @property() private _narrow?: boolean = false; + @property() private _veryNarrow?: boolean = false; + private _resizeObserver?: ResizeObserver; + private _debouncedResizeListener = debounce( () => { this._narrow = (this.clientWidth || 0) < 300; @@ -226,7 +229,7 @@ class HuiMediaPlayerEntityRow extends LitElement implements LovelaceRow { return "hass:play"; } - // tslint:disable-next-line:no-bitwise + // eslint-disable-next-line:no-bitwise return supportsFeature(stateObj, SUPPORT_PAUSE) ? "hass:pause" : "hass:stop"; diff --git a/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts b/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts index 7e096fbc88..15b0f77798 100644 --- a/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-scene-entity-row.ts @@ -1,22 +1,21 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - CSSResult, - css, property, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; import "../../../components/entity/ha-entity-toggle"; -import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, ActionRowConfig } from "./types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; import { activateScene } from "../../../data/scene"; +import { HomeAssistant } from "../../../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { ActionRowConfig, LovelaceRow } from "./types"; @customElement("hui-scene-entity-row") class HuiSceneEntityRow extends LitElement implements LovelaceRow { @@ -56,9 +55,13 @@ class HuiSceneEntityRow extends LitElement implements LovelaceRow { return html` - + ${this._config.action_name || - this.hass!.localize("ui.card.scene.activate")} + this.hass!.localize("ui.card.scene.activate")} `; diff --git a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts index bc0dd5b468..35413531b0 100644 --- a/src/panels/lovelace/entity-rows/hui-script-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-script-entity-row.ts @@ -1,21 +1,20 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - CSSResult, - css, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; import "../../../components/entity/ha-entity-toggle"; -import "../components/hui-warning"; - +import { UNAVAILABLE_STATES } from "../../../data/entity"; import { HomeAssistant } from "../../../types"; -import { LovelaceRow, ActionRowConfig } from "./types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { ActionRowConfig, LovelaceRow } from "./types"; @customElement("hui-script-entity-row") class HuiScriptEntityRow extends LitElement implements LovelaceRow { @@ -58,14 +57,19 @@ class HuiScriptEntityRow extends LitElement implements LovelaceRow { ${stateObj.attributes.can_cancel ? html` ` : html` - + ${this._config.action_name || - this.hass!.localize("ui.card.script.execute")} + this.hass!.localize("ui.card.script.execute")} `} diff --git a/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts b/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts index f3f4e6da7e..a842909823 100644 --- a/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-sensor-entity-row.ts @@ -1,23 +1,21 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - CSSResult, - css, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - +import { computeStateDisplay } from "../../../common/entity/compute_state_display"; +import { SENSOR_DEVICE_CLASS_TIMESTAMP } from "../../../data/sensor"; +import { HomeAssistant } from "../../../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import "../components/hui-timestamp-display"; import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { computeStateDisplay } from "../../../common/entity/compute_state_display"; -import { SENSOR_DEVICE_CLASS_TIMESTAMP } from "../../../data/sensor"; +import { EntityConfig, LovelaceRow } from "./types"; interface SensorEntityConfig extends EntityConfig { format?: "relative" | "date" | "time" | "datetime"; diff --git a/src/panels/lovelace/entity-rows/hui-text-entity-row.ts b/src/panels/lovelace/entity-rows/hui-text-entity-row.ts index 45ccce5afb..4851f831f2 100644 --- a/src/panels/lovelace/entity-rows/hui-text-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-text-entity-row.ts @@ -1,21 +1,19 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - CSSResult, - css, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; -import "../components/hui-warning"; - import { computeStateDisplay } from "../../../common/entity/compute_state_display"; import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-text-entity-row") class HuiTextEntityRow extends LitElement implements LovelaceRow { diff --git a/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts b/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts index 4e5bcb71bb..c2b167119b 100644 --- a/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-timer-entity-row.ts @@ -1,22 +1,19 @@ +import { HassEntity } from "home-assistant-js-websocket"; import { + customElement, html, LitElement, - TemplateResult, property, PropertyValues, - customElement, + TemplateResult, } from "lit-element"; - +import secondsToDuration from "../../../common/datetime/seconds_to_duration"; +import { timerTimeRemaining } from "../../../common/entity/timer_time_remaining"; +import { HomeAssistant } from "../../../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import "../components/hui-warning"; - -import { timerTimeRemaining } from "../../../common/entity/timer_time_remaining"; -import secondsToDuration from "../../../common/datetime/seconds_to_duration"; - -import { HomeAssistant } from "../../../types"; import { EntityConfig } from "./types"; -import { HassEntity } from "home-assistant-js-websocket"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; @customElement("hui-timer-entity-row") class HuiTimerEntityRow extends LitElement { diff --git a/src/panels/lovelace/entity-rows/hui-toggle-entity-row.ts b/src/panels/lovelace/entity-rows/hui-toggle-entity-row.ts index b166ba9d2b..94efa0b92a 100644 --- a/src/panels/lovelace/entity-rows/hui-toggle-entity-row.ts +++ b/src/panels/lovelace/entity-rows/hui-toggle-entity-row.ts @@ -1,20 +1,19 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, PropertyValues, + TemplateResult, } from "lit-element"; - -import "../components/hui-generic-entity-row"; -import "../../../components/entity/ha-entity-toggle"; -import "../components/hui-warning"; - import { computeStateDisplay } from "../../../common/entity/compute_state_display"; +import "../../../components/entity/ha-entity-toggle"; +import { UNAVAILABLE_STATES } from "../../../data/entity"; import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { EntityConfig, LovelaceRow } from "./types"; @customElement("hui-toggle-entity-row") class HuiToggleEntityRow extends LitElement implements LovelaceRow { @@ -54,7 +53,9 @@ class HuiToggleEntityRow extends LitElement implements LovelaceRow { return html` - ${stateObj.state === "on" || stateObj.state === "off" + ${stateObj.state === "on" || + stateObj.state === "off" || + UNAVAILABLE_STATES.includes(stateObj.state) ? html`
    - ${stateObj.attributes.temperature} - ${getWeatherUnit(this.hass, "temperature")} + ${UNAVAILABLE_STATES.includes(stateObj.state) + ? this.hass.localize(`state.default.${stateObj.state}`) || + stateObj.state + : html` + ${stateObj.attributes.temperature} + ${getWeatherUnit(this.hass, "temperature")} + `}
    - ${this._getSecondaryAttribute(stateObj)} + ${!UNAVAILABLE_STATES.includes(stateObj.state) + ? this._getSecondaryAttribute(stateObj) + : ""}
    diff --git a/src/panels/lovelace/entity-rows/types.ts b/src/panels/lovelace/entity-rows/types.ts index 29b133c336..1407cc4563 100644 --- a/src/panels/lovelace/entity-rows/types.ts +++ b/src/panels/lovelace/entity-rows/types.ts @@ -1,6 +1,6 @@ +import { ActionConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; import { Condition } from "../common/validate-condition"; -import { ActionConfig } from "../../../data/lovelace"; export interface EntityConfig { entity: string; diff --git a/src/panels/lovelace/ha-panel-lovelace.ts b/src/panels/lovelace/ha-panel-lovelace.ts index 1b30c6938d..b0e1d7a4fc 100644 --- a/src/panels/lovelace/ha-panel-lovelace.ts +++ b/src/panels/lovelace/ha-panel-lovelace.ts @@ -1,31 +1,30 @@ import "@material/mwc-button"; import deepFreeze from "deep-freeze"; - import { + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { + deleteConfig, fetchConfig, + fetchResources, LovelaceConfig, saveConfig, subscribeLovelaceUpdates, WindowWithLovelaceProm, - deleteConfig, - fetchResources, } from "../../data/lovelace"; -import "../../layouts/hass-loading-screen"; import "../../layouts/hass-error-screen"; -import "./hui-root"; +import "../../layouts/hass-loading-screen"; import { HomeAssistant, PanelInfo, Route } from "../../types"; -import { Lovelace } from "./types"; -import { - LitElement, - html, - PropertyValues, - TemplateResult, - property, -} from "lit-element"; -import { showSaveDialog } from "./editor/show-save-config-dialog"; -import { generateLovelaceConfigFromHass } from "./common/generate-lovelace-config"; import { showToast } from "../../util/toast"; +import { generateLovelaceConfigFromHass } from "./common/generate-lovelace-config"; import { loadLovelaceResources } from "./common/load-resources"; +import { showSaveDialog } from "./editor/show-save-config-dialog"; +import "./hui-root"; +import { Lovelace } from "./types"; (window as any).loadCardHelpers = () => import("./custom-card-helpers"); @@ -57,7 +56,9 @@ class LovelacePanel extends LitElement { private mqls?: MediaQueryList[]; private _ignoreNextUpdateEvent = false; + private _fetchConfigOnConnect = false; + private _unsubUpdates?; constructor() { @@ -280,7 +281,7 @@ class LovelacePanel extends LitElement { conf = await confProm!; } catch (err) { if (err.code !== "config_not_found") { - // tslint:disable-next-line + // eslint-disable-next-line console.log(err); this._state = "error"; this._errorMsg = err.message; @@ -354,7 +355,7 @@ class LovelacePanel extends LitElement { this._ignoreNextUpdateEvent = true; await saveConfig(this.hass!, urlPath, newConfig); } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error(err); // Rollback the optimistic update this._updateLovelace({ @@ -376,7 +377,7 @@ class LovelacePanel extends LitElement { this._ignoreNextUpdateEvent = true; await deleteConfig(this.hass!, urlPath); } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error(err); // Rollback the optimistic update this._updateLovelace({ diff --git a/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts b/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts index 0f53f9a1b4..7ff040b071 100644 --- a/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts +++ b/src/panels/lovelace/header-footer/hui-buttons-header-footer.ts @@ -1,18 +1,16 @@ import { customElement, - LitElement, html, + LitElement, property, TemplateResult, } from "lit-element"; - +import { HomeAssistant } from "../../../types"; +import { processConfigEntities } from "../common/process-config-entities"; import "../components/hui-buttons-base"; - +import { EntityConfig } from "../entity-rows/types"; import { LovelaceHeaderFooter } from "../types"; import { ButtonsHeaderFooterConfig } from "./types"; -import { processConfigEntities } from "../common/process-config-entities"; -import { EntityConfig } from "../entity-rows/types"; -import { HomeAssistant } from "../../../types"; @customElement("hui-buttons-header-footer") export class HuiButtonsHeaderFooter extends LitElement @@ -22,6 +20,7 @@ export class HuiButtonsHeaderFooter extends LitElement } @property() public hass?: HomeAssistant; + private _configEntities?: EntityConfig[]; public setConfig(config: ButtonsHeaderFooterConfig): void { diff --git a/src/panels/lovelace/header-footer/hui-graph-header-footer.ts b/src/panels/lovelace/header-footer/hui-graph-header-footer.ts index 880cb71372..572065d2a6 100644 --- a/src/panels/lovelace/header-footer/hui-graph-header-footer.ts +++ b/src/panels/lovelace/header-footer/hui-graph-header-footer.ts @@ -1,20 +1,18 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, PropertyValues, - CSSResult, - css, + TemplateResult, } from "lit-element"; - -import "../components/hui-graph-base"; - -import { LovelaceHeaderFooter } from "../types"; import { HomeAssistant } from "../../../types"; -import { GraphHeaderFooterConfig } from "./types"; import { getHistoryCoordinates } from "../common/graph/get-history-coordinates"; +import "../components/hui-graph-base"; +import { LovelaceHeaderFooter } from "../types"; +import { GraphHeaderFooterConfig } from "./types"; const MINUTE = 60000; @@ -26,8 +24,11 @@ export class HuiGraphHeaderFooter extends LitElement } @property() public hass?: HomeAssistant; + @property() protected _config?: GraphHeaderFooterConfig; + @property() private _coordinates?: any; + private _date?: Date; public setConfig(config: GraphHeaderFooterConfig): void { diff --git a/src/panels/lovelace/header-footer/hui-picture-header-footer.ts b/src/panels/lovelace/header-footer/hui-picture-header-footer.ts index 4317df3557..9807c4a0e6 100644 --- a/src/panels/lovelace/header-footer/hui-picture-header-footer.ts +++ b/src/panels/lovelace/header-footer/hui-picture-header-footer.ts @@ -1,23 +1,21 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "../../../components/ha-card"; - -import { LovelaceHeaderFooter } from "../types"; -import { HomeAssistant } from "../../../types"; import { classMap } from "lit-html/directives/class-map"; -import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; -import { ActionHandlerEvent } from "../../../data/lovelace"; -import { handleAction } from "../common/handle-action"; import { ifDefined } from "lit-html/directives/if-defined"; +import "../../../components/ha-card"; +import { ActionHandlerEvent } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { actionHandler } from "../common/directives/action-handler-directive"; +import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { LovelaceHeaderFooter } from "../types"; import { PictureHeaderFooterConfig } from "./types"; @customElement("hui-picture-header-footer") @@ -64,7 +62,6 @@ export class HuiPictureHeaderFooter extends LitElement class="${classMap({ clickable, })}" - `; diff --git a/src/panels/lovelace/hui-editor.ts b/src/panels/lovelace/hui-editor.ts index 758ea6911d..8fae98ac7d 100644 --- a/src/panels/lovelace/hui-editor.ts +++ b/src/panels/lovelace/hui-editor.ts @@ -1,38 +1,33 @@ -import { - customElement, - LitElement, - html, - TemplateResult, - CSSResult, - css, - property, -} from "lit-element"; -import { classMap } from "lit-html/directives/class-map"; -import { safeDump, safeLoad } from "js-yaml"; - +import "@material/mwc-button"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; -import "@material/mwc-button"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-spinner/paper-spinner"; - -import { struct } from "./common/structs/struct"; -import { Lovelace } from "./types"; - -import "../../components/ha-icon"; -import { haStyle } from "../../resources/styles"; -import "../../components/ha-code-editor"; -// This is not a duplicate import, one is for types, one is for element. -// tslint:disable-next-line -import { HaCodeEditor } from "../../components/ha-code-editor"; -import { HomeAssistant } from "../../types"; +import { safeDump, safeLoad } from "js-yaml"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; import { computeRTL } from "../../common/util/compute_rtl"; -import { LovelaceConfig } from "../../data/lovelace"; +import "../../components/ha-code-editor"; +import type { HaCodeEditor } from "../../components/ha-code-editor"; +import "../../components/ha-icon"; +import type { LovelaceConfig } from "../../data/lovelace"; import { showAlertDialog, showConfirmationDialog, } from "../../dialogs/generic/show-dialog-box"; +import { haStyle } from "../../resources/styles"; +import type { HomeAssistant } from "../../types"; +import { struct } from "./common/structs/struct"; +import type { Lovelace } from "./types"; const lovelaceStruct = struct.interface({ title: "string?", @@ -42,9 +37,13 @@ const lovelaceStruct = struct.interface({ @customElement("hui-editor") class LovelaceFullConfigEditor extends LitElement { @property() public hass!: HomeAssistant; + @property() public lovelace?: Lovelace; + @property() public closeEditor?: () => void; + @property() private _saving?: boolean; + @property() private _changed?: boolean; private _generation = 1; diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index 484dec9afe..2501ccdf5f 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -1,66 +1,65 @@ -import { - html, - LitElement, - PropertyValues, - TemplateResult, - CSSResult, - css, - property, -} from "lit-element"; -import { classMap } from "lit-html/directives/class-map"; +import "@material/mwc-button"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-scroll-effects/effects/waterfall"; import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/paper-icon-button/paper-icon-button"; -import "@material/mwc-button"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-menu-button/paper-menu-button"; import "@polymer/paper-tabs/paper-tab"; import "@polymer/paper-tabs/paper-tabs"; - +import { + css, + CSSResult, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { classMap } from "lit-html/directives/class-map"; +import memoizeOne from "memoize-one"; +import { isComponentLoaded } from "../../common/config/is_component_loaded"; +import { fireEvent } from "../../common/dom/fire_event"; import scrollToTarget from "../../common/dom/scroll-to-target"; - -import "../../layouts/ha-app-layout"; +import { navigate } from "../../common/navigate"; +import { computeRTLDirection } from "../../common/util/compute_rtl"; +import { debounce } from "../../common/util/debounce"; +import { afterNextRender } from "../../common/util/render-status"; +import "../../components/ha-icon"; import "../../components/ha-paper-icon-button-arrow-next"; import "../../components/ha-paper-icon-button-arrow-prev"; -import "../../components/ha-icon"; -import { debounce } from "../../common/util/debounce"; -import { HomeAssistant } from "../../types"; -import { LovelaceConfig, LovelacePanelConfig } from "../../data/lovelace"; -import { navigate } from "../../common/navigate"; -import { fireEvent } from "../../common/dom/fire_event"; -import { swapView } from "./editor/config-util"; - -import "./views/hui-view"; -// Not a duplicate import, this one is for type -// tslint:disable-next-line -import { HUIView } from "./views/hui-view"; -import "./views/hui-panel-view"; -// tslint:disable-next-line -import { HUIPanelView } from "./views/hui-panel-view"; -import { showEditViewDialog } from "./editor/view-editor/show-edit-view-dialog"; -import { showEditLovelaceDialog } from "./editor/lovelace-editor/show-edit-lovelace-dialog"; -import { Lovelace } from "./types"; -import { afterNextRender } from "../../common/util/render-status"; -import { haStyle } from "../../resources/styles"; -import { computeRTLDirection } from "../../common/util/compute_rtl"; -import { showVoiceCommandDialog } from "../../dialogs/voice-command-dialog/show-ha-voice-command-dialog"; -import { isComponentLoaded } from "../../common/config/is_component_loaded"; +import type { LovelaceConfig, LovelacePanelConfig } from "../../data/lovelace"; import { showAlertDialog, showConfirmationDialog, } from "../../dialogs/generic/show-dialog-box"; -import memoizeOne from "memoize-one"; +import { showVoiceCommandDialog } from "../../dialogs/voice-command-dialog/show-ha-voice-command-dialog"; +import "../../layouts/ha-app-layout"; +import { haStyle } from "../../resources/styles"; +import type { HomeAssistant } from "../../types"; +import { swapView } from "./editor/config-util"; +import { showEditLovelaceDialog } from "./editor/lovelace-editor/show-edit-lovelace-dialog"; +import { showEditViewDialog } from "./editor/view-editor/show-edit-view-dialog"; +import type { Lovelace } from "./types"; +import "./views/hui-panel-view"; +import type { HUIPanelView } from "./views/hui-panel-view"; +import { HUIView } from "./views/hui-view"; class HUIRoot extends LitElement { @property() public hass!: HomeAssistant; + @property() public lovelace?: Lovelace; + @property() public columns?: number; + @property() public narrow?: boolean; + @property() public route?: { path: string; prefix: string }; + @property() private _curView?: number | "hass-unused-entities"; + private _viewCache?: { [viewId: string]: HUIView }; private _debouncedConfigChanged: () => void; @@ -102,7 +101,7 @@ class HUIRoot extends LitElement { >
    ${this.config.title || - this.hass!.localize("ui.panel.lovelace.editor.header")} + this.hass!.localize("ui.panel.lovelace.editor.header")} ` : ""} diff --git a/src/panels/lovelace/special-rows/hui-attribute-row.ts b/src/panels/lovelace/special-rows/hui-attribute-row.ts index 289c1f5a64..9a5db8a85f 100644 --- a/src/panels/lovelace/special-rows/hui-attribute-row.ts +++ b/src/panels/lovelace/special-rows/hui-attribute-row.ts @@ -1,24 +1,23 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - CSSResult, - css, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - +import { HomeAssistant } from "../../../types"; +import { hasConfigOrEntityChanged } from "../common/has-changed"; import "../components/hui-generic-entity-row"; import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, AttributeRowConfig } from "../entity-rows/types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { AttributeRowConfig, LovelaceRow } from "../entity-rows/types"; @customElement("hui-attribute-row") class HuiAttributeRow extends LitElement implements LovelaceRow { @property() public hass?: HomeAssistant; + @property() private _config?: AttributeRowConfig; public setConfig(config: AttributeRowConfig): void { diff --git a/src/panels/lovelace/special-rows/hui-button-row.ts b/src/panels/lovelace/special-rows/hui-button-row.ts index 58fa793b62..a0cb5d7af8 100644 --- a/src/panels/lovelace/special-rows/hui-button-row.ts +++ b/src/panels/lovelace/special-rows/hui-button-row.ts @@ -1,26 +1,25 @@ +import "@material/mwc-button"; import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - import "../../../components/ha-icon"; - -import { LovelaceRow, ButtonRowConfig } from "../entity-rows/types"; +import { ActionHandlerEvent } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; import { actionHandler } from "../common/directives/action-handler-directive"; -import { hasAction } from "../common/has-action"; -import { ActionHandlerEvent } from "../../../data/lovelace"; import { handleAction } from "../common/handle-action"; +import { hasAction } from "../common/has-action"; +import { ButtonRowConfig, LovelaceRow } from "../entity-rows/types"; @customElement("hui-button-row") export class HuiButtonRow extends LitElement implements LovelaceRow { public hass?: HomeAssistant; + @property() private _config?: ButtonRowConfig; public setConfig(config: ButtonRowConfig): void { diff --git a/src/panels/lovelace/special-rows/hui-buttons-row.ts b/src/panels/lovelace/special-rows/hui-buttons-row.ts index e685bb0bda..9f7acf77bd 100644 --- a/src/panels/lovelace/special-rows/hui-buttons-row.ts +++ b/src/panels/lovelace/special-rows/hui-buttons-row.ts @@ -1,20 +1,18 @@ import { customElement, - LitElement, html, + LitElement, property, TemplateResult, } from "lit-element"; - +import { HomeAssistant } from "../../../types"; +import { processConfigEntities } from "../common/process-config-entities"; import "../components/hui-buttons-base"; - import { ButtonsRowConfig, EntityConfig, LovelaceRow, } from "../entity-rows/types"; -import { processConfigEntities } from "../common/process-config-entities"; -import { HomeAssistant } from "../../../types"; @customElement("hui-buttons-row") export class HuiButtonsRow extends LitElement implements LovelaceRow { @@ -23,6 +21,7 @@ export class HuiButtonsRow extends LitElement implements LovelaceRow { } @property() public hass?: HomeAssistant; + private _configEntities?: EntityConfig[]; public setConfig(config: ButtonsRowConfig): void { diff --git a/src/panels/lovelace/special-rows/hui-call-service-row.ts b/src/panels/lovelace/special-rows/hui-call-service-row.ts index 7f9fab6051..80a682e70b 100644 --- a/src/panels/lovelace/special-rows/hui-call-service-row.ts +++ b/src/panels/lovelace/special-rows/hui-call-service-row.ts @@ -1,5 +1,4 @@ import { customElement } from "lit-element"; - import { CallServiceConfig } from "../entity-rows/types"; import { HuiButtonRow } from "./hui-button-row"; diff --git a/src/panels/lovelace/special-rows/hui-cast-row.ts b/src/panels/lovelace/special-rows/hui-cast-row.ts index 7abe7d6c23..4b70d198fc 100644 --- a/src/panels/lovelace/special-rows/hui-cast-row.ts +++ b/src/panels/lovelace/special-rows/hui-cast-row.ts @@ -1,23 +1,21 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; - -import { LovelaceRow, CastConfig } from "../entity-rows/types"; -import { HomeAssistant } from "../../../types"; - -import "../../../components/ha-icon"; import { CastManager } from "../../../cast/cast_manager"; import { - ensureConnectedCastSession, castSendShowLovelaceView, + ensureConnectedCastSession, } from "../../../cast/receiver_messages"; +import "../../../components/ha-icon"; +import { HomeAssistant } from "../../../types"; +import { CastConfig, LovelaceRow } from "../entity-rows/types"; @customElement("hui-cast-row") class HuiCastRow extends LitElement implements LovelaceRow { @@ -57,25 +55,19 @@ class HuiCastRow extends LitElement implements LovelaceRow {
    ${this._config.name}
    ${this._noHTTPS - ? html` - Cast requires HTTPS - ` + ? html` Cast requires HTTPS ` : this._castManager === undefined ? html`` : this._castManager === null - ? html` - Cast API unavailable - ` + ? html` Cast API unavailable ` : this._castManager.castState === "NO_DEVICES_AVAILABLE" - ? html` - No devices found - ` + ? html` No devices found ` : html`
    diff --git a/src/panels/lovelace/special-rows/hui-conditional-row.ts b/src/panels/lovelace/special-rows/hui-conditional-row.ts index e735f13870..06364cbef0 100644 --- a/src/panels/lovelace/special-rows/hui-conditional-row.ts +++ b/src/panels/lovelace/special-rows/hui-conditional-row.ts @@ -1,8 +1,7 @@ import { customElement } from "lit-element"; - import { HuiConditionalBase } from "../components/hui-conditional-base"; import { createRowElement } from "../create-element/create-row-element"; -import { LovelaceRow, ConditionalRowConfig } from "../entity-rows/types"; +import { ConditionalRowConfig, LovelaceRow } from "../entity-rows/types"; @customElement("hui-conditional-row") class HuiConditionalRow extends HuiConditionalBase implements LovelaceRow { diff --git a/src/panels/lovelace/special-rows/hui-divider-row.ts b/src/panels/lovelace/special-rows/hui-divider-row.ts index 1738bce7c9..7ee5e22be0 100644 --- a/src/panels/lovelace/special-rows/hui-divider-row.ts +++ b/src/panels/lovelace/special-rows/hui-divider-row.ts @@ -1,13 +1,12 @@ import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; - -import { LovelaceRow, DividerConfig } from "../entity-rows/types"; import { HomeAssistant } from "../../../types"; +import { DividerConfig, LovelaceRow } from "../entity-rows/types"; @customElement("hui-divider-row") class HuiDividerRow extends LitElement implements LovelaceRow { @@ -40,9 +39,7 @@ class HuiDividerRow extends LitElement implements LovelaceRow { el.style.setProperty(prop, this._config!.style[prop]); }); - return html` - ${el} - `; + return html` ${el} `; } } diff --git a/src/panels/lovelace/special-rows/hui-section-row.ts b/src/panels/lovelace/special-rows/hui-section-row.ts index f0854cf1ca..d671784d2d 100644 --- a/src/panels/lovelace/special-rows/hui-section-row.ts +++ b/src/panels/lovelace/special-rows/hui-section-row.ts @@ -1,17 +1,15 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import { LovelaceRow, SectionConfig } from "../entity-rows/types"; -import { HomeAssistant } from "../../../types"; - import "../../../components/ha-icon"; +import { HomeAssistant } from "../../../types"; +import { LovelaceRow, SectionConfig } from "../entity-rows/types"; @customElement("hui-section-row") class HuiSectionRow extends LitElement implements LovelaceRow { @@ -35,9 +33,7 @@ class HuiSectionRow extends LitElement implements LovelaceRow { return html`
    ${this._config.label - ? html` -
    ${this._config.label}
    - ` + ? html`
    ${this._config.label}
    ` : html``} `; } diff --git a/src/panels/lovelace/special-rows/hui-weblink-row.ts b/src/panels/lovelace/special-rows/hui-weblink-row.ts index 36e09833eb..e510734689 100644 --- a/src/panels/lovelace/special-rows/hui-weblink-row.ts +++ b/src/panels/lovelace/special-rows/hui-weblink-row.ts @@ -1,17 +1,15 @@ import { - html, - LitElement, - TemplateResult, - customElement, - property, css, CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import { LovelaceRow, WeblinkConfig } from "../entity-rows/types"; -import { HomeAssistant } from "../../../types"; - import "../../../components/ha-icon"; +import { HomeAssistant } from "../../../types"; +import { LovelaceRow, WeblinkConfig } from "../entity-rows/types"; @customElement("hui-weblink-row") class HuiWeblinkRow extends LitElement implements LovelaceRow { diff --git a/src/panels/lovelace/types.ts b/src/panels/lovelace/types.ts index 3a6d042fcf..0799e1c7ea 100644 --- a/src/panels/lovelace/types.ts +++ b/src/panels/lovelace/types.ts @@ -1,13 +1,13 @@ -import { HomeAssistant, Constructor } from "../../types"; import { + LovelaceBadgeConfig, LovelaceCardConfig, LovelaceConfig, - LovelaceBadgeConfig, } from "../../data/lovelace"; +import { Constructor, HomeAssistant } from "../../types"; import { LovelaceHeaderFooterConfig } from "./header-footer/types"; declare global { - // tslint:disable-next-line + // eslint-disable-next-line interface HASSDomEvents { "ll-rebuild": {}; "ll-badge-rebuild": {}; diff --git a/src/panels/lovelace/views/hui-panel-view.ts b/src/panels/lovelace/views/hui-panel-view.ts index 2eeb64a27c..ede0363fb4 100644 --- a/src/panels/lovelace/views/hui-panel-view.ts +++ b/src/panels/lovelace/views/hui-panel-view.ts @@ -1,24 +1,25 @@ import { + customElement, property, PropertyValues, - customElement, UpdatingElement, } from "lit-element"; - import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceCard, Lovelace } from "../types"; -import { createCardElement } from "../create-element/create-card-element"; import { LovelaceViewConfig } from "../../../data/lovelace"; +import { HomeAssistant } from "../../../types"; +import { createCardElement } from "../create-element/create-card-element"; +import { Lovelace, LovelaceCard } from "../types"; let editCodeLoaded = false; @customElement("hui-panel-view") export class HUIPanelView extends UpdatingElement { @property() public hass?: HomeAssistant; + @property() public lovelace?: Lovelace; + @property() public config?: LovelaceViewConfig; + @property({ type: Number }) public index!: number; protected firstUpdated(changedProperties: PropertyValues): void { diff --git a/src/panels/lovelace/views/hui-view-editable.ts b/src/panels/lovelace/views/hui-view-editable.ts index 4ef6e29420..d32e0774b4 100644 --- a/src/panels/lovelace/views/hui-view-editable.ts +++ b/src/panels/lovelace/views/hui-view-editable.ts @@ -1,3 +1,3 @@ // hui-view dependencies for when in edit mode. -import "../components/hui-card-options"; import "../../../components/ha-fab"; +import "../components/hui-card-options"; diff --git a/src/panels/lovelace/views/hui-view.ts b/src/panels/lovelace/views/hui-view.ts index 9ecbeb3163..36601ac268 100644 --- a/src/panels/lovelace/views/hui-view.ts +++ b/src/panels/lovelace/views/hui-view.ts @@ -1,31 +1,28 @@ import { html, LitElement, + property, PropertyValues, TemplateResult, - property, } from "lit-element"; - -import "../../../components/entity/ha-state-label-badge"; // This one is for types - +import { classMap } from "lit-html/directives/class-map"; import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; - +import { computeRTL } from "../../../common/util/compute_rtl"; +import "../../../components/entity/ha-state-label-badge"; import { - LovelaceViewConfig, - LovelaceCardConfig, LovelaceBadgeConfig, + LovelaceCardConfig, + LovelaceViewConfig, } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; -import { classMap } from "lit-html/directives/class-map"; -import { Lovelace, LovelaceCard, LovelaceBadge } from "../types"; -import { createCardElement } from "../create-element/create-card-element"; -import { computeCardSize } from "../common/compute-card-size"; -import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog"; import { HuiErrorCard } from "../cards/hui-error-card"; -import { computeRTL } from "../../../common/util/compute_rtl"; -import { createBadgeElement } from "../create-element/create-badge-element"; +import { computeCardSize } from "../common/compute-card-size"; import { processConfigEntities } from "../common/process-config-entities"; +import { createBadgeElement } from "../create-element/create-badge-element"; +import { createCardElement } from "../create-element/create-card-element"; +import { showEditCardDialog } from "../editor/card-editor/show-edit-card-dialog"; +import { Lovelace, LovelaceBadge, LovelaceCard } from "../types"; let editCodeLoaded = false; @@ -49,10 +46,15 @@ const getColumnIndex = (columnEntityCount: number[], size: number) => { export class HUIView extends LitElement { @property() public hass?: HomeAssistant; + @property() public lovelace?: Lovelace; + @property({ type: Number }) public columns?: number; + @property({ type: Number }) public index?: number; + @property() private _cards: Array = []; + @property() private _badges: LovelaceBadge[] = []; // Public to make demo happy @@ -265,12 +267,12 @@ export class HUIView extends LitElement { const elements: HUIView["_badges"] = []; const badges = processConfigEntities(config.badges as any); - for (const badge of badges) { + badges.forEach((badge) => { const element = createBadgeElement(badge); element.hass = this.hass; elements.push(element); root.appendChild(element); - } + }); this._badges = elements; root.style.display = elements.length > 0 ? "block" : "none"; } diff --git a/src/panels/mailbox/ha-dialog-show-audio-message.js b/src/panels/mailbox/ha-dialog-show-audio-message.js index c381c00e2d..edca1ab439 100644 --- a/src/panels/mailbox/ha-dialog-show-audio-message.js +++ b/src/panels/mailbox/ha-dialog-show-audio-message.js @@ -1,12 +1,11 @@ import "@material/mwc-button"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../../resources/ha-style"; import "../../components/dialog/ha-paper-dialog"; - import LocalizeMixin from "../../mixins/localize-mixin"; +import "../../resources/ha-style"; /* * @appliesMixin LocalizeMixin diff --git a/src/panels/mailbox/ha-panel-mailbox.js b/src/panels/mailbox/ha-panel-mailbox.js index f1f3158d53..4d15814302 100644 --- a/src/panels/mailbox/ha-panel-mailbox.js +++ b/src/panels/mailbox/ha-panel-mailbox.js @@ -1,22 +1,21 @@ +import "@material/mwc-button"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-toolbar/app-toolbar"; -import "@material/mwc-button"; import "@polymer/paper-input/paper-textarea"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-tabs/paper-tab"; import "@polymer/paper-tabs/paper-tabs"; 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 "../../components/ha-card"; -import "../../resources/ha-style"; - import { formatDateTime } from "../../common/datetime/format_date_time"; -import LocalizeMixin from "../../mixins/localize-mixin"; +import "../../components/ha-card"; +import "../../components/ha-menu-button"; import { EventsMixin } from "../../mixins/events-mixin"; +import LocalizeMixin from "../../mixins/localize-mixin"; +import "../../resources/ha-style"; let registeredDialog = false; @@ -166,12 +165,12 @@ class HaPanelMailbox extends EventsMixin(LocalizeMixin(PolymerElement)) { this.hass.connection .subscribeEvents(this.hassChanged, "mailbox_updated") .then( - function(unsub) { + function (unsub) { this._unsubEvents = unsub; }.bind(this) ); this.computePlatforms().then( - function(platforms) { + function (platforms) { this.platforms = platforms; this.hassChanged(); }.bind(this) @@ -188,7 +187,7 @@ class HaPanelMailbox extends EventsMixin(LocalizeMixin(PolymerElement)) { this._messages = []; } this.getMessages().then( - function(items) { + function (items) { this._messages = items; }.bind(this) ); @@ -222,7 +221,7 @@ class HaPanelMailbox extends EventsMixin(LocalizeMixin(PolymerElement)) { platform: platform, }); } - return platformItems.sort(function(a, b) { + return platformItems.sort(function (a, b) { return new Date(b.timestamp) - new Date(a.timestamp); }); }); diff --git a/src/panels/map/ha-entity-marker.js b/src/panels/map/ha-entity-marker.js index d910b7b3a4..21c399bf62 100644 --- a/src/panels/map/ha-entity-marker.js +++ b/src/panels/map/ha-entity-marker.js @@ -1,7 +1,7 @@ import "@polymer/iron-image/iron-image"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { EventsMixin } from "../../mixins/events-mixin"; /* diff --git a/src/panels/map/ha-panel-map.js b/src/panels/map/ha-panel-map.js index 1c083e4199..2cdb157fb6 100644 --- a/src/panels/map/ha-panel-map.js +++ b/src/panels/map/ha-panel-map.js @@ -1,18 +1,16 @@ 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 "../../components/ha-icon"; -import { navigate } from "../../common/navigate"; - -import "./ha-entity-marker"; - +import { setupLeafletMap } from "../../common/dom/setup-leaflet-map"; import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { computeStateName } from "../../common/entity/compute_state_name"; -import LocalizeMixin from "../../mixins/localize-mixin"; -import { setupLeafletMap } from "../../common/dom/setup-leaflet-map"; +import { navigate } from "../../common/navigate"; +import "../../components/ha-icon"; +import "../../components/ha-menu-button"; import { defaultRadiusColor } from "../../data/zone"; +import LocalizeMixin from "../../mixins/localize-mixin"; +import "./ha-entity-marker"; /* * @appliesMixin LocalizeMixin @@ -108,14 +106,14 @@ class HaPanelMap extends LocalizeMixin(PolymerElement) { if (!map) return; if (this._mapItems) { - this._mapItems.forEach(function(marker) { + this._mapItems.forEach(function (marker) { marker.remove(); }); } var mapItems = (this._mapItems = []); if (this._mapZones) { - this._mapZones.forEach(function(marker) { + this._mapZones.forEach(function (marker) { marker.remove(); }); } @@ -190,7 +188,7 @@ class HaPanelMap extends LocalizeMixin(PolymerElement) { var entityPicture = entity.attributes.entity_picture || ""; var entityName = title .split(" ") - .map(function(part) { + .map(function (part) { return part.substr(0, 1); }) .join(""); diff --git a/src/panels/profile/ha-advanced-mode-row.ts b/src/panels/profile/ha-advanced-mode-row.ts index 4393dcc38e..c0d7942c70 100644 --- a/src/panels/profile/ha-advanced-mode-row.ts +++ b/src/panels/profile/ha-advanced-mode-row.ts @@ -1,25 +1,25 @@ import { + css, + CSSResult, + customElement, + html, LitElement, property, TemplateResult, - html, - customElement, - CSSResult, - css, } from "lit-element"; - import "../../components/ha-card"; - -import { HomeAssistant } from "../../types"; import { CoreFrontendUserData, getOptimisticFrontendUserDataCollection, } from "../../data/frontend"; +import { HomeAssistant } from "../../types"; @customElement("ha-advanced-mode-row") class AdvancedModeRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() public coreUserData?: CoreFrontendUserData; protected render(): TemplateResult { diff --git a/src/panels/profile/ha-change-password-card.js b/src/panels/profile/ha-change-password-card.js index 818b256707..93fd8aa26e 100644 --- a/src/panels/profile/ha-change-password-card.js +++ b/src/panels/profile/ha-change-password-card.js @@ -2,11 +2,10 @@ import "@material/mwc-button"; import "@polymer/paper-dialog/paper-dialog"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../components/ha-card"; - import LocalizeMixin from "../../mixins/localize-mixin"; - import "../../resources/ha-style"; /* diff --git a/src/panels/profile/ha-force-narrow-row.ts b/src/panels/profile/ha-force-narrow-row.ts index e2ce307e8a..27da08586d 100644 --- a/src/panels/profile/ha-force-narrow-row.ts +++ b/src/panels/profile/ha-force-narrow-row.ts @@ -1,22 +1,20 @@ import { - LitElement, - TemplateResult, - html, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "./ha-settings-row"; -import "../../components/ha-switch"; - -import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../components/ha-switch"; +import "../../components/ha-switch"; +import type { HaSwitch } from "../../components/ha-switch"; +import type { HomeAssistant } from "../../types"; +import "./ha-settings-row"; @customElement("ha-force-narrow-row") class HaForcedNarrowRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; protected render(): TemplateResult { diff --git a/src/panels/profile/ha-long-lived-access-tokens-card.js b/src/panels/profile/ha-long-lived-access-tokens-card.js index ca17ea7f67..5e85907e2d 100644 --- a/src/panels/profile/ha-long-lived-access-tokens-card.js +++ b/src/panels/profile/ha-long-lived-access-tokens-card.js @@ -1,16 +1,14 @@ import "@material/mwc-button"; - import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { EventsMixin } from "../../mixins/events-mixin"; -import LocalizeMixin from "../../mixins/localize-mixin"; import { formatDateTime } from "../../common/datetime/format_date_time"; import "../../components/ha-card"; - -import "../../resources/ha-style"; - -import "./ha-settings-row"; import { showAlertDialog } from "../../dialogs/generic/show-dialog-box"; +import { EventsMixin } from "../../mixins/events-mixin"; +import LocalizeMixin from "../../mixins/localize-mixin"; +import "../../resources/ha-style"; +import "./ha-settings-row"; /* * @appliesMixin EventsMixin diff --git a/src/panels/profile/ha-mfa-module-setup-flow.js b/src/panels/profile/ha-mfa-module-setup-flow.js index 2c6d2e0f54..cfa1d6b578 100644 --- a/src/panels/profile/ha-mfa-module-setup-flow.js +++ b/src/panels/profile/ha-mfa-module-setup-flow.js @@ -2,15 +2,14 @@ import "@material/mwc-button"; import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; import "@polymer/paper-spinner/paper-spinner"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../components/dialog/ha-paper-dialog"; import "../../components/ha-form/ha-form"; import "../../components/ha-markdown"; -import "../../resources/ha-style"; - import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; +import "../../resources/ha-style"; let instance = 0; diff --git a/src/panels/profile/ha-mfa-modules-card.js b/src/panels/profile/ha-mfa-modules-card.js index 79f50daa14..c3ac5b989e 100644 --- a/src/panels/profile/ha-mfa-modules-card.js +++ b/src/panels/profile/ha-mfa-modules-card.js @@ -1,14 +1,13 @@ import "@material/mwc-button"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; import "../../components/ha-card"; - -import "../../resources/ha-style"; - import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; +import "../../resources/ha-style"; let registeredDialog = false; diff --git a/src/panels/profile/ha-panel-profile.ts b/src/panels/profile/ha-panel-profile.ts index f30509d8a2..429f2557f2 100644 --- a/src/panels/profile/ha-panel-profile.ts +++ b/src/panels/profile/ha-panel-profile.ts @@ -1,49 +1,51 @@ -import { - LitElement, - TemplateResult, - html, - CSSResultArray, - css, - property, -} from "lit-element"; +import "@material/mwc-button"; import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header/app-header"; -import "@polymer/paper-item/paper-item-body"; -import "@polymer/paper-item/paper-item"; -import "@material/mwc-button"; import "@polymer/app-layout/app-toolbar/app-toolbar"; - -import "./ha-change-password-card"; -import "./ha-mfa-modules-card"; -import "./ha-refresh-tokens-card"; -import "./ha-long-lived-access-tokens-card"; -import "./ha-advanced-mode-row"; -import "./ha-pick-language-row"; -import "./ha-pick-theme-row"; -import "./ha-pick-dashboard-row"; -import "./ha-push-notifications-row"; -import "./ha-force-narrow-row"; -import "./ha-set-vibrate-row"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; +import { + css, + CSSResultArray, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-card"; import "../../components/ha-menu-button"; -import "../../resources/ha-style"; - -import { - getOptimisticFrontendUserDataCollection, - CoreFrontendUserData, -} from "../../data/frontend"; import { isExternal } from "../../data/external"; +import { + CoreFrontendUserData, + getOptimisticFrontendUserDataCollection, +} from "../../data/frontend"; +import { showConfirmationDialog } from "../../dialogs/generic/show-dialog-box"; +import "../../resources/ha-style"; import { haStyle } from "../../resources/styles"; import { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; -import { UnsubscribeFunc } from "home-assistant-js-websocket"; -import { showConfirmationDialog } from "../../dialogs/generic/show-dialog-box"; +import "./ha-advanced-mode-row"; +import "./ha-change-password-card"; +import "./ha-force-narrow-row"; +import "./ha-long-lived-access-tokens-card"; +import "./ha-mfa-modules-card"; +import "./ha-pick-dashboard-row"; +import "./ha-pick-language-row"; +import "./ha-pick-theme-row"; +import "./ha-push-notifications-row"; +import "./ha-refresh-tokens-card"; +import "./ha-set-vibrate-row"; class HaPanelProfile extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() private _refreshTokens?: unknown[]; + @property() private _coreUserData?: CoreFrontendUserData | null; + private _unsubCoreData?: UnsubscribeFunc; public connectedCallback() { diff --git a/src/panels/profile/ha-pick-dashboard-row.ts b/src/panels/profile/ha-pick-dashboard-row.ts index 138f87177f..53331c5792 100644 --- a/src/panels/profile/ha-pick-dashboard-row.ts +++ b/src/panels/profile/ha-pick-dashboard-row.ts @@ -1,25 +1,25 @@ -import { - LitElement, - TemplateResult, - html, - property, - customElement, - PropertyValues, -} from "lit-element"; - -import "./ha-settings-row"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; +import { + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; import "../../components/ha-paper-dropdown-menu"; - -import { HomeAssistant } from "../../types"; -import { LovelaceDashboard, fetchDashboards } from "../../data/lovelace"; +import { fetchDashboards, LovelaceDashboard } from "../../data/lovelace"; import { setDefaultPanel } from "../../data/panel"; +import { HomeAssistant } from "../../types"; +import "./ha-settings-row"; @customElement("ha-pick-dashboard-row") class HaPickDashboardRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; + @property() private _dashboards: LovelaceDashboard[] = []; protected firstUpdated(changedProps: PropertyValues) { diff --git a/src/panels/profile/ha-pick-language-row.js b/src/panels/profile/ha-pick-language-row.js index 7b5c975be1..8ec1ccd6ad 100644 --- a/src/panels/profile/ha-pick-language-row.js +++ b/src/panels/profile/ha-pick-language-row.js @@ -1,13 +1,11 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../components/ha-paper-dropdown-menu"; - import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; - import "./ha-settings-row"; /* diff --git a/src/panels/profile/ha-pick-theme-row.js b/src/panels/profile/ha-pick-theme-row.js index 8c99823951..9d4f62dec1 100644 --- a/src/panels/profile/ha-pick-theme-row.js +++ b/src/panels/profile/ha-pick-theme-row.js @@ -1,10 +1,9 @@ import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../../components/ha-paper-dropdown-menu"; - import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; diff --git a/src/panels/profile/ha-push-notifications-row.js b/src/panels/profile/ha-push-notifications-row.js index 90f514662b..ee2019a5b4 100644 --- a/src/panels/profile/ha-push-notifications-row.js +++ b/src/panels/profile/ha-push-notifications-row.js @@ -1,13 +1,11 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/iron-label/iron-label"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import { isComponentLoaded } from "../../common/config/is_component_loaded"; import { pushSupported } from "../../components/ha-push-notifications-toggle"; - import LocalizeMixin from "../../mixins/localize-mixin"; - import "./ha-settings-row"; /* diff --git a/src/panels/profile/ha-refresh-tokens-card.js b/src/panels/profile/ha-refresh-tokens-card.js index d3a4176e35..f3768587ae 100644 --- a/src/panels/profile/ha-refresh-tokens-card.js +++ b/src/panels/profile/ha-refresh-tokens-card.js @@ -1,14 +1,12 @@ import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-tooltip/paper-tooltip"; - -import "../../components/ha-card"; - import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; +import { formatDateTime } from "../../common/datetime/format_date_time"; +import "../../components/ha-card"; import { EventsMixin } from "../../mixins/events-mixin"; import LocalizeMixin from "../../mixins/localize-mixin"; -import { formatDateTime } from "../../common/datetime/format_date_time"; - import "./ha-settings-row"; /* diff --git a/src/panels/profile/ha-set-vibrate-row.ts b/src/panels/profile/ha-set-vibrate-row.ts index c9366daee0..2075b1a4f1 100644 --- a/src/panels/profile/ha-set-vibrate-row.ts +++ b/src/panels/profile/ha-set-vibrate-row.ts @@ -1,23 +1,21 @@ import { - LitElement, - TemplateResult, - html, - property, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; - -import "./ha-settings-row"; -import "../../components/ha-switch"; - -import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; -// tslint:disable-next-line: no-duplicate-imports -import { HaSwitch } from "../../components/ha-switch"; +import "../../components/ha-switch"; +import type { HaSwitch } from "../../components/ha-switch"; import { forwardHaptic } from "../../data/haptics"; +import type { HomeAssistant } from "../../types"; +import "./ha-settings-row"; @customElement("ha-set-vibrate-row") class HaSetVibrateRow extends LitElement { @property() public hass!: HomeAssistant; + @property() public narrow!: boolean; protected render(): TemplateResult { diff --git a/src/panels/profile/ha-settings-row.js b/src/panels/profile/ha-settings-row.js index cfdb7b1512..15ddb6c917 100644 --- a/src/panels/profile/ha-settings-row.js +++ b/src/panels/profile/ha-settings-row.js @@ -1,4 +1,5 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; class HaSettingsRow extends PolymerElement { diff --git a/src/panels/shopping-list/ha-panel-shopping-list.js b/src/panels/shopping-list/ha-panel-shopping-list.js index 1ac2c6eec0..6be4c26bff 100644 --- a/src/panels/shopping-list/ha-panel-shopping-list.js +++ b/src/panels/shopping-list/ha-panel-shopping-list.js @@ -5,18 +5,18 @@ import "@polymer/paper-checkbox/paper-checkbox"; import "@polymer/paper-icon-button/paper-icon-button"; import "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-icon-item"; -import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-menu-button/paper-menu-button"; 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 "../../components/ha-card"; -import LocalizeMixin from "../../mixins/localize-mixin"; import { isComponentLoaded } from "../../common/config/is_component_loaded"; +import "../../components/ha-card"; +import "../../components/ha-menu-button"; import { showVoiceCommandDialog } from "../../dialogs/voice-command-dialog/show-ha-voice-command-dialog"; +import LocalizeMixin from "../../mixins/localize-mixin"; /* * @appliesMixin LocalizeMixin @@ -166,7 +166,7 @@ class HaPanelShoppingList extends LocalizeMixin(PolymerElement) { this.hass.connection .subscribeEvents(this._fetchData, "shopping_list_updated") .then( - function(unsub) { + function (unsub) { this._unsubEvents = unsub; }.bind(this) ); @@ -180,7 +180,7 @@ class HaPanelShoppingList extends LocalizeMixin(PolymerElement) { _fetchData() { this.hass.callApi("get", "shopping_list").then( - function(items) { + function (items) { items.reverse(); this.items = items; }.bind(this) diff --git a/src/resources/codemirror.ts b/src/resources/codemirror.ts index a741a8b157..4fc2764582 100644 --- a/src/resources/codemirror.ts +++ b/src/resources/codemirror.ts @@ -2,8 +2,8 @@ import _CodeMirror, { Editor } from "codemirror"; // @ts-ignore import _codeMirrorCss from "codemirror/lib/codemirror.css"; -import "codemirror/mode/yaml/yaml"; import "codemirror/mode/jinja2/jinja2"; +import "codemirror/mode/yaml/yaml"; import { fireEvent } from "../common/dom/fire_event"; _CodeMirror.commands.save = (cm: Editor) => { diff --git a/src/resources/custom-card-support.ts b/src/resources/custom-card-support.ts index 1ccba106e2..2e33e53552 100644 --- a/src/resources/custom-card-support.ts +++ b/src/resources/custom-card-support.ts @@ -1,4 +1,4 @@ -import { LitElement, html, css } from "lit-element"; +import { css, html, LitElement } from "lit-element"; (LitElement.prototype as any).html = html; (LitElement.prototype as any).css = css; diff --git a/src/resources/ha-chart-scripts.js b/src/resources/ha-chart-scripts.js index 576e8cd6e8..500c803788 100644 --- a/src/resources/ha-chart-scripts.js +++ b/src/resources/ha-chart-scripts.js @@ -3,7 +3,7 @@ import "chartjs-chart-timeline"; // This function add a new interaction mode to Chart.js that // returns one point for every dataset. -Chart.Interaction.modes.neareach = function(chart, e, options) { +Chart.Interaction.modes.neareach = function (chart, e, options) { const getRange = { x: (a, b) => Math.abs(a.x - b.x), y: (a, b) => Math.abs(a.y - b.y), diff --git a/src/resources/ha-style.ts b/src/resources/ha-style.ts index 778277bf41..8d79a090ad 100644 --- a/src/resources/ha-style.ts +++ b/src/resources/ha-style.ts @@ -1,6 +1,6 @@ import "@polymer/paper-styles/paper-styles"; import "@polymer/polymer/lib/elements/custom-style"; -import { haStyle, haStyleDialog, derivedStyles } from "./styles"; +import { derivedStyles, haStyle, haStyleDialog } from "./styles"; const documentContainer = document.createElement("template"); documentContainer.setAttribute("style", "display: none;"); diff --git a/src/resources/html-import/import-href.js b/src/resources/html-import/import-href.js index 5daf931bf8..32083338c3 100644 --- a/src/resources/html-import/import-href.js +++ b/src/resources/html-import/import-href.js @@ -37,7 +37,7 @@ function whenImportsReady(cb) { * Defaults to `false`. * @return {!HTMLLinkElement} The link element for the URL to be loaded. */ -export const importHref = function(href, onload, onerror, optAsync) { +export const importHref = function (href, onload, onerror, optAsync) { let link /** @type {HTMLLinkElement} */ = document.head.querySelector( 'link[href="' + href + '"][import-href]' ); @@ -55,11 +55,11 @@ export const importHref = function(href, onload, onerror, optAsync) { // NOTE: the link may now be in 3 states: (1) pending insertion, // (2) inflight, (3) already loaded. In each case, we need to add // event listeners to process callbacks. - const cleanup = function() { + const cleanup = function () { link.removeEventListener("load", loadListener); link.removeEventListener("error", errorListener); }; - let loadListener = function(event) { + let loadListener = function (event) { cleanup(); // In case of a successful load, cache the load event on the link so // that it can be used to short-circuit this method in the future when @@ -71,7 +71,7 @@ export const importHref = function(href, onload, onerror, optAsync) { }); } }; - let errorListener = function(event) { + let errorListener = function (event) { cleanup(); // In case of an error, remove the link from the document so that it // will be automatically created again the next time `importHref` is diff --git a/src/resources/html-import/polyfill.js b/src/resources/html-import/polyfill.js index bb357ae2f6..51844ed272 100644 --- a/src/resources/html-import/polyfill.js +++ b/src/resources/html-import/polyfill.js @@ -7,7 +7,7 @@ Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt */ -(function(q) { +(function (q) { function y(a, b) { if ("function" === typeof window.CustomEvent) return new CustomEvent(a, b); var c = document.createEvent("CustomEvent"); @@ -29,8 +29,8 @@ var b = k(document, "link[rel=import]:not([import-dependency])"), c = b.length; c - ? g(b, function(b) { - return t(b, function() { + ? g(b, function (b) { + return t(b, function () { 0 === --c && a(); }); }) @@ -46,8 +46,8 @@ b(); } function A(a) { - z(function() { - return D(function() { + z(function () { + return D(function () { return a && a(); }); }); @@ -60,7 +60,7 @@ ) (a.__loaded = !0), b && b(); else { - var c = function(d) { + var c = function (d) { a.removeEventListener(d.type, c); a.__loaded = !0; b && b(); @@ -80,22 +80,22 @@ var a = this; this.a = {}; this.b = 0; - this.g = new MutationObserver(function(b) { + this.g = new MutationObserver(function (b) { return a.w(b); }); this.g.observe(document.head, { childList: !0, subtree: !0 }); this.loadImports(document); } function B(a) { - g(k(a, "template"), function(a) { + g(k(a, "template"), function (a) { g( k( a.content, 'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]' ), - function(a) { + function (a) { var b = document.createElement("script"); - g(a.attributes, function(a) { + g(a.attributes, function (a) { return b.setAttribute(a.name, a.value); }); b.textContent = a.textContent; @@ -119,7 +119,7 @@ w = null; !1 === "currentScript" in document && Object.defineProperty(document, "currentScript", { - get: function() { + get: function () { return ( w || ("complete" !== document.readyState @@ -133,7 +133,7 @@ G = /(@import[\s]+(?!url\())([^;]*)(;)/g, H = /(]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g, e = { - u: function(a, b) { + u: function (a, b) { a.href && a.setAttribute("href", e.c(a.getAttribute("href"), b)); a.src && a.setAttribute("src", e.c(a.getAttribute("src"), b)); if ("style" === a.localName) { @@ -141,14 +141,14 @@ a.textContent = e.o(c, b, G); } }, - o: function(a, b, c) { - return a.replace(c, function(a, c, l, g) { + o: function (a, b, c) { + return a.replace(c, function (a, c, l, g) { a = l.replace(/["']/g, ""); b && (a = e.c(a, b)); return c + "'" + a + "'" + g; }); }, - c: function(a, b) { + c: function (a, b) { if (void 0 === e.f) { e.f = !1; try { @@ -172,7 +172,7 @@ }, C = { async: !0, - load: function(a, b, c) { + load: function (a, b, c) { if (a) if (a.match(/^data:/)) { a = a.split(","); @@ -182,7 +182,7 @@ } else { var f = new XMLHttpRequest(); f.open("GET", a, C.async); - f.onload = function() { + f.onload = function () { var a = f.responseURL || f.getResponseHeader("Location"); a && 0 === a.indexOf("/") && @@ -204,13 +204,13 @@ v = /Trident/.test(navigator.userAgent) || /Edge\/\d./i.test(navigator.userAgent); - h.prototype.loadImports = function(a) { + h.prototype.loadImports = function (a) { var b = this; - g(k(a, "link[rel=import]"), function(a) { + g(k(a, "link[rel=import]"), function (a) { return b.l(a); }); }; - h.prototype.l = function(a) { + h.prototype.l = function (a) { var b = this, c = a.href; if (void 0 !== this.a[c]) { @@ -221,24 +221,24 @@ (this.a[c] = "pending"), C.load( c, - function(a, d) { + function (a, d) { a = b.A(a, d || c); b.a[c] = a; b.b--; b.loadImports(a); b.m(); }, - function() { + function () { b.a[c] = null; b.b--; b.m(); } ); }; - h.prototype.A = function(a, b) { + h.prototype.A = function (a, b) { if (!a) return document.createDocumentFragment(); v && - (a = a.replace(H, function(a, b, c) { + (a = a.replace(H, function (a, b, c) { return -1 === a.indexOf("type=") ? b + " type=import-disable " + c : a; })); var c = document.createElement("template"); @@ -255,7 +255,7 @@ a, 'link[rel=import],link[rel=stylesheet][href][type=import-disable],style:not([type]),link[rel=stylesheet][href]:not([type]),script:not([type]),script[type="application/javascript"],script[type="text/javascript"]' ), - function(a) { + function (a) { t(a); e.u(a, b); a.setAttribute("import-dependency", ""); @@ -276,14 +276,14 @@ ); return a; }; - h.prototype.m = function() { + h.prototype.m = function () { var a = this; if (!this.b) { this.g.disconnect(); this.flatten(document); var b = !1, c = !1, - d = function() { + d = function () { c && b && (a.loadImports(document), @@ -291,19 +291,19 @@ (a.g.observe(document.head, { childList: !0, subtree: !0 }), a.v())); }; - this.C(function() { + this.C(function () { c = !0; d(); }); - this.B(function() { + this.B(function () { b = !0; d(); }); } }; - h.prototype.flatten = function(a) { + h.prototype.flatten = function (a) { var b = this; - g(k(a, "link[rel=import]"), function(a) { + g(k(a, "link[rel=import]"), function (a) { var c = b.a[a.href]; (a.__import = c) && c.nodeType === Node.DOCUMENT_FRAGMENT_NODE && @@ -314,18 +314,18 @@ a.appendChild(c)); }); }; - h.prototype.B = function(a) { + h.prototype.B = function (a) { function b(f) { if (f < d) { var l = c[f], e = document.createElement("script"); l.removeAttribute("import-dependency"); - g(l.attributes, function(a) { + g(l.attributes, function (a) { return e.setAttribute(a.name, a.value); }); w = e; l.parentNode.replaceChild(e, l); - t(e, function() { + t(e, function () { w = null; b(f + 1); }); @@ -335,7 +335,7 @@ d = c.length; b(0); }; - h.prototype.C = function(a) { + h.prototype.C = function (a) { var b = k( document, "style[import-dependency],link[rel=stylesheet][import-dependency]" @@ -347,8 +347,8 @@ !!document.querySelector( "link[rel=stylesheet][href][type=import-disable]" ); - g(b, function(b) { - t(b, function() { + g(b, function (b) { + t(b, function () { b.removeAttribute("import-dependency"); 0 === --c && a(); }); @@ -365,17 +365,17 @@ }); } else a(); }; - h.prototype.v = function() { + h.prototype.v = function () { var a = this; g( k(document, "link[rel=import]"), - function(b) { + function (b) { return a.j(b); }, !0 ); }; - h.prototype.j = function(a) { + h.prototype.j = function (a) { a.__loaded || ((a.__loaded = !0), a.import && (a.import.readyState = "complete"), @@ -387,10 +387,10 @@ }) )); }; - h.prototype.w = function(a) { + h.prototype.w = function (a) { var b = this; - g(a, function(a) { - return g(a.addedNodes, function(a) { + g(a, function (a) { + return g(a.addedNodes, function (a) { a && a.nodeType === Node.ELEMENT_NODE && (r(a) ? b.l(a) : b.loadImports(a)); @@ -399,10 +399,10 @@ }; var x = null; if (u) - g(k(document, "link[rel=import]"), function(a) { + g(k(document, "link[rel=import]"), function (a) { (a.import && "loading" === a.import.readyState) || (a.__loaded = !0); }), - (n = function(a) { + (n = function (a) { a = a.target; r(a) && (a.__loaded = !0); }), @@ -414,7 +414,7 @@ (!p || p.configurable ? Node : Element).prototype, "baseURI", { - get: function() { + get: function () { var a = r(this) ? this : m(this); return a ? a.href @@ -427,17 +427,17 @@ } ); Object.defineProperty(HTMLLinkElement.prototype, "import", { - get: function() { + get: function () { return this.__import || null; }, configurable: !0, enumerable: !0, }); - z(function() { + z(function () { x = new h(); }); } - A(function() { + A(function () { return document.dispatchEvent( y("HTMLImportsLoaded", { cancelable: !0, bubbles: !0, detail: void 0 }) ); @@ -445,7 +445,7 @@ q.useNative = u; q.whenReady = A; q.importForElement = m; - q.loadImports = function(a) { + q.loadImports = function (a) { x && x.loadImports(a); }; })((window.HTMLImports = window.HTMLImports || {})); diff --git a/src/state-summary/state-card-climate.js b/src/state-summary/state-card-climate.js index 70cf125569..16e2c17e6e 100644 --- a/src/state-summary/state-card-climate.js +++ b/src/state-summary/state-card-climate.js @@ -1,7 +1,7 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; import "../components/ha-climate-state"; diff --git a/src/state-summary/state-card-configurator.js b/src/state-summary/state-card-configurator.js index 5cc66cf4f5..fe6199c9c3 100644 --- a/src/state-summary/state-card-configurator.js +++ b/src/state-summary/state-card-configurator.js @@ -1,10 +1,9 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; - import LocalizeMixin from "../mixins/localize-mixin"; /* diff --git a/src/state-summary/state-card-content.js b/src/state-summary/state-card-content.js index 61f0d69732..22375c13f7 100644 --- a/src/state-summary/state-card-content.js +++ b/src/state-summary/state-card-content.js @@ -1,5 +1,7 @@ +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - +import dynamicContentUpdater from "../common/dom/dynamic_content_updater"; +import { stateCardType } from "../common/entity/state_card_type"; import "./state-card-climate"; import "./state-card-configurator"; import "./state-card-cover"; @@ -17,9 +19,6 @@ import "./state-card-vacuum"; import "./state-card-water_heater"; import "./state-card-weblink"; -import { stateCardType } from "../common/entity/state_card_type"; -import dynamicContentUpdater from "../common/dom/dynamic_content_updater"; - class StateCardContent extends PolymerElement { static get properties() { return { diff --git a/src/state-summary/state-card-cover.js b/src/state-summary/state-card-cover.js index 2ecb7f66ed..02fc9f246c 100644 --- a/src/state-summary/state-card-cover.js +++ b/src/state-summary/state-card-cover.js @@ -1,7 +1,7 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; import "../components/ha-cover-controls"; import "../components/ha-cover-tilt-controls"; diff --git a/src/state-summary/state-card-display.js b/src/state-summary/state-card-display.js index 76456f4069..1312e5da52 100755 --- a/src/state-summary/state-card-display.js +++ b/src/state-summary/state-card-display.js @@ -1,14 +1,12 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../components/entity/state-info"; - -import LocalizeMixin from "../mixins/localize-mixin"; - import { attributeClassNames } from "../common/entity/attribute_class_names"; import { computeStateDisplay } from "../common/entity/compute_state_display"; import { computeRTL } from "../common/util/compute_rtl"; +import "../components/entity/state-info"; +import LocalizeMixin from "../mixins/localize-mixin"; /* * @appliesMixin LocalizeMixin diff --git a/src/state-summary/state-card-input_number.js b/src/state-summary/state-card-input_number.js index 6f914e6662..7d974d174c 100644 --- a/src/state-summary/state-card-input_number.js +++ b/src/state-summary/state-card-input_number.js @@ -3,8 +3,8 @@ import { IronResizableBehavior } from "@polymer/iron-resizable-behavior/iron-res import "@polymer/paper-input/paper-input"; import { mixinBehaviors } from "@polymer/polymer/lib/legacy/class"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; import "../components/ha-slider"; diff --git a/src/state-summary/state-card-input_select.ts b/src/state-summary/state-card-input_select.ts index 46c8b25e03..5e55755447 100644 --- a/src/state-summary/state-card-input_select.ts +++ b/src/state-summary/state-card-input_select.ts @@ -1,30 +1,28 @@ -import { - LitElement, - customElement, - TemplateResult, - html, - CSSResult, - css, - property, - PropertyValues, -} from "lit-element"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; import "@polymer/paper-item/paper-item"; -// tslint:disable-next-line: no-duplicate-imports -import { PaperItemElement } from "@polymer/paper-item/paper-item"; +import type { PaperItemElement } from "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; - -import "../components/entity/state-badge"; - -import { computeStateName } from "../common/entity/compute_state_name"; -import { HomeAssistant, InputSelectEntity } from "../types"; -import { setInputSelectOption } from "../data/input_select"; -import { PolymerIronSelectEvent } from "../polymer-types"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; import { stopPropagation } from "../common/dom/stop_propagation"; +import { computeStateName } from "../common/entity/compute_state_name"; +import "../components/entity/state-badge"; +import { setInputSelectOption } from "../data/input_select"; +import type { PolymerIronSelectEvent } from "../polymer-types"; +import type { HomeAssistant, InputSelectEntity } from "../types"; @customElement("state-card-input_select") class StateCardInputSelect extends LitElement { @property() public hass!: HomeAssistant; + @property() public stateObj!: InputSelectEntity; protected render(): TemplateResult { @@ -38,9 +36,7 @@ class StateCardInputSelect extends LitElement { > ${this.stateObj.attributes.options.map( - (option) => html` - ${option} - ` + (option) => html` ${option} ` )} diff --git a/src/state-summary/state-card-input_text.js b/src/state-summary/state-card-input_text.js index 7840133218..3685524f60 100644 --- a/src/state-summary/state-card-input_text.js +++ b/src/state-summary/state-card-input_text.js @@ -1,8 +1,9 @@ +/* eslint-plugin-disable lit */ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@polymer/paper-input/paper-input"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; class StateCardInputText extends PolymerElement { diff --git a/src/state-summary/state-card-lock.js b/src/state-summary/state-card-lock.js index a91c11b9e6..d0280b7a1d 100644 --- a/src/state-summary/state-card-lock.js +++ b/src/state-summary/state-card-lock.js @@ -1,10 +1,9 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; - import LocalizeMixin from "../mixins/localize-mixin"; /* diff --git a/src/state-summary/state-card-media_player.js b/src/state-summary/state-card-media_player.js index afc3b97103..048034be74 100644 --- a/src/state-summary/state-card-media_player.js +++ b/src/state-summary/state-card-media_player.js @@ -1,7 +1,7 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; import LocalizeMixin from "../mixins/localize-mixin"; import HassMediaPlayerEntity from "../util/hass-media-player-model"; diff --git a/src/state-summary/state-card-scene.js b/src/state-summary/state-card-scene.js index c26fb49010..c7ece92453 100644 --- a/src/state-summary/state-card-scene.js +++ b/src/state-summary/state-card-scene.js @@ -1,11 +1,11 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; -import LocalizeMixin from "../mixins/localize-mixin"; import { activateScene } from "../data/scene"; +import LocalizeMixin from "../mixins/localize-mixin"; /* * @appliesMixin LocalizeMixin diff --git a/src/state-summary/state-card-script.js b/src/state-summary/state-card-script.js index c15794bb57..462467b363 100644 --- a/src/state-summary/state-card-script.js +++ b/src/state-summary/state-card-script.js @@ -1,11 +1,10 @@ -import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import "@material/mwc-button"; +import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/ha-entity-toggle"; import "../components/entity/state-info"; - import LocalizeMixin from "../mixins/localize-mixin"; /* diff --git a/src/state-summary/state-card-timer.js b/src/state-summary/state-card-timer.js index 6c803ec6a0..96586e8804 100644 --- a/src/state-summary/state-card-timer.js +++ b/src/state-summary/state-card-timer.js @@ -1,11 +1,10 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../components/entity/state-info"; - -import { timerTimeRemaining } from "../common/entity/timer_time_remaining"; import secondsToDuration from "../common/datetime/seconds_to_duration"; +import { timerTimeRemaining } from "../common/entity/timer_time_remaining"; +import "../components/entity/state-info"; class StateCardTimer extends PolymerElement { static get template() { diff --git a/src/state-summary/state-card-toggle.js b/src/state-summary/state-card-toggle.js index 391da0dc25..e7136c5776 100644 --- a/src/state-summary/state-card-toggle.js +++ b/src/state-summary/state-card-toggle.js @@ -1,7 +1,7 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/ha-entity-toggle"; import "../components/entity/state-info"; diff --git a/src/state-summary/state-card-vacuum.js b/src/state-summary/state-card-vacuum.js index 2900d322cd..228ccef009 100644 --- a/src/state-summary/state-card-vacuum.js +++ b/src/state-summary/state-card-vacuum.js @@ -1,7 +1,7 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; import "../components/ha-vacuum-state"; diff --git a/src/state-summary/state-card-water_heater.js b/src/state-summary/state-card-water_heater.js index 92ae779930..672972b9c3 100644 --- a/src/state-summary/state-card-water_heater.js +++ b/src/state-summary/state-card-water_heater.js @@ -1,7 +1,7 @@ import "@polymer/iron-flex-layout/iron-flex-layout-classes"; import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - import "../components/entity/state-info"; import "../components/ha-water_heater-state"; diff --git a/src/state-summary/state-card-weblink.js b/src/state-summary/state-card-weblink.js index 5c99cf1537..aeb233b61f 100644 --- a/src/state-summary/state-card-weblink.js +++ b/src/state-summary/state-card-weblink.js @@ -1,9 +1,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag"; +/* eslint-plugin-disable lit */ import { PolymerElement } from "@polymer/polymer/polymer-element"; - -import "../components/entity/state-badge"; - import { computeStateName } from "../common/entity/compute_state_name"; +import "../components/entity/state-badge"; class StateCardWeblink extends PolymerElement { static get template() { @@ -31,9 +30,7 @@ class StateCardWeblink extends PolymerElement { } static get stateBadgeTemplate() { - return html` - - `; + return html` `; } static get properties() { diff --git a/src/state/auth-mixin.ts b/src/state/auth-mixin.ts index f2964fd829..26ef533590 100644 --- a/src/state/auth-mixin.ts +++ b/src/state/auth-mixin.ts @@ -1,8 +1,8 @@ -import { clearState } from "../util/ha-pref-storage"; import { askWrite } from "../common/auth/token_storage"; import { subscribeUser, userCollection } from "../data/ws-user"; -import { HassBaseEl } from "./hass-base-mixin"; import { Constructor } from "../types"; +import { clearState } from "../util/ha-pref-storage"; +import { HassBaseEl } from "./hass-base-mixin"; declare global { // for fire event @@ -49,7 +49,7 @@ export default >(superClass: T) => clearState(); document.location.href = "/"; } catch (err) { - // tslint:disable-next-line + // eslint-disable-next-line console.error(err); alert("Log out failed"); } diff --git a/src/state/connection-mixin.ts b/src/state/connection-mixin.ts index 1c8b8b2fa1..7a8ff2bfba 100644 --- a/src/state/connection-mixin.ts +++ b/src/state/connection-mixin.ts @@ -1,27 +1,25 @@ import { - ERR_INVALID_AUTH, - subscribeEntities, - subscribeConfig, - subscribeServices, - callService, Auth, + callService, Connection, + ERR_INVALID_AUTH, + subscribeConfig, + subscribeEntities, + subscribeServices, } from "home-assistant-js-websocket"; - -import { translationMetadata } from "../resources/translations-metadata"; - -import { getState } from "../util/ha-pref-storage"; -import { getLocalLanguage } from "../util/hass-translation"; -import { fetchWithAuth } from "../util/fetch-with-auth"; -import hassCallApi from "../util/hass-call-api"; -import { subscribePanels } from "../data/ws-panels"; -import { forwardHaptic } from "../data/haptics"; import { fireEvent } from "../common/dom/fire_event"; -import { Constructor, ServiceCallResponse } from "../types"; -import { HassBaseEl } from "./hass-base-mixin"; import { broadcastConnectionStatus } from "../data/connection-status"; import { subscribeFrontendUserData } from "../data/frontend"; +import { forwardHaptic } from "../data/haptics"; import { DEFAULT_PANEL } from "../data/panel"; +import { subscribePanels } from "../data/ws-panels"; +import { translationMetadata } from "../resources/translations-metadata"; +import { Constructor, ServiceCallResponse } from "../types"; +import { fetchWithAuth } from "../util/fetch-with-auth"; +import { getState } from "../util/ha-pref-storage"; +import hassCallApi from "../util/hass-call-api"; +import { getLocalLanguage } from "../util/hass-translation"; +import { HassBaseEl } from "./hass-base-mixin"; export const connectionMixin = >( superClass: T @@ -52,7 +50,7 @@ export const connectionMixin = >( hassUrl: (path = "") => new URL(path, auth.data.hassUrl).toString(), callService: async (domain, service, serviceData = {}) => { if (__DEV__) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.log("Calling service", domain, service, serviceData); } try { @@ -64,7 +62,7 @@ export const connectionMixin = >( )) as Promise; } catch (err) { if (__DEV__) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.error( "Error calling service", domain, @@ -91,7 +89,7 @@ export const connectionMixin = >( // For messages that do not get a response sendWS: (msg) => { if (__DEV__) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.log("Sending", msg); } conn.sendMessage(msg); @@ -99,7 +97,7 @@ export const connectionMixin = >( // For messages that expect a response callWS: (msg) => { if (__DEV__) { - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console console.log("Sending", msg); } @@ -107,9 +105,9 @@ export const connectionMixin = >( if (__DEV__) { resp.then( - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console (result) => console.log("Received", result), - // tslint:disable-next-line: no-console + // eslint-disable-next-line no-console (err) => console.error("Error", err) ); } diff --git a/src/state/dialog-manager-mixin.ts b/src/state/dialog-manager-mixin.ts index f6e525b5fc..9d2a4104dd 100644 --- a/src/state/dialog-manager-mixin.ts +++ b/src/state/dialog-manager-mixin.ts @@ -1,7 +1,7 @@ import { HASSDomEvent } from "../common/dom/fire_event"; -import { HassBaseEl } from "./hass-base-mixin"; import { makeDialogManager, showDialog } from "../dialogs/make-dialog-manager"; import { Constructor } from "../types"; +import { HassBaseEl } from "./hass-base-mixin"; interface RegisterDialogParams { dialogShowEvent: keyof HASSDomEvents; diff --git a/src/state/disconnect-toast-mixin.ts b/src/state/disconnect-toast-mixin.ts index 80d4e836d9..006cdad269 100644 --- a/src/state/disconnect-toast-mixin.ts +++ b/src/state/disconnect-toast-mixin.ts @@ -1,6 +1,6 @@ -import { HassBaseEl } from "./hass-base-mixin"; -import { showToast } from "../util/toast"; import { Constructor } from "../types"; +import { showToast } from "../util/toast"; +import { HassBaseEl } from "./hass-base-mixin"; export default >(superClass: T) => class extends superClass { diff --git a/src/state/haptic-mixin.ts b/src/state/haptic-mixin.ts index 3fe9adea69..384c31b9a9 100644 --- a/src/state/haptic-mixin.ts +++ b/src/state/haptic-mixin.ts @@ -1,10 +1,9 @@ import { PropertyValues } from "lit-element"; -import { HassBaseEl } from "./hass-base-mixin"; - -import { HapticType } from "../data/haptics"; -import { HomeAssistant, Constructor } from "../types"; import { HASSDomEvent } from "../common/dom/fire_event"; +import { HapticType } from "../data/haptics"; +import { Constructor, HomeAssistant } from "../types"; import { storeState } from "../util/ha-pref-storage"; +import { HassBaseEl } from "./hass-base-mixin"; interface VibrateParams { vibrate: HomeAssistant["vibrate"]; diff --git a/src/state/hass-base-mixin.ts b/src/state/hass-base-mixin.ts index 34bd9eebae..75c3174dc8 100644 --- a/src/state/hass-base-mixin.ts +++ b/src/state/hass-base-mixin.ts @@ -1,11 +1,13 @@ +import { Auth, Connection } from "home-assistant-js-websocket"; import { LitElement, property } from "lit-element"; import { HomeAssistant } from "../types"; -import { Auth, Connection } from "home-assistant-js-websocket"; export class HassBaseEl extends LitElement { @property() public hass?: HomeAssistant; + protected _pendingHass: Partial = {}; - // tslint:disable-next-line: variable-name + + // eslint-disable-next-line: variable-name private __provideHass: HTMLElement[] = []; public provideHass(el) { @@ -15,24 +17,24 @@ export class HassBaseEl extends LitElement { protected initializeHass(_auth: Auth, _conn: Connection) { // implemented in connection-mixin - // tslint:disable-next-line + // eslint-disable-next-line } // Exists so all methods can safely call super method protected hassConnected() { - // tslint:disable-next-line + // eslint-disable-next-line } protected hassReconnected() { - // tslint:disable-next-line + // eslint-disable-next-line } protected hassDisconnected() { - // tslint:disable-next-line + // eslint-disable-next-line } protected panelUrlChanged(_newPanelUrl) { - // tslint:disable-next-line + // eslint-disable-next-line } protected hassChanged(hass, _oldHass) { diff --git a/src/state/hass-element.ts b/src/state/hass-element.ts index a81856bfd6..977ee68f9d 100644 --- a/src/state/hass-element.ts +++ b/src/state/hass-element.ts @@ -1,18 +1,18 @@ +import { Constructor } from "../types"; import AuthMixin from "./auth-mixin"; -import TranslationsMixin from "./translations-mixin"; -import ThemesMixin from "./themes-mixin"; -import MoreInfoMixin from "./more-info-mixin"; -import ZHADialogMixin from "./zha-dialog-mixin"; -import SidebarMixin from "./sidebar-mixin"; -import { dialogManagerMixin } from "./dialog-manager-mixin"; import { connectionMixin } from "./connection-mixin"; -import NotificationMixin from "./notification-mixin"; +import { dialogManagerMixin } from "./dialog-manager-mixin"; import DisconnectToastMixin from "./disconnect-toast-mixin"; import { hapticMixin } from "./haptic-mixin"; -import { urlSyncMixin } from "./url-sync-mixin"; -import { Constructor } from "../types"; import { HassBaseEl } from "./hass-base-mixin"; +import MoreInfoMixin from "./more-info-mixin"; +import NotificationMixin from "./notification-mixin"; import { panelTitleMixin } from "./panel-title-mixin"; +import SidebarMixin from "./sidebar-mixin"; +import ThemesMixin from "./themes-mixin"; +import TranslationsMixin from "./translations-mixin"; +import { urlSyncMixin } from "./url-sync-mixin"; +import ZHADialogMixin from "./zha-dialog-mixin"; const ext = (baseClass: T, mixins): T => mixins.reduceRight((base, mixin) => mixin(base), baseClass); diff --git a/src/state/more-info-mixin.ts b/src/state/more-info-mixin.ts index 8eea164579..b2d3d852af 100644 --- a/src/state/more-info-mixin.ts +++ b/src/state/more-info-mixin.ts @@ -1,5 +1,5 @@ -import { HassBaseEl } from "./hass-base-mixin"; import { Constructor } from "../types"; +import { HassBaseEl } from "./hass-base-mixin"; declare global { // for fire event diff --git a/src/state/notification-mixin.ts b/src/state/notification-mixin.ts index 7a6d7b4af2..f0a80a1b05 100644 --- a/src/state/notification-mixin.ts +++ b/src/state/notification-mixin.ts @@ -1,5 +1,5 @@ -import { HassBaseEl } from "./hass-base-mixin"; import { Constructor } from "../types"; +import { HassBaseEl } from "./hass-base-mixin"; export default >(superClass: T) => class extends superClass { diff --git a/src/state/panel-title-mixin.ts b/src/state/panel-title-mixin.ts index b6f814a4ff..d6ec6a2f90 100644 --- a/src/state/panel-title-mixin.ts +++ b/src/state/panel-title-mixin.ts @@ -1,6 +1,6 @@ import { getPanelTitle } from "../data/panel"; +import { Constructor, HomeAssistant } from "../types"; import { HassBaseEl } from "./hass-base-mixin"; -import { HomeAssistant, Constructor } from "../types"; const setTitle = (title: string | undefined) => { document.title = title ? `${title} - Home Assistant` : "Home Assistant"; diff --git a/src/state/sidebar-mixin.ts b/src/state/sidebar-mixin.ts index 1e08fc7463..b009bbfcb1 100644 --- a/src/state/sidebar-mixin.ts +++ b/src/state/sidebar-mixin.ts @@ -1,7 +1,7 @@ +import { HASSDomEvent } from "../common/dom/fire_event"; +import { Constructor, HomeAssistant } from "../types"; import { storeState } from "../util/ha-pref-storage"; import { HassBaseEl } from "./hass-base-mixin"; -import { HASSDomEvent } from "../common/dom/fire_event"; -import { HomeAssistant, Constructor } from "../types"; interface DockSidebarParams { dock: HomeAssistant["dockedSidebar"]; diff --git a/src/state/themes-mixin.ts b/src/state/themes-mixin.ts index de4ceeffc3..d93435dbda 100644 --- a/src/state/themes-mixin.ts +++ b/src/state/themes-mixin.ts @@ -2,11 +2,11 @@ import { applyThemesOnElement, invalidateThemeCache, } from "../common/dom/apply_themes_on_element"; -import { storeState } from "../util/ha-pref-storage"; -import { subscribeThemes } from "../data/ws-themes"; -import { HassBaseEl } from "./hass-base-mixin"; import { HASSDomEvent } from "../common/dom/fire_event"; +import { subscribeThemes } from "../data/ws-themes"; import { Constructor } from "../types"; +import { storeState } from "../util/ha-pref-storage"; +import { HassBaseEl } from "./hass-base-mixin"; declare global { // for add event listener diff --git a/src/state/translations-mixin.ts b/src/state/translations-mixin.ts index da7c3f2f3f..755951d0da 100644 --- a/src/state/translations-mixin.ts +++ b/src/state/translations-mixin.ts @@ -1,18 +1,18 @@ -import { translationMetadata } from "../resources/translations-metadata"; -import { - getTranslation, - getLocalLanguage, - getUserLanguage, -} from "../util/hass-translation"; -import { HassBaseEl } from "./hass-base-mixin"; import { computeLocalize } from "../common/translations/localize"; import { computeRTL } from "../common/util/compute_rtl"; -import { HomeAssistant, Constructor } from "../types"; -import { storeState } from "../util/ha-pref-storage"; import { getHassTranslations, saveTranslationPreferences, } from "../data/translation"; +import { translationMetadata } from "../resources/translations-metadata"; +import { Constructor, HomeAssistant } from "../types"; +import { storeState } from "../util/ha-pref-storage"; +import { + getLocalLanguage, + getTranslation, + getUserLanguage, +} from "../util/hass-translation"; +import { HassBaseEl } from "./hass-base-mixin"; /* * superClass needs to contain `this.hass` and `this._updateHass`. @@ -20,7 +20,7 @@ import { export default >(superClass: T) => class extends superClass { - // tslint:disable-next-line: variable-name + // eslint-disable-next-line: variable-name private __coreProgress?: string; protected firstUpdated(changedProps) { @@ -68,11 +68,11 @@ export default >(superClass: T) => if (saveToBackend) { saveTranslationPreferences(this.hass, { language }); } - this._applyTranslations(this.hass); } private _applyTranslations(hass: HomeAssistant) { + document.querySelector("html")!.setAttribute("lang", hass.language); this.style.direction = computeRTL(hass) ? "rtl" : "ltr"; this._loadCoreTranslations(hass.language); this._loadHassTranslations(hass.language); diff --git a/src/state/url-sync-mixin.ts b/src/state/url-sync-mixin.ts index 94325cab7b..d7178b3fe0 100644 --- a/src/state/url-sync-mixin.ts +++ b/src/state/url-sync-mixin.ts @@ -1,8 +1,8 @@ -import { HassBaseEl } from "./hass-base-mixin"; +/* eslint-disable no-console */ import { fireEvent } from "../common/dom/fire_event"; import { Constructor } from "../types"; +import { HassBaseEl } from "./hass-base-mixin"; -/* tslint:disable:no-console */ const DEBUG = false; export const urlSyncMixin = >( @@ -13,7 +13,9 @@ export const urlSyncMixin = >( ? superClass : class extends superClass { private _ignoreNextHassChange = false; + private _ignoreNextPopstate = false; + private _moreInfoOpenedFromPath?: string; public connectedCallback(): void { diff --git a/src/state/zha-dialog-mixin.ts b/src/state/zha-dialog-mixin.ts index ba6e294c2d..82721b8e80 100644 --- a/src/state/zha-dialog-mixin.ts +++ b/src/state/zha-dialog-mixin.ts @@ -1,11 +1,11 @@ import { UpdatingElement } from "lit-element"; -import { HassBaseEl } from "./hass-base-mixin"; +import { HASSDomEvent } from "../common/dom/fire_event"; import { showZHADeviceInfoDialog, ZHADeviceInfoDialogParams, } from "../dialogs/zha-device-info-dialog/show-dialog-zha-device-info"; -import { HASSDomEvent } from "../common/dom/fire_event"; import { Constructor } from "../types"; +import { HassBaseEl } from "./hass-base-mixin"; declare global { // for fire event diff --git a/src/types.ts b/src/types.ts index 066c644fea..206c76b04b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,23 +1,25 @@ import { - HassEntities, - HassConfig, Auth, Connection, - MessageBase, - HassEntityBase, + HassConfig, + HassEntities, HassEntityAttributeBase, + HassEntityBase, HassServices, + MessageBase, } from "home-assistant-js-websocket"; import { LocalizeFunc } from "./common/translations/localize"; -import { ExternalMessaging } from "./external_app/external_messaging"; import { CoreFrontendUserData } from "./data/frontend"; +import { ExternalMessaging } from "./external_app/external_messaging"; declare global { + /* eslint-disable no-var, no-redeclare */ var __DEV__: boolean; var __DEMO__: boolean; var __BUILD__: "latest" | "es5"; var __VERSION__: string; var __STATIC_PATH__: string; + /* eslint-enable no-var, no-redeclare */ interface Window { // Custom panel entry point url diff --git a/src/types/node-vibrant.d.ts b/src/types/node-vibrant.d.ts index 7e7b457f53..3b16ea4b69 100644 --- a/src/types/node-vibrant.d.ts +++ b/src/types/node-vibrant.d.ts @@ -1,4 +1,5 @@ +// eslint-disable-next-line no-var +declare var Vibrant: Any; declare module "node-vibrant" { export default Vibrant; } -declare var Vibrant: Any; diff --git a/src/util/app-localstorage-document.js b/src/util/app-localstorage-document.js index a966f8ee5f..b00fdffba1 100644 --- a/src/util/app-localstorage-document.js +++ b/src/util/app-localstorage-document.js @@ -65,7 +65,7 @@ Polymer({ observers: ["__storageSourceChanged(storage, key)"], - attached: function() { + attached: function () { this.listen(window, "storage", "__onStorage"); this.listen( window.top, @@ -74,7 +74,7 @@ Polymer({ ); }, - detached: function() { + detached: function () { this.unlisten(window, "storage", "__onStorage"); this.unlisten( window.top, @@ -93,7 +93,7 @@ Polymer({ * @param {*} key The new key to use. * @return {Promise} */ - saveValue: function(key) { + saveValue: function (key) { try { this.__setStorageValue(/*{@type if (key ty){String}}*/ key, this.data); } catch (e) { @@ -105,12 +105,12 @@ Polymer({ return Promise.resolve(); }, - reset: function() { + reset: function () { this.key = null; this.data = this.zeroValue; }, - destroy: function() { + destroy: function () { try { this.storage.removeItem(this.key); this.reset(); @@ -121,7 +121,7 @@ Polymer({ return Promise.resolve(); }, - getStoredValue: function(path) { + getStoredValue: function (path) { var value; if (this.key != null) { @@ -141,7 +141,7 @@ Polymer({ return Promise.resolve(value); }, - setStoredValue: function(path, value) { + setStoredValue: function (path, value) { if (this.key != null) { try { this.__setStorageValue(this.key, this.data); @@ -155,25 +155,25 @@ Polymer({ return Promise.resolve(value); }, - __computeStorage: function(sessionOnly) { + __computeStorage: function (sessionOnly) { return sessionOnly ? window.sessionStorage : window.localStorage; }, - __storageSourceChanged: function(storage, key) { + __storageSourceChanged: function (storage, key) { this._initializeStoredValue(); }, - __onStorage: function(event) { + __onStorage: function (event) { if (event.key !== this.key || event.storageArea !== this.storage) { return; } - this.syncToMemory(function() { + this.syncToMemory(function () { this.set("data", this.__parseValueFromStorage()); }); }, - __onAppLocalStorageChanged: function(event) { + __onAppLocalStorageChanged: function (event) { if ( event.detail === this || event.detail.key !== this.key || @@ -181,12 +181,12 @@ Polymer({ ) { return; } - this.syncToMemory(function() { + this.syncToMemory(function () { this.set("data", event.detail.data); }); }, - __parseValueFromStorage: function() { + __parseValueFromStorage: function () { try { return JSON.parse(this.storage.getItem(this.key)); } catch (e) { @@ -194,7 +194,7 @@ Polymer({ } }, - __setStorageValue: function(key, value) { + __setStorageValue: function (key, value) { if (typeof value === "undefined") value = null; this.storage.setItem(key, JSON.stringify(value)); }, diff --git a/src/util/ha-pref-storage.ts b/src/util/ha-pref-storage.ts index 74e0d7f84c..ac5319bfa6 100644 --- a/src/util/ha-pref-storage.ts +++ b/src/util/ha-pref-storage.ts @@ -11,10 +11,10 @@ const STORAGE = window.localStorage || {}; export function storeState(hass: HomeAssistant) { try { - for (const key of STORED_STATE) { + STORED_STATE.forEach((key) => { const value = hass[key]; STORAGE[key] = JSON.stringify(value === undefined ? null : value); - } + }); } catch (err) { // Safari throws exception in private mode } @@ -23,7 +23,7 @@ export function storeState(hass: HomeAssistant) { export function getState() { const state = {}; - for (const key of STORED_STATE) { + STORED_STATE.forEach((key) => { if (key in STORAGE) { let value = JSON.parse(STORAGE[key]); // dockedSidebar went from boolean to enum on 20190720 @@ -32,7 +32,7 @@ export function getState() { } state[key] = value; } - } + }); return state; } diff --git a/src/util/hass-call-api.ts b/src/util/hass-call-api.ts index bcde8b745a..ba75db21f9 100644 --- a/src/util/hass-call-api.ts +++ b/src/util/hass-call-api.ts @@ -1,5 +1,5 @@ -import { fetchWithAuth } from "./fetch-with-auth"; import { Auth } from "home-assistant-js-websocket"; +import { fetchWithAuth } from "./fetch-with-auth"; export const handleFetchPromise = async ( fetchPromise: Promise @@ -9,6 +9,7 @@ export const handleFetchPromise = async ( try { response = await fetchPromise; } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw { error: "Request error", status_code: undefined, @@ -24,6 +25,7 @@ export const handleFetchPromise = async ( try { body = await response.json(); } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw { error: "Unable to parse JSON response", status_code: err.status, @@ -35,6 +37,7 @@ export const handleFetchPromise = async ( } if (!response.ok) { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw { error: `Response error: ${response.status}`, status_code: response.status, diff --git a/src/util/hass-translation.ts b/src/util/hass-translation.ts index 5378428402..67aa62b0c4 100644 --- a/src/util/hass-translation.ts +++ b/src/util/hass-translation.ts @@ -1,6 +1,6 @@ +import { fetchTranslationPreferences } from "../data/translation"; import { translationMetadata } from "../resources/translations-metadata"; import { HomeAssistant } from "../types"; -import { fetchTranslationPreferences } from "../data/translation"; const STORAGE = window.localStorage || {}; @@ -32,11 +32,9 @@ function findAvailableLanguage(language: string) { return LOCALE_LOOKUP[langLower]; } - for (const lang in Object.keys(translationMetadata.translations)) { - if (lang.toLowerCase() === langLower) { - return lang; - } - } + return Object.keys(translationMetadata.translations).find( + (lang) => lang.toLowerCase() === langLower + ); } /** diff --git a/src/util/legacy-support.js b/src/util/legacy-support.js index f45d14fc3a..ab77431315 100644 --- a/src/util/legacy-support.js +++ b/src/util/legacy-support.js @@ -2,9 +2,10 @@ * Provide legacy support to HTML imports by exposing Polymer and * Polymer.Element on the window object. */ +/* eslint-plugin-disable lit */ +import { html } from "@polymer/polymer/lib/utils/html-tag"; import { PolymerElement } from "@polymer/polymer/polymer-element"; import { Polymer } from "@polymer/polymer/polymer-legacy"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; Polymer.Element = PolymerElement; Polymer.html = html; diff --git a/src/util/register-service-worker.ts b/src/util/register-service-worker.ts index 1d9870019d..6014b0e55a 100644 --- a/src/util/register-service-worker.ts +++ b/src/util/register-service-worker.ts @@ -1,11 +1,12 @@ import { HassElement } from "../state/hass-element"; import { showToast } from "./toast"; +export const supportsServiceWorker = () => + "serviceWorker" in navigator && + (location.protocol === "https:" || location.hostname === "localhost"); + export const registerServiceWorker = (notifyUpdate = true) => { - if ( - !("serviceWorker" in navigator) || - (location.protocol !== "https:" && location.hostname !== "localhost") - ) { + if (!supportsServiceWorker()) { return; } diff --git a/src/util/toast-deleted-success.ts b/src/util/toast-deleted-success.ts index a44028de6c..046e099fec 100644 --- a/src/util/toast-deleted-success.ts +++ b/src/util/toast-deleted-success.ts @@ -1,6 +1,6 @@ -import { showToast } from "./toast"; -import { HomeAssistant } from "../types"; import { ShowToastParams } from "../managers/notification-manager"; +import { HomeAssistant } from "../types"; +import { showToast } from "./toast"; export const showDeleteSuccessToast = ( el: HTMLElement, diff --git a/src/util/toast-saved-success.ts b/src/util/toast-saved-success.ts index 8d7c8c360b..41eb40baca 100644 --- a/src/util/toast-saved-success.ts +++ b/src/util/toast-saved-success.ts @@ -1,5 +1,5 @@ -import { showToast } from "./toast"; import { HomeAssistant } from "../types"; +import { showToast } from "./toast"; export const showSaveSuccessToast = (el: HTMLElement, hass: HomeAssistant) => showToast(el, { diff --git a/src/util/toast.ts b/src/util/toast.ts index 169d09044c..593591f17a 100644 --- a/src/util/toast.ts +++ b/src/util/toast.ts @@ -1,6 +1,5 @@ -import { ShowToastParams } from "../managers/notification-manager"; - import { fireEvent } from "../common/dom/fire_event"; +import { ShowToastParams } from "../managers/notification-manager"; export const showToast = (el: HTMLElement, params: ShowToastParams) => fireEvent(el, "hass-notification", params); diff --git a/test-mocha/common/entity/feature_class_names_test.ts b/test-mocha/common/entity/feature_class_names_test.ts index 70ef71f03a..0928ea98b3 100644 --- a/test-mocha/common/entity/feature_class_names_test.ts +++ b/test-mocha/common/entity/feature_class_names_test.ts @@ -17,7 +17,7 @@ describe("featureClassNames", () => { }); it("Matches no features", () => { - // tslint:disable-next-line + // eslint-disable-next-line const stateObj = { attributes: { supported_features: 64, @@ -27,7 +27,7 @@ describe("featureClassNames", () => { }); it("Matches one feature", () => { - // tslint:disable-next-line + // eslint-disable-next-line const stateObj = { attributes: { supported_features: 72, @@ -40,7 +40,7 @@ describe("featureClassNames", () => { }); it("Matches two features", () => { - // tslint:disable-next-line + // eslint-disable-next-line const stateObj = { attributes: { supported_features: 73, diff --git a/test-mocha/tslint.json b/test-mocha/tslint.json deleted file mode 100644 index 1e32f15d50..0000000000 --- a/test-mocha/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["../tslint.json"], - "rules": { - "no-implicit-dependencies": [true, "dev"] - } -} diff --git a/test/index.html b/test/index.html index 839314e0fa..c258110591 100644 --- a/test/index.html +++ b/test/index.html @@ -1,19 +1,23 @@ - - - - Tests - - - - - - + + + + Tests + + + + + + + diff --git a/test/state-card-display-test.html b/test/state-card-display-test.html index ddf9fcfef1..4dc00562f2 100644 --- a/test/state-card-display-test.html +++ b/test/state-card-display-test.html @@ -1,60 +1,63 @@ - + - - - + + + - - - - - - + + + + + + - - + test("state display text", function (done) { + flush(function () { + const stateDiv = lightOrShadow(card, ".state"); + assert.isOk(stateDiv); + assert.deepEqual(stateDiv.innerText, "Mock Off Text"); + done(); + }); + }); + }); + + diff --git a/test/state-info-test.html b/test/state-info-test.html index cc876f9630..f92af611e7 100644 --- a/test/state-info-test.html +++ b/test/state-info-test.html @@ -1,100 +1,121 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + - - + + diff --git a/translations/ca.json b/translations/ca.json index 6d293dae95..5d813e5109 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -540,11 +540,11 @@ "common": { "cancel": "Cancel·la", "close": "Tanca", - "delete": "Suprimeix", + "delete": "Elimina", "loading": "Carregant", "no": "No", "save": "Desa", - "successfully_deleted": "S'ha suprimit correctament", + "successfully_deleted": "S'ha eliminat correctament", "successfully_saved": "S'ha desat correctament", "undo": "Desfés", "yes": "Sí" @@ -627,7 +627,7 @@ "dismiss": "Desestimar", "editor": { "confirm_delete": "Estàs segur que vols eliminar aquesta entrada?", - "delete": "Suprimeix", + "delete": "Elimina", "enabled_cause": "Desactivada per {cause}.", "enabled_description": "Les entitats desactivades no s’afegiran a Home Assistant.", "enabled_label": "Activa l’entitat", @@ -828,7 +828,7 @@ "editor": { "create": "Crea", "default_name": "Nova àrea", - "delete": "Suprimeix", + "delete": "Elimina", "update": "Actualitza" }, "no_areas": "Sembla que encara no tens cap àrea!.", @@ -1058,7 +1058,7 @@ }, "picker": { "add_automation": "Afegeix automatització", - "delete_automation": "Suprimeix l'automatització", + "delete_automation": "Elimina l'automatització", "delete_confirm": "Estàs segur que vols eliminar aquesta automatització?", "edit_automation": "Edita automatització", "header": "Editor d'automatitzacions", @@ -1334,7 +1334,7 @@ "model": "Model", "no_devices": "Sense dispositius" }, - "delete": "Suprimeix", + "delete": "Elimina", "description": "Gestiona els dispositius connectats", "details": "Aquí tens tots els detalls del dispositiu.", "device_not_found": "Dispositiu no trobat.", @@ -1367,7 +1367,7 @@ "description": "Visió general de totes les entitats conegudes.", "editor": { "confirm_delete": "Estàs segur que vols eliminar aquesta entrada?", - "confirm_delete2": "Si suprimeixes una entrada, no suprimiras l'entitat de Home Assistant. Per fer-ho, has de suprimir la integració '{plataform}' de Home Assistant.", + "confirm_delete2": "Si elimines una entrada, no eliminaràs l'entitat de Home Assistant. Per fer-ho, has d'eliminar la integració '{plataform}' de Home Assistant.", "default_name": "Àrea nova", "delete": "ELIMINA", "enabled_cause": "Desactivada per {cause}.", @@ -1409,7 +1409,7 @@ "introduction2": "Utilitza el registre d'entitats per canviar el nom, canviar l'ID o eliminar l'entrada de Home Assistant.", "remove_selected": { "button": "Elimina seleccionada/es", - "confirm_partly_text": "Només pots eliminar {removable} de les {selected} entitats seleccionades. Les entitats només es poden eliminar quan la integració ja no les està proporcionant.\nA vegades pot ser que hagis de reiniciar Home Assistant per poder eliminar les entitats d'una antiga integració eliminada. Segur que vols eliminar les entitats suprimibles?", + "confirm_partly_text": "Només pots eliminar {removable} de les {selected} entitats seleccionades. Les entitats només es poden eliminar quan la integració ja no les està proporcionant.\nA vegades pot ser que hagis de reiniciar Home Assistant per poder eliminar les entitats d'una antiga integració eliminada. Segur que vols eliminar les entitats?", "confirm_partly_title": "Només es poden eliminar {number} entitats seleccionades.", "confirm_text": "Les entitats només poden eliminar-se quan la seva integració ja no les està proporcionant.", "confirm_title": "Vols eliminar {number} entitat/s?" @@ -1456,7 +1456,7 @@ "caption": "Integracions", "config_entry": { "area": "A {area}", - "delete_button": "Suprimeix {integration}", + "delete_button": "Elimina {integration}", "delete_confirm": "Estàs segur que vols eliminar aquesta integració?", "device_unavailable": "dispositiu no disponible", "entity_unavailable": "entitat no disponible", @@ -1528,7 +1528,7 @@ "default_dashboard": "Aquest és el panell per defecte", "detail": { "create": "Crea", - "delete": "Suprimeix", + "delete": "Elimina", "dismiss": "Tanca", "edit_dashboard": "Edita el panell", "icon": "Icona", @@ -1563,7 +1563,7 @@ "confirm_delete": "Estàs segur que vols eliminar aquest recurs?", "detail": { "create": "Crea", - "delete": "Suprimeix", + "delete": "Elimina", "dismiss": "Tanca", "new_resource": "Afegeix nou recurs", "type": "Tipus de recurs", @@ -1600,7 +1600,7 @@ "description": "Gestiona a quines persones fa seguiment Home Assistant.", "detail": { "create": "Crea", - "delete": "Suprimeix", + "delete": "Elimina", "device_tracker_intro": "Selecciona els dispositius que pertanyen a aquesta persona.", "device_tracker_pick": "Tria un dispositiu per fer-li el seguiment", "device_tracker_picked": "Seguint dispositiu", @@ -1625,13 +1625,13 @@ "default_name": "Nova escena", "devices": { "add": "Afegeix un dispositiu", - "delete": "Suprimeix el dispositiu", + "delete": "Elimina el dispositiu", "header": "Dispositius", "introduction": "Afegeix els dispositius que vols incloure a l'escena. Configura tots els dispositius en els estats que es corresponguin amb aquesta escena." }, "entities": { "add": "Afegeix una entitat", - "delete": "Suprimeix l'entitat", + "delete": "Elimina l'entitat", "device_entities": "Si afegeixes una entitat que pertany a un dispositiu, s'afegirà el dispositiu.", "header": "Entitats", "introduction": "Les entitats que no pertanyen a cap dispositiu es poden configurar aquí.", @@ -1647,7 +1647,7 @@ "picker": { "add_scene": "Afegeix escena", "delete_confirm": "Estàs segur que vols eliminar aquesta escena?", - "delete_scene": "Suprimeix l'escena", + "delete_scene": "Elimina l'escena", "edit_scene": "Edita escena", "header": "Editor d’escenes", "headers": { @@ -1668,7 +1668,7 @@ "alias": "Nom", "default_name": "Nou script", "delete_confirm": "Estàs segur que vols eliminar aquest script?", - "delete_script": "Suprimeix l'script", + "delete_script": "Elimina l'script", "header": "Script: {name}", "introduction": "Utilitza els scripts per executar seqüències d’accions.", "link_available_actions": "Més informació sobre les accions disponibles.", @@ -1882,7 +1882,7 @@ "description": "Gestiona les zones en les quals es fa seguiment de persones.", "detail": { "create": "Crea", - "delete": "Suprimeix", + "delete": "Elimina", "icon": "Icona", "icon_error_msg": "El nom de la icona ha de tenir el format prefix:nom_icona, per exemple: mdi: home", "latitude": "Latitud", @@ -2164,6 +2164,7 @@ "name": "Filtre d'entitats" }, "entity": { + "description": "La targeta entitat mostra una visualització ràpida dels estats d'una o més entitats.", "name": "Entitat" }, "gauge": { @@ -2407,7 +2408,7 @@ "confirm_delete_existing_cards": "Si elimines aquesta vista, també s'eliminaran les targetes que conté", "confirm_delete_existing_cards_text": "Estàs segur que vols eliminar la vista '{name}'? La vista conté {number} targetes que també s'eliminaran. Aquesta acció no és reversible.", "confirm_delete_text": "Estàs segur que vols eliminar la vista '{name}'?", - "existing_cards": "No pots suprimir una visualització si conté targetes, elimina-les primer." + "existing_cards": "No pots eliminar una visualització si conté targetes, elimina-les primer." }, "warning": { "attribute_not_found": "L'atribut {attribute} de {entity} no és disponible.", diff --git a/translations/cy.json b/translations/cy.json index c838cc6583..96e865f91c 100644 --- a/translations/cy.json +++ b/translations/cy.json @@ -1121,55 +1121,81 @@ "available_states": "Cyflerau posib", "name": "Panel Larwm" }, + "button": { + "description": "Mae'r cerdyn Botwm yn caniatáu ichi ychwanegu botymau i gyflawni tasgau." + }, "conditional": { - "name": "Amodol" + "card": "Cerdyn", + "change_type": "Newid math", + "condition_explanation": "Bydd y cerdyn yn cael ei ddangos pan fydd POB amod isod yn cael eu cyflawni.", + "conditions": "Amodau", + "current_state": "cyfredol", + "name": "Amodol", + "state_equal": "Cyflwr yn hafal i", + "state_not_equal": "Cyflwr ddim yn hafal i" }, "entities": { + "description": "Y cerdyn Endidau yw'r math mwyaf cyffredin o gerdyn. Mae'n grwpio eitemau gyda'i gilydd fewn i restrau.", "name": "Endidau" }, "entity-button": { "name": "Botwm Endid" }, "entity-filter": { + "description": "Mae'r cerdyn Hidlo Endid yn caniatáu ichi ddiffinio rhestr o endidau ydych eisiau diilyn pan fyddant mewn cyflwr penodol.", "name": "Hidlo Endid" }, "entity": { + "description": "Mae'r cerdyn Endid yn rhoi trosolwg cyflym i chi o gyflwr eich endid.", "name": "Endid" }, "gauge": { + "description": "Mae'r cerdyn Gauge yn gerdyn sylfaenol sy'n caniatáu gweld data synhwyrydd yn weledol.", "name": "Medrydd" }, "generic": { "attribute": "Priodoledd", "double_tap_action": "Gweithred tab dwbl", - "no_theme": "Dim thema" + "manual": "Llawlyfr", + "manual_description": "Angen ychwanegu cerdyn 'custom' neu ddim ond eisiau ysgrifennu'r yaml?", + "no_theme": "Dim thema", + "state": "Stad" }, "glance": { + "description": "Mae'r cerdyn Cipolwg yn ddefnyddiol i grwpio synwyryddion lluosog mewn trosolwg cryno.", "name": "Cipolwg" }, "history-graph": { + "description": "Mae'r cerdyn Graff Hanes yn caniatáu ichi arddangos graff ar gyfer pob un o'r endidau a restrir.", "name": "Graff Hanes" }, "horizontal-stack": { + "description": "Mae'r cerdyn Stack Llorweddol yn caniatáu ichi bentyrru cardiau lluosog, felly maen nhw bob amser yn eistedd wrth ymyl ei gilydd yng ngofod un golofn.", "name": "Stac Fertigol" }, "iframe": { + "description": "Mae'r cerdyn Tudalen we yn eich galluogi i blannu eich hoff dudalen we i Home Assistant.", "name": "iFrame" }, "light": { + "description": "Mae'r cerdyn Golau yn caniatáu ichi newid disgleirdeb y golau.", "name": "Golau" }, "map": { + "description": "Y cerdyn Map sy'n caniatáu ichi arddangos endidau ar fap.", "hours_to_show": "Oriau i'w Dangos", "name": "Map" }, "markdown": { + "description": "Defnyddir y cerdyn marcio i rendro Markdown.", "name": "Marclawr" }, "media-control": { + "description": "Defnyddir y cerdyn Rheoli Cyfryngau i arddangos endidau chwaraewr cyfryngau ar ryngwyneb â rheolyddion hawdd eu defnyddio.", "name": "Rheoli cyfryngau" }, "picture-elements": { + "description": "Mae'r cerdyn Elfennau Lluniau yn un o'r mathau mwyaf amlbwrpas o gardiau. Mae'r cardiau'n caniatáu ichi osod eiconau neu destun a hyd yn oed gwasanaethau! Ar ddelwedd yn seiliedig ar gyfesurynnau.", "name": "Elfennau'r Llun" }, "picture-entity": { @@ -1181,6 +1207,7 @@ "name": "Cipolwg ar lun" }, "picture": { + "description": "Mae'r cerdyn Lluniau yn caniatáu ichi osod delwedd i'w defnyddio ar gyfer llywio i amrywiol lwybrau yn eich rhyngwyneb neu i alw gwasanaeth.", "name": "Llun" }, "plant-status": { diff --git a/translations/da.json b/translations/da.json index dd014a6c52..50edf120b8 100644 --- a/translations/da.json +++ b/translations/da.json @@ -2164,6 +2164,7 @@ "name": "Entitetsfilter" }, "entity": { + "description": "Entitetskortet giver dig et hurtigt overblik over din entitets tilstand.", "name": "Entitet" }, "gauge": { diff --git a/translations/de.json b/translations/de.json index 6d2a0196b5..dccf2b1405 100644 --- a/translations/de.json +++ b/translations/de.json @@ -2164,6 +2164,7 @@ "name": "Entität Filter" }, "entity": { + "description": "Mit der Entitätskarte erhalten Sie einen schnellen Überblick über den Status Ihrer Entität.", "name": "Entität" }, "gauge": { diff --git a/translations/el.json b/translations/el.json index 0b07c10b3f..295687eadc 100644 --- a/translations/el.json +++ b/translations/el.json @@ -394,7 +394,7 @@ }, "ui": { "auth_store": { - "ask": "Θέλετε να αποθηκεύσετε αυτή την σύνδεση;", + "ask": "Θέλετε να αποθηκεύσετε αυτή τη σύνδεση;", "confirm": "Αποθήκευση σύνδεσης", "decline": "Όχι, ευχαριστώ" }, @@ -509,6 +509,7 @@ "attributes": { "air_pressure": "Πίεση αέρα", "humidity": "Υγρασία", + "precipitation": "Κατακρήμνιση", "temperature": "Θερμοκρασία", "visibility": "Ορατότητα", "wind_speed": "Ταχύτητα ανέμου" @@ -531,16 +532,21 @@ "wnw": "ΔΒΔ", "wsw": "ΔΝΔ" }, - "forecast": "Πρόγνωση" + "forecast": "Πρόγνωση", + "high": "Υψηλή", + "low": "Χαμηλή" } }, "common": { "cancel": "Ακύρωση", "close": "Κλείστε", + "delete": "Διαγραφή", "loading": "Φόρτωση", "no": "Όχι", "save": "Αποθήκευση", + "successfully_deleted": "Η διαγραφή ολοκληρώθηκε με επιτυχία", "successfully_saved": "Αποθηκεύτηκε με επιτυχία", + "undo": "Αναίρεση", "yes": "Ναι" }, "components": { @@ -606,10 +612,12 @@ }, "entity_registry": { "editor": { + "delete": "Διαγραφή", "enabled_cause": "Απενεργοποιήθηκε από {cause}.", "enabled_label": "Ενεργοποίηση οντότητας", "entity_id": "Αναγνωριστικό οντότητας", - "unavailable": "Αυτή η οντότητα δεν είναι προς το παρόν διαθέσιμη." + "unavailable": "Αυτή η οντότητα δεν είναι προς το παρόν διαθέσιμη.", + "update": "Ενημέρωση" } }, "generic": { @@ -617,8 +625,26 @@ "default_confirmation_title": "Είστε σίγουροι;", "ok": "Εντάξει" }, + "helper_settings": { + "input_datetime": { + "date": "Ημερομηνία", + "datetime": "Ημερομηνία και ώρα", + "time": "Ώρα" + }, + "input_text": { + "max": "Μέγιστο μήκος", + "min": "Ελάχιστο μήκος" + } + }, "more_info_control": { "dismiss": "Κλείσιμο διαλόγου.", + "restored": { + "confirm_remove_text": "Είστε βέβαιοι πως θέλετε να καταργήσετε αυτή την οντότητα;", + "confirm_remove_title": "Θέλετε να αφαιρέσετε αυτή την οντότητα;", + "not_provided": "Αυτή η οντότητα επί του παρόντος δεν είναι διαθέσιμη και είναι απομεινάρι από μια καταργημένη, τροποποιημένη ή δυσλειτουργική ενσωμάτωση ή συσκευή.", + "remove_action": "Αφαίρεση οντότητας", + "remove_intro": "Εάν η οντότητα δεν χρησιμοποιείται πλέον, μπορείτε να την καθαρίσετε αφαιρώντας την." + }, "script": { "last_action": "Τελευταία Ενέργεια" }, @@ -713,16 +739,24 @@ "areas": { "caption": "Περιοχή Μητρώου", "create_area": "ΔΗΜΙΟΥΡΓΙΑ ΠΕΡΙΟΧΗΣ", + "data_table": { + "area": "Περιοχή", + "devices": "Συσκευές" + }, + "delete": { + "confirmation_text": "Όλες οι συσκευές αυτής της περιοχής θα καταστούν μη εκχωρημένες", + "confirmation_title": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή την περιοχή;" + }, "description": "Επισκόπηση όλων των περιοχών στο σπίτι σας.", "editor": { - "create": "ΔΗΜΙΟΥΡΓΙΑ", + "create": "Δημιουργία", "default_name": "Νέα περιοχή", - "delete": "ΔΙΑΓΡΑΦΗ", - "update": "ΕΝΗΜΕΡΩΣΗ" + "delete": "Διαγραφή", + "update": "Ενημέρωση" }, "no_areas": "Φαίνεται ότι δεν έχετε ορίσει ακόμα κάποια περιοχή!", "picker": { - "create_area": "ΔΗΜΙΟΥΡΓΙΑ ΠΕΡΙΟΧΗΣ", + "create_area": "Δημιουργία Περιοχής", "header": "Περιοχή Μητρώου", "integrations_page": "Σελίδα ενσωματώσεων", "introduction": "Οι περιοχές χρησιμοποιούνται για την οργάνωση της τοποθεσίας των συσκευών. Αυτές οι πληροφορίες θα χρησιμοποιηθούν σε όλο το Home Assistant για να σας βοηθήσουν στην οργάνωση της διασύνδεσης, των αδειών και των ενσωματώσεων σας σε άλλα συστήματα.", @@ -950,6 +984,9 @@ "delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτόν τον αυτοματισμό;", "edit_automation": "Επεξεργασία αυτοματισμού", "header": "Επεξεργαστής αυτοματισμού", + "headers": { + "name": "Ονομασία" + }, "introduction": "Ο επεξεργαστής αυτοματισμού σας επιτρέπει να δημιουργείτε και να επεξεργάζεστε αυτοματισμούς. Διαβάστε τις οδηγίες (https://home-assistant.io/docs/automation/editor/) για να βεβαιωθείτε ότι έχετε ρυθμίσει σωστά το Home Assistant.", "learn_more": "Μάθετε περισσότερα σχετικά με τους αυτοματισμούς", "no_automations": "Δεν ήταν δυνατή η εύρεση επεξεργάσιμων αυτοματισμών", @@ -978,7 +1015,7 @@ "connection_status": "Κατάσταση σύνδεσης Cloud", "fetching_subscription": "Λήψη συνδρομής…", "google": { - "config_documentation": "Έγγραφα παραμετροποίησης", + "config_documentation": "Τεκμηρίωση παραμετροποίησης", "devices_pin": "Κωδικός pin συσκευών ασφαλείας", "enable_ha_skill": "Ενεργοποιήστε την ικανότητα του Home Assistant για τον Google Assistant.", "enable_state_reporting": "Ενεργοποίηση αναφορών κατάστασης", @@ -990,7 +1027,7 @@ "manage_entities": "Διαχείριση Οντοτήτων", "security_devices": "Συσκευές ασφαλείας", "sync_entities": "Συγχρονισμός οντοτήτων στο Google", - "title": "Βοηθός Google" + "title": "Google Assistant" }, "integrations": "Ενσωματώσεις", "integrations_introduction": "Οι ενσωματώσεις για το Home Assistant Cloud σάς επιτρέπουν να συνδέεστε με υπηρεσίες στο cloud χωρίς να χρειάζεται να εκθέτετε δημοσίως την παρουσία του Home Assistant στο Internet.", @@ -1206,6 +1243,7 @@ "automations": "Αυτοματισμοί", "cant_edit": "Μπορείτε να επεξεργαστείτε μόνο στοιχεία που έχουν δημιουργηθεί στο UI.", "caption": "Συσκευές", + "confirm_delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη συσκευή;", "confirm_rename_entity_ids": "Θέλετε επίσης να μετονομάσετε τα αναγνωριστικά οντότητας των οντοτήτων σας;", "data_table": { "area": "Περιοχή", @@ -1213,16 +1251,21 @@ "device": "Συσκευή", "integration": "Ενσωμάτωση", "manufacturer": "Κατασκευαστής", - "model": "Μοντέλο" + "model": "Μοντέλο", + "no_devices": "Δεν υπάρχουν συσκευές" }, + "delete": "Διαγραφή", "description": "Διαχείριση συνδεδεμένων συσκευών", "details": "Δείτε όλες τις λεπτομέρειες της συσκευής σας.", "device_not_found": "Η συσκευή δε βρέθηκε.", "entities": { - "add_entities_lovelace": "Προσθήκη στο Lovelace" + "add_entities_lovelace": "Προσθήκη στο Lovelace", + "entities": "Οντότητες", + "none": "Αυτή η συσκευή δεν έχει οντότητες" }, "info": "Πληροφορίες συσκευής", "name": "Όνομα", + "no_devices": "Δεν υπάρχουν συσκευές", "scene": { "create": "Δημιουργία σκηνής με τη συσκευή", "no_scenes": "Δεν υπάρχουν σκηνές", @@ -1244,26 +1287,64 @@ "enabled_cause": "Απενεργοποιήθηκε από τo {cause}.", "enabled_description": "Απενεργοποιημένες οντότητες δεν θα προστεθούν στον Home Assistant", "enabled_label": "Ενεργοποίηση οντότητας", + "entity_id": "Αναγνωριστικό οντότητας", "note": "Σημείωση: αυτό μπορεί να μη λειτουργεί ακόμα με όλες τις ενσωματώσεις.", "unavailable": "Αυτή η οντότητα δεν είναι προς το παρόν διαθέσιμη.", "update": "ΕΝΗΜΕΡΩΣΗ" }, "picker": { + "disable_selected": { + "button": "Απενεργοποίηση επιλεγμένων", + "confirm_text": "Οι απενεργοποιημένες οντότητες δεν θα προστεθούν στον Home Assistant", + "confirm_title": "Θέλετε να απενεργοποιήσετε {number} οντότητες;" + }, + "enable_selected": { + "button": "Ενεργοποίηση επιλεγμένων", + "confirm_title": "Θέλετε να ενεργοποιήσετε {number} οντότητες;" + }, + "filter": { + "filter": "Φίλτρο", + "show_disabled": "Προβολή απενεργοποιημένων οντοτήτων", + "show_unavailable": "Προβολή μη διαθέσιμων οντοτήτων" + }, "header": "Μητρώο οντοτήτων", "headers": { "enabled": "Ενεργοποιημένη", "entity_id": "Αναγνωριστικό οντότητας", "integration": "Ενσωμάτωση", - "name": "Όνομα" + "name": "Όνομα", + "status": "Κατάσταση" }, "integrations_page": "Σελίδα ενσωματώσεων", "introduction": "Ο Home Assistant διατηρεί μητρώο από κάθε μοναδική οντότητα που ανιχνεύει. Αυτές οι οντότητες έχουν το δικό τους μοναδικό αναγνωριστικό ID.", "introduction2": "Χρησιμοποιήστε το μητρώο οντοτήτων για να παρακάμψετε το όνομα, να αλλάξετε το αναγνωριστικό οντότητας ή να καταργήσετε την καταχώρηση από το Home Assistant. Σημειώστε ότι η κατάργηση της καταχώρησης δεν θα καταργήσει την οντότητα. Για να το κάνετε αυτό, ακολουθήστε τον παρακάτω σύνδεσμο και αφαιρέστε την από τη σελίδα ενσωματώσεων.", + "remove_selected": { + "button": "Αφαίρεση επιλεγμένων", + "confirm_title": "θέλετε να αφαιρέσετε {number} οντότητες;" + }, + "selected": "Επιλέχθηκαν {number} ", "show_disabled": "Προβολή απενεργοποιημένων οντοτήτων", + "status": { + "disabled": "Απενεργοποιημένη", + "ok": "Οκ", + "unavailable": "Μη Διαθέσιμη" + }, "unavailable": "(μη διαθέσιμο)" } }, "header": "Διαμόρφωση του Home Assistant", + "helpers": { + "picker": { + "headers": { + "entity_id": "Αναγνωριστικό οντότητας", + "name": "Ονομασία" + } + }, + "types": { + "input_number": "Αριθμός", + "input_text": "Κείμενο" + } + }, "integrations": { "caption": "Ενσωματώσεις", "config_entry": { @@ -1288,7 +1369,7 @@ "add_area": "Προσθήκη περιοχής", "area_picker_label": "Περιοχή", "close": "Κλείστε", - "created_config": "Δημιουργήθηκε ρύθμιση παραμέτρων για το {name}.", + "created_config": "Δημιουργήθηκε παραμετροποίηση για το {name}.", "error_saving_area": "Σφάλμα κατά την αποθήκευση περιοχής: {error}", "external_step": { "description": "Αυτό το βήμα απαιτεί να επισκεφτείτε μια εξωτερική ιστοσελίδα για να ολοκληρωθεί.", @@ -1296,6 +1377,7 @@ }, "failed_create_area": "Αποτυχία δημιουργίας περιοχής.", "finish": "Τέλος", + "loading_first_time": "Παρακαλώ περιμένετε καθώς εγκαθίσταται η ενσωμάτωση", "name_new_area": "Το όνομα της νέας περιοχής;", "not_all_required_fields": "Δε συμπληρώνονται όλα τα υποχρεωτικά πεδία.", "submit": "Υποβολή" @@ -1324,6 +1406,27 @@ "note_about_website_reference": "Περισσότερα είναι διαθέσιμα στο" }, "introduction": "Εδώ είναι δυνατή η διαμόρφωση του Home Assistant και των εξαρτημάτων. Δεν είναι δυνατή η διαμόρφωση όλων από την διεπαφή χρήστη (UI) αλλά εργαζόμαστε πάνω σε αυτό.", + "lovelace": { + "dashboards": { + "caption": "Επισκόπηση", + "default_dashboard": "Αυτή είναι η προεπιλεγμένη επισκόπηση", + "detail": { + "icon": "Εικονίδιο", + "title": "Τίτλος", + "title_required": "Απαιτείται τίτλος." + }, + "picker": { + "headers": { + "default": "Προεπιλογή" + } + } + }, + "resources": { + "picker": { + "no_resources": "Δεν υπάρχουν πόροι" + } + } + }, "person": { "add_person": "Προσθέστε Άτομο", "caption": "Άτομα", @@ -1367,7 +1470,7 @@ "delete": "Διαγραφή οντότητας", "device_entities": "Εάν προσθέσετε μια οντότητα που ανήκει σε μια συσκευή, η συσκευή θα προστεθεί.", "header": "Οντότητες", - "introduction": "Μπορείτε να ορίσετε εδώ οντότητες που δεν ανήκουν σε μια συσκευή.", + "introduction": "Εδώ μπορείτε να ορίσετε οντότητες που δεν ανήκουν σε κάποια συσκευή.", "without_device": "Οντότητες χωρίς συσκευές" }, "introduction": "Χρησιμοποιήστε σκηνές για να ζωντανέψουν το σπίτι σας", @@ -1383,6 +1486,9 @@ "delete_scene": "Διαγραφή σκηνής", "edit_scene": "Επεξεργασία σκηνής", "header": "Επεξεργαστής σκηνής", + "headers": { + "name": "Ονομασία" + }, "introduction": "Ο επεξεργαστής σκηνών σας επιτρέπει να δημιουργείτε και να επεξεργάζεστε σκηνές. Παρακαλώ ακολουθήστε τον παρακάτω σύνδεσμο για να διαβάσετε τις οδηγίες για να βεβαιωθείτε ότι έχετε διαμορφώσει σωστά το Home Assistant.", "learn_more": "Μάθετε περισσότερα σχετικά με τις σκηνές", "no_scenes": "Δεν μπορέσαμε να βρούμε καμία επεξεργάσιμη σκηνή", @@ -1397,12 +1503,12 @@ "editor": { "alias": "Όνομα", "default_name": "Νέα δέσμη ενεργειών", - "delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν τη δέσμη ενεργειών;", + "delete_confirm": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη δέσμη ενεργειών;", "delete_script": "Διαγραφή δέσμης ενεργειών", "header": "Δέσμη ενεργειών: {name}", "introduction": "Χρησιμοποιήστε δέσμες ενεργειών για να εκτελέσετε μια ακολουθία ενεργειών.", "link_available_actions": "Μάθετε περισσότερα σχετικά με τις διαθέσιμες ενέργειες.", - "load_error_not_editable": "Μόνο δέσμες ενεργειών μέσα στο scripts.yaml είναι επεξεργάσιμα.", + "load_error_not_editable": "Μόνο οι δέσμες ενεργειών που βρίσκονται μέσα στο scripts.yaml είναι επεξεργάσιμες", "sequence": "Ακολουθία", "sequence_sentence": "Η ακολουθία των ενεργειών αυτής της δέσμης ενεργειών." }, @@ -1410,6 +1516,9 @@ "add_script": "Προσθήκη δέσμης ενεργειών", "edit_script": "Επεξεργασία δέσμης ενεργειών", "header": "Πρόγραμμα επεξεργασίας δέσμης ενεργειών", + "headers": { + "name": "Ονομασία" + }, "introduction": "Ο επεξεργαστής δέσμης ενεργειών σας επιτρέπει να δημιουργείτε και να επεξεργάζεστε σκηνές. Παρακαλώ ακολουθήστε τον παρακάτω σύνδεσμο για να διαβάσετε τις οδηγίες για να βεβαιωθείτε ότι έχετε διαμορφώσει σωστά το Home Assistant.", "learn_more": "Μάθετε περισσότερα σχετικά με τα σενάρια", "no_scripts": "Δεν μπορέσαμε να βρούμε δέσμες ενεργειών με δυνατότητα επεξεργασίας", @@ -1424,8 +1533,8 @@ "automation": "Επαναφόρτωση αυτοματισμών", "core": "Επαναφόρτωση τοποθεσίας και προσαρμογών", "group": "Επαναφόρτωση ομάδων", - "heading": "Επαναφόρτωση ρυθμίσεων", - "introduction": "Ορισμένα τμήματα του Home Assistant μπορούν να φορτωθούν ξανά χωρίς να απαιτείται επανεκκίνηση. Το πάτημα της φόρτωσης θα ξεφορτώσει την τρέχουσα διαμόρφωση και θα φορτώσει τη νέα.", + "heading": "Επαναφόρτωση παραμετροποίησης YAML ", + "introduction": "Ορισμένα τμήματα του Home Assistant μπορούν να επαναφορτωθούν χωρίς να απαιτείται επανεκκίνηση. Πατώντας \"επαναφόρτωση\" θα ξεφορτωθεί η τρέχουσα παραμετροποίηση YAML και θα φορτωθεί η νέα.", "scene": "Επαναφόρτωση σκηνών", "script": "Επαναφόρτωση δέσμης εντολών" }, @@ -1459,6 +1568,7 @@ "editor": { "activate_user": "Ενεργοποίηση χρήστη", "active": "Ενεργό", + "admin": "Διαχειριστής", "caption": "Προβολή χρήστη", "change_password": "Αλλαγή Κωδικού", "confirm_user_deletion": "Είστε σίγουροι ότι θέλετε να διαγράψετε το χρήστη {name};", @@ -1468,14 +1578,21 @@ "group": "Ομάδα", "group_update_failed": "Η ενημέρωση της ομάδας απέτυχε:", "id": "Αναγνωριστικό", + "name": "Ονομασία", "owner": "Ιδιοκτήτης", "rename_user": "Μετονομασία χρήστη", "system_generated": "Δημιουργήθηκε από το σύστημα", "system_generated_users_not_removable": "Δεν είναι δυνατή η διαγραφή χρηστών που δημιουργήθηκαν από το σύστημα", "unnamed_user": "Χρήστης χωρίς όνομα", + "update_user": "Ενημέρωση", "user_rename_failed": "Η μετονομασία του χρήστη απέτυχε:" }, "picker": { + "headers": { + "group": "Ομάδα", + "name": "Ονομασία", + "system": "Σύστημα" + }, "system_generated": "Δημιουργήθηκε από το σύστημα", "title": "Χρήστες" } @@ -1522,6 +1639,29 @@ "device_name_placeholder": "Όνομα χρήστη", "update_name_button": "Ενημέρωση ονόματος" }, + "groups": { + "add_members": "Προσθήκη Μελών", + "adding_members": "Προσθήκη Μελών", + "create": "Δημιουργία ομάδας", + "create_group": "Zigbee Home Automation - Δημιουργία ομάδας", + "create_group_details": "Καταχωρείστε τις απαραίτητες πληροφορίες για να δημιουργήσετε μια νέα ομάδα Zigbee", + "creating_group": "Δημιουργία ομάδας", + "group_details": "Εδώ βρίσκονται όλες οι πληροφορίες για την επιλεγμένη ομάδα", + "group_id": "Αναγνωριστικό ομάδας", + "group_info": "Πληροφορίες ομάδας", + "group_name_placeholder": "Όνομα ομάδας", + "group_not_found": "Η ομάδα δεν βρέθηκε!", + "groups": "Ομάδες", + "header": "Zigbee Home Automation - Διαχείριση Ομάδων", + "introduction": "Δημιουργήστε και τροποποιήστε ομάδες Zigbee", + "manage_groups": "Διαχειριστείτε τις ομάδες Zigbee", + "members": "Μέλη", + "remove_groups": "Αφαίρεση ομάδων", + "remove_members": "Αφαίρεση Μελών", + "removing_groups": "Αφαίρεση ομάδων", + "removing_members": "Αφαίρεση Μελών", + "zha_zigbee_groups": "ZHA oμάδες Zigbee" + }, "network_management": { "header": "Διαχείριση δικτύου", "introduction": "Εντολές που επηρεάζουν ολόκληρο το δίκτυο" @@ -1569,7 +1709,7 @@ "config_parameter": "Παράμετρος διαμόρφωσης", "config_value": "Τιμή διαμόρφωσης", "false": "Ψευδής", - "header": "Επιλογές ρύθμισης παραμέτρων κόμβου", + "header": "Επιλογές Παραμετροποίησης κόμβου", "seconds": "Δευτερόλεπτα", "set_config_parameter": "Ορίστε την παράμετρο διαμόρφωσης", "set_wakeup": "Ορισμός διαστήματος αφύπνισης", @@ -1585,7 +1725,7 @@ "cancel_command": "Ακύρωση εντολής", "heal_network": "Θεραπεία δικτύου", "remove_node": "Κατάργηση κόμβου", - "save_config": "Αποθήκευση ρύθμισης παραμέτρων", + "save_config": "Αποθήκευση Παραμετροποίησης", "soft_reset": "Επαναφορά μέσω λογισμικού", "start_network": "Έναρξη δικτύου", "stop_network": "Διακοπή δικτύου", @@ -1745,7 +1885,7 @@ } }, "changed_toast": { - "message": "Οι ρυθμίσεις Lovelace άλλαξαν, θέλεις να ανανεώσεις;", + "message": "Η παραμετροποίηση του Lovelace για αυτή την επισκόπηση έχει επικαιροποιηθεί, θέλεις να κάνεις ανανέωση για να δεις τις αλλαγές;", "refresh": "Ανανέωση" }, "editor": { @@ -1758,7 +1898,12 @@ "name": "Πίνακας συναγερμών" }, "conditional": { - "name": "Υπό όρους" + "card": "Κάρτα", + "conditions": "Συνθήκες", + "current_state": "Τρέχουσα", + "name": "Υπό όρους", + "state_equal": "Η κατάσταση ισούται με", + "state_not_equal": "Η κατάσταση δεν ισούται με" }, "config": { "optional": "Προαιρετικό", @@ -1775,6 +1920,10 @@ "entity-filter": { "name": "Φίλτρο οντοτήτων" }, + "entity": { + "description": "Η κάρτα Οντότητα σας παρέχει μια γρήγορη επισκόπηση της κατάστασης της οντότητας σας.", + "name": "Οντότητα" + }, "gauge": { "name": "Μετρητής", "severity": { @@ -1786,8 +1935,10 @@ }, "generic": { "aspect_ratio": "Αναλογία απεικόνισης", + "attribute": "Ιδιότητα", "camera_image": "Οντότητα κάμερας", "camera_view": "Προβολή κάμερας", + "double_tap_action": "Ενέργεια διπλού πατήματος", "entities": "Οντότητες", "entity": "Οντότητα", "hold_action": "Ενέργεια διακράτησης", @@ -1798,10 +1949,12 @@ "maximum": "Μέγιστο", "minimum": "Ελάχιστο", "name": "Όνομα", + "no_theme": "Χωρίς θέμα", "refresh_interval": "Χρονικό διάστημα ανανέωσης", "show_icon": "Εμφάνιση εικονιδίου;", "show_name": "Εμφάνιση ονόματος;", "show_state": "Εμφάνιση κατάστασης;", + "state": "Κατάσταση", "tap_action": "Ενέργεια πατήματος", "theme": "Θέμα", "title": "Τίτλος", @@ -1819,7 +1972,7 @@ "name": "Οριζόντια διάταξη" }, "iframe": { - "name": "iFrame" + "name": "Ιστοσελίδα" }, "light": { "name": "Φως" @@ -1871,9 +2024,14 @@ "name": "Πρόγνωση καιρού" } }, + "cardpicker": { + "custom_card": "Προσαρμοσμένη", + "no_description": "Δεν υπάρχει διαθέσιμη περιγραφή" + }, "edit_card": { "add": "Προσθήκη κάρτας", "delete": "Διαγραφή", + "duplicate": "Διπλότυπη κάρτα", "edit": "Επεξεργασία", "header": "Διαμόρφωση κάρτας", "move": "Μετακίνηση", @@ -1897,7 +2055,8 @@ "header": "Ρυθμίσεις προβολής", "header_name": "{name} Προβολή διαμόρφωσης", "move_left": "Μετακίνηση προβολής αριστερά", - "move_right": "Μετακίνηση προβολής δεξιά" + "move_right": "Μετακίνηση προβολής δεξιά", + "tab_visibility": "Ορατότητα" }, "header": "Επεξεργασία περιβάλλοντος χρήστη", "menu": { @@ -1923,11 +2082,15 @@ }, "save_config": { "cancel": "Δεν πειράζει", + "empty_config": "Ξεκινήστε με μια κενή επισκόπηση", "header": "Πάρτε τον έλεγχο του περιβάλλοντος χρήστη στο Lovelace", "para": "Από προεπιλογή, το Home Assistant θα διατηρήσει το περιβάλλον χρήστη που έχετε ενημερώνοντας το όταν θα γίνονται διαθέσιμες νέες οντότητες ή στοιχεία Lovelace. Αν πάρετε τον έλεγχο, δεν θα πραγματοποιούμε πλέον αλλαγές για εσάς.", "para_sure": "Είστε βέβαιος ότι θέλετε να πάρετε τον έλεγχο του περιβάλλοντος χρήστη;", "save": "Πάρτε τον έλεγχο" }, + "suggest_card": { + "create_own": "Επιλέξτε άλλη κάρτα" + }, "view": { "panel_mode": { "description": "Αυτό καθιστά την πρώτη κάρτα σε πλήρες πλάτος· άλλες κάρτες σε αυτήν την προβολή δε θα αποτυπωθούν.", @@ -1944,6 +2107,9 @@ "unused_entities": "Αχρησιμοποίητες οντότητες" }, "reload_lovelace": "Επαναφόρτωση Lovelace", + "reload_resources": { + "refresh_body": "Πρέπει να ανανεώσετε τη σελίδα για να ολοκληρώσετε την επαναφόρτωση, θέλετε να την ανανεώσετε τώρα;" + }, "unused_entities": { "available_entities": "Αυτές είναι οι οντότητες που έχετε στη διάθεσή σας, αλλά δεν έχετε ακόμα στο UI του Lovelace.", "domain": "Τομέας", @@ -1954,7 +2120,7 @@ "title": "Αχρησιμοποίητες οντότητες" }, "views": { - "confirm_delete": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την προβολή;", + "confirm_delete": "Θέλετε να διαγράψετε αυτήν την προβολή;", "existing_cards": "Δεν μπορείτε να διαγράψετε μια προβολή που περιέχει κάρτες. Αφαιρέστε πρώτα τις κάρτες." }, "warning": { @@ -2154,6 +2320,11 @@ "submit": "Υποβολή" }, "current_user": "Αυτήν τη στιγμή είστε συνδεδεμένος ως {fullName}.", + "dashboard": { + "description": "Προεπιλέξτε μια επισκόπηση για αυτή τη συσκευή", + "dropdown_label": "Επισκόπηση", + "header": "Επισκόπηση" + }, "force_narrow": { "description": "Αυτό θα κρύψει την πλαϊνή μπάρα από προεπιλογή, παρόμοια με την εμπειρία κινητού.", "header": "Να αποκρύπτεται πάντα η πλαϊνή μπάρα" diff --git a/translations/es-419.json b/translations/es-419.json index 6586e91f44..528a72e388 100644 --- a/translations/es-419.json +++ b/translations/es-419.json @@ -394,9 +394,9 @@ }, "ui": { "auth_store": { - "ask": "¿Deseas guardar este inicio de sesión?", - "confirm": "Guardar inicio de sesión", - "decline": "No, gracias" + "ask": "¿Desea permanecer conectado?", + "confirm": "Sí", + "decline": "No" }, "card": { "alarm_control_panel": { @@ -411,7 +411,7 @@ }, "automation": { "last_triggered": "Última activación", - "trigger": "Desencadenar" + "trigger": "Ejecutar" }, "camera": { "not_available": "Imagen no disponible" @@ -509,6 +509,7 @@ "attributes": { "air_pressure": "Presión atmosférica", "humidity": "Humedad", + "precipitation": "Precipitación", "temperature": "Temperatura", "visibility": "Visibilidad", "wind_speed": "Velocidad del viento" @@ -531,16 +532,21 @@ "wnw": "ONO", "wsw": "OSO" }, - "forecast": "Pronóstico" + "forecast": "Pronóstico", + "high": "Alto", + "low": "Bajo" } }, "common": { "cancel": "Cancelar", "close": "Cerrar", + "delete": "Eliminar", "loading": "Cargando", "no": "No", "save": "Guardar", + "successfully_deleted": "Eliminado exitosamente", "successfully_saved": "Guardado correctamente", + "undo": "Deshacer", "yes": "Sí" }, "components": { @@ -581,6 +587,7 @@ "entity": "Entidades relacionadas", "group": "Parte de los siguientes grupos", "integration": "Integración", + "no_related_found": "No se encontraron elementos relacionados.", "scene": "Parte de las siguientes escenas", "script": "Parte de los siguientes scripts" }, @@ -602,9 +609,10 @@ }, "dialogs": { "config_entry_system_options": { - "enable_new_entities_description": "Si está deshabilitado, las entidades recién descubiertas no se agregarán automáticamente a Home Assistant.", + "enable_new_entities_description": "Si está deshabilitado, las entidades recién descubiertas para {integration} no se agregarán automáticamente a Home Assistant.", "enable_new_entities_label": "Habilitar entidades recién agregadas.", - "title": "Opciones del sistema" + "title": "Opciones del sistema para {integration}", + "update": "Actualizar" }, "confirmation": { "cancel": "Cancelar", @@ -619,27 +627,78 @@ "dismiss": "Descartar", "editor": { "confirm_delete": "¿Está seguro de que desea eliminar esta entrada?", - "delete": "ELIMINAR", + "delete": "Eliminar", "enabled_cause": "Deshabilitado por {cause}.", "enabled_description": "Las entidades deshabilitadas no serán agregadas a Home Assistant.", "enabled_label": "Habilitar entidad", "entity_id": "Identificación de la entidad", + "icon": "Sobrescribir icono", + "icon_error": "Los iconos deben estar en el formato 'prefijo:nombre del icono', por ejemplo, 'mdi: home'", "name": "Sustituir nombre", "note": "Nota: esto podría no funcionar todavía con todas las integraciones.", "unavailable": "Esta entidad no está disponible actualmente.", - "update": "ACTUALIZAR" + "update": "Actualizar" }, + "no_unique_id": "Esta entidad no tiene un identificador única, por lo tanto, su configuración no se puede administrar desde la interfaz de usuario.", "related": "Relacionado", "settings": "Configuraciones" }, "generic": { "cancel": "Cancelar", + "close": "cerrar", "default_confirmation_title": "¿Está seguro?", "ok": "De acuerdo" }, + "helper_settings": { + "generic": { + "icon": "Ícono", + "initial_value": "Valor inicial al inicio", + "initial_value_explain": "El valor que tendrá el elemento cuando se inicie Home Assistant. Cuando se deja vacío, el valor se restaurará a su valor anterior.", + "name": "Nombre" + }, + "input_datetime": { + "date": "Fecha", + "datetime": "Fecha y hora", + "has_date": "Fecha", + "has_time": "Hora", + "mode": "¿Qué desea ingresar?", + "time": "Hora" + }, + "input_number": { + "box": "Campo de entrada", + "max": "Valor máximo", + "min": "Valor mínimo", + "mode": "Modo de visualización", + "slider": "Control deslizante", + "step": "Número de incremento", + "unit_of_measurement": "Unidad de medida" + }, + "input_select": { + "add": "Agregar", + "add_option": "Agregar opción", + "no_options": "Aún no hay opciones.", + "options": "Opciones" + }, + "input_text": { + "max": "Longitud máxima", + "min": "Longitud mínima", + "mode": "Modo de visualización", + "password": "Contraseña", + "pattern": "Patrón de expresiones regulares para la validación del lado del cliente", + "text": "Texto" + }, + "not_editable": "No editable", + "not_editable_text": "Esta entidad no se puede cambiar desde la interfaz de usuario porque está definida en configuration.yaml.", + "platform_not_loaded": "La integración {platform} no está cargada. Agregue su configuración agregando 'default_config:' o '{platform}:'.", + "required_error_msg": "Este campo es requerido", + "yaml_not_editable": "La configuración de esta entidad no se puede editar desde la interfaz de usuario. Solo las entidades configuradas desde la interfaz de usuario se pueden configurar desde la interfaz de usuario." + }, "more_info_control": { "dismiss": "Descartar diálogo", "edit": "Editar entidad", + "person": { + "create_zone": "Crear zona desde ubicación actual" + }, "restored": { "confirm_remove_text": "¿Está seguro de que desea eliminar esta entidad?", "confirm_remove_title": "¿Eliminar entidad?", @@ -675,7 +734,7 @@ }, "more_info_settings": { "back": "Regresar", - "entity_id": "ID de la entidad", + "entity_id": "Identificación de la entidad", "name": "Sustituir Nombre", "save": "Guardar" }, @@ -711,7 +770,7 @@ "quirk": "Quirk", "services": { "reconfigure": "Reconfigure el dispositivo ZHA (dispositivo de curación). Use esto si tiene problemas con el dispositivo. Si el dispositivo en cuestión es un dispositivo alimentado por batería, asegúrese de que esté activado y acepte los comandos cuando utilice este servicio.", - "remove": "Eliminar un dispositivo de la red ZigBee.", + "remove": "Eliminar un dispositivo de la red Zigbee.", "updateDeviceName": "Establecer un nombre personalizado para este dispositivo en el registro de dispositivos." }, "unknown": "Desconocido", @@ -755,27 +814,35 @@ "link_profile_page": "tu página de perfil" }, "areas": { - "caption": "Registro de áreas", + "caption": "Áreas", "create_area": "CREAR AREA", + "data_table": { + "area": "Área", + "devices": "Dispositivos" + }, + "delete": { + "confirmation_text": "Todos los dispositivos en esta área quedarán sin asignar.", + "confirmation_title": "¿Está seguro de que desea eliminar esta área?" + }, "description": "Visión general de todas las áreas de su casa.", "editor": { - "create": "CREAR", + "create": "Crear", "default_name": "Nueva Área", - "delete": "ELIMINAR", - "update": "ACTUALIZAR" + "delete": "Eliminar", + "update": "Actualizar" }, "no_areas": "¡Parece que aún no tienes áreas!", "picker": { "create_area": "CREAR AREA", - "header": "Registro de áreas", + "header": "Áreas", "integrations_page": "Página de integraciones", "introduction": "Las áreas se utilizan para organizar donde están los dispositivos. Esta información se utilizará en todo Home Assistant para ayudarlo a organizar su interfaz, permisos e integraciones con otros sistemas.", "introduction2": "Para colocar dispositivos en un área, use el enlace a continuación para navegar a la página de integraciones y luego haga clic en una integración configurada para acceder a las tarjetas del dispositivo.", - "no_areas": "¡Parece que aún no tienes áreas!" + "no_areas": "¡Parece que todavía no tiene áreas!" } }, "automation": { - "caption": "Automatización", + "caption": "Automatizaciones", "description": "Crear y editar automatizaciones", "editor": { "actions": { @@ -829,7 +896,7 @@ "delete_confirm": "¿Seguro que quieres borrar?", "duplicate": "Duplicar", "header": "Condiciones", - "introduction": "Las condiciones son una parte opcional de una regla de automatización y se pueden usar para evitar que ocurra una acción cuando se activa. Las condiciones son muy similares a los desencadenantes pero son muy diferentes. Un activador mirará los eventos que suceden en el sistema, mientras que una condición solo mira cómo se ve el sistema en este momento. Un disparador puede observar que un interruptor se está activando. Una condición solo puede ver si un interruptor está actualmente activado o desactivado.", + "introduction": "Las condiciones son opcionales y evitarán una mayor ejecución a menos que se cumplan todas las condiciones.", "learn_more": "Más información sobre las condiciones", "name": "Condición", "type_select": "Tipo de condición", @@ -891,14 +958,15 @@ }, "edit_ui": "Editar con la interfaz de usuario", "edit_yaml": "Editar como YAML", - "introduction": "Utilice automatizaciones para dar vida a su hogar", + "enable_disable": "Habilitar/Deshabilitar automatización", + "introduction": "Use automatizaciones para darle vida a su hogar.", "load_error_not_editable": "Solo las automatizaciones en automations.yaml son editables.", "load_error_unknown": "Error al cargar la automatización ({err_no}).", "save": "Guardar", "triggers": { "add": "Agregar desencadenador", "delete": "Eliminar", - "delete_confirm": "¿Seguro que quieres borrar?", + "delete_confirm": "¿Está seguro de que desea eliminar esto?", "duplicate": "Duplicar", "header": "Desencadenadores", "introduction": "Los desencadenadores son los que inician el procesamiento de una regla de automatización. Es posible especificar múltiples activadores para la misma regla. Una vez que se inicia un activador, Home Assistant validará las condiciones, si las hay, y activará la acción.", @@ -994,6 +1062,9 @@ "delete_confirm": "¿Está seguro de que desea eliminar esta automatización?", "edit_automation": "Editar automatización", "header": "Editor de automatizaciones", + "headers": { + "name": "Nombre" + }, "introduction": "El editor de automatización le permite crear y editar automatizaciones. Siga el enlace a continuación para leer las instrucciones y asegurarse de que haya configurado Home Assistant correctamente.", "learn_more": "Más información sobre las automatizaciones", "no_automations": "No pudimos encontrar ninguna automatización editable", @@ -1223,7 +1294,7 @@ "different_include": "Posiblemente a través de un dominio, un globo o una inclusión diferente.", "pick_attribute": "Elija un atributo para sobrescribir", "picker": { - "header": "Personalización", + "header": "Personalizaciones", "introduction": "Ajustar los atributos por entidad. Las personalizaciones agregadas/editadas tendrán efecto inmediatamente. Las personalizaciones eliminadas entrarán en vigor cuando se actualice la entidad." }, "warning": { @@ -1252,6 +1323,7 @@ "automations": "Automatizaciones", "cant_edit": "Solo puede editar elementos que se crean en la interfaz de usuario.", "caption": "Dispositivos", + "confirm_delete": "¿Está seguro de que desea eliminar este dispositivo?", "confirm_rename_entity_ids": "¿También desea cambiar el nombre de la identificación de la entidad de sus entidades?", "data_table": { "area": "Área", @@ -1259,8 +1331,10 @@ "device": "Dispositivo", "integration": "Integración", "manufacturer": "Fabricante", - "model": "Modelo" + "model": "Modelo", + "no_devices": "Sin dispositivos" }, + "delete": "Eliminar", "description": "Administrar dispositivos conectados", "details": "Aquí están todos los detalles de su dispositivo.", "device_not_found": "Dispositivo no encontrado.", @@ -1271,6 +1345,7 @@ }, "info": "Información del dispositivo", "name": "Nombre", + "no_devices": "Sin dispositivos", "scene": { "create": "Crear escena con dispositivo", "no_scenes": "Sin escenas", @@ -1288,7 +1363,7 @@ "update": "Actualizar" }, "entities": { - "caption": "Registro de entidades", + "caption": "Entidades", "description": "Visión general de todas las entidades conocidas.", "editor": { "confirm_delete": "¿Estás seguro de que deseas eliminar esta entrada?", @@ -1318,9 +1393,10 @@ "filter": { "filter": "Filtrar", "show_disabled": "Mostrar entidades deshabilitadas", + "show_readonly": "Mostrar entidades de solo lectura", "show_unavailable": "Mostrar entidades no disponibles" }, - "header": "Registro de entidades", + "header": "Entidades", "headers": { "enabled": "Habilitado", "entity_id": "Identificación de la entidad", @@ -1330,11 +1406,12 @@ }, "integrations_page": "Página de integraciones", "introduction": "Home Assistant mantiene un registro de todas las entidades que ha visto y que pueden identificarse de manera única. Cada una de estas entidades tendrá un ID de entidad asignado que se reservará solo para esta entidad.", - "introduction2": "Utilice el registro de la entidad para reemplazar el nombre, cambiar el ID de la entidad o eliminar la entrada de Home Assistant. Tenga en cuenta que eliminar la entrada del registro de la entidad no eliminará la entidad. Para hacerlo, siga el enlace a continuación y elimínelo de la página de integraciones.", + "introduction2": "Use el registro de la entidad para sobreescribir el nombre, cambiar la identificación de la entidad o eliminar la entrada de Home Assistant.", "remove_selected": { "button": "Eliminar selección", + "confirm_partly_text": "Solo puede eliminar {removable} de las entidades {selected} . Las entidades solo se pueden eliminar cuando la integración ya no proporciona las entidades. En ocasiones, debe reiniciar Home Assistant antes de poder eliminar las entidades de una integración eliminada. ¿Está seguro de que desea quitar las entidades eliminables?", "confirm_partly_title": "Sólo se pueden eliminar {número} entidades seleccionadas.", - "confirm_text": "Las entidades sólo pueden ser eliminadas cuando la integración ya no las proporciona.", + "confirm_text": "Debe eliminarlos de su configuración de Lovelace y de sus automatizaciones si contienen estas entidades.", "confirm_title": "¿Desea eliminar {number} entidades?" }, "selected": "{number} seleccionadas", @@ -1342,12 +1419,39 @@ "status": { "disabled": "Deshabilitado", "ok": "Correcto", + "readonly": "Solo lectura", + "restored": "Restaurado", "unavailable": "No disponible" }, "unavailable": "(no disponible)" } }, "header": "Configurar Home Assistant", + "helpers": { + "caption": "Auxiliares", + "description": "Elementos que pueden ayudar a construir automatizaciones.", + "dialog": { + "add_helper": "Agregar auxiliar", + "add_platform": "Añadir {platform}", + "create": "Crear" + }, + "picker": { + "add_helper": "Agregar auxiliar", + "headers": { + "editable": "Editable", + "entity_id": "Identificación de la entidad", + "name": "Nombre", + "type": "Tipo" + } + }, + "types": { + "input_boolean": "Alternar", + "input_datetime": "Fecha y/o hora", + "input_number": "Número", + "input_select": "Desplegable", + "input_text": "Texto" + } + }, "integrations": { "caption": "Integraciones", "config_entry": { @@ -1372,7 +1476,7 @@ "add_area": "Agregar área", "area_picker_label": "Área", "close": "Cerrar", - "created_config": "Configuración creada para {name}.", + "created_config": "Configuración creada para {name} .", "dismiss": "Descartar diálogo", "error_saving_area": "Error al guardar el área: {error}", "external_step": { @@ -1381,20 +1485,21 @@ }, "failed_create_area": "No se pudo crear el área.", "finish": "Finalizar", + "loading_first_time": "Espere mientras se instala la integración", "name_new_area": "¿Nombre de la nueva área?", "not_all_required_fields": "No todos los campos requeridos estén llenos.", "submit": "Enviar" }, "configure": "Configurar", "configured": "Configurado", - "description": "Administrar dispositivos y servicios conectados", + "description": "Administrar y configurar integraciones", "details": "Detalles de integración", "discovered": "Descubierto", "home_assistant_website": "Sitio web de Home Assistant", "ignore": { "confirm_delete_ignore": "Esto hará que la integración aparezca en sus integraciones descubiertas de nuevo cuando sea descubierta. Esto podría requerir un reinicio o tomar algún tiempo.", "confirm_delete_ignore_title": "¿Dejar de ignorar a {name} ?", - "confirm_ignore": "¿Está seguro de que no desea configurar esta integración? Puede deshacer esto haciendo clic en \"Mostrar integraciones ignoradas\" en el menú deslizable en la parte superior derecha.", + "confirm_ignore": "¿Estás seguro de que no quieres configurar esta integración? Puede deshacer esto haciendo clic en 'Mostrar integraciones ignoradas' en el menú de desbordamiento en la parte superior derecha.", "confirm_ignore_title": "¿Ignorar el descubrimiento de {name}?", "hide_ignored": "Ocultar integraciones ignoradas", "ignore": "Ignorar", @@ -1409,6 +1514,83 @@ "note_about_website_reference": "Hay más disponibles en " }, "introduction": "Aquí es posible configurar sus componentes y Home Assistant. Todavía no es posible configurar todo desde la interfaz de usuario, pero estamos trabajando en ello.", + "lovelace": { + "caption": "Tableros de Lovelace", + "dashboards": { + "cant_edit_default": "El panel de control estándar de Lovelace no se puede editar desde la interfaz de usuario. Puede ocultarlo configurando otro tablero como predeterminado.", + "cant_edit_yaml": "Los tableros definidos en YAML no se pueden editar desde la IU. Cámbielos en configuration.yaml.", + "caption": "Tableros", + "conf_mode": { + "storage": "Interfaz de usuario controlada", + "yaml": "Archivo YAML" + }, + "confirm_delete": "¿Está seguro de que desea eliminar este tablero?", + "default_dashboard": "Este es el tablero predeterminado", + "detail": { + "create": "Crear", + "delete": "Eliminar", + "dismiss": "Cerrar", + "edit_dashboard": "Editar tablero", + "icon": "Ícono", + "new_dashboard": "Agregar nuevo tablero", + "remove_default": "Eliminar como predeterminado en este dispositivo", + "require_admin": "Solo administrador", + "set_default": "Establecer como predeterminado en este dispositivo", + "show_sidebar": "Mostrar en la barra lateral", + "title": "Título", + "title_required": "Se requiere título.", + "update": "Actualizar", + "url": "Url", + "url_error_msg": "La URL debe contener un - y no puede contener espacios o caracteres especiales, excepto _ y -" + }, + "picker": { + "add_dashboard": "Agregar tablero", + "headers": { + "conf_mode": "Método de configuración", + "default": "Predeterminado", + "filename": "Nombre del archivo", + "require_admin": "Solo administrador", + "sidebar": "Mostrar en la barra lateral", + "title": "Título" + }, + "open": "Abrir" + } + }, + "description": "Configure sus paneles de Lovelace", + "resources": { + "cant_edit_yaml": "Está utilizando Lovelace en modo YAML, por lo tanto, no puede administrar sus recursos a través de la interfaz de usuario. Adminístrelos en configuration.yaml.", + "caption": "Recursos", + "confirm_delete": "¿Estás seguro de que desea eliminar este recurso?", + "detail": { + "create": "Crear", + "delete": "Eliminar", + "dismiss": "Cerrar", + "new_resource": "Agregar nuevo recurso", + "type": "Tipo de recurso", + "update": "Actualizar", + "url": "Url", + "url_error_msg": "Url es un campo requerido", + "warning_header": "¡Tenga cuidado!", + "warning_text": "Agregar recursos puede ser peligroso, asegúrese de conocer la fuente del recurso y confíe en ellos. Los malos recursos podrían dañar seriamente su sistema." + }, + "picker": { + "add_resource": "Agregar recurso", + "headers": { + "type": "Tipo", + "url": "Url" + }, + "no_resources": "Sin recursos" + }, + "refresh_body": "Tiene que actualizar la página para completar la eliminación, ¿desea actualizar ahora?", + "refresh_header": "¿Desea refrescar?", + "types": { + "css": "Hoja de estilo", + "html": "HTML (obsoleto)", + "js": "Archivo JavaScript (obsoleto)", + "module": "Módulo JavaScript" + } + } + }, "person": { "add_person": "Agregar persona", "caption": "Personas", @@ -1468,6 +1650,9 @@ "delete_scene": "Eliminar escena", "edit_scene": "Editar escena", "header": "Editor de escenas", + "headers": { + "name": "Nombre" + }, "introduction": "El editor de escenas le permite crear y editar escenas. Siga el enlace a continuación para leer las instrucciones y asegurarse de haber configurado Home Assistant correctamente.", "learn_more": "Más información sobre las escenas", "no_scenes": "No pudimos encontrar ninguna escena editable.", @@ -1477,7 +1662,7 @@ } }, "script": { - "caption": "Script", + "caption": "Scripts", "description": "Crear y editar scripts", "editor": { "alias": "Nombre", @@ -1495,9 +1680,13 @@ "add_script": "Agregar script", "edit_script": "Editar script", "header": "Editor de scripts", + "headers": { + "name": "Nombre" + }, "introduction": "El editor de scripts le permite crear y editar scripts. Por favor, siga el siguiente enlace para leer las instrucciones para asegurarse de que ha configurado Home Assistant correctamente.", "learn_more": "Aprenda más sobre los scripts", "no_scripts": "No pudimos encontrar ningún script editable", + "show_info": "Mostrar información sobre el script", "trigger_script": "Desencadenar script" } }, @@ -1507,10 +1696,10 @@ "section": { "reloading": { "automation": "Recargar automatizaciones", - "core": "Recargar núcleo", + "core": "Recargar ubicación y personalizaciones", "group": "Recargar grupos", - "heading": "Recarga de configuración", - "introduction": "Algunas partes de Home Assistant pueden volver a cargarse sin necesidad de reiniciar. Al pulsar recargar descargará su configuración actual y cargará la nueva.", + "heading": "Recarga de configuración YAML", + "introduction": "Algunas partes de Home Assistant pueden recargarse sin requerir un reinicio. Al presionar recargar se descargará su configuración YAML actual y se cargará la nueva.", "person": "Recargar personas", "scene": "Recargar escenas", "script": "Recargar scripts", @@ -1525,7 +1714,7 @@ "stop": "Detener" }, "validation": { - "check_config": "Verificar configuración", + "check_config": "Comprobar configuración", "heading": "Validación de la configuración", "introduction": "Valide su configuración si recientemente realizó algunos cambios en su configuración y quiere asegurarse de que sea válida", "invalid": "Configuración inválida", @@ -1546,6 +1735,7 @@ "editor": { "activate_user": "Activar usuario", "active": "Activo", + "admin": "Administrador", "caption": "Ver usuario", "change_password": "Cambiar contraseña", "confirm_user_deletion": "¿Está seguro de que desea eliminar el {name}?", @@ -1555,14 +1745,22 @@ "group": "Grupo", "group_update_failed": "La actualización del grupo falló:", "id": "Identificación", + "name": "Nombre", "owner": "Propietario", "rename_user": "Renombrar usuario", "system_generated": "Generado por el sistema", + "system_generated_users_not_editable": "No se pueden actualizar los usuarios generados por el sistema.", "system_generated_users_not_removable": "No se pueden eliminar los usuarios generados por el sistema.", "unnamed_user": "Usuario sin nombre", + "update_user": "Actualizar", "user_rename_failed": "El cambio de nombre del usuario falló:" }, "picker": { + "headers": { + "group": "Grupo", + "name": "Nombre", + "system": "Sistema" + }, "system_generated": "Generado por el sistema", "title": "Usuarios" } @@ -1697,7 +1895,10 @@ "required_error_msg": "Este campo es requerido", "update": "Actualizar" }, - "edit_home_zone": "La ubicación de su casa puede ser cambiada en la configuración general.", + "edit_home_zone": "El radio de la zona de inicio aún no se puede editar desde la interfaz. Arrastre el marcador en el mapa para mover la zona de inicio.", + "edit_home_zone_narrow": "El radio de la zona de inicio aún no se puede editar desde la interfaz. La ubicación se puede cambiar desde la configuración general.", + "go_to_core_config": "¿Ir a la configuración general?", + "home_zone_core_config": "La ubicación de su zona de inicio se puede editar desde la página de configuración general. El radio de la zona de inicio aún no se puede editar desde la interfaz. ¿Desea ir a la configuración general?", "introduction": "Las zonas le permiten especificar ciertas regiones en el planeta. Cuando una persona está dentro de una zona, el estado tomará el nombre de la zona. Las zonas también se pueden usar como desencadenante o condición dentro de las configuraciones de automatización.", "no_zones_created_yet": "Parece que todavía no ha creado ninguna zona." }, @@ -1728,7 +1929,7 @@ "config_parameter": "Parámetro de configuración", "config_value": "Valor de configuración", "false": "Falso", - "header": "Opciones de configuración del nodo", + "header": "Opciones de configuración de nodos", "seconds": "segundos", "set_config_parameter": "Establecer parámetro de configuración", "set_wakeup": "Establecer intervalo de activación", @@ -1845,7 +2046,7 @@ "attributes": "Atributos", "copied": "Copiado al portapapeles", "copy_entity_attribute": "Copiar atributos", - "copy_entity_id": "Copiar ID", + "copy_entity_id": "Copiar identificación", "copy_entity_state": "Copiar estado", "current_entities": "Entidades actuales", "description1": "Establecer la representación de un dispositivo dentro de Home Assistant.", @@ -1883,7 +2084,7 @@ "lovelace": { "add_entities": { "generated_unsupported": "Solo puede usar esta función cuando haya tomado el control de Lovelace UI.", - "saving_failed": "No se pudo guardar la configuración de Lovelace UI.", + "saving_failed": "Error al guardar la configuración de la interfaz de usuario de Lovelace.", "yaml_unsupported": "No puede usar esta función cuando usa Lovelace UI en modo YAML." }, "cards": { @@ -1905,6 +2106,11 @@ "toggle": "Alternar {name}", "url": "Abrir ventana a {url_path}" }, + "safe-mode": { + "description": "Home Assistant tuvo problemas al cargar su configuración y ahora se ejecuta en modo seguro. Eche un vistazo al registro de errores para ver qué salió mal.", + "header": "Modo seguro activado", + "show_errors": "Mostrar errores" + }, "shopping-list": { "add_item": "Agregar elemento", "checked_items": "lementos marcados", @@ -1922,10 +2128,16 @@ }, "alarm-panel": { "available_states": "Estados disponibles", + "description": "La tarjeta del panel de alarma le permite Activar y Desactivar las integraciones de su panel de control de alarma.", "name": "Panel de alarma" }, + "button": { + "description": "La tarjeta Botón le permite agregar botones para realizar tareas.", + "name": "Botón" + }, "conditional": { "card": "Tarjeta", + "change_type": "Cambiar tipo", "condition_explanation": "La tarjeta será mostrada cuando TODAS las siguientes condiciones se cumplan.", "conditions": "Condiciones", "current_state": "actual", @@ -1939,6 +2151,7 @@ "required": "Requerido" }, "entities": { + "description": "La tarjeta de entidades es el tipo de tarjeta más común. Agrupa elementos en listas.", "name": "Entidades", "show_header_toggle": "¿Mostrar alternancia de encabezado?", "toggle": "Alternar entidades." @@ -1947,9 +2160,15 @@ "name": "Botón de entidad" }, "entity-filter": { + "description": "La tarjeta de filtro de entidad le permite definir una lista de entidades que desea rastrear solo cuando se encuentra en un determinado estado.", "name": "Filtro de entidad" }, + "entity": { + "description": "La tarjeta de entidad le ofrece una visión general rápida del estado de su entidad.", + "name": "Entidad" + }, "gauge": { + "description": "La tarjeta Gauge es una tarjeta básica que permite ver visualmente los datos del sensor.", "name": "Gauge", "severity": { "define": "¿Definir gravedad?", @@ -1960,8 +2179,10 @@ }, "generic": { "aspect_ratio": "Relación de aspecto", + "attribute": "Atributo", "camera_image": "Entidad de la cámara", "camera_view": "Vista de la cámara", + "double_tap_action": "Acción de doble toque", "entities": "Entidades", "entity": "Entidad", "hold_action": "Mantener la acción", @@ -1969,13 +2190,17 @@ "icon": "Icono", "icon_height": "Altura del icono", "image": "Ruta de la imagen", + "manual": "Manual", + "manual_description": "¿Necesita agregar una tarjeta personalizada o simplemente desea escribir manualmente el yaml?", "maximum": "Máximo", "minimum": "Mínimo", "name": "Nombre", + "no_theme": "Sin tema", "refresh_interval": "Intervalo de actualización", "show_icon": "¿Mostrar icono?", "show_name": "¿Mostrar nombre?", "show_state": "¿Mostrar estado?", + "state": "Estado", "tap_action": "Acción de toque", "theme": "Tema", "title": "Título", @@ -1984,44 +2209,57 @@ }, "glance": { "columns": "Columnas", + "description": "La tarjeta Vista es útil para agrupar múltiples sensores en una descripción compacta.", "name": "Glance" }, "history-graph": { + "description": "La tarjeta Gráfico de historial le permite mostrar un gráfico para cada una de las entidades enumeradas.", "name": "Gráfico histórico" }, "horizontal-stack": { + "description": "La tarjeta de apilamiento horizontal le permite apilar varias tarjetas, de modo que siempre se sientan una al lado de la otra en el espacio de una columna.", "name": "Pila horizontal" }, "iframe": { - "name": "iFrame" + "description": "La tarjeta de página web le permite incrustar su página web favorita directamente en Home Assistant.", + "name": "Página web" }, "light": { + "description": "La tarjeta de luz permite cambiar el brillo de la luz.", "name": "Luz" }, "map": { "dark_mode": "¿Modo oscuro?", "default_zoom": "Zoom predeterminado", + "description": "La tarjeta de Mapa le permite mostrar entidades en un mapa.", "geo_location_sources": "Fuentes de geolocalización", + "hours_to_show": "Horas para mostrar", "name": "Mapa", "source": "Fuente" }, "markdown": { "content": "Contenido", + "description": "La tarjeta Markdown se usa para representar Markdown.", "name": "Markdown" }, "media-control": { + "description": "La tarjeta de control multimedia se utiliza para mostrar entidades de reproductor multimedia en una interfaz con controles fáciles de usar.", "name": "Control multimedia" }, "picture-elements": { + "description": "La tarjeta Elementos de imagen es uno de los tipos de tarjetas más versátiles. ¡Las tarjetas le permiten colocar iconos o texto e incluso servicios! En una imagen basada en coordenadas.", "name": "Elementos de imagen" }, "picture-entity": { + "description": "La tarjeta de entidad de imagen muestra una entidad en forma de imagen. En lugar de imágenes de URL, también puede mostrar la imagen de las entidades de la cámara.", "name": "Entidad de imagen" }, "picture-glance": { + "description": "La tarjeta Picture Glance muestra una imagen y los estados de entidad correspondientes como un icono. Las entidades en el lado derecho permiten alternar acciones, otras muestran el diálogo de más información.", "name": "Picture Glance" }, "picture": { + "description": "La Tarjeta de imagen le permite configurar una imagen para usarla para navegar por varias rutas en su interfaz o para llamar a un servicio.", "name": "Imagen" }, "plant-status": { @@ -2048,17 +2286,23 @@ "name": "Pila vertical" }, "weather-forecast": { + "description": "La tarjeta de Pronóstico del tiempo muestra el clima. Muy útil para incluir en las interfaces que las personas muestran en la pared.", "name": "Pronóstico del tiempo" } }, + "cardpicker": { + "custom_card": "Personalizado", + "no_description": "No hay descripción disponible." + }, "edit_card": { "add": "Agregar tarjeta", - "delete": "Eliminar", + "delete": "Eliminar tarjeta", + "duplicate": "Tarjeta duplicada", "edit": "Editar", "header": "Configuración de la tarjeta", - "move": "Mover", + "move": "Mover a la vista", "options": "Mas opciones", - "pick_card": "Elija la tarjeta que desea agregar.", + "pick_card": "¿Qué tarjeta desea agregar?", "pick_card_view_title": "¿Qué tarjeta le gustaría agregar a su vista de {name} ?", "save": "Guardar", "show_code_editor": "Mostrar editor de código", @@ -2067,7 +2311,7 @@ }, "edit_lovelace": { "edit_title": "Editar título", - "explanation": "Este título se muestra sobre todas tus vistas en Lovelace.", + "explanation": "Este título se muestra sobre todas sus vistas en la interfaz de usuario de Lovelace.", "header": "Título de tu interfaz de usuario de Lovelace" }, "edit_view": { @@ -2077,39 +2321,50 @@ "header": "Ver configuración", "header_name": "{name} Ver configuración", "move_left": "Mover vista a la izquierda", - "move_right": "Mover vista a la derecha" + "move_right": "Mover vista a la derecha", + "tab_settings": "Configuraciones", + "tab_visibility": "Visibilidad", + "visibility": { + "select_users": "Seleccione qué usuarios deberían ver esta vista en la navegación" + } }, "header": "Editar interfaz de usuario", "menu": { - "open": "Abrir el menú de Lovelace", - "raw_editor": "Editor de configuraciones en bruto" + "open": "Abre el menú de la interfaz de usuario de Lovelace", + "raw_editor": "Editor de configuración en texto" }, "migrate": { "header": "Configuración inválida", "migrate": "Migrar configuración", - "para_migrate": "Home Assistant puede agregar ID a todas sus tarjetas y vistas automáticamente por usted presionando el botón 'Migrar configuración'.", + "para_migrate": "Home Assistant puede agregar la identificación a todas sus tarjetas y vistas automáticamente presionando el botón 'Migrar configuración'.", "para_no_id": "Este elemento no tiene un ID. Por favor agregue uno a este elemento en 'ui-lovelace.yaml'." }, "raw_editor": { "confirm_remove_config_text": "Generaremos automáticamente sus vistas de Lovelace UI con sus áreas y dispositivos si elimina su configuración de Lovelace UI.", "confirm_remove_config_title": "¿Está seguro de que desea eliminar la configuración de Lovelace UI? Generaremos automáticamente sus vistas de Lovelace UI con sus áreas y dispositivos.", "confirm_unsaved_changes": "Tiene cambios sin guardar, ¿está seguro de que desea salir?", - "confirm_unsaved_comments": "Su configuración contiene comentarios, estos no se guardarán. ¿Quieres continuar?", + "confirm_unsaved_comments": "Su configuración contiene comentarios, estos no se guardarán. ¿Desea continuar?", "error_invalid_config": "Su configuración no es válida: {error}", "error_parse_yaml": "No se puede analizar el YAML: {error}", "error_remove": "No se puede eliminar la configuración: {error}", "error_save_yaml": "No se puede guardar YAML: {error}", "header": "Editar configuración", + "resources_moved": "Los recursos ya no se deben agregar a la configuración de Lovelace, sino que se pueden agregar en el panel de configuración de Lovelace.", "save": "Guardar", "saved": "Guardado", "unsaved_changes": "Cambios no guardados" }, "save_config": { "cancel": "Olvídalo", + "close": "Cerrar", + "empty_config": "Comience con un tablero vacío", "header": "Toma el control de tu interfaz de usuario de Lovelace", - "para": "Por defecto, Home Assistant mantendrá su interfaz de usuario y la actualizará cuando haya nuevas entidades o componentes de Lovelace disponibles. Si usted toma el control, ya no haremos cambios automáticamente para usted.", + "para": "De forma predeterminada, Home Assistant mantendrá su interfaz de usuario y la actualizará cuando haya nuevas entidades o componentes de la interfaz de usuario de Lovelace disponibles. Si toma el control, ya no haremos cambios automáticamente.", "para_sure": "¿Está seguro de que desea tomar el control de su interfaz de usuario?", - "save": "Tomar el control" + "save": "Tomar el control", + "yaml_config": "Para ayudarlo a comenzar, aquí está la configuración actual de este tablero:", + "yaml_control": "Para tomar el control en modo YAML, cree un archivo YAML con el nombre que especificó en su configuración para este tablero, o el valor predeterminado 'ui-lovelace.yaml'.", + "yaml_mode": "Está utilizando el modo YAML, lo que significa que no puede cambiar su configuración de Lovelace desde la interfaz de usuario. Si desea cambiar Lovelace desde la interfaz de usuario, elimine 'mode: yaml' de su configuración de Lovelace en 'configuration.yaml'." }, "suggest_card": { "add": "Agregar a Lovelace UI", @@ -2119,7 +2374,8 @@ "view": { "panel_mode": { "description": "Esto hace que la primera carta sea de ancho completo; otras cartas en esta vista no se mostrarán.", - "title": "¿Modo de panel?" + "title": "¿Modo de panel?", + "warning_multiple_cards": "Esta vista contiene más de una tarjeta, pero una vista de panel solo puede mostrar 1 tarjeta." } } }, @@ -2129,23 +2385,32 @@ "exit_edit_mode": "Salir del modo de edición de la interfaz de usuario", "help": "Ayuda", "refresh": "Refrescar", + "reload_resources": "Recargar recursos", "unused_entities": "Entidades no utilizadas" }, "reload_lovelace": "Recargar Lovelace", + "reload_resources": { + "refresh_body": "Tiene que actualizar la página para completar la recarga, ¿desea actualizar ahora?", + "refresh_header": "¿Desea refrescar?" + }, "unused_entities": { "available_entities": "Estas son las entidades que tiene disponibles, pero aún no están en la interfaz de usuario de Lovelace.", "domain": "Dominio", "entity": "Entidad", - "entity_id": "ID de entidad", + "entity_id": "Identificación de la entidad", "last_changed": "Última modificación", "select_to_add": "Seleccione las entidades que desea agregar a una tarjeta y luego haga clic en el botón Agregar tarjeta.", "title": "Entidades no utilizadas" }, "views": { "confirm_delete": "¿Está seguro de que desea eliminar esta vista?", + "confirm_delete_existing_cards": "Eliminar esta vista también eliminará las tarjetas", + "confirm_delete_existing_cards_text": "¿Está seguro de que desea eliminar su vista '{name}'? La vista contiene {number} tarjetas que se eliminarán. Esta acción no se puede deshacer.", + "confirm_delete_text": "¿Está seguro de que desea eliminar su vista '{name}'?", "existing_cards": "No puede eliminar una vista que tiene tarjetas. Elimine las cartas primero." }, "warning": { + "attribute_not_found": "El atributo {attribute} no está disponible en: {entity}", "entity_non_numeric": "Entidad no es numérica: {entity}", "entity_not_found": "Entidad no disponible: {entity}" } @@ -2221,7 +2486,7 @@ "data": { "password": "Contraseña API" }, - "description": "Por favor, introduzca la contraseña de la API en su configuración http:" + "description": "Ingrese la contraseña API en su configuración HTTP:" }, "mfa": { "data": { @@ -2342,6 +2607,11 @@ "submit": "Enviar" }, "current_user": "Actualmente estás conectado como {fullName} .", + "dashboard": { + "description": "Elija un tablero predeterminado para este dispositivo.", + "dropdown_label": "Tablero", + "header": "Tablero" + }, "force_narrow": { "description": "Esto ocultará la barra lateral de forma predeterminada, similar a la experiencia móvil.", "header": "Ocultar siempre la barra lateral" diff --git a/translations/es.json b/translations/es.json index 8d45515e27..aaf330d3df 100644 --- a/translations/es.json +++ b/translations/es.json @@ -1299,7 +1299,7 @@ }, "warning": { "include_link": "incluir customize.yaml", - "include_sentence": "Parece que tu configuration.yaml no funciona correctamente", + "include_sentence": "Parece que tu configuration.yaml no es correcto, debe", "not_applied": "Los cambios realizados aquí se escriben en él, pero no se aplicarán después de una recarga de configuración a menos que la inclusión esté en su lugar." } }, @@ -2164,6 +2164,7 @@ "name": "Filtro de entidad" }, "entity": { + "description": "La tarjeta Entidad te ofrece una visión rápida del estado de tu entidad.", "name": "Entidad" }, "gauge": { @@ -2262,7 +2263,7 @@ "name": "Imagen" }, "plant-status": { - "description": "La tarjeta Estado de la Planta es para todos los botánicos encantadores que hay.", + "description": "La tarjeta Estado de la Planta es para todos los encantadores botánicos que hay por ahí.", "name": "Estado de la planta" }, "sensor": { diff --git a/translations/fr.json b/translations/fr.json index 786d1024fc..403ab3d9f9 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -2164,6 +2164,7 @@ "name": "Filtre d'entité" }, "entity": { + "description": "La carte Entité vous donne un aperçu rapide de l'état de votre entité.", "name": "Entité" }, "gauge": { diff --git a/translations/hi.json b/translations/hi.json index c49cc682a4..29ed7f4c8c 100644 --- a/translations/hi.json +++ b/translations/hi.json @@ -196,6 +196,9 @@ } }, "ui": { + "common": { + "undo": "Undo" + }, "duration": { "day": "{count} {count, plural,\n one {दिन}\n other {दिन}\n}", "week": "{count} {count, plural,\n one {हफ़्ता}\n other {हफ़्ते}\n}" @@ -245,6 +248,12 @@ } } }, + "users": { + "editor": { + "admin": "admin", + "system_generated_users_not_editable": "ARAVIN" + } + }, "zha": { "add_device_page": { "discovery_text": "I dispositivi rilevati verranno visualizzati qui. Seguire le istruzioni per il / i dispositivo / i e posizionare il / i dispositivo / i in modalità accoppiamento.", @@ -286,6 +295,22 @@ } } }, + "lovelace": { + "editor": { + "card": { + "entity": { + "description": "KARNATAKA" + }, + "map": { + "hours_to_show": "hours to show" + } + }, + "cardpicker": { + "custom_card": "custom_ card", + "no_description": "description" + } + } + }, "page-authorize": { "form": { "providers": { diff --git a/translations/hu.json b/translations/hu.json index b2744430a4..9210f0e8f3 100644 --- a/translations/hu.json +++ b/translations/hu.json @@ -2164,6 +2164,7 @@ "name": "Entitás szűrő" }, "entity": { + "description": "Az Entitás kártya gyors áttekintést nyújt az entitás állapotáról.", "name": "Entitás" }, "gauge": { diff --git a/translations/ko.json b/translations/ko.json index 0ee6b2dda8..eb906a39ce 100644 --- a/translations/ko.json +++ b/translations/ko.json @@ -2164,6 +2164,7 @@ "name": "구성요소 필터" }, "entity": { + "description": "구성요소 카드는 구성요소의 상태에 대한 빠른 개요를 제공합니다.", "name": "구성요소" }, "gauge": { diff --git a/translations/lb.json b/translations/lb.json index 89f869da2b..f845fa4f24 100644 --- a/translations/lb.json +++ b/translations/lb.json @@ -193,7 +193,7 @@ "on": "Detektéiert" }, "occupancy": { - "off": "Kloer", + "off": "Roueg", "on": "Detektéiert" }, "opening": { @@ -217,7 +217,7 @@ "on": "Detektéiert" }, "sound": { - "off": "Kloer", + "off": "Roueg", "on": "Detektéiert" }, "vibration": { @@ -395,8 +395,8 @@ "ui": { "auth_store": { "ask": "Soll dëse Login gespäichert ginn?", - "confirm": "Login späicheren", - "decline": "Nee Merci" + "confirm": "Jo", + "decline": "Nee" }, "card": { "alarm_control_panel": { @@ -627,7 +627,7 @@ "dismiss": "Verwerfen", "editor": { "confirm_delete": "Sécher fir dës Entrée ze läsche?", - "delete": "LÄSCHEN", + "delete": "Läschen", "enabled_cause": "Desaktivéiert duerch {cause}.", "enabled_description": "Deaktivéiert Entitéiten ginn net am Home Assistant bäigesat.", "enabled_label": "Entitéit aktivéieren", @@ -637,7 +637,7 @@ "name": "Numm iwwerschreiwen", "note": "Nott: dëst funktionéiert villäicht nach net mat all Integratioun.", "unavailable": "Dës Entitéit ass net erreechbar fir de Moment.", - "update": "AKTUALISEIEREN" + "update": "Aktualiséieren" }, "no_unique_id": "Dës Entitéit huet keng eenzegaarteg ID, dofir kënnen hir Astellungen net am Benotzer Interface geréiert ginn.", "related": "Relatioun", @@ -653,6 +653,7 @@ "generic": { "icon": "Ikon", "initial_value": "Initial Wäert beim start", + "initial_value_explain": "De Wäert deen den Element huet wann Home Assistant start. Wann eidel gelooss, gëtt de Wäert op de fiirechte Wäert zeréckgesat.", "name": "Numm" }, "input_datetime": { @@ -669,7 +670,7 @@ "min": "Minimale Wäert", "mode": "Affichage Modus", "slider": "Slider", - "step": "Schrëtt Gréisst vum Slider", + "step": "Schrëtt Gréisst", "unit_of_measurement": "Moosseenheet" }, "input_select": { @@ -683,10 +684,14 @@ "min": "Minimal Längt", "mode": "Affichage Modus", "password": "Passwuert", + "pattern": "Regex Muster fir Client-Säiteg Validatioun", "text": "Text" }, "not_editable": "Net Editéierbar", - "required_error_msg": "Dëst Feld ass erfuerderlech" + "not_editable_text": "Dës Entitéit kann net vum Benotzer Interface aus geännert\nginn well se iwwer configuration.yaml erstallt ass.", + "platform_not_loaded": "{platform} Integratioun ass net gelueden. Setz et an deng Konfiguration dobäi mat 'default_config:' oder '{platform}:'.", + "required_error_msg": "Dëst Feld ass erfuerderlech", + "yaml_not_editable": "D'Astellunge vun dëser Entitéit kënnen net vun vum Benotzer Interface as geännert ginn. Nëmmen Entitéiten déi iwwer den Benotzer Interface aus konfiguréiert sinn kënnen vun do aus geännert ginn." }, "more_info_control": { "dismiss": "Dialog ofbriechen", @@ -809,7 +814,7 @@ "link_profile_page": "är Profil Säit" }, "areas": { - "caption": "Lëscht vun de Beräicher", + "caption": "Beräicher", "create_area": "Beräich erstellen", "data_table": { "area": "Beräich", @@ -829,7 +834,7 @@ "no_areas": "Et sinn nach keng Beräicher do!", "picker": { "create_area": "Beräich erstellen", - "header": "Lëscht vun de Beräicher", + "header": "Beräicher", "integrations_page": "Integratiouns Säit", "introduction": "Beräicher gi benotzt fir d'Organisatioun vum Standuert vun den Apparater. Dës Informatioun gëtt vum Home Assistant benotzt fir iech ze hëllefe fir den Interface, Berechtegungen an Integratioune mat aner Systemer ze geréieren.", "introduction2": "Fir Apparater an e Beräich ze setzen, benotzt de Link ënne fir op d'Integratiouns Säit ze kommen a klickt do op eng konfiguréiert Integratioun fir d'Kaart vum Apparat unzeweisen.", @@ -891,7 +896,7 @@ "delete_confirm": "Sëcher fir ze läschen?", "duplicate": "Duplikéiere", "header": "Konditiounen", - "introduction": "Konditioune sinn een optionalen Deel vun engem Automatismus a kënne benotzt gi fir ze bestëmme wann eng Aktioun ausgeféiert gëtt. Konditioune gläichen den Ausléiser mee sinn awer ganz ënnerschiddlech. Een Ausléiser iwwerwaacht d'Evenementer am System, an eng Konditioun iwwerwaacht de Status vum System. Een Ausléiser gesäit wann ee Schalter ugeschalt gëtt. Eng Konditioun gesäit nëmmen op de Schalter un oder aus ass.\n\n[Léier méi iwwer Konditioune.](https://home-assistant.io/docs/scripts/conditions/)", + "introduction": "Konditioune sinn een optionalen Deel a kënne benotzt gi fir ze bestëmme wann eng Aktioun ausgeféiert gëtt. ", "learn_more": "Méi iwwert Konditioune liesen", "name": "Konditioun", "type_select": "Typ vun Konditioun", @@ -961,7 +966,7 @@ "triggers": { "add": "Ausléiser dobäisetzen", "delete": "Läschen", - "delete_confirm": "Sëcher fir ze läschen?", + "delete_confirm": "Sëcher fir dëst ze läschen?", "duplicate": "Replikéieren", "header": "Ausléiser", "introduction": "Een Ausléiser start de Prozess vun engem Automatismus. Et ass méiglech méi wéi een Ausléiser fir een Automatismus unzeginn. Wann een Ausléiser start validéiert Home Assistant d'Konditiounen a féiert - de Fall gesat - eng Aktioun aus.\n\n[Léier méi iwwert Ausléiser.](https://home-assistant.io/docs/automation/trigger/)", @@ -1358,7 +1363,7 @@ "update": "Aktualiséieren" }, "entities": { - "caption": "Lëscht vun den Entitéiten", + "caption": "Entitéiten", "description": "Iwwersiicht vun all bekannten Entitéiten.", "editor": { "confirm_delete": "Sécher fir dës Entrée ze läsche?", @@ -1391,7 +1396,7 @@ "show_readonly": "Schreifgeséchert Entitéiten uweisen", "show_unavailable": "Net ereechbar Entitéite uweisen" }, - "header": "Lëscht vun den Entitéiten", + "header": "Entitéiten", "headers": { "enabled": "Aktivéiert", "entity_id": "ID vun der Entitéit", @@ -1401,12 +1406,12 @@ }, "integrations_page": "Integratiouns Säit", "introduction": "Home Assistant hält eng Lëscht vun all Entitéit's ID déi eenzel erkennbar ass a bis elo vum System erkannt gouf. All eenzel vun dësen Entitéite kritt eng ID zougewise welch nëmme fir dës Entitéit reservéiert ass.", - "introduction2": "Benotzt d'Lëscht vun den Entitéite fir d'Nimm z'änneren, d'Entitéits ID z'änneren oder d'Entrée aus dem Home Assistant ze läschen. Remarque: Läsche vun der Entitéit aus der Lëscht läscht d'Entitéit selwer net. Fir dës ze läsche follegt dem Link ënnen a läscht et op der Integratiouns Säit.", + "introduction2": "Benotzt d'Lëscht vun den Entitéite fir d'Nimm z'änneren, d'Entitéits ID z'änneren oder d'Entrée aus dem Home Assistant ze läschen.", "remove_selected": { "button": "Ausgewielte läschen", "confirm_partly_text": "Nëmmen {removable} vun den ausgewielten {selected} Entitéite kënne geläscht ginn. Entitéiten kënne nëmmen geläscht ginn wann eng Integratioun déi Entitéiten net méi zur Verfügung stellt. Heiansdo muss Home Assistant frësch gestart ginn fir Entitéiten vun enger geläschten Integratioun ze läschen. Sécher fir déi läschbar Entitéiten ze läschen?", "confirm_partly_title": "Nëmmen {number} ausgewielten Entitéiten kënne geläscht ginn.", - "confirm_text": "Entitéiten kënne nëmmen geläscht gin wann d'Integratioun d'Entitéiten net méi zur Verfügung stellt.", + "confirm_text": "Du solls déi vun der Lovelace Konfiguratioun an Automatisme läschen falls se dës Entitéiten enthalen.", "confirm_title": "Wëllt dir {number} Entitéite läschen?" }, "selected": "{number} ausgewielt", @@ -1487,14 +1492,14 @@ }, "configure": "Astellen", "configured": "Konfiguréiert", - "description": "Verwalt verbonnen Apparater an Servicen", + "description": "Integratioune verwalten an ariichten", "details": "Detailer vun der Integratioun", "discovered": "Entdeckt", "home_assistant_website": "Home Assistant Websäit", "ignore": { "confirm_delete_ignore": "Dëst wäert d'Integratioun an Ären entdeckten Integratiounen erëm siichtbar maache wann se entdeckt gëtt. Dëst kann e Restart erfuerderen oder e bëssi Zäit brauchen.", "confirm_delete_ignore_title": "Ophale mam ignoréieren vun {name}?", - "confirm_ignore": "Sidd Dir sécher, datt Dir dës Integratioun net wëll ariichten? Dir kënnt dëst annuléieren andeems Dir op 'Ignoréiert Integratiounen uweisen' am Menü uewe riets klickt.", + "confirm_ignore": "Bass du sécher, dass Du dës Integratioun net wëlls ariichten? Du kanns dëst annuléieren andeems Du op 'Ignoréiert Integratiounen uweisen' am Menü uewe riets klicks.", "confirm_ignore_title": "Entdeckung vun {name} ignoréieren?", "hide_ignored": "Ignoréiert Integratiounen verstoppen", "ignore": "Ignoréieren", @@ -1526,13 +1531,13 @@ "delete": "Läschen", "dismiss": "Zoumaachen", "edit_dashboard": "Tableau de Bord änneren", - "icon": "Ikon vun der Säite Läischt", + "icon": "Ikon", "new_dashboard": "Neien Tableau de Bord dobäisetzen", "remove_default": "Als Standard op dësem Apparat ewech huelen", "require_admin": "Admin nëmmen", "set_default": "Als Standard op dësem Apparat définéieren", "show_sidebar": "An der Säite Läischt uweisen", - "title": "Titel vun der Säite Läischt", + "title": "Titel", "title_required": "Titel ass erfuerderlech.", "update": "Aktualiséieren", "url": "Url", @@ -1548,7 +1553,7 @@ "sidebar": "An der Säite Läischt uweisen", "title": "Titel" }, - "open": "Tableau de Bord opmaachen" + "open": "Opmaachen" } }, "description": "Deng Lovelace Tableau de Bord konfiguréieren", @@ -1657,7 +1662,7 @@ } }, "script": { - "caption": "Skript", + "caption": "Skripten", "description": "Skript erstellen an änneren", "editor": { "alias": "Numm", @@ -1693,8 +1698,8 @@ "automation": "Automatisme nei lueden", "core": "Standuert and Personnalisatioun néi lueden", "group": "Gruppe nei lueden", - "heading": "Konfiguratioun gëtt frësch gelueden", - "introduction": "E puer Deeler vum Home Assistant kënne frësch geluede ginn ouni datt een Neistart néideg ass. Klick op nei luede fir di aktuell Konfiguratioun z'entlueden an di nei Konfiguratioun ze lueden.", + "heading": "YAML Konfiguratioun gëtt frësch gelueden", + "introduction": "E puer Deeler vum Home Assistant kënne frësch geluede ginn ouni datt een Neistart néideg ass. Klick op nei luede fir di aktuell Konfiguratioun z'entlueden an di nei Konfiguratioun ze lueden.", "person": "Persoune frësch lueden", "scene": "Szeene néi lueden", "script": "Skripte nei lueden", @@ -1890,7 +1895,7 @@ "required_error_msg": "Dëst Feld ass erfuerderlech", "update": "Aktualiséieren" }, - "edit_home_zone": "De Standuert vun Ärem Doheem kann an der allgemenger Konfiguratioun geännert ginn.", + "edit_home_zone": "De Radius vun der Heemzon kann net vum Frontend aus geännert ginn. Zéi d'Markéierung op der Kaart fir d'Heemezone ze réckelen.", "edit_home_zone_narrow": "De Radius vun der Home Zone kann nach net vum Frontend aus geännert ginn. De Standuert kann an der allgemenger Konfiguratioun geännert ginn.", "go_to_core_config": "Zur genereller Konfiguratioun wiesselen?", "home_zone_core_config": "De Standuert vun Ärer Heemzon kann vun der allgemenger Konfiguratiounssäit aus geännert ginn. De Radius vun der Home Zone kann nach net am Frontend geännert ginn. Wëllt Dir op d'allgemeng Konfiguratioun goen?", @@ -2113,7 +2118,7 @@ } }, "changed_toast": { - "message": "Lovelace Konfiguratioun gouf geännert, soll frësch geluede ginn?", + "message": "Lovelace Konfiguratioun gouf geännert, soll frësch geluede ginn fir d'Ânnerunge siichtbar ze machen?", "refresh": "Frësch lueden" }, "editor": { @@ -2159,6 +2164,7 @@ "name": "Entitéite Filter" }, "entity": { + "description": "D'Entity Kaart gëtt Dir e séieren Iwwerbléck iwwer den Zoustand vun enger Entitéit.", "name": "Entitéit" }, "gauge": { @@ -2216,7 +2222,7 @@ }, "iframe": { "description": "Websäit Kaart erlaabt et eng aaner Websäit am Home Assistant unzeweisen.", - "name": "iFrame" + "name": "Websäit" }, "light": { "description": "Luucht Kaart erlaabt et d'Hellegkeet vun de Luuchten ze veränneren.", @@ -2290,11 +2296,11 @@ }, "edit_card": { "add": "Kaart dobäisetzen", - "delete": "Läschen", + "delete": "Kaart läschen", "duplicate": "Kaart Replikéieren", "edit": "Änneren", "header": "Kaart Konfiguratioun", - "move": "Réckelen", + "move": "Zur Usiicht réckelen", "options": "Méi Optiounen", "pick_card": "Wielt eng Kaart aus déi soll dobäigesat ginn.", "pick_card_view_title": "Wéieng Kaart wëllt dir zu ärer {name}Usiicht dobäisetzen?", @@ -2338,7 +2344,7 @@ "confirm_remove_config_text": "Mir erstellen automatesch är Lovelace Usiichte mat äre Beräicher an Apparaten wann dir är Lovelace Konfiguratioun läscht.", "confirm_remove_config_title": "Sécher fir är Lovelace Konfiguratioun ze läschen? Mir erstellen automatesch är Lovelace Usiichte mat äre Beräicher an Apparaten.", "confirm_unsaved_changes": "Dir hutt net gespäichert Ännerungen, sécher fir eraus ze goen?", - "confirm_unsaved_comments": "Är Konfiguratioun enthält Kommentaren, dës ginn net gespäichert. Wëllt dir weiderfueren?", + "confirm_unsaved_comments": "Deng Konfiguratioun enthält Kommentaren, dës ginn net gespäichert. Wëlls Du weiderfueren?", "error_invalid_config": "Är Konfiguratioun ass ongëlteg: {error}", "error_parse_yaml": "Kann de YAML net analyséieren: {error}", "error_remove": "Kann Konfiguratioun net läschen: {error}", @@ -2383,7 +2389,7 @@ "reload_resources": "Ressource frësch lueden", "unused_entities": "Onbenotzt Entitéiten" }, - "reload_lovelace": "Lovelace frësch lueden", + "reload_lovelace": "Benotzer frësch lueden", "reload_resources": { "refresh_body": "D'Säit muss aktualiséiert gi fir d'Aktualiséierung ofzeschléissen, elo aktualiséieren?", "refresh_header": "Soll aktualiséiert ginn?" @@ -2398,7 +2404,7 @@ "title": "Onbenotzten Entitéiten" }, "views": { - "confirm_delete": "Sécher fir dës Usiicht ze läsche?", + "confirm_delete": "Usiicht läschen?", "confirm_delete_existing_cards": "D'Läschen vun dëser Usiicht läscht och d'Kaarten", "confirm_delete_existing_cards_text": "Sécher fir d'Usiicht '{name}' ze läsche? Dës Usiicht enthält {number} Kaart(en) déi och geläscht ginn. Dës Aktioun kann net réckgängeg gemaach ginn.", "confirm_delete_text": "Sécher fir d'Usiicht '{name}' ze läsche?", @@ -2589,7 +2595,7 @@ }, "profile": { "advanced_mode": { - "description": "Home Assistant verstoppt standardméisseg avancéiert Features an Optiounen. Dir kënnt dës Funktiounen zougänglech maachen andeems Dir dës Optioun aktivéiert. Dës ass eng Benotzer spezifesch Astellung an huet keen Impakt op aner Home Assistant Benotzer.", + "description": "Entspär fortgeschratt Funktiounen.", "link_promo": "Méi liesen", "title": "Avancéierte Modus" }, diff --git a/translations/nl.json b/translations/nl.json index ff8296b046..a1caff4545 100644 --- a/translations/nl.json +++ b/translations/nl.json @@ -394,7 +394,7 @@ }, "ui": { "auth_store": { - "ask": "Wil je de ingelogd blijven?", + "ask": "Wil je ingelogd blijven?", "confirm": "Ja", "decline": "Nee" }, @@ -533,7 +533,7 @@ "wsw": "WZW" }, "forecast": "Verwachting", - "high": "hoog", + "high": "Hoog", "low": "Laag" } }, @@ -546,6 +546,7 @@ "save": "Opslaan", "successfully_deleted": "Succesvol verwijderd", "successfully_saved": "Succesvol opgeslagen", + "undo": "Ongedaan maken", "yes": "Ja" }, "components": { @@ -1080,8 +1081,8 @@ "enable": "inschakelen", "enable_ha_skill": "Schakel de Home Assistant skill voor Alexa", "enable_state_reporting": "Statusrapportage inschakelen", - "info": "Met de Alexa integratie voor Home Assistant Cloud kun je al je Home Assistant apparaten bedienen via elk apparaat met Alexa-ondersteuning", - "info_state_reporting": "Als u statusrapportage inschakelt, stuurt Home Assistant alle statuswijzingen van opengestelde entiteiten naar Amazon. Hiermee kunt u altijd de laatste status zien in de Alexa app en kunt u de statuswijzgingen gebruiken om routines te maken.", + "info": "Met de Alexa integratie voor Home Assistant Cloud kun je al je Home Assistant apparaten bedienen via elk apparaat met Alexa-ondersteuning.", + "info_state_reporting": "Als u statusrapportage inschakelt, stuurt Home Assistant alle statuswijzigingen van opengestelde entiteiten naar Amazon. Hiermee kunt u altijd de laatste status zien in de Alexa app en kunt u de statuswijzigingen gebruiken om routines te maken.", "manage_entities": "Entiteiten beheren", "state_reporting_error": "Kan de rapportstatus niet {aanzetten_uitzetten}", "sync_entities": "Synchronisatie-entiteiten", @@ -1093,7 +1094,7 @@ "fetching_subscription": "Abonnement ophalen...", "google": { "config_documentation": "Configuratie documentatie", - "devices_pin": "Beveiligingsapparaten Pin", + "devices_pin": "Pin Beveiligingsapparaten", "enable_ha_skill": "Activeer Home Assistant voor Google Assistant", "enable_state_reporting": "Statusrapportage inschakelen", "enter_pin_error": "Kan pincode niet opslaan:", @@ -1127,7 +1128,7 @@ "thank_you_note": "Bedankt voor uw deelname aan Home Assistant Cloud. Het is vanwege mensen zoals u dat we een geweldige domotica-ervaring voor iedereen kunnen maken. Dank je!", "webhooks": { "disable_hook_error_msg": "Kan webhook niet uitschakelen:", - "info": "Alles dat is geconfigureerd om door een webhook te worden geactiveerd, kan een openbaar toegankelijke URL krijgen zodat u gegevens overal naar Home Assistant kunt terugsturen, zonder uw exemplaar aan internet bloot te stellen.", + "info": "Alles wat is geconfigureerd om door een webhook te worden geactiveerd, kan een openbaar toegankelijke URL krijgen zodat u gegevens overal naar Home Assistant kunt terugsturen, zonder uw exemplaar aan internet bloot te stellen.", "link_learn_more": "Meer informatie over het maken van door webhook aangedreven automatiseringen.", "loading": "Laden ...", "manage": "Beheer", @@ -1139,7 +1140,7 @@ } }, "alexa": { - "banner": "Het bewerken van de entiteiten die via deze gebruikersinterface worden weergegeven, is uitgeschakeld omdat je entiteitenfilters hebt geconfigureerd in configuration.yaml.", + "banner": "Het bewerken van de entiteiten die via deze gebruikersinterface worden weergegeven is uitgeschakeld, omdat je entiteitenfilters hebt geconfigureerd in configuration.yaml.", "expose": "Blootstellen aan Alexa", "exposed_entities": "Blootgestelde entiteiten", "not_exposed_entities": "Niet blootgestelde entiteiten", @@ -1177,7 +1178,7 @@ "title": "Wachtwoord vergeten" }, "google": { - "banner": "Het bewerken van de entiteiten die via deze gebruikersinterface worden weergegeven, is uitgeschakeld omdat je entiteitenfilters hebt geconfigureerd in configuration.yaml.", + "banner": "Het bewerken van de entiteiten die via deze gebruikersinterface worden weergegeven is uitgeschakeld, omdat je entiteitenfilters hebt geconfigureerd in configuration.yaml.", "disable_2FA": "Schakel tweestapsverificatie uit", "expose": "Blootstellen aan Google Assistant", "exposed_entities": "Blootgestelde entiteiten", @@ -1287,7 +1288,7 @@ "attributes_not_set": "De volgende attributen zijn nog niet ingesteld. Je kunt ze instellen als je wilt.", "attributes_outside": "De volgende kenmerken worden aangepast van buiten customize.yaml", "attributes_override": "Je kunt ze overschrijven als je wilt.", - "attributes_set": "De volgende attributen van de entiteit zijn.", + "attributes_set": "De volgende attributen van de entiteit zijn automatisch ingevuld.", "caption": "Aanpassingen", "description": "Pas je entiteiten aan", "different_include": "Mogelijk via een domein, een glob of een andere include.", @@ -1523,7 +1524,7 @@ "storage": "UI gecontroleerd", "yaml": "YAML-bestand" }, - "confirm_delete": "Weet je zeker dat je deze dashboard wilt verwijderen?", + "confirm_delete": "Weet je zeker dat je dit dashboard wilt verwijderen?", "default_dashboard": "Dit is het standaard dashboard", "detail": { "create": "Aanmaken", @@ -1734,6 +1735,7 @@ "editor": { "activate_user": "Activeer gebruiker", "active": "Actief", + "admin": "Beheerder", "caption": "Bekijk gebruiker", "change_password": "Wachtwoord wijzigen", "confirm_user_deletion": "Weet je zeker dat je {name} wilt verwijderen?", @@ -1747,6 +1749,7 @@ "owner": "Eigenaar", "rename_user": "Naam wijzigen", "system_generated": "Gegenereerd door systeem", + "system_generated_users_not_editable": "Kan door het systeem gegenereerde gebruikers niet bijwerken.", "system_generated_users_not_removable": "Kan door het systeem gegenereerde gebruikers niet verwijderen.", "unnamed_user": "Naamloze gebruiker", "update_user": "Bijwerken", @@ -1876,7 +1879,7 @@ "configured_in_yaml": "Zones die via configuration.yaml zijn geconfigureerd kunnen niet worden bewerkt in de gebruikers", "confirm_delete": "Weet je zeker dat je deze zone wilt verwijderen?", "create_zone": "Creëer Zone", - "description": "Beheer de zones waarin jepersonen wilt volgen.", + "description": "Beheer de zones waarin je personen wilt volgen.", "detail": { "create": "Aanmaken", "delete": "Verwijder", @@ -1987,7 +1990,7 @@ "developed_by": "Ontwikkeld door een stel geweldige mensen.", "frontend": "Frontend", "frontend_version": "Frontend-versie: {version} - {type}", - "home_assistant_logo": "Home Assistent-logo", + "home_assistant_logo": "Home Assistant-logo", "icons_by": "Icons door", "license": "Gepubliceerd onder de Apache 2.0-licentie", "lovelace_ui": "Ga naar de Lovelace UI", @@ -2002,7 +2005,7 @@ }, "logs": { "clear": "Wis", - "details": "Logboekdetails ( {level} )", + "details": "Logboekdetails ({level})", "load_full_log": "Laad volledige Home Assistant logboek", "loading_log": "Foutenlogboek laden ...", "multiple_messages": "bericht kwam voor het eerst om {time} en verschijnt {counter} malen", @@ -2082,7 +2085,7 @@ "add_entities": { "generated_unsupported": "Je kan deze functie alleen gebruiken als je de controle over de Lovelace gebruikersinterface hebt overgenomen", "saving_failed": "Opslaan van de Lovelace gebruikersinterface is mislukt.", - "yaml_unsupported": "Je kan deze functie niet gebruiken wanneer je de Lovelace gebruikersinterface gebruikt in YAML modus" + "yaml_unsupported": "Je kan deze functie niet gebruiken wanneer je de Lovelace gebruikersinterface gebruikt in YAML modus." }, "cards": { "confirm_delete": "Weet je zeker dat je deze kaart wilt verwijderen?", @@ -2161,6 +2164,7 @@ "name": "Entiteit-filter" }, "entity": { + "description": "De Entiteitskaart geeft u een snel overzicht van de status van uw entiteit.", "name": "Entiteit" }, "gauge": { @@ -2178,7 +2182,7 @@ "attribute": "Kenmerk", "camera_image": "Camera-entiteit", "camera_view": "Cameraweergave", - "double_tap_action": "Dubbele tik Actie", + "double_tap_action": "Actie bij dubbel-tik", "entities": "Entiteiten", "entity": "Entiteit", "hold_action": "Actie vasthouden", @@ -2227,7 +2231,7 @@ "map": { "dark_mode": "Donkere modus?", "default_zoom": "Standaard zoom", - "description": "Met de Map-kaart kun je entiteiten op een kaart kunt weergeven.", + "description": "Met de Map-kaart kun je entiteiten op een kaart weergeven.", "geo_location_sources": "Geolocatiebronnen", "hours_to_show": "Uren om weer te geven", "name": "Kaart", @@ -2293,13 +2297,13 @@ "edit_card": { "add": "Kaart toevoegen", "delete": "Verwijder kaart", - "duplicate": "Dubbele kaart", + "duplicate": "Dupliceer kaart", "edit": "Bewerken", "header": "Kaart configuratie", "move": "Verplaatsen", "options": "Meer opties", "pick_card": "Welke kaart wil je toevoegen?", - "pick_card_view_title": "Welke kaart wil je toevoegen aan je {name} weergeve?", + "pick_card_view_title": "Welke kaart wil je toevoegen aan je {name} weergave?", "save": "Opslaan", "show_code_editor": "Code-editor weergeven", "show_visual_editor": "Visual Editor weergeven", @@ -2605,7 +2609,7 @@ }, "current_user": "Je bent momenteel ingelogd als {fullName}.", "dashboard": { - "description": "Kies een standaarddashboard voor dit apparaat.", + "description": "Kies een standaard dashboard voor dit apparaat.", "dropdown_label": "Dashboard", "header": "Dashboard" }, diff --git a/translations/pl.json b/translations/pl.json index 9bfc757b89..815e757460 100644 --- a/translations/pl.json +++ b/translations/pl.json @@ -2164,6 +2164,7 @@ "name": "Filtr encji" }, "entity": { + "description": "Karta encja zapewnia szybki przegląd stanu encji.", "name": "Encja" }, "gauge": { @@ -2266,7 +2267,7 @@ "name": "Stan rośliny" }, "sensor": { - "description": "Karta sensor zapewnia szybki przegląd stanu czujników z opcjonalnym wykresem, aby wizualizować zmiany w czasie.", + "description": "Karta sensor zapewnia szybki przegląd stanu sensorów z opcjonalnym wykresem, aby wizualizować zmiany w czasie.", "graph_detail": "Szczegół wykresu", "graph_type": "Rodzaj wykresu", "name": "Sensor" diff --git a/translations/pt-BR.json b/translations/pt-BR.json index e3909e7a10..d3c9cc043a 100644 --- a/translations/pt-BR.json +++ b/translations/pt-BR.json @@ -509,6 +509,7 @@ "attributes": { "air_pressure": "Pressão do ar", "humidity": "Umidade", + "precipitation": "Precipitação", "temperature": "Temperatura", "visibility": "Visibilidade", "wind_speed": "Velocidade do vento" @@ -531,16 +532,21 @@ "wnw": "ONO", "wsw": "OSO" }, - "forecast": "Previsão" + "forecast": "Previsão", + "high": "Alto", + "low": "Fraco" } }, "common": { "cancel": "Cancelar", "close": "Fechar", + "delete": "Eliminar", "loading": "Carregando", "no": "Não", "save": "Salvar", + "successfully_deleted": "Eliminado com sucesso", "successfully_saved": "Salvo com sucesso", + "undo": "Voltar para trás", "yes": "Sim" }, "components": { @@ -755,6 +761,10 @@ "areas": { "caption": "Registro de Áreas", "create_area": "CRIAR ÁREA", + "data_table": { + "area": "Área", + "devices": "Dispositivos" + }, "description": "Visão geral de todas as áreas da sua casa.", "editor": { "create": "CRIAR", @@ -992,6 +1002,9 @@ "delete_confirm": "Tem certeza de que deseja excluir essa automação?", "edit_automation": "Editar automação", "header": "Editor de automação", + "headers": { + "name": "Nome" + }, "introduction": "O editor de automação permite criar e editar automações. Por favor, siga o link abaixo para ler as instruções para se certificar de que você configurou o Home Assistant corretamente.", "learn_more": "Saiba mais sobre automações", "no_automations": "Não encontramos nenhuma automação editável", @@ -1249,6 +1262,7 @@ "automations": "Automações", "cant_edit": "Você só pode editar itens que são criados na IU.", "caption": "Dispositivos", + "confirm_delete": "Tem certeza de que deseja excluir este dispositivo?", "confirm_rename_entity_ids": "Você também deseja renomear os IDs das entidades?", "data_table": { "area": "Área", @@ -1258,6 +1272,7 @@ "manufacturer": "Fabricante", "model": "Modelo" }, + "delete": "Eliminar", "description": "Gerenciar dispositivos conectados", "details": "Aqui estão todos os detalhes do seu dispositivo.", "device_not_found": "Dispositivo não encontrado.", @@ -1268,6 +1283,7 @@ }, "info": "Informação do dispositivo", "name": "Nome", + "no_devices": "Sem dispositivos", "scene": { "create": "Criar cenário com o dispositivo", "no_scenes": "Sem cenários", @@ -1377,6 +1393,7 @@ }, "failed_create_area": "Falha ao criar a área.", "finish": "Terminar", + "loading_first_time": "Aguarde enquanto a integração está sendo instalada", "name_new_area": "Nome da nova área?", "not_all_required_fields": "Nem todos os campos obrigatórios são preenchidos.", "submit": "Enviar" @@ -1405,6 +1422,11 @@ "note_about_website_reference": "Existem mais disponíveis no " }, "introduction": "Aqui é possível configurar seus componentes e Home Assistant. Nem tudo é possível configurar via UI, mas estamos trabalhando nisso.", + "lovelace": { + "dashboards": { + "default_dashboard": "Este é o painel de instrumentos padrão" + } + }, "person": { "add_person": "Adicionar pessoa", "caption": "Pessoas", @@ -1464,6 +1486,9 @@ "delete_scene": "Excluir cena", "edit_scene": "Editar cena", "header": "Editor de cena", + "headers": { + "name": "Nome" + }, "introduction": "O editor de cenas permite criar e editar cenas. Siga o link abaixo para ler as instruções para garantir que você tenha configurado o Home Assistant corretamente.", "learn_more": "Saiba mais sobre cenas", "no_scenes": "Não foi possível encontrar cenas editáveis", @@ -1491,9 +1516,13 @@ "add_script": "Adicionar script", "edit_script": "Editar script", "header": "Editor de Scripts", + "headers": { + "name": "Nome" + }, "introduction": "O editor de scripts permite criar e editar scripts. Por favor, siga o link abaixo para ler as instruções e garantir que você configurou o Home Assistant corretamente.", "learn_more": "Saiba mais sobre scripts", "no_scripts": "Não foi possível encontrar nenhum script editável", + "show_info": "Mostrar informações sobre a cena", "trigger_script": "Disparar o script" } }, @@ -1542,6 +1571,7 @@ "editor": { "activate_user": "Ativar usuário", "active": "Ativo", + "admin": "Administrador", "caption": "Visualizar usuário", "change_password": "Mudar senha", "confirm_user_deletion": "Tem certeza de que deseja excluir {name} ?", @@ -1551,14 +1581,22 @@ "group": "Grupo", "group_update_failed": "Falha ao atualizar grupo:", "id": "ID", + "name": "Nome", "owner": "Proprietário", "rename_user": "Renomear usuário", "system_generated": "Gerado pelo sistema", + "system_generated_users_not_editable": "Não é possível remover utilizadores gerados pelo sistema.", "system_generated_users_not_removable": "Não foi possível remover usuários gerados pelo sistema.", "unnamed_user": "Usuário sem nome", + "update_user": "Atualizar", "user_rename_failed": "Falha ao renomear usuário:" }, "picker": { + "headers": { + "group": "Grupo", + "name": "Nome", + "system": "Sistema" + }, "system_generated": "Gerado pelo sistema", "title": "Usuários" } @@ -1913,6 +1951,9 @@ "entity-filter": { "name": "Entidade Filtro" }, + "entity": { + "name": "Entidade" + }, "gauge": { "name": "Indicador", "severity": { @@ -1924,8 +1965,10 @@ }, "generic": { "aspect_ratio": "Proporção da tela", + "attribute": "Atributo", "camera_image": "Entidade da câmera", "camera_view": "Vista da câmera", + "double_tap_action": "Ação de toque duplo", "entities": "Entidades", "entity": "Entidade", "hold_action": "Manter Ação", @@ -1936,6 +1979,7 @@ "maximum": "Máximo", "minimum": "Mínimo", "name": "Nome", + "no_theme": "Nenhum tema", "refresh_interval": "Intervalo de atualização", "show_icon": "Mostrar Icone?", "show_name": "Mostrar nome?", @@ -1966,6 +2010,7 @@ "dark_mode": "Modo escuro?", "default_zoom": "Zoom padrão", "geo_location_sources": "Fontes de geolocalização", + "hours_to_show": "Horas a Mostrar", "name": "Mapa", "source": "Origem" }, @@ -2010,9 +2055,14 @@ "name": "Previsão do Tempo" } }, + "cardpicker": { + "custom_card": "Personalizado", + "no_description": "Nenhuma descrição disponível" + }, "edit_card": { "add": "Adicionar Cartão", "delete": "Excluir", + "duplicate": "Duplicar", "edit": "Editar", "header": "Configuração de cartão", "move": "Mover", @@ -2036,7 +2086,10 @@ "header": "Configurações", "header_name": "Ver Configuração de {nome}", "move_left": "Mover à esquerda", - "move_right": "Mover à direita" + "move_right": "Mover à direita", + "visibility": { + "select_users": "Selecione quais usuários devem ver essa visualização na navegação" + } }, "header": "Editar “interface” do usuário", "menu": { @@ -2062,6 +2115,7 @@ }, "save_config": { "cancel": "Esquecer", + "empty_config": "Comece com um painel de instrumentos vazio", "header": "Assuma o controle da sua interface do Lovelace", "para": "Por padrão, o Home Assistant manterá sua interface de usuário, atualizando-a quando novas entidades ou componentes do Lovelace estiverem disponíveis. Se você assumir o controle, não faremos mais alterações automaticamente para você.", "para_sure": "Tem certeza de que deseja assumir o controle da sua interface de usuário?", @@ -2070,7 +2124,8 @@ "view": { "panel_mode": { "description": "Isso renderiza o primeiro cartão em largura total; outros cartões nesta visualização não serão renderizados.", - "title": "Modo Painel?" + "title": "Modo Painel?", + "warning_multiple_cards": "Esta vista contém mais do que uma carta, mas uma vista de painel só pode mostrar 1 carta." } } }, @@ -2080,9 +2135,14 @@ "exit_edit_mode": "Sair do modo de edição de interface", "help": "Ajuda", "refresh": "Atualizar", + "reload_resources": "Recarregar recursos", "unused_entities": "Entidades não utilizadas" }, "reload_lovelace": "Recarregar Lovelace", + "reload_resources": { + "refresh_body": "Você precisa atualizar a página para concluir a recarga. Deseja atualizar agora?", + "refresh_header": "Deseja atualizar?" + }, "unused_entities": { "available_entities": "Essas são as entidades que você tem disponíveis, mas ainda não estão na sua interface do Lovelace.", "domain": "Domínio", @@ -2097,6 +2157,7 @@ "existing_cards": "Você não pode excluir uma exibição que contenha cartões. Remova os cartões primeiro." }, "warning": { + "attribute_not_found": "O atributo {attribute} não está disponível em: {entity}", "entity_non_numeric": "Entidade não é numérica: {entity}", "entity_not_found": "Entidade não disponível: {entity}" } @@ -2293,6 +2354,11 @@ "submit": "Enviar" }, "current_user": "Você está logado como {fullName}.", + "dashboard": { + "description": "Escolha um painel padrão para este dispositivo.", + "dropdown_label": "painel de controle", + "header": "painel de controle" + }, "force_narrow": { "description": "Isto irá ocultar a barra lateral por padrão, semelhante à experiência móvel.", "header": "Sempre ocultar a barra lateral" diff --git a/translations/ru.json b/translations/ru.json index 88ab1e5fcb..0309709c2c 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -1746,7 +1746,8 @@ "owner": "Владелец", "rename_user": "Изменить имя", "system_generated": "Системный", - "system_generated_users_not_removable": "Системные пользователи защищены от удаления.", + "system_generated_users_not_editable": "Системные пользователи защищены от редактирования", + "system_generated_users_not_removable": "Системные пользователи защищены от удаления", "unnamed_user": "Безымянный пользователь", "update_user": "Обновить", "user_rename_failed": "Не удалось переименовать пользователя" @@ -2160,6 +2161,7 @@ "name": "Фильтр объектов" }, "entity": { + "description": "Быстрый обзор состояния выбранного объекта.", "name": "Объект" }, "gauge": { @@ -2604,9 +2606,9 @@ }, "current_user": "Добро пожаловать, {fullName}! Вы вошли в систему.", "dashboard": { - "description": "Выберите панель по умолчанию для этого устройства.", + "description": "Панель, используемая по умолчанию для этого устройства", "dropdown_label": "Панель", - "header": "Панель" + "header": "Панель Lovelace UI" }, "force_narrow": { "description": "Боковая панель будет скрыта, аналогично мобильному интерфейсу", diff --git a/translations/zh-Hans.json b/translations/zh-Hans.json index b9f15becf6..e58cf0aef6 100644 --- a/translations/zh-Hans.json +++ b/translations/zh-Hans.json @@ -2164,6 +2164,7 @@ "name": "实体筛选" }, "entity": { + "description": "“实体”卡片供您快速了解实体的状态。", "name": "实体" }, "gauge": { diff --git a/translations/zh-Hant.json b/translations/zh-Hant.json index b129e10b1c..256fa7303e 100644 --- a/translations/zh-Hant.json +++ b/translations/zh-Hant.json @@ -546,7 +546,7 @@ "save": "儲存", "successfully_deleted": "成功刪除", "successfully_saved": "成功儲存", - "undo": "還原", + "undo": "撤消", "yes": "是" }, "components": { @@ -2164,6 +2164,7 @@ "name": "物件過濾式面板" }, "entity": { + "description": "物件面板、可快速獲得物件狀態概況。", "name": "物件" }, "gauge": { diff --git a/tsconfig.json b/tsconfig.json index da7442ff68..10023f6ca3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,19 @@ "skipLibCheck": true, "resolveJsonModule": true, "experimentalDecorators": true, - "importHelpers": true + "importHelpers": true, + "plugins": [ + { + "name": "ts-lit-plugin", + "strict": false, + "rules": { + "no-unknown-tag-name": "error", + "no-missing-import": "error", + "no-unclosed-tag": "error", + "no-incompatible-type-binding": "warning", + "no-invalid-css": "warning" + } + } + ] } } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index a9442303c3..0000000000 --- a/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": ["tslint:latest", "tslint-eslint-rules", "tslint-config-prettier"], - "rulesDirectory": ["tslint-plugin-prettier"], - "rules": { - "prettier": true, - "interface-name": false, - "no-submodule-imports": false, - "ordered-imports": false, - "object-literal-sort-keys": false, - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-leading-underscore" - ] - } -} diff --git a/yarn.lock b/yarn.lock index 0e066ef8e5..324ef229ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,12 +23,12 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.8.4": - version "7.8.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" - integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== +"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" + integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== dependencies: - browserslist "^4.8.5" + browserslist "^4.9.1" invariant "^2.2.4" semver "^5.5.0" @@ -52,22 +52,23 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== +"@babel/core@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" - json5 "^2.1.0" + json5 "^2.1.2" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" @@ -105,6 +106,16 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/generator@^7.9.0", "@babel/generator@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" + integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== + dependencies: + "@babel/types" "^7.9.5" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -135,13 +146,22 @@ "@babel/helper-explode-assignable-expression" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-builder-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" - integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== +"@babel/helper-builder-react-jsx-experimental@^7.9.0": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" + integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== dependencies: - "@babel/types" "^7.8.3" - esutils "^2.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-module-imports" "^7.8.3" + "@babel/types" "^7.9.5" + +"@babel/helper-builder-react-jsx@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" + integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/types" "^7.9.0" "@babel/helper-call-delegate@^7.4.4": version "7.4.4" @@ -152,22 +172,13 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== +"@babel/helper-compilation-targets@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" + integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-compilation-targets@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" - integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== - dependencies: - "@babel/compat-data" "^7.8.4" - browserslist "^4.8.5" + "@babel/compat-data" "^7.8.6" + browserslist "^4.9.1" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" @@ -192,6 +203,15 @@ "@babel/helper-regex" "^7.8.3" regexpu-core "^4.6.0" +"@babel/helper-create-regexp-features-plugin@^7.8.8": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" + integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.7.0" + "@babel/helper-define-map@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" @@ -244,6 +264,15 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.9.5" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -312,16 +341,17 @@ "@babel/types" "^7.5.5" lodash "^4.17.13" -"@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-simple-access" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.0.0": @@ -404,6 +434,16 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" @@ -434,6 +474,11 @@ dependencies: "@babel/types" "^7.8.3" +"@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -463,14 +508,14 @@ "@babel/traverse" "^7.6.0" "@babel/types" "^7.6.0" -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== +"@babel/helpers@^7.9.0": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" + integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== dependencies: "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" "@babel/highlight@^7.0.0": version "7.0.0" @@ -500,6 +545,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== +"@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== + "@babel/plugin-external-helpers@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" @@ -573,6 +623,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" +"@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" @@ -581,13 +639,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== +"@babel/plugin-proposal-object-rest-spread@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz#3fd65911306d8746014ec0d0cf78f0e39a149116" + integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.9.5" "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" @@ -597,14 +656,22 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== +"@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.8.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" + integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.8" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" @@ -676,6 +743,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" + integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -794,17 +868,17 @@ "@babel/helper-split-export-declaration" "^7.4.4" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== +"@babel/plugin-transform-classes@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" + integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" @@ -829,14 +903,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" - integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== +"@babel/plugin-transform-destructuring@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" + integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.8.3": +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== @@ -881,10 +955,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" - integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== +"@babel/plugin-transform-for-of@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" + integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -941,41 +1015,41 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== +"@babel/plugin-transform-modules-amd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" + integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== +"@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" + integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== +"@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" + integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== dependencies: "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" + integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== dependencies: - "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-module-transforms" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": @@ -1017,12 +1091,11 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-parameters@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" - integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== +"@babel/plugin-transform-parameters@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" + integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== dependencies: - "@babel/helper-call-delegate" "^7.8.3" "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -1033,12 +1106,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" - integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== +"@babel/plugin-transform-react-jsx@^7.9.4": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" + integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== dependencies: - "@babel/helper-builder-react-jsx" "^7.8.3" + "@babel/helper-builder-react-jsx" "^7.9.0" + "@babel/helper-builder-react-jsx-experimental" "^7.9.0" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-jsx" "^7.8.3" @@ -1049,12 +1123,12 @@ dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-regenerator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.8.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" + integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== dependencies: - regenerator-transform "^0.14.0" + regenerator-transform "^0.14.2" "@babel/plugin-transform-reserved-words@^7.8.3": version "7.8.3" @@ -1137,10 +1211,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.8.3.tgz#be6f01a7ef423be68e65ace1f04fc407e6d88917" - integrity sha512-Ebj230AxcrKGZPKIp4g4TdQLrqX95TobLUWKd/CwG7X1XHUH1ZpkpFvXuXqWbtGRWb7uuEWNlrl681wsOArAdQ== +"@babel/plugin-transform-typescript@^7.9.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359" + integrity sha512-yeWeUkKx2auDbSxRe8MusAG+n4m9BFY/v+lPjmQDgOFX5qnySkUY5oXzkp6FwPdsYqnKay6lorXYdC0n3bZO7w== dependencies: "@babel/helper-create-class-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -1163,27 +1237,29 @@ "@babel/helper-create-regexp-features-plugin" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" -"@babel/preset-env@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" - integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== +"@babel/preset-env@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.5.tgz#8ddc76039bc45b774b19e2fc548f6807d8a8919f" + integrity sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ== dependencies: - "@babel/compat-data" "^7.8.4" - "@babel/helper-compilation-targets" "^7.8.4" + "@babel/compat-data" "^7.9.0" + "@babel/helper-compilation-targets" "^7.8.7" "@babel/helper-module-imports" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-proposal-async-generator-functions" "^7.8.3" "@babel/plugin-proposal-dynamic-import" "^7.8.3" "@babel/plugin-proposal-json-strings" "^7.8.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.5" "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" "@babel/plugin-syntax-async-generators" "^7.8.0" "@babel/plugin-syntax-dynamic-import" "^7.8.0" "@babel/plugin-syntax-json-strings" "^7.8.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" @@ -1192,26 +1268,26 @@ "@babel/plugin-transform-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.5" "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.9.5" "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.8.4" + "@babel/plugin-transform-for-of" "^7.9.0" "@babel/plugin-transform-function-name" "^7.8.3" "@babel/plugin-transform-literals" "^7.8.3" "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.4" + "@babel/plugin-transform-parameters" "^7.9.5" "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" "@babel/plugin-transform-reserved-words" "^7.8.3" "@babel/plugin-transform-shorthand-properties" "^7.8.3" "@babel/plugin-transform-spread" "^7.8.3" @@ -1219,20 +1295,40 @@ "@babel/plugin-transform-template-literals" "^7.8.3" "@babel/plugin-transform-typeof-symbol" "^7.8.4" "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/types" "^7.8.3" - browserslist "^4.8.5" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.5" + browserslist "^4.9.1" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" semver "^5.5.0" -"@babel/preset-typescript@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.8.3.tgz#90af8690121beecd9a75d0cc26c6be39d1595d13" - integrity sha512-qee5LgPGui9zQ0jR1TeU5/fP9L+ovoArklEqY12ek8P/wV5ZeM/VYSQYwICeoT6FfpJTekG9Ilay5PhwsOpMHA== +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" + integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.8.3" + "@babel/plugin-transform-typescript" "^7.9.0" + +"@babel/runtime-corejs3@^7.8.3": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz#26fe4aa77e9f1ecef9b776559bbb8e84d34284b7" + integrity sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" "@babel/runtime@7.0.0": version "7.0.0" @@ -1255,6 +1351,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.8.4": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" + integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" @@ -1273,6 +1376,15 @@ "@babel/parser" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/template@^7.8.6": + version "7.8.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.0.0-beta.42", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" @@ -1288,7 +1400,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": +"@babel/traverse@^7.8.3": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== @@ -1303,6 +1415,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" + integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.5" + "@babel/helper-function-name" "^7.9.5" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.42", "@babel/types@^7.2.0", "@babel/types@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" @@ -1330,6 +1457,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" + integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== + dependencies: + "@babel/helper-validator-identifier" "^7.9.5" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@gfx/zopfli@^1.0.9": version "1.0.11" resolved "https://registry.yarnpkg.com/@gfx/zopfli/-/zopfli-1.0.11.tgz#6ced06b4566a5feb0036fe6a1e0262ce6cb1d6c5" @@ -1337,6 +1473,15 @@ dependencies: base64-js "^1.3.0" +"@iarna/cli@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" + integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA== + dependencies: + signal-exit "^3.0.2" + update-notifier "^2.2.0" + yargs "^8.0.2" + "@jimp/bmp@^0.9.3": version "0.9.3" resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.9.3.tgz#98eafc81674ce750f428ac9380007f1a4e90255e" @@ -1739,6 +1884,40 @@ resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-4.9.95.tgz#4e9d2b26b12e22f751336b35ba3cb763817e4c45" integrity sha512-4RBtbnPlILP5TIQJ2p3t3VD6D+HcCeQtrFTKoa5e+v3ZvRbylffttYovtcFKfgEJ+Tk0s9t2NgLcPUyQtD9Rxg== +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + "@polymer/app-layout@^3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@polymer/app-layout/-/app-layout-3.0.2.tgz#8a6f3c87b405635fd3547db82db8dbb6c51b6bf9" @@ -2387,14 +2566,9 @@ integrity sha1-ox10JBprHtu5c8822XooloNKUfk= "@types/chromecast-caf-receiver@^3.0.12": - version "3.0.12" - resolved "https://registry.yarnpkg.com/@types/chromecast-caf-receiver/-/chromecast-caf-receiver-3.0.12.tgz#0172edc5e43a0b4f426b21a614a58e04e3df009d" - integrity sha512-GdR9nGOENDWYhF40FasB0Xnsy3c+e68K90sGVBZx1W1N3LP1NGOmCtaxgUpxk4IuHYmzGrW7I57zWZIbT3D5BQ== - -"@types/chromecast-caf-sender@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/chromecast-caf-sender/-/chromecast-caf-sender-1.0.1.tgz#da0047c41c2a7ecf2d5348715b27c4542ed9b579" - integrity sha512-/JuG+zrS+KCPwEiOrK9O7WrIMyiUEF7Ev9ywbzXcCOPkXin9tLX7w9zxCmxtnOPdgH9lZbtOvgo5IA4cEJknRg== + version "3.0.17" + resolved "https://registry.yarnpkg.com/@types/chromecast-caf-receiver/-/chromecast-caf-receiver-3.0.17.tgz#adc791f501cd8940e5b328c038b9164bf7d07f04" + integrity sha512-hQeEPuK1rM9q7pMdcsjrEy0MgTxnHWbmc+fDiZ/anbp4jLi/hdmG5uWKYepeCq7XOE0p8oSN93V/HfGqUJLzDg== "@types/clean-css@*": version "4.2.1" @@ -2415,6 +2589,11 @@ dependencies: "@types/tern" "*" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/compression@^0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/compression/-/compression-0.0.33.tgz#95dc733a2339aa846381d7f1377792d2553dc27d" @@ -2449,6 +2628,11 @@ resolved "https://registry.yarnpkg.com/@types/escape-html/-/escape-html-0.0.20.tgz#cae698714dd61ebee5ab3f2aeb9a34ba1011735a" integrity sha512-6dhZJLbA7aOwkYB2GDGdIqJ20wmHnkDzaxV9PJXe7O02I2dSFTERzRB6JrX6cWKaS+VqhhY7cQUMCbO5kloFUw== +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/estree@*", "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -2535,6 +2719,11 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2750,6 +2939,49 @@ resolved "https://registry.yarnpkg.com/@types/which/-/which-1.3.1.tgz#7802c380887986ca909008afea4e08025b130f8d" integrity sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ== +"@typescript-eslint/eslint-plugin@^2.28.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.28.0.tgz#4431bc6d3af41903e5255770703d4e55a0ccbdec" + integrity sha512-w0Ugcq2iatloEabQP56BRWJowliXUP5Wv6f9fKzjJmDW81hOTBxRoJ4LoEOxRpz9gcY51Libytd2ba3yLmSOfg== + dependencies: + "@typescript-eslint/experimental-utils" "2.28.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.28.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.28.0.tgz#1fd0961cd8ef6522687b4c562647da6e71f8833d" + integrity sha512-4SL9OWjvFbHumM/Zh/ZeEjUFxrYKtdCi7At4GyKTbQlrj1HcphIDXlje4Uu4cY+qzszR5NdVin4CCm6AXCjd6w== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.28.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.24.0", "@typescript-eslint/parser@^2.28.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.28.0.tgz#bb761286efd2b0714761cab9d0ee5847cf080385" + integrity sha512-RqPybRDquui9d+K86lL7iPqH6Dfp9461oyqvlXMNtap+PyqYbkY5dB7LawQjDzot99fqzvS0ZLZdfe+1Bt3Jgw== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.28.0" + "@typescript-eslint/typescript-estree" "2.28.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.28.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.28.0.tgz#d34949099ff81092c36dc275b6a1ea580729ba00" + integrity sha512-HDr8MP9wfwkiuqzRVkuM3BeDrOC4cKbO5a6BymZBHUt5y/2pL0BXD6I/C/ceq2IZoHWhcASk+5/zo+dwgu9V8Q== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^6.3.0" + tsutils "^3.17.1" + "@vaadin/vaadin-button@^2.1.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@vaadin/vaadin-button/-/vaadin-button-2.2.1.tgz#129b585d176053289b13451767495727b2201763" @@ -3061,7 +3293,15 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abbrev@1: +JSONStream@^1.3.4, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3094,10 +3334,10 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn-jsx@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" - integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn@^3.0.4: version "3.3.0" @@ -3119,10 +3359,10 @@ acorn@^6.2.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -acorn@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" - integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== +acorn@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== adm-zip@~0.4.3: version "0.4.13" @@ -3134,13 +3374,27 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -agent-base@^4.1.0: +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@^4.1.0, agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -3176,6 +3430,16 @@ ajv@^6.10.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -3207,11 +3471,18 @@ ansi-cyan@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + ansi-gray@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" @@ -3251,6 +3522,11 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" @@ -3268,6 +3544,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" @@ -3278,6 +3562,16 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + any-base@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" @@ -3321,11 +3615,16 @@ append-field@^1.0.0: resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +"aproba@^1.1.2 || 2", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + archiver-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174" @@ -3352,7 +3651,7 @@ archiver@2.1.1: tar-stream "^1.5.0" zip-stream "^1.2.0" -archy@^1.0.0: +archy@^1.0.0, archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -3476,6 +3775,15 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + array-initial@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" @@ -3542,6 +3850,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -3552,7 +3868,7 @@ arrify@^1.0.0, arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@~2.0.6: +asap@^2.0.0, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -3736,15 +4052,16 @@ babel-helper-to-multiple-sequence-expressions@^0.4.3: resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.4.3.tgz#5b518b1127f47b3038773386a1561a2b48e632b6" integrity sha1-W1GLESf0ezA4dzOGoVYaK0jmMrY= -babel-loader@^8.0.5: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" pify "^4.0.1" + schema-utils "^2.6.5" babel-messages@^6.23.0: version "6.23.0" @@ -4074,6 +4391,18 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bin-links@^1.1.2, bin-links@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" + integrity sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ== + dependencies: + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" + write-file-atomic "^2.3.0" + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -4105,6 +4434,11 @@ blocking-elements@^0.1.0: resolved "https://registry.yarnpkg.com/blocking-elements/-/blocking-elements-0.1.0.tgz#e590b35969bb2eea571c95407e9843a80bd113a8" integrity sha512-m9UvynAHLhlWH4vSovSDAopW7DyJ91qeDnNrJqy+DE+tjhUYiXW1x7pOm3DZBczlQPPypWpOwOz5xd5A76vNvg== +bluebird@^3.5.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -4231,6 +4565,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -4308,7 +4649,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.8.3, browserslist@^4.8.5: +browserslist@^4.8.3: version "4.8.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.7.tgz#ec8301ff415e6a42c949d0e66b405eb539c532d0" integrity sha512-gFOnZNYBHrEyUML0xr5NJ6edFaaKbTFX9S9kQHlYfCP0Rit/boRIz4G+Avq6/4haEKJXdGGUnoolx+5MWW2BoA== @@ -4317,6 +4658,16 @@ browserslist@^4.8.3, browserslist@^4.8.5: electron-to-chromium "^1.3.349" node-releases "^1.1.49" +browserslist@^4.9.1: + version "4.11.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b" + integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== + dependencies: + caniuse-lite "^1.0.30001038" + electron-to-chromium "^1.3.390" + node-releases "^1.1.53" + pkg-up "^2.0.0" + browserstack@^1.2.0: version "1.5.2" resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" @@ -4397,16 +4748,16 @@ buffer@^5.2.0: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + busboy@^0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" @@ -4415,6 +4766,16 @@ busboy@^0.2.11: dicer "0.2.5" readable-stream "1.1.x" +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + +byte-size@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" + integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -4445,6 +4806,27 @@ cacache@^11.0.2, cacache@^11.3.1: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^12.0.0, cacache@^12.0.3: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cacache@^12.0.2: version "12.0.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" @@ -4481,6 +4863,16 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-limit@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" + integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -4536,7 +4928,7 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^4.0.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -4558,6 +4950,11 @@ caniuse-lite@^1.0.30001027: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz#283e2ef17d94889cc216a22c6f85303d78ca852d" integrity sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg== +caniuse-lite@^1.0.30001038: + version "1.0.30001041" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001041.tgz#c2ea138dafc6fe03877921ddcddd4a02a14daf76" + integrity sha512-fqDtRCApddNrQuBxBS7kEiSGdBsgO4wiVw4G/IClfqzfhW45MbTumfN4cuUJGTM0YGFNn97DCXPJ683PS6zwvA== + capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -4611,6 +5008,14 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" @@ -4725,6 +5130,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== +chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -4742,6 +5152,13 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +cidr-regex@^2.0.10: + version "2.0.10" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" + integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== + dependencies: + ip-regex "^2.1.0" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -4782,6 +5199,14 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= + dependencies: + string-width "^2.0.0" + strip-ansi "^3.0.1" + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -4789,6 +5214,23 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@^0.5.0, cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -4873,6 +5315,14 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -4912,12 +5362,19 @@ color-convert@^1.9.0, color-convert@^1.9.1: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -4948,6 +5405,11 @@ colornames@^1.1.1: resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y= +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + colors@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" @@ -4961,6 +5423,14 @@ colorspace@1.1.x: color "3.0.x" text-hex "1.0.x" +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" @@ -4993,7 +5463,7 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1, commander@^2.14.1, commander@^2.19.0, commander@^2.9.0, commander@~2.19.0: +commander@^2.14.1, commander@^2.19.0, commander@^2.9.0, commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -5073,6 +5543,14 @@ concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" @@ -5085,10 +5563,10 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -confusing-browser-globals@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz#93ffec1f82a6e2bf2bc36769cc3a92fa20e502f3" - integrity sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg== +confusing-browser-globals@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" + integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== connect-history-api-fallback@^1.6.0: version "1.6.0" @@ -5102,7 +5580,7 @@ console-browserify@^1.1.0: dependencies: date-now "^0.1.4" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -5213,6 +5691,11 @@ core-js-compat@^3.6.2: browserslist "^4.8.3" semver "7.0.0" +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + core-js@^2.4.0: version "2.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" @@ -5455,6 +5938,13 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@3.2.6, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -5469,12 +5959,10 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" @@ -5548,7 +6036,7 @@ default-resolution@^2.0.0: resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" integrity sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= -defaults@^1.0.2: +defaults@^1.0.2, defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= @@ -5666,16 +6154,34 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-indent@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + detect-node@^2.0.3, detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +dezalgo@^1.0.0, dezalgo@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + diagnostics@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a" @@ -5693,16 +6199,20 @@ dicer@0.2.5: readable-stream "1.1.x" streamsearch "0.1.2" +didyoumean2@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/didyoumean2/-/didyoumean2-2.0.4.tgz#c8431308cdb2e2619ebec6231fdf4756e79aadbc" + integrity sha512-eLbnl2R3Xi1mDz3/a8qfMyVqNDrKvZVi2qpDKtK3mAwscweL7hkIb6Ub4FY6mYLyK/9489bQfJ0YMtHzIJskpQ== + dependencies: + leven "^2.0.0" + lodash.deburr "^4.1.0" + ramda "^0.26.1" + diff@3.5.0, diff@^3.1.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== - diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -5739,14 +6249,6 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -doctrine@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" - integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= - dependencies: - esutils "^1.1.6" - isarray "0.0.1" - doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -5852,6 +6354,11 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -5902,6 +6409,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -5912,6 +6424,11 @@ electron-to-chromium@^1.3.349: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.349.tgz#663f26a69d348a462df47b4d7ab162a2f29bbcb7" integrity sha512-uEb2zs6EJ6OZIqaMsCSliYVgzE/f7/s1fLWqtvRtHg/v5KBF2xds974fUnyatfxIDgkqzQVwFtam5KExqywx0Q== +electron-to-chromium@^1.3.390: + version "1.3.403" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz#c8bab4e2e72bf78bc28bad1cc355c061f9cc1918" + integrity sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -5940,11 +6457,21 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + enabled@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93" @@ -5957,6 +6484,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -6013,7 +6547,7 @@ enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" -enhanced-resolve@~0.9.0: +enhanced-resolve@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4= @@ -6027,11 +6561,21 @@ entities@^1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + env-variable@0.0.x: version "0.0.5" resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.5.tgz#913dd830bef11e96a039c038d4130604eba37f88" integrity sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA== +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -6046,7 +6590,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: +es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -6058,6 +6602,23 @@ es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0 is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -6067,6 +6628,15 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.49" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.49.tgz#059a239de862c94494fec28f8150c977028c6c5e" @@ -6143,19 +6713,37 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-config-airbnb-base@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz#8a7bcb9643d13c55df4dd7444f138bf4efa61e17" - integrity sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA== +eslint-config-airbnb-base@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz#2ba4592dd6843258221d9bff2b6831bd77c874e4" + integrity sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw== dependencies: - confusing-browser-globals "^1.0.7" + confusing-browser-globals "^1.0.9" object.assign "^4.1.0" - object.entries "^1.1.0" + object.entries "^1.1.1" -eslint-config-prettier@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.2.0.tgz#80e0b8714e3f6868c4ac2a25fbf39c02e73527a7" - integrity sha512-VLsgK/D+S/FEsda7Um1+N8FThec6LqE3vhcMyp8mlmto97y3fGf3DX7byJexGuOb1QY0Z/zz222U5t+xSfcZDQ== +eslint-config-airbnb-typescript@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-7.2.1.tgz#bce3f02fa894d1ec2f31ac527992e03761a9b7d4" + integrity sha512-D3elVKUbdsCfkOVstSyWuiu+KGCVTrYxJPoenPIqZtL6Li/R4xBeVTXjZIui8B8D17bDN3Pz5dSr7jRLY5HqIg== + dependencies: + "@typescript-eslint/parser" "^2.24.0" + eslint-config-airbnb "^18.1.0" + eslint-config-airbnb-base "^14.1.0" + +eslint-config-airbnb@^18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz#724d7e93dadd2169492ff5363c5aaa779e01257d" + integrity sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw== + dependencies: + eslint-config-airbnb-base "^14.1.0" + object.assign "^4.1.0" + object.entries "^1.1.1" + +eslint-config-prettier@^6.10.1: + version "6.10.1" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz#129ef9ec575d5ddc0e269667bf09defcd898642a" + integrity sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ== dependencies: get-stdin "^6.0.0" @@ -6167,76 +6755,97 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" -eslint-import-resolver-webpack@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.11.1.tgz#fcf1fd57a775f51e18f442915f85dd6ba45d2f26" - integrity sha512-eK3zR7xVQR/MaoBWwGuD+CULYVuqe5QFlDukman71aI6IboCGzggDUohHNfu1ZeBnbHcUHJc0ywWoXUBNB6qdg== +eslint-import-resolver-webpack@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.12.1.tgz#771ae561e887ca4e53ee87605fbb36c5e290b0f5" + integrity sha512-O/sUAXk6GWrICiN8JUkkjdt9uZpqZHP+FVnTxtEILL6EZMaPSrnP4lGPSFwcKsv7O211maqq4Nz60+dh236hVg== dependencies: array-find "^1.0.0" - debug "^2.6.8" - enhanced-resolve "~0.9.0" + debug "^2.6.9" + enhanced-resolve "^0.9.1" find-root "^1.1.0" - has "^1.0.1" - interpret "^1.0.0" - lodash "^4.17.4" + has "^1.0.3" + interpret "^1.2.0" + lodash "^4.17.15" node-libs-browser "^1.0.0 || ^2.0.0" - resolve "^1.10.0" - semver "^5.3.0" + resolve "^1.13.1" + semver "^5.7.1" -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== +eslint-module-utils@^2.4.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== dependencies: - debug "^2.6.8" + debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-import@^2.18.2: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== +eslint-plugin-disable@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-disable/-/eslint-plugin-disable-2.0.1.tgz#01762b33b4cd807cb91096047e63896e7c37cfc2" + integrity sha512-nM46IxpAD1Lh1ka/iQ6CTYfBaAp4EzM5chvMMiDpmfKh7JNEnzvPK4D2FSZBLXVTOR/AT7Wov51eucyNisCVBA== + dependencies: + eslint ">=0.16.0" + resolve "^1.1.6" + +eslint-plugin-import@^2.20.2: + version "2.20.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== dependencies: array-includes "^3.0.3" + array.prototype.flat "^1.2.1" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" + eslint-module-utils "^2.4.1" has "^1.0.3" minimatch "^3.0.4" object.values "^1.1.0" read-pkg-up "^2.0.0" - resolve "^1.11.0" + resolve "^1.12.0" -eslint-plugin-prettier@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" - integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== +eslint-plugin-lit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-lit/-/eslint-plugin-lit-1.2.0.tgz#57ec9c82c1d9fc0477de4d858527ff183c3044c9" + integrity sha512-Y80R6ajNygpq8HsLzh6oEVPrUR0POP75oYb/kLxHkZe1DhZAZJ29DQiih9SktiFxv1AbZR7vN6p6ab5USe+cyQ== dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" + parse5 "^5.1.0" + parse5-htmlparser2-tree-adapter "^5.1.0" + requireindex "^1.2.0" -eslint-plugin-prettier@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" - integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== +eslint-plugin-prettier@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca" + integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react@^7.14.3: - version "7.14.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" - integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== +eslint-plugin-react@^7.19.0: + version "7.19.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" + integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== dependencies: - array-includes "^3.0.3" + array-includes "^3.1.1" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.1.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0" - object.values "^1.1.0" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.10.1" + resolve "^1.15.1" + semver "^6.3.0" + string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" + +eslint-plugin-wc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-wc/-/eslint-plugin-wc-1.2.0.tgz#c47cedfce92823ea9bd5ebbe25121377cdcb55e4" + integrity sha512-p1Vv8GkiTS8ZNfsmWvNJfKsGwsfCDteo2QsFE53x5DuHN7YDVf36II46DauP3mBCQ9pZnYD8lZyl/uz3qBtwQw== + dependencies: + js-levenshtein-esm "^1.2.0" + validate-element-name "^2.1.1" eslint-scope@^4.0.3: version "4.0.3" @@ -6254,22 +6863,29 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: - eslint-visitor-keys "^1.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a" - integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow== +eslint@>=0.16.0, eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -6278,19 +6894,19 @@ eslint@^6.3.0: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.4.2" + eslint-utils "^1.4.3" eslint-visitor-keys "^1.1.0" - espree "^6.1.1" + espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^11.7.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.4.1" + inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" @@ -6299,7 +6915,7 @@ eslint@^6.3.0: minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" + optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" semver "^6.1.2" @@ -6317,13 +6933,13 @@ espree@^3.5.2: acorn "^5.5.0" acorn-jsx "^3.0.0" -espree@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" - integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: - acorn "^7.0.0" - acorn-jsx "^5.0.2" + acorn "^7.1.1" + acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" esprima@^4.0.0: @@ -6355,16 +6971,6 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -esutils@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" - integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= - -esutils@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -6624,17 +7230,46 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= -fast-diff@^1.1.1, fast-diff@^1.1.2: +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-diff@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.2.tgz#ade1a9d91148965d4bf7c51f72e1ca662d32e63d" + integrity sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -6649,6 +7284,13 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== +fastq@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.7.0.tgz#fcd79a08c5bd7ec5b55cd3f5c4720db551929801" + integrity sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ== + dependencies: + reusify "^1.0.4" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -6680,6 +7322,11 @@ fecha@^3.0.2: resolved "https://registry.yarnpkg.com/fecha/-/fecha-3.0.2.tgz#fb3adb02762ab6dd27f7d5419f2f6c21a4229cd7" integrity sha512-oJK6YbKtmz1uvuDsUHOmo9X2HKmYAcRWtzW2yrCzOJRUfyGUEu/8cDymBdedgEnkdJiTpNyPogWqfTuYffU4yA== +figgy-pudding@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -6700,6 +7347,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -6738,6 +7392,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" @@ -6778,6 +7439,11 @@ find-index@^0.1.1: resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= +find-npm-prefix@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" + integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== + find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -6978,6 +7644,14 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" + integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.10" + from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -7024,7 +7698,16 @@ fs-mkdirp-stream@^1.0.0: graceful-fs "^4.1.11" through2 "^2.0.3" -fs-write-stream-atomic@^1.0.8: +fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" + integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= @@ -7085,11 +7768,33 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== +gentle-fs@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" + integrity sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q== + dependencies: + aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" + fs-vacuum "^1.2.10" + graceful-fs "^4.1.11" + iferr "^0.1.5" + infer-owner "^1.0.4" + mkdirp "^0.5.1" + path-is-inside "^1.0.2" + read-cmd-shim "^1.0.1" + slide "^1.1.6" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -7125,7 +7830,7 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -7174,6 +7879,13 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" +glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob-stream@^5.3.2: version "5.3.5" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" @@ -7204,6 +7916,11 @@ glob-stream@^6.1.0: to-absolute-glob "^2.0.0" unique-stream "^2.0.2" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + glob-watcher@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-5.0.3.tgz#88a8abf1c4d131eb93928994bc4a593c2e5dd626" @@ -7258,6 +7975,18 @@ glob@^7.0.5, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -7309,11 +8038,18 @@ global@~4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^11.1.0, globals@^11.7.0: +globals@^11.1.0: version "11.11.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -7376,6 +8112,11 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.2.2, graceful-fs@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -7546,7 +8287,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0: +har-validator@~5.1.0, har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -7590,12 +8331,22 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has-unicode@^2.0.0: +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -7698,6 +8449,11 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -7762,6 +8518,11 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -7804,6 +8565,14 @@ http-parser-js@>=0.4.0: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -7855,6 +8624,21 @@ https-proxy-agent@^2.2.1: agent-base "^4.1.0" debug "^3.1.0" +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + husky@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" @@ -7878,7 +8662,7 @@ iconv-lite@0.4.23: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -7895,6 +8679,11 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +iferr@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" + integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== + ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -7975,12 +8764,12 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= -infer-owner@^1.0.3: +infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4: +inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -7998,7 +8787,7 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -inherits@2.0.4: +inherits@2.0.4, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -8008,23 +8797,37 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^6.4.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" + glob "^7.1.1" + npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^3.0.0" + +inquirer@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^3.0.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^6.0.0" through "^2.3.6" internal-ip@^4.3.0: @@ -8035,7 +8838,16 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0, interpret@^1.0.0, interpret@^1.1.0: +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +interpret@1.2.0, interpret@^1.1.0, interpret@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -8082,7 +8894,7 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.0, ip@^1.1.5: +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -8156,6 +8968,11 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -8170,6 +8987,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-cidr@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.0.tgz#72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f" + integrity sha512-3kxTForpuj8O4iHn0ocsn1jxRm5VYm60GDghK6HXmpn4IyZOoRy9/GmdjFA2yEMqw91TB1/K3bFTuI7FlFNR1g== + dependencies: + cidr-regex "^2.0.10" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -8265,6 +9089,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-function@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" @@ -8328,6 +9157,11 @@ is-number@^4.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -8383,6 +9217,11 @@ is-posix-bracket@^0.1.0: resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" @@ -8405,6 +9244,13 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -8427,6 +9273,11 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -8515,11 +9366,6 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== - joi@^14.3.1: version "14.3.1" resolved "https://registry.yarnpkg.com/joi/-/joi-14.3.1.tgz#164a262ec0b855466e0c35eea2a885ae8b6c703c" @@ -8534,6 +9380,11 @@ jpeg-js@^0.3.4: resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d" integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== +js-levenshtein-esm@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/js-levenshtein-esm/-/js-levenshtein-esm-1.2.0.tgz#96532c34e0c90df198c9419963c64ca3cf43ae92" + integrity sha512-fzreKVq1eD7eGcQr7MtRpQH94f8gIfhdrc7yeih38xh684TNMK9v5aAu2wxfIRMk/GpAJRrzcirMAPIaSDaByQ== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8580,7 +9431,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -8636,6 +9487,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -8653,6 +9511,11 @@ jsonminify@~0.2.3: resolved "https://registry.yarnpkg.com/jsonminify/-/jsonminify-0.2.3.tgz#4b842c8a3fe5d6aa48b2f8f95a1cf9a80c019d8e" integrity sha1-S4Qsij/l1qpIsvj5Whz5qAwBnY4= +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsonschema@^1.1.0, jsonschema@^1.1.1: version "1.2.4" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.4.tgz#a46bac5d3506a254465bc548876e267c6d0d6464" @@ -8668,10 +9531,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb" - integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ== +jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== dependencies: array-includes "^3.0.3" object.assign "^4.1.0" @@ -8754,6 +9617,11 @@ launchpad@^0.7.0: q "^1.4.1" underscore "^1.8.3" +lazy-property@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" + integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -8792,6 +9660,11 @@ leaflet@^1.4.0: resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.4.0.tgz#d5f56eeb2aa32787c24011e8be4c77e362ae171b" integrity sha512-x9j9tGY1+PDLN9pcWTx9/y6C5nezoTMB8BLK5jTakx+H7bPlnbCHfi9Hjg+Qt36sgDz/cb9lrSpNQXmk45Tvhw== +leven@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -8812,6 +9685,140 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libcipm@^4.0.7: + version "4.0.8" + resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" + integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.1" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + graceful-fs "^4.1.11" + ini "^1.3.5" + lock-verify "^2.1.0" + mkdirp "^0.5.1" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + pacote "^9.1.0" + read-package-json "^2.0.13" + rimraf "^2.6.2" + worker-farm "^1.6.0" + +libnpm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" + integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== + dependencies: + bin-links "^1.1.2" + bluebird "^3.5.3" + find-npm-prefix "^1.0.2" + libnpmaccess "^3.0.2" + libnpmconfig "^1.2.1" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmpublish "^1.1.2" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + lock-verify "^2.0.2" + npm-lifecycle "^3.0.0" + npm-logical-tree "^1.2.1" + npm-package-arg "^6.1.0" + npm-profile "^4.0.2" + npm-registry-fetch "^4.0.0" + npmlog "^4.1.2" + pacote "^9.5.3" + read-package-json "^2.0.13" + stringify-package "^1.0.0" + +libnpmaccess@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" + integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== + dependencies: + aproba "^2.0.0" + get-stream "^4.0.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + +libnpmconfig@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" + integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== + dependencies: + figgy-pudding "^3.5.1" + find-up "^3.0.0" + ini "^1.3.5" + +libnpmhook@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" + integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmorg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" + integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmpublish@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^4.0.0" + semver "^5.5.1" + ssri "^6.0.1" + +libnpmsearch@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" + integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== + dependencies: + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpmteam@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" + integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.4.1" + get-stream "^4.0.0" + npm-registry-fetch "^4.0.0" + +libnpx@^10.2.2: + version "10.2.3" + resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.3.tgz#d5e01f12d383ffca9a947807ca6a8f587d38fe2c" + integrity sha512-bCvdARu55fLQBhMfcYGF0GznF1kB2sqxq/9zKZ3652M8DDFWpVpCnpgzjzn0yWMDMez5ZGMBiX24yR11uEYZVQ== + dependencies: + dotenv "^5.0.1" + npm-package-arg "^6.0.0" + rimraf "^2.6.2" + safe-buffer "^5.1.0" + update-notifier "^2.3.0" + which "^1.3.0" + y18n "^4.0.0" + yargs "^11.0.0" + liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -8826,11 +9833,6 @@ liftoff@^3.1.0: rechoir "^0.6.2" resolve "^1.1.7" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - lint-staged@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" @@ -8906,6 +9908,20 @@ listr@^0.14.2: p-map "^2.0.0" rxjs "^6.3.3" +lit-analyzer@1.1.10, lit-analyzer@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/lit-analyzer/-/lit-analyzer-1.1.10.tgz#cad736d0d54956a1680c8afa54402380ff7a4b3a" + integrity sha512-Wm1kYvwGDc6/AOeXKDMVoluU72ZOb/A0t/m0KeJU181NAA2I28lqIuCb6EmAJ7LpwikwMbtps5fWVehOpmuu1A== + dependencies: + chalk "^2.4.2" + didyoumean2 "2.0.4" + fast-glob "^2.2.6" + parse5 "5.1.0" + ts-simple-type "~0.3.6" + vscode-css-languageservice "4.0.2-next.1" + vscode-html-languageservice "2.1.12" + web-component-analyzer "~0.1.17" + lit-element@^2.0.0, lit-element@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-2.2.1.tgz#79c94d8cfdc2d73b245656e37991bd1e4811d96f" @@ -8969,7 +9985,7 @@ loader-runner@^2.4.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -8988,6 +10004,15 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" +loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -9004,6 +10029,35 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lock-verify@^2.0.2, lock-verify@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz#12432feb68bb647071c78c44bde16029a0f7d935" + integrity sha512-BhM1Vqsu7x0s+EalTifNjdDPks+ZjdAhComvnA6VcCIlDOI5ouELXqAe1BYuEIP4zGN0W08xVm6byJV1LnCiJg== + dependencies: + "@iarna/cli" "^1.2.0" + npm-package-arg "^6.1.0" + semver "^5.4.1" + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash._baseuniq@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" + integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + dependencies: + lodash._createset "~4.0.0" + lodash._root "~3.0.0" + +lodash._createset@~4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" + integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + lodash._escapehtmlchar@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d" @@ -9049,6 +10103,11 @@ lodash._reunescapedhtml@~2.4.1: lodash._htmlescapes "~2.4.1" lodash.keys "~2.4.1" +lodash._root@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + lodash._shimkeys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" @@ -9061,6 +10120,16 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= +lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.deburr@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" + integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= + lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -9165,6 +10234,16 @@ lodash.templatesettings@~2.4.1: lodash._reinterpolate "~2.4.1" lodash.escape "~2.4.1" +lodash.union@~4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + lodash.values@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4" @@ -9172,6 +10251,11 @@ lodash.values@~2.4.1: dependencies: lodash.keys "~2.4.1" +lodash.without@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= + lodash@4.17.11, "lodash@>=3.5 <5", lodash@^4.16.6, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.8.0: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -9182,7 +10266,7 @@ lodash@^3.0.0, lodash@^3.10.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14: +lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -9194,7 +10278,7 @@ log-symbols@2.2.0, log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-symbols@^1.0.2: +log-symbols@^1.0.0, log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= @@ -9319,6 +10403,23 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -9410,11 +10511,23 @@ mdn-polyfills@^5.16.0: resolved "https://registry.yarnpkg.com/mdn-polyfills/-/mdn-polyfills-5.17.0.tgz#462b3e34d5c6ba769a32fda2b270e711da634a05" integrity sha512-KntYq3r7jQ3lqjGvQ+1zIv6Yvlt+G3Y3TngDZqzSB7SNBjW7IZ8WyrhHM4LyLWzgUVX53DrC2XR7cymQqbTFkw== +meant@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" + integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + mem@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" @@ -9475,6 +10588,11 @@ merge-stream@^1.0.0, merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" +merge2@^1.2.3, merge2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -9518,6 +10636,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -9580,6 +10706,11 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -9626,6 +10757,11 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -9639,6 +10775,14 @@ minipass@^2.2.1, minipass@^2.3.4: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^2.3.5, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + minizlib@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" @@ -9646,6 +10790,13 @@ minizlib@^1.1.1: dependencies: minipass "^2.2.1" +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -9685,6 +10836,13 @@ mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + mocha@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.0.2.tgz#cdc1a6fdf66472c079b5605bac59d29807702d2c" @@ -9746,6 +10904,11 @@ ms@2.1.1, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + multer@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.1.tgz#24b12a416a22fec2ade810539184bf138720159e" @@ -9793,10 +10956,10 @@ mute-stdout@^1.0.0: resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mz@^2.4.0, mz@^2.6.0: version "2.7.0" @@ -9903,11 +11066,37 @@ node-environment-flags@1.0.4: dependencies: object.getownpropertydescriptors "^2.0.3" +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + node-forge@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-gyp@^5.0.2, node-gyp@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz#8e31260a7af4a2e2f994b0673d4e0b3866156332" + integrity sha512-OUTryc5bt/P8zVgNUmC6xdXiDJxLMAW8cF5tLQOT9E5sOQj+UeQxnnPy74K3CLCa/SOjjBlbuzDLR8ANwA+wmw== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.1.2" + request "^2.88.0" + rimraf "^2.6.3" + semver "^5.7.1" + tar "^4.4.12" + which "^1.3.1" + "node-libs-browser@^1.0.0 || ^2.0.0": version "2.2.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" @@ -9989,6 +11178,11 @@ node-releases@^1.1.49: dependencies: semver "^6.3.0" +node-releases@^1.1.53: + version "1.1.53" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== + node-vibrant@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/node-vibrant/-/node-vibrant-3.1.5.tgz#8729bf35aabd54cd2eccbfadf22124ab4e1305b0" @@ -10018,7 +11212,15 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +nopt@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -10047,11 +11249,74 @@ now-and-later@^2.0.0: dependencies: once "^1.3.2" +npm-audit-report@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" + integrity sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw== + dependencies: + cli-table3 "^0.5.0" + console-control-strings "^1.1.0" + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= + +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== + dependencies: + semver "^2.3.0 || 3.x || 4 || 5" + +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" + integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.15" + node-gyp "^5.0.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.1" + +npm-logical-tree@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" + integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12, npm-packlist@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-packlist@^1.1.6: version "1.4.1" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" @@ -10067,6 +11332,37 @@ npm-path@^2.0.2: dependencies: which "^1.2.10" +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-profile@^4.0.2, npm-profile@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" + integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== + dependencies: + aproba "^1.1.2 || 2" + figgy-pudding "^3.4.1" + npm-registry-fetch "^4.0.0" + +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.3.tgz#3c2179e39e04f9348b1c2979545951d36bee8766" + integrity sha512-WGvUx0lkKFhu9MbiGFuT9nG2NpfQ+4dCJwRwwtK2HK5izJEvwDxMeUyqbuMS7N/OkpVCqDorV6rO5E4V9F8lJw== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -10074,6 +11370,11 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" +npm-user-validate@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" + integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= + npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -10083,7 +11384,128 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npmlog@^4.0.2: +npm@^6.14.4: + version "6.14.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.4.tgz#50a1c6274fb451ca18f6ff472d2a73f006adbd66" + integrity sha512-B8UDDbWvdkW6RgXFn8/h2cHJP/u/FPa4HWeGzW23aNEBARN3QPrRaHqPIZW2NSN3fW649gtgUDNZpaRs0zTMPw== + dependencies: + JSONStream "^1.3.5" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + aproba "^2.0.0" + archy "~1.0.0" + bin-links "^1.1.7" + bluebird "^3.5.5" + byte-size "^5.0.1" + cacache "^12.0.3" + call-limit "^1.1.1" + chownr "^1.1.4" + ci-info "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.5.1" + cmd-shim "^3.0.3" + columnify "~1.5.4" + config-chain "^1.1.12" + detect-indent "~5.0.0" + detect-newline "^2.1.0" + dezalgo "~1.0.3" + editor "~1.0.0" + figgy-pudding "^3.5.1" + find-npm-prefix "^1.0.2" + fs-vacuum "~1.2.10" + fs-write-stream-atomic "~1.0.10" + gentle-fs "^2.3.0" + glob "^7.1.6" + graceful-fs "^4.2.3" + has-unicode "~2.0.1" + hosted-git-info "^2.8.8" + iferr "^1.0.2" + infer-owner "^1.0.4" + inflight "~1.0.6" + inherits "^2.0.4" + ini "^1.3.5" + init-package-json "^1.10.3" + is-cidr "^3.0.0" + json-parse-better-errors "^1.0.2" + lazy-property "~1.0.0" + libcipm "^4.0.7" + libnpm "^3.0.1" + libnpmaccess "^3.0.2" + libnpmhook "^5.0.3" + libnpmorg "^1.0.1" + libnpmsearch "^2.0.2" + libnpmteam "^1.0.2" + libnpx "^10.2.2" + lock-verify "^2.1.0" + lockfile "^1.0.4" + lodash._baseuniq "~4.6.0" + lodash.clonedeep "~4.5.0" + lodash.union "~4.6.0" + lodash.uniq "~4.5.0" + lodash.without "~4.4.0" + lru-cache "^5.1.1" + meant "~1.0.1" + mississippi "^3.0.0" + mkdirp "^0.5.4" + move-concurrently "^1.0.1" + node-gyp "^5.1.0" + nopt "~4.0.1" + normalize-package-data "^2.5.0" + npm-audit-report "^1.3.2" + npm-cache-filename "~1.0.2" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.4" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.8" + npm-pick-manifest "^3.0.2" + npm-profile "^4.0.4" + npm-registry-fetch "^4.0.3" + npm-user-validate "~1.0.0" + npmlog "~4.1.2" + once "~1.4.0" + opener "^1.5.1" + osenv "^0.1.5" + pacote "^9.5.12" + path-is-inside "~1.0.2" + promise-inflight "~1.0.1" + qrcode-terminal "^0.12.0" + query-string "^6.8.2" + qw "~1.0.1" + read "~1.0.7" + read-cmd-shim "^1.0.5" + read-installed "~4.0.3" + read-package-json "^2.1.1" + read-package-tree "^5.3.1" + readable-stream "^3.6.0" + readdir-scoped-modules "^1.1.0" + request "^2.88.0" + retry "^0.12.0" + rimraf "^2.7.1" + safe-buffer "^5.1.2" + semver "^5.7.1" + sha "^3.0.0" + slide "~1.1.6" + sorted-object "~2.0.1" + sorted-union-stream "~2.1.3" + ssri "^6.0.1" + stringify-package "^1.0.1" + tar "^4.4.13" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + uid-number "0.0.6" + umask "~1.1.0" + unique-filename "^1.1.1" + unpipe "~1.0.0" + update-notifier "^2.5.0" + uuid "^3.3.3" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "~3.0.0" + which "^1.3.1" + worker-farm "^1.7.0" + write-file-atomic "^2.4.3" + +npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -10129,11 +11551,21 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + object-keys@^1.0.11, object-keys@^1.0.12: version "1.1.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -10161,25 +11593,25 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.entries@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== +object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== dependencies: define-properties "^1.1.3" - es-abstract "^1.12.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" - has "^1.0.1" + has "^1.0.3" object.getownpropertydescriptors@^2.0.3: version "2.0.3" @@ -10230,6 +11662,16 @@ object.values@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.1, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -10252,7 +11694,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -10271,6 +11713,18 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + opn@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" @@ -10293,17 +11747,17 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" - fast-levenshtein "~2.0.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" ordered-read-streams@^0.3.0: version "0.3.0" @@ -10344,6 +11798,15 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -10358,7 +11821,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.3, osenv@^0.1.4: +osenv@^0.1.3, osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -10446,6 +11909,42 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" +pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: + version "9.5.12" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + pako@^1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -10558,15 +12057,27 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5-htmlparser2-tree-adapter@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" + integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== + dependencies: + parse5 "^5.1.1" + +parse5@5.1.0, parse5@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + parse5@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parseqs@0.0.5: version "0.0.5" @@ -10629,7 +12140,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -10732,6 +12243,11 @@ phin@^2.9.1: resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== +picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -10780,6 +12296,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" @@ -11084,10 +12607,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.4.tgz#2d1bae173e355996ee355ec9830a7a1ee05457ef" + integrity sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w== pretty-bytes@^4.0.2: version "4.0.2" @@ -11117,7 +12640,7 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -private@^0.1.6, private@~0.1.5: +private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -11147,11 +12670,19 @@ progress@2.0.3, progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: +promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + promise@^8.0.1: version "8.0.3" resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.3.tgz#f592e099c6cddc000d538ee7283bb190452b0bf6" @@ -11159,6 +12690,13 @@ promise@^8.0.1: dependencies: asap "~2.0.6" +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + dependencies: + read "1" + prop-types-extra@^1.0.1, prop-types-extra@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.0.tgz#32609910ea2dcf190366bacd3490d5a6412a605f" @@ -11181,6 +12719,18 @@ property-expr@^1.5.0: resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -11212,6 +12762,11 @@ psl@^1.1.24: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -11254,7 +12809,7 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@2.x.x, punycode@^2.1.0: +punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -11274,6 +12829,11 @@ q@^1.4.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + qs@6.5.2, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -11284,6 +12844,15 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +query-string@^6.8.2: + version "6.12.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.12.1.tgz#2ae4d272db4fba267141665374e49a1de09e8a7c" + integrity sha512-OHj+zzfRMyj3rmo/6G8a5Ifvw3AleL/EbcHMD27YA31Q+cO5lfmQxECkImuNVjcskLcvBRVHNAB3w6udMs1eAA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -11299,6 +12868,16 @@ querystringify@^2.0.0: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +qw@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" + integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= + +ramda@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -11421,6 +13000,48 @@ react-transition-group@^2.2.0: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== + dependencies: + graceful-fs "^4.1.2" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -11464,6 +13085,13 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" +read@1, read@~1.0.1, read@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -11477,7 +13105,7 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.1.x, readable-stream@^1.0.26-2, readable-stream@^1.0.26-4, readable-stream@~1.1.9: +readable-stream@1.1.x, readable-stream@^1.0.26-2, readable-stream@^1.0.26-4, readable-stream@~1.1.10, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= @@ -11506,6 +13134,25 @@ readable-stream@1.1.x, readable-stream@^1.0.26-2, readable-stream@^1.0.26-4, rea isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@^2.0.0, readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -11552,6 +13199,13 @@ regenerate-unicode-properties@^8.1.0: dependencies: regenerate "^1.4.0" +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -11572,6 +13226,11 @@ regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + regenerator-transform@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" @@ -11579,6 +13238,14 @@ regenerator-transform@^0.14.0: dependencies: private "^0.1.6" +regenerator-transform@^0.14.2: + version "0.14.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" + integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== + dependencies: + "@babel/runtime" "^7.8.4" + private "^0.1.8" + regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -11594,11 +13261,24 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + regexpu-core@^4.5.4, regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" @@ -11611,6 +13291,18 @@ regexpu-core@^4.5.4, regexpu-core@^4.6.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -11631,6 +13323,11 @@ regjsgen@^0.5.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" @@ -11638,6 +13335,13 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + reify@^0.18.1: version "0.18.1" resolved "https://registry.yarnpkg.com/reify/-/reify-0.18.1.tgz#7e5fab2f4a33418ad42afded905cd0e78eef110b" @@ -11746,6 +13450,32 @@ request@2.88.0, request@^2.85.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + require-dir@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/require-dir/-/require-dir-1.2.0.tgz#0d443b75e96012d3ca749cf19f529a789ae74817" @@ -11766,6 +13496,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + requirejs@^2.3.4: version "2.3.6" resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" @@ -11830,10 +13565,10 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, dependencies: path-parse "^1.0.6" -resolve@^1.10.1, resolve@^1.11.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== +resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" @@ -11845,16 +13580,34 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -11862,7 +13615,7 @@ rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: dependencies: glob "^7.1.3" -rimraf@^2.6.3: +rimraf@^2.5.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -11896,10 +13649,10 @@ rollup@^1.3.0: "@types/node" "^11.11.6" acorn "^6.1.1" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= +run-async@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== dependencies: is-promise "^2.1.0" @@ -11908,6 +13661,11 @@ run-node@^1.0.0: resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -11915,18 +13673,30 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.3.3, rxjs@^6.4.0: +rxjs@^6.3.3: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== dependencies: tslib "^1.9.0" +rxjs@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -11969,6 +13739,14 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a" + integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ== + dependencies: + ajv "^6.12.0" + ajv-keywords "^3.4.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -12024,6 +13802,11 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +"semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.5.1, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -12173,6 +13956,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sha@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" + integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== + dependencies: + graceful-fs "^4.1.2" + shady-css-parser@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shady-css-parser/-/shady-css-parser-0.1.0.tgz#534dc79c8ca5884c5ed92a4e5a13d6d863bca428" @@ -12209,6 +13999,14 @@ shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -12284,6 +14082,16 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -12380,6 +14188,35 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sorted-object@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= + +sorted-union-stream@~2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" + integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= + dependencies: + from2 "^1.3.0" + stream-iterate "^1.1.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -12506,6 +14343,11 @@ spdy@^4.0.1: select-hose "^2.0.0" spdy-transport "^3.0.0" +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -12533,7 +14375,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: +ssri@^6.0.0, ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== @@ -12618,6 +14460,14 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-iterate@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" + integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= + dependencies: + readable-stream "^2.1.5" + stream-shift "^1.0.0" + stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -12649,6 +14499,11 @@ streamsearch@0.1.2: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" @@ -12663,7 +14518,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -12680,6 +14535,61 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -12708,6 +14618,11 @@ stringify-object@^3.2.2, stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== + strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -12736,6 +14651,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -12842,6 +14764,13 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + sver-compat@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/sver-compat/-/sver-compat-1.5.0.tgz#3cf87dfeb4d07b4a3f14827bc186b3fd0c645cd8" @@ -12957,6 +14886,19 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" +tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + temp@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -13039,7 +14981,7 @@ text-hex@1.0.x: resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== -text-table@^0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -13105,7 +15047,7 @@ through2@^3.0.0: dependencies: readable-stream "2 || 3" -through@^2.3.6, through@^2.3.8, through@~2.3.6: +"through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -13137,6 +15079,11 @@ timm@^1.6.1: resolved "https://registry.yarnpkg.com/timm/-/timm-1.6.2.tgz#dfd8c6719f7ba1fcfc6295a32670a1c6d166c0bd" integrity sha512-IH3DYDL1wMUwmIlVmMrmesw5lZD6N+ZOAFWEyLrtpoL9Bcrs9u7M/vyOnHzDD2SMs4irLkVjqxZbHrXStS/Nmw== +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + tinycolor2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" @@ -13204,6 +15151,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -13251,6 +15205,14 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -13273,6 +15235,13 @@ triple-beam@^1.2.0, triple-beam@^1.3.0: resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== +ts-lit-plugin@^1.1.10: + version "1.1.10" + resolved "https://registry.yarnpkg.com/ts-lit-plugin/-/ts-lit-plugin-1.1.10.tgz#10ed5077ed9427d9404d0a63cf2d989de0d41eed" + integrity sha512-Q/GTnLLs+rmI8u+wmnNPF1tRylgIygxyZIIEvOaULMhacEiWPeKyqBEGFu/Y/KJWMuhm3vA2g3g50en5dGrrHQ== + dependencies: + lit-analyzer "1.1.10" + ts-mocha@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-6.0.0.tgz#40b8c5462ffce6f5dcee5ff729655b2958f26e50" @@ -13296,6 +15265,11 @@ ts-node@7.0.1: source-map-support "^0.5.6" yn "^2.0.0" +ts-simple-type@~0.3.6: + version "0.3.7" + resolved "https://registry.yarnpkg.com/ts-simple-type/-/ts-simple-type-0.3.7.tgz#1e77222c3d90d7093f80a954e74c725fd99c911c" + integrity sha512-bDXWURwpDpe1mA5E9eldmI0Mpt9zGprhtN/ZTLOJjsAMyeMy1UT7WvGRQghYewIYBYxDZurChhe4DrsPbcCVrA== + tsconfig-paths@^3.5.0: version "3.8.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz#4e34202d5b41958f269cf56b01ed95b853d59f72" @@ -13307,69 +15281,15 @@ tsconfig-paths@^3.5.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" - integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== - -tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint-eslint-rules@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" - integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== - dependencies: - doctrine "0.7.2" - tslib "1.9.0" - tsutils "^3.0.0" - -tslint-plugin-prettier@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz#95b6a3b766622ffc44375825d7760225c50c3680" - integrity sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw== - dependencies: - eslint-plugin-prettier "^2.2.0" - lines-and-columns "^1.1.6" - tslib "^1.7.1" - -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.9.1.tgz#2a40dc742943c71eca6d5c1994fcf999956be387" - integrity sha512-hrxVtLtPqQr//p8/msPT1X1UYXUjizqSit5d9AQ5k38TcV38NyecL5xODNxa73cLe/5sdiJ+w1FqzDhRBA/anA== +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== dependencies: tslib "^1.8.1" @@ -13402,6 +15322,16 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + type-is@^1.6.4, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -13423,10 +15353,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" - integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== +typescript@^3.6.4, typescript@^3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== typical@^2.6.1: version "2.6.1" @@ -13451,6 +15381,16 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + +umask@^1.1.0, umask@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -13516,6 +15456,11 @@ unicode-match-property-value-ecmascript@^1.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" @@ -13595,7 +15540,7 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== -update-notifier@^2.2.0, update-notifier@^2.3.0: +update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== @@ -13678,6 +15623,18 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + util.promisify@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -13715,6 +15672,11 @@ uuid@^3.0.1, uuid@^3.2.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" @@ -13737,7 +15699,16 @@ vali-date@^1.0.0: resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" integrity sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY= -validate-npm-package-license@^3.0.1: +validate-element-name@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/validate-element-name/-/validate-element-name-2.1.1.tgz#8ff75f7da69f73e7c510588362130508b7ac644e" + integrity sha1-j/dffaafc+fFEFiDYhMFCLesZE4= + dependencies: + is-potential-custom-element-name "^1.0.0" + log-symbols "^1.0.0" + meow "^3.7.0" + +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -13745,6 +15716,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + value-or-function@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" @@ -13889,11 +15867,43 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== +vscode-css-languageservice@4.0.2-next.1: + version "4.0.2-next.1" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.2-next.1.tgz#452455edd8bc70cf16d584081958ff138b08396a" + integrity sha512-45Rk8IBgvOfesTRLlIQs0g8OMuiubRazqa09cyAZO4aObAYUTMFQr/JDPz3jB+mB7qWpAip90x80gJ8MVw22vA== + dependencies: + vscode-languageserver-types "^3.14.0" + vscode-nls "^4.0.0" + +vscode-html-languageservice@2.1.12: + version "2.1.12" + resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.1.12.tgz#b4f9e23cac6fea74d4c9825fb4a4ef9bf313785e" + integrity sha512-mIb5VMXM5jI97HzCk2eadI1K//rCEZXte0wBqA7PGXsyJH4KTyJUaYk9MR+mbfpUl2vMi3HZw9GUOLGYLc6l5w== + dependencies: + vscode-languageserver-types "^3.13.0" + vscode-nls "^4.0.0" + vscode-uri "^1.0.6" + +vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.14.0: + version "3.15.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de" + integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ== + +vscode-nls@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.2.tgz#ca8bf8bb82a0987b32801f9fddfdd2fb9fd3c167" + integrity sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw== + vscode-uri@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.6.tgz#6b8f141b0bbc44ad7b07e94f82f168ac7608ad4d" integrity sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww== +vscode-uri@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.8.tgz#9769aaececae4026fb6e22359cb38946580ded59" + integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -13953,6 +15963,13 @@ wct-sauce@^2.0.2: temp "^0.8.1" uuid "^3.2.1" +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + wd@^1.2.0: version "1.11.1" resolved "https://registry.yarnpkg.com/wd/-/wd-1.11.1.tgz#21a33e21977ad20522bb189f6529c3b55ac3862c" @@ -13971,6 +15988,15 @@ web-animations-js@^2.3.1: resolved "https://registry.yarnpkg.com/web-animations-js/-/web-animations-js-2.3.1.tgz#3a6d9bc15196377a90f8e2803fa5262165b04510" integrity sha1-Om2bwVGWN3qQ+OKAP6UmIWWwRRA= +web-component-analyzer@~0.1.17: + version "0.1.21" + resolved "https://registry.yarnpkg.com/web-component-analyzer/-/web-component-analyzer-0.1.21.tgz#987fc47802c966004e3f51c8589bd70fd9db1d27" + integrity sha512-ZDqV4fZ60rDt6pV6GFDtVG9uioEAKzrfbHT92/4q+Ps9IcPPtaNAJxoU6kcNs7htedjPlV7Jbz5yUFlTjYxNxg== + dependencies: + fast-glob "^3.1.0" + ts-simple-type "~0.3.6" + typescript "^3.6.4" + web-component-tester@^6.9.2: version "6.9.2" resolved "https://registry.yarnpkg.com/web-component-tester/-/web-component-tester-6.9.2.tgz#40a7b824f2cf3cbc4305552bdfc3357977ded48a" @@ -14172,7 +16198,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1.3.1, which@^1.0.8, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.0.8, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -14221,16 +16247,16 @@ winston@^3.0.0: triple-beam "^1.3.0" winston-transport "^4.3.0" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wordwrapjs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-3.0.0.tgz#c94c372894cadc6feb1a66bff64e1d9af92c5d1e" @@ -14381,7 +16407,7 @@ worker-farm@^1.5.2: dependencies: errno "~0.1.7" -worker-farm@^1.7.0: +worker-farm@^1.6.0, worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== @@ -14434,6 +16460,15 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -14503,6 +16538,13 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +xregexp@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" + integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== + dependencies: + "@babel/runtime-corejs3" "^7.8.3" + xss@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.6.tgz#eaf11e9fc476e3ae289944a1009efddd8a124b51" @@ -14541,6 +16583,11 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yargs-parser@11.1.1, yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -14564,6 +16611,20 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= + dependencies: + camelcase "^4.1.0" + yargs-unparser@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" @@ -14608,6 +16669,24 @@ yargs@13.2.4: y18n "^4.0.0" yargs-parser "^13.1.0" +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + yargs@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" @@ -14627,6 +16706,25 @@ yargs@^7.1.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"