From 29729323d2f1468d9e1356042c6c7f3782b035fb Mon Sep 17 00:00:00 2001 From: Misiu Date: Wed, 9 Nov 2022 21:27:00 +0100 Subject: [PATCH 1/3] wip --- package-lock.json | 38 ++++--- package.json | 1 + src/components/esphome-icon-button.ts | 72 ++++++++++++ src/components/esphome-textfield.ts | 157 ++++++++++++++++++++++++++ src/components/search-input.ts | 97 ++++++++++++++++ src/devices/devices-list.ts | 79 ++++++++++--- 6 files changed, 408 insertions(+), 36 deletions(-) create mode 100644 src/components/esphome-icon-button.ts create mode 100644 src/components/esphome-textfield.ts create mode 100644 src/components/search-input.ts diff --git a/package-lock.json b/package-lock.json index 6ab698e7..520cdb47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "esp-web-flasher": "^5.1.4", "improv-wifi-serial-sdk": "^2.2.2", "lit": "^2.4.0", + "memoize-one": "^6.0.0", "tslib": "^2.4.0", "yaml": "^2.1.3" }, @@ -2259,6 +2260,11 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "node_modules/merge-stream": { "version": "2.0.0", "dev": true, @@ -4674,8 +4680,7 @@ }, "css-declaration-sorter": { "version": "6.3.1", - "dev": true, - "requires": {} + "dev": true }, "css-select": { "version": "4.3.0", @@ -4756,8 +4761,7 @@ }, "cssnano-utils": { "version": "3.1.0", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -4952,8 +4956,7 @@ }, "icss-utils": { "version": "5.1.0", - "dev": true, - "requires": {} + "dev": true }, "ignore": { "version": "5.2.0", @@ -5265,6 +5268,11 @@ "version": "2.0.14", "dev": true }, + "memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "merge-stream": { "version": "2.0.0", "dev": true @@ -5418,23 +5426,19 @@ }, "postcss-discard-comments": { "version": "5.1.2", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.1.0", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.1.1", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.1.0", - "dev": true, - "requires": {} + "dev": true }, "postcss-load-config": { "version": "3.1.4", @@ -5516,8 +5520,7 @@ }, "postcss-modules-extract-imports": { "version": "3.0.0", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -5544,8 +5547,7 @@ }, "postcss-normalize-charset": { "version": "5.1.0", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.1.0", diff --git a/package.json b/package.json index d1d1a9f4..cd05896e 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "esp-web-flasher": "^5.1.4", "improv-wifi-serial-sdk": "^2.2.2", "lit": "^2.4.0", + "memoize-one": "^6.0.0", "tslib": "^2.4.0", "yaml": "^2.1.3" }, diff --git a/src/components/esphome-icon-button.ts b/src/components/esphome-icon-button.ts new file mode 100644 index 00000000..c4cf6dab --- /dev/null +++ b/src/components/esphome-icon-button.ts @@ -0,0 +1,72 @@ +import "@material/mwc-icon-button"; +import type { IconButton } from "@material/mwc-icon-button"; +import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; +import { customElement, property, query } from "lit/decorators.js"; +import { ifDefined } from "lit/directives/if-defined.js"; +import "./esphome-svg-icon"; + +@customElement("esphome-icon-button") +export class ESPHomeIconButton extends LitElement { + @property({ type: Boolean, reflect: true }) disabled = false; + + // SVG icon path (if you need a non SVG icon instead, use the provided slot to pass an in) + @property({ type: String }) path?: string; + + // Label that is used for ARIA support and as tooltip + @property({ type: String }) label?: string; + + // These should always be set as properties, not attributes, + // so that only the