diff --git a/.eslintrc-hound.json b/.eslintrc-hound.json deleted file mode 100644 index 9866534ccf65..000000000000 --- 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 5bcf910f99df..53eb3741905d 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 634724fcbe92..640740f5ac93 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 f73933940c21..a28fd83e4d8a 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 63db6533f24c..2566272cb30a 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 936394a32769..984656a4b085 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 000000000000..324cce418c34 --- /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 411ffee836cc..8bea1272428e 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 74330ec86623..db5229345822 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 b9bb9f76fb2a..69fbabcecd20 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 { CastManager } from "../../../../src/cast/cast_manager"; +import { + castSendShowLovelaceView, + ensureConnectedCastSession, +} from "../../../../src/cast/receiver_messages"; import { - enableWrite, 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 { - ensureConnectedCastSession, - castSendShowLovelaceView, -} from "../../../../src/cast/receiver_messages"; -import "../../../../src/layouts/loading-screen"; -import { CastManager } from "../../../../src/cast/cast_manager"; -import { - LovelaceConfig, - getLovelaceCollection, getLegacyLovelaceCollection, + getLovelaceCollection, + LovelaceConfig, } from "../../../../src/data/lovelace"; -import "./hc-layout"; +import "../../../../src/layouts/loading-screen"; import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config"; -import { toggleAttribute } from "../../../../src/common/dom/toggle_attribute"; -import { atLeastVersion } from "../../../../src/common/config/version"; +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 a2ab3fb1797a..1c9ca40e6c2c 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, - customElement, - property, - TemplateResult, - html, - CSSResult, - css, -} from "lit-element"; -import { - getAuth, - createConnection, Auth, - getAuthOptions, - ERR_HASS_HOST_REQUIRED, - ERR_INVALID_HTTPS_TO_HTTP, 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 "@polymer/iron-icon"; -import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; +import { + css, + CSSResult, + customElement, + html, + LitElement, + property, + TemplateResult, +} from "lit-element"; +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 aaf9d8c17a5d..f9d82223b24a 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 587624c74fbd..931a3353f07f 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 c0e8089e16c0..ff8956804c22 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 62f739e793ac..e94856448571 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 0430dbbf5aab..c52c13704850 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 4b597d6e1ff3..b3c0fcab0e3a 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 ee2586e3912e..b2d729bf654e 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 fad09d632960..b8478cc3704f 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 { 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 { Lovelace } from "../../../../src/panels/lovelace/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 cb5773b416db..9c6f92e0167b 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 { customElement, html, property, TemplateResult } from "lit-element"; +import { CAST_NS } from "../../../../src/cast/const"; import { - HassMessage, ConnectMessage, - ShowLovelaceViewMessage, GetStatusMessage, + HassMessage, ShowDemoMessage, + ShowLovelaceViewMessage, } from "../../../../src/cast/receiver_messages"; +import { ReceiverStatusMessage } from "../../../../src/cast/sender_messages"; +import { atLeastVersion } from "../../../../src/common/config/version"; +import { isNavigationClick } from "../../../../src/common/dom/is-navigation-click"; import { - LovelaceConfig, - getLovelaceCollection, fetchResources, - LegacyLovelaceConfig, getLegacyLovelaceCollection, + getLovelaceCollection, + LegacyLovelaceConfig, + LovelaceConfig, } from "../../../../src/data/lovelace"; -import "./hc-launch-screen"; -import { castContext } from "../cast_context"; -import { CAST_NS } from "../../../../src/cast/const"; -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 { 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 97d76cdfd110..7fe5d01e02e0 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 5b31d1cac0d1..991c0605fee1 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 c0bfef2e35d7..7e586a7c71b4 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 c035b22fca1b..f0c8e24abf2d 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 6c20f838007c..3c20f5a7a869 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 380ab6716fcc..ce1a743dcbea 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 34ffd8afa78d..c0643d65ac9b 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 aaec2b732205..c915a95668c0 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 17a9cb9973e9..39cf7598fbba 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 4a19eaf37390..746a0a2eae26 100644 --- a/demo/src/custom-cards/cast-demo-row.ts +++ b/demo/src/custom-cards/cast-demo-row.ts @@ -1,21 +1,20 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + TemplateResult, } from "lit-element"; - +import { CastManager } from "../../../src/cast/cast_manager"; +import { castSendShowDemo } from "../../../src/cast/receiver_messages"; import "../../../src/components/ha-icon"; import { - LovelaceRow, CastConfig, + LovelaceRow, } 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"; @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 45c887db9d7f..aeb248d79a98 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 bacc0978a8cd..20fdcb71aba9 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/components/ha-iconset-svg"; import "../../src/resources/ha-style"; +import "../../src/resources/hass-icons"; import "../../src/resources/roboto"; -import "../../src/components/ha-iconset-svg"; - import "./ha-demo"; import "./resources/hademo-icons"; diff --git a/demo/src/ha-demo.ts b/demo/src/ha-demo.ts index 6eb383eb2230..6fd33b7f5792 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 { isNavigationClick } from "../../src/common/dom/is-navigation-click"; +import { navigate } from "../../src/common/navigate"; import { - provideHass, MockHomeAssistant, + provideHass, } from "../../src/fake_data/provide_hass"; -import { navigate } from "../../src/common/navigate"; -import { mockLovelace } from "./stubs/lovelace"; -import { mockAuth } from "./stubs/auth"; +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 efd18b224fe3..a9decd45029d 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 84ef96619aaf..96fd7870376b 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 138a15aff48e..3928e5eaf097 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 2dcd4f61bdf8..b5a2d7223d11 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 44864e09cd89..7b714a6e0199 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 c5b7846f3984..6a88200a6c07 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 db01c7fe1317..5b1c8123adaf 100644 --- a/gallery/src/components/demo-cards.js +++ b/gallery/src/components/demo-cards.js @@ -1,9 +1,9 @@ +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 "@polymer/app-layout/app-toolbar/app-toolbar"; - -import "./demo-card"; 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 ce5fda13d886..c1cac68c8b50 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 8f82e2a8abbf..f1de5f0908d3 100644 --- a/gallery/src/components/demo-more-infos.js +++ b/gallery/src/components/demo-more-infos.js @@ -1,9 +1,9 @@ +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 "@polymer/app-layout/app-toolbar/app-toolbar"; - -import "./demo-more-info"; 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 ac8b7e5defb1..12b5f130b4e1 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 d2fe9d88c09c..e5ce595f915f 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 7e1e680763d3..bb0261e9d509 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 254dc3f006a8..8c4c77e100a8 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 a428330f8e0c..66a0c08b706f 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 5f5e43644f32..2963cab22876 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 98ef7b0be3ad..5455232a3d73 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 d7651473b188..596f6d302f11 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 775d7423c3de..552bb2b0df52 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 5979cdb39397..df4c8844db59 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 fe0ca6d175ca..07e974316e81 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 f79284a13fec..a26a13a8a3ee 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 5cf708cb9f2d..1077e7a7b8a6 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 f231efc86092..bed6be4c47b4 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 1378707e45a9..d4df8f31f4cc 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 faae58bd7bdc..684aaa2071f6 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 8d62b438382b..9abb1afc1e93 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 e34911f93948..b746888dc19c 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 45124374e097..81b344e6895e 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 07d9526007eb..67cd631b8749 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 b1da49043ecd..518af1df39c2 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 6e656edc989a..4cf309e612f4 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/components/ha-iconset-svg"; import "../../src/resources/ha-style"; +import "../../src/resources/hass-icons"; import "../../src/resources/roboto"; -import "../../src/components/ha-iconset-svg"; - 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 a53fa66462dd..1c68e07e3386 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 5ff2ee32eebd..080d4a3d77fd 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 628ef2bef9cb..5d9093c90c9a 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 27241482b4c4..1a23949cdf51 100644 --- a/hassio/src/addon-store/hassio-repositories-editor.ts +++ b/hassio/src/addon-store/hassio-repositories-editor.ts @@ -1,30 +1,31 @@ +import "@polymer/iron-icon/iron-icon"; +import "@polymer/paper-card/paper-card"; +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, - CSSResultArray, css, - property, - TemplateResult, + CSSResultArray, customElement, + html, + LitElement, + property, PropertyValues, + TemplateResult, } from "lit-element"; -import "@polymer/iron-icon/iron-icon"; -import "@polymer/paper-card/paper-card"; -import "@polymer/paper-input/paper-input"; +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 eeda1084a5a2..2a087ff35101 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 1a91052163b2..5d18556ecc56 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 { fireEvent } from "../../../src/common/dom/fire_event"; +import "../../../src/components/ha-yaml-editor"; +import type { HaYamlEditor } from "../../../src/components/ha-yaml-editor"; import { HassioAddonDetails, - setHassioAddonOption, 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 "../../../src/components/ha-yaml-editor"; -// tslint:disable-next-line: no-duplicate-imports -import { HaYamlEditor } from "../../../src/components/ha-yaml-editor"; 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 04b736f34f7f..1395a3ee430c 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 0f568df2c774..b5ad7f38e9ac 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 2ad9e008a7c4..914157438fa2 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 4f5b2cfd70c7..50dff7aa215e 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 cbe66946bc70..0601f5ba5a70 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 737c36edc35b..a2174a77e96e 100644 --- a/hassio/src/components/hassio-card-content.ts +++ b/hassio/src/components/hassio-card-content.ts @@ -1,37 +1,44 @@ +import "@polymer/iron-icon/iron-icon"; import { - LitElement, - TemplateResult, - html, - CSSResult, css, - property, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@polymer/iron-icon/iron-icon"; - 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 25eb72e5c305..270c8e761287 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 bfd55eff0e11..ba4ac7c22930 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 c59edcfc5e28..1265512a9ee9 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 { atLeastVersion } from "../../../src/common/config/version"; import { navigate } from "../../../src/common/navigate"; -import { hassioStyle } from "../resources/hassio-style"; +import { HassioAddonInfo } from "../../../src/data/hassio/addon"; import { haStyle } from "../../../src/resources/styles"; +import { HomeAssistant } from "../../../src/types"; import "../components/hassio-card-content"; -import { atLeastVersion } from "../../../src/common/config/version"; +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 a1db26663ac6..c847e3bc2621 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 d04ed1854ad9..926e4019e0cb 100644 --- a/hassio/src/dashboard/hassio-update.ts +++ b/hassio/src/dashboard/hassio-update.ts @@ -1,35 +1,36 @@ +import "@material/mwc-button"; +import "@polymer/iron-icon/iron-icon"; +import "@polymer/paper-card/paper-card"; import { - LitElement, - TemplateResult, - html, - CSSResult, css, - property, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@polymer/iron-icon/iron-icon"; - -import { HomeAssistant } from "../../../src/types"; +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 a8af33483028..c930ee9a4462 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 56baec7e8c2d..87f22529a2c2 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 ff5def6b41fa..029b419f5ded 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 { - HassRouterPage, - RouterOptions, -} from "../../src/layouts/hass-router-page"; -import { HomeAssistant } from "../../src/types"; + fetchHassioHassOsInfo, + fetchHassioHostInfo, + HassioHassOSInfo, + HassioHostInfo, +} from "../../src/data/hassio/host"; import { - fetchHassioSupervisorInfo, + createHassioSession, fetchHassioHomeAssistantInfo, - HassioSupervisorInfo, + fetchHassioSupervisorInfo, HassioHomeAssistantInfo, - createHassioSession, HassioPanelInfo, + HassioSupervisorInfo, } from "../../src/data/hassio/supervisor"; import { - fetchHassioHostInfo, - fetchHassioHassOsInfo, - HassioHostInfo, - HassioHassOSInfo, -} from "../../src/data/hassio/host"; -import { fetchHassioAddonInfo } from "../../src/data/hassio/addon"; + 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 { 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 becdccdf491b..ba646f42a14d 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 { 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 "../../src/components/ha-menu-button"; +import { HassioHassOSInfo, HassioHostInfo } from "../../src/data/hassio/host"; import { - HassioSupervisorInfo, 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 "./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 a77d821bc8ef..dd4a66c2705a 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 a9ccf349f182..2dffe09ca39b 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, + css, + CSSResult, customElement, - property, - TemplateResult, html, + LitElement, + property, PropertyValues, - CSSResult, - css, + 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 5a96d2cd674b..529f9abb8dc6 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 { - HassioSnapshot, + css, + CSSResultArray, + customElement, + html, + LitElement, + property, + PropertyValues, + TemplateResult, +} from "lit-element"; +import { fireEvent } from "../../../src/common/dom/fire_event"; +import { + createHassioFullSnapshot, + createHassioPartialSnapshot, fetchHassioSnapshots, - reloadHassioSnapshots, HassioFullSnapshotCreateParams, HassioPartialSnapshotCreateParams, - createHassioFullSnapshot, - createHassioPartialSnapshot, + 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 3c50ece8af67..11d0ae1a6ced 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 "../../../src/components/buttons/ha-call-api-button"; +import { fetchHassioHardwareInfo } from "../../../src/data/hassio/hardware"; import { - HassioHostInfo as HassioHostInfoType, HassioHassOSInfo, + HassioHostInfo as HassioHostInfoType, } from "../../../src/data/hassio/host"; -import { fetchHassioHardwareInfo } from "../../../src/data/hassio/hardware"; +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 75892b731beb..8b5ac797be1e 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 a111969bb7f6..654775f94d88 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 e1ea7eb6683f..ea60843d8c05 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 54ad5befaf9c..bf87bfd3c511 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 c19a4a9a37a9..dd3fd6e59e39 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ 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 c13df3d7694b..e6cbfc09a3b0 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 bf8feb268509..f811a21186e4 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 942fb5b4ccf7..63e213e6d180 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 c0f6e6d74f92..33e2472d8273 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 6c9ea0a8e19f..6c4fcf13f43c 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 50757ffbde0b..460054135d16 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 b8a275b35dfb..44f042beacc6 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 a7b74ce1cd53..8f05f437ef43 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 2e3a136225d1..a72bb67ea529 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 3ab515b778ca..05edb52e14a5 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 f29b5e257b1e..9d95f5aee210 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 6b7850dfebdf..a3003974fbae 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 804383380436..f0480b60ff68 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 c802c7c56a57..2159a4e69ad6 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 e735df808ce8..cf0617923b20 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 34965369ba1d..b29dff5caef4 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 ac7cb86e0bd4..9b2155244fcb 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 870ecf80c3bc..75644ad72bfd 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 72bf70bb5060..f96be797c0c6 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 f3b759be2cdd..a24994d5b32f 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 aeb399e6c4b9..7291f6863e70 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 028f4ed12ef0..170b83052d11 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 9aa833c035da..24f1b598ccbf 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 df89f88e5428..4e8e6770f2fb 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 20d45623c981..657bbbf5281b 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 d24295c5d492..c04395a8f585 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 74a21b5c8f0c..05c6f3352ce6 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 4164edb75a51..fedd679e2e31 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 3342479564ad..780aef69520a 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 933ff0abdb38..3ad6f8bece31 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 7480a517db63..f86bfb7388b5 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 59c7c8e748f5..ba090cc9fd51 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 c8d7b79b5659..5166c615e4d3 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 9f14d21d18e5..50212e996779 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 b091357df9e7..fff8ab1bd02b 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, + html, + LitElement, property, - TemplateResult, PropertyValues, - LitElement, + query, + TemplateResult, } from "lit-element"; - -// eslint-disable-next-line import/no-webpack-loader-syntax +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 -// tslint:disable-next-line: no-implicit-dependencies +// eslint-disable-next-line import/no-webpack-loader-syntax 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 "../../common/search/search-input"; import { debounce } from "../../common/util/debounce"; -import { styleMap } from "lit-html/directives/style-map"; -import { ifDefined } from "lit-html/directives/if-defined"; +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 e7237d106eb2..b32446710a29 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 d0a45fe8e8d1..dbe95c8f6a84 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 c232393e4c31..a0d52389e7b6 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 a5913220ac8a..ec140426ae22 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 1902a97c64ef..4f944c471774 100644 --- a/src/components/device/ha-devices-picker.ts +++ b/src/components/device/ha-devices-picker.ts @@ -1,22 +1,22 @@ +import "@polymer/paper-icon-button/paper-icon-button-light"; import { + customElement, + html, LitElement, - TemplateResult, property, - html, - customElement, + TemplateResult, } from "lit-element"; -import "@polymer/paper-icon-button/paper-icon-button-light"; - -import { HomeAssistant } from "../../types"; -import { PolymerChangedEvent } from "../../polymer-types"; 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 4ae78090e53d..7accb98257bd 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 7ddef793c609..aec360155b3e 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 ffa76a1d5687..e5598b35f76a 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 05fd062eb597..4824bf046e78 100644 --- a/src/components/entity/ha-entities-picker.ts +++ b/src/components/entity/ha-entities-picker.ts @@ -1,27 +1,25 @@ +import "@polymer/paper-icon-button/paper-icon-button-light"; +import type { HassEntity } from "home-assistant-js-websocket"; import { + customElement, + html, LitElement, - TemplateResult, property, - html, - customElement, + TemplateResult, } from "lit-element"; -import "@polymer/paper-icon-button/paper-icon-button-light"; - -import { HomeAssistant } from "../../types"; -import { PolymerChangedEvent } from "../../polymer-types"; 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 d2ddd62165ca..393a77fb0c33 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 6c5f7577245a..67549ca09002 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 33923171fc12..80a7ad22d1c6 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 ce8a4c6344be..bc734dfd573d 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 276ab5358030..fc5522ceddb4 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 2bcc4700fa65..503240d84701 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 5e7e7f992d26..01d5e712962f 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 42f5cbead882..abef729cf697 100644 --- a/src/components/ha-attributes.ts +++ b/src/components/ha-attributes.ts @@ -1,22 +1,22 @@ +import { HassEntity } from "home-assistant-js-websocket"; import { - property, - LitElement, - TemplateResult, - html, - CSSResult, css, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; - -import hassAttributeUtil from "../util/hass-attributes-util"; 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 7b765b15863c..90330b04cdad 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 ed604332ab90..c37687190d0b 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 85362d134e76..4c233f061be5 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 ffa7013d9965..8a1363cf8ff3 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 abe9b7bf5a77..aba4135cce8f 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 9586157d484b..76002a1f91dc 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 fcbc24306b69..7986aa74675a 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 { Editor } from "codemirror"; import { - UpdatingElement, - property, customElement, + property, PropertyValues, + UpdatingElement, } from "lit-element"; -import { Editor } from "codemirror"; +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 8ab66513be6c..22ea627d6b40 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 c2a7e34e42ca..bf6450c161ce 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 b669d23eb95d..0e7eb841e8e9 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 1852973d2d17..399915c75a28 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 6f42cd815970..7504d38dcbce 100644 --- a/src/components/ha-date-input.ts +++ b/src/components/ha-date-input.ts @@ -1,21 +1,22 @@ +import "@polymer/paper-input/paper-input"; +import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import { - html, css, + customElement, + html, LitElement, - TemplateResult, property, - customElement, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; -// tslint:disable-next-line:no-duplicate-imports -import { PaperInputElement } from "@polymer/paper-input/paper-input"; - @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 2e3bc476fae1..744562a61399 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 290f5ad22fcf..f65b9f273bb3 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 e4dbebff2cc0..aa0f382cee5d 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 "@material/mwc-fab"; +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"; -import "@material/mwc-fab"; -import { Constructor } from "../types"; -// tslint:disable-next-line -import { Fab } from "@material/mwc-fab"; -// tslint:disable-next-line 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 cc5355274e54..c8c956cecaac 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 { + css, + CSSResult, customElement, - LitElement, html, + LitElement, property, - TemplateResult, - CSSResult, - css, 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 ce6056300f71..d915434a3d5f 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 155132c28c1e..9fe0929b84a4 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 { + css, + CSSResult, customElement, - LitElement, html, + LitElement, property, - TemplateResult, query, - CSSResult, - css, + 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 dc85f3f6ccf1..80e25168c7c5 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 d7ff9ebb594b..3f4942c8ec40 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 f650ac3bfd01..2f3b82984c46 100644 --- a/src/components/ha-form/ha-form-select.ts +++ b/src/components/ha-form/ha-form-select.ts @@ -1,26 +1,29 @@ +import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { + css, + CSSResult, customElement, - LitElement, html, + LitElement, property, - TemplateResult, query, - CSSResult, - css, + TemplateResult, } 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 { 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 d7dab29dd271..9cafcf7985b1 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 b02e638854d6..ff452c65900a 100644 --- a/src/components/ha-form/ha-form.ts +++ b/src/components/ha-form/ha-form.ts @@ -1,21 +1,20 @@ import { + css, + CSSResult, customElement, - LitElement, html, + LitElement, property, - CSSResult, - css, } 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 9621e267ed8d..83761e6c40dc 100644 --- a/src/components/ha-icon-input.ts +++ b/src/components/ha-icon-input.ts @@ -1,22 +1,25 @@ +import "@polymer/paper-input/paper-input"; import { - html, css, + customElement, + html, LitElement, - TemplateResult, property, - customElement, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; -import "./ha-icon"; 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 7a875d5e6120..f1c216450f54 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 e8d58433e6d8..1d896882d778 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 5d71f214ed79..a707af0dc4a7 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 a77850cc8f87..9f9f2fbcc601 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 90a94d7f9b0c..bbe09e682968 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 00968a5ce9b5..ebc367122f15 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 7f64e3443276..239bfd7e9f27 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 f0d473038526..99cbd85ad816 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 d79c8c66f4e3..7fe19dea59c5 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 cca612de4f34..e119c7f4cec5 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 ca4c32ff1ce5..b2567f6c5f8c 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 ccbd66a4e011..61aec06691a0 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 bc810e48e02b..124c93404e0e 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 0d6128552481..58d787ebb5fd 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 9ca7caf94455..c1e2596df68c 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 c10bb66a9076..32aee922c96e 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 743037a7bafd..e3ba42aa8c4c 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 89bae13454e6..0addeb5e1a0d 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 70de137543e4..36aa884120ea 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 9c57c0fd757e..2b63661353bc 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 556dac261948..4688224380cf 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 7fd7e55a2f60..dc03b0507a79 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 82c523614ead..39766d062004 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 046fcd36ca76..e49c0bd04300 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 fcf8c2b12aef..6db95339ba6d 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, + 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 { fireEvent } from "../../common/dom/fire_event"; 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 a0c3075d4840..bf2263f5065a 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 620da4d7b138..bb8aef1036c1 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-dropdown-menu/paper-dropdown-menu"; 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-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 4456b285cc37..4cc132147542 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 0ef2c6194ce1..ada4aba6b4a6 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 9f604b807942..2f87327481ee 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 f7685987f68c..cd6dd3385d23 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, + customElement, html, + LitElement, property, - customElement, + 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 b76e8bff7e01..ff5dc7c379a9 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 ac9ed175041b..63e8a3830148 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 cdb751040a9d..a2ff8e265457 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 005610e33ca4..e7c772cec321 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 0bfb82730853..1897a3565e8d 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 f61c98f8d09b..a6fbea3bae6d 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 4d1ae35dcbf0..c642841584c0 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 7b922e685083..268e3e04ae57 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 6f57fe5cb2c1..10b9abe7ab69 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 8a6d9c099ebd..f02105ac190b 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 8cc269def789..03c58c36c11a 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 119231feec37..da9919c6b4c0 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 { 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"; -import { computeStateName } from "../common/entity/compute_state_name"; 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 f4d78f31758f..80f4e7c820de 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 18a1512b416f..5abaa9084b33 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 f4b8a449f16e..bcce4509f882 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 5127d4cbbe34..ab4a1b0fccf6 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 98a4b3ca57f0..345bf0d1bad7 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 4eb473b34201..af0a64790216 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 1dabe535596d..20d99cc5d431 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 bed2c34d0ad6..ccd5ef4d52be 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 1055ed04722c..adfe9eba00db 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 4f62a2422481..234825d018f2 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 5ac72b2ba146..9fb5b309e18d 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 23abea278b00..24e6e3162784 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 1bfc33bd3413..3407efe95e6c 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 6e3e65a66f67..c0245a4f248c 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 c52979b664b8..5f027ce41390 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 e55b936d157b..8b54020a7d3e 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 905b13863598..bd35ff1896d4 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 62a4ed423d42..3c7b2d351a5d 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 a38c4ed2529d..984b2459cbb7 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 ed559e45c55d..8f6d947e7676 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 2e171b8dab33..8d8f2d178392 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 d7d2306457ec..92151c4a58ce 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 e60552b32ba3..bd4270ca676d 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 "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-input/paper-input"; 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 "../../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 490a6becc04a..401c2a43e7f8 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 493b1d2b77bc..d2ccebecc257 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 { html } from "lit-element"; +import { localizeKey } from "../../common/translations/localize"; +import { ConfigEntry } from "../../data/config_entries"; import { + createOptionsFlow, + deleteOptionsFlow, fetchOptionsFlow, handleOptionsFlowStep, - deleteOptionsFlow, - createOptionsFlow, } from "../../data/options_flow"; -import { html } from "lit-element"; -import { localizeKey } from "../../common/translations/localize"; import { - showFlowDialog, loadDataEntryFlowDialog, + showFlowDialog, } from "./show-dialog-data-entry-flow"; -import { ConfigEntry } from "../../data/config_entries"; 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 211fa6c5226e..7309ff2226a9 100644 --- a/src/dialogs/config-flow/step-flow-abort.ts +++ b/src/dialogs/config-flow/step-flow-abort.ts @@ -1,18 +1,17 @@ +import "@material/mwc-button"; import { - LitElement, - TemplateResult, - html, + CSSResult, customElement, + html, + LitElement, property, - CSSResult, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - +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 fe6d1ffeabae..ee12067b20e3 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 fcc3efa51ef7..757399763d93 100644 --- a/src/dialogs/config-flow/step-flow-external.ts +++ b/src/dialogs/config-flow/step-flow-external.ts @@ -1,22 +1,21 @@ +import "@material/mwc-button"; import { - LitElement, - TemplateResult, - html, + css, + CSSResultArray, customElement, + html, + LitElement, property, - CSSResultArray, - css, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - -import { HomeAssistant } from "../../types"; import { fireEvent } from "../../common/dom/fire_event"; -import { configFlowContentStyles } from "./styles"; import { - DataEntryFlowStepExternal, 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 adf6a4ea5c1d..5fe6c98cd51d 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 { 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 { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; +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 fab173178441..b060069e31f6 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 { classMap } from "lit-html/directives/class-map"; +import { styleMap } from "lit-html/directives/style-map"; import memoizeOne from "memoize-one"; -import * as Fuse from "fuse.js"; - -import "../../components/ha-icon-next"; +import { fireEvent } from "../../common/dom/fire_event"; import "../../common/search/search-input"; -import { styleMap } from "lit-html/directives/style-map"; +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 c53a6b933c70..592299c6052b 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 1301347f7e45..1e2be3dea4f6 100644 --- a/src/dialogs/generic/dialog-box.ts +++ b/src/dialogs/generic/dialog-box.ts @@ -1,28 +1,28 @@ +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-input/paper-input"; 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 { 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 8b05578bd7f2..86c5cfee8b3e 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 135855db5bc3..f09a94454041 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 d63d8054985d..28df7c7249fb 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 64ab1d8ba54d..016f72e118e4 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 08b53b17cfc6..7e2651ec2437 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 "@material/mwc-button"; +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - html, - TemplateResult, - CSSResult, css, - property, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; -import "@material/mwc-button"; - 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 3dda7275b0cf..55623f58d5fa 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 bb1a4b2275d0..be4526fd8fc0 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 { 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 "../../../components/ha-climate-control"; -import "../../../components/ha-paper-slider"; import "../../../components/ha-paper-dropdown-menu"; +import "../../../components/ha-paper-slider"; import "../../../components/ha-switch"; - -import { supportsFeature } from "../../../common/entity/supports-feature"; - -import { computeRTLDirection } from "../../../common/util/compute_rtl"; -import { HomeAssistant } from "../../../types"; import { ClimateEntity, - 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_FAN_MODE, CLIMATE_SUPPORT_PRESET_MODE, + CLIMATE_SUPPORT_SWING_MODE, + CLIMATE_SUPPORT_TARGET_HUMIDITY, + CLIMATE_SUPPORT_TARGET_TEMPERATURE, + CLIMATE_SUPPORT_TARGET_TEMPERATURE_RANGE, 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 6e8b060c1eba..8d09e02953c1 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 c86b52b9dd46..896d1c576bd4 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 c9ba16698216..2ec001a01a6e 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 "@material/mwc-button"; +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - html, - TemplateResult, - CSSResult, css, - property, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import { HassEntity } from "home-assistant-js-websocket"; - 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 f075583d9153..25e2bc18ec93 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 7b308936092a..c9a3c49d7134 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 { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, + customElement, html, - TemplateResult, + LitElement, property, - customElement, + TemplateResult, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; - -import { HomeAssistant } from "../../../types"; - 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 c27ac5bf26f1..0c0e0da0a26a 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 81d2528b3c46..28ae779d9141 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 160261e1bade..febd00b62fef 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 c96c526f53fb..7c1597192934 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 a280e38eef6d..cc7590c197ea 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 f5577eb06c81..7c7fe6f3c762 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 c914e84ea78a..0dbf26764f6b 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 153a0c797eb4..746361146c4a 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 "@material/mwc-button"; +import { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, - html, - TemplateResult, - CSSResult, css, - property, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; -import "@material/mwc-button"; - +import memoizeOne from "memoize-one"; +import { fireEvent } from "../../../common/dom/fire_event"; import "../../../components/map/ha-map"; - -import { HomeAssistant } from "../../../types"; import { showZoneEditor } from "../../../data/zone"; -import { fireEvent } from "../../../common/dom/fire_event"; -import memoizeOne from "memoize-one"; +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 3c8146795f84..83d7ccd31e2f 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 { HassEntity } from "home-assistant-js-websocket"; import { - LitElement, + customElement, html, - TemplateResult, + LitElement, property, - customElement, + TemplateResult, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; - -import { HomeAssistant } from "../../../types"; - 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 4cf93d0ed5bd..10b832f26031 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 { HassEntity } from "home-assistant-js-websocket"; import { - property, + css, + CSSResult, + customElement, + html, LitElement, + property, TemplateResult, - html, - customElement, - CSSResult, - css, } from "lit-element"; -import { HassEntity } from "home-assistant-js-websocket"; - -import "../../../components/ha-relative-time"; - 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 414f26ed8b25..cbfa31c883af 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 "@material/mwc-button"; import { - LitElement, - html, - TemplateResult, - CSSResult, css, - property, - PropertyValues, + CSSResult, customElement, + html, + LitElement, + property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; - -import { HomeAssistant } from "../../../types"; 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 ce1c5a30ae98..bd2bf1bc6878 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 8438e59a3b1b..ce1c5e299441 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 { 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 { supportsFeature } from "../../../common/entity/supports-feature"; +import "../../../components/ha-water_heater-control"; import { EventsMixin } from "../../../mixins/events-mixin"; - -import { featureClassNames } from "../../../common/entity/feature_class_names"; 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 7806329424a8..a9e6c7ffa0b7 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 { - LitElement, - property, - CSSResult, css, + CSSResult, customElement, + LitElement, + property, 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 0da3f5ac7c89..aa98acb4a2a5 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 { EventsMixin } from "../../mixins/events-mixin"; -import LocalizeMixin from "../../mixins/localize-mixin"; +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 { showConfirmationDialog } from "../generic/show-dialog-box"; +import "../../data/ha-state-history-data"; +import { EventsMixin } from "../../mixins/events-mixin"; +import LocalizeMixin from "../../mixins/localize-mixin"; 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 6a65ad0b8e31..0c556dfc6884 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 3486556aca26..2dc35ec70c24 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 c5b6f6580223..bde508416d12 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 12c96da45e30..f540571965fd 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 6689db82833d..08f7720841cd 100644 --- a/src/dialogs/notifications/persistent-notification-item.ts +++ b/src/dialogs/notifications/persistent-notification-item.ts @@ -1,21 +1,19 @@ +import "@material/mwc-button"; +import "@polymer/paper-tooltip/paper-tooltip"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - customElement, - css, - CSSResult, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "@polymer/paper-tooltip/paper-tooltip"; - -import "../../components/ha-relative-time"; 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 d3813d640951..5468c66ac501 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 { uid } from "../../common/util/uid"; +import "../../components/dialog/ha-paper-dialog"; import { - processText, + AgentInfo, getAgentInfo, + processText, 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 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 25efc62a5206..d61c9a910288 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 2a005ddbd391..e97a4ebc4a7a 100644 --- a/src/entrypoints/compatibility.ts +++ b/src/entrypoints/compatibility.ts @@ -1,7 +1,7 @@ +import objAssign from "es6-object-assign"; import "mdn-polyfills/Array.prototype.includes"; -import "unfetch/polyfill"; import "regenerator-runtime/runtime"; -import objAssign from "es6-object-assign"; +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 b45eb5fb4888..9e738b804298 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 9e14dc52c18a..6ba448c0b413 100644 --- a/src/entrypoints/custom-panel.ts +++ b/src/entrypoints/custom-panel.ts @@ -1,11 +1,11 @@ +import { PolymerElement } from "@polymer/polymer"; +import { fireEvent } from "../common/dom/fire_event"; import { loadJS } from "../common/dom/load_resource"; -import { loadCustomPanel } from "../util/custom-panel/load-custom-panel"; +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"; -import { fireEvent } from "../common/dom/fire_event"; -import { PolymerElement } from "@polymer/polymer"; -import { CustomPanelInfo } from "../data/panel_custom"; -import { webComponentsSupported } from "../common/feature-detect/support-web-components"; 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 577a58c1ac70..3be70289c878 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 45f37aa92d05..1cd00381496f 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 5eb2ff4303a9..c3c6f0fe4214 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 7d2cbc1b34e4..58f19ce7db2c 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 a386355eb6e2..56d1240c7403 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 56b33b9b14f9..7fdec23d3301 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 { 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 { 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 { DEFAULT_PANEL } from "../data/panel"; +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 9b057978f9bc..719a01479987 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 de55383946cd..befab7158678 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 6d34ae4e14c3..7a36e41448ea 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 ad2bd944558a..f8838eff85a4 100644 --- a/src/layouts/hass-error-screen.ts +++ b/src/layouts/hass-error-screen.ts @@ -1,13 +1,13 @@ +import "@material/mwc-button"; import { - LitElement, - CSSResultArray, css, - TemplateResult, + CSSResultArray, + customElement, html, + LitElement, property, - customElement, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; import "./hass-subpage"; @customElement("hass-error-screen") diff --git a/src/layouts/hass-loading-screen.ts b/src/layouts/hass-loading-screen.ts index e0670fa4eeb6..dc04a89a6aa7 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 ae66380088d4..dcb312bd2632 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 827828fedd37..74b7d27421bf 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 143b965cbf0b..d761ec0e6cb2 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 2198acf49b9a..cf2c593c2203 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 "../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 { 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 { 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 593e26f095f9..9959397dcae9 100644 --- a/src/layouts/home-assistant-main.ts +++ b/src/layouts/home-assistant-main.ts @@ -1,27 +1,23 @@ +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"; +import type { AppDrawerElement } from "@polymer/app-layout/app-drawer/app-drawer"; +import "@polymer/iron-media-query/iron-media-query"; import { - LitElement, - html, - TemplateResult, - CSSResult, css, - PropertyValues, + CSSResult, + html, + LitElement, property, + PropertyValues, + TemplateResult, } from "lit-element"; -import "@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 "@polymer/iron-media-query/iron-media-query"; - -import "./partial-panel-resolver"; -import { HomeAssistant, Route } from "../types"; 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 c27bce6453a5..97b908001fac 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 1533cb6244f0..060e97b14715 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 { - LitElement, - TemplateResult, - html, css, - customElement, CSSResult, + customElement, + html, + LitElement, + TemplateResult, } 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 2f9c360939b3..89b018bb8487 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 c9322e480dc3..1607fadc20e9 100644 --- a/src/managers/notification-manager.ts +++ b/src/managers/notification-manager.ts @@ -1,19 +1,17 @@ +import "@material/mwc-button"; import { + css, + CSSResult, + html, LitElement, - query, property, + query, TemplateResult, - html, - css, - CSSResult, } 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 9d54050f5664..cc8103935a2f 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 d9f1c28fe331..a380e2cedd7d 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 c99d32c5a81f..a43ce610a155 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 afc25f399ea5..ba9ab227c3f0 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 034235fa3084..a4d877a85f63 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 9fa2cb8d75cf..c11e3a26c762 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 b9f1de542663..9588492d081e 100644 --- a/src/onboarding/integration-badge.ts +++ b/src/onboarding/integration-badge.ts @@ -1,19 +1,22 @@ import { - LitElement, - TemplateResult, - html, + css, + CSSResult, customElement, + html, + LitElement, property, - CSSResult, - css, + 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 4cd12f4b7586..0f69b3c03b7b 100644 --- a/src/onboarding/onboarding-core-config.ts +++ b/src/onboarding/onboarding-core-config.ts @@ -1,44 +1,48 @@ +import "@material/mwc-button/mwc-button"; +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 { - LitElement, + css, + CSSResult, customElement, + html, + LitElement, 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 "@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 { 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 0f8699e9dd13..c1b6d1614976 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, + CSSResult, + customElement, html, - PropertyValues, + LitElement, property, - customElement, + 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 816902c62585..4ee2639e554f 100644 --- a/src/onboarding/onboarding-integrations.ts +++ b/src/onboarding/onboarding-integrations.ts @@ -1,39 +1,43 @@ +import "@material/mwc-button/mwc-button"; +import { genClientId } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, - html, + css, + CSSResult, customElement, - PropertyValues, + html, + LitElement, property, - CSSResult, - css, + PropertyValues, + TemplateResult, } from "lit-element"; -import "@material/mwc-button/mwc-button"; -import { - loadConfigFlowDialog, - showConfigFlowDialog, -} from "../dialogs/config-flow/show-dialog-config-flow"; -import { HomeAssistant } from "../types"; -import { getConfigEntries, ConfigEntry } from "../data/config_entries"; +import { fireEvent } from "../common/dom/fire_event"; 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 { ConfigEntry, getConfigEntries } from "../data/config_entries"; import { + getConfigFlowInProgressCollection, localizeConfigFlowTitle, subscribeConfigFlowInProgress, - getConfigFlowInProgressCollection, } 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 "./integration-badge"; @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 75845879c230..96703c6a6cae 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 65e13eb23ffd..cff20e98b691 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 moment from "moment"; +// eslint-disable-next-line import/no-duplicates,import/no-extraneous-dependencies 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 { 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 a22a502c5ef2..3a3e43251640 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 3bfa1a0a991c..cf6b1a32a1e6 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 "@material/mwc-button"; +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-input/paper-input"; import { - LitElement, - html, css, CSSResult, - TemplateResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-input/paper-input"; - 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 0be017cf9809..35369a26dfac 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 967455ffbbb9..195e7168046d 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 1559f1410bb4..5067408ec2c3 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 a3b0290f847b..db56b9aa8411 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 { 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 { - fetchDeviceActionCapabilities, - deviceAutomationsEqual, DeviceAction, + deviceAutomationsEqual, + fetchDeviceActionCapabilities, } from "../../../../../data/device_automation"; -import { LitElement, customElement, property, html } from "lit-element"; -import { fireEvent } from "../../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../../types"; -import memoizeOne from "memoize-one"; @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 115b11680b83..dc876a9fdd7a 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 112ab89b81cc..3399286deb10 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 a0ac5a6ebe40..4a7751e9c35f 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 5d54469acd52..d785160071e5 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 4082b68265b6..ef6d855c4dc7 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 e96beacab122..2a78ded2c29c 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 { Condition } from "../../../../data/automation"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; - +import { HomeAssistant } from "../../../../types"; import "./ha-automation-condition-editor"; -import { Condition } from "../../../../data/automation"; 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 db368c4864cb..c65502bfa4ee 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 "../../../../components/ha-card"; +import { Condition } from "../../../../data/automation"; import { HomeAssistant } from "../../../../types"; - import "./ha-automation-condition-row"; -import { Condition } from "../../../../data/automation"; +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 111bd727b5a7..92148e5ffb14 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 1d5bfd4ff122..8ce4b9027799 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 5cff91242d1c..d2c4b3e60796 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 { LogicalCondition } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; -import { ConditionElement } from "../ha-automation-condition-row"; import "../ha-automation-condition"; -import { LogicalCondition } from "../../../../../data/automation"; +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 2ddb37d04b43..c7755a2cf1ef 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 { customElement, html, LitElement, property } from "lit-element"; +import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/entity/ha-entity-picker"; -import { LitElement, html, customElement, property } from "lit-element"; +import "../../../../../components/ha-textarea"; +import { NumericStateCondition } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; -import { fireEvent } from "../../../../../common/dom/fire_event"; import { handleChangeEvent } from "../ha-automation-condition-row"; -import { NumericStateCondition } from "../../../../../data/automation"; @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 796b8a012ea6..38152f3bbcb2 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 11ff6cc08576..7627c8891670 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 8975e889fa1a..99386c1f2622 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 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 { SunCondition } from "../../../../../data/automation"; +import type { HomeAssistant } from "../../../../../types"; import { - handleChangeEvent, ConditionElement, + handleChangeEvent, } from "../ha-automation-condition-row"; -import { fireEvent } from "../../../../../common/dom/fire_event"; -import { SunCondition } from "../../../../../data/automation"; @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 b33cfa6d2fe2..4e79bc9004c1 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 b42af4f4af1b..708624abfdf7 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 edd2fac186a1..213fb1966e04 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 82acdecdda5b..fa7f671b903e 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 64dcd7b99b09..68da1c886e59 100644 --- a/src/panels/config/automation/ha-automation-picker.ts +++ b/src/panels/config/automation/ha-automation-picker.ts @@ -1,44 +1,46 @@ +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-tooltip/paper-tooltip"; import { - LitElement, - TemplateResult, - html, - CSSResultArray, css, - property, + CSSResultArray, customElement, + html, + LitElement, + property, + TemplateResult, } 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 { 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 { 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 { DataTableColumnContainer } from "../../../components/data-table/ha-data-table"; +import "../../../components/entity/ha-entity-toggle"; +import "../../../components/ha-fab"; import { + AutomationConfig, AutomationEntity, showAutomationEditor, - AutomationConfig, triggerAutomation, } from "../../../data/automation"; -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 "../../../layouts/hass-tabs-subpage-data-table"; +import { haStyle } from "../../../resources/styles"; +import { HomeAssistant, Route } from "../../../types"; import { configSections } from "../ha-panel-config"; -import { DataTableColumnContainer } from "../../../components/data-table/ha-data-table"; -import memoizeOne from "memoize-one"; -import { ifDefined } from "lit-html/directives/if-defined"; +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 d1ed22cc7d69..000000000000 --- 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 000000000000..a6b86837b667 --- /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 4d2ad0aee50d..096b1e0e5b5f 100644 --- a/src/panels/config/automation/thingtalk/dialog-thingtalk.ts +++ b/src/panels/config/automation/thingtalk/dialog-thingtalk.ts @@ -1,30 +1,27 @@ +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 { - LitElement, - html, css, CSSResult, - TemplateResult, - property, customElement, + html, + LitElement, + property, query, + TemplateResult, } from "lit-element"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-spinner/paper-spinner"; -import "@material/mwc-button"; - 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 da21508a6d3b..ea937d71a341 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 0cce5fa0beae..8de3792209b2 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 407b495743ba..39d8467a1e15 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 2dae62ad1b1b..bc41a6da57e6 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 dfc130bc42a0..c8ba2e984e48 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 { customElement, LitElement, property } from "lit-element"; +import { html } from "lit-html"; import "../../../../../components/ha-yaml-editor"; - -import { LitElement, property, customElement } from "lit-element"; +import { EventTrigger } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; import { - TriggerElement, handleChangeEvent, + TriggerElement, } from "../ha-automation-trigger-row"; -import { HomeAssistant } from "../../../../../types"; -import { html } from "lit-html"; -import { EventTrigger } from "../../../../../data/automation"; @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 1fadc057c9bb..ef5f47010117 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 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 "../../../../../components/entity/ha-entity-picker"; -import { LitElement, customElement, property, html } from "lit-element"; -import { HomeAssistant } from "../../../../../types"; +import type { GeoLocationTrigger } from "../../../../../data/automation"; +import type { HomeAssistant } from "../../../../../types"; import { handleChangeEvent } from "../ha-automation-trigger-row"; -import { fireEvent } from "../../../../../common/dom/fire_event"; -import { GeoLocationTrigger } from "../../../../../data/automation"; @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 2f7d6064ef57..e6e2136ccae5 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 51dde6bc27ad..2f55a97a9a95 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 aac65f76615c..8c3b151a2bb7 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 { customElement, html, LitElement, property } from "lit-element"; +import { fireEvent } from "../../../../../common/dom/fire_event"; import "../../../../../components/entity/ha-entity-picker"; -import { LitElement, html, customElement, property } from "lit-element"; +import "../../../../../components/ha-textarea"; +import { ForDict, NumericStateTrigger } from "../../../../../data/automation"; import { HomeAssistant } from "../../../../../types"; -import { fireEvent } from "../../../../../common/dom/fire_event"; 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 2f93511553ca..02a9f03c5471 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 5bd0ea9e3004..349f391842f8 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 f321750103aa..fb5622c4b511 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 1a4de2776c24..f308b591872e 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 c15352abbbd4..db0b0dc906fa 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 { customElement, html, LitElement, property } from "lit-element"; +import { TimePatternTrigger } from "../../../../../data/automation"; +import { HomeAssistant } from "../../../../../types"; import { - TriggerElement, handleChangeEvent, + TriggerElement, } from "../ha-automation-trigger-row"; -import { HomeAssistant } from "../../../../../types"; -import { TimePatternTrigger } from "../../../../../data/automation"; @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 0456665d4cb4..0ca2a1fe6552 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 935ed86dd821..2b658e8046fc 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 765d1a9f22e7..5f4712281931 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 45d2deee1223..bedd66fe3eb3 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 8cd4af956e90..f701a27e8cc4 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 { fireEvent } from "../../../../common/dom/fire_event"; 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 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 3ea34f0797fd..7455d1d9bcc4 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 "@material/mwc-button"; +import "@polymer/paper-item/paper-item-body"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, - CSSResult, - css, property, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "@polymer/paper-item/paper-item-body"; - +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 8aed1c75aefd..58a9053a9124 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 d1980bcea6db..1ef8340a2a61 100644 --- a/src/panels/config/cloud/alexa/cloud-alexa.ts +++ b/src/panels/config/cloud/alexa/cloud-alexa.ts @@ -1,42 +1,38 @@ +import "@polymer/paper-icon-button"; import { - LitElement, - TemplateResult, - html, - CSSResult, css, + CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-icon-button"; import memoizeOne from "memoize-one"; - -import "../../../../layouts/hass-subpage"; -import "../../../../layouts/hass-loading-screen"; +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, +} from "../../../../common/entity/entity_filter"; +import { compare } from "../../../../common/string/compare"; +import "../../../../components/entity/state-info"; import "../../../../components/ha-card"; import "../../../../components/ha-switch"; -import "../../../../components/entity/state-info"; - -import { HomeAssistant } from "../../../../types"; +import type { HaSwitch } from "../../../../components/ha-switch"; +import { AlexaEntity, fetchCloudAlexaEntities } from "../../../../data/alexa"; import { - CloudStatusLoggedIn, + AlexaEntityConfig, CloudPreferences, + CloudStatusLoggedIn, updateCloudAlexaEntityConfig, - AlexaEntityConfig, } from "../../../../data/cloud"; -import { - 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 { 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 "../../../../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 89df7f48125c..92ca9af54cd6 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 { formatDateTime } from "../../../../common/datetime/format_date_time"; 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 type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; import { haStyle } from "../../../../resources/styles"; -import { CloudCertificateParams as CloudCertificateDialogParams } from "./show-dialog-cloud-certificate"; -import { formatDateTime } from "../../../../common/datetime/format_date_time"; +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 b619490d2c98..2e5475206399 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 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"; -import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; 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 a5951e23b75e..bba3c83be6e8 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 b036f3bf65a3..656db3782c52 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 d964d152f01f..fa38b2b254c1 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 { 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, +} from "../../../../common/entity/entity_filter"; +import { compare } from "../../../../common/string/compare"; import "../../../../components/entity/state-info"; +import "../../../../components/ha-card"; import "../../../../components/ha-switch"; - -import { HomeAssistant } from "../../../../types"; +import type { HaSwitch } from "../../../../components/ha-switch"; import { - CloudStatusLoggedIn, CloudPreferences, - updateCloudGoogleEntityConfig, + CloudStatusLoggedIn, cloudSyncGoogleAssistant, GoogleEntityConfig, + updateCloudGoogleEntityConfig, } from "../../../../data/cloud"; import { - 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 { - 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 986f206c221e..93d4bef9fd69 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 d45f8daaf48a..5f271c7987ce 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 "../../../../components/ha-card"; +import "../../../../components/ha-icon-next"; 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-icon-next"; 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 e82ecc880698..90d43735f549 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 5e16bce60df3..57dc3327d939 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 "@material/mwc-button/mwc-button"; +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 { - LitElement, + css, + CSSResult, customElement, + html, + LitElement, 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 "@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 { 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 723d74f9f1b6..eade141912c5 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 LocalizeMixin from "../../../mixins/localize-mixin"; import "../../../resources/ha-style"; - -import "./ha-config-section-core"; - import { configSections } from "../ha-panel-config"; - -import LocalizeMixin from "../../../mixins/localize-mixin"; +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 63993c5f23dc..6543546c6734 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 "@material/mwc-button/mwc-button"; +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 { - LitElement, customElement, + html, + LitElement, 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 "@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 { 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 04be1e76841e..e33196a14716 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 { 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 "../../../resources/ha-style"; - import "../ha-config-section"; - -import { isComponentLoaded } from "../../../common/config/is_component_loaded"; -import LocalizeMixin from "../../../mixins/localize-mixin"; - -import "./ha-config-name-form"; 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 abd812191f0d..12ce05aba7da 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 { 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 "../../../components/ha-paper-icon-button-arrow-prev"; - 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 fdfc7f9dadfe..2ab31914f7af 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 c71779c88578..2c0def4524cd 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 4f486b357586..90844f93f483 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 c300a8ed9143..fe7147d0e969 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 b4483acfff45..bf6aa5c7db37 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 563d9e3f99e3..919719fbd5ec 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 e30b9b0e6a70..528ee13694f3 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 e1c94a0c2971..71b142a5a14a 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 a24e7cb76e1e..367155535324 100644 --- a/src/panels/config/dashboard/ha-config-dashboard.ts +++ b/src/panels/config/dashboard/ha-config-dashboard.ts @@ -1,36 +1,36 @@ +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 { - LitElement, - TemplateResult, - html, - CSSResultArray, css, + CSSResultArray, customElement, + html, + LitElement, property, + TemplateResult, } 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 { 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 2d0116daf129..56b899aeacbe 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 { isComponentLoaded } from "../../../common/config/is_component_loaded"; - -import "../../../components/ha-card"; -import "../../../components/ha-icon-next"; +import "@polymer/paper-item/paper-item-body"; import { - LitElement, + css, + CSSResult, + customElement, html, - TemplateResult, + LitElement, property, - customElement, - CSSResult, - css, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../../types"; +import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import "../../../components/ha-card"; +import "../../../components/ha-icon-next"; 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 45b933b34375..a5d5e4507fc4 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 c2ca072ab6c1..3549a9b9b81e 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, + css, + CSSResult, html, + LitElement, property, - CSSResult, - css, + 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 7514d29bb8b0..326cf503b873 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 a4233b7c8aed..cce083ac1561 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 a56119d48001..74fbd99b3386 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 dcf006bf0804..23bb2af6800d 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 { computeDomain } from "../../../../common/entity/compute_domain"; +import { domainIcon } from "../../../../common/entity/domain_icon"; 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 { 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 7ad3e79ea45d..67cbabc5ce48 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 7920681605c0..40d6e458f0f6 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 b6f02d381216..bb2daabd0cbe 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 28bc4922e0f1..885873e2538b 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, + customElement, html, - TemplateResult, + LitElement, property, - customElement, + TemplateResult, } from "lit-element"; -import { HomeAssistant, Route } from "../../../types"; +import memoizeOne from "memoize-one"; +import { HASSDomEvent } from "../../../common/dom/fire_event"; +import { navigate } from "../../../common/navigate"; +import { LocalizeFunc } from "../../../common/translations/localize"; +import { + DataTableColumnContainer, + DataTableRowData, + RowClickedEvent, +} from "../../../components/data-table/ha-data-table"; +import { AreaRegistryEntry } from "../../../data/area_registry"; +import { 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 "../../../layouts/hass-tabs-subpage-data-table"; +import { HomeAssistant, Route } from "../../../types"; import { configSections } from "../ha-panel-config"; -import memoizeOne from "memoize-one"; -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"; @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 191e52018104..f02b1f117882 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 9a0bbdfc5cb3..e0ab9b78b84c 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, + customElement, html, - TemplateResult, + LitElement, property, - customElement, + 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 8122cfd6661e..24a8928abe24 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 5332e305e4f6..24ef2e3046b5 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 b2ea726182ab..419321241fe5 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 "@polymer/paper-input/paper-input"; import { - html, css, + customElement, + html, LitElement, - TemplateResult, property, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - -import "@polymer/paper-input/paper-input"; +import { computeDomain } from "../../../common/entity/compute_domain"; import "../../../components/ha-switch"; +import type { HaSwitch } from "../../../components/ha-switch"; import { - ExtEntityRegistryEntry, 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 d26b1461fc7f..4fb51401537a 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 6069d3e40e3b..f9c793bb8b48 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 2e4e70db3cd4..5f76bdfdd215 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 c02614395840..da870762c07c 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 d39c741185c6..2b7b3529e616 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 "@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 { HomeAssistant, Route } from "../../types"; -import { CloudStatus, fetchCloudStatus } from "../../data/cloud"; 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 { PolymerElement } from "@polymer/polymer"; 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 944abf5bd122..d27329061311 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 { InputDateTime } from "../../../data/input_datetime"; import { InputNumber } from "../../../data/input_number"; - import { InputSelect } from "../../../data/input_select"; - -import { InputDateTime } from "../../../data/input_datetime"; +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 df24aeccb00e..4f1db280d8dd 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 { 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 { createInputText } from "../../../data/input_text"; -import { createInputNumber } from "../../../data/input_number"; import { createInputDateTime } from "../../../data/input_datetime"; +import { createInputNumber } from "../../../data/input_number"; import { createInputSelect } from "../../../data/input_select"; -import { isComponentLoaded } from "../../../common/config/is_component_loaded"; +import { createInputText } from "../../../data/input_text"; +import { haStyleDialog } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; 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 { haStyleDialog } from "../../../resources/styles"; +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 1d1bfe6b35ce..fc440755388f 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 { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; +import "../../../../components/ha-switch"; import { InputBoolean } from "../../../../data/input_boolean"; -import { fireEvent } from "../../../../common/dom/fire_event"; 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 2e716692266b..98532d7ba094 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 99a4dddf1495..c1a6340e7d7d 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 6b0a23b24b16..bfbe3a1c3ade 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 aa9cde3041cf..5967c8f481d1 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 { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-icon-input"; -import { HomeAssistant } from "../../../../types"; +import "../../../../components/ha-switch"; import { InputText } from "../../../../data/input_text"; -import { fireEvent } from "../../../../common/dom/fire_event"; 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 0841b0a9fcf0..fb5af2a7d27b 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 63cd18774d03..343c801bf117 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 bc2923aed4d7..d02eaa66a3d0 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 0b6387d3fab5..6873673dd26e 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 { + 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-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 { computeStateName } from "../../../common/entity/compute_state_name"; -import { - loadConfigFlowDialog, - showConfigFlowDialog, -} from "../../../dialogs/config-flow/show-dialog-config-flow"; +import "../../../components/ha-icon-next"; +import { ConfigEntry, deleteConfigEntry } from "../../../data/config_entries"; import { - localizeConfigFlowTitle, - ignoreConfigFlow, DISCOVERY_SOURCES, + ignoreConfigFlow, + localizeConfigFlowTitle, } 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 { EntityRegistryEntry } from "../../../data/entity_registry"; +import { + loadConfigFlowDialog, + showConfigFlowDialog, +} from "../../../dialogs/config-flow/show-dialog-config-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 511f4e639068..15cf0a58048a 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 { - EntityRegistryEntry, - subscribeEntityRegistry, -} from "../../../data/entity_registry"; + getConfigFlowInProgressCollection, + subscribeConfigFlowInProgress, +} from "../../../data/config_flow"; +import { DataEntryFlowProgress } from "../../../data/data_entry_flow"; 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"; + EntityRegistryEntry, + subscribeEntityRegistry, +} from "../../../data/entity_registry"; +import { + 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 f393113eca94..365d57d316ae 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 10a675ff49e4..4b9bafe7fc99 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 "../../../../layouts/hass-loading-screen"; -import "../../../../layouts/hass-tabs-subpage-data-table"; -import { HomeAssistant, Route } from "../../../../types"; +import "../../../../components/ha-icon"; import { - LovelaceDashboard, - fetchDashboards, createDashboard, - updateDashboard, deleteDashboard, + fetchDashboards, + LovelaceDashboard, LovelaceDashboardCreateParams, LovelacePanelConfig, + updateDashboard, } 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 "../../../../layouts/hass-loading-screen"; +import "../../../../layouts/hass-tabs-subpage-data-table"; +import { HomeAssistant, Route } from "../../../../types"; 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 b0dedf496603..49a316eadf26 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 d509d9161bf4..837f1686a260 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 7fce68b229b9..b369bfac8a48 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 a746d7209ca4..30f5556ffa42 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 "../../../../layouts/hass-loading-screen"; -import "../../../../layouts/hass-tabs-subpage-data-table"; -import { HomeAssistant, Route } from "../../../../types"; +import "../../../../components/ha-icon"; import { - LovelaceResource, - fetchResources, createResource, - updateResource, deleteResource, + fetchResources, + LovelaceResource, + updateResource, } from "../../../../data/lovelace"; -import { showResourceDetailDialog } from "./show-dialog-lovelace-resource-detail"; -import { compare } from "../../../../common/string/compare"; import { - showConfirmationDialog, showAlertDialog, + showConfirmationDialog, } from "../../../../dialogs/generic/show-dialog-box"; -import { lovelaceTabs } from "../ha-config-lovelace"; +import "../../../../layouts/hass-loading-screen"; +import "../../../../layouts/hass-tabs-subpage-data-table"; +import { HomeAssistant, Route } from "../../../../types"; 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 7bb5e4fd184a..570b4574a986 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 { createCloseHeading } from "../../../components/ha-dialog"; 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 { 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 2488a5a6d17d..e39f5da51e58 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 e65c80f59947..23dec6542e52 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 93a2c8640c00..85ac9d69dc57 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 6a316d55f6ef..000000000000 --- 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 000000000000..46ec4bf97069 --- /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 67367e1d64de..cf37ad70985f 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 7447e3fa0490..8b8af148d117 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 f466b8d47cdf..d9bae12aabe3 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 0f04236a56d3..bcdeeb5a5771 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 065eb9867eeb..065fe14ee965 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 c785614efbc9..19bff74ff5ea 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 05d627c80abf..b80bfa791d7d 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 7daf692795e9..c52e6da84a55 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 ed909c845853..44b1901149e7 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 a4455a8ca010..0af3b55dd6c9 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 9216b832e509..e5750edcd313 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, + customElement, html, - TemplateResult, + LitElement, property, - customElement, 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 86c6f2d8ef57..a10fabc1c20d 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 dc8f4b3c227f..fe71707a7594 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 d9f4f43e7f1e..f277ae2e54dc 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 5aeaf74c7d2f..e1e3c5c79238 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 ec00a3de1014..af597ec0606a 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" + "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 4b152925e352..92711fd4d4e3 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, + fetchGroups, fetchZHADevice, + ZHADevice, ZHAGroup, - fetchGroups, } 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 7824e178ca35..3808868633b6 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, + customElement, html, - TemplateResult, + LitElement, property, - customElement, 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 543735a7fb23..1f5448998147 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 cb2dce1c0b39..55a63971125b 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 { - ZHADevice, - ZHAGroup, + addMembersToGroup, fetchGroup, - removeGroups, fetchGroupableDevices, - addMembersToGroup, + removeGroups, removeMembersFromGroup, + ZHADevice, + ZHAGroup, } 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 cee06458caed..974fb1da9645 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 "@material/mwc-button"; +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-spinner/paper-spinner"; import { - LitElement, + css, + CSSResult, + customElement, html, - TemplateResult, + LitElement, property, - customElement, - CSSResult, - css, PropertyValues, + TemplateResult, } 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 { 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 { HASSDomEvent } from "../../../common/dom/fire_event"; +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 d1cc0a03d589..ead1a9f20ae9 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, + customElement, html, - TemplateResult, + LitElement, property, - customElement, 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 b0f14683697f..fa9e3382b814 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 b216e6cfe87e..71096cc4a4c1 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 { addDistanceToCoord } from "../../../common/location/add_distance_to_coord"; +import { createCloseHeading } from "../../../components/ha-dialog"; import "../../../components/ha-switch"; - -import { ZoneDetailDialogParams } from "./show-dialog-zone-detail"; -import { HomeAssistant } from "../../../types"; +import "../../../components/map/ha-location-editor"; import { - ZoneMutableParams, - passiveRadiusColor, defaultRadiusColor, getZoneEditorInitData, + passiveRadiusColor, + ZoneMutableParams, } from "../../../data/zone"; -import { addDistanceToCoord } from "../../../common/location/add_distance_to_coord"; -import { createCloseHeading } from "../../../components/ha-dialog"; 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 cb0a6639ebdb..16f0522d3772 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-card"; import "../../../components/ha-menu-button"; -import "../../../components/ha-service-description"; 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 "../../../components/ha-card"; - 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 5b67a07f3c49..165cfbbcfd22 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 c85617702ee1..8f2c271c62df 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 af91e490fcb4..b933bdd7eefc 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 05dc9e73ab95..187e22d742fb 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 9b38099a2cf6..b50ef6f2c73e 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 { + fetchNodeConfig, ZWaveConfigItem, - ZWaveNode, ZWaveConfigServiceData, - fetchNodeConfig, + 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 4bc5eb452d9f..c980187c5c41 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 accda0f21554..2ab33eba5d84 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 a06d933dedb8..20b5eeec3557 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 fc4d302073d9..6de6709a6064 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 { 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"; -import { HomeAssistant, Route } from "../../types"; -import { CustomPanelInfo } from "../../data/panel_custom"; -import { navigate } from "../../common/navigate"; 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 7af7705ac1a8..ecb4caf2ad16 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 e2ea852a8e54..b861cb77e9a7 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 4816672d5953..7e64b3ba3472 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 "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; +import { HassEvent } from "home-assistant-js-websocket"; import { - LitElement, + css, + CSSResult, customElement, - TemplateResult, html, + LitElement, property, - CSSResult, - css, + TemplateResult, } 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 { 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 b3f5e4e0c3cf..86cb30bee49a 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 41f4c6c1da84..c0f9adbc1861 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 2576fda2296b..4bebb76103a5 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 b1663a57c648..14b9a5914e6a 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 fdb8fbb27296..5a027e3e0fb4 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 b1e48d19a5a5..c9b54b69434a 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 { PolymerChangedEvent } from "../../../polymer-types"; -import { haStyleDialog } from "../../../resources/styles"; -import { HomeAssistant } from "../../../types"; import { + domainToName, integrationDocsUrl, integrationIssuesUrl, - domainToName, } from "../../../data/integration"; -import { formatSystemLogTime } from "./util"; import { getLoggedErrorIntegration } from "../../../data/system_log"; +import { PolymerChangedEvent } from "../../../polymer-types"; +import { haStyleDialog } from "../../../resources/styles"; +import { HomeAssistant } from "../../../types"; +import { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail"; +import { formatSystemLogTime } from "./util"; 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 fcb7bf476aa8..9975997c1325 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 "@material/mwc-button"; +import "@polymer/paper-icon-button/paper-icon-button"; import { - LitElement, - html, - CSSResult, css, - TemplateResult, + CSSResult, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-icon-button/paper-icon-button"; -import "@material/mwc-button"; - -import { HomeAssistant } from "../../../types"; 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 72d59cdbd192..cf0b9f0c2112 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 "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; +import "@polymer/paper-spinner/paper-spinner"; import { - LitElement, - html, - CSSResult, css, - TemplateResult, + CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } 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-spinner/paper-spinner"; -import "../../../components/ha-card"; 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 53912f5f91e1..ae795d9ffbb1 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 e527f4d0dc69..5ed1c38b8810 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 "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; import { - LitElement, + css, + CSSResultArray, customElement, - TemplateResult, html, + LitElement, property, - CSSResultArray, - css, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; - -import { HomeAssistant } from "../../../types"; - -import { haStyle } from "../../../resources/styles"; 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 67d128ff7a19..0c65086c02c9 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 "@material/mwc-button"; +import "@polymer/paper-input/paper-input"; import { - LitElement, + css, + CSSResult, customElement, - TemplateResult, html, + LitElement, property, - CSSResult, - css, + TemplateResult, } from "lit-element"; -import "@material/mwc-button"; -import "@polymer/paper-input/paper-input"; -import { HomeAssistant } from "../../../types"; -import "../../../components/ha-card"; 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 f4a057f9109f..c34299a020ff 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 f1f56b963ad8..6472cbe813c3 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 f4804d665de5..2475a7b25612 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 432f24d247a8..35380598373f 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 787ef88cbd58..ea7826dfc3e7 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 12a1969f4f45..461fea1f60b9 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 ef6a841ca6fe..ded1e6a28853 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 { formatDate } from "../../common/datetime/format_date"; -import { domainIcon } from "../../common/entity/domain_icon"; -import { stateIcon } from "../../common/entity/state_icon"; -import { computeRTL } from "../../common/util/compute_rtl"; import { - LitElement, + css, + CSSResult, html, + LitElement, property, - TemplateResult, - CSSResult, - css, PropertyValues, + TemplateResult, } from "lit-element"; -import { HomeAssistant } from "../../types"; -import { fireEvent } from "../../common/dom/fire_event"; 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 "../../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"); el.setConfig(config); diff --git a/src/panels/lovelace/badges/hui-state-label-badge.ts b/src/panels/lovelace/badges/hui-state-label-badge.ts index 1535a6896321..501e9cd18515 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 { ActionHandlerEvent } from "../../../data/lovelace"; 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 { 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 7b28dae4fb6b..4868a4bda0e3 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 a58a20ccdf38..230b86700ca1 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 1cca6391fcd8..4c445e1d7b48 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 2119c1f8f4b6..8118ffc1dd99 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 { - html, - LitElement, - TemplateResult, - CSSResult, css, + CSSResult, customElement, + html, + LitElement, 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 3797bd24e9dd..dd01b242a95b 100644 --- a/src/panels/lovelace/cards/hui-entities-card.ts +++ b/src/panels/lovelace/cards/hui-entities-card.ts @@ -1,33 +1,31 @@ import { + css, + CSSResult, + customElement, html, LitElement, + property, PropertyValues, TemplateResult, - customElement, - property, - css, - CSSResult, } 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 e062d189a265..7955ccf040b0 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 6d0f2aa4f890..e161b87bdf9c 100644 --- a/src/panels/lovelace/cards/hui-entity-card.ts +++ b/src/panels/lovelace/cards/hui-entity-card.ts @@ -1,37 +1,34 @@ import { + css, + CSSResult, + customElement, html, LitElement, + property, PropertyValues, TemplateResult, - customElement, - property, - css, - CSSResult, } 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 53fbe8bd4949..16e141e05877 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 088703a930eb..e66da1aa88bf 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 74a4ba110019..c2e24d6d0077 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 { + css, + CSSResult, + customElement, html, LitElement, + property, PropertyValues, TemplateResult, - css, - CSSResult, - property, - customElement, } 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 { 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 { fireEvent } from "../../../common/dom/fire_event"; +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 c8921482596b..8d4041e5d036 100644 --- a/src/panels/lovelace/cards/hui-glance-card.ts +++ b/src/panels/lovelace/cards/hui-glance-card.ts @@ -1,37 +1,34 @@ import { + css, + CSSResult, + customElement, html, LitElement, + property, PropertyValues, TemplateResult, - customElement, - property, - css, - CSSResult, } 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 { UNAVAILABLE_STATES } from "../../../data/entity"; +import { ActionHandlerEvent } from "../../../data/lovelace"; 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 { ActionHandlerEvent } from "../../../data/lovelace"; -import { handleAction } from "../common/handle-action"; -import { computeDomain } from "../../../common/entity/compute_domain"; -import { UNAVAILABLE, UNKNOWN } from "../../../data/entity"; 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 445177e44b77..cf9e230067e2 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, + CSSResult, + customElement, html, + LitElement, property, PropertyValues, - CSSResult, - customElement, + 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 { fetchRecent } from "../../../data/history"; import { HomeAssistant } from "../../../types"; -import { LovelaceCard } from "../types"; -import { EntityConfig } from "../entity-rows/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"; -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"; @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 ec317d0ce45b..a9d5a970c055 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, 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 9e60be8de2d3..50811470fc40 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 { + css, + CSSResult, + customElement, html, LitElement, - PropertyValues, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 { 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_TURN_ON, SUPPORT_PREVIOUS_TRACK, - SUPPORT_NEXT_TRACK, - SUPPORTS_PLAY, - SUPPORT_STOP, SUPPORT_SEEK, - CONTRAST_RATIO, - getCurrentProgress, - computeMediaDescription, + SUPPORT_STOP, SUPPORT_TURN_OFF, + SUPPORT_TURN_ON, } from "../../../data/media-player"; - -import "../../../components/ha-card"; -import "../../../components/ha-icon"; +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 8807c146c44d..f07f18fa5bb4 100644 --- a/src/panels/lovelace/cards/hui-picture-card.ts +++ b/src/panels/lovelace/cards/hui-picture-card.ts @@ -1,26 +1,24 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, 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 "../../../components/ha-card"; - -import { LovelaceCard, LovelaceCardEditor } from "../types"; +import { ActionHandlerEvent } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; -import { classMap } from "lit-html/directives/class-map"; -import { PictureCardConfig } 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 { 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 64491e73d639..a21722bf178a 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - customElement, - css, - CSSResult, 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 f295f28d9607..16d24baf33b6 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, PropertyValues, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; import { ifDefined } from "lit-html/directives/if-defined"; - -import "../../../components/ha-card"; -import "../components/hui-image"; -import "../components/hui-warning"; - +import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; import { computeDomain } from "../../../common/entity/compute_domain"; -import { computeStateName } from "../../../common/entity/compute_state_name"; - 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 { 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"; +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 { LovelaceCard, LovelaceCardEditor } from "../types"; +import { PictureEntityCardConfig } from "./types"; @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 3bfa381dd853..5f2eac9b6fe2 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, 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 d1bcb57da846..1efc825119a5 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 7b7fa5b34065..02e6e5c23605 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 b3718308c480..f708e6bdace7 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 5e57fa5abf27..6abafeed3a2d 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 { HomeAssistant } from "../../../types"; -import { LovelaceCard, LovelaceCardEditor } from "../types"; import { + addItem, + clearItems, fetchItems, - updateItem, ShoppingListItem, - clearItems, - addItem, + updateItem, } from "../../../data/shopping-list"; -import { ShoppingListCardConfig, SensorCardConfig } from "./types"; -import { applyThemesOnElement } from "../../../common/dom/apply_themes_on_element"; +import { HomeAssistant } from "../../../types"; +import { LovelaceCard, LovelaceCardEditor } from "../types"; +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 1c6b1c4c12d9..85f155c26f95 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 5161d76faef8..a625062ea4fa 100644 --- a/src/panels/lovelace/cards/hui-thermostat-card.ts +++ b/src/panels/lovelace/cards/hui-thermostat-card.ts @@ -1,41 +1,37 @@ +import "@polymer/paper-icon-button/paper-icon-button"; +import "@thomasloven/round-slider"; +import { HassEntity } from "home-assistant-js-websocket"; import { + css, + CSSResult, + customElement, html, LitElement, - PropertyValues, - TemplateResult, - customElement, property, - css, - CSSResult, + PropertyValues, svg, + TemplateResult, } 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 { 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 97afade546c2..181412bc98ec 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 77f910c0828b..8fb6bfeb7e0a 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 8ebf11195fa4..d2fdb0bd3a76 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 b5d7ed99554e..d6dc844a0740 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 2dbcc6905eba..a6759235412e 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 9ff99f7987cc..083b69568aba 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 type { Ripple } from "@material/mwc-ripple"; +import { directive, PropertyPart } from "lit-html"; +import { fireEvent } from "../../../../common/dom/fire_event"; import { - ActionHandlerOptions, ActionHandlerDetail, + ActionHandlerOptions, } from "../../../../data/lovelace"; -import { fireEvent } from "../../../../common/dom/fire_event"; 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 8470cfb6ddb0..c2c406da3106 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 1ad24203b2ca..fadbf9da389a 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 c6eca98d399f..533274a8fba2 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 fb33e183fdc2..a5aafbadeb03 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 { computeDomain } from "../../../common/entity/compute_domain"; +import { computeObjectId } from "../../../common/entity/compute_object_id"; +import { computeStateDomain } from "../../../common/entity/compute_state_domain"; +import { computeStateName } from "../../../common/entity/compute_state_name"; 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 { 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 { compare } from "../../../common/string/compare"; import { LocalizeFunc } from "../../../common/translations/localize"; +import { subscribeOne } from "../../../common/util/subscribe-one"; import { - EntitiesCardConfig, - AlarmPanelCardConfig, - PictureEntityCardConfig, - ThermostatCardConfig, - LightCardConfig, -} from "../cards/types"; -import { - subscribeAreaRegistry, AreaRegistryEntry, + subscribeAreaRegistry, } from "../../../data/area_registry"; -import { subscribeOne } from "../../../common/util/subscribe-one"; import { - subscribeDeviceRegistry, 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 807a2d61d04c..4005db859fbf 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 73157df09428..9e0d2ba864f8 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 dd577c1d63ea..2147176c9a75 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 121e0e39e323..b46962bb5fec 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 1b58eeb5094c..c996f25562f2 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 d20b03f907d8..e0b9045432a2 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 1fdd4561314b..589936021799 100644 --- a/src/panels/lovelace/components/hui-action-editor.ts +++ b/src/panels/lovelace/components/hui-action-editor.ts @@ -1,26 +1,24 @@ +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 { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-textarea"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; - -import "../../../components/ha-service-picker"; - -import { HomeAssistant } from "../../../types"; 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 353302868217..cc9f2fb4e34c 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 { 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 { HomeAssistant } from "../../../types"; +import type { ActionHandlerEvent } from "../../../data/lovelace"; +import type { HomeAssistant } from "../../../types"; +import type { EntitiesCardEntityConfig } from "../cards/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 { 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 c7c3f0fd6406..5f006a5ce7ed 100644 --- a/src/panels/lovelace/components/hui-card-options.ts +++ b/src/panels/lovelace/components/hui-card-options.ts @@ -1,24 +1,23 @@ +import "@material/mwc-button"; +import "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-listbox/paper-listbox"; +import "@polymer/paper-menu-button/paper-menu-button"; import { + css, + CSSResult, + customElement, 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 { LovelaceCardConfig } from "../../../data/lovelace"; +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 { HomeAssistant } from "../../../types"; -import { LovelaceCardConfig } from "../../../data/lovelace"; import { Lovelace } from "../types"; -import { swapCard } from "../editor/config-util"; -import { showMoveCardViewDialog } from "../editor/card-editor/show-move-card-view-dialog"; @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 8889459310a0..abc946bbce3c 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 { 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-relative-time"; import "../../../components/ha-icon"; -import "../components/hui-warning"; - +import "../../../components/ha-relative-time"; +import { ActionHandlerEvent } from "../../../data/lovelace"; 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 { 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 05d3d6a2221e..5c88b8f58233 100644 --- a/src/panels/lovelace/components/hui-graph-base.ts +++ b/src/panels/lovelace/components/hui-graph-base.ts @@ -1,21 +1,21 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, - svg, 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 ff48cc9910a4..c443bff0790a 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, + css, + CSSResult, + customElement, html, + LitElement, property, - CSSResult, - css, 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 f102d9d965d9..0b5ea2e89353 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 967ae8827751..907b5fc6029c 100644 --- a/src/panels/lovelace/components/hui-marquee.ts +++ b/src/panels/lovelace/components/hui-marquee.ts @@ -1,29 +1,33 @@ import { + css, + CSSResult, + customElement, html, LitElement, + property, PropertyValues, TemplateResult, - customElement, - css, - CSSResult, - property, } 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 9d206be7f55a..a684a3ba3abe 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 809e559b3961..ac753e440501 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 f6ff8bbc17d8..000000000000 --- 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 89c270f9499d..db4e74e1de14 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 1e9b5577728f..e41c4fb50302 100644 --- a/src/panels/lovelace/components/hui-warning-element.ts +++ b/src/panels/lovelace/components/hui-warning-element.ts @@ -1,13 +1,12 @@ import { - html, - LitElement, - TemplateResult, - CSSResult, css, + CSSResult, customElement, + html, + LitElement, 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 174b897acffa..fc903156d55f 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 120a51b98e99..5df44df0ad31 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 3a2ed953d0a2..6b586fa67867 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 c2c01cb27963..88b46a6ec01a 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 { fireEvent } from "../../../common/dom/fire_event"; import { - LovelaceCardConfig, LovelaceBadgeConfig, + LovelaceCardConfig, } from "../../../data/lovelace"; +import { CUSTOM_TYPE_PREFIX } from "../../../data/lovelace_custom_cards"; import { - HuiErrorCard, - createErrorCardElement, 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 { - LovelaceCard, LovelaceBadge, - LovelaceHeaderFooter, + LovelaceCard, LovelaceCardConstructor, + LovelaceHeaderFooter, } from "../types"; -import { fireEvent } from "../../../common/dom/fire_event"; -import { LovelaceElementConfig, LovelaceElement } 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"; 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 - ); - - customElements - .whenDefined(customTag) - .then(() => resolve(customElements.get(customTag))); - }); + 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))); + }) + ); } 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 d61546046a09..aacf1614cde9 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 8fd0e6019e3b..e29f8ea9b8a1 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 { 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 { EntityConfig } from "../entity-rows/types"; 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 0de17cc06439..2896d349b204 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 b5f624029627..686b544bf5f6 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 69b7a248918b..490222ae8037 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 { fireEvent } from "../../../../common/dom/fire_event"; 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 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 2e22f0232e48..0c8550f39aec 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 8850d46c15e7..fb622e95fc0a 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 d555eba72974..3d1b64d98817 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 { fireEvent } from "../../../../common/dom/fire_event"; 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 type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialog"; +import type { LovelaceCardConfig } from "../../../../data/lovelace"; import { haStyleDialog } from "../../../../resources/styles"; -import { DeleteCardDialogParams } from "./show-delete-card-dialog"; -import { fireEvent } from "../../../../common/dom/fire_event"; +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 59dee5b1f6f6..3599c85a9312 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 5cc1497877d6..ad969baf53e9 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 283cb9f4d3cc..dd3e333d65e9 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 { HomeAssistant } from "../../../../types"; +import { showSaveSuccessToast } from "../../../../util/toast-saved-success"; 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"; -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"; @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 fd794affb21a..18b0d820e3ff 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 1dce62e34cb7..a5ec08a9dba4 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 a2ab98022b74..4d4dde318613 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 "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - CSSResult, - css, + TemplateResult, } 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 { 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 d0f1299c17a3..ac90dca17e45 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 { fireEvent } from "../../../../common/dom/fire_event"; +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 { - EntitiesEditorEvent, - EditorTarget, actionConfigStruct, + EditorTarget, + 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 { ActionConfig } from "../../../../data/lovelace"; -import { ButtonCardConfig } from "../../cards/types"; -import { stateIcon } from "../../../../common/entity/state_icon"; 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 1675f6e88391..086c58d4fc33 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 9e32bf222ace..6427ce9d1b89 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 "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; - +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 0acfa9caa46c..6206f7260a39 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 { fireEvent } from "../../../../common/dom/fire_event"; +import { stateIcon } from "../../../../common/entity/state_icon"; 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 { 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 { stateIcon } from "../../../../common/entity/state_icon"; +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 23e3e4eef385..4f85e75ddb48 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - -import "../../components/hui-theme-select-editor"; -import "../../components/hui-entity-editor"; +import { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/ha-switch"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; 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 { fireEvent } from "../../../../common/dom/fire_event"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -import { GaugeCardConfig, SeverityConfig } from "../../cards/types"; 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 a019bc6a89c8..51d0bf0e9325 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 "@polymer/paper-dropdown-menu/paper-dropdown-menu"; +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; - +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 9d8f777fa4d2..916e8db9ce7f 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 { 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"; -import { HistoryGraphCardConfig } from "../../cards/types"; 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 39ba0c4194f2..cba612b98290 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 { fireEvent } from "../../../../common/dom/fire_event"; import { HomeAssistant } from "../../../../types"; +import { IframeCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -import { IframeCardConfig } from "../../cards/types"; 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 1a76e716b257..c05d30178ca1 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 { fireEvent } from "../../../../common/dom/fire_event"; +import { stateIcon } from "../../../../common/entity/state_icon"; import "../../../../components/ha-icon-input"; -import "../../components/hui-entity-editor"; - +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 { - EntitiesEditorEvent, - EditorTarget, actionConfigStruct, + EditorTarget, + 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 { LightCardConfig } from "../../cards/types"; -import { stateIcon } from "../../../../common/entity/state_icon"; -import { ActionConfig } from "../../../../data/lovelace"; 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 3eb81676b189..62fc12f5f3b0 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 "@polymer/paper-input/paper-input"; import { - html, css, - LitElement, - TemplateResult, + CSSResult, customElement, + html, + LitElement, property, - CSSResult, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; - +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 372d64d2ac3a..b98e9076c542 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 "@polymer/paper-input/paper-input"; +import "@polymer/paper-input/paper-textarea"; import { + customElement, html, LitElement, - TemplateResult, - customElement, property, + TemplateResult, } 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 { 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 b740bae1be9c..5f78265b1720 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 eaab41e64dc4..8828484b30e1 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 { LovelaceCardEditor } from "../../types"; import { - EntitiesEditorEvent, - EditorTarget, actionConfigStruct, + EditorTarget, + 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 { 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 52ae73dc2547..3d7b46d75198 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 "@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, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; - +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 { LovelaceCardEditor } from "../../types"; import { - EntitiesEditorEvent, - EditorTarget, actionConfigStruct, + EditorTarget, + 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 { 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 677e110767f9..c45f910ce128 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 "@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, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; - +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 { EntityConfig } from "../../entity-rows/types"; +import { LovelaceCardEditor } from "../../types"; +import { processEditorEntities } from "../process-editor-entities"; import { - EntitiesEditorEvent, - EditorTarget, actionConfigStruct, + 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 { ActionConfig } from "../../../../data/lovelace"; -import { PictureGlanceCardConfig } from "../../cards/types"; -import { EntityConfig } from "../../entity-rows/types"; -import { processEditorEntities } from "../process-editor-entities"; 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 7ac5ba8b34c3..7dfed2b84b37 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 { PlantStatusCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -import { PlantStatusCardConfig } from "../../cards/types"; 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 631b0791013a..8b7077e2ec78 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 "@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, - TemplateResult, - customElement, property, + TemplateResult, } from "lit-element"; -import "@polymer/paper-input/paper-input"; -import "@polymer/paper-dropdown-menu/paper-dropdown-menu"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; - -import "../../components/hui-theme-select-editor"; +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 { SensorCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -import { SensorCardConfig } from "../../cards/types"; -import { stateIcon } from "../../../../common/entity/state_icon"; 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 a6c2a01f1d2e..98fea1a69b0f 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 "@polymer/paper-input/paper-input"; import { - html, - CSSResult, css, - LitElement, - TemplateResult, + CSSResult, customElement, + html, + LitElement, 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 { isComponentLoaded } from "../../../../common/config/is_component_loaded"; import { fireEvent } from "../../../../common/dom/fire_event"; +import { HomeAssistant } from "../../../../types"; import { ShoppingListCardConfig } from "../../cards/types"; - -import { isComponentLoaded } from "../../../../common/config/is_component_loaded"; +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 44ff449cfda2..ffc36e9247f4 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 f767d5429ba0..ba4116614f11 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 { fireEvent } from "../../../../common/dom/fire_event"; import "../../../../components/entity/ha-entity-picker"; - -import { struct } from "../../common/structs/struct"; -import { EntitiesEditorEvent, EditorTarget } from "../types"; 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 { fireEvent } from "../../../../common/dom/fire_event"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -import { ThermostatCardConfig } from "../../cards/types"; 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 0c89045edd25..2bf907a919b9 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 { fireEvent } from "../../../../common/dom/fire_event"; 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 { WeatherForecastCardConfig } from "../../cards/types"; +import { struct } from "../../common/structs/struct"; +import "../../components/hui-theme-select-editor"; import { LovelaceCardEditor } from "../../types"; -import { fireEvent } from "../../../../common/dom/fire_event"; +import { EditorTarget, EntitiesEditorEvent } from "../types"; import { configElementStyle } from "./config-elements-style"; -import { WeatherForecastCardConfig } from "../../cards/types"; 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 34679b0ab702..2bae8eaf491b 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 10ea035d1502..ebbd6a71bf1d 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 fce349e1f4d0..a6352787e4d8 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 b8d0dc728d89..055ba85cd4c8 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 b092a0ee441a..30f60d2a0417 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 8fe4a68a42e7..c0d4b0dedc2c 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 "@material/mwc-button"; +import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; +import "@polymer/paper-spinner/paper-spinner"; import { - html, css, - LitElement, - TemplateResult, CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } 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 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 fb0e945d4154..1163f7168095 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 ed7cefdc420c..9aae8ec878a4 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 7dda04572630..b9a79c53f12d 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 5e3211039f3f..2c17ab3ea000 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - PropertyValues, property, - customElement, - css, - CSSResult, + 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 { 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"; -// tslint:disable-next-line -import { - SelectionChangedEvent, +import type { DataTableColumnContainer, + SelectionChangedEvent, } 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 "../../../../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 { HomeAssistant } from "../../../../types"; -import { Lovelace } from "../../types"; -import { LovelaceConfig } from "../../../../data/lovelace"; -import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; +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 44ae74d34b46..b8616528aff5 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 041bbf3f9d15..3dbf9d817695 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 "@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 { - html, css, - LitElement, - TemplateResult, CSSResult, customElement, + html, + LitElement, property, + TemplateResult, } from "lit-element"; - -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 { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; +import { navigate } from "../../../../common/navigate"; 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 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 "./hui-view-editor"; -import "./hui-view-visibility-editor"; +import type { Lovelace } from "../../types"; +import { addView, deleteView, replaceView } from "../config-util"; import "../hui-badge-preview"; -import { HomeAssistant } from "../../../../types"; -import { - LovelaceViewConfig, - LovelaceCardConfig, - LovelaceBadgeConfig, -} from "../../../../data/lovelace"; -import { fireEvent, HASSDomEvent } from "../../../../common/dom/fire_event"; +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 baeb0aa3931b..77e66babe7d6 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 b13c01cab974..361a28ba7338 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 "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, PropertyValues, - CSSResult, - css, + TemplateResult, } 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 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 f2700da45ec9..c752aa3eb2c1 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 648c15af4034..661098f4d4d9 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 17310b4c2e24..5acfffce7309 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 { ActionHandlerEvent } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; +import { computeTooltip } from "../common/compute-tooltip"; 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 { 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 07279d200c11..91920077040b 100644 --- a/src/panels/lovelace/elements/hui-image-element.ts +++ b/src/panels/lovelace/elements/hui-image-element.ts @@ -1,27 +1,26 @@ import { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, property, - customElement, - css, - CSSResult, + 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 { ActionHandlerEvent } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; +import { computeTooltip } from "../common/compute-tooltip"; 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 "../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 5558a7b0c6af..b6acdcb4075a 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 2f9d24a21910..a07334619cb3 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 "../../../components/entity/ha-state-label-badge"; +import { ActionHandlerEvent } from "../../../data/lovelace"; 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 { 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 e2d2e3084fbd..73497579e853 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, 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 { ActionHandlerEvent } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { computeTooltip } from "../common/compute-tooltip"; 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 { 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 93aa196d3371..a43cc7f9ff85 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, 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 { ActionHandlerEvent } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; -import { hasConfigOrEntityChanged } from "../common/has-changed"; +import { computeTooltip } from "../common/compute-tooltip"; 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 { 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 f12137d58f84..46374b34c2af 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 9d8b04c1b3dd..4c36a5723f10 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 "../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 "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +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 dbd67cb5b2a3..ee48aa9f1045 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 f60e6a966daa..d34420252b5f 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 7afbc34dd641..c19ca31356ed 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 e8fa7eb863cd..d2fcf6a71ed2 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 "../components/hui-generic-entity-row"; -import "../components/hui-warning"; - -import { HomeAssistant } from "../../../types"; -import { LovelaceRow, EntityConfig } from "./types"; +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 { 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 e0b3180095e6..6dd073cf0742 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 7e096fbc881b..15b0f7779843 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 { UNAVAILABLE_STATES } from "../../../data/entity"; +import { activateScene } from "../../../data/scene"; import { HomeAssistant } from "../../../types"; -import { LovelaceRow, ActionRowConfig } from "./types"; import { hasConfigOrEntityChanged } from "../common/has-changed"; -import { activateScene } from "../../../data/scene"; +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 bc0dd5b46839..35413531b0c5 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 f3f4e6da7ec6..a8429098232c 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 45ccce5afbd5..4851f831f2e3 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 4e5bcb71bba0..c2b167119b2e 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 "../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 { timerTimeRemaining } from "../../../common/entity/timer_time_remaining"; import { HomeAssistant } from "../../../types"; -import { EntityConfig } from "./types"; -import { HassEntity } from "home-assistant-js-websocket"; import { hasConfigOrEntityChanged } from "../common/has-changed"; +import "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +import { EntityConfig } from "./types"; @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 b166ba9d2bd6..94efa0b92a37 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 29b133c33600..1407cc45634d 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 1b30c6938d64..b0e1d7a4fc49 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 0f53f9a1b4fe..7ff040b0710b 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 880cb7137223..572065d2a6ac 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 { HomeAssistant } from "../../../types"; +import { getHistoryCoordinates } from "../common/graph/get-history-coordinates"; 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"; 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 4317df35577d..9807c4a0e6e4 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + TemplateResult, } from "lit-element"; - +import { classMap } from "lit-html/directives/class-map"; +import { ifDefined } from "lit-html/directives/if-defined"; import "../../../components/ha-card"; - -import { LovelaceHeaderFooter } from "../types"; +import { ActionHandlerEvent } from "../../../data/lovelace"; 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 { 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 758ea6911d18..8fae98ac7d87 100644 --- a/src/panels/lovelace/hui-editor.ts +++ b/src/panels/lovelace/hui-editor.ts @@ -1,38 +1,33 @@ +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 "@polymer/paper-icon-button/paper-icon-button"; +import "@polymer/paper-spinner/paper-spinner"; +import { safeDump, safeLoad } from "js-yaml"; import { + css, + CSSResult, customElement, - LitElement, html, - TemplateResult, - CSSResult, - css, + LitElement, property, + TemplateResult, } from "lit-element"; import { classMap } from "lit-html/directives/class-map"; -import { safeDump, safeLoad } from "js-yaml"; - -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 { 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 484dec9afe9e..2501ccdf5f69 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 "../../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 { 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 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 289c1f5a6407..9a5db8a85fa8 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 "../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 "../components/hui-generic-entity-row"; +import "../components/hui-warning"; +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 58fa793b62ba..a0cb5d7af829 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 e685bb0bda2b..9f7acf77bd83 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 7f9fab605182..80a682e70b39 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 7abe7d6c23df..4b70d198fc74 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 e735f13870fd..06364cbef016 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 1738bce7c94c..7ee5e22be011 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 f0854cf1cae5..d671784d2dd2 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 36e09833ebf1..e510734689de 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 { + css, + CSSResult, + customElement, html, LitElement, - TemplateResult, - customElement, property, - css, - CSSResult, + 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 3a6d042fcf04..0799e1c7eafe 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 2eeb64a27ccc..ede0363fb4a0 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 { LovelaceViewConfig } from "../../../data/lovelace"; import { HomeAssistant } from "../../../types"; -import { LovelaceCard, Lovelace } from "../types"; import { createCardElement } from "../create-element/create-card-element"; -import { LovelaceViewConfig } from "../../../data/lovelace"; +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 4ef6e2942038..d32e0774b441 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 9ecbeb316352..36601ac268ba 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 c381c00e2d76..edca1ab4393b 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 f1f3158d536b..4d15814302c2 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 d910b7b3a4d9..21c399bf6299 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 1c083e4199b9..2cdb157fb6c5 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 4393dcc38ec8..c0d7942c7015 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 818b25670753..93fd8aa26e46 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 e2ce307e8a5e..27da08586d85 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, + customElement, html, + LitElement, property, - customElement, + 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 ca17ea7f67b1..5e85907e2d3b 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 { 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"; -import { showAlertDialog } from "../../dialogs/generic/show-dialog-box"; /* * @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 2c6d2e0f54d4..cfa1d6b578c8 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 79f50daa14de..c3ac5b989e65 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 f30509d8a2a9..429f2557f288 100644 --- a/src/panels/profile/ha-panel-profile.ts +++ b/src/panels/profile/ha-panel-profile.ts @@ -1,49 +1,51 @@ +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 "@polymer/paper-item/paper-item"; +import "@polymer/paper-item/paper-item-body"; +import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { - LitElement, - TemplateResult, - html, - CSSResultArray, css, + CSSResultArray, + html, + LitElement, property, + TemplateResult, } from "lit-element"; -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 { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-card"; import "../../components/ha-menu-button"; -import "../../resources/ha-style"; - +import { isExternal } from "../../data/external"; import { - getOptimisticFrontendUserDataCollection, CoreFrontendUserData, + getOptimisticFrontendUserDataCollection, } from "../../data/frontend"; -import { isExternal } from "../../data/external"; +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 138f87177f3d..53331c579263 100644 --- a/src/panels/profile/ha-pick-dashboard-row.ts +++ b/src/panels/profile/ha-pick-dashboard-row.ts @@ -1,25 +1,25 @@ +import "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { - LitElement, - TemplateResult, + customElement, html, + LitElement, property, - customElement, PropertyValues, + TemplateResult, } from "lit-element"; - -import "./ha-settings-row"; -import "@polymer/paper-item/paper-item"; -import "@polymer/paper-listbox/paper-listbox"; 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 7b5c975be1f1..8ec1ccd6adae 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 8c9982395182..9d4f62dec1f6 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 90f514662b50..ee2019a5b476 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 d3a4176e35f4..f3768587ae13 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 c9366daee02f..2075b1a4f1cf 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, + customElement, html, + LitElement, property, - customElement, + 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 cfdb7b151298..15ddb6c9176c 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 1ac2c6eec015..6be4c26bff6f 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 a741a8b15758..4fc27645820e 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 1ccba106e2ca..2e33e5355288 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 576e8cd6e831..500c803788a4 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 778277bf4102..8d79a090ad68 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 5daf931bf859..32083338c33e 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 bb357ae2f6e6..51844ed2728f 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 70cf1255698c..16e2c17e6e84 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 5cc66cf4f547..fe6199c9c36d 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 61f0d6973213..22375c13f728 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 2ecb7f66edea..02fc9f246ca8 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 76456f4069b6..1312e5da52f7 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 6f914e666274..7d974d174c73 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 46c8b25e03c0..5e55755447a5 100644 --- a/src/state-summary/state-card-input_select.ts +++ b/src/state-summary/state-card-input_select.ts @@ -1,30 +1,28 @@ +import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light"; +import "@polymer/paper-item/paper-item"; +import type { PaperItemElement } from "@polymer/paper-item/paper-item"; +import "@polymer/paper-listbox/paper-listbox"; import { - LitElement, + css, + CSSResult, customElement, - TemplateResult, html, - CSSResult, - css, + LitElement, property, PropertyValues, + TemplateResult, } 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 "@polymer/paper-listbox/paper-listbox"; - -import "../components/entity/state-badge"; - +import { stopPropagation } from "../common/dom/stop_propagation"; import { computeStateName } from "../common/entity/compute_state_name"; -import { HomeAssistant, InputSelectEntity } from "../types"; +import "../components/entity/state-badge"; import { setInputSelectOption } from "../data/input_select"; -import { PolymerIronSelectEvent } from "../polymer-types"; -import { stopPropagation } from "../common/dom/stop_propagation"; +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 78401332181c..3685524f60ff 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 a91c11b9e66f..d0280b7a1dab 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 afc3b97103db..048034be74b6 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 c26fb4901047..c7ece9245331 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 c15794bb5772..462467b36394 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 6c803ec6a05e..96586e8804b1 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 391da0dc256c..e7136c5776a9 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 2900d322cd9d..228ccef009b0 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 92ae77993008..672972b9c3c3 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 5c99cf1537eb..aeb233b61ff5 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 f2964fd82916..26ef533590bf 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 1c8b8b2fa10a..7a8ff2bfba62 100644 --- a/src/state/connection-mixin.ts +++ b/src/state/connection-mixin.ts @@ -1,27 +1,25 @@ import { + Auth, + callService, + Connection, ERR_INVALID_AUTH, - subscribeEntities, subscribeConfig, + subscribeEntities, subscribeServices, - callService, - Auth, - Connection, } 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 f6e525b5fc99..9d2a4104dda4 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 80d4e836d9d1..006cdad269aa 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 3fe9adea6947..384c31b9a986 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 34bd9eebaec6..75c3174dc8ea 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 a81856bfd6c1..977ee68f9dd5 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 8eea16457959..b2d3d852af58 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 7a6d7b4af2fe..f0a80a1b0524 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 b6f814a4ff92..d6ec6a2f9028 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 1e08fc7463cd..b009bbfcb102 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 de4ceeffc32a..d93435dbdab5 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 da7c3f2f3fd0..755951d0da0b 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 94325cab7bb8..d7178b3fe0be 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 ba6e294c2dbd..82721b8e80de 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 066c644fea56..206c76b04b7b 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 7e7b457f5311..3b16ea4b693f 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 a966f8ee5f3e..b00fdffba1f6 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 74e0d7f84cb9..ac5319bfa695 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 bcde8b745a9c..ba75db21f9d3 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 53784284027f..67aa62b0c432 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 f45d14fc3ac8..ab7743131586 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 1d9870019dac..6014b0e55a36 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 a44028de6cba..046e099fec55 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 8d7c8c360b2d..41eb40baca0c 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 169d09044cba..593591f17ace 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 70ef71f03aa6..0928ea98b30c 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 1e32f15d504e..000000000000 --- 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 839314e0fafa..c25811059148 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 ddf9fcfef10e..4dc00562f235 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 cc876f963056..f92af611e7cb 100644 --- a/test/state-info-test.html +++ b/test/state-info-test.html @@ -1,100 +1,121 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + - - + test("secondary line", function (done) { + si = fixture("stateInfoSecondaryLine"); + si.stateObj = { + entity_id: "light.demo", + last_changed: "2017-01-01T00:00:00+00:00", + state: "off", + attributes: { friendly_name: "Name" }, + }; + si.inDialog = false; + flush(function () { + var name = lightOrShadow(si, ".name"); + assert.isOk(name); + assert.equal(getComputedStyle(name).lineHeight, "20px"); + var content = si.getElementsByTagName("my-elem")[0]; + assert.isOk(content); + assert.equal(content.textContent, "text"); + done(); + }); + }); + }); + + diff --git a/translations/ca.json b/translations/ca.json index 6d293dae959d..5d813e51090e 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 c838cc658310..96e865f91cef 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 dd014a6c52f0..50edf120b84f 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 6d2a0196b5f4..dccf2b14056c 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 0b07c10b3f16..295687eadc31 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 6586e91f448f..528a72e3888e 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 8d45515e276c..aaf330d3df43 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 786d1024fc91..403ab3d9f96e 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 c49cc682a4f2..29ed7f4c8c6f 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 b2744430a457..9210f0e8f336 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 0ee6b2dda8ff..eb906a39ceae 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 89f869da2b92..f845fa4f2483 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 ff8296b0469c..a1caff454589 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 9bfc757b8928..815e757460c1 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 e3909e7a10c2..d3c9cc043a47 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 88ab1e5fcbaf..0309709c2c03 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 b9f15becf605..e58cf0aef6c8 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 b129e10b1c67..256fa7303e49 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 da7442ff68ce..10023f6ca3cb 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 a9442303c3cc..000000000000 --- 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 0e066ef8e582..324ef229adcf 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== - 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== +"@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/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.9" + object.assign "^4.1.0" + object.entries "^1.1.1" + +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: - confusing-browser-globals "^1.0.7" + eslint-config-airbnb-base "^14.1.0" 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-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.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.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, 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,33 +9685,162 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -liftoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" - integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== +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: - extend "^3.0.0" - findup-sync "^3.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.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= + 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" -lint-staged@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" - integrity sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA== +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: - chalk "^2.3.1" - commander "^2.14.1" - cosmiconfig "^5.0.2" + 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" + integrity sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog== + dependencies: + extend "^3.0.0" + findup-sync "^3.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +lint-staged@^8.1.5: + version "8.1.5" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" + integrity sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA== + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.0.2" debug "^3.1.0" dedent "^0.7.0" del "^3.0.0" @@ -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"