Compare commits

...

1675 Commits

Author SHA1 Message Date
Mike Degatano 8f679d12ff Removed unneessary casting 2022-02-20 17:25:48 -05:00
Mike Degatano 20793ecdba Add context data option to template tab 2022-02-20 16:48:20 -05:00
Paulus Schoutsen afe044d152 Fix media upload on iOS (#11740) 2022-02-20 10:53:25 -06:00
Paulus Schoutsen dc2038916b Improve logo rendering for playing media in browser (#11741) 2022-02-20 10:53:03 -06:00
Paulus Schoutsen cf8e2a6d02 TTS form no longer showed due to import oopsie (#11742) 2022-02-20 10:52:38 -06:00
Paulus Schoutsen 3269b2878b Add link to the selector docs 2022-02-19 22:13:42 -08:00
Paulus Schoutsen 29e1b7b452 Bumped version to 20220220.0 2022-02-19 21:36:14 -08:00
Paulus Schoutsen 3d6d07e5bd Pass hass to ha-form to enable selectors (#11739) 2022-02-19 21:35:58 -08:00
Paulus Schoutsen 7bac41fe41 Update media player more info (#11734) 2022-02-19 00:57:54 +00:00
Paulus Schoutsen 6e4b027575 Change words for trigger condition (#11733) 2022-02-19 00:34:17 +00:00
Paulus Schoutsen 728c391b5d Show why relayer is reconnecting (#11732) 2022-02-18 16:06:19 -08:00
Zack Barett 8999ca2ea0 Entity Settings Page to MWC 3 (#11694) 2022-02-18 12:51:37 -08:00
Steve Repsher 4fc0617289 Set initial focus for energy dialogs (#11730) 2022-02-18 14:48:59 -06:00
Zack Barett 494cc3a569 Automation Conditions to conversion to ha-form or mwc (#11727) 2022-02-18 14:48:17 -06:00
Erik Montnemery cc177ef911 Remove custom Tasmota delete device button (#11725) 2022-02-18 12:40:09 -08:00
Erik Montnemery eae7e82127 Remove custom MQTT delete device button (#11724) 2022-02-18 08:28:53 -06:00
Paulus Schoutsen 9500ac498c Debounce refresh the cloud status if Google events happen (#11721) 2022-02-18 15:04:45 +01:00
Bram Kragten 5c5459bcaf Add play media action (#11702)
Co-authored-by: Zack Barett <zackbarett@hey.com>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-18 13:21:00 +01:00
Joakim Sørensen cbd0ef6b65 Add signed add-on capability and adjust max rating (#11703) 2022-02-17 10:43:26 +01:00
Zack Barett f923228078 Fix mwc-select in lovelace editors (#11708) 2022-02-17 10:41:45 +01:00
Raman Gupta b55c7edd70 Make zwave_js config panel inclusion state aware (#11556)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-17 10:41:12 +01:00
uvjustin bfb90632ac Bump hls.js to v1.1.5 (#11712) 2022-02-17 10:40:47 +01:00
Josh McCarty 3a664d45a9 Add bottom padding to config links list with safe-area-inset-bottom (#11704) 2022-02-16 22:07:45 -06:00
Paulus Schoutsen 53607fe8c6 Remove duplicate gallery page (#11711) 2022-02-16 22:01:51 -06:00
Bram Kragten 9dec0f8ccd Fix mode selection in automation editor (#11707) 2022-02-16 21:47:49 +01:00
Bram Kragten 89f4fe9d20 Convert scene action to service call (#11705)
* Convert scene action to service call

* fix describeAction

* rename to metadata

* Update script.ts
2022-02-16 20:47:21 +01:00
Josh McCarty f43655eea5 Fixes remote icon state color (#11698) 2022-02-16 16:54:12 +01:00
Philip Allgaier 6563984fdd Convert triple dots to single char in translations (#11697) 2022-02-16 16:20:19 +01:00
Zack Barett 16d8eb0be3 Clean up some imports (#11696) 2022-02-15 12:53:20 -08:00
Paulus Schoutsen 965fc9bc4e Fix import 2022-02-15 11:16:51 -08:00
Bram Kragten 56cb958a47 Migrate all lovelace elements to mwc (#11695)
Co-authored-by: Zack Barett <zackbarett@hey.com>
2022-02-15 11:09:34 -08:00
Steve Repsher f5feb1d8aa Set initial focus for lovelace dialogs (#11667)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-15 16:42:46 +00:00
Matthias de Baat e95065ed08 Updated text part 2 (#11686)
Co-authored-by: Zack Barett <zackbarett@hey.com>
2022-02-15 09:57:26 -06:00
Bram Kragten 68a411838d This adds back mobile click accessibility (#11693) 2022-02-15 15:24:54 +00:00
Bram Kragten ba63ab8b7a Latest paper-dropdown -> mwc-select conversion (#11692) 2022-02-15 09:11:43 -06:00
Erik Montnemery 26d4599ef4 Display transmitted messages in MQTT debug info dialog (#11531) 2022-02-15 11:18:05 +00:00
Brandon Rothweiler d049990f04 Improve stripPrefixFromEntityName to handle colon and space separator (#11691) 2022-02-15 09:03:58 +00:00
Paulus Schoutsen 9c8d683a19 Group helpers not in an area in a single card (#11690) 2022-02-14 23:13:35 -08:00
Paulus Schoutsen 901677bbdf Bumped version to 20220214.0 2022-02-14 15:33:08 -08:00
Paulus Schoutsen 8bb2374b1b Allow uploading multiple files (#11687) 2022-02-14 17:25:23 -06:00
Paulus Schoutsen 520896a3c2 Try to keep the browsing stack when changing players in media panel (#11681) 2022-02-14 15:21:17 -08:00
Bram Kragten 92db272759 Dont exclude domain for area and device (#11689) 2022-02-14 16:56:50 -06:00
Bram Kragten fc654d86c6 hassio fixes (#11688) 2022-02-14 22:33:12 +01:00
Bram Kragten 523afe2f6f Another round of paper-dropdown -> mwc-select conversion (#11674)
* Another round of paper-dropdown -> mwc-select conversion

* ha-pick-language-row -> Lit

* Update hui-view-editor.ts

* Cleanup imports

* hassio

* Add explicit imports
2022-02-14 20:08:18 +01:00
Zack Barett 460b9003fc Script Editor to Ha Form (#11601)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-14 11:27:29 -06:00
kpine 2ac0ad1d98 Omit Device info and actions for connected controller nodes (#11673) 2022-02-14 17:06:03 +01:00
Paulus Schoutsen a321432175 Add TTS to media browser (#11679) 2022-02-14 07:50:44 -08:00
Zack Barett 63c9b3f830 Don't show toggle always on more info (#11640) 2022-02-14 16:21:46 +01:00
Paulus Schoutsen 806b1296b0 Limit types of media that can be uploaded to local media (#11683) 2022-02-14 15:33:21 +01:00
Steve Repsher 7f90ffa82f Set initial focus for some more dialogs (#11676) 2022-02-13 22:02:48 +01:00
Paulus Schoutsen db33c38e21 Revert compute state display show empty string as unknown (#11677) 2022-02-13 20:26:12 +01:00
Allen Porter a8c1fdd21e Improve robustness of hls media player (#11672) 2022-02-12 20:21:26 -08:00
lintaba d86a18b80b hotfix history view on missing state (#11663)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-02-12 14:00:50 -08:00
Michael bef6591548 Add WORKSPACE_DIRECTORY environment variable to devcontainer and script.core (#11477)
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
2022-02-12 07:30:19 +01:00
Bram Kragten e1c07f109c Filter fixes (#11664) 2022-02-11 23:24:29 +01:00
Zack Barett fb66d224ae Numerical State to HA-Form (#11646)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-11 22:39:33 +01:00
Paulus Schoutsen ee1fd3e865 Allow adding Zigbee/Zwave device (#11650) 2022-02-11 19:49:16 +01:00
Bram Kragten a9bfea233c Improve search and filters on mobile + fix close button in search field (#11662)
Co-authored-by: Zack <zackbarett@hey.com>
2022-02-11 18:34:50 +00:00
Shay Levy 35cc291118 Add support for media player assumed state (#11642) 2022-02-11 08:42:22 -08:00
Zack Barett db7cac5782 Fix Lovelace Empty Menu when not advanced or admin (#11660) 2022-02-11 10:31:45 -06:00
Zack Barett 099fa706a0 Make HA Form set required to false for selectors (#11649) 2022-02-11 14:05:07 +01:00
Zack Barett ed84ce9692 HA Trigger to HA Form (#11645)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-10 14:12:12 -08:00
Zack Barett 9912d427f2 Geo Location Trigger to HA - Form (#11644)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-10 14:12:01 -08:00
Zack Barett 76f574f875 Convert Sun to Ha Form (#11647)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-10 14:11:57 -08:00
Zack Barett ac90bb7088 MQTT Trigger to Ha-Form (#11643)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-10 14:11:45 -08:00
Zack Barett ce9f83e9a2 Time Pattern to HA Form (#11648) 2022-02-10 14:11:29 -08:00
Zack Barett fca7d2c5b0 Add Attribute Picker as a selector - add to state trigger (#11641)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-10 11:56:25 -08:00
Paulus Schoutsen d7a5921e7b Allow uploading media (#11615)
* Allow uploading media

* Update path

* Use current item we already have

* Update src/panels/media-browser/ha-panel-media-browser.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Use alert dialog and use button for add media

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-10 09:54:01 -08:00
Zack Barett cefa2ee183 State Trigger -> HA Form (#11631)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-10 09:26:28 -06:00
Bram Kragten 0eeed85193 Bunch of fixes and cleanup (#11636) 2022-02-10 08:24:47 -06:00
Bram Kragten fd80408de2 fix data-table row handlers (#11638) 2022-02-10 08:24:00 -06:00
Bram Kragten 467a5169c0 Migrate search bar to mwc (#11637) 2022-02-10 08:23:21 -06:00
Eric Severance b0b3222b33 Generate random webhook_id and add copy button (#11568)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Zack Barett <zackbarett@hey.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-02-10 11:43:45 +01:00
Joakim Sørensen b053881cef Add missing type to create device automation/script heading (#11635)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-10 09:40:34 +00:00
Joakim Sørensen 92a9ed7080 Create error when trying to backup wile system in freeze (#11634)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-10 10:29:42 +01:00
Paulus Schoutsen 830b449006 Add support for opening camera media source (#11633)
Co-authored-by: Zack Barett <zackbarett@hey.com>
2022-02-09 19:28:12 -06:00
Zack Barett d38a8a317e Merged too fast for Bram :) Code improv (#11632) 2022-02-09 15:45:31 -08:00
Bram Kragten a0aed9112c Migrate a bunch of paper-dropdowns (#11626) 2022-02-10 00:18:44 +01:00
Bram Kragten ce3b8544b9 Fix service control for older browsers (#11629) 2022-02-09 17:15:00 -06:00
Bram Kragten 134ed7d303 Only load ha-selector when needed (#11630) 2022-02-09 17:14:25 -06:00
Bram Kragten dc27871189 Set button role on button card and handle enter and space (#11627) 2022-02-09 16:36:16 -06:00
Bram Kragten 9c9bfa2b77 Update code editor to material 3 look (#11628) 2022-02-09 16:35:49 -06:00
Thomas Lovén f02dd39619 Add loadCardHelpers to cast scope (#11616) 2022-02-09 23:01:05 +01:00
Patrick ZAJDA d37d99223d Add aria-label to table headers with no title (#11503) 2022-02-09 18:10:41 +00:00
Steve Repsher 4db943c5ff Set initial focus for device, area, and entity dialogs (#11622) 2022-02-09 19:02:03 +01:00
Bram Kragten ed001fb10b Convert time inputs to Lit + mwc (#11609) 2022-02-09 18:20:56 +01:00
Bram Kragten 5f43715dd8 Update lit-virtualizer (#11623) 2022-02-09 18:20:25 +01:00
Bram Kragten 5435218187 Make textarea grow on input (#11618) 2022-02-09 16:58:37 +00:00
Bram Kragten 4ef5f3af89 Replace checkboxes in list items with check-list-item (#11610)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-02-09 07:50:48 -08:00
Zack Barett 9eea17b793 Convert Automation Action Choose to HA Form (#11597)
* Convert Auatomation Action Choose to HA Form

* remove log

* Remove Import
2022-02-07 17:45:16 -06:00
Joakim Sørensen 6a51e2aaad Only show stable add-ons in the store if not advanced mode (#11596) 2022-02-07 23:18:52 +01:00
Bram Kragten 2d33327d88 dark mode fixes (#11595) 2022-02-07 14:33:09 -06:00
Bram Kragten e9ec2da917 Fix clearing device in device action (#11594) 2022-02-07 11:58:36 -06:00
Bram Kragten 09d46dac61 Convert device automation picker to mwc (#11592)
Co-authored-by: Zack <zackbarett@hey.com>
2022-02-07 10:53:23 -06:00
Bram Kragten 236fa14ec3 Convert area-devices picker (#11588) 2022-02-07 10:52:44 -06:00
Bram Kragten 2cb37820df Convert icon picker to ha-combobox (#11586)
Co-authored-by: Zack <zackbarett@hey.com>
2022-02-07 16:43:49 +00:00
Bram Kragten 869fa91ae5 Convert entity-attribute picker to ha-combo-box (#11587) 2022-02-07 10:22:08 -06:00
Bram Kragten 22df03427f Fix number selector (#11585) 2022-02-07 10:17:32 -06:00
Bram Kragten e72a4e4a20 Convert HaFormSchemas to use selectors (#11589) 2022-02-07 10:06:04 -06:00
Bram Kragten ca8d31c6bb Migrate (input) select entities to mwc (#11591) 2022-02-07 10:04:37 -06:00
Bram Kragten 354ea88984 Update links on info page (#11590) 2022-02-07 15:08:54 +01:00
Bram Kragten 76af6e48cd Convert entity picker to ha-combo (#11560)
* Convert entity picker to ha-combo

* Update ha-entity-picker.ts

* Handle empty better

* Clear value when no device/area/entity
2022-02-07 10:59:11 +01:00
Bram Kragten d05f807b9d Covert area picker to combo-box (#11562) 2022-02-06 14:31:46 -08:00
Bram Kragten 4092f7f75d Convert selectors to MWC (#11543) 2022-02-06 14:29:28 -08:00
Bram Kragten 04668ad809 Remember filter between navigation (#11565) 2022-02-06 14:26:42 -08:00
J. Nick Koston 9be5a15c77 Add integration_discovery to discovery sources (#11564) 2022-02-05 17:44:48 +01:00
Franck Nijhof 21d86f4797 Link via device on device page (#11554)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-02-04 21:16:01 -06:00
Bram Kragten 45e6ec1ee2 New date picker (#11555) 2022-02-04 16:19:36 -08:00
Bram Kragten 9b97faa5e3 Migrate combobox to mwc (#11546) 2022-02-04 15:46:09 -08:00
Bram Kragten 8730c122fd Allow translate gas total (#11547) 2022-02-04 16:22:37 +00:00
Paulus Schoutsen 0046252e32 Add selectors to ha-form (#11534) 2022-02-04 12:47:21 +01:00
Kuba Wolanin f47440083e Add entity id autocompletion to YAML code editors (#11099) 2022-02-04 11:02:09 +01:00
Yosi Levy bfaf44f9d1 Merge pull request #11475 from yosilevy/config-info-rtl-fix
Fix config card rtl issues
2022-02-04 05:22:29 +02:00
Paulus Schoutsen deba6a0db4 Remove optional field from ha-form schema type (#11538) 2022-02-03 16:30:37 -08:00
Bram Kragten 890ad9a1c8 Bumped version to 20220203.0 2022-02-03 20:27:33 +01:00
Bram Kragten 8466ef371a Add name of integration to diagnostics when more than 1 (#11523) 2022-02-03 13:18:48 -06:00
Bram Kragten 4e55460799 Clear old src when disconnected so we can't fetch it with the wrong t… (#11528) 2022-02-03 07:54:26 -08:00
Bram Kragten 5fde6e659d Revert "Mobile click accessibility" (#11526) 2022-02-03 16:33:24 +01:00
Bram Kragten 148bb99d89 Use css to hide hint in quickbar (#11527) 2022-02-03 09:28:59 -06:00
Bram Kragten 0540bae707 Fix dialog heading aria label (#11524)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-02-03 14:54:37 +00:00
Bram Kragten 0c6f647f53 Handle unknown toggle state (#11522) 2022-02-03 15:43:41 +01:00
Kuba Wolanin 3aca67d511 Add filtering to system log card and error log card (#11166)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-02-03 11:15:27 +01:00
fpro1212 0e41a408e7 Design home - Fix GitHub Links (#11519) 2022-02-03 10:03:26 +01:00
Paulus Schoutsen 19e1eaf2d7 Guard load diagnostics (#11518) 2022-02-03 09:59:04 +01:00
Joakim Sørensen 5e80a2b465 Make sure we load data in update card (#11516) 2022-02-03 09:56:38 +01:00
Marc Mueller 866a57cde4 Only upload wheels to PyPI (#11514) 2022-02-02 09:57:25 -08:00
Bram Kragten a88da0e39a Merge branch 'master' into dev 2022-02-02 14:30:14 +01:00
Bram Kragten 21a8fac477 Bumped version to 20220202.0 2022-02-02 14:28:17 +01:00
Zack Barett ca5ce04a38 Scene to have history (#11510) 2022-02-01 16:42:21 -06:00
Bram Kragten 7c4b9a0410 20220201.0 (#11508)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Thomas Lovén <thomasloven@gmail.com>
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Yosi Levy <37745463+yosilevy@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: Patrick ZAJDA <patrick@zajda.fr>
Co-authored-by: Steve Repsher <steverep@users.noreply.github.com>
2022-02-01 11:18:14 -06:00
Bram Kragten de6f06ea6d Bumped version to 20220201.0 2022-02-01 18:06:05 +01:00
Bram Kragten bbc8e323e8 Add start point to device energy graph (#11507) 2022-02-01 18:02:43 +01:00
Bram Kragten 89b6863ae3 Add alert to OZW and legacy Z-Wave panels (#11506) 2022-02-01 15:21:51 +00:00
Bram Kragten 3f1850e9eb unset error when navigating away in media browser (#11505) 2022-02-01 09:16:24 -06:00
Bram Kragten 54d6b5b6f3 Handle config flow errors better (#11499)
* Handle config flow errors better

* Use body for error message

* Update dialog-data-entry-flow.ts
2022-02-01 11:22:14 +01:00
Steve Repsher fb55ab197f Mobile click accessibility (#11447) 2022-02-01 00:07:49 +01:00
Zack Barett cc2db9a761 Place System Dashboards at the top with a colored icon in the Dashboard Configuration (#11500) 2022-02-01 00:06:29 +01:00
Paulus Schoutsen 58ba3e5c22 Some fixes for media panel (#11485) 2022-01-31 12:17:06 -06:00
Bram Kragten 182ffccd0c Remove interpolation from history graph (#11498) 2022-01-31 18:07:00 +01:00
Patrick ZAJDA ce99d14ee0 Add missing em dash for non-disabled entities and devices (#11493) 2022-01-31 17:01:24 +01:00
Yosi Levy 8ce160b9ce Energy setup wizard missing localization entries (#11469) 2022-01-31 10:32:31 +01:00
Paulus Schoutsen fe33714c8b Bump Lit (#11481) 2022-01-31 10:29:13 +01:00
J. Nick Koston afbe85625c Add gate to the list of device classes to pick for overrides (#11487) 2022-01-30 21:37:13 -06:00
Yosi Levy cb47ee7721 Energy setup wizard missing localization entries (#11469) 2022-01-29 11:57:04 -06:00
Zack Barett 5caa256f1b Fix Safari Battery Percent on device page (#11480) 2022-01-29 09:47:22 +01:00
Zack Barett c66dfb84f9 Fix Quick bar having false text (#11474) 2022-01-29 09:47:06 +01:00
Philip Allgaier df1d703e4e Adjust device translations to handle device vs service consistently (#11472) 2022-01-29 09:46:32 +01:00
Marc Mueller ce0ced0b6a Move to setup.cfg and config for build-system (#11484) 2022-01-28 21:18:17 -08:00
Zack Barett 730e9b144d When refreshing updates, notify user when finished (#11464)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-01-28 13:03:45 -06:00
Thomas Lovén 69ff8dd0c4 Use ha-slider in ha-form-integer (#11471) 2022-01-28 10:17:29 -06:00
Yosi Levy 8d2c716fbe Fix config card rtl issues 2022-01-28 17:45:12 +02:00
Paulus Schoutsen 389a100b46 Fix storing Google pin (#11470) 2022-01-28 09:55:34 +01:00
Paulus Schoutsen 9fee7a2829 Merge pull request #11462 from home-assistant/dev 2022-01-27 10:42:12 -08:00
Paulus Schoutsen a91897821a Bumped version to 20220127.0 2022-01-27 10:22:19 -08:00
Bram Kragten 815a2a07ff Fix mobile styling quickbar (#11459) 2022-01-27 09:58:41 -08:00
Bram Kragten b8d3eb76ac Set frontendVersion sooner (#11460) 2022-01-27 09:57:15 -08:00
Bram Kragten ba75c2e7af Little cleanup (#11461) 2022-01-27 09:56:50 -08:00
Bram Kragten f04b844223 Check if energy integration is enabled (#11458) 2022-01-27 15:27:40 +00:00
Joakim Sørensen 242bad0a29 Use documentationUrl instead of manifest for core integrations (#11450) 2022-01-27 15:49:55 +01:00
Franck Nijhof 8b20b2b63c Adjust values in Energy Dashboard row (#11452) 2022-01-27 15:39:20 +01:00
Philip Allgaier e0c8efc5e6 Fix Lovelace view edit mode "Done" button styling (#11449) 2022-01-27 09:44:05 +01:00
Paulus Schoutsen f59c30ac04 Fix discovery name (#11445) 2022-01-26 21:14:28 +01:00
Bram Kragten e4b9c08b45 Add padding between control buttons and progress bar 2022-01-26 20:32:50 +01:00
Bram Kragten 04e63eefe2 media_class of integrations should be app (#11444) 2022-01-26 20:02:56 +01:00
Bram Kragten a064ca0856 Merge pull request #11443 from home-assistant/dev 2022-01-26 18:38:18 +01:00
Bram Kragten 6044ea92ad Merge branch 'master' into dev 2022-01-26 18:09:18 +01:00
Bram Kragten 17e8215420 Bumped version to 20220126.0 2022-01-26 18:07:08 +01:00
Philip Allgaier a4ae1bee79 Sort all elements on the area page (#11338) 2022-01-26 17:06:12 +00:00
Philip Allgaier 7d335d7d85 Convert ha-climate-control ot Lit and add tooltips to buttons (#10921)
Co-authored-by: Zack Barett <zackbarett@hey.com>
2022-01-26 16:50:50 +00:00
Zack Barett 7c194d8910 Update Media Browser to styling from Mockup (#11424)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-01-26 17:42:25 +01:00
Mattias Persson a92100bb0a Add viewport initial-scale for iOS devices (#11330) 2022-01-26 16:57:23 +01:00
Erik Montnemery 303af611d1 Remove unused keys from hassAttributeUtil (#10944)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-01-26 15:56:10 +00:00
Robin Wittebol 559b6e9d5b Apply header bottom border and fix header height (#10986) 2022-01-26 16:26:44 +01:00
David F. Mulcahey 75a95ff675 Fix ZHA device reconfiguration dialog (#11016) 2022-01-26 16:19:40 +01:00
Philip Allgaier 3024ee43f9 Fix entity config page rendering for disabled entities (#11439) 2022-01-26 14:54:38 +00:00
Philip Allgaier b34b92fa87 Give the design page menu some space (#11441) 2022-01-26 15:48:34 +01:00
Philip Allgaier 1832ed0a48 Ensure tag QR code gets shown for each dialog opening (#11438) 2022-01-26 10:13:20 +00:00
Paulus Schoutsen f398692e75 Improve cloud dashboard (#11422)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-01-26 10:00:50 +00:00
Joakim Sørensen 68bee4dd58 Change more_updates base translation (#11437) 2022-01-26 10:31:14 +01:00
Joakim Sørensen f1297e1f36 Update styling for show more updates (#11435) 2022-01-26 10:30:19 +01:00
Joakim Sørensen 953e3e060b Add version for service devices (#11436) 2022-01-26 10:29:34 +01:00
Bram Kragten c37f660718 Update translations 2022-01-26 09:54:48 +01:00
Philip Allgaier 02754369a6 Update history and logbook panel path when making selections (#11428) 2022-01-26 09:39:29 +01:00
Philip Allgaier 0df9e9932f Fix 24:XX time issue in Chrome (#11426) 2022-01-26 09:37:09 +01:00
Paulus Schoutsen eddb392ad0 Always show QR code, and with white bg (#11434) 2022-01-26 00:17:23 -08:00
Philip Allgaier e8ba349447 Fix border-radius for progress button success and error (#11432) 2022-01-25 19:39:23 -06:00
Bram Kragten 5be22d46ab Don't add quickbar to history (#11429) 2022-01-25 19:46:17 +00:00
Philip Allgaier ffaff30b46 Fix various supervisor tooltip and aria-label issues (#10878) 2022-01-25 16:36:35 +00:00
Yosi Levy c4cad5bccd Missing translation, code editor make ltr, checkbox alignment in rtl (#11419) 2022-01-25 08:46:33 -06:00
Steve Repsher e4085fe1f6 Allow tab to show/hide password button for keyboard accessibility (#11416) 2022-01-24 21:26:44 -06:00
Paulus Schoutsen 8bfef92c86 Bumped version to 20220124.0 2022-01-24 15:52:45 -08:00
Patrick ZAJDA 0c07178c0a Add em dash "—" instead of a blank value in devices and entities tables to improve accessibility (#11078) 2022-01-24 20:18:23 +01:00
Michael Gorven 1010777139 Add weekday to formatTimeWeekday() (#11020) 2022-01-24 19:25:45 +01:00
Philip Allgaier e57477c16a Use consistent font size for quick bar "Nothing found" note (#11418) 2022-01-24 18:14:11 +00:00
Radu Cotescu 30fa92c120 fix #11041: The gauge card doesn't render correctly on iOS 15.2 / macOS 12.1 in the companion apps (#11363)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Radu Cotescu <radu-likes-to-code@cotescu.com>
2022-01-24 17:58:02 +00:00
Zack Barett b32438dc18 Remove padding (#11417) 2022-01-24 17:54:00 +00:00
Zack Barett 614bd2f451 Fix Quickbar for Safari - Change to MWC Textfield (#11414) 2022-01-24 09:14:29 -08:00
Paulus Schoutsen 6c12a5a4b1 Allow an external sidebar (#11347) 2022-01-24 09:08:35 -08:00
Paulus Schoutsen bbcec38450 Play audio in the bottom bar media player (#11413)
Co-authored-by: Zack <zackbarett@hey.com>
2022-01-24 17:07:47 +00:00
Paulus Schoutsen 416e2e26c0 Add check for updates in config menu (#11415)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-24 16:48:07 +00:00
Zack Barett 1a7164b466 Fix Logbook Icons, Card Editor Close/Cancel buttons, View Editor Dirty (#11153) 2022-01-24 17:36:49 +01:00
Philip Allgaier 3ddcd2d0f6 Ensure forecast temperatures are properly positioned + show em-dash when n/a (#9066)
Co-authored-by: Zack Barett <zackbarett@hey.com>
2022-01-24 10:10:44 -06:00
Bram Kragten 648c02e622 Don't sync dev tools service data between tabs (#10980) 2022-01-24 08:43:28 -06:00
Erik Montnemery b0b953bfac Set mandatory bool service data without a default value to false (#11094) 2022-01-24 10:27:38 +01:00
Zack Barett abeaa63005 Lovelace Menu Edits (#11323) 2022-01-24 10:14:32 +01:00
Paulus Schoutsen 9cd23374f4 Hide actions footer if no action links (#11388) 2022-01-24 10:06:29 +01:00
Philip Allgaier 72bd5f84d6 Use en "–" and em "—" dashes consistently (#11401) 2022-01-24 10:02:44 +01:00
Paulus Schoutsen 22b4550fdf Rename media browser to media (#11412) 2022-01-24 02:13:47 +01:00
Paulus Schoutsen 87c22229e0 Add demo for selectors (#11398)
* Add demo for selectors

* Update label name
2022-01-22 14:44:50 -08:00
Philip Allgaier 971fd8dc60 Adjust padding for "No items" in media browser (#11397) 2022-01-22 02:51:03 +01:00
Philip Allgaier 049c3caadd Remove "authSig" from media player source (#11394) 2022-01-22 02:27:40 +01:00
Philip Allgaier fb2a24d11e Remove capitalization from media player state card media title (#11396) 2022-01-21 19:01:15 -06:00
Paulus Schoutsen d4646bac01 Restore energy config in quickbar (#11391) 2022-01-21 17:06:42 -06:00
Paulus Schoutsen 14e5b2a7a5 Single device links to device page (#11387) 2022-01-21 14:10:01 -08:00
Zack Barett 734a733a4c Add Search Icon to Config Dashboard (#11375)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-01-21 14:06:25 -08:00
Philip Allgaier 8f31c182f6 Remove SVG icons from accessibility tree (#11389) 2022-01-21 15:56:36 -06:00
Zack Barett e51a819bfd Move energy to Dashboards (#11386) 2022-01-21 13:30:24 -08:00
Zack Barett 05d7e85aa3 Remove Show button on Update. Make row clickable (#11385) 2022-01-21 13:28:05 -08:00
Paulus Schoutsen cf527e4bc2 Hide download diagnostics if config entry is not loaded (#11383) 2022-01-21 09:41:02 -08:00
Matthias de Baat 197b581e8e Adding results of the Configuration menu user test (#11381)
* Adding results of the Configuration menu user test

* Update title

* Add sidebar entry

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-01-21 08:39:17 -08:00
Paulus Schoutsen f75bf1f676 Check for updates in add-on store (#11382) 2022-01-21 08:16:45 -08:00
Allen Porter 28df79cfda Enable/Disable LL-HLS support based on http/2 availability (#11372)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Philip Allgaier <philip.allgaier@gmx.de>
2022-01-21 08:06:00 -08:00
Zack Barett 3bf19883a8 Fix Date Time Helper (#11367) 2022-01-21 08:36:39 -06:00
Zack Barett 303e065433 Media Browser Bar (#11369)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-01-20 14:37:30 -08:00
Joakim Sørensen 7ad0b37a9e Use backend logic for partial backup while updating (#11364) 2022-01-20 10:12:52 -08:00
Joakim Sørensen 930c7e4afa Add backup size to backup table (#11365) 2022-01-20 10:08:53 -06:00
Paulus Schoutsen 81faae6f74 Allow downloading device diagnostics (#11370) 2022-01-19 20:48:24 -08:00
Philip Allgaier f7fc83ac12 Add space between number input field and unit (#11366) 2022-01-19 12:46:38 -08:00
Paulus Schoutsen 21a099ee9f Clean up users table (#11333)
* Clean up users table

* Add decicated icon for data tables

* Change tooltip and icons

* Only use icons for narrow view

* Shorten headers

* Add chips to the user detail dialog

* Lint

* Hide system badge on mobile
2022-01-19 12:28:13 -08:00
Paulus Schoutsen 7d1ce1b240 Allow creating automation from TTS try dialog (#11161) 2022-01-19 11:32:24 -06:00
Matthias de Baat d1f1309198 Added examples and corrected some text (#11156) 2022-01-19 09:02:22 -08:00
Philip Allgaier 68dd818f7a Translate "No integration" in device dashboard table (#11362) 2022-01-19 08:57:46 -08:00
Paulus Schoutsen 50bea33a19 Localize config flow title (#11358) 2022-01-18 14:18:22 -08:00
Paulus Schoutsen 27cae037ce Bumped version to 20220118.0 2022-01-18 14:10:29 -08:00
Paulus Schoutsen dbb5bf7550 Use system log WS API (#11361) 2022-01-18 14:10:18 -08:00
Philip Allgaier 9ef743a695 Call correct "button.press" service for input_button entity toggle action (#11350) 2022-01-18 09:05:19 +01:00
Paulus Schoutsen f3642a1677 Use download util for diagnostics (#11349) 2022-01-18 08:52:29 +01:00
Raman Gupta 2d651c2a66 Remove action to download state dump from zwave_js (#11348) 2022-01-17 21:53:41 -08:00
Philip Allgaier ef39317019 Call correct "button.press" service for button entity toggle action (#11346) 2022-01-17 21:26:56 -08:00
Paulus Schoutsen 441f1fbcb5 Allow downloading diagnostics of a config entry (#11345)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-18 02:25:52 +00:00
Paulus Schoutsen 09a27a6791 Reflect media browser panel state in URL (#11317) 2022-01-17 09:40:51 -06:00
Philip Allgaier 32bbdc194a Ensure disabled device entity names are shown (#11334) 2022-01-16 23:21:50 -06:00
Philip Allgaier 52588a3915 Ensure numeric attributes are formatted correctly (#11336) 2022-01-16 23:21:04 -06:00
Paulus Schoutsen 9fffc93e5d Show error message if login is blocked (#11331) 2022-01-16 23:20:23 -06:00
Philip Allgaier effec839af Translate assigned-to / targeting-this area info (#11337) 2022-01-16 22:52:35 -06:00
Matthias de Baat 884ed561a1 Update Home text (#11319)
Co-authored-by: Zack Barett <zackbarett@hey.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-01-14 23:46:31 +00:00
Zack Barett 4165e64ce0 Area card gallery updates (#11324) 2022-01-14 15:27:54 -08:00
Kuba Wolanin 6053b64b2e DevTools: Navigate to History from last changed/last updated (#11133) 2022-01-14 10:01:39 -06:00
Allen Porter ed462dc257 Add authenticated thumbnails to Media Player and lazy fetch thumbnails (#10978)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2022-01-13 22:31:10 -08:00
Paulus Schoutsen 74a05929be Allow pressing enter to pick item at the top of the list (#11139) 2022-01-12 17:52:29 -08:00
Paulus Schoutsen 5e388b1f02 Add entity ID being browsed to URL of media browser (#11164) 2022-01-12 10:22:04 -08:00
Bram Kragten ff2fa9a78c Add period option to statistics card (#10982)
Co-authored-by: Zack Barett <zackbarett@hey.com>
2022-01-12 10:35:10 -06:00
Marius 6d1be9e73f fix domain icons for switch (#11167) 2022-01-12 09:29:14 -06:00
Franck Nijhof ba570f4004 Add overflow menu to discovered integration item (#11165)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-12 15:02:08 +00:00
Marius 6ab497edf8 use motion-sensor/-off (#11142) 2022-01-12 08:52:43 -06:00
Paulus Schoutsen 8c1cd273df Update translation of edit config button (#11163) 2022-01-12 09:56:47 +01:00
David F. Mulcahey 8f68bcbba9 Add checkbox to enable / disable physics for the ZHA network visualization page (#11017) 2022-01-11 19:01:50 -06:00
Marius 8291cf9daa Make input_boolean icon state dependent (#10526)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-11 18:56:59 -06:00
Paulus Schoutsen bb40e66833 Adjust fossil energy consumption in demo to avoid negative numbers (#11160) 2022-01-11 18:55:32 -06:00
Franck Nijhof f852208eff Add support for input_button / Button Helper (#10974)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-11 12:24:59 -06:00
zmarties 3bbe1603eb Remove max-width constraint on areas container (#10877) 2022-01-11 17:39:53 +00:00
Franck Nijhof 25d60e11da Add known issues link to integrations card (#10994)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-11 11:32:22 -06:00
Patrick ZAJDA 78d06426cf Add ARIA role heading for each integration to improve screen reader experience (#11049) 2022-01-11 11:25:04 -06:00
epenet 320b2bb48b Add CO to binary_sensor platform (#10935) 2022-01-11 10:56:42 -06:00
Erik Montnemery a7b8382617 Add sensor device classes for apparent and reactive power (#10942) 2022-01-11 10:53:24 -06:00
Paulus Schoutsen 77fe687ec2 Re-order automation menu (#11154) 2022-01-11 08:50:00 -06:00
Paulus Schoutsen 069f08b55e Bumped version to 20211229.1 2022-01-10 15:30:53 -08:00
Bram Kragten 204ccf8b40 Wait with navigate until history.back is done (#11152)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-01-10 15:30:48 -08:00
Bram Kragten 4b9ff641ba Wait with navigate until history.back is done (#11152)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2022-01-10 15:30:21 -08:00
Paulus Schoutsen 1520b5832a Improve integration search (#11140) 2022-01-10 17:18:40 -06:00
Paulus Schoutsen 04f2e2e70c Move trigger ID to overflow menu (#11136) 2022-01-10 14:54:23 -08:00
Paulus Schoutsen 920d2972ea Add helper entity rows to design page (#11150) 2022-01-10 14:54:06 -08:00
Paulus Schoutsen e94fc493b8 Fix timer removing the default value of 00:00:00 if name or icon set (#11147) 2022-01-10 15:46:04 -06:00
Paulus Schoutsen 3e22270c2c Fix scenes activate button being disabled (#11145) 2022-01-10 15:45:41 -06:00
Matthias de Baat 27fa34e24e Add guidelines and implementation (#11144)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2022-01-10 10:29:52 -08:00
Paulus Schoutsen 4e0cebaf32 Handle device without name (#11138) 2022-01-10 09:14:12 -06:00
Paulus Schoutsen f021480bc5 Fix design nightly build (#11134) 2022-01-10 09:24:29 +01:00
Paulus Schoutsen 34c3374d84 Small UI tweaks to design website (#11135) 2022-01-09 21:20:15 -08:00
Paulus Schoutsen 4cb7154917 Hide local webhooks (#11123)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2022-01-09 11:40:36 +00:00
Paulus Schoutsen 08863348dc Update integration-card.ts 2022-01-07 17:24:56 -08:00
Paulus Schoutsen 2bcf816b77 Update util-long-press.ts 2022-01-07 17:24:18 -08:00
Paulus Schoutsen d2b99e6963 Add description pages to all pages (#11124) 2022-01-07 15:52:07 -06:00
Philip Allgaier 48a800882e Add reload_themes and reload_core_config to quick bar (#11072) 2022-01-07 08:47:57 -08:00
Philip Allgaier 595e13ecac Fix HLS player cleanup (null access to removeAttribute) (#11074) 2022-01-07 08:44:57 -08:00
Erik Montnemery 5261d583a8 Only interpolate sensor line charts (#11082) 2022-01-07 08:44:09 -08:00
Joakim Sørensen 5c488f8298 Limit design site builds (#11120) 2022-01-07 06:52:08 -08:00
Paulus Schoutsen 6fc87a6f66 Fix design footer 2022-01-06 23:37:50 -08:00
Paulus Schoutsen 3133f9b01f Use page instead of demo (#11118)
* Use page instead of demo

* Update netlify script

* Update ci.yml

* Rename demo -> page
2022-01-06 22:32:10 -08:00
Paulus Schoutsen 2c0d330f1f Reorganize gallery (#11116)
* Reorganize gallery

* GitHub edit links

* Render sidebar during build

* Auto rebuild when sidebar changes

* Yarn dedupe

* Fixes

* Allow just metadata without text

* Show edit text link if metadata defined

* Update build-scripts/gulp/gallery.js

Co-authored-by: Zack Barett <arnett.zackary@gmail.com>

Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2022-01-06 20:20:57 -08:00
Franck Nijhof fb9ea981ed Ignore button in scenes (#11109) 2022-01-06 14:52:08 +01:00
Paulus Schoutsen 63c113f78d Gallery: Make sidebar collapsible + more tweaks (#11104) 2022-01-06 10:21:17 +01:00
Paulus Schoutsen a67799a670 Allow markdown readme above the gallery pages (#11103) 2022-01-05 23:08:21 +01:00
Paulus Schoutsen e3d78d6dc5 Convert ha-gallery to TS (#11102)
* Convert ha-gallery to TS

* Prepare gallery to be design portal

* Import card in introduction

* Clean up demo IDs

* Convert demo-cards

* TypeScript conversion of demo-card

* Fix default demo
2022-01-05 12:49:05 -08:00
OzGav 76a4b1efbd Update "electricitymap.com" app URL in hui-energy-distribution-card (#11040) 2022-01-02 17:35:43 +01:00
Marc Randolph 882e79524b Spelling fix ('a NFC tag' to 'an NFC tag') (#11073) 2022-01-02 16:32:12 +00:00
Bram Kragten 0ab8f8fd7c Merge pull request #11043 from home-assistant/dev 2021-12-29 10:51:08 +01:00
Bram Kragten 86b9eb0bd7 Bumped version to 20211229.0 2021-12-29 10:37:39 +01:00
Paulus Schoutsen 011cbe7d22 Bump HAWS to 6.0.1 (#11042) 2021-12-28 22:27:58 -08:00
Bram Kragten 9b0b2c5b71 Merge pull request #11033 from home-assistant/dev 2021-12-27 20:59:22 +01:00
Bram Kragten be72bf7b3c Bumped version to 20211227.0 2021-12-27 20:45:56 +01:00
Paulus Schoutsen 3e062ba673 Show error screen when connection fails (#11030) 2021-12-27 11:43:38 +01:00
Paulus Schoutsen 322d965539 Bump HAWS to 6 (#11031) 2021-12-27 11:38:59 +01:00
Bram Kragten 7b840527b5 Fix gauge on ios 15.2 (#10992) 2021-12-26 21:56:24 -08:00
Marius dced053ba2 Take out 'Stop' (#11024) 2021-12-26 21:55:17 -08:00
Joakim Sørensen fe4322e64b Remove stop button for all installation types (#10987) 2021-12-21 14:28:51 +01:00
Bram Kragten 0800c702fb Merge pull request #10981 from home-assistant/dev 2021-12-20 14:01:20 +01:00
Bram Kragten b6d6e2fd4b Fix demo loadFragmentTranslation 2021-12-20 13:42:52 +01:00
Bram Kragten 2bbb1bfa7e Bumped version to 20211220.0 2021-12-20 13:36:32 +01:00
Bram Kragten e2af8ac3cc Fix theme updating entities card (#10979) 2021-12-20 12:14:54 +01:00
Philip Allgaier 25ff5fef14 More granular control for row interaction catching and cursor (#10971) 2021-12-20 10:27:43 +01:00
Philip Allgaier 2f9c088091 Make "Timers" plural on server control reload page (#10972) 2021-12-20 10:26:35 +01:00
Philip Allgaier 50c397901b Show correct cursor if tap_action is set to "none" (#10963) 2021-12-20 10:26:02 +01:00
Philip Allgaier 1f7d4c25d4 Add word wrap to device model and manufacturer (#10941) 2021-12-20 10:24:44 +01:00
Philip Allgaier 29819fac23 Ensure button and automation row inputs are clickable on mobile (#10940) 2021-12-20 10:24:07 +01:00
Paulus Schoutsen cc301df57d Force reconnect when triggered from external bus (#10938) 2021-12-20 09:59:45 +01:00
Joakim Sørensen 7d5b566312 Disable repository removal if used for installed add-ons (#10922) 2021-12-17 22:21:46 -08:00
Joakim Sørensen 07cd68f5d0 Always send homeassistant for partial restore (#10927) 2021-12-16 13:57:08 -08:00
Joakim Sørensen 99bf6fa781 Handle update-complete event on add-on page (#10929) 2021-12-16 12:39:21 -08:00
Joakim Sørensen bfad1eb5ac Add bottom margin to update card (#10948) 2021-12-16 12:33:46 -08:00
J. Nick Koston 6f9b2ee569 Add hardware version to the device info card (#10914) 2021-12-16 05:16:23 -06:00
Bram Kragten b7bd7c1065 Merge pull request #10930 from home-assistant/dev 2021-12-15 13:48:42 +01:00
Bram Kragten 4ebdca2a46 Bumped version to 20211215.0 2021-12-15 13:36:34 +01:00
Philip Allgaier fc700fdaf0 Outline new collapsable area in state dev tools + auto-expand (#10917) 2021-12-15 13:15:50 +01:00
Philip Allgaier d8e12f4280 Add tooltips and aria-labels to media player buttons (#10881) 2021-12-13 16:33:34 -08:00
krazos 86114758c3 Add group to input row domains to fix mobile focus issue (#10897) 2021-12-13 16:30:21 -08:00
Joakim Sørensen 792278cf17 Hide stop for hassio (#10905)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-12-13 16:29:01 -08:00
Joakim Sørensen b8832f2121 Change entrypoint for Settings (#10904) 2021-12-13 16:08:19 -08:00
Joakim Sørensen 76339c90f7 Show app configuration in sidebar for non-admin users (#10890) 2021-12-13 16:06:46 -08:00
Bram Kragten b3d4451035 Not valid config, but we support it in the editor (#10893) 2021-12-13 11:01:41 -08:00
Joakim Sørensen dc58481918 Fix overriding username suggestion (#10899) 2021-12-13 18:56:44 +01:00
Philip Allgaier 14af735507 Fix tooltip and aria-label for password input field (#10898)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-12-13 16:32:45 +00:00
Joakim Sørensen a7b558b64a Add no update available message (#10891) 2021-12-13 17:20:38 +01:00
Joakim Sørensen b7665bef6f Don't backup core for supervisor/os updates (#10886) 2021-12-13 10:53:02 +01:00
Christopher Toth 5ec37a35f1 Fix all instances where HTML ARIA-ROLE should actually just be role (#10888) 2021-12-13 08:35:46 +00:00
Philip Allgaier 91bb2ddcc4 Make energy graph colors brighter in dark mode (#10789) 2021-12-12 14:10:30 +01:00
Bram Kragten 61bae5da64 Merge pull request #10880 from home-assistant/dev 2021-12-12 13:49:22 +01:00
Bram Kragten 85168b3a35 Bumped version to 20211212.0 2021-12-12 13:37:28 +01:00
Bram Kragten 942150cda2 Remove milliseconds from state trigger when 0 (#10879) 2021-12-12 12:27:14 +00:00
Philip Allgaier 2606d55895 Add tooltips and aria-labels to climate modes (#10875) 2021-12-12 13:25:05 +01:00
Philip Allgaier 1f671198aa Fix tooltip and aria-label for ZWave JS log download (#10876) 2021-12-12 13:24:24 +01:00
Bram Kragten deb65e7108 Fix button with images (#10872) 2021-12-12 13:19:32 +01:00
Philip Allgaier cd00f7f874 Fix typo in cover close tilt translation key (#10871) 2021-12-11 20:59:42 +01:00
Bram Kragten bdd13db8cf Merge pull request #10869 from home-assistant/dev 2021-12-11 17:32:55 +01:00
Bram Kragten 2b0359edba Bumped version to 20211211.0 2021-12-11 17:15:38 +01:00
Philip Allgaier 35e9687170 Replace mwc-icon-button with ha-icon-button in automation picker (#10858) 2021-12-11 17:15:16 +01:00
Bram Kragten b730676914 Fix translations cover controls (#10868) 2021-12-11 17:13:43 +01:00
Bram Kragten 2890192c05 Fix formfield label touch (#10867) 2021-12-11 17:13:24 +01:00
Bram Kragten bfb84a834f Still have manual input if camera is not supported (#10849)
* Still have manual input if camera is not supported

* Adjust & fix
2021-12-11 17:12:41 +01:00
Philip Allgaier ca6fd6c770 Prevent quickbar command entry duplicates (#10861) 2021-12-11 17:01:24 +01:00
Joakim Sørensen 585648ac4c Revert "handle ha-radio and ha-checkbox in ha-formfield" (#10863) 2021-12-10 23:30:35 -08:00
Matthias de Baat bec5c564b6 Update blueprint description (#10854) 2021-12-10 11:18:05 -08:00
Erik Montnemery 48c66e6349 Tweak some energy related translation strings (#10852) 2021-12-10 09:49:53 -08:00
Bram Kragten cea40610c0 Add base trigger to struct (#10851) 2021-12-10 14:44:40 +01:00
Bram Kragten 0c3fd8f3ad typo login -> log in (#10850) 2021-12-10 14:41:09 +01:00
Paulus Schoutsen cdc3d11181 Merge pull request #10846 from home-assistant/dev 2021-12-09 14:05:30 -08:00
Paulus Schoutsen 02bdeebc82 Bumped version to 20211209.0 2021-12-09 13:39:03 -08:00
Bram Kragten 60c7669d8f Put set state in expansion panel (#10845) 2021-12-09 13:38:27 -08:00
Bram Kragten 919bf94a03 Only add milliseconds when enabled or if it has a value (#10842) 2021-12-09 13:38:03 -08:00
Bram Kragten ead5e288eb Use normal card color in narrow config screen too (#10843) 2021-12-09 13:37:45 -08:00
Bram Kragten add8a702cc Change select camera UI, remove manual QR input (#10844) 2021-12-09 13:37:30 -08:00
Paulus Schoutsen 39774c0e02 Allow trigger reconnect from external bus (#10819) 2021-12-09 13:30:20 -08:00
Joakim Sørensen 149f381bc3 Make dashboard entries translatable (#10831) 2021-12-09 09:59:27 -08:00
Bram Kragten faccb12430 Fix keep me logged in (#10835) 2021-12-09 09:57:11 -08:00
Paulus Schoutsen 7039bae9be Disable local only option for system generated users (#10827) 2021-12-09 11:22:32 +01:00
Bram Kragten 0a7b703d57 Clear warnings when yaml changes (#10820) 2021-12-08 09:12:09 +01:00
Joakim Sørensen 24e8028e8f Use _version_latest for change log URL (#10821) 2021-12-07 23:37:06 +01:00
Paulus Schoutsen 8f729e2a95 Merge pull request #10818 from home-assistant/dev 2021-12-06 15:21:37 -08:00
Paulus Schoutsen 8412cd71cb Bumped version to 20211206.0 2021-12-06 15:11:11 -08:00
Joakim Sørensen 5c78b74005 Reorder configuration (#10817) 2021-12-06 15:10:50 -08:00
Bram Kragten 2459477ec4 Add struct for state trigger and condition (#10811)
* Add struct for state trigger and condition

* remove `milliseconds` from struct
2021-12-06 20:13:32 +01:00
Raman Gupta a065740c91 zwave_js config param should only be a toggle if there are 2 states (#10812) 2021-12-06 10:49:23 -08:00
Bram Kragten f3104d3c93 Fix zwavejs provisioned view (#10809) 2021-12-06 10:47:35 -08:00
Paulus Schoutsen 1916c179b4 Merge pull request #10816 from spacegaier/issue-10751 2021-12-06 10:43:33 -08:00
Philip Allgaier e8b9766eb6 Fix camera stream rendering in area card without picture (#10815) 2021-12-06 10:39:09 -08:00
Philip Allgaier ff7a2c8cb7 Fix clearing of picture (e.g. area and person config) 2021-12-06 19:29:51 +01:00
Bram Kragten 7ccde2cb41 Fix disabled date input (#10813) 2021-12-06 17:25:23 +00:00
Bram Kragten d6b9b16f02 Add toggle for camera view in area card (#10810)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2021-12-06 18:02:32 +01:00
Joakim Sørensen 66df15007a Fetch cloud and updates on reconnect (#10808) 2021-12-06 12:54:16 +01:00
Philip Allgaier f164d21c44 Filter out invalid text input for input_text (#10797) 2021-12-06 12:53:45 +01:00
Philip Allgaier 911d322aac Mark more trigger fields as optional (#10798) 2021-12-06 12:52:38 +01:00
Joakim Sørensen 419879ee7a Fix core changelog URL (#10804) 2021-12-06 12:51:56 +01:00
Joakim Sørensen c3e1a2edf0 Use ha-logo-svg on info page (#10807) 2021-12-06 12:51:21 +01:00
Philip Allgaier 8f5751d5bb Use correct label in area card editor (#10799) 2021-12-05 12:09:06 -06:00
Philip Allgaier 4095450476 Add switch to input row domains to fix mobile focus issue (#10792) 2021-12-04 11:43:14 +01:00
Paulus Schoutsen bc9195f7d5 20211203.0 (#10788)
* Fix thingktalk dialog (#10600)

* Add picture uploader to area (#10544)

* Update image-cropper-dialog.ts

* WebRTC fix for Safari (#10602)

* Update MDI to v6.5.95 (#10618)

* Remove deprecated icons (#10622)

* Improve startup experience by removing AppBar skeleton (#10569)

* Correct ZHA LQI sort in device children dialog (#10616)

* Remove add-on store tab (#10624)

* Add markers-updated to ha-locations-editor (#10601)

* Use ha-form for onboarding-create-user (#10604)

* Fix datatable checkbox width (#10631)

* Move updates (#10626)

* Add correct button label to "no_state" statistics fix dialog (#10628)

* Update Lovelace Cast app ID (#10592)

* Cast fixes (#10598)

* Remove customize UI (#10632)

* Show updates on dashboard for dev (#10637)

* Area Card (#10141)

Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Bumped version to 20211117.0

* Fix back button color (#10650)

* Fix active tab (#10654)

* Remove ha-alert actionText (#10646)

* Use ha-formfield around backup checkbox (#10653)

* Simplify launch screen svg (#10643)

* Always render groups/areas in a single column (#10655)

* Send error message to sender (#10660)

* Add frequency device class for sensor (#10621)

* Fix color over slotted image in ha-alert (#10652)

* Make ha-chip-set slot-able (#10647)

* Remove core note on update page (#10661)

* Add iconColor to ha-config-navigation entries (#10658)

* Use white for icons with backgound (#10672)

* Fix color overlay in ha-alert content (#10674)

* Add scenes and scripts as buttons in footer of area cards (#10673)

* Add scenes and scripts as chips in footer of area cards

* Remove unused chips config type

* Update src/panels/lovelace/common/generate-lovelace-config.ts

Co-authored-by: Zack Barett <arnett.zackary@gmail.com>

* Fix typing

Co-authored-by: Zack Barett <arnett.zackary@gmail.com>

* Fix dark main-content and split gallery demo (#10675)

* Make "Show more" show everything starting from yesterday (#10533)

* Use component to ensure relative-time in Glance card gets updated (#10666)

* Limit setting up supervisor subscriptions to the supervisor panel (#10680)

* Remove first part of the update description (#10669)

* Fixing typo in #10626 (#10686)

* Bumped version to 20211123.0

* Update background colors of navigation icons (#10691)

* Render update card on add-on page (#10681)

* Fix addon slug (#10693)

* Improve device information when via device is unknown (#10685)

* Don't make button disabled on error (#10699)

* Use app-header-text-color (#10711)

* Finish up config changes (#10710)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Fix typo on config page + adjust icon color (#10713)

* Add ha-faded (#10651)

* Use `ha-icon-button` in `ha-icon-overflow-menu` (#10692)

* Prevent errors in `more-info-climate` if no modes are provided despite support flags (#10694)

* Make "Energy distribution today" translatable (#10696)

* Default to yaml editing when there are multiple states in condition (#10481)

* Filter out disabled entities in the statistics dev tools (#10677)

* Convert cover UI to Lit + ensure proper tilt rendering (#10671)

* Fixed ellipsis usage on graph legend entries. (#10707)

* Ensure required translations are loaded in safe-mode (#10709)

* Ensure markdown card input is a string (#10705)

* Fix chip text color variable overrides (#10722)

* Ensure `conditional` rows getting `state_color` value (#10708)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Fixed invalid hour handling in AMPM mode (#10717)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Installation type property during onboarding was misspelled (#10721)

* Dashboard tweaks (#10729)

* Tweak how scenes behave in generated lovelace (#10730)

* Bumped version to 20211130.0

* Improve hls stream view error handling (#10714)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Move companion app config from sidebar to configuration dashboard (#10733)

* Move companion app config from sidebar to configuration dashboard

* Remove translation refrence

* Fix typo (#10734)

* Revert 10711 (#10736)

* Use backend for day month stats in energy dashboard (#10728)

* Handle 0 updates and show back on supervisor panels (#10744)

* Hide ha-icon-next if narrow (#10746)

* Change the area of scenes in editor (#10731)

* Fix faded element in change log (#10737)

* Updated text (#10747)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Focus Add-ons & Backups in config panel when clicking Supervisor in sidebar (#10745)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Add SmartStart/QR scan support for Z-Wave JS (#10726)

* Show disabled entity names on the device page (#10743)

* Show disabled entity names on the device page

* Update src/panels/config/devices/device-detail/ha-device-entities-card.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Bumped version to 20211201.0

* Fix pointer/more-info inconsistencies for entity rows (#10025)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Make graph colors themable (#10698)

* Use puzzle for addons and blur entries on click (#10755)

* Fix create backup checkbox (#10756)

* Use unit system definitions for weather units (#10657)

* handle ha-radio and ha-checkbox in ha-formfield (#10759)

* Fix SU sidebar issues (#10757)

* Use add-ons for mobile header (#10760)

* Hide updates for dev as well (#10761)

* Remove thingtalk cleanup create new automation dialog (#10748)

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Add missing translation (#10769)

* Update hui-graph-header-footer.ts (#10476)

* Group entities in area card by domain (#10767)

* Group entities in area card by domain

* Update hui-area-card.ts

* Update

* Add background color when no image

* Add camera support

* exclude unavailable states

* Update hui-area-card.ts

* Use chips for button rows (#10770)

* Bumped version to 20211202.0

* Show add devices fab on devices page for ZJS (#10771)

* Add default icons for button entities (#10774)

* Remove handling of the supervisor panel from the sidebar (#10773)

* Tweak ZJS dashboard (#10772)

* Guard for non numeric states (#10775)

Co-authored-by: Joakim Sørensen <joasoe@gmail.com>

* Use correct styling for cloud certificate dialog (#10782)

* Allow overriding device class (#10777)

* Restore flex alignment for select and input-select rows (#10783)

* Add support for local only users (#10784)

Co-authored-by: Joakim Sørensen <joasoe@gmail.com>

* Differentiate between assigned and targeting scene/automations/script (#10781)

* Add provisioned device overview to zwave js (#10785)

* Use groupBy (#10786)

* Ensure we always have an active theme name (fixes dark theme issues) (#10780)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* safari doesnt support overflow-wrap: anywhere

* Fix entity marker (#10787)

* Bumped version to 20211203.0

Co-authored-by: Allen Porter <allen@thebends.org>
Co-authored-by: Michael Irigoyen <michael@irigoyen.dev>
Co-authored-by: Lasse Rosenow <10547444+LasseRosenow@users.noreply.github.com>
Co-authored-by: David F. Mulcahey <david.mulcahey@me.com>
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
Co-authored-by: Laszlo Magyar <lmagyar1973@gmail.com>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Nathan Orick <cnathanorick@gmail.com>
Co-authored-by: Luca Cavalli <lcavalli@users.noreply.github.com>
Co-authored-by: amitfin <amittein@gmail.com>
Co-authored-by: Matthias de Baat <hello@matthiasdebaat.com>
Co-authored-by: rianadon <ryanadolf123@gmail.com>
Co-authored-by: Carlos Garcia Saura <CarlosGS@users.noreply.github.com>
2021-12-03 09:36:27 -08:00
Bram Kragten e61f587c51 Bumped version to 20211203.0 2021-12-03 18:07:07 +01:00
Bram Kragten d43d19190e Fix entity marker (#10787) 2021-12-03 17:04:50 +00:00
Bram Kragten a283acaabf safari doesnt support overflow-wrap: anywhere 2021-12-03 18:04:03 +01:00
Philip Allgaier ea18fc0078 Ensure we always have an active theme name (fixes dark theme issues) (#10780)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-12-03 17:02:54 +00:00
Bram Kragten 1df11e9bf1 Use groupBy (#10786) 2021-12-03 08:42:23 -08:00
Bram Kragten c71b2e6b9d Add provisioned device overview to zwave js (#10785) 2021-12-03 08:34:26 -08:00
Bram Kragten db4aa05bf4 Differentiate between assigned and targeting scene/automations/script (#10781) 2021-12-03 08:21:26 -08:00
Bram Kragten a54a2a54f8 Add support for local only users (#10784)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-12-03 16:34:34 +01:00
Philip Allgaier 0bcb4d0e09 Restore flex alignment for select and input-select rows (#10783) 2021-12-03 16:19:00 +01:00
Bram Kragten 95dbc811d3 Allow overriding device class (#10777) 2021-12-03 16:07:49 +01:00
Philip Allgaier e28a11964e Use correct styling for cloud certificate dialog (#10782) 2021-12-03 15:08:49 +01:00
Bram Kragten 46a9e36516 Guard for non numeric states (#10775)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-12-03 12:53:50 +01:00
Paulus Schoutsen e99f20c4f3 Tweak ZJS dashboard (#10772) 2021-12-03 10:51:50 +01:00
Joakim Sørensen 2100603cdc Remove handling of the supervisor panel from the sidebar (#10773) 2021-12-03 10:49:42 +01:00
Joakim Sørensen da4942aca3 Add default icons for button entities (#10774) 2021-12-03 09:11:29 +01:00
Paulus Schoutsen 7c78fb314e Show add devices fab on devices page for ZJS (#10771) 2021-12-03 08:42:39 +01:00
Paulus Schoutsen 5bc2468cbc Bumped version to 20211202.0 2021-12-02 14:31:09 -08:00
Bram Kragten a580904c52 Use chips for button rows (#10770) 2021-12-02 23:29:52 +01:00
Bram Kragten 48d12ceafe Group entities in area card by domain (#10767)
* Group entities in area card by domain

* Update hui-area-card.ts

* Update

* Add background color when no image

* Add camera support

* exclude unavailable states

* Update hui-area-card.ts
2021-12-02 23:15:18 +01:00
Carlos Garcia Saura 60ce805b3b Update hui-graph-header-footer.ts (#10476) 2021-12-02 13:32:38 -08:00
Paulus Schoutsen 251416b51d Add missing translation (#10769) 2021-12-02 13:01:19 -08:00
Bram Kragten c41c6eedd8 Remove thingtalk cleanup create new automation dialog (#10748)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-12-02 11:26:41 -08:00
Joakim Sørensen 6877fd9e00 Hide updates for dev as well (#10761) 2021-12-02 17:32:18 +01:00
Joakim Sørensen 4cc104a99f Use add-ons for mobile header (#10760) 2021-12-02 17:31:41 +01:00
Joakim Sørensen 6494177821 Fix SU sidebar issues (#10757) 2021-12-02 17:31:09 +01:00
Joakim Sørensen cea1a62867 handle ha-radio and ha-checkbox in ha-formfield (#10759) 2021-12-02 17:30:10 +01:00
rianadon a6b5262d02 Use unit system definitions for weather units (#10657) 2021-12-02 17:27:23 +01:00
Joakim Sørensen 2a5fc5181e Fix create backup checkbox (#10756) 2021-12-02 11:54:05 +01:00
Joakim Sørensen 2fe8f5ff27 Use puzzle for addons and blur entries on click (#10755) 2021-12-02 11:05:14 +01:00
Philip Allgaier 0c75d5afc9 Make graph colors themable (#10698) 2021-12-02 10:49:46 +01:00
Philip Allgaier cf062bf0f4 Fix pointer/more-info inconsistencies for entity rows (#10025)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-12-02 10:48:30 +01:00
Paulus Schoutsen acf4d59fde Bumped version to 20211201.0 2021-12-01 14:47:17 -08:00
Paulus Schoutsen 05333ac2d9 Show disabled entity names on the device page (#10743)
* Show disabled entity names on the device page

* Update src/panels/config/devices/device-detail/ha-device-entities-card.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-12-01 14:46:40 -08:00
Bram Kragten 4b49da58b1 Add SmartStart/QR scan support for Z-Wave JS (#10726) 2021-12-01 14:12:52 -08:00
Joakim Sørensen 68373e6372 Focus Add-ons & Backups in config panel when clicking Supervisor in sidebar (#10745)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-12-01 08:46:38 -08:00
Matthias de Baat 01049e8eb8 Updated text (#10747)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-12-01 14:10:32 +00:00
Joakim Sørensen 87f7981144 Fix faded element in change log (#10737) 2021-12-01 13:55:01 +01:00
Paulus Schoutsen ceac9834b9 Change the area of scenes in editor (#10731) 2021-12-01 13:54:28 +01:00
Joakim Sørensen ac8f748656 Hide ha-icon-next if narrow (#10746) 2021-12-01 09:23:13 +01:00
Joakim Sørensen 1d97d8dca9 Handle 0 updates and show back on supervisor panels (#10744) 2021-11-30 23:30:38 -08:00
Bram Kragten fd6785b593 Use backend for day month stats in energy dashboard (#10728) 2021-11-30 09:22:06 -08:00
Joakim Sørensen d5fc751da6 Revert 10711 (#10736) 2021-11-30 18:02:02 +01:00
Joakim Sørensen 933fd72629 Fix typo (#10734) 2021-11-30 11:41:59 -05:00
Joakim Sørensen 0611133065 Move companion app config from sidebar to configuration dashboard (#10733)
* Move companion app config from sidebar to configuration dashboard

* Remove translation refrence
2021-11-30 08:03:10 -08:00
Allen Porter 02644b923f Improve hls stream view error handling (#10714)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-30 08:48:24 +01:00
Paulus Schoutsen 67f06112c6 Bumped version to 20211130.0 2021-11-29 16:57:58 -08:00
Paulus Schoutsen 49e39644f3 Tweak how scenes behave in generated lovelace (#10730) 2021-11-29 16:56:08 -08:00
Joakim Sørensen 990ad1bb67 Dashboard tweaks (#10729) 2021-11-29 23:56:59 +01:00
Philip Allgaier dbbf246060 Installation type property during onboarding was misspelled (#10721) 2021-11-29 14:41:21 -08:00
amitfin d2c20837a5 Fixed invalid hour handling in AMPM mode (#10717)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-29 18:49:33 +00:00
Philip Allgaier e91d1777d0 Ensure conditional rows getting state_color value (#10708)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-29 12:30:08 +01:00
Joakim Sørensen a5be143c3b Fix chip text color variable overrides (#10722) 2021-11-29 11:31:49 +01:00
Philip Allgaier 0ef07e4835 Ensure markdown card input is a string (#10705) 2021-11-29 10:50:08 +01:00
Philip Allgaier 9361e4cf9c Ensure required translations are loaded in safe-mode (#10709) 2021-11-29 10:34:25 +01:00
Luca Cavalli e7fd75703f Fixed ellipsis usage on graph legend entries. (#10707) 2021-11-29 10:30:27 +01:00
Philip Allgaier 2c0b2f4bc5 Convert cover UI to Lit + ensure proper tilt rendering (#10671) 2021-11-29 10:30:14 +01:00
Philip Allgaier faec09f0d1 Filter out disabled entities in the statistics dev tools (#10677) 2021-11-29 10:19:33 +01:00
Nathan Orick b79c06ad71 Default to yaml editing when there are multiple states in condition (#10481) 2021-11-29 10:14:09 +01:00
Philip Allgaier 5614e0d29c Make "Energy distribution today" translatable (#10696) 2021-11-29 10:09:54 +01:00
Philip Allgaier 0b7fc177f9 Prevent errors in more-info-climate if no modes are provided despite support flags (#10694) 2021-11-29 10:03:30 +01:00
Philip Allgaier 367322415e Use ha-icon-button in ha-icon-overflow-menu (#10692) 2021-11-29 09:58:34 +01:00
Joakim Sørensen 117b50f3ea Add ha-faded (#10651) 2021-11-28 22:27:53 -08:00
Philip Allgaier 366aa8aed1 Fix typo on config page + adjust icon color (#10713) 2021-11-28 17:52:39 +01:00
Joakim Sørensen 43011179eb Finish up config changes (#10710)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-26 17:24:30 +01:00
Joakim Sørensen 6177d2b416 Use app-header-text-color (#10711) 2021-11-26 17:11:06 +01:00
Joakim Sørensen f70485bc49 Don't make button disabled on error (#10699) 2021-11-25 16:56:57 +01:00
Erik Montnemery 921763b5f1 Improve device information when via device is unknown (#10685) 2021-11-24 09:09:21 +01:00
Joakim Sørensen 5fd4315789 Fix addon slug (#10693) 2021-11-23 08:53:17 -08:00
Joakim Sørensen ed291b57d0 Render update card on add-on page (#10681) 2021-11-23 08:18:40 -08:00
Joakim Sørensen f833701e7c Update background colors of navigation icons (#10691) 2021-11-23 14:36:11 +01:00
Paulus Schoutsen 8533b90957 Bumped version to 20211123.0 2021-11-22 17:28:13 -08:00
Laszlo Magyar c95a54c6f3 Fixing typo in #10626 (#10686) 2021-11-22 18:59:35 +01:00
Joakim Sørensen a991640f52 Remove first part of the update description (#10669) 2021-11-22 09:09:23 -08:00
Joakim Sørensen 3d99b92c07 Limit setting up supervisor subscriptions to the supervisor panel (#10680) 2021-11-22 08:59:28 -08:00
Philip Allgaier d28ad17135 Use component to ensure relative-time in Glance card gets updated (#10666) 2021-11-22 11:12:04 +01:00
Philip Allgaier 3c67fc96b1 Make "Show more" show everything starting from yesterday (#10533) 2021-11-22 10:56:40 +01:00
Joakim Sørensen 4719636176 Fix dark main-content and split gallery demo (#10675) 2021-11-21 21:01:51 -08:00
Paulus Schoutsen 45efee28b8 Add scenes and scripts as buttons in footer of area cards (#10673)
* Add scenes and scripts as chips in footer of area cards

* Remove unused chips config type

* Update src/panels/lovelace/common/generate-lovelace-config.ts

Co-authored-by: Zack Barett <arnett.zackary@gmail.com>

* Fix typing

Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2021-11-21 20:59:56 -08:00
Joakim Sørensen 3bcf225380 Fix color overlay in ha-alert content (#10674) 2021-11-21 20:16:19 +01:00
Joakim Sørensen 2e81f843ce Use white for icons with backgound (#10672) 2021-11-21 18:07:55 +00:00
Joakim Sørensen a430142296 Add iconColor to ha-config-navigation entries (#10658) 2021-11-21 09:52:58 -08:00
Joakim Sørensen 6335b13c5e Remove core note on update page (#10661) 2021-11-21 09:16:06 -08:00
Joakim Sørensen 6c4e987a24 Make ha-chip-set slot-able (#10647) 2021-11-21 09:15:38 -08:00
Joakim Sørensen 1a5c43d72a Fix color over slotted image in ha-alert (#10652) 2021-11-21 09:13:48 -08:00
epenet 91dbfca899 Add frequency device class for sensor (#10621) 2021-11-21 05:05:32 +01:00
Bram Kragten 96f103644a Send error message to sender (#10660) 2021-11-19 13:22:49 -08:00
Paulus Schoutsen 5304e5a670 Always render groups/areas in a single column (#10655) 2021-11-19 13:16:43 -08:00
Lasse Rosenow 390e5b3881 Simplify launch screen svg (#10643) 2021-11-18 16:20:45 -08:00
Joakim Sørensen 9f5756c9fa Use ha-formfield around backup checkbox (#10653) 2021-11-18 16:09:39 -08:00
Joakim Sørensen 0ca35d7012 Remove ha-alert actionText (#10646) 2021-11-18 16:09:13 -08:00
Joakim Sørensen 0d19f4792f Fix active tab (#10654) 2021-11-18 19:21:19 +00:00
Joakim Sørensen 91b009af79 Fix back button color (#10650) 2021-11-18 18:57:15 +01:00
Paulus Schoutsen 1ebd2fb9f1 Bumped version to 20211117.0 2021-11-17 10:54:08 -08:00
Zack Barett 4684979ae7 Area Card (#10141)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-11-17 19:43:41 +01:00
Joakim Sørensen a567312bdb Show updates on dashboard for dev (#10637) 2021-11-17 18:39:16 +00:00
Joakim Sørensen 1e851e0e8c Remove customize UI (#10632) 2021-11-17 10:34:20 -08:00
Bram Kragten 7d94615f47 Cast fixes (#10598) 2021-11-17 10:33:15 -08:00
Bram Kragten 582fab7ea1 Update Lovelace Cast app ID (#10592) 2021-11-17 10:32:15 -08:00
Philip Allgaier 822590ec8a Add correct button label to "no_state" statistics fix dialog (#10628) 2021-11-17 10:22:34 -08:00
Joakim Sørensen e9f0967578 Move updates (#10626) 2021-11-17 10:21:27 -08:00
Joakim Sørensen 481da19c74 Fix datatable checkbox width (#10631) 2021-11-16 19:46:41 +01:00
Joakim Sørensen b969db0c0f Use ha-form for onboarding-create-user (#10604) 2021-11-15 14:21:29 -08:00
Joakim Sørensen a6b98fc3c3 Add markers-updated to ha-locations-editor (#10601) 2021-11-15 14:11:42 -08:00
Joakim Sørensen 87c2046ab5 Remove add-on store tab (#10624) 2021-11-15 09:15:20 -08:00
David F. Mulcahey 4b992fb0c4 Correct ZHA LQI sort in device children dialog (#10616) 2021-11-15 09:11:31 -08:00
Lasse Rosenow 3154011c65 Improve startup experience by removing AppBar skeleton (#10569) 2021-11-15 07:54:59 -08:00
Bram Kragten 4e68383cf7 Remove deprecated icons (#10622) 2021-11-15 11:54:59 +01:00
Michael Irigoyen db6ef22ebb Update MDI to v6.5.95 (#10618) 2021-11-15 09:49:53 +01:00
Allen Porter c238c7dbbc WebRTC fix for Safari (#10602) 2021-11-11 10:48:56 +01:00
Bram Kragten d04823b4c5 Update image-cropper-dialog.ts 2021-11-10 22:55:05 +01:00
Bram Kragten 4cb45d6313 Add picture uploader to area (#10544) 2021-11-10 21:42:43 +01:00
Bram Kragten 6623e5f017 Fix thingktalk dialog (#10600) 2021-11-10 19:36:18 +00:00
Bram Kragten 7f1a321075 Merge pull request #10590 from home-assistant/dev 2021-11-09 22:06:29 +01:00
Bram Kragten 6518aefb7f Prevent cast timeout after 10 mins, show current shown Lovelace view (#10586) 2021-11-09 21:53:40 +01:00
Bram Kragten d5600b7c08 Bumped version to 20211109.0 2021-11-09 21:42:04 +01:00
Philip Allgaier 4789295d32 Add CSS var for ha-dialog border radius (#10424) 2021-11-09 17:24:39 +01:00
Philip Allgaier 70d54aa855 Ensure theme picker row uses correct theme name (#10589) 2021-11-09 17:22:48 +01:00
Bram Kragten 77549efc47 Bump codemirror (#10588) 2021-11-09 16:10:42 +01:00
Bram Kragten 00299bc74d Fix multi select ha-form (#10585) 2021-11-09 16:10:26 +01:00
Philip Allgaier b74fc5578d Consistently show a close button for config dialogs (#10587) 2021-11-09 13:52:56 +00:00
Bram Kragten 9018d4cc18 Update translations 2021-11-08 19:58:29 +01:00
Bram Kragten 72b9f8636d Merge pull request #10578 from home-assistant/dev 2021-11-08 18:54:44 +01:00
Bram Kragten fcdceba09d Bumped version to 20211108.0 2021-11-08 18:30:59 +01:00
Bram Kragten 06d4ccf344 Allow create zone without icon + add icon picker (#10447) 2021-11-08 09:29:10 -08:00
Bram Kragten a268040ae7 Fix datetime polyfill for latest build (#10572) 2021-11-08 09:28:27 -08:00
Bram Kragten 67d79d618a Allow to input decimal in ha-form-float (#10575) 2021-11-08 09:28:17 -08:00
Bram Kragten c9cd316c0c Play dummy media to prevent app from closing (#10531) 2021-11-08 13:04:22 +01:00
Philip Allgaier 0e8a06e24d Use correct darkMode flag for image variant selection (#10574) 2021-11-08 11:41:17 +01:00
rianadon d7732ee850 Improve accessibility on login page (#9731) 2021-11-08 10:29:34 +01:00
H. Árkosi Róbert 729a928cfe Update connectivity icons (#10558) 2021-11-08 10:27:08 +01:00
Paulus Schoutsen fe5a582a74 Filter out entities when expanding device in target (#10570) 2021-11-08 10:22:52 +01:00
Bram Kragten c26a59d805 Format timestamp sensor states (#10525) 2021-11-05 12:01:14 +01:00
chriss158 ea331dbe0b Fix cut off slider value (#10250) 2021-11-05 11:55:03 +01:00
Bram Kragten b97d6d7059 Play dummy media to prevent app from closing (#10531) 2021-11-04 10:12:07 -07:00
Bram Kragten 9425b943dd Add separate cast media entrypoint (with ES5) (#10527) 2021-11-04 10:09:21 -07:00
Joakim Sørensen 3fd0becfd4 Update registry dialog (#10524) 2021-11-04 13:47:53 +01:00
Joakim Sørensen 12ef191a0f Handle missing hass with backup upload during onboarding (#10523) 2021-11-04 13:47:30 +01:00
Marius 2bbb4acf3d change switch icon to mdiToggleSwitch (#10475)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-04 13:37:38 +01:00
Marius 77d54df007 Add Bluetooth source_type icon (#10507)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-04 12:18:36 +01:00
Zack Barett 1c35571ef0 Fix Device Page (#10513) 2021-11-04 10:41:30 +01:00
Bram Kragten c8804160bf Add basic support for button entity (#10504) 2021-11-03 15:38:52 -07:00
Marius 0a6ffb6bc8 change device_tracker icon to reflect state (#10501)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-11-03 11:59:39 +01:00
Bram Kragten 6cf3580fb4 Merge pull request #10506 from home-assistant/dev 2021-11-03 11:02:34 +01:00
Bram Kragten 6984f19aa0 Bumped version to 20211103.0 2021-11-03 10:35:17 +01:00
Paulus Schoutsen cb8de53d74 Dynamic align light effects dropdown (#10503) 2021-11-02 15:46:26 +00:00
Simone Chemelli 93680b9764 Improve icons for plant status card (#10493) 2021-11-02 13:34:46 +01:00
Bram Kragten 3cf9b745b5 Add more domains to sensor group, strip device name from disabled entities (#10490) 2021-11-01 15:55:55 +01:00
Nico Hirsch 5851fe26ff dialog-backdrop-filter fix for Safari (#10485) 2021-11-01 11:48:56 +01:00
Josh McCarty b188c4ec81 Measurement number format (#10459) 2021-11-01 09:32:22 +01:00
Bram Kragten 4624c3d75b Fix missing import (#10456) 2021-10-28 20:53:49 -05:00
Bram Kragten 5d91aefb55 Merge pull request #10453 from home-assistant/dev 2021-10-28 20:24:05 +02:00
Bram Kragten 7d196b4b95 Bumped version to 20211028.0 2021-10-28 20:06:14 +02:00
Bram Kragten 6347e44d94 Energy: Dont shrink today button (#10451) 2021-10-28 20:03:28 +02:00
Allen Porter 719d9386c5 Render Nest battery cam vertical video on screen correctly (#10431)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-28 18:02:06 +00:00
Bram Kragten bb734be4bc Remove keep logged in query string after login, dont show on select_mfa_module step (#10439) 2021-10-28 19:05:30 +02:00
Bram Kragten 7cadaf1dc3 Use min value instead of hard coded 0 (#10443) 2021-10-28 17:16:09 +02:00
Bram Kragten c30453a86f Fix title though close button in config/options flow (#10444) 2021-10-28 17:15:55 +02:00
Bram Kragten c2e3d0188e Update translations 2021-10-28 17:06:48 +02:00
Bram Kragten aabb8ea16f Fix camera more info pre load toggle (#10442) 2021-10-28 16:03:08 +02:00
Paul Bottein df572d59c5 Custom iconsets in Icon Picker (#10399)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-28 13:28:14 +00:00
Allen Porter 5ef7a37c20 Fix for Nest WebRTC cams to not require stream component (#10432) 2021-10-28 13:47:15 +02:00
Paulus Schoutsen 4b44e197ae ha-form-integer to only show slider if < 256 steps (#10430) 2021-10-28 13:44:25 +02:00
Joakim Sørensen 8b5b21ae69 Fix icon overrides in logbook (#10434) 2021-10-28 13:43:14 +02:00
Joakim Sørensen f5417fad6f Fix alignment in card editor elements (#10428) 2021-10-28 13:39:18 +02:00
Philip Allgaier 7fa6317f5c Invert "update" binary sensor device class color (#10427) 2021-10-28 11:50:52 +02:00
Paul Bottein 74533cebc6 Use tags and aliases when filtering icons in Icon Picker (#10425) 2021-10-27 20:12:12 +00:00
Bram Kragten e3c0530941 Merge pull request #10426 from home-assistant/dev 2021-10-27 21:16:47 +02:00
Bram Kragten 10986db7c6 Bumped version to 20211027.0 2021-10-27 21:03:31 +02:00
Joakim Sørensen 67648baca7 Fix Keep me logged in (#10422) 2021-10-27 15:40:24 +02:00
Joakim Sørensen dc9182e9ab Fix missing logbook icons (#10423) 2021-10-27 15:39:39 +02:00
Paulus Schoutsen 4a7a81ffdb Improve rendering person card (#10419) 2021-10-27 15:38:57 +02:00
Joakim Sørensen 09ef72647e Add running to not inverted (#10420) 2021-10-27 09:17:53 +02:00
Paulus Schoutsen da38e6f986 Hide script/sun from generated Lovelace (#10418) 2021-10-27 08:20:50 +02:00
Bram Kragten bd1a9f2cb0 Add support for external stats (#10411) 2021-10-26 23:15:57 -07:00
Paulus Schoutsen 2c9223ed80 Merge pull request #10415 from home-assistant/dev (#10415)
* Use MWC components for ha-form (#10120)

* Dont create icon for supervisor (#10191)

* Fix import (#10206)

* Add "gas" device_class to customize (and sort existing ones) (#10196)

* Make zone names readable on map in dark mode (#10195)

* Tweak ha-form (#10194)

* Extract black/white row into component (#10212)

* Extract black/white row into component

* Remove unused import

* Fix dirty check/leaving automation editor (#10211)

* Add selector demo to gallery (#10213)

* Fix icon overlay for person badges (#10201)

* Convert iframe panel to Lit (#10216)

* Allow disabling an ha-form (#10218)

* Fix alarm panel badge (#10221)

* Add missing validation text (#10225)

* Apply flat polyfill globally (#10222)

* Add ha-bar to gallery (#10242)

* Handle text overflow for tabs (#10239)

* Remove "battery" device class from fixed icon list (#10246)

* Add ha-chip to gallery (#10252)

* Add netlify build script for gallery (#10253)

* Add ha-label-badge to gallery (#10248)

* Use correct build url (#10258)

* Remove "Hass.io" from translation (#10257)

* Update demo template (#10256)

* Add WebRTC stream player (#10193)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Add tamper device class for binary sensor (#10268)

* Fix missing translatable energy texts (#10230)

* Consolidate all icon button logic into `<ha-icon-button>` + ensure tooltip (#9230)

* Fix sizing / positioning error for trace graph node with subsequent branches (#10049)

* Initial support for entity category (#10266)

* Add support for device configuration URL (#10251)

* Add support for device configuration URL

* Lint

* Tweak text

* Bump mdc/mwc to 0.25.2 (#10271)

* Bumped version to 20211014.0

* Warn if iframe won't be able to load the website (#10217)

* Disable ha-form while submitting entry flow (#10290)

* Convert all warning classes to ha-alert (#10289)

* ABC automation types + use MWC (#10287)

* Add "capitalize" option to `hui-timestamp-display` (#10280)

* Add additional binary device classes to inversion list (#10152)

* Fix energy onboarding `add_solar_production` button (#10275) (#10286)

* Unify default dashboard name (#10254)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Fix icon buttons in Safari (#10293)

* Only render badge value if there is no icon and no image (#10310)

* Update MDI to v6.3.95 (#10313)

* Rename `stream_type` to `frontend_stream_type` (#10298)

* Fix translation key energy distribution solar (#10316)

* Prevent mwc-list-item from opening up quick-bar (#10317)

* Remove element resize hook (#10300)

* Improve WebRTC stream error handling and cleanup (#10302)

* Fix formatting of weather extrema temperatures (#10306)

* Ensure current active dark modes gets used for manually set themes (#10307)

* Add views dropdown and footer actions to the "move to view" dialog (#10172)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Icon Picker (#10161)

* Use maxLiveSyncPlaybackRate in ha-hls-player (#10323)

* Revise grid neutrality energy dashboard card, modify energy dashboard presentation to match (#10054)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Fix `ha-icon-button` in `ha-file-upload` (#10328)

* Use error for protection mode alert (#10315)

* Change unsupported reason container to software (#10325)

* Migrate all paper checkbox elements to mwc (#10329)

* Migrate all paper-radio elements to mwc-radio (#10327)

* Correct grid neutrality card tooltip, make consistent with new colors (#10326)

* Fix select options for add-on config (#10330)

* Migrate all paper dialogs to mwc (#10333)

* Stack gas and solar sources (#10244)

* Set default value when enabling optional value (#10247)

* Fix overflow icon color in backup dialog (#10331)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Convert default state icons (#10223)

* Convert default state icons

* update

* Update cast/src/launcher/layout/hc-cast.ts

Co-authored-by: Philip Allgaier <mail@spacegaier.de>

* Update ha-config-core.js

* Update

* Finish

* Add siren icon

* FIx

* Add curtain icons

Co-authored-by: Philip Allgaier <mail@spacegaier.de>

* Use secondary-text-color for trailing icon (#10340)

* Use svg icons for default panels (#10342)

* Tweak icon picker a bit (#10319)

* Add support for `no-state` and `entity-no-longer-available` statistic… (#10345)

* Change dark mode input fill color (#10341)

* Replace paper progress with mwc-linear-progess (#10339)

* Bumped version to 20211020.0

* Add auto slider/box mode to number entity (#10272)

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Correct automation editor event action translation (#10355)

* Convert cloud account config to Lit (#10350)

* Restore proper state badge image behavior (#10369)

* Add to do list support to markdown (#10129)

* Catch error if input_datetime state is incorrect (#10237)

* Update MDI to v6.4.95 (#10389)

* Remove deprecated icons that where replaced (#10371)

* Make all automation type pickers use natural width to be able to show… (#10391)

* Trim device name from entities on device page (#10285)

* Update markdown card to allow word to be broken (#10387)

* Fix Full Calendar Background color (#10373)

* Add additional properties to zwave_js device info panel (#10132)

* Fix various `slugify()` issues + add tests (#10383)

* Add stopPropagation to move click handlers (#10379)

* Use ha-chip for alarm control panel card (#10393)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Fix timezone issues with date formatting for ES5 (#10370)

* Add automation editor to gallery (#10392)

* Use ha-chip instead of ha-label-badge for add-on capabilities (#10398)

* Do not close edit dialog when more info is escaped (#10249)

* Ensure Sortable is recreated when card editors are reopened (#10382)

* Ensure explicit `false` values from customize form get stored (#10381)

* Add running device class to binary sensor (#10400)

* Ensure consistent card look on device config page (#10386)

* Add "Keep me logged in" checkbox within login flow (#10226)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update delay label (#10284)

* Introduced ha-icon-overflow-menu component (#10352)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Use ha-alert to warn about logs from custom integrations (#10396)

* Add support for hiding current weather in forecast card (#10267)

* Allow configuration_url to point to an internal panel (#10395)

* Bump Lit (#10409)

* Bump format js (#10405)

* Bump codemirror (#10404)

* Bump and patch material elements (#10406)

* Add blueprint scripts (#9504)

* Make device classes in logbook translatable (#10376)

* Improve device info add to Lovelace (#10413)

* Add navigation option from more-info to history (#9717)

* Move entities to center column on device page (#10412)

* Bumped version to 20211026.0

* Shrink new section titles in more-info dialog a bit (#10414)

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Jack Wilsdon <jack.wilsdon@gmail.com>
Co-authored-by: Josh McCarty <josh@joshmccarty.com>
Co-authored-by: Erik Montnemery <erik@montnemery.com>
Co-authored-by: Allen Porter <allen.porter@gmail.com>
Co-authored-by: Franck Nijhof <git@frenck.dev>
Co-authored-by: chriss158 <edgi@arcor.de>
Co-authored-by: Kyle Niewiada <aav7fl@users.noreply.github.com>
Co-authored-by: MartinT <44962077+MartinTuroci@users.noreply.github.com>
Co-authored-by: Michael Irigoyen <michael@irigoyen.dev>
Co-authored-by: Allen Porter <allen@thebends.org>
Co-authored-by: Paul Bottein <paul.bottein@gmail.com>
Co-authored-by: uvjustin <46082645+uvjustin@users.noreply.github.com>
Co-authored-by: Will Adler <will@wtadler.com>
Co-authored-by: Rogério Ribeiro <zroger499@gmail.com>
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
Co-authored-by: Raman Gupta <7243222+raman325@users.noreply.github.com>
Co-authored-by: Nathan Orick <cnathanorick@gmail.com>
Co-authored-by: Tobias Kündig <tobias@offline.ch>
Co-authored-by: Marc Hörsken <mback2k@users.noreply.github.com>
2021-10-26 13:35:46 -07:00
Philip Allgaier 171eddd779 Shrink new section titles in more-info dialog a bit (#10414) 2021-10-26 22:19:37 +02:00
Paulus Schoutsen 7acc2f9e08 Merge remote-tracking branch 'origin/master' into dev 2021-10-26 13:13:54 -07:00
Paulus Schoutsen 27a6341137 Bumped version to 20211026.0 2021-10-26 13:12:06 -07:00
Paulus Schoutsen 6c5e15e707 Move entities to center column on device page (#10412) 2021-10-26 12:48:05 -07:00
Philip Allgaier 06b1718ade Add navigation option from more-info to history (#9717) 2021-10-26 21:12:52 +02:00
Paulus Schoutsen e50d2e16a7 Improve device info add to Lovelace (#10413) 2021-10-26 21:03:19 +02:00
Philip Allgaier 0b2404a0f2 Make device classes in logbook translatable (#10376) 2021-10-26 21:00:28 +02:00
Bram Kragten 371804591d Add blueprint scripts (#9504) 2021-10-26 09:32:40 -07:00
Bram Kragten 54c64c15f3 Bump and patch material elements (#10406) 2021-10-26 16:39:35 +02:00
Bram Kragten 0e1124cd4f Bump codemirror (#10404) 2021-10-26 16:28:13 +02:00
Bram Kragten 70fd759e18 Bump format js (#10405) 2021-10-26 14:24:14 +02:00
Bram Kragten 8e383b2bec Bump Lit (#10409) 2021-10-26 14:23:18 +02:00
Joakim Sørensen 63cd576d56 Allow configuration_url to point to an internal panel (#10395) 2021-10-26 13:24:08 +02:00
Marc Hörsken 32ac04ea78 Add support for hiding current weather in forecast card (#10267) 2021-10-26 10:18:26 +00:00
Joakim Sørensen 5d6bacb0bd Use ha-alert to warn about logs from custom integrations (#10396) 2021-10-26 12:11:27 +02:00
Tobias Kündig 398d777681 Introduced ha-icon-overflow-menu component (#10352)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-26 12:10:53 +02:00
Paulus Schoutsen 549a360d98 Update delay label (#10284) 2021-10-26 12:09:35 +02:00
MartinT 1140e6026c Add "Keep me logged in" checkbox within login flow (#10226)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-26 12:05:13 +02:00
Philip Allgaier 29a1167782 Ensure consistent card look on device config page (#10386) 2021-10-26 11:12:27 +02:00
Joakim Sørensen d61a77f2d9 Add running device class to binary sensor (#10400) 2021-10-25 23:05:35 +02:00
Philip Allgaier b9bde1960b Ensure explicit false values from customize form get stored (#10381) 2021-10-25 20:33:26 +02:00
Nathan Orick a12c2eea5d Ensure Sortable is recreated when card editors are reopened (#10382) 2021-10-25 19:49:00 +02:00
MartinT b5c717a559 Do not close edit dialog when more info is escaped (#10249) 2021-10-25 19:48:17 +02:00
Joakim Sørensen 3adbc4cfaf Use ha-chip instead of ha-label-badge for add-on capabilities (#10398) 2021-10-25 18:25:37 +02:00
Paulus Schoutsen dd11fb1b99 Add automation editor to gallery (#10392) 2021-10-25 15:53:32 +00:00
Bram Kragten bf0d102c86 Fix timezone issues with date formatting for ES5 (#10370) 2021-10-25 08:33:15 -07:00
Joakim Sørensen dad2b92d2e Use ha-chip for alarm control panel card (#10393)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-25 15:28:29 +00:00
Nathan Orick d027ec0018 Add stopPropagation to move click handlers (#10379) 2021-10-25 17:08:30 +02:00
Philip Allgaier 0c038398aa Fix various slugify() issues + add tests (#10383) 2021-10-25 16:26:38 +02:00
Raman Gupta 5c3e0cc016 Add additional properties to zwave_js device info panel (#10132) 2021-10-25 16:13:59 +02:00
Zack Barett 9bcd26ce57 Fix Full Calendar Background color (#10373) 2021-10-25 15:23:55 +02:00
Rogério Ribeiro 3e8a6c418c Update markdown card to allow word to be broken (#10387) 2021-10-25 12:43:38 +00:00
Paulus Schoutsen 279f3e1183 Trim device name from entities on device page (#10285) 2021-10-25 12:56:33 +02:00
Paulus Schoutsen f77339ad85 Make all automation type pickers use natural width to be able to show… (#10391) 2021-10-25 12:55:26 +02:00
Bram Kragten da73b316ff Remove deprecated icons that where replaced (#10371) 2021-10-25 12:12:16 +02:00
Michael Irigoyen 82a49d2cbf Update MDI to v6.4.95 (#10389) 2021-10-25 11:00:32 +02:00
Bram Kragten 05711b4636 Catch error if input_datetime state is incorrect (#10237) 2021-10-22 09:46:58 -07:00
Kyle Niewiada 2c2809573f Add to do list support to markdown (#10129) 2021-10-22 08:49:00 -07:00
Philip Allgaier bbbeafcc92 Restore proper state badge image behavior (#10369) 2021-10-22 14:09:23 +02:00
Bram Kragten 95c6adc739 Convert cloud account config to Lit (#10350) 2021-10-21 09:49:55 -07:00
Philip Allgaier 7c2e0aea92 Correct automation editor event action translation (#10355) 2021-10-21 15:14:26 +02:00
Franck Nijhof d05c76356f Add auto slider/box mode to number entity (#10272)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-10-20 22:12:44 -07:00
Paulus Schoutsen f1a0623447 Bumped version to 20211020.0 2021-10-20 16:06:35 -07:00
Bram Kragten 41d02fdb72 Replace paper progress with mwc-linear-progess (#10339) 2021-10-20 15:56:20 -07:00
Bram Kragten 52d45d482c Change dark mode input fill color (#10341) 2021-10-20 15:55:40 -07:00
Bram Kragten a0fea94db2 Add support for no-state and entity-no-longer-available statistic… (#10345) 2021-10-20 15:55:09 -07:00
Bram Kragten c3975e48d9 Tweak icon picker a bit (#10319) 2021-10-20 21:03:18 +02:00
Bram Kragten f062e13921 Use svg icons for default panels (#10342) 2021-10-20 15:33:12 +02:00
Joakim Sørensen 08ca9c9064 Use secondary-text-color for trailing icon (#10340) 2021-10-20 12:51:41 +02:00
Bram Kragten 667fd39147 Convert default state icons (#10223)
* Convert default state icons

* update

* Update cast/src/launcher/layout/hc-cast.ts

Co-authored-by: Philip Allgaier <mail@spacegaier.de>

* Update ha-config-core.js

* Update

* Finish

* Add siren icon

* FIx

* Add curtain icons

Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-10-20 11:10:16 +02:00
Joakim Sørensen b760e543b0 Fix overflow icon color in backup dialog (#10331)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-20 08:41:56 +00:00
Bram Kragten 760ead4860 Set default value when enabling optional value (#10247) 2021-10-19 21:45:41 -07:00
Bram Kragten 9a4cce74f0 Stack gas and solar sources (#10244) 2021-10-19 21:44:41 -07:00
Bram Kragten 7488eb782d Migrate all paper dialogs to mwc (#10333) 2021-10-19 13:56:49 -07:00
Joakim Sørensen b1e6935df9 Fix select options for add-on config (#10330) 2021-10-19 22:54:07 +02:00
Will Adler df53364d16 Correct grid neutrality card tooltip, make consistent with new colors (#10326) 2021-10-19 22:53:06 +02:00
Bram Kragten 777e6c4c72 Migrate all paper-radio elements to mwc-radio (#10327) 2021-10-19 13:42:30 -07:00
Bram Kragten e47a5effe6 Migrate all paper checkbox elements to mwc (#10329) 2021-10-19 13:31:24 -07:00
Joakim Sørensen 62d3f74513 Change unsupported reason container to software (#10325) 2021-10-19 18:37:38 +02:00
Joakim Sørensen 21e1fef0fb Use error for protection mode alert (#10315) 2021-10-19 18:37:22 +02:00
Philip Allgaier b3f8daa758 Fix ha-icon-button in ha-file-upload (#10328) 2021-10-19 16:24:11 +00:00
Will Adler 04f586721f Revise grid neutrality energy dashboard card, modify energy dashboard presentation to match (#10054)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-19 13:48:59 +02:00
uvjustin 8e22e41605 Use maxLiveSyncPlaybackRate in ha-hls-player (#10323) 2021-10-19 10:38:57 +02:00
Paul Bottein 2770d1f36b Icon Picker (#10161) 2021-10-18 22:45:21 +02:00
MartinT 403c042235 Add views dropdown and footer actions to the "move to view" dialog (#10172)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-18 20:27:00 +00:00
Philip Allgaier bdb3c04037 Ensure current active dark modes gets used for manually set themes (#10307) 2021-10-18 22:09:21 +02:00
Philip Allgaier f1cb21e7fc Fix formatting of weather extrema temperatures (#10306) 2021-10-18 22:07:16 +02:00
Allen Porter a8486eda9f Improve WebRTC stream error handling and cleanup (#10302) 2021-10-18 22:06:42 +02:00
Allen Porter d5b98d306d Remove element resize hook (#10300) 2021-10-18 22:05:38 +02:00
Joakim Sørensen bb2fe650ac Prevent mwc-list-item from opening up quick-bar (#10317) 2021-10-18 22:04:50 +02:00
Bram Kragten b576c3de40 Fix translation key energy distribution solar (#10316) 2021-10-18 14:11:41 +02:00
Allen Porter 84533b8843 Rename stream_type to frontend_stream_type (#10298) 2021-10-18 12:42:34 +02:00
Michael Irigoyen a8ff98b808 Update MDI to v6.3.95 (#10313) 2021-10-18 12:41:31 +02:00
Philip Allgaier f0062b1e67 Only render badge value if there is no icon and no image (#10310) 2021-10-18 01:39:13 +02:00
Bram Kragten 93f64de875 Fix icon buttons in Safari (#10293) 2021-10-16 23:03:26 +02:00
MartinT ec47e320d2 Unify default dashboard name (#10254)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-16 15:30:48 +00:00
Kyle Niewiada 816d5ee594 Fix energy onboarding add_solar_production button (#10275) (#10286) 2021-10-16 17:09:00 +02:00
Philip Allgaier 588f5bd6b7 Add additional binary device classes to inversion list (#10152) 2021-10-16 14:49:57 +02:00
Philip Allgaier 825ea93dba Add "capitalize" option to hui-timestamp-display (#10280) 2021-10-16 14:43:03 +02:00
Paulus Schoutsen a690a1d7bf ABC automation types + use MWC (#10287) 2021-10-16 14:41:23 +02:00
Paulus Schoutsen 9fe4c79782 Convert all warning classes to ha-alert (#10289) 2021-10-16 14:38:58 +02:00
Paulus Schoutsen 42613d6519 Disable ha-form while submitting entry flow (#10290) 2021-10-16 14:37:48 +02:00
Paulus Schoutsen 4b77910e4f Warn if iframe won't be able to load the website (#10217) 2021-10-15 09:03:51 +02:00
Paulus Schoutsen 3f2cce936c Bumped version to 20211014.0 2021-10-14 13:06:18 -07:00
Bram Kragten 6e8e9824f9 Bump mdc/mwc to 0.25.2 (#10271) 2021-10-14 11:18:32 -07:00
Paulus Schoutsen 33e1d34cb1 Add support for device configuration URL (#10251)
* Add support for device configuration URL

* Lint

* Tweak text
2021-10-14 11:17:44 -07:00
Paulus Schoutsen 48948d5854 Initial support for entity category (#10266) 2021-10-14 09:56:51 -07:00
Philip Allgaier 7fc00ce1cb Fix sizing / positioning error for trace graph node with subsequent branches (#10049) 2021-10-14 17:00:31 +02:00
Philip Allgaier 0c940be5fb Consolidate all icon button logic into <ha-icon-button> + ensure tooltip (#9230) 2021-10-14 15:44:20 +02:00
chriss158 bddb505b7f Fix missing translatable energy texts (#10230) 2021-10-14 12:28:11 +02:00
Franck Nijhof a91d25b27d Add tamper device class for binary sensor (#10268) 2021-10-14 12:22:07 +02:00
Allen Porter 4ad005f0bf Add WebRTC stream player (#10193)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-10-13 10:14:33 +02:00
Erik Montnemery 7472545204 Update demo template (#10256) 2021-10-13 10:09:28 +02:00
Joakim Sørensen 164c9c8e73 Remove "Hass.io" from translation (#10257) 2021-10-13 10:08:56 +02:00
Joakim Sørensen e52118db93 Use correct build url (#10258) 2021-10-13 10:08:10 +02:00
Joakim Sørensen 9e7acacb06 Add ha-label-badge to gallery (#10248) 2021-10-13 10:05:44 +02:00
Joakim Sørensen 56deb15bca Add netlify build script for gallery (#10253) 2021-10-12 22:47:53 +02:00
Joakim Sørensen a3d4969d7b Add ha-chip to gallery (#10252) 2021-10-12 21:19:09 +02:00
Philip Allgaier 4a00957b71 Remove "battery" device class from fixed icon list (#10246) 2021-10-12 11:40:44 +00:00
Josh McCarty 56bd731361 Handle text overflow for tabs (#10239) 2021-10-12 11:51:52 +02:00
Joakim Sørensen b6c470edf1 Add ha-bar to gallery (#10242) 2021-10-12 11:38:43 +02:00
Jack Wilsdon 5bc0feacf0 Apply flat polyfill globally (#10222) 2021-10-10 14:33:42 +02:00
Bram Kragten dc8d837e88 Add missing validation text (#10225) 2021-10-09 19:17:02 +02:00
Bram Kragten cddf6ce1f4 Bumped version to 20211007.1 2021-10-09 17:39:08 +02:00
Bram Kragten 8abb212ae7 Fix alarm panel badge (#10221) 2021-10-09 17:38:46 +02:00
Joakim Sørensen 0056d75127 Fix icon overlay for person badges (#10201) 2021-10-09 17:38:29 +02:00
Bram Kragten 5be475ea17 Fix dirty check/leaving automation editor (#10211) 2021-10-09 17:38:09 +02:00
Philip Allgaier b157cf5294 Make zone names readable on map in dark mode (#10195) 2021-10-09 17:37:45 +02:00
Philip Allgaier 48c9c89e3d Add "gas" device_class to customize (and sort existing ones) (#10196) 2021-10-09 17:37:28 +02:00
Bram Kragten 83f405b695 Fix alarm panel badge (#10221) 2021-10-09 16:17:50 +02:00
Paulus Schoutsen 9bf41a37b4 Allow disabling an ha-form (#10218) 2021-10-09 12:41:36 +02:00
Paulus Schoutsen 774f22b7e7 Convert iframe panel to Lit (#10216) 2021-10-09 12:39:37 +02:00
Joakim Sørensen aaa3964bb3 Fix icon overlay for person badges (#10201) 2021-10-09 12:30:51 +02:00
Paulus Schoutsen 6f6fc759cc Add selector demo to gallery (#10213) 2021-10-08 20:56:32 +02:00
Bram Kragten 4358b7f924 Fix dirty check/leaving automation editor (#10211) 2021-10-08 20:32:13 +02:00
Paulus Schoutsen 2841369d3d Extract black/white row into component (#10212)
* Extract black/white row into component

* Remove unused import
2021-10-08 10:48:39 -07:00
Paulus Schoutsen ad031d4bda Tweak ha-form (#10194) 2021-10-08 17:19:02 +02:00
Philip Allgaier 588ee2c3b1 Make zone names readable on map in dark mode (#10195) 2021-10-08 17:17:41 +02:00
Philip Allgaier 038033cf27 Add "gas" device_class to customize (and sort existing ones) (#10196) 2021-10-08 17:16:44 +02:00
Joakim Sørensen 84c4bbd380 Fix import (#10206) 2021-10-08 07:41:21 -07:00
Bram Kragten 807ce468d6 Dont create icon for supervisor (#10191) 2021-10-07 23:27:35 +02:00
Paulus Schoutsen a839494a1e Use MWC components for ha-form (#10120) 2021-10-07 12:21:35 -07:00
Bram Kragten 80bbc9990a Merge pull request #10190 from home-assistant/dev 2021-10-07 21:20:25 +02:00
Bram Kragten fa52442c1c Bumped version to 20211007.0 2021-10-07 21:07:37 +02:00
Bram Kragten 919ce2afb1 Fix position of home circle in energy distribution on safari (#10186) 2021-10-07 12:06:59 -07:00
Bram Kragten db55be6d33 Add start - end time to energy graph tooltip (#10185) 2021-10-07 12:06:18 -07:00
Bram Kragten 2dc7c1afed Fix unsupported_unit_metadata text in stats dev tools (#10183)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-10-07 12:05:45 -07:00
Bram Kragten 85956dc7fd Fix error in reduceSumStatisticsByDay (#10170) 2021-10-07 15:26:41 +02:00
Joakim Sørensen 910cd98a38 Fix missing add-on rating (#10184) 2021-10-07 10:53:22 +00:00
Bram Kragten 8022bd2868 Guard icon db check on hassio (#10181) 2021-10-07 10:31:47 +00:00
Bram Kragten d5ca7e1719 Remove ha-icon from ha-label-badge (#10182) 2021-10-07 10:25:15 +00:00
Joakim Sørensen 066a0771b3 Move functions to common-translation (#10180) 2021-10-07 11:02:52 +02:00
Bram Kragten 9e35c1ab68 Make sure we have no ha-icon in supervisor (#10176) 2021-10-06 22:41:37 +00:00
Philip Allgaier fb1deb838c Add title property to elements showing entity names (#9264) 2021-10-06 17:41:37 +02:00
Bram Kragten 8e010618bb Show correct units for prices in energy gas settings (#10164) 2021-10-06 17:38:32 +02:00
Bram Kragten 365cf1f7ef Break lines in error card (#10169) 2021-10-06 07:53:40 -05:00
Philip Allgaier b226b20e3d Prevent computeDomain() call if no entity selected (#10166) 2021-10-06 14:07:18 +02:00
Bram Kragten ec21f4c2c6 Capitalize relative time strings (#10165) 2021-10-06 13:56:52 +02:00
Philip Allgaier a696d849b2 Add missing translations to statistics fixing (#10159) 2021-10-06 08:38:44 +00:00
Philip Allgaier ea3fae2ce4 Make add-on sorting case insensitive (#10061) 2021-10-06 10:33:15 +02:00
Bram Kragten 736e117eca Merge pull request #10162 from home-assistant/dev 2021-10-06 10:18:40 +02:00
Bram Kragten 2fb3ac74eb Add total and total increasing state class 2021-10-06 09:57:03 +02:00
Bram Kragten 2d5c8ec3e9 Bumped version to 20211006.0 2021-10-06 09:43:23 +02:00
Bram Kragten 25c1156c88 Some code improvements (#10156) 2021-10-05 21:21:05 -07:00
Bram Kragten c44624282c Fix lint warnings (#10157) 2021-10-05 18:11:02 +02:00
Bram Kragten 370f2eb9e4 Add no issues text to stats dev tools (#10158) 2021-10-05 17:58:56 +02:00
Paulus Schoutsen 1793c68aae Split price validation errors (#10155) 2021-10-04 21:04:45 -07:00
Bram Kragten 5e52bd905d Merge pull request #10154 from home-assistant/dev 2021-10-05 00:00:33 +02:00
Bram Kragten cba6bbdc74 Bumped version to 20211004.0 2021-10-04 23:43:13 +02:00
Bram Kragten 6f4593508b More statistics validation (#10146)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-10-04 14:21:21 -07:00
Bram Kragten dc3bad56f2 Improve padding/positioning of ha-alert (#10145)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-10-04 16:27:03 +00:00
Joakim Sørensen 784e5e6e39 Add more secret string fields (#10149) 2021-10-04 08:42:18 -07:00
Michael Irigoyen 13fe62975d Update MDI to v6.2.95 (#10142) 2021-10-04 10:33:25 +02:00
Tobias Kündig b97fd9918a Add decorator to translationFragment property (#10143) 2021-10-04 10:32:53 +02:00
uvjustin dc56c2de52 Bump hls.js to 1.0.11 (#10144) 2021-10-04 10:29:58 +02:00
Philip Allgaier 375a5323d5 Prevent wrong colors in history timeline for inverted unavailable states (#10137) 2021-10-03 11:35:53 -07:00
Bram Kragten 31b69147f4 Merge pull request #10136 from home-assistant/dev 2021-10-02 22:41:19 +02:00
Bram Kragten 8e3011807d Bumped version to 20211002.0 2021-10-02 22:29:56 +02:00
Bram Kragten ec7c6ab96c Add if node is secure to zwave js device page (#10135) 2021-10-02 10:20:16 -07:00
Bram Kragten 8a4097a366 Fix labels device energy graph (#10134)
* Fix labels device energy graph

* prettier
2021-10-02 08:06:05 -07:00
Bram Kragten 792a736e48 Fix fix stats callback (#10123)
* Fix `fix stats` callback

* memoize
2021-10-02 08:05:30 -07:00
Paulus Schoutsen cce0a02ebb Add My support for statistics (#10131) 2021-10-02 10:15:26 +02:00
Paulus Schoutsen 2ddab4eecc Fix webpack dev server (#10130) 2021-10-01 14:18:53 -07:00
Kyle Niewiada f66755cbf1 Fix inverted motion chart colors (#10128) 2021-10-01 20:12:05 +02:00
Bram Kragten 257e60a2b1 Don't bundle locale data, but add to static (#10119) 2021-10-01 07:58:02 -07:00
Philip Allgaier 75a3566760 Fixed typo in unsupported unit statistics dialog (#10118) 2021-10-01 00:00:20 +02:00
Joakim Sørensen 7a9f17e059 Use heading property for data disk dialog (#10115) 2021-09-30 19:08:51 +02:00
Joakim Sørensen abbfe7200a Fix supervisor dev translations (#10113) 2021-09-30 09:01:36 -07:00
Paulus Schoutsen 419942112b Fix Lit lint warnings (#10112) 2021-09-30 08:46:03 -07:00
Bram Kragten 597d4a0426 Use const enums where possible (#10110) 2021-09-30 07:44:28 -07:00
Bram Kragten e023d60be7 exclude a bunch of polyfill locales (#10111) 2021-09-30 07:43:46 -07:00
Bram Kragten bc5010a953 Merge pull request #10109 from home-assistant/dev
20210930.0
2021-09-30 12:57:53 +02:00
Bram Kragten 41a7b42037 Bumped version to 20210930.0 2021-09-30 12:41:35 +02:00
Bram Kragten 2936865c55 Bump typescript, lint, prettier (#10108) 2021-09-30 12:39:03 +02:00
smonesi ff2bf1f3c1 Local images flagged as already loaded to avoid flickering/slow-down (#10086) 2021-09-30 08:14:08 +00:00
Bram Kragten 1bccbd4173 Use browser default time and number formatting with polyfills if needed (#9481)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-09-29 23:34:52 +00:00
Bram Kragten d7f00df391 Bump yarn to v3 (#10104) 2021-09-29 15:57:50 -07:00
Bram Kragten 22f88c59c7 Bump lit and mwc (#10103) 2021-09-29 15:09:43 -07:00
Bram Kragten 8721776839 Add migration wizard for zwave -> zwave_js (#10097) 2021-09-29 08:55:20 -07:00
craiggenner a89da0dac0 add 'allow-download' to iframe sandbox for chrome (#9490) 2021-09-29 14:40:26 +02:00
Bram Kragten e4b4dc4ae9 Allow gas to be in kWh (#10075)
* Allow gas to be in kWh

* Extract some gas unit helpers

* Forgot to save a refactor

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-09-29 10:33:48 +02:00
Bram Kragten b26c44b2b9 Add S2 support to Z wave JS (#10090)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
Co-authored-by: kpine <keith.pine@gmail.com>
2021-09-28 15:37:32 -07:00
Bram Kragten 68095417b9 Fix tooltip and click action on device energy graph (#10094) 2021-09-28 15:21:47 -07:00
Joakim Sørensen b6344eb6e8 Fix link to os_agent (#10093) 2021-09-28 09:09:27 +02:00
Paulus Schoutsen 224302cfef Simplify remote connection preferences (#10071)
* Simplify remote connection preferences

* Remove unused CSS and strings
2021-09-27 22:28:43 -07:00
Bram Kragten abc4816888 Only show entities in energy with energy device class (#10076) 2021-09-27 17:56:56 -07:00
Bram Kragten 21e14bd644 Fix energy device graph when multiple entities have same name (#10092) 2021-09-27 17:55:46 -07:00
Bram Kragten a89caccd32 Statistics dev tools (#10074)
* Statistics dev tools

* Show all statistics

* Update src/data/history.ts

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* Update history.ts

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-09-27 22:03:57 +02:00
Joakim Sørensen 03dc3e52b7 Add missing unsupported links (#10080) 2021-09-23 15:08:51 +02:00
Paulus Schoutsen f04be8efa6 Hide hassio integration during onboarding (#10079) 2021-09-23 08:12:04 +02:00
Paulus Schoutsen 2c32f6bcb3 Bumped version to 20210922.0 2021-09-22 14:20:23 -07:00
Joakim Sørensen a3a08ff5c7 Add dialog to trigger moving datadisk (#10048)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-09-22 13:37:21 -07:00
Jefferson Bledsoe ea51186767 Update delete dashboard dialog to be more descriptive (#10051)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
2021-09-22 11:38:21 +02:00
Philip Allgaier 49494c572b Fix card deletion dialog buttons out of view (#9992)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-09-20 16:32:41 +02:00
Philip Allgaier fcac3fa164 Convert suggest-card dialog to ha-dialog (#10000)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-09-20 16:32:13 +02:00
Jaroslav Hanslík 9c1153ef37 Unified alarm panel icons everywhere (#10021) 2021-09-20 11:06:31 +00:00
Philip Allgaier 0adc4b33ef Align "option" wording and show user-friendly option index in trace timeline (#10059) 2021-09-20 12:59:30 +02:00
Will Adler c0f3215340 Clarify carbon-consumed energy dashboard card tooltip (#10053) 2021-09-20 12:52:20 +02:00
Will Adler bab1e6a95f Revise solar-consumed energy dashboard card tooltip, fix typos (#10052) 2021-09-20 12:51:47 +02:00
Erik Montnemery 53b26a43c0 Update translation strings for energy validator (#10037)
* Update translation strings for energy validator

* Update src/translations/en.json

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update en.json

* Update src/translations/en.json

Co-authored-by: Philip Allgaier <philip.allgaier@gmx.de>

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Philip Allgaier <philip.allgaier@gmx.de>
2021-09-20 12:38:16 +02:00
Erik Montnemery 2240d019f5 Specify period when fetching statistics (#10040)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-09-16 11:15:23 +02:00
Philip Allgaier cb11c6b3ea Check for null action nodes before rendering (#10017) 2021-09-14 14:20:09 -07:00
Jaroslav Hanslík 5893559951 New icon for "on" state of smoke device (#10013) 2021-09-13 12:50:57 +02:00
Paulus Schoutsen 8408d25cef Clean up ha state label badge (#10020) 2021-09-12 10:00:37 +02:00
Paulus Schoutsen 1ac2ffcf02 Bumped version to 20210911.0 2021-09-11 11:57:48 -07:00
Jaroslav Hanslík 6b6c38c2c8 Better icon for alarm panel state "armed night" (#10012) 2021-09-11 11:53:38 -07:00
Joakim Sørensen e55df73a91 Remove usage of discovery info (#10015) 2021-09-11 11:38:35 -07:00
Michael Irigoyen 360c2cbfa3 Update Material Design Icons to v6.1.95 (#10002)
* Update MDI to v6, add icon deprecation mapping

* Add removed icon path data to build tools

* Resolve incorrect MDI icon import name
2021-09-10 16:49:32 +02:00
Timothy Kist aba96674f3 Use unicode ellipsis instead of 3 dots "..." (#9997) 2021-09-09 15:43:07 +00:00
Philip Allgaier 5c3d85fc90 Consistent lower-case spelling of "optional" and "required" (#9990) 2021-09-09 15:42:42 +02:00
Philip Allgaier 6486b7fd4c Adjust dev-tools wording: "Active listeners" (#9991) 2021-09-09 15:42:14 +02:00
Paulus Schoutsen 5f3e980de0 Add gas unit error (#9981) 2021-09-07 14:49:08 -07:00
Philip Allgaier d0edbec5fb Copy resize observer to "non-input" number entity row (#9973) 2021-09-07 17:25:08 +02:00
Ville Skyttä 5d46963e8a Add date device class (#9983) 2021-09-07 17:24:10 +02:00
Philip Allgaier 321f441b63 Handle unavailable vacuums in more-info (#9974) 2021-09-07 10:14:05 +02:00
Paulus Schoutsen d55bade070 Small tweaks for the create automation from blueprint screen (#9980) 2021-09-07 09:40:25 +02:00
Ville Skyttä 6ba6b821f5 Use SENSOR_DEVICE_CLASS_* constants more (#9982) 2021-09-07 09:21:51 +02:00
Ruben Andrist b3dedae115 Add ResizeObserver to EntityRow (#9837)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-09-06 18:34:10 +02:00
Philip Allgaier 5a1070c30f Prevent darkMode overwrite by frontend_default_dark_theme (#9519) 2021-09-06 13:13:01 +02:00
Bram Kragten 40664997e1 Use polyfill from toggleAttribute (#9969) 2021-09-06 11:48:08 +02:00
Philip Allgaier c6e83cb7c0 Add state_color support to entity card (#9617) 2021-09-06 11:26:16 +02:00
Philip Allgaier e7e27e794c Add refresh button to history panel (#9958) 2021-09-06 09:19:58 +00:00
Sven Naumann 1073dbe6ab number slider: change column width check from 350px to 300px (#8310) 2021-09-06 11:01:28 +02:00
Philip Allgaier 2bd9b5a015 Prevent index access errors in entity quick bar (#9964)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-09-06 09:01:18 +00:00
Philip Allgaier bc09febd2c Use integration manifest for service documentation URL (#9960) 2021-09-06 08:58:05 +00:00
Philip Allgaier b2a87c90a2 Proper editor enum validation of timestamp formats (#9965) 2021-09-06 08:42:42 +00:00
Philip Allgaier d6dbbcb0de Use dynamic struct validation for entities card rows (#9962) 2021-09-06 10:27:29 +02:00
Philip Allgaier 9ccb5360b3 Add icon to attribute row validation (#9963) 2021-09-06 10:26:11 +02:00
Philip Allgaier 0187c4faff Ensure calender follows time format locale (#9966) 2021-09-06 10:22:46 +02:00
Philip Allgaier 605172a0bc Align internal and fecha date/time formatting (#9380) 2021-09-06 10:22:01 +02:00
Bram Kragten 8565a0d911 Remove float value in float form when emptied (#9947) 2021-09-03 20:07:22 +02:00
Bram Kragten 61c8d23a7e Bunch of minor non breaking dep bumps (#9945) 2021-09-03 10:55:10 -07:00
Joakim Sørensen 5e3487ed59 Don't build wheels for alpine 3.13 (#9944) 2021-09-03 11:56:30 +02:00
Joakim Sørensen d5a161769c Fix removeBackup function after 2021.9 (#9938) 2021-09-02 22:13:11 +02:00
Bram Kragten 1692f9c2dd Change message to info alert (#9930) 2021-09-02 00:40:51 +02:00
Bram Kragten 0cbac8bb44 Polyfill Array.flat (#9917) 2021-09-01 16:23:41 +02:00
Bram Kragten 35a81e7f11 Correct badge warning (and use new styling) (#9926) 2021-09-01 16:23:29 +02:00
Paulus Schoutsen ac64d293e7 Sort tags in trigger (#9921) 2021-08-31 21:30:35 -07:00
Bram Kragten 708b8787c5 Bump round slider (#9301) 2021-08-31 08:59:32 +02:00
Bram Kragten 49947f3337 Merge pull request #9915 from home-assistant/dev 2021-08-30 22:35:41 +02:00
Bram Kragten 2bddd151eb Don't recreate translation meta in watch mode (#9909) 2021-08-30 13:13:47 -07:00
Bram Kragten 43a585187c Bumped version to 20210830.0 2021-08-30 22:08:49 +02:00
Bram Kragten 324658a36b Fix energy graph when sum is 0 (#9914) 2021-08-30 20:06:58 +00:00
Joakim Sørensen dd9a9b34d1 Fix width when there is no data in energy cards (#9888)
* Fix width when there is no data in energy cards

* right: 0;
2021-08-30 18:08:48 +02:00
Joakim Sørensen 2ab0e40952 Break overflow in ha-alert (#9885) 2021-08-30 18:08:16 +02:00
Bram Kragten dfea80ae96 Clarify unit of measurement warning for price entity (#9907)
* Clarify unit of measurement warning for price entity

* Remove unneeded escapes
2021-08-30 15:33:23 +02:00
Bram Kragten 6e38f5accf Align entity errors (#9904) 2021-08-30 08:38:33 +00:00
Bram Kragten 7c952d92bf Fix hat-graph-margin (#9898) 2021-08-28 11:12:02 +00:00
Bram Kragten 2fae0d2d95 Fix tracing graph on iOS (#9897) 2021-08-28 01:04:52 +02:00
Joakim Sørensen 67ab63f00e Use ha-alert for error and warning messages in the supervisor panel (#9892)
* Use ha-alert for error and warning messages in the supervisor panel

* use actionText

* Update hassio/src/dialogs/network/dialog-hassio-network.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-08-27 16:45:05 +02:00
mbo18 719f9c28af Fix missing alarm state in translation: vacation (#9893)
Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
2021-08-27 13:24:24 +02:00
Joakim Sørensen 035d621109 Fix delete backup endpoint (#9890) 2021-08-27 12:26:23 +02:00
Joakim Sørensen 791f3b896d Mark "usb" as a discovery source (#9887) 2021-08-26 23:34:23 +02:00
Paulus Schoutsen fe2172a660 Bumped version to 20210825.0 2021-08-25 10:59:17 -07:00
Pascal Roeleven 640fbd616b Prevent possible parent action-row from switching to yamlMode (#9883)
* Prevent possible parent action-row from switching to yamlMode

Now that we have the choose-action, it's possible to have nested
action-rows. If an action contains a template, we should only switch that
action-row to yamlMode instead of all action-rows.

By canceling the bubbling on the first encouter we prevent the event from
bubbling upwards to parent action-rows.

* Prevent possible parent action-row from also moving

Now that we have the choose-action, it's possible to have nested
action-rows. If an action inside a choose-action is moved, we should only
move that action-row instead of both the action-row and its parents.

By canceling the bubbling on the first encouter we prevent the event from
bubbling upwards to parent action-rows.

* Apply suggestions from code review

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-08-25 10:55:16 -07:00
Raman Gupta 900efe8a36 Add direct link to zwave_js device's device DB page (#9797)
Co-authored-by: Charles Garwood <cgarwood@newdealmultimedia.com>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-08-25 17:53:30 +00:00
Paulus Schoutsen 5bd92d04d9 Get solar forecasts from energy platform (#9794)
* Get solar forecasts from energy platform

* Allow picking other forecasts in settings
2021-08-25 10:40:07 -07:00
Charles Garwood b15684bcbd Include config entry title in delete confirmation prompt (#9866) 2021-08-25 10:36:39 -07:00
Joakim Sørensen a93222dbb2 Show history graph for sensors with state_class and not unit (#9879) 2021-08-25 13:41:18 +02:00
Joakim Sørensen 20744e90a0 Use ha-alert in lovelace alerts/warnings (#9880) 2021-08-25 11:24:04 +02:00
Bram Kragten 32777b4259 Add value column prop to ha data table (#9824) 2021-08-25 11:20:35 +02:00
Paulus Schoutsen 271120999c Center nodes in narrow mode (#9878) 2021-08-25 10:22:37 +02:00
Joakim Sørensen 68fe13a67d Use ha-alert in the energy validation results (#9876) 2021-08-24 19:22:40 +02:00
Joakim Sørensen f3606014c6 Add ha-alert component (#9874) 2021-08-24 09:44:30 -07:00
Joakim Sørensen efbf4482b2 Build wheels for Alpine 3.14 (#9875) 2021-08-24 11:20:57 +02:00
Jc2k 21a3b4f8e2 Add volatile_organic_compounds device class (#9871) 2021-08-23 11:43:46 +02:00
Paulus Schoutsen de23b2d046 Do not show domain if equal to title with different casing (#9870) 2021-08-22 23:47:09 -07:00
Paulus Schoutsen bd8f436c1d Do not render info tooltip if we have an error (#9869) 2021-08-22 23:47:03 -07:00
Bram Kragten e963735dba Cleanup mjpeg stream when disconnected (+ bump Lit) (#9868) 2021-08-22 22:40:37 -07:00
J. Nick Koston 46c981103d Only update cameras when they are visible (#9690)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-08-22 22:55:56 +00:00
J. Nick Koston f6d02d8fc6 Cache the camera url without the width and height added (#9778) 2021-08-22 19:17:48 +02:00
J. Nick Koston e08f691510 Trigger a scan of USB devices when loading integrations (#9860) 2021-08-22 19:14:14 +02:00
Franck Nijhof af9199aaff Add missing BYN currency (#9863) 2021-08-22 14:40:19 +02:00
Charles Garwood 8576b13f74 Z-Wave JS Heal Node -> Heal Device (#9840) 2021-08-19 10:15:11 +02:00
Paulus Schoutsen 2270d8a795 Bumped version to 20210818.0 2021-08-18 13:16:30 -07:00
Joakim Sørensen f4dcce6d6c Fix default strategy when energy is not configured (#9827)
* Fix default strategy when energy is not configured

* Address comment

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-08-18 13:16:12 -07:00
Paulus Schoutsen b802a410b9 Add energy validation UI (#9802)
* Add basic validation UI

* Also refresh validation results when prefs change

* Update look

* Remove || true

* Add missing errors

* Validate state class

* Rename file

* Simplify energySourcesByType

* Update src/translations/en.json

* Update ha-energy-validation-result.ts
2021-08-18 12:59:41 -07:00
Milan Meulemans 9e3d339ec5 Fix typo in gas paragraph (#9836)
* Fix typo in gas paragraph

* Update src/translations/en.json

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
2021-08-18 04:31:00 +00:00
Bram Kragten fb97a98b97 Add view_layout to card structs, fix button entity row struct (#9834) 2021-08-17 21:27:15 -07:00
Joakim Sørensen 72773f3bc8 Add disabled by column to entity datatable (#9799) 2021-08-17 21:26:21 -07:00
Franck Nijhof b0fd93e0c3 Add default icon for gas device class (#9830) 2021-08-17 11:37:53 +02:00
Michael 7aa2ec78f2 Add icons for the device_class 'update' (#9711) 2021-08-17 01:31:29 +02:00
Jc2k 047e856a61 Add new air quality device classes to frontend (#9829) 2021-08-16 23:34:36 +02:00
Bram Kragten dbe209e3f2 Fix button group in Safari (#9804)
* FIx button group in Safari

* Update src/components/ha-button-toggle-group.ts

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-08-15 20:45:24 -07:00
Bram Kragten e0d23ee6cf Make sure idle and random color dont collide (#9808) 2021-08-15 20:45:07 -07:00
Bram Kragten 7a35f46370 Set suggested min max to min and max (#9805) 2021-08-15 20:44:42 -07:00
Bram Kragten 4a4465efb6 FIx device graph not rendering right when changing period (#9806) 2021-08-15 20:44:12 -07:00
Bram Kragten 3a112531cc Make energy period selector less wide for mobile (#9814) 2021-08-15 20:43:35 -07:00
Bram Kragten 456209dded Don't start video after the element was removed from DOM (#9813) 2021-08-15 20:43:00 -07:00
Bram Kragten 2556b0d157 Improve iOS 12 check (#9816) 2021-08-15 20:42:39 -07:00
Bram Kragten 1e8903fd76 There are 5 steps now (#9822) 2021-08-15 20:42:20 -07:00
Bram Kragten ad9f18c231 Keep datasets hidden after data update (#9823) 2021-08-15 20:36:15 -07:00
Bram Kragten 63e3de00cb Remove battery from demo (#9801)
* Remove gas and battery from demo

* Update energy.ts

* Just battery
2021-08-13 12:09:49 -07:00
Bram Kragten d06ffeeede Bumped version to 20210813.0 2021-08-13 19:42:25 +02:00
Bram Kragten 3479fb9d94 Add gas to energy dashboard (#9787) 2021-08-13 10:39:20 -07:00
Paulus Schoutsen 304bd002ae Netto -> Net (#9798) 2021-08-13 08:48:23 +02:00
Bram Kragten 5dad18c85f Make time inputs the same through the UI (#9766) 2021-08-12 22:52:26 +02:00
Bram Kragten 19e4c0657a Add battery to energy dashboard (#9757) 2021-08-12 08:40:21 -07:00
Bram Kragten 44548fdc33 Fix tracing graph (#9782) 2021-08-12 15:59:57 +02:00
Bram Kragten d8929074b5 Use correct vars for gauge colors (#9727) 2021-08-12 15:59:42 +02:00
Bram Kragten e11532ae92 Update translations (#9784) 2021-08-12 12:38:52 +02:00
Joakim Sørensen eff48acdf4 Rename snapshot -> backup (#9393)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-08-12 11:56:13 +02:00
Onur-d a9850f9641 Add max-width for Logos to 100% (#9779) 2021-08-11 17:19:12 +02:00
Joakim Sørensen aab0b8a3ce Request darktheme optimized brand images if dark theme is used (#9777) 2021-08-11 15:15:12 +02:00
Philip Allgaier b12e062d94 Fix "wan't" typos in energy panel (#9775) 2021-08-11 09:32:32 +02:00
J. Nick Koston b36e342f15 Pass the width and height when requesting camera images (#9683)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-08-10 21:42:37 -07:00
Bram Kragten f686816c86 Cleanup of tracing graph (#9564) 2021-08-11 01:23:07 +02:00
Bram Kragten dc50e54afc Add period selection to energy dashboard (#9756) 2021-08-11 01:22:27 +02:00
Paulus Schoutsen 3897e3d452 Fix language string (#9767) 2021-08-10 21:22:38 +02:00
Bram Kragten 2557b03b11 Catch failing to fetch forecasts (#9765) 2021-08-10 19:47:09 +02:00
Paulus Schoutsen 29d29a337f Do not query energy prefs if it's not loaded (#9763) 2021-08-10 10:40:51 -07:00
Bram Kragten d3ce4af541 Merge pull request #9761 from home-assistant/dev
20210809.0
2021-08-09 21:00:41 +02:00
Bram Kragten 34f8e5e28d Bumped version to 20210809.0 2021-08-09 20:44:31 +02:00
Bram Kragten afd1a68c62 Change some wording (#9742) 2021-08-09 20:43:54 +02:00
Bram Kragten dbcf1cb907 Group solar forecasts by hour (#9728) 2021-08-09 17:56:25 +02:00
Paulus Schoutsen 9ca64f9789 Show reconnecting when not connected and auto-connect is on (#9738) 2021-08-07 11:46:26 +02:00
Bram Kragten d45f47d908 Merge pull request #9715 from home-assistant/dev
20210804.0
2021-08-04 23:53:37 +02:00
Bram Kragten 4c247ac49d Merge branch 'master' into dev 2021-08-04 20:18:00 +02:00
Bram Kragten e8a406526b Bumped version to 20210804.0 2021-08-04 20:17:05 +02:00
Bram Kragten 7fcea16c6b Increase font size tooltips + position then static (#9713) 2021-08-04 09:19:38 -07:00
Bram Kragten 028b799d2c Default energy collection key should not be defined (#9710) 2021-08-04 08:25:42 -07:00
Bram Kragten 3485296e23 Fix typo (#9707) 2021-08-04 12:36:15 +02:00
Paulus Schoutsen 03078cdd45 TOML 2021-08-03 22:05:14 -07:00
Paulus Schoutsen 740310800d SET NODE_OPTIONS 2021-08-03 22:05:14 -07:00
Paulus Schoutsen 6d7c558482 TOML 2021-08-03 22:02:38 -07:00
Paulus Schoutsen fdb10515c3 SET NODE_OPTIONS 2021-08-03 22:00:13 -07:00
Paulus Schoutsen 5a0f13c485 Specify YARN version on netlify (#9705) 2021-08-03 21:56:02 -07:00
Paulus Schoutsen 80b330ad7b Specify YARN version on netlify (#9705) 2021-08-03 21:55:15 -07:00
Bram Kragten d929e1c134 Add support for statistics card to demo (#9703) 2021-08-03 15:16:21 -07:00
Bram Kragten 5e40dcdc38 Add support for statistics card to demo (#9703) 2021-08-03 15:16:08 -07:00
Paulus Schoutsen 1dd3e2a83b 20210803.2 (#9704)
* Add energy distribution card to arsaboo demo (#9702)

* Add energy distribution card to arsaboo demo

* Make link dashboard conform

* Bumped version to 20210803.2
2021-08-03 15:15:21 -07:00
Paulus Schoutsen a62742fad9 Bumped version to 20210803.2 2021-08-03 15:14:46 -07:00
Paulus Schoutsen 1f9c45b11c Add energy distribution card to arsaboo demo (#9702)
* Add energy distribution card to arsaboo demo

* Make link dashboard conform
2021-08-03 22:09:08 +00:00
Bram Kragten 68bec5e158 Merge pull request #9701 from home-assistant/dev
20210803.1
2021-08-03 23:36:27 +02:00
Bram Kragten 37f1bd7d63 Bumped version to 20210803.1 2021-08-03 23:22:46 +02:00
Bram Kragten 5ba24211e2 Add messages when no data (#9700)
* Add messages when no data

* 2 hours

* comment
2021-08-03 23:22:32 +02:00
Bram Kragten d699647418 Fix calculate sum growth + refreshing too often (#9699) 2021-08-03 23:19:26 +02:00
Bram Kragten b246502cb6 Energy demo (#9698)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-08-03 09:50:31 -07:00
Bram Kragten 9b33ead8aa Final energy tweaks (#9694) 2021-08-03 08:54:10 -07:00
Milan Meulemans 32e8c1dc6d Remove energy currency translation (#9695) 2021-08-03 11:00:21 +00:00
Paulus Schoutsen e09ef7862e Merge pull request #9692 from home-assistant/dev 2021-08-02 21:10:24 -07:00
Paulus Schoutsen 85420304d0 Bumped version to 20210803.0 2021-08-02 20:51:41 -07:00
Bram Kragten 1c097a669d Add currency to onboarding (#9691) 2021-08-02 21:02:57 +00:00
Bram Kragten 4e1497c5da Change layout of period selector (#9688) 2021-08-02 13:57:59 -07:00
Bram Kragten 49d426675f Masonry (#9689) 2021-08-02 13:57:39 -07:00
Paulus Schoutsen dc6ac668b4 Merge pull request #9687 from home-assistant/add-description-devices-dialog
Add description to statistic picker in add device dialog
2021-08-02 10:30:24 -07:00
Paulus Schoutsen 4ee24b0845 Add description to statistic picker in add device dialog 2021-08-02 10:18:59 -07:00
Paulus Schoutsen ba20aef206 Merge pull request #9685 from home-assistant/dev 2021-08-02 10:07:14 -07:00
Paulus Schoutsen 41ef6133c1 Bumped version to 20210802.0 2021-08-02 09:51:10 -07:00
Joakim Sørensen 50bd5ee8f7 Add my support for energy (#9681)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-08-02 09:50:47 -07:00
Joakim Sørensen 285f3fe330 Fix text color for hass-tabs-subpage with narrow (#9680) 2021-08-02 09:50:24 -07:00
Bram Kragten 4d01199986 Clear all energy collection prefs (#9684) 2021-08-02 09:39:01 -07:00
Paulus Schoutsen bcc0052fe0 Update text 2021-08-02 08:45:05 -07:00
Paulus Schoutsen 4b592d81bd Simplify date picker and put in sidebar (#9677)
* Simplify date picker and put in sidebar

* Convert picker to reusable component

* Put date picker in top bar on desktop

* Chefs
2021-08-02 08:18:49 -07:00
Bram Kragten 884e323288 Make clear it is showing today (#9679) 2021-08-02 07:22:36 -07:00
Bram Kragten 78b799dd05 Add cost stat ids (#9678) 2021-08-02 07:22:17 -07:00
Paulus Schoutsen 847fa2e700 Add energy distribution card to auto lovelace if energy configured (#9675)
* Add energy distribution card to auto lovelace if energy configured

* Add import

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-08-02 12:36:13 +00:00
Paulus Schoutsen 481a79e311 Allow specifying collection keys so energy dashboard has own (#9674) 2021-08-02 14:23:15 +02:00
Paulus Schoutsen f19f2ff321 Add tooltips to the gauges (#9676) 2021-08-02 14:21:41 +02:00
Bram Kragten 6dc4d7bb70 Merge pull request #9673 from home-assistant/dev
20210801.0
2021-08-01 23:40:48 +02:00
Bram Kragten 83460a34f4 Bumped version to 20210801.0 2021-08-01 23:25:24 +02:00
Bram Kragten 2adbb47373 Refresh stats at 20 minutes past the hour every hour (#9667) 2021-08-01 21:24:41 +00:00
Bram Kragten 2159a5419a Fix device energy graph height (#9666)
* Fix device energy graph height

* Update state-history-chart-timeline.ts

* Update hui-energy-devices-graph-card.ts
2021-08-01 13:59:34 -07:00
Bram Kragten 044d6a15d9 Add view type selector to view editor (#9671) 2021-08-01 22:55:51 +02:00
Bram Kragten b6055062c6 Don's start at zero so growth is beter visible + calc sum state correctly (#9672) 2021-08-01 22:55:41 +02:00
Bram Kragten 6fd85e043b Sidebar view: Allow to move card position from UI (#9669) 2021-08-01 18:17:34 +02:00
Bram Kragten e07ac52356 Add UOM to stats chart, fix coloring of bands (#9665) 2021-07-31 20:36:27 +02:00
Paulus Schoutsen 0f16ba9325 Speed up data loading and allow embedding individual energy cards (#9660)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-31 18:33:41 +02:00
Bram Kragten 378e6d28bc Merge pull request #9659 from home-assistant/dev 2021-07-30 22:29:51 +02:00
Bram Kragten 539d2b880c Bumped version to 20210730.0 2021-07-30 22:14:21 +02:00
Bram Kragten 2982adbfa7 Fix return compensation not being negative (#9654) 2021-07-30 12:57:27 -07:00
Bram Kragten 5147dff670 Sidebar view: Move all cards to 1 column on mobile (#9656) 2021-07-30 12:57:01 -07:00
Bram Kragten 2cdf78c504 Add grid neutrality gauge (#9655) 2021-07-30 12:55:58 -07:00
Bram Kragten cfad45b7c2 fix and finish statistics card (#9658) 2021-07-30 12:52:38 -07:00
Bram Kragten 5234e9bce5 still round numbers when not formatting them (#9653) 2021-07-30 17:36:31 +02:00
Bram Kragten 0ed5454d02 fix self consumed solar (#9651) 2021-07-30 12:28:47 +02:00
Thomas Lovén 03080973be Add needle option to ha-gauge and gauge card (#9637) 2021-07-30 10:51:21 +02:00
Paulus Schoutsen a4f51b0cb3 Fix label for device consumption (#9648) 2021-07-30 09:42:54 +02:00
Paulus Schoutsen 749079c1c3 Bumped version to 20210729.0 2021-07-29 12:02:34 -07:00
Bram Kragten ae10ff42e1 Update state-history-chart-line.ts 2021-07-29 20:45:25 +02:00
Bram Kragten d4cbdab4a3 Fix energy calculations (#9647)
* Fix calculations

* max.. not min...
2021-07-29 18:29:49 +00:00
Bram Kragten 1bd6392a4c Add text when no statistics found (#9642)
* Add text when no statistics found

* Update src/components/entity/ha-statistic-picker.ts

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>

* fix typos

* Update src/components/entity/ha-statistic-picker.ts

* Prettier

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-07-29 20:26:22 +02:00
Bram Kragten 1531e99528 Energy dashboard tweaks and fixes (#9643)
* Energy dashboard tweaks and fixes

* Make headers smaller

* Change button styling in onboarding

* Disable add when no stat choosen

* Oops

* Update hui-energy-carbon-consumed-gauge-card.ts

* Update hui-energy-distribution-card.ts
2021-07-29 10:44:33 -07:00
Julien Ehrhart 6e7af18494 Add support for DEVICE_CLASS_MONETARY (#9640) 2021-07-29 15:20:12 +00:00
Paulus Schoutsen e1bae65aeb Remove currency from initial config (#9638) 2021-07-29 17:12:49 +02:00
Paulus Schoutsen 65bfdf94c9 Bumped version to 20210728.0 2021-07-28 11:05:28 -07:00
Paulus Schoutsen 9a92825954 Move energy panel up in sidebar (#9636)
* Move energy panel up in sidebar

* Remove headers from wizard

* Update text

* Always show all configured devices

* Make leaf clickable

* Bump HAWS
2021-07-28 11:05:00 -07:00
Paulus Schoutsen 469faf509b Remove the energy summary card since it's already in other cards (#9635) 2021-07-28 10:46:59 -07:00
Paulus Schoutsen f87d4a5ab6 If we have solar defined, always make sure sum is number so it shows placeholders (#9634) 2021-07-28 10:46:51 -07:00
Bram Kragten 9c31b749d7 Format monetary sensor as currency (#9633) 2021-07-28 09:34:03 -07:00
Paulus Schoutsen 521d5df064 Show solar forecast even if no prod stats available (#9632) 2021-07-28 09:20:31 -07:00
Paulus Schoutsen 4d330fba8a Use historic CO2 data into account (#9626)
* Use historic CO2 data into account

* Also add to gauge

* Apply suggestions from code review

* Format

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-28 09:20:06 -07:00
Bram Kragten 2e04a55d5c Add statistics card to card picker (#9631)
Co-authored-by: Zack Barett <arnett.zackary@gmail.com>
2021-07-28 08:41:18 -07:00
Bram Kragten 0d9d0aa18b Add legend to electricity graph, fix text color in table (#9629) 2021-07-28 08:40:43 -07:00
Bram Kragten f8dd1795bc Add animation to distribution (#9625) 2021-07-28 08:39:12 -07:00
Bram Kragten 1d7007584c Use currency from core config (#9628) 2021-07-28 08:38:04 -07:00
Charles Garwood 8cd9f891fb Add remove failed node support to Z-Wave JS devices (#9560)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-28 13:38:50 +00:00
Franck Nijhof 6ab0f1db57 Add currency core configuration (#9620)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-07-28 12:48:39 +02:00
Paulus Schoutsen 37d754d069 Bumped version to 20210727.0 2021-07-27 15:25:12 -07:00
Charles Garwood e12b194d41 Add Z-Wave JS Heal Node wizard (#9562) 2021-07-28 00:16:19 +02:00
Michelle Fuchs 07d7fa26fe Show value of 'Before'-time in automation editor #9142 (#9598) 2021-07-28 00:13:38 +02:00
Bram Kragten 73b9b87ef3 Update energy dashboard (#9624) 2021-07-27 13:57:09 -07:00
Bram Kragten 0c0091375c Fix grid onboarding (#9621) 2021-07-27 21:34:43 +02:00
Bram Kragten 21a29ed3a5 Statistic sums requires at least 2 values (#9616) 2021-07-26 22:47:50 +00:00
Bram Kragten a6312f4279 Fix sidebar view edit mode (#9615) 2021-07-26 22:11:34 +00:00
Bram Kragten f459abdf85 Fix statistics graph (#9607) 2021-07-26 15:03:31 -07:00
Bram Kragten 586fa1d0f0 Fix zoom setting in maps card (#9613)
Fixes #9611
2021-07-26 15:02:50 -07:00
Bram Kragten bf4192a1f0 Bump Vaadin elements (#9609) 2021-07-26 15:02:23 -07:00
Bram Kragten ac31eedf65 Bump material elements (#9610) 2021-07-26 15:02:01 -07:00
Bram Kragten b05dc5141c Fix chart tooltip footer always rendering (#9614) 2021-07-26 15:01:32 -07:00
Raman Gupta 32c6fb14dd Re-add success/failure indicator on call service button in dev tools (#9600)
* Re-add success/failure indicator on call service button in dev tools

* move success outside of try block

* Export HaProgressButton
2021-07-26 23:59:49 +02:00
Raman Gupta 982c940381 Try to fix download of zwave_js logs (#9612) 2021-07-26 23:26:22 +02:00
Bram Kragten a7a8aaa887 Merge pull request #9608 from home-assistant/dev
20210726.0
2021-07-26 23:04:05 +02:00
Philip Allgaier bf83a9980e Add bottom margin to <ha-map> in more-info-person (#9604) 2021-07-26 22:45:23 +02:00
Bram Kragten 11be603ed3 Bumped version to 20210726.0 2021-07-26 22:18:41 +02:00
Bram Kragten a432cf8405 Fix selected icon of picker elements (#9606) 2021-07-26 22:17:29 +02:00
Bram Kragten 9dd6b3b72d Add Energy panel (#9445)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-07-26 09:57:59 -07:00
Thomas Lovén faca62b55f Avoid gaps in grid card with conditional (#9507)
* Avoid gaps in grid card with conditional. Fix #9433

* Rename hidden parameter

* Restore devcontainer.json

* Fix accidental change

* Update src/panels/lovelace/cards/hui-grid-card.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Prettier

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-26 14:43:14 +02:00
J. Nick Koston a339de89f5 Add support for lock unlocking,locking and jammed states (#9537) 2021-07-20 10:52:24 -10:00
Charles Garwood e40c90e9c0 Translate Z-Wave JS Re-Interview Device button (#9566) 2021-07-19 11:23:10 +02:00
Bram Kragten 3f447bb8a7 Bump Polymer (#9525)
* Bump Polymer

* Remove formatting from patch

* Cleanup

* Fix Vaadin

* Fix typing
2021-07-16 01:23:09 +02:00
Bram Kragten 21dca3fbf8 Use patch for @lit-labs/virtualizer (#9524)
* Use patch for `@lit-labs/virtualizer`

* Re-organize

* Use original for patch

* Also patch import of EventTarget polyfill

* Delete EventTarget-ponyfill.js

* Prettier
2021-07-16 01:16:24 +02:00
Bram Kragten 1078bb4287 Add statistics-graph-card (#9479)
* Add `statistics-graph-card`

* Make variable names clearer
2021-07-16 01:16:02 +02:00
Charles Garwood daeed06e70 Clean up Z-Wave JS dialog CSS (#9561) 2021-07-16 01:13:00 +02:00
Bram Kragten 1206e2d75f Change Data Entry Flow loading step description logic + cleanups (#9558)
* Change Data Entry Flow loading step description logic + cleanups

Fixes #6251

* Lint

* Address comment
2021-07-15 21:07:25 +02:00
Bram Kragten cc81239b9d Add struct for fire-dom-event action (#9556) 2021-07-15 12:08:33 +02:00
Bram Kragten e797c01761 Update lint rules (#9563)
Updated deps

Added `unused-imports`, prefer arrow, and import order
2021-07-15 12:08:04 +02:00
Charles Garwood 12f7366968 Replace home ID with config entry title in Z-Wave device Info (#9488) 2021-07-13 18:05:22 +02:00
Bram Kragten b7fd7abe85 increase memory demo action (#9553) 2021-07-13 10:15:59 +02:00
Jason Hunter a5e1f3d165 bump hls.js (#9546)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-13 09:00:51 +02:00
Joakim Sørensen 212d047ada Place Z-Wave JS stages in grid (#9548) 2021-07-12 12:44:07 -04:00
Bram Kragten 2e16127fde Inline mdi icons with babel plugin + bump build deps (#9498) 2021-07-12 09:26:07 -07:00
Charles Garwood e8b53a619d Show parameter number on ZWaveJS device config panel (#9494) 2021-07-12 09:41:54 +02:00
posixx df1ca1fd96 HA frontend change for alarm panel vacation mode (#8326)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-08 16:21:09 +02:00
Bram Kragten 8f85132d48 Download translations on release (#9530)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-07-08 13:04:38 +00:00
Marius 349144599c Change text on Yaml configuration reloading (#9529)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-08 13:04:17 +00:00
Thomas Lovén 979093923b Colorize trace paths for choose without explicit default case (#9527)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-07-08 00:15:20 +02:00
Thomas Lovén 137f8ad4cb Revert "Colorize trace paths for choose without explicit default case"
This reverts commit c1f462b8f8.
2021-07-07 21:39:33 +00:00
Thomas Lovén c1f462b8f8 Colorize trace paths for choose without explicit default case 2021-07-07 21:28:13 +00:00
Bram Kragten 6701c4c371 Dedupe dependencies (#9523)
+ yarn bump + CI check for duplicate dependencies
2021-07-07 17:31:37 +02:00
Bram Kragten fc6e459c09 Upgrade to yarn 2 (#9500) 2021-07-07 16:33:24 +02:00
Philip Allgaier 9e28b3447e Fixed "ID" spelling in trigger field label (#9518) 2021-07-07 11:07:57 +02:00
Bram Kragten 5c737e1969 Merge pull request #9517 from home-assistant/dev 2021-07-07 09:58:19 +02:00
Bram Kragten 569765e77e Bumped version to 20210707.0 2021-07-07 09:43:20 +02:00
Bram Kragten bc0d63ed12 Better fix for Safari IBD bug (#9514)
* Better fix for Safari IBD bug

* comment
2021-07-07 09:42:41 +02:00
GitHub Action 02f9893522 Translation update 2021-07-07 00:47:35 +00:00
Bram Kragten b4bbe63f0f Fix device trigger clearing trigger id (#9511) 2021-07-06 11:53:21 +02:00
Bram Kragten fabbcac99f Merge pull request #9510 from home-assistant/dev 2021-07-06 11:09:42 +02:00
Bram Kragten b1b5ab6949 Bumped version to 20210706.0 2021-07-06 10:47:41 +02:00
Bram Kragten 4b9487183b Add tracing to scripts (#9486) 2021-07-06 10:46:51 +02:00
Bram Kragten de5a817953 Add UI for trigger condition (#9505) 2021-07-06 10:43:07 +02:00
GitHub Action 4970f640fa Translation update 2021-07-06 00:47:02 +00:00
Bram Kragten 18996535b7 Fix race in translations loading (#9499) 2021-07-05 11:05:49 +02:00
GitHub Action 2a1e31b5e9 Translation update 2021-07-05 00:47:09 +00:00
GitHub Action 8ca9a0f409 Translation update 2021-07-04 00:47:10 +00:00
GitHub Action fcc89a67ba Translation update 2021-07-03 00:46:50 +00:00
GitHub Action 1f377d43c5 Translation update 2021-07-02 00:47:14 +00:00
Joakim Sørensen 30d6c68908 Fix writing supervisor entrypoint (#9489) 2021-07-01 11:34:22 +02:00
Bram Kragten dc781da93a Use ES5 build for Supervisor on Safari 12 and below (#9485) 2021-07-01 09:27:02 +02:00
Bram Kragten 36c20e4348 Limit height of charts to 400px (#9487) 2021-07-01 07:54:17 +02:00
GitHub Action 4466950bb8 Translation update 2021-07-01 00:47:12 +00:00
Joakim Sørensen be29828454 Change path for codespaces (#9484) 2021-06-30 15:58:01 +02:00
Bram Kragten 7bab245073 Merge pull request #9483 from home-assistant/dev 2021-06-30 12:17:54 +02:00
Bram Kragten f5dcf0b760 Bumped version to 20210630.0 2021-06-30 12:03:07 +02:00
Bram Kragten 8141f78a92 Use ES5 build for Safari 12 and below (#9482) 2021-06-30 12:02:01 +02:00
Joakim Sørensen be244b3d00 Rename hassos -> haos (#9477) 2021-06-30 12:00:33 +02:00
Bram Kragten 805f5ff9b6 Recreate columns if cards change (#9480) 2021-06-30 11:52:36 +02:00
Bram Kragten 76daeb7e55 Fix wait for not loaded panel (#9478) 2021-06-30 11:50:49 +02:00
GitHub Action 9594c8106e Translation update 2021-06-30 00:47:15 +00:00
Joakim Sørensen ed4052365c Allow placeholders in config and option flows (#9314) 2021-06-30 01:09:18 +02:00
Joakim Sørensen 377ebadc10 Show note about integrations not in UI even for non-advanced (#9457)
* Show note about integrations not in UI even for non-advanced

* Address comments
2021-06-30 01:08:58 +02:00
Charles Garwood ed4809b71e Handle config entry not loaded on Z-Wave JS config panel (#9451)
* Handle config entry not loaded on Z-Wave JS config panel

* Move ERROR_STATES to data/config_entries and import
2021-06-29 19:04:42 -04:00
Shane Qi db37dffdbb Fixed Logbook Card/Panel/Dialog Incorrect Entires for input_datetime Entities (#9399)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-30 00:32:19 +02:00
Bram Kragten 13cab7e301 Fix logbook card (#9476) 2021-06-29 18:32:51 +02:00
Charles Garwood 0a50fc66e5 Add ZWave JS heal network UI (#9449)
* Add Z-Wave JS heal network dialog

* progress bar tweak

* tweak package.json

* typing tweak

* Update yarn.lock

* Align versions

* address review comments

* Use indeterminate linear-progress instead of circular-progress

* cleanup circular-progress

* prettier

* additional review cleanup

* subscribe to status update if heal already running

* more cleanup

* more cleanup

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-29 11:14:50 -04:00
uvjustin a3d1a3566d Fix ha-hls-player cleanup for lit 2 (#9388)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-29 15:44:18 +02:00
Philip Allgaier ba0be927ed Set min value for history graph card rendered hours (#9464) 2021-06-29 15:01:42 +02:00
Philip Allgaier 4260606267 Set minimum = 1 hours to show (#9466) 2021-06-29 15:01:18 +02:00
Philip Allgaier 4665db4f27 Fix integration card rename dialog logic (#9467) 2021-06-29 15:00:27 +02:00
Franck Nijhof 43503ba085 Fix number entity row availability when state unknown (#9475) 2021-06-29 14:57:39 +02:00
Joakim Sørensen 0a83a704f1 Ignore previous versions in add-on changelog (#9474) 2021-06-29 14:57:25 +02:00
GitHub Action 08de941c90 Translation update 2021-06-29 00:47:16 +00:00
GitHub Action 62228ef144 Translation update 2021-06-28 00:47:17 +00:00
GitHub Action 9731257782 Translation update 2021-06-27 00:47:51 +00:00
GitHub Action 4ec9c9c16e Translation update 2021-06-26 00:46:57 +00:00
Franck Nijhof 45436731e2 Fix select entity disabled when no item selected (#9465) 2021-06-24 21:36:23 -07:00
GitHub Action 27730e65e7 Translation update 2021-06-25 00:47:31 +00:00
rianadon a4aba93d57 Add input elements to login page for password managers (#9369) 2021-06-24 23:14:36 +02:00
Martin Hjelmare d93db16963 Add button for zwave_js options flow (#9001)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-06-24 13:21:30 +02:00
GitHub Action c327fe11b8 Translation update 2021-06-23 00:48:18 +00:00
GitHub Action 4fbc31d0b0 Translation update 2021-06-22 00:48:29 +00:00
Bram Kragten 9a4a1cb4ec Fix charts tooltips and legends (#9448) 2021-06-21 10:38:50 +02:00
Joakim Sørensen 202d6957bc Allow clearing values in optional selects (#9442)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-21 09:41:38 +02:00
Joakim Sørensen 14fcff7774 Fix secrets schema (#9446) 2021-06-21 09:41:06 +02:00
GitHub Action 2c9aa1cab4 Translation update 2021-06-21 00:48:39 +00:00
GitHub Action 7745c10d07 Translation update 2021-06-20 00:48:37 +00:00
Franck Nijhof c1d571de42 Add Select entity (#9422)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-19 13:26:19 +02:00
GitHub Action cecb66451c Translation update 2021-06-19 00:48:32 +00:00
Bram Kragten 0ef3421fa2 Bump chartjs to version 3 (#9401) 2021-06-18 11:15:07 +02:00
GitHub Action f88e238d41 Translation update 2021-06-18 00:48:41 +00:00
Raman Gupta ce3c8f264d Update zwave_js log subscription to handle core changes (#9262) 2021-06-17 17:19:18 +02:00
Bram Kragten 9fbd594f37 Check if /proc/version exists (#9438) 2021-06-17 15:23:20 +02:00
Bram Kragten 5ad95cad90 Support white color mode (#9386) 2021-06-17 15:23:08 +02:00
GitHub Action 7e507b40c4 Translation update 2021-06-17 00:48:10 +00:00
Joakim Sørensen 446a9b5c02 Don't clear action on expected error (#9428) 2021-06-16 11:13:30 +02:00
GitHub Action e02e61384e Translation update 2021-06-16 00:48:25 +00:00
Raman Gupta 5deb570fdf Add button to download logs from zwave_js logs page (#9395) 2021-06-16 00:02:40 +02:00
Joakim Sørensen 915c46f144 Fix add-on configuration validation (#9424) 2021-06-15 21:00:28 +02:00
Philip Allgaier 30d6c5eaf3 Gracefully handle logbook retrieval errors (#9377) 2021-06-15 19:54:18 +02:00
Philip Allgaier 6e50d1166a Only attempt to get "trace/contexts" if admin (#9378)
* Only attempt to get "trace/contexts" if admin

* Changes from review
2021-06-15 16:38:37 +02:00
Philip Allgaier 0e3eed0563 Fix supervisor text "error_addon_not_started" (#9412) 2021-06-15 15:38:14 +02:00
Joakim Sørensen 1b1676cecc Use poll for webpack for WSL (#9425) 2021-06-15 15:34:15 +02:00
GitHub Action d911fe6a0b Translation update 2021-06-15 00:48:36 +00:00
Bram Kragten 22253a3385 Add header and description to progress options flow (#9423) 2021-06-15 01:10:24 +02:00
GitHub Action 38640c99e3 Translation update 2021-06-14 00:48:26 +00:00
GitHub Action d6df8bddea Translation update 2021-06-13 00:48:28 +00:00
GitHub Action ddfc4bd98e Translation update 2021-06-12 00:48:12 +00:00
Shane Qi 3d6674325c Fix the issue that logbook card doesn't translate context.user_id to name if it's a user's id. (#9383)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-10 14:51:24 +02:00
Bram Kragten 194829f5b1 Generalize map (#9331)
* Generalize map

* Fix path opacity

* Add fitZones
2021-06-10 14:22:44 +02:00
GitHub Action 11a77253f4 Translation update 2021-06-10 00:49:02 +00:00
GitHub Action 67be2343f8 Translation update 2021-06-09 00:48:19 +00:00
Joakim Sørensen e9b1b3d853 Fix issues with restoring snapshot during onboarding (#9385)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-08 17:57:53 +02:00
Bram Kragten 8a33d174d7 FIx selecting service/url path action after choosing default action (#9376)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-06-08 14:24:58 +02:00
Joakim Sørensen 226d6216b7 Build wheels for 3.9-alpine3.13 (#9390) 2021-06-08 13:07:02 +02:00
GitHub Action 1925bb01be Translation update 2021-06-08 00:49:18 +00:00
Bram Kragten 82a4806e01 Change line logic 2021-06-07 10:45:57 +02:00
Joakim Sørensen ce419fae7b Add password confirmation to snapshot creation (#9349)
* Add password confirmation to snapshot creation

* Remove confirm_password before sending

* change layout

* style changes

* Adjust styling

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-07 10:45:20 +02:00
Joakim Sørensen c68b76e2da Add hardware dialog (#9348)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-07 10:16:33 +02:00
Joakim Sørensen 342020b420 Fix downloads on mobile (#9375) 2021-06-07 10:15:43 +02:00
GitHub Action 1e6e99e3c7 Translation update 2021-06-07 00:49:13 +00:00
GitHub Action 2e9aafc377 Translation update 2021-06-06 00:49:09 +00:00
dependabot[bot] 299c863f49 Bump ws from 6.2.1 to 6.2.2 (#9372) 2021-06-05 23:52:13 +02:00
Bram Kragten c2792a28ba Move attributes down in more info person and timer (#9368) 2021-06-05 12:52:27 +02:00
GitHub Action 635a027a8e Translation update 2021-06-05 02:40:15 +00:00
Will Adler a45b8ca8e7 Add period to end of sentence (#9361) 2021-06-04 08:57:03 +02:00
GitHub Action 1e6e945a07 Translation update 2021-06-04 02:52:56 +00:00
Bram Kragten 8666e6baae Merge pull request #9358 from home-assistant/dev 2021-06-03 23:12:30 +02:00
Bram Kragten f71157c24d Remove tsc from pre commit (#9359) 2021-06-03 22:57:03 +02:00
Bram Kragten e87a2b36cf Bumped version to 20210603.0 2021-06-03 22:51:53 +02:00
Bram Kragten 5418474f64 Polyfill globalThis in latest build (#9352) 2021-06-03 22:50:33 +02:00
Philip Allgaier 8836ba6ceb Pick the correct backend-selected active theme (#9357) 2021-06-03 22:48:52 +02:00
Bram Kragten 509c5b497a Disable babel compact option (#9335) 2021-06-03 12:34:30 -07:00
Joakim Sørensen e00bcc9f48 Better exit navigation for my-ingress (#9342) 2021-06-03 10:01:12 -07:00
Joakim Sørensen bdef9fd040 Add missing media folder to snapshot (#9341) 2021-06-03 10:21:04 +02:00
GitHub Action c956491ec5 Translation update 2021-06-03 03:48:04 +00:00
Bram Kragten 68bc549d6a Use HLS light build (#9338)
* Use HLS light build

* Bump hls, backBufferLength
2021-06-02 18:34:18 +02:00
Bram Kragten 9c64eafc21 Fix ZHA visualization (#9337) 2021-06-02 18:33:55 +02:00
Bram Kragten b05e86d442 Fix noUnderline in search input (#9339) 2021-06-02 18:33:44 +02:00
Bram Kragten fe5f9576c6 Fix dev 2021-06-02 10:11:29 +02:00
Brynley McDonald 1b282b65b7 Add QR code to long lived access tokens dialog (#8948)
* Add QR code to long lived access tokens dialog

* Apply suggestions from code review

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Further changes from code review

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-02 09:59:22 +02:00
GitHub Action e49664bad3 Translation update 2021-06-02 04:10:37 +00:00
Bram Kragten 2db9f33c41 Merge pull request #9334 from home-assistant/dev 2021-06-01 21:53:08 +02:00
Bram Kragten 2a30b55a43 Bumped version to 20210601.1 2021-06-01 21:30:51 +02:00
Paulus Schoutsen 9d0b20adce Add support for system options v2 (#9332)
* Add support for system options v2

* Update src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update dialog-config-entry-system-options.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-01 12:22:25 -07:00
Bram Kragten acd5e1c081 Fix back button too wide on mobile (#9333) 2021-06-01 12:12:00 -07:00
Bram Kragten cc1c5e45b2 Display error when enabling/disabling config entries (#9325) 2021-06-01 21:03:00 +02:00
Bram Kragten 038199c447 Change the type of debounce, use arrow functions (#9328) 2021-06-01 11:53:45 -07:00
Bram Kragten 8a1eab7ceb Cleanup virtualizer styles (#9327) 2021-06-01 11:51:30 -07:00
Joakim Sørensen bc5bd35448 Filter adapters with information from the Supervisor (#9322)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-06-01 20:12:54 +02:00
Bram Kragten 1795fd56b7 Don't rotate chart axis labels (#9329) 2021-06-01 10:28:03 -07:00
Bram Kragten 3d788d6056 Merge pull request #9324 from home-assistant/dev 2021-06-01 11:56:02 +02:00
Bram Kragten 4a7c33edad Bumped version to 20210601.0 2021-06-01 11:40:37 +02:00
rianadon 797f60d725 Show pressure units in weather details card (#9295) 2021-06-01 11:40:04 +02:00
Bram Kragten 2427d68aa1 Use local version 0.7 of lit-virtualizer (#9321) 2021-06-01 11:39:15 +02:00
GitHub Action 00c6b0f8ed Translation update 2021-06-01 04:14:44 +00:00
Paulus Schoutsen 7560f98d70 Merge pull request #9320 from home-assistant/dev 2021-05-31 15:55:09 -07:00
Paulus Schoutsen 7b8d4ab3d6 Update translations 2021-05-31 15:50:47 -07:00
Paulus Schoutsen 07a1a805f6 Bumped version to 20210531.1 2021-05-31 15:44:59 -07:00
Paulus Schoutsen d8bab6aba9 Add support for disable polling system option (#9316) 2021-05-31 15:40:50 -07:00
Bram Kragten a930e2dc75 Fix store auth disappearing (#9312) 2021-05-31 15:35:51 -07:00
J. Nick Koston 2eb35668fa Seperate addresses in network configuration (#9319) 2021-05-31 15:31:33 -07:00
GitHub Action 07f4e5ac5c Translation update 2021-05-31 03:47:12 +00:00
Paulus Schoutsen 1533c22d5c Merge pull request #9310 from home-assistant/dev 2021-05-30 20:30:44 -07:00
Paulus Schoutsen db82a90414 Bumped version to 20210531.0 2021-05-30 20:17:09 -07:00
Bram Kragten 51a693badf Convert ha-store-auth-card to Lit/TS/ha-card (#9300) 2021-05-30 20:16:45 -07:00
Bram Kragten 2aa8f5b352 Dev states: replace pattern in word by wildcard search (#9288) 2021-05-30 20:11:53 -07:00
Bram Kragten 93b3b8f985 Fix editor structs (#9286) 2021-05-30 20:08:46 -07:00
Bram Kragten 92c8bd80b5 Catch translation errors (#9299) 2021-05-30 17:02:03 +02:00
Philip Allgaier 528af0157d Move entity attribution out of attribute expansion panel (#9296) 2021-05-30 16:06:22 +02:00
Bram Kragten 10a77b6278 Update translations 2021-05-30 16:02:03 +02:00
GitHub Action 03bbf6a582 Translation update 2021-05-30 03:38:49 +00:00
GitHub Action 63fcb649d2 Translation update 2021-05-29 03:21:09 +00:00
Bram Kragten 4f60a92b92 Fix default themes (#9290)
* Fix default themes

* Simplify pick theme row
2021-05-28 20:02:28 -07:00
Bram Kragten 0419c1a41f Fix icon loading (#9289) 2021-05-28 19:54:28 -07:00
Joakim Sørensen 2d5ae78521 Add selection to snapshot table for mass deletion (#9284)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-28 15:49:40 +02:00
Joakim Sørensen 959134df02 Better secrets support in add-on configuration (#9275) 2021-05-28 14:37:16 +02:00
Bram Kragten cf03f103ab Merge pull request #9285 from home-assistant/dev 2021-05-28 12:45:21 +02:00
Bram Kragten a9f9fc4ce2 Bumped version to 20210528.0 2021-05-28 12:26:38 +02:00
dependabot[bot] cfb370a3c8 Bump dns-packet from 1.3.1 to 1.3.4 (#9281)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-28 12:25:46 +02:00
Bram Kragten 353435c8d5 Fix icon db loading (#9280) 2021-05-28 11:54:20 +02:00
Bram Kragten c8c85d096b Show less ticks in charts (#9279) 2021-05-28 10:16:37 +02:00
GitHub Action 19c9c8f227 Translation update 2021-05-28 03:03:41 +00:00
Bram Kragten 6ea2a29eea Hide attribute measurement and editable attributes (#9272) 2021-05-27 11:48:27 +02:00
Joakim Sørensen 59f3f819a6 Revert name change from selectedTheme to selectedThemeSettings (#9273) 2021-05-27 10:21:58 +02:00
GitHub Action 93e8f52880 Translation update 2021-05-27 02:45:51 +00:00
Joakim Sørensen 02810efcc4 Replace Hass_io_ prefix for snapshot downloads (#9270) 2021-05-26 21:56:27 +02:00
Bram Kragten 4a8a7c997e Merge pull request #9267 from home-assistant/dev 2021-05-26 17:33:32 +02:00
Bram Kragten 4b9be7ce16 Fix entity filtering in dev states (#9268) 2021-05-26 17:27:45 +02:00
Bram Kragten f3ec09e480 Bumped version to 20210526.0 2021-05-26 16:58:31 +02:00
Bram Kragten 8291a84e3e Hide network config when not loaded (#9265) 2021-05-26 07:53:54 -07:00
J. Nick Koston b0e1f0f73a Add network configuration (#9210)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-26 16:44:15 +02:00
Bram Kragten a66b966e7d Fix a bunch of updates triggering updated (#9260) 2021-05-26 16:29:50 +02:00
Philip Allgaier 5f56040c64 Add friendly_name to dev tools "Entity" column + fuzzy search (#7582) 2021-05-26 15:29:51 +02:00
Bram Kragten eaccd22267 Fix chartjs deprecation warnings (#9261) 2021-05-26 15:05:01 +02:00
Bram Kragten 27845a7345 Fix logbook height (#9258) 2021-05-26 12:44:10 +02:00
Bram Kragten f7ef8180e4 Guard for undefined item in quick bar (#9259) 2021-05-26 12:43:59 +02:00
Bram Kragten 5958eb9a55 Minor dependency bumps (#9249) 2021-05-26 12:04:39 +02:00
Bram Kragten 3ef2912b60 Fix typo in translation key 2021-05-26 11:19:09 +02:00
Joakim Sørensen fa9c6a765a Replace closing with closed in dialogs (#9257) 2021-05-26 11:10:27 +02:00
Bram Kragten c4a8899780 Bump idb-keyval (#9248)
https://github.com/jakearchibald/idb-keyval#updating-from-3x
2021-05-26 10:22:38 +02:00
Bram Kragten 3cc4628d03 Bump test dependencies (#9244) 2021-05-26 10:02:02 +02:00
GitHub Action b6c5223221 Translation update 2021-05-26 02:25:19 +00:00
Philip Allgaier cbd6d4251c Prevent shrinking of percent value in supervisor metrics (#9033) 2021-05-26 00:24:30 +02:00
Bram Kragten fdcbb5b432 Bump js-yaml (#9245) 2021-05-26 00:13:58 +02:00
Bram Kragten de09e31815 Fix resetting theme, only fallback to light when theme doesnt support… (#9253) 2021-05-26 00:11:17 +02:00
Philip Allgaier f55e911313 Prevent formatting for unknown attribute (#9252) 2021-05-26 00:08:41 +02:00
Bram Kragten 465a91dbf3 Fix circulair progress producing scrollbars (#9247) 2021-05-25 23:59:24 +02:00
Bram Kragten 835a7833ae Bump memoize one (#9243) 2021-05-25 23:53:58 +02:00
Bram Kragten 179717d40c Fix rollup build (#9246) 2021-05-25 23:51:31 +02:00
Philip Allgaier 3d4d789f7f Detect and format date & timestamp attributes (#9074) 2021-05-25 22:39:21 +02:00
Bram Kragten d97fb19f05 Ingress: Wait for dialog to close before navigating (#9250) 2021-05-25 22:11:52 +02:00
Joakim Sørensen 0dd3757df2 Refresh snapshot create/restore dialogs (#9223)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-25 21:29:32 +02:00
Philip Allgaier c32a4546f3 Translate NC account connection state (#9167) 2021-05-25 18:12:56 +02:00
Raman Gupta 1bb025ccd0 Add log level changed message when user changes Z-Wave JS log level (#9238)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-25 17:59:00 +02:00
Philip Allgaier 2b8033a97f Prevent cutting off of attributes in more-info light (#9219)
* Prevent cutting off of attributes in more-info light

* Update src/dialogs/more-info/controls/more-info-light.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-25 17:58:20 +02:00
Joakim Sørensen 21a3a8c594 Navigate cleanup (#9202) 2021-05-25 17:46:36 +02:00
Philip Allgaier 1026e90296 Put attributes in more-info into a foldable section (#9220)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-25 17:44:02 +02:00
Bram Kragten 0eca602e61 Use comboBoxRenderer from lit-vaadin-helpers (#9201) 2021-05-25 13:27:49 +02:00
Philip Allgaier 7f75ca81f1 Add support for custom themes to use dark mode (#8347) 2021-05-25 13:26:35 +02:00
Bram Kragten 8af05e2726 Optimise data table and device dashboard (#9217) 2021-05-25 13:12:44 +02:00
Bram Kragten 0a478ee1da Fix tabs styling (#9241) 2021-05-25 12:05:20 +02:00
GitHub Action a4bdc5a05f Translation update 2021-05-25 02:00:53 +00:00
Philip Allgaier d425767dae Ensure timer row uses correct state translation keys (#9143)
* Ensure timer row uses correct state translation keys

* Changes from review

* Update src/panels/lovelace/entity-rows/hui-timer-entity-row.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Move logic to data/timer

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-24 23:27:00 +02:00
Philip Allgaier c78382c119 Make it clear that those are the installed add-ons (#9228) 2021-05-24 23:20:22 +02:00
Philip Allgaier ee15ddfbc3 Show correct number of disabled integrations (#9232) 2021-05-24 22:47:28 +02:00
Philip Allgaier 0af14eb77e Add refresh button to state dev tools (#9231) 2021-05-24 22:37:29 +02:00
GitHub Action 583cc4bc8a Translation update 2021-05-24 02:01:00 +00:00
GitHub Action 2ee92f48e6 Translation update 2021-05-23 02:04:38 +00:00
Franck Nijhof d05e02ab3e Add the Supervisor as an ignorable discovery source (#9229) 2021-05-22 19:26:27 +02:00
Joakim Sørensen abb9f8e233 Remove padding when narrow (#9209) 2021-05-22 06:12:51 -07:00
GitHub Action f873ef9b59 Translation update 2021-05-22 01:52:23 +00:00
Philip Allgaier 1255b56522 Add missing translations to voice command dialog (#9221) 2021-05-21 10:11:31 +02:00
Bram Kragten fd9bb4d8cc Make chrome work-around work in iframes (#9200) 2021-05-21 09:09:31 +02:00
GitHub Action 9328576b55 Translation update 2021-05-21 01:53:57 +00:00
Philip Allgaier 70a1edd1dd Allow users to select time format for UI rendering (#9042)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-20 16:23:53 +02:00
Brynley McDonald 87e4c209f4 Add icon to Entities card schema (#9208) 2021-05-20 15:29:32 +02:00
Bram Kragten 3d0a5642cc Only apply on Safari 14.0, and not 14.0.1 2021-05-20 14:23:50 +02:00
GitHub Action e211d812ad Translation update 2021-05-20 01:50:44 +00:00
GitHub Action 0dcf673b87 Translation update 2021-05-19 01:50:13 +00:00
Paulus Schoutsen cb14e1f20c Bumped version to 20210518.0 2021-05-18 15:12:08 -07:00
Bram Kragten 52087c0e30 Fix _initialize (#9206)
* Fix _initialize

* Update ha-demo.ts
2021-05-18 15:11:24 -07:00
Paulus Schoutsen 1b9286db76 Fix lit warnings (#9204)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-18 15:01:43 -07:00
Bram Kragten bc92c0b052 Upgrade to Lit 2 (#9199) 2021-05-18 07:37:53 -07:00
Joakim Sørensen 245bb639f2 Fix URL to jinja template docs (#9198) 2021-05-18 10:22:03 +02:00
GitHub Action 8d81ed58c8 Translation update 2021-05-18 01:57:40 +00:00
Paulus Schoutsen 7890ca85a8 Bumped version to 20210517.0 2021-05-17 16:06:19 -07:00
Paulus Schoutsen 07bab7b264 Drop app-route (#9196) 2021-05-17 16:05:58 -07:00
Paulus Schoutsen 5730c14dc1 Make hassio backwards compat (#9195) 2021-05-17 23:59:46 +02:00
Paulus Schoutsen f8e8b5ad18 Trace fixes (#9192)
* Show sub-conditions

* Better show errors in timeline

* Add rendered nodes

* Fix some rendering issues with sub-conditions in timeline

* Improve condition rendering
2021-05-17 20:19:47 +02:00
Charles Garwood fd2728c02c Fix Z-Wave JS add node wizard and add interview status (#9145) 2021-05-17 17:15:01 +02:00
Bram Kragten 7e2bf920e1 Correct types for script automation editors (#9184) 2021-05-17 07:57:43 -07:00
Bram Kragten 1f65328f2d Make slider default for number selector (#9190) 2021-05-17 07:55:12 -07:00
Bram Kragten 4f731baa00 Add guard for non color lights (#9186) 2021-05-17 16:24:39 +02:00
Bram Kragten 5abb3dd8c1 Use default behaviour for service target (#8650) 2021-05-17 14:12:16 +02:00
GitHub Action 0a672c55c5 Translation update 2021-05-17 01:54:21 +00:00
GitHub Action a6b2299c74 Translation update 2021-05-16 01:59:23 +00:00
Paulus Schoutsen 37cc6709d4 If we have a link, make it a link (#9181) 2021-05-15 12:25:28 +02:00
Paulus Schoutsen f4ffbe67e2 Remove shadowroot from ha-markdown-element (#9187) 2021-05-15 12:23:33 +02:00
GitHub Action 9f32d72a41 Translation update 2021-05-15 01:51:54 +00:00
Bram Kragten 64a117d8ac Fix yarn.lock 2021-05-14 22:32:41 +02:00
Matt Emerick-Law ebf0bdc840 Add duplicate scene functionality (#9175) 2021-05-14 21:44:03 +02:00
Julien Roy cc0a120bf6 Switch update and openChangelog button (#9174)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-14 16:55:38 +02:00
Bram Kragten fe2fe7468f Bump lodash (#9135) 2021-05-14 11:50:50 +02:00
Joakim Sørensen b12a10ccb5 Add snapshot contents as secondary info for partial snapshots (#9166) 2021-05-14 11:49:52 +02:00
Bram Kragten 2ad2a4b198 Bump lokalize deps + support object format for args (#9155)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-05-13 22:47:47 -07:00
GitHub Action 6a62f05657 Translation update 2021-05-14 01:54:56 +00:00
GitHub Action 4910f60ec4 Translation update 2021-05-13 01:54:52 +00:00
Bram Kragten d35168e88f Bump chart.js (#9160)
Replaces #9159
2021-05-12 17:09:21 -07:00
GitHub Action 01b3d2aca9 Translation update 2021-05-12 01:47:33 +00:00
dependabot[bot] 29e8d1cff0 Bump hosted-git-info from 2.7.1 to 2.8.9 (#9162)
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.7.1 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.9)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-11 11:24:05 +02:00
Michael 4e1d10cc08 Improve UX for counter and input_number helpers (#9061) 2021-05-11 10:52:44 +02:00
GitHub Action 3575d94ca1 Translation update 2021-05-11 01:46:41 +00:00
Bram Kragten d91546b532 Bump home-assistant-js-websocket (#9156) 2021-05-11 00:46:59 +02:00
Bram Kragten 9f554f4917 Silence babel warnings (#9158) 2021-05-10 22:57:42 +02:00
Bram Kragten d4720a9244 Align state info in center (#9153) 2021-05-10 22:22:54 +02:00
Philip Allgaier 5c466712db Fix missing customElement import after Lit 2.0 bump (#9157) 2021-05-10 22:11:08 +02:00
Joakim Sørensen 6dc7e852ae Use hass-tabs-subpage-data-table for supervisor snapshots (#9103)
* Use hass-tabs-subpage-data-table for supervisor snapshots

* comments

* type

* cleanup

* change translations

* Update hassio/src/dialogs/snapshot/dialog-hassio-create-snapshot.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* reset

* fix after rebase

* internalProperty -> state

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-10 18:17:16 +02:00
dependabot[bot] 785f614bd9 Bump lodash from 4.17.15 to 4.17.21 (#9154)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-10 16:12:38 +02:00
uvjustin 0a8e27249d Bump hls.js from v1.0.1 to v1.0.3 (#9147) 2021-05-10 11:06:16 +02:00
GitHub Action 15ee87ee67 Translation update 2021-05-10 01:45:53 +00:00
GitHub Action 12612a16df Translation update 2021-05-09 01:44:02 +00:00
Philip Allgaier 4f449e2600 Adjust token relative_date wording (#9138) 2021-05-08 17:30:31 +02:00
Paulus Schoutsen 7f49f039fd Close new automation dialog before moving to next step (#9071)
* Close new automatin dialog before next step

* Update dialog-thingtalk.ts

* Fix

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-08 13:53:07 +02:00
Bram Kragten 88dc65bc4e Dont require manifest for the overflow menu (#9129) 2021-05-08 13:08:28 +02:00
Paulus Schoutsen 6edebe18ad Use grid for sensor cards on 2nd view of teaching birds demo (#9132) 2021-05-08 13:07:58 +02:00
GitHub Action 38b3a9205d Translation update 2021-05-08 01:42:37 +00:00
Joakim Sørensen 4b796b4929 Add supervisor_ingress support to my (#9087) 2021-05-07 15:08:57 -07:00
Bram Kragten 83cabcac28 Add tsc and eslint to pre-commit (#9131) 2021-05-07 15:07:05 -07:00
Thomas Lovén d308c5d9b9 Add manual limit selection to graph header/footer (#9126)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-05-07 15:06:11 -07:00
Bram Kragten 9f032a61a9 Add compatibility for Lit 2.0 (#8878) 2021-05-07 13:16:14 -07:00
Bram Kragten 0f58214ba1 Bump leaflet + fix location editor (#9118) 2021-05-07 13:11:30 -07:00
Bram Kragten c48a60cce6 Bump superstruct (#9119)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-05-07 13:10:35 -07:00
Bram Kragten cd3ffceeff Fix for when the value doesnt get changed by the backend when we send it (#9105) 2021-05-07 14:33:33 +02:00
Bram Kragten 9be4a00169 Update UI when service schema change (#9120) 2021-05-07 11:28:37 +02:00
Bram Kragten a9c7a39a47 Fix positioning of preload checkbox (#9115) 2021-05-07 11:16:25 +02:00
Philip Allgaier abcdd60a21 Convert GPS to uppercase in attribute name (#9124) 2021-05-07 11:14:03 +02:00
Philip Allgaier a94f85a100 Fix alignment of Entities card header toggle (#9123) 2021-05-07 11:13:48 +02:00
GitHub Action 9755bf723f Translation update 2021-05-07 01:42:34 +00:00
Philip Allgaier a71ebcf47e Bump js-xss to 1.0.9 (#9121) 2021-05-06 19:51:08 +02:00
GitHub Action 72695631cd Translation update 2021-05-06 01:39:12 +00:00
Bram Kragten 2af211b543 Guard for undefined values in attribute filtering (#9089) 2021-05-05 10:32:24 +02:00
Joakim Sørensen 6e5e2625d6 Show supervisor addon configuration error (#8950)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-05 10:26:11 +02:00
Joakim Sørensen 23c1c2f5eb Bump wheels to 3.8-alpine3.12 (#9098) 2021-05-05 08:19:58 +02:00
GitHub Action da85ee5d01 Translation update 2021-05-05 01:39:25 +00:00
Bram Kragten 9612bc78fe Merge pull request #9097 from home-assistant/dev 2021-05-04 23:21:05 +02:00
Joakim Sørensen d408e8653c Return instead of trhow (#9094) 2021-05-04 23:03:57 +02:00
Bram Kragten cc76ccc3c9 Bumped version to 20210504.0 2021-05-04 23:01:56 +02:00
Bram Kragten 105a00d3e4 Use hs color when outside of wheel (#9088) 2021-05-04 22:51:28 +02:00
Philip Allgaier 2c08cba8cc Draw a <hr> above the attributes in more-info (#9090) 2021-05-04 22:04:27 +02:00
Philip Allgaier 344b11a204 Prevent not needed <hr> in more-info-light (#9080) 2021-05-04 14:18:02 +02:00
GitHub Action 1ff5bf0fd5 Translation update 2021-05-04 01:43:58 +00:00
Bram Kragten 2b86137388 Merge pull request #9079 from home-assistant/dev 2021-05-03 16:16:58 +02:00
Bram Kragten c29cf7f77c Bumped version to 20210503.0 2021-05-03 15:47:44 +02:00
Bram Kragten 193cb46d60 Config flow: Show next when not last step (#9078) 2021-05-03 15:47:03 +02:00
Bram Kragten 9dc864d486 Break word if possible instead if break anywhere (#9076) 2021-05-02 20:42:04 -07:00
Bram Kragten cee166839a Bump Lit element (#9068) 2021-05-02 20:41:00 -07:00
GitHub Action 1a60a3c728 Translation update 2021-05-03 01:49:21 +00:00
Paulus Schoutsen 5d946778cb Show setting for auto connect seperately if currently connected (#9072)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-05-02 14:45:53 +02:00
Paulus Schoutsen ac5f85820f Integration Card: Fix Safari header break and deal with long errors (#9070) 2021-05-02 10:54:40 +02:00
GitHub Action 716e100a28 Translation update 2021-05-02 01:53:59 +00:00
Charles Garwood 7b8cb16c12 Add "subscribed to log" message on Z-Wave JS log subscription (#9062) 2021-05-01 14:31:59 +02:00
Philip Allgaier 00d46424a3 Translate new setup time info header + add blank before unit (#9067) 2021-05-01 14:31:43 +02:00
Philip Allgaier 2a5f940744 Ensure weather icon is centered in forecast (#9065) 2021-05-01 14:31:01 +02:00
Paulus Schoutsen 13cc016b36 Fix some hassio things (#9059) 2021-05-01 14:30:33 +02:00
GitHub Action a8d49c27c8 Translation update 2021-05-01 01:48:36 +00:00
Paulus Schoutsen 8fdbe447c1 Merge pull request #9060 from home-assistant/dev
20210430.0
2021-04-30 12:43:33 -07:00
Bram Kragten a8522e91b5 Bumped version to 20210430.0 2021-04-30 21:17:22 +02:00
Bram Kragten 5754f4463d Bump babel and eslint (#9049) 2021-04-30 12:15:31 -07:00
Bram Kragten d4118ade0f Bump lit-html (#9053)
Adds support for Lit 2.0 directives
2021-04-30 12:12:20 -07:00
Bram Kragten 6d80f15a98 Bump codemirror (#9052) 2021-04-30 11:34:58 -07:00
Bram Kragten f8aa472409 Only show warning when google is enabled (#9054) 2021-04-30 11:34:45 -07:00
Bram Kragten df22fd00ca Check if temperature available in forecast (#9055) 2021-04-30 11:34:31 -07:00
David F. Mulcahey ce2743a982 Move ZHA config panel section translations to backend (#9018) 2021-04-30 18:59:06 +02:00
Paulus Schoutsen 92b32458ad Fix grid card size when square (#9056) 2021-04-30 18:57:20 +02:00
Joakim Sørensen d57e8a45d3 Break primary anywhere (#9050) 2021-04-30 15:02:01 +02:00
Joakim Sørensen 551d3ffdf3 Use haStyleScrollbar for integration card lists (#9051) 2021-04-30 15:01:31 +02:00
GitHub Action 7add6eb736 Translation update 2021-04-30 01:45:22 +00:00
rmogstad a28616d535 Fix browser language detection for region specific languages (#8982) (#9026) 2021-04-30 01:11:03 +02:00
Paulus Schoutsen a288fd370f Fix gallery element definitions (#9046) 2021-04-30 01:10:29 +02:00
Paulus Schoutsen acd335e249 Set columns to 4 in demo 2021-04-29 14:06:52 -07:00
Bram Kragten 764ae7e0b6 Merge pull request #9045 from home-assistant/dev 2021-04-29 22:21:03 +02:00
Bram Kragten da0bfa1945 Bumped version to 20210429.0 2021-04-29 21:56:36 +02:00
Bram Kragten 3c61d709b5 Fix RGBWW colors (#9039) 2021-04-29 21:53:22 +02:00
Joakim Sørensen ffc92a7b63 Fix overlap on integration card (#9037) 2021-04-29 12:36:07 -07:00
Paulus Schoutsen af0c7b5a50 Fix grid card size (#9044)
* Fix grid card size

* Remove console

* Rename
2021-04-29 12:31:46 -07:00
Bram Kragten 1904c4d057 Fix race in theme setting (#9027)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-29 21:04:31 +02:00
Bram Kragten 542f169b36 Fix saving Lovelace config (#9041) 2021-04-29 09:05:58 -07:00
Bram Kragten 65a30bf60c Fix onboarding dark styles (#9040) 2021-04-29 08:55:45 -07:00
Bram Kragten 2e51da32f0 Handle when choose is not an array (#9028) 2021-04-29 08:53:58 -07:00
Philip Allgaier 0562242043 Format "IP" and "MAC" attribute names (#9034) 2021-04-29 15:55:51 +02:00
GitHub Action debcdefc21 Translation update 2021-04-29 00:48:48 +00:00
Paulus Schoutsen 6b7e78320d Merge pull request #9024 from home-assistant/dev 2021-04-28 10:47:16 -07:00
Paulus Schoutsen 0de3f3a332 Merge remote-tracking branch 'origin/master' into dev 2021-04-28 10:29:18 -07:00
Paulus Schoutsen 4fcb4d449e Bumped version to 20210428.0 2021-04-28 10:28:50 -07:00
Bram Kragten 408fe25abd Update workbox, add expiration on cache (#9020) 2021-04-28 10:26:30 -07:00
Paulus Schoutsen 236e5e0b25 Show subtrace steps when selecting a node (#9023)
* Show subtrace steps when selecting a node

* Limit logic to just child conditions
2021-04-28 10:23:30 -07:00
Charles Garwood ebe0caba83 MVP Z-Wave JS Log Viewer (#9008)
* Add element to subscribe to ZJS logs

* set log level and adjust styling

* review comments

* add ZWaveJS to function names

* use flexbox

* Review comments

* import

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-28 13:00:13 -04:00
Philip Allgaier 9d33c0cfaf Fix unit support in gauge editor (#9021) 2021-04-28 18:19:51 +02:00
Paulus Schoutsen 7962130a0c Show entities on area page (#8980)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-04-28 17:01:43 +02:00
David F. Mulcahey 9690434cac Reconfigure ZHA device take 2 (#8990)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-28 12:30:09 +02:00
GitHub Action 7304544c37 Translation update 2021-04-28 00:48:54 +00:00
Bram Kragten 5a3408c242 Bumped version to 20210427.0 2021-04-28 00:22:22 +02:00
Bram Kragten 16996f25af Update demo lights (#9011) 2021-04-28 00:21:23 +02:00
J. Nick Koston 0c12586019 Display cumulative setup seconds on the config info page (#8720)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Philip Allgaier <philip.allgaier@gmx.de>
2021-04-27 23:38:29 +02:00
Joakim Sørensen 93a1adaa56 Remove analytics translations (#9002) 2021-04-27 22:44:28 +02:00
Charles Garwood 83e65e2cc6 Add UI for Z-Wave JS Device Reinterview (#8957) 2021-04-27 13:30:15 -07:00
Bram Kragten 36586b798e Use supported_color_modes to determine what UI elements to show (#8961) 2021-04-27 10:43:25 -07:00
Paulus Schoutsen 20c351949f Strategy: Update name -> type (#9006) 2021-04-27 10:04:52 -07:00
Bram Kragten b63bd92d81 Bump codemirror with iOS fix (#8992) 2021-04-27 16:29:20 +02:00
GitHub Action 9f3bb7f4d6 Translation update 2021-04-27 00:48:52 +00:00
Charles Garwood 73bb346c00 Show feedback for setting Z-Wave JS config parameters (#8956) 2021-04-27 01:20:23 +02:00
Philip Allgaier 33703a3b53 Add link to integration docs from service control (#8290)
* Add link to integration help to dev tool services

* Adjust to new service control

* Update src/translations/en.json

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Make icon less noticable + correct translation

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-27 00:28:22 +02:00
Charles Garwood b7a4f97eca Add opt-in toggle for zwave-js telemetry to config panel (#8958) 2021-04-27 00:19:48 +02:00
Bram Kragten dd4efe0f51 Apply dark style on init when prefers-color-scheme: dark (#8997) 2021-04-26 14:54:47 -07:00
Bram Kragten 7e0522c3b3 Don't do migration of service data in public prop (#8949)
Fixes #8879
2021-04-26 14:52:18 -07:00
Franck Nijhof e682abfb75 Tweak inputs for GitHub issue form (#8999) 2021-04-26 23:48:21 +02:00
Paulus Schoutsen 24e202a3d7 Use translations for config entry reason (#8981) 2021-04-26 17:50:23 +02:00
David F. Mulcahey ac9a881ab5 Fix ZHA network visualization page navigation (#8994)
* Fix ZHA visualization page navigation

* Update src/panels/config/integrations/integration-panels/zha/zha-network-visualization-page.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-26 10:48:11 -04:00
Joakim Sørensen 4d287a1f83 Use top.history in dialogs and navigate (#8995) 2021-04-26 16:41:30 +02:00
Paulus Schoutsen b8d6b1ebdd Fetch manifests for discovered flows (#8987) 2021-04-26 07:33:00 -07:00
David F. Mulcahey 8ca1b9320d Initial custom configuration for ZHA (#8737) 2021-04-26 16:25:02 +02:00
Philip Allgaier cba3992d2b Make "Events" dev tools use screen space better (#7449) 2021-04-26 12:09:50 +02:00
Paulus Schoutsen 96d6e337be Document last step (#8979)
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-04-26 12:02:56 +02:00
GitHub Action 959f7ae046 Translation update 2021-04-25 00:48:30 +00:00
GitHub Action 9572a58764 Translation update 2021-04-24 00:48:31 +00:00
Paulus Schoutsen 393ae9e5dc Bumped version to 20210423.0 2021-04-23 15:23:32 -07:00
Paulus Schoutsen 63e10314bd Sketch out strategies (#8959)
Co-authored-by: Zack Arnett <arnett.zackary@gmail.com>
2021-04-23 09:36:45 -07:00
Paulus Schoutsen b599417a37 Improve rendering status text on integration cards (#8973) 2021-04-23 09:30:17 +02:00
Philip Allgaier 899eab4e5c Ensure 0 does not get formatted to empty string (#8971) 2021-04-23 09:29:03 +02:00
Paulus Schoutsen 3f21c87a3d Allow config entries to show the reason (#8974) 2021-04-23 09:25:09 +02:00
GitHub Action c296a60bab Translation update 2021-04-23 00:48:28 +00:00
Paulus Schoutsen 5f78f18cb4 Fix rendering of a choose without any action taken (#8952) 2021-04-22 21:01:09 +02:00
Paulus Schoutsen 0b8d356865 Clean up HUI-VIEW (#8967) 2021-04-22 09:46:15 -07:00
Bram Kragten e8d1318a5b Bump codemirror (#8953)
Fixes #8557
2021-04-21 19:22:56 +02:00
GitHub Action 07ce07c4a5 Translation update 2021-04-21 00:48:45 +00:00
Franck Nijhof a07220f383 Update GitHub issue form (#8954) 2021-04-20 12:37:59 +02:00
J. Nick Koston f21ed24a49 Make error optional in connection lost service check (#8937) 2021-04-20 10:58:39 +02:00
GitHub Action e3c38b93f4 Translation update 2021-04-20 00:48:22 +00:00
Aaron Godfrey b398727413 Allow falsey values for attribute value in a picture-elements card element. (#8943) 2021-04-19 18:51:55 +02:00
uvjustin 9bc2ab29a1 Version bump hls.js to v1.0.1 (#8951)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-19 17:25:19 +02:00
GitHub Action 51f1ff26f1 Translation update 2021-04-19 00:48:51 +00:00
Bram Kragten 97d5e6512d Fix link to config panels (#8936) 2021-04-17 22:12:07 -07:00
GitHub Action b76c67fc9b Translation update 2021-04-18 00:48:53 +00:00
Paulus Schoutsen b96a70cd55 Make the integration header banner smaller (#8935) 2021-04-16 23:51:48 -07:00
Paulus Schoutsen 982ab93cdb Do not vertically align integration icon (#8934) 2021-04-16 23:16:20 -07:00
Paulus Schoutsen c7f4e1152d Pass manifest to config flow card (#8933) 2021-04-16 23:02:29 -07:00
J. Nick Koston 519988326b Do not throw warnings when a service calls disconnects the websocket (#8932) 2021-04-16 20:59:10 -07:00
GitHub Action b518f4b03c Translation update 2021-04-17 00:48:32 +00:00
Paulus Schoutsen 5493fdfcb7 Bumped version to 20210416.0 2021-04-16 12:27:18 -07:00
Paulus Schoutsen 179767e9f8 Align layout of all cards (#8931)
* Align layout of all cards

* Make ignore card have normal button
2021-04-16 12:27:01 -07:00
Paulus Schoutsen 25b3bb1285 Fixes for integration cards (#8930) 2021-04-16 20:22:22 +02:00
Bram Kragten 841c8ab1f1 Update script editor (#8919) 2021-04-16 08:57:07 -07:00
Philip Allgaier 1ce17e2847 Remove non effective CSS for CM6 search panel input (#8921) 2021-04-16 16:29:36 +02:00
Philip Allgaier a09b206b0e Added missing <ul> to beta join dialog (#8927) 2021-04-16 16:06:52 +02:00
Carlos Garcia Saura bb4617c53b Correct two swapped supervisor beta join action/confirm texts (#8922) 2021-04-16 14:54:39 +02:00
Philip Allgaier cfd18bfb74 Corrected "not loaded" state string (#8925) 2021-04-16 14:45:40 +02:00
Philip Allgaier e225d6f546 Correct wording from "component" to "integration" on new integration page (#8924) 2021-04-16 14:41:38 +02:00
Paulus Schoutsen 60fe48d355 Show config entry state on card (#8911) 2021-04-16 13:16:59 +02:00
GitHub Action 2dcd0d2b0a Translation update 2021-04-16 00:48:38 +00:00
Bram Kragten 8e11aa9130 Fix activate scene button + allow removing icon (#8916) 2021-04-15 13:02:09 +02:00
Philip Allgaier f6e223c18d Use const everywhere for "group.default_view" (#8918) 2021-04-15 09:54:32 +02:00
Bram Kragten 9d29b55bee Add z-index to add user dialog (#8917) 2021-04-15 09:46:19 +02:00
GitHub Action 92aa8580db Translation update 2021-04-15 00:48:36 +00:00
Donnie 538028a003 Refactor sequence matching to accept item rather than word array (#8866)
* Refactor sequence matching to require an item rather than array of words to filter against

* change 'words' to 'strings'. Add tsdoc description for ScorableTextItem

* Replace type checking with 'as' to clean up code
2021-04-14 15:29:10 -07:00
Carlos Garcia Saura c53575a74f Set standard name for Cancel button, to align translations (#8914) 2021-04-14 23:09:31 +02:00
Bram Kragten 193016a46a Fix time selector + base am/pm on user language (#8908)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-14 21:51:29 +02:00
Bram Kragten aaa50b4d1d Don't add toast to history (#8915) 2021-04-14 12:01:42 -07:00
Bram Kragten a43120320e Bump typescript to 4.2.4 (#8876) 2021-04-14 12:00:24 -07:00
Paulus Schoutsen b8bb0c038d Highlight if log comes from custom component (#8912)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-04-14 11:59:00 -07:00
GitHub Action dc79fc2919 Translation update 2021-04-14 00:48:24 +00:00
Philip Allgaier 30787fef60 Hide new light color mode attributes in more-info (#8895) 2021-04-13 20:23:58 +02:00
J. Nick Koston 445ae156ef Unsubscribe when dismissing during wrap up (#8909) 2021-04-13 20:18:37 +02:00
Jakub Dąbrowski 62a0cfb0f6 Fix computing cards (#8894)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-13 16:25:48 +02:00
LJU 96bc3ef99a Improve spelling (#8901) 2021-04-13 15:49:53 +02:00
GitHub Action 1d3b95d24f Translation update 2021-04-13 00:49:02 +00:00
Bram Kragten 56fe4b07f3 Show toast with call service error (#8904) 2021-04-12 17:10:25 -07:00
Jakub Dąbrowski ea60f7005b Fix saving entities of the device in scene editor (#8884) 2021-04-12 23:04:35 +02:00
Philip Allgaier 9eb59062aa Increase supervisor metric value span width to account for blank (#8885) 2021-04-12 23:02:09 +02:00
Bram Kragten d00927c31f Update codemirror (#8903) 2021-04-12 22:04:58 +02:00
Charles Garwood c03017208d Remove link/text about ZHA/Z-Wave config panels moving to integration page (#8867) 2021-04-12 20:17:31 +02:00
GitHub Action 73f945458a Translation update 2021-04-12 00:48:46 +00:00
GitHub Action db12234611 Translation update 2021-04-11 00:48:30 +00:00
GitHub Action ed1cd4632f Translation update 2021-04-10 00:48:37 +00:00
Bram Kragten 17d3755152 Bumped version to 20210407.3 2021-04-09 20:05:32 +02:00
Paulus Schoutsen d7c0c2ea72 Fix failed conditions reason (#8870) 2021-04-09 20:05:17 +02:00
Charles Garwood 7c823c98ae Add units to Z-Wave JS Node Config inputs (#8869)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-09 20:04:56 +02:00
Bram Kragten 97508a6f31 Update value of date input (#8865) 2021-04-09 20:04:29 +02:00
Paulus Schoutsen 2507a41b6e Pass narrow (#8864) 2021-04-09 20:04:03 +02:00
Paulus Schoutsen 9833accc79 Fix failed conditions reason (#8870) 2021-04-08 23:01:12 -07:00
GitHub Action d46123771a Translation update 2021-04-09 00:48:50 +00:00
Charles Garwood 87fe84b1ac Add units to Z-Wave JS Node Config inputs (#8869)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-08 16:32:47 -07:00
Bram Kragten 21140f437e Update value of date input (#8865) 2021-04-08 16:31:46 -07:00
Paulus Schoutsen ba9e410393 Pass narrow (#8864) 2021-04-08 22:59:24 +02:00
Paulus Schoutsen 9b628546c1 Remove owner guard from analytics (#8842) 2021-04-08 21:00:00 +02:00
Bram Kragten d0837fada8 Bumped version to 20210407.2 2021-04-08 20:56:03 +02:00
Paulus Schoutsen 520647d72f Add logbook note (#8843)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-08 20:55:10 +02:00
Bram Kragten 51c888845c Handle choose being null (#8859)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-08 20:54:51 +02:00
Bram Kragten e4606219bc Check if logbook component loaded when fetching trace (#8861) 2021-04-08 20:54:34 +02:00
Philip Allgaier 716335df2c Use number format setting for attribute rows (#8844) 2021-04-08 20:54:14 +02:00
Philip Allgaier ad4f90c502 Mention unique ID requirement in trace button tooltip (#8853) 2021-04-08 20:53:57 +02:00
Donnie a1bdfa7560 Fix spinner regression and remove unnecessary twoline config (#8847) 2021-04-08 20:53:43 +02:00
Paulus Schoutsen 587fb2a170 Add logbook note (#8843)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-08 20:52:37 +02:00
Bram Kragten 7d801ff84c Handle choose being null (#8859)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-08 20:48:49 +02:00
Bram Kragten d69accd9a5 Add dev import buttons for debugging traces (#8860) 2021-04-08 11:32:31 -07:00
J. Nick Koston 1127750c5e Show which integrations are being setup at startup (#8834)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-04-08 07:30:47 -10:00
Bram Kragten 7758bd89c1 Check if logbook component loaded when fetching trace (#8861) 2021-04-08 09:04:08 -07:00
Philip Allgaier de7264327a Do not use "media_play_pause" but atomic services instead (#8845) 2021-04-08 16:47:04 +02:00
Philip Allgaier c3f0932794 Use number format setting for attribute rows (#8844) 2021-04-08 10:52:10 +02:00
Philip Allgaier 367907e037 Mention unique ID requirement in trace button tooltip (#8853) 2021-04-08 09:47:25 +02:00
Donnie 2d15bd651e Fix spinner regression and remove unnecessary twoline config (#8847) 2021-04-07 21:18:55 -07:00
GitHub Action 4b1d7863f8 Translation update 2021-04-08 00:48:34 +00:00
Paulus Schoutsen e425d768dd Remove owner guard from analytics (#8842) 2021-04-07 18:41:39 +02:00
Joakim Sørensen 34ca807044 Merge pull request #8841 from home-assistant/dev 2021-04-07 16:36:31 +02:00
Bram Kragten 9075146b47 Bumped version to 20210407.1 2021-04-07 16:21:07 +02:00
Bram Kragten 26c4591baa Keep root state when replacing, fix subpages for menu button on mobile (#8837) 2021-04-07 12:25:17 +02:00
Bram Kragten 2aac8c55e7 Guard for trace component not loaded (#8838) 2021-04-07 12:21:19 +02:00
Bram Kragten 8af55efdb3 Merge pull request #8836 from home-assistant/dev 2021-04-07 10:43:35 +02:00
Bram Kragten 9d6e07ff96 Bumped version to 20210407.0 2021-04-07 10:07:35 +02:00
Bram Kragten 8f58eee6af Update hui-timer-entity-row.ts 2021-04-07 10:07:17 +02:00
Paulus Schoutsen 8dd3d78f21 Tweak the analytics screens (#8833) 2021-04-07 03:48:10 +02:00
GitHub Action 48161fd02f Translation update 2021-04-07 00:48:35 +00:00
Joakim Sørensen b61410826d Add AppArmor reason (#8829) 2021-04-07 02:05:27 +02:00
Jaroslav Hanslík 2f0188b280 Fixed generic entity row for climate entities (#8369) 2021-04-06 22:31:47 +02:00
Bram Kragten 3a4fffdb0b Remove dynamic height/width calcs on graph nodes (#8832) 2021-04-06 22:31:22 +02:00
Paulus Schoutsen 6393072e68 Merge pull request #8826 from home-assistant/dev 2021-04-06 09:49:27 -07:00
Bram Kragten 109910d18f Add spacer for default of choose (#8827) 2021-04-06 09:32:30 -07:00
Paulus Schoutsen 8874aaabe9 Bumped version to 20210406.0 2021-04-06 16:13:04 +00:00
Bram Kragten cafbea9c42 Update quick bar (#8823) 2021-04-06 09:05:29 -07:00
Bram Kragten 4843ee80a7 Use checkmark only in chosen choose (#8824) 2021-04-06 09:03:04 -07:00
Bram Kragten 4511c8f30c Don't show back button when no history (#8822)
* Don't show back button when no history

* Update src/translations/en.json

Co-authored-by: Philip Allgaier <mail@spacegaier.de>

Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-04-06 08:59:08 -07:00
Thomas Lovén 4cf1e52ac0 Select one branch at a time in choose script graphs (#8812) 2021-04-06 14:38:42 +02:00
Bram Kragten b501b7f47c Change date picker (#8821) 2021-04-06 05:36:12 -07:00
Philip Allgaier cc275f9877 Prevent unwanted line breaks in picture-glance tooltips (#8819) 2021-04-06 14:19:24 +02:00
Philip Allgaier 7aae55cde7 Allow manually entering entity IDs in service target entity picker (#8820) 2021-04-06 14:18:55 +02:00
GitHub Action 85eaa219c6 Translation update 2021-04-06 00:48:51 +00:00
Donnie 7d5ecb8ba4 Update fuzzy scorer from VSCode (#8793) 2021-04-05 12:15:09 -07:00
GitHub Action 1fd142d337 Translation update 2021-04-05 00:48:55 +00:00
Josh McCarty d75c6aecbe Format input number (#8811) 2021-04-04 20:47:08 +02:00
Bram Kragten dffe0f656d Update styling trace tabs (#8807) 2021-04-03 23:19:06 -07:00
GitHub Action 890639436b Translation update 2021-04-04 00:48:42 +00:00
Charles Garwood 99f66d7c5d Fix zwave_js config panel manual entry inputs (#8806) 2021-04-03 16:08:41 +02:00
GitHub Action 05faa52425 Translation update 2021-04-03 00:48:30 +00:00
Bram Kragten 9e1a8b646b Merge pull request #8803 from home-assistant/dev
20210402.1
2021-04-02 21:15:13 +02:00
Bram Kragten 8f6ec03446 Bumped version to 20210402.1 2021-04-02 20:48:57 +02:00
Bram Kragten c56b4fade3 Add filtering by related entity + fixes (#8801) 2021-04-02 20:35:28 +02:00
Bram Kragten 61aaaabcb5 Add close button to import blueprint dialog (#8802) 2021-04-02 20:19:35 +02:00
Bram Kragten d57cf93580 Fix disabled icon button color (#8800)
Fixes #8797
2021-04-02 20:18:56 +02:00
Paulus Schoutsen 82ad5c103d Handle configurations that don't wrap their action sequences in arrays (#8798) 2021-04-02 14:45:34 +02:00
GitHub Action a0b5bc5456 Translation update 2021-04-02 00:48:47 +00:00
Paulus Schoutsen c810e541ea Merge pull request #8795 from home-assistant/dev 2021-04-01 15:33:43 -07:00
Bram Kragten 05ea3b8187 Make version number based on UTC time (#8796) 2021-04-01 15:33:11 -07:00
Bram Kragten 8301dffb21 Bumped version to 20210402.0 2021-04-02 00:14:02 +02:00
Bram Kragten 01be5243de Option flows dont have result (#8787) 2021-04-01 15:11:15 -07:00
Paulus Schoutsen 334196799a Improve keyboard nav (#8794) 2021-04-02 00:10:17 +02:00
Bram Kragten c11bbcf442 Add blueprint config to trace (#8751)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-01 23:37:46 +02:00
Bram Kragten 8e3a7576ea Align has template functions (#8784)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-01 13:49:59 -07:00
Bram Kragten deca6f03ba Improve ensureArray and use it in tracing (#8785)
* Improve ensureArray and use it in tracing

* Fix typing

Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-04-01 13:33:47 -07:00
Paulus Schoutsen 401064d3c8 Render script execution state (#8789) 2021-04-01 11:29:08 -07:00
Paulus Schoutsen b6f59d3c98 Fix the automation picker icons (#8790) 2021-04-01 11:28:56 -07:00
Bram Kragten 1fb3663398 Add sortable last trigger column to automation and script overview (#8783) 2021-04-01 09:02:58 -07:00
Paulus Schoutsen 5c1604e959 Fix showing choose actions if default path chosen and other things (#8779) 2021-04-01 10:28:37 +02:00
GitHub Action 17b1f3e465 Translation update 2021-04-01 00:48:39 +00:00
Bram Kragten 9a68bdeec1 Handle errors in trace (#8775) 2021-03-31 09:35:30 -07:00
Bram Kragten 9b947ef734 Add top level logbook entries tab (#8776) 2021-03-31 09:15:06 -07:00
Bram Kragten 66432608ed Merge pull request #8774 from home-assistant/dev 2021-03-31 17:27:43 +02:00
Bram Kragten d8153ac8fc Merge branch 'master' into dev 2021-03-31 17:02:45 +02:00
Bram Kragten 27d9f82f7d Bumped version to 20210331.0 2021-03-31 16:59:29 +02:00
Bram Kragten 5b55bcd879 Use logbook for trace logbook items (#8773) 2021-03-31 16:57:48 +02:00
Bram Kragten 5cfd28881b Update cloud-google-pref.ts 2021-03-31 16:53:18 +02:00
Philip Allgaier bc54a42e01 Fix typo in analytics info text (#8772) 2021-03-31 15:55:29 +02:00
Bram Kragten 03f9964c59 Fix max being undefined in automation (#8771) 2021-03-31 15:36:09 +02:00
Philip Allgaier f159219d2c Add Lovelace edit mode URL param (#8574)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-31 15:10:55 +02:00
Thomas Lovén e714f32737 Refactoring automation trace graphs (#8763)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-31 15:09:00 +02:00
Philip Allgaier 20858db96d Use service name in action confirmation popup (#8493) 2021-03-31 14:12:06 +02:00
dependabot[bot] 89b82bb778 Bump y18n from 3.2.1 to 3.2.2 (#8765)
Bumps [y18n](https://github.com/yargs/y18n) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/commits)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-31 11:16:55 +02:00
David F. Mulcahey 2c886d739f Add feedback dialog for ZHA device reconfiguration (#8742)
* Add feedback dialog for ZHA device reconfiguration

* review comments

* fix scope
2021-03-31 11:16:35 +02:00
GitHub Action 1ccf4e49bc Translation update 2021-03-31 00:48:38 +00:00
Joakim Sørensen 7d63e3e088 Hide system generated integration options (#8764) 2021-03-30 23:09:08 +02:00
Joakim Sørensen 828523f281 Adjust documentation link (#8762) 2021-03-30 21:52:15 +02:00
Philip Allgaier afe3831f25 Make log levels translatable (#8761) 2021-03-30 20:19:50 +02:00
Philip Allgaier 3888c56f1a Add padding when loading traces or none found (#8760) 2021-03-30 20:16:06 +02:00
Bram Kragten 6f07966ef8 Update en.json 2021-03-30 10:48:04 +02:00
GitHub Action 09eafe8abd Translation update 2021-03-30 00:48:42 +00:00
Paulus Schoutsen 6719a42e27 Bumped version to 20210330.0 2021-03-30 00:15:58 +00:00
Bram Kragten 4b98a70ee8 Fix rendering when selecting all in datatable (#8749)
Fixes #8619
2021-03-29 17:15:08 -07:00
Bram Kragten db3f5447ca Add filtering by devices/areas to scripts (#8748) 2021-03-29 17:14:02 -07:00
Bram Kragten fed63f645d Add filtering by devices/areas to scenes (#8747) 2021-03-29 17:09:50 -07:00
Bram Kragten e7315bb570 Align filtering of integrations with other pages (#8746) 2021-03-29 17:07:11 -07:00
Bram Kragten cd2404f26a Add link between trace and editor (#8750) 2021-03-29 17:05:51 -07:00
Paulus Schoutsen b866166425 Adjust for latest trace API (#8755) 2021-03-29 17:01:39 -07:00
Bram Kragten 46580376dd Make trace somewhat useable on mobile (#8752) 2021-03-29 16:59:31 -07:00
Thomas Lovén b8bfb44aec Rename layout to view_layout (#8714) 2021-03-29 14:28:58 -07:00
Bram Kragten a153f572d0 Add screenshot for manifest (#8753) 2021-03-29 13:12:55 -07:00
Bram Kragten 66c30a59e7 Check if Google Assistant is linked (#8613)
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2021-03-29 19:27:45 +02:00
Bram Kragten 10b8efc5cb Add filtering to automaton overview (#8736)
* Add filtering to automaton overview

* Update ha-automation-picker.ts

* Update ha-combo-box.ts

* imports

* Rename component

* localize + comments
2021-03-29 14:33:48 +02:00
Bram Kragten c65d414b7b Show if config entry is not loaded (#8717) 2021-03-29 11:33:41 +02:00
Bram Kragten 7f7d89c745 Hopefully fix some back button issues (#8708) 2021-03-29 11:29:43 +02:00
Joakim Sørensen 742028b691 Add analytics integration (#8695)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
2021-03-29 09:47:04 +02:00
GitHub Action 62f685bac2 Translation update 2021-03-29 00:48:39 +00:00
Paulus Schoutsen 0b3333e88c Bumped version to 20210328.0 2021-03-28 22:28:20 +00:00
Paulus Schoutsen c341a99b83 Add more trace visualization (#8724)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-28 20:31:59 +02:00
Josh McCarty f43c420d59 Create number formatting options on the profile panel (#7925) 2021-03-28 18:32:48 +02:00
Bram Kragten 0393970a80 Generalize filtering in datatable sub page (#8734) 2021-03-28 18:29:55 +02:00
Paulus Schoutsen 1865e0661f Add child_id to call service result in trace (#8728) 2021-03-27 20:06:02 -07:00
GitHub Action c07b1194b3 Translation update 2021-03-28 00:48:51 +00:00
Philip Allgaier bf802628b9 Add margin to text next to chip (#8726)
* Add margin to text next to chip

* Increase margin to 8px
2021-03-27 12:59:30 +01:00
GitHub Action 36020373cd Translation update 2021-03-27 00:48:37 +00:00
Bram Kragten 43e73d69de Handle edit mode for panel mode cards better (#8687) 2021-03-26 15:46:15 +01:00
Bram Kragten 47a3f649d2 Prevent cloud tts update prefs on page load (#8707) 2021-03-26 15:34:19 +01:00
Joakim Sørensen 5c63f8e52a Fix USB sync endpoint (#8725) 2021-03-26 14:14:54 +01:00
GitHub Action 01c553ef13 Translation update 2021-03-26 00:48:26 +00:00
Paulus Schoutsen f229e4e12a Make iterating ha-timeline efficient (#8721) 2021-03-25 14:59:21 -07:00
Paulus Schoutsen 40cf4c8d32 Add trace details foundation (#8716)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-25 11:58:29 -07:00
J. Nick Koston ee38c419de Ensure platform only integrations are displayed on the config info page (#8698)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-25 08:15:40 -10:00
Donnie 10baa34c18 Fix regression where command item text lost capitalization rules (#8719) 2021-03-25 18:20:20 +01:00
Donnie 343b67fa7f Move margin styling from ha-chip to ha-chip-set (#8718) 2021-03-25 09:03:47 -07:00
Donnie 6de8b4e35f Quick Bar: Use command category labels instead of icons (#7692)
* Change commands to use category labels instead of icons. Fixes several translation issues.

* Hydrate with latest dev and resolve conflicts

* Replace custom pill element with material chips

* Add category icons. Fix dark mode text colors

* Update src/components/ha-chip-set.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update src/dialogs/quick-bar/ha-quick-bar.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update src/dialogs/quick-bar/ha-quick-bar.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update src/components/ha-chip.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

* Update src/components/ha-chip.ts

Co-authored-by: Bram Kragten <mail@bramkragten.nl>

Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-25 08:21:48 -07:00
Bram Kragten 57e535c2c8 Fix changing view type (#8688) 2021-03-25 14:21:38 +01:00
Bram Kragten af5b22a265 Fix picture glance editor + small opti in hui image (#8692) 2021-03-25 14:17:32 +01:00
Bram Kragten 77972c961b Service control: Don't fire value changed for optional empty input (#8705) 2021-03-25 14:15:57 +01:00
Bram Kragten a3efa5676b Log less in service worker (#8691) 2021-03-25 14:14:49 +01:00
Bram Kragten 014dbc2a86 Remove paper-material-styles (#8706)
Fix #8702
2021-03-25 13:12:31 +01:00
Bram Kragten 226a2941d6 Service dev tools: Disable UI mode when using templates (#8711) 2021-03-25 13:11:12 +01:00
Paulus Schoutsen c269c8fd3f Fix ordering of logbook entries inside choose sequence with multiple … (#8715) 2021-03-25 10:54:20 +01:00
GitHub Action d8fc3c1ebf Translation update 2021-03-25 00:36:40 +00:00
Charles Garwood a5c6ffd1b9 Fix Z-Wave JS Node Config Panel handling null values (#8710)
* attempt fix for null values

* cleanup
2021-03-24 14:02:45 -04:00
Thomas Lovén 9aaaaae175 Fix race condition in map card (#8697) 2021-03-24 09:49:28 +01:00
Philip Allgaier 7d39b69540 Ensure dev-tool-states is consistently case-insensitive (#8696) 2021-03-24 09:48:04 +01:00
GitHub Action 09bad14c3d Translation update 2021-03-24 01:30:48 +00:00
Paulus Schoutsen 369c9dc6e2 Bumped version to 20210324.0 2021-03-24 00:22:11 +00:00
Paulus Schoutsen 9676d2cee7 Add compatibility with latest trace API (#8700) 2021-03-23 17:21:57 -07:00
Paulus Schoutsen 5156c67226 Refactor trace rendering (#8693)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-23 17:06:59 +01:00
GitHub Action 4d48fc3d85 Translation update 2021-03-23 01:28:19 +00:00
Paulus Schoutsen 20da329a21 Fix types 2021-03-22 22:43:08 +00:00
Charles Garwood 4b664cc142 Add node config panel for Z-Wave JS (#8440) 2021-03-22 23:25:42 +01:00
Paulus Schoutsen c9b620fdb2 Update basic trace in gallery 2021-03-22 19:26:59 +00:00
twodice 25c886d401 Add an absolute height to cast receiver to fix height inheritance (#8667)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-22 13:11:01 +01:00
Joakim Sørensen 740805356f Add content trust reasons (#8674) 2021-03-22 12:25:59 +01:00
Philip Allgaier ce5fb57577 Add missing extra-fields translations (#8681) 2021-03-22 12:24:38 +01:00
GitHub Action 3e20d2b454 Translation update 2021-03-22 01:28:57 +00:00
GitHub Action a9e8186491 Translation update 2021-03-21 01:30:26 +00:00
GitHub Action 3bb909b026 Translation update 2021-03-20 01:26:31 +00:00
GitHub Action b921d91aeb Translation update 2021-03-19 01:27:47 +00:00
GitHub Action 05790954c6 Translation update 2021-03-18 01:26:33 +00:00
Marc Mueller 13014c1351 Update metadata license string (#8431) 2021-03-17 14:25:58 +01:00
Mick Vleeshouwer e34c63b830 Add word wrap (#8654) 2021-03-17 12:22:14 +01:00
GitHub Action 943100d758 Translation update 2021-03-17 01:27:02 +00:00
Paulus Schoutsen 55f40d66f2 Bumped version to 20210316.0 2021-03-16 23:07:01 +00:00
Paulus Schoutsen 593e5ac79c Link to traces from logbook entries (#8659)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
2021-03-16 16:03:54 -07:00
Paulus Schoutsen ef31bce5ee Allow linking to trace (#8658) 2021-03-16 13:26:48 -07:00
Paulus Schoutsen 3c75eb96f1 Adjust traces to latest API (#8656) 2021-03-16 10:43:30 -07:00
Paulus Schoutsen f34dfde925 Fix spaces in changelog link (#8652) 2021-03-16 12:39:16 +01:00
Erik Montnemery e3b72fe0aa Use execute_script call in services developer tool (#8657) 2021-03-16 12:38:49 +01:00
GitHub Action 60de74a375 Translation update 2021-03-16 01:24:49 +00:00
Paulus Schoutsen 55e58f8d35 Make time a label without icon (#8649) 2021-03-15 09:39:29 +01:00
Paulus Schoutsen a465254418 Add new trace (#8633) 2021-03-15 09:38:23 +01:00
GitHub Action 5d27a138cf Translation update 2021-03-15 01:26:05 +00:00
Paulus Schoutsen 22f4b036df Bumped version to 20210314.0 2021-03-14 23:46:14 +00:00
Paulus Schoutsen 03f694922d Add timeline entry when a long period of time passes (#8638) 2021-03-14 16:45:49 -07:00
Paulus Schoutsen a841e287e5 Add basic action descriptions in traces (#8639) 2021-03-14 15:05:13 +01:00
Paulus Schoutsen 5d2afdd825 Add motion light trace (#8637) 2021-03-14 15:03:50 +01:00
Paulus Schoutsen 67240e2339 Group multiple logbook entries in traces (#8634) 2021-03-14 15:03:09 +01:00
Bram Kragten f84a8eccfa FIx accessibility of data tables (#8611)
According to #6487
2021-03-14 14:54:46 +01:00
GitHub Action 68a058e4f1 Translation update 2021-03-14 01:28:21 +00:00
Paulus Schoutsen d678b42ece Bumped version to 20210313.0 2021-03-13 04:40:35 +00:00
Paulus Schoutsen 2cf63cda08 Add download button 2021-03-13 04:35:47 +00:00
Paulus Schoutsen 7bd4eeb0df Trace foundation (#8608) 2021-03-12 20:13:06 -08:00
GitHub Action dc3ee7c779 Translation update 2021-03-13 01:24:27 +00:00
Thomas Lovén e8cc97a8e5 Enable turning off edit mode in panel views (#8625) 2021-03-12 16:26:18 +01:00
Philip Allgaier 3b837e1d54 Consistent spelling of "PIN" (#8618) 2021-03-12 09:43:00 +01:00
GitHub Action bb6c2050bc Translation update 2021-03-12 01:25:56 +00:00
GitHub Action 082d4f9691 Translation update 2021-03-11 01:25:12 +00:00
Joakim Sørensen 153d68a9cd Custom error page when failing to load Supervisor panel (#8465) 2021-03-10 14:11:03 +01:00
Bram Kragten 0404faa856 Update serviceworker with catch handler (#8601) 2021-03-09 20:33:11 -08:00
GitHub Action afbc2d6b8f Translation update 2021-03-10 01:24:36 +00:00
Bram Kragten 89ecc8bd2f Change preload to modulepreload (#8600) 2021-03-09 11:39:08 -08:00
Philip Allgaier 7f21a2b319 Properly align date time input fields around suffix separator (#8462) 2021-03-09 20:38:26 +01:00
Mick Vleeshouwer e2f07f6723 Add support for DEVICE_CLASS_CO and CO2 (#8602) 2021-03-09 19:32:06 +01:00
dependabot[bot] a475e143b7 Bump elliptic from 6.5.3 to 6.5.4 (#8603)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-09 19:31:27 +01:00
Paulus Schoutsen e50fd80b2e Add particles to onboarding (#8567) 2021-03-09 15:30:29 +01:00
Bram Kragten 68ea1abc05 Fallback to yaml for service data if unknown key is in data (#8595) 2021-03-09 15:26:26 +01:00
Bram Kragten 2e76b306c4 Add guard for when default url is not available (#8593) 2021-03-09 11:56:26 +01:00
Bram Kragten ca3cac4ed3 Fix missing areas in area picker (#8594) 2021-03-09 11:23:31 +01:00
Bram Kragten 41852460e1 Improve code mirror comments check (#8585) 2021-03-09 11:23:02 +01:00
Bram Kragten 9ec4e083d9 Change layout of automation yaml editor (#8560) 2021-03-09 11:21:59 +01:00
GitHub Action 9560a1c4a7 Translation update 2021-03-09 01:24:35 +00:00
Milan Meulemans 4f5a47ace7 Fix typo (#8587) 2021-03-08 13:23:30 +01:00
David F. Mulcahey 01c4d662f2 ZHA UI enhancements (#8573)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-08 13:23:14 +01:00
Bram Kragten 9bdda77e89 Fix demo states translation (#8586) 2021-03-08 13:04:58 +01:00
Bram Kragten 194024edb9 Fix demo states translation (#8586) 2021-03-08 13:02:28 +01:00
Ģirts bef0d3a6a1 Remove margin from button card icon if icon is all that is set (#8584) 2021-03-08 12:47:19 +01:00
Bram Kragten 47a024b795 Update translations 2021-03-08 09:46:13 +01:00
GitHub Action 39847f9c9d Translation update 2021-03-08 01:25:07 +00:00
Bram Kragten fa7bd28c92 Bumped version to 20210302.6 2021-03-07 23:20:37 +01:00
Philip Allgaier 279f78e4a8 Ensure dev-tools state attribute checkbox state gets stored (#8579) 2021-03-07 23:19:13 +01:00
Bram Kragten 8ec3cbdb33 Fix codemirror cursor color (#8571) 2021-03-07 23:18:55 +01:00
Philip Allgaier 7449f7e73f Handle delay templates properly + error handling tweaks (#8578)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-07 23:17:05 +01:00
Bram Kragten d680fde759 Don't allow UI editor for service calls with templates (#8581) 2021-03-07 23:16:49 +01:00
Philip Allgaier f24f21ca91 Handle delay templates properly + error handling tweaks (#8578)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-07 23:15:53 +01:00
Philip Allgaier c8ea37eec0 Consistent blank before "%" (#8366) 2021-03-07 23:05:20 +01:00
tkdrob b71f452795 Fix spelling (#8582) 2021-03-07 22:33:02 +01:00
Bram Kragten 7ea1ece169 Don't allow UI editor for service calls with templates (#8581) 2021-03-07 21:02:44 +01:00
Philip Allgaier aece3a37c0 Ensure dev-tools state attribute checkbox state gets stored (#8579) 2021-03-07 16:40:54 +01:00
GitHub Action 705871f8dc Translation update 2021-03-07 01:26:43 +00:00
Bram Kragten 4a11975349 Fix codemirror cursor color (#8571) 2021-03-06 23:11:57 +01:00
Philip Allgaier 4d3d27f2c4 Move log item level position + color in detail popup header (#8270) 2021-03-06 18:58:29 +01:00
Paulus Schoutsen d784a30d42 Allow sharing blueprints (#8565) 2021-03-06 14:19:56 +01:00
Paulus Schoutsen 35f776284b Better place where device edit button is on desktop (#8566) 2021-03-06 14:18:42 +01:00
Ville Skyttä f659a6fe37 Grammar and spelling fixes (#8568)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-06 14:17:30 +01:00
GitHub Action ad53c99fc4 Translation update 2021-03-06 01:22:48 +00:00
Philip Allgaier fa0172d00c Fix a few translation typos (#8563) 2021-03-05 22:24:44 +01:00
Bram Kragten ba77a88714 Bumped version to 20210302.5 2021-03-05 17:27:46 +01:00
Bram Kragten 9b39087102 Fix codemirror active line (#8558)
fixes #8556
2021-03-05 17:27:14 +01:00
Bram Kragten 845411b48c Fix codemirror active line (#8558)
fixes #8556
2021-03-05 15:01:22 +01:00
Joakim Sørensen d715867b09 More consistant ignoring errors (#8553) 2021-03-05 10:40:49 +01:00
GitHub Action 0ca2cdfbed Translation update 2021-03-05 01:23:51 +00:00
Bram Kragten a00961b9ef Bumped version to 20210302.4 2021-03-04 17:03:14 +01:00
Bram Kragten 701c188bab Bump codemirror to 0.18 (#8546) 2021-03-04 17:02:51 +01:00
Bram Kragten e81002807f Add max height to yaml editor (#8527) 2021-03-04 17:02:33 +01:00
Bram Kragten 0d1c72386e Bump codemirror to 0.18 (#8546) 2021-03-04 16:43:34 +01:00
Joakim Sørensen c91779dffe Add supervisor_add_addon_repository redirect (#8545) 2021-03-04 16:31:32 +01:00
Joakim Sørensen 3853cc9214 Check if addon is valid before navigating (#8538)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2021-03-04 11:51:35 +01:00
Joakim Sørensen a66b3f6b80 Fix managing custom addon repositories (#8536) 2021-03-04 10:29:00 +01:00
Joakim Sørensen c97ec32343 Fix missing name in full snapshot (#8535) 2021-03-04 10:25:51 +01:00
Josh McCarty 2abba7e445 Alarm numeric inputmode (#8521) 2021-03-04 10:08:16 +01:00
Tierney Cyren f887c27ad1 fix: move @types modules from deps to devDeps (#8539) 2021-03-04 10:05:28 +01:00
Joakim Sørensen 6ee8d74899 Remove duplicate save (#8532) 2021-03-04 10:03:09 +01:00
GitHub Action f196c72563 Translation update 2021-03-04 01:22:38 +00:00
Joakim Sørensen 419e564441 Use correct version (#8530) 2021-03-03 16:09:57 +01:00
Joakim Sørensen de97b54c95 Fix localize keys for supervisor update dialog (#8529) 2021-03-03 16:01:30 +01:00
Philip Allgaier 07001f7b5c Fix add-on toggles description translation keys (#8528) 2021-03-03 15:33:52 +01:00
Joakim Sørensen bee17fce64 Fix second load in firefox and localize init (#8525) 2021-03-03 15:06:36 +01:00
Bram Kragten 718904a853 Add max height to yaml editor (#8527) 2021-03-03 14:31:39 +01:00
Bram Kragten e14d652651 Bumped version to 20210302.3 2021-03-03 13:19:12 +01:00
Bram Kragten 98ae5270ef Bumped version to 20210302.2 2021-03-03 12:50:25 +01:00
Bram Kragten 19ccf0ab40 Bump codemirror (#8524) 2021-03-03 12:50:16 +01:00
Bram Kragten 6021bec5ee Bumped version to 20210302.1 2021-03-03 10:42:45 +01:00
Bram Kragten 7fcadc85fa Dont show config changes when user saved it (#8520) 2021-03-03 10:42:13 +01:00
Bram Kragten 5d7f971a82 Merge pull request #8517 from home-assistant/dev 2021-03-02 16:16:22 +01:00
Bram Kragten c42430ccf9 Merge pull request #8509 from home-assistant/dev 2021-03-01 23:33:33 +01:00
Bram Kragten 16fa6904d9 Merge pull request #8474 from home-assistant/dev 2021-02-26 22:05:19 +01:00
Bram Kragten 12a8a1531d Merge pull request #8459 from home-assistant/dev 2021-02-25 18:54:46 +01:00
Bram Kragten c85f69c9ee Merge pull request #8448 from home-assistant/dev
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
Co-authored-by: Philip Allgaier <mail@spacegaier.de>
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: GitHub Action <github-action@users.noreply.github.com>
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
Co-authored-by: Álvaro Fernández Rojas <noltari@gmail.com>
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
Co-authored-by: Kendell R <KTibow@users.noreply.github.com>
Co-authored-by: larena1 <60823161+larena1@users.noreply.github.com>
2021-02-24 20:36:51 +01:00
Bram Kragten 216526e391 Merge pull request #8433 from home-assistant/dev 2021-02-22 20:18:48 +01:00
Bram Kragten 311e1cfb00 Merge pull request #8354 from home-assistant/dev 2021-02-08 15:28:40 +01:00
1388 changed files with 155290 additions and 64599 deletions
+3
View File
@@ -16,6 +16,9 @@
"runem.lit-plugin",
"ms-python.vscode-pylance"
],
"containerEnv": {
"WORKSPACE_DIRECTORY": "${containerWorkspaceFolder}"
},
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"files.eol": "\n",
+76 -48
View File
@@ -1,11 +1,11 @@
{
"extends": [
"airbnb-base",
"airbnb-typescript/base",
"plugin:@typescript-eslint/recommended",
"plugin:wc/recommended",
"plugin:lit/recommended",
"prettier",
"prettier/@typescript-eslint"
"plugin:lit/all",
"prettier"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
@@ -29,63 +29,91 @@
"__BUILD__": false,
"__VERSION__": false,
"__STATIC_PATH__": false,
"Polymer": true,
"webkitSpeechRecognition": false,
"ResizeObserver": false
"__SUPERVISOR__": false,
"Polymer": true
},
"env": {
"browser": true,
"es6": 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,
"strict": 0,
"prefer-spread": 0,
"no-plusplus": 0,
"no-bitwise": 2,
"comma-dangle": 0,
"vars-on-top": 0,
"no-continue": 0,
"no-param-reassign": 0,
"no-multi-assign": 0,
"no-console": 2,
"radix": 0,
"no-alert": 0,
"no-return-await": 0,
"no-nested-ternary": 0,
"prefer-destructuring": 0,
"class-methods-use-this": "off",
"new-cap": "off",
"prefer-template": "off",
"object-shorthand": "off",
"func-names": "off",
"no-underscore-dangle": "off",
"strict": "off",
"no-plusplus": "off",
"no-bitwise": "error",
"comma-dangle": "off",
"vars-on-top": "off",
"no-continue": "off",
"no-param-reassign": "off",
"no-multi-assign": "off",
"no-console": "error",
"radix": "off",
"no-alert": "off",
"no-nested-ternary": "off",
"prefer-destructuring": "off",
"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,
"prefer-promise-reject-errors": "off",
"import/prefer-default-export": "off",
"import/no-default-export": "off",
"import/no-unresolved": "off",
"import/no-cycle": "off",
"import/extensions": [
2,
"error",
"ignorePackages",
{ "ts": "never", "js": "never" }
],
"no-restricted-syntax": ["error", "LabeledStatement", "WithStatement"],
"object-curly-newline": 0,
"default-case": 0,
"wc/no-self-class": 0,
"no-shadow": 0,
"@typescript-eslint/camelcase": 0,
"@typescript-eslint/ban-ts-comment": 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,
"@typescript-eslint/explicit-module-boundary-types": 0,
"@typescript-eslint/no-shadow": ["error"]
"object-curly-newline": "off",
"default-case": "off",
"wc/no-self-class": "off",
"no-shadow": "off",
"@typescript-eslint/camelcase": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-shadow": ["error"],
"@typescript-eslint/naming-convention": [
"off",
{
"selector": "default",
"format": ["camelCase", "snake_case"],
"leadingUnderscore": "allow",
"trailingUnderscore": "allow"
},
{
"selector": ["variable"],
"format": ["camelCase", "snake_case", "UPPER_CASE"],
"leadingUnderscore": "allow",
"trailingUnderscore": "allow"
},
{
"selector": "typeLike",
"format": ["PascalCase"]
}
],
"@typescript-eslint/no-unused-vars": "off",
"unused-imports/no-unused-vars": [
"error",
{
"vars": "all",
"varsIgnorePattern": "^_",
"args": "after-used",
"argsIgnorePattern": "^_",
"ignoreRestSiblings": true
}
],
"unused-imports/no-unused-imports": "error",
"lit/attribute-value-entities": "off",
"lit/no-template-map": "off"
},
"plugins": ["disable", "import", "lit", "prettier", "@typescript-eslint"],
"plugins": ["disable", "unused-imports"],
"processor": "disable/disable"
}
+9 -26
View File
@@ -1,8 +1,6 @@
name: Report a bug with the UI, Frontend or Lovelace
about: Report an issue related to the Home Assistant frontend.
description: Report an issue related to the Home Assistant frontend.
labels: bug
title: ""
issue_body: true
body:
- type: markdown
attributes:
@@ -97,11 +95,7 @@ body:
If your issue is about how an entity is shown in the UI, please add the
state and attributes for all situations. You can find this information
at Developer Tools -> States.
value: |
```yaml
# Paste your state here.
```
render: txt
- type: textarea
attributes:
label: Problem-relevant frontend configuration
@@ -110,29 +104,18 @@ body:
configuration of the used cards. Fill this out even if it seems
unimportant to you. Please be sure to remove personal information like
passwords, private URLs and other credentials.
value: |
```yaml
# Paste your YAML here.
```
render: yaml
- type: textarea
attributes:
label: Javascript errors shown in your browser console/inspector
description: >
If you come across any Javascript or other error logs, e.g., in your
browser console/inspector please provide them.
value: |
```txt
# Paste your logs here.
```
- type: markdown
render: txt
- type: textarea
attributes:
value: |
## Additional information
- type: markdown
attributes:
value: |
label: Additional information
description: >
If you have any additional information for us, use the field below.
Please note, you can attach screenshots or screen recordings here,
by dragging and dropping files in the field below.
Please note, you can attach screenshots or screen recordings here, by
dragging and dropping files in the field below.
+31 -57
View File
@@ -10,81 +10,64 @@ on:
- dev
- master
env:
NODE_VERSION: 14
NODE_OPTIONS: --max_old_space_size=6144
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/checkout@v2
- name: Setting up Node.js
uses: actions/setup-node@v1
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: 12.x
- name: Get yarn cache path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Fetching Yarn cache
uses: actions/cache@v1
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: ${{ env.NODE_VERSION }}
cache: yarn
- name: Install dependencies
run: yarn install
env:
CI: true
- name: Build resources
run: ./node_modules/.bin/gulp gen-icons-json build-translations gather-gallery-demos
run: ./node_modules/.bin/gulp gen-icons-json build-translations build-locale-data gather-gallery-pages
- name: Run eslint
run: ./node_modules/.bin/eslint '{**/src,src}/**/*.{js,ts,html}' --ignore-path .gitignore
run: yarn run lint:eslint
- name: Run tsc
run: ./node_modules/.bin/tsc
run: yarn run lint:types
- name: Run prettier
run: yarn run lint:prettier
- name: Check for duplicate dependencies
run: yarn dedupe --check
test:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/checkout@v2
- name: Setting up Node.js
uses: actions/setup-node@v1
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: 12.x
- name: Get yarn cache path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Fetching Yarn cache
uses: actions/cache@v1
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: ${{ env.NODE_VERSION }}
cache: yarn
- name: Install dependencies
run: yarn install
env:
CI: true
- name: Run Mocha
run: npm run mocha
- name: Build resources
run: ./node_modules/.bin/gulp build-translations build-locale-data
- name: Run Tests
run: yarn run test
build:
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- name: Check out files from GitHub
uses: actions/checkout@v2
- name: Setting up Node.js
uses: actions/setup-node@v1
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: 12.x
- name: Get yarn cache path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Fetching Yarn cache
uses: actions/cache@v1
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: ${{ env.NODE_VERSION }}
cache: yarn
- name: Install dependencies
run: yarn install
env:
@@ -99,20 +82,11 @@ jobs:
steps:
- name: Check out files from GitHub
uses: actions/checkout@v2
- name: Setting up Node.js
uses: actions/setup-node@v1
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: 12.x
- name: Get yarn cache path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Fetching Yarn cache
uses: actions/cache@v1
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: ${{ env.NODE_VERSION }}
cache: yarn
- name: Install dependencies
run: yarn install
env:
+9 -13
View File
@@ -4,26 +4,22 @@ on:
push:
branches:
- dev
env:
NODE_VERSION: 14
NODE_OPTIONS: --max_old_space_size=6144
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Check out files from GitHub
uses: actions/checkout@v2
- name: Setting up Node.js
uses: actions/setup-node@v1
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: 12.x
- name: Get yarn cache path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Fetching Yarn cache
uses: actions/cache@v1
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
node-version: ${{ env.NODE_VERSION }}
cache: yarn
- name: Install dependencies
run: yarn install
env:
+2 -2
View File
@@ -15,5 +15,5 @@ jobs:
- name: Trigger Demo build
run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_DEMO_DEV_BUILD_HOOK }}
- name: Trigger Gallery build
run: curl -X POST -d {} https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_GALLERY_DEV_BUILD_HOOK }}
- name: Trigger Design build
run: curl -X POST -d "NIGHTLY" https://api.netlify.com/build_hooks/${{ secrets.NETLIFY_GALLERY_DEV_BUILD_HOOK }}
+15 -5
View File
@@ -6,9 +6,9 @@ on:
- published
env:
WHEELS_TAG: 3.7-alpine3.11
PYTHON_VERSION: 3.7
NODE_VERSION: 12.1
PYTHON_VERSION: 3.8
NODE_VERSION: 14
NODE_OPTIONS: --max_old_space_size=6144
jobs:
release:
@@ -30,10 +30,18 @@ jobs:
uses: actions/setup-node@v2
with:
node-version: ${{ env.NODE_VERSION }}
cache: yarn
- name: Install dependencies
run: yarn install
- name: Download Translations
run: ./script/translations_download
env:
LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- name: Build and release package
run: |
python3 -m pip install twine
python3 -m pip install twine build
export TWINE_USERNAME="__token__"
export TWINE_PASSWORD="${{ secrets.TWINE_TOKEN }}"
@@ -64,6 +72,8 @@ jobs:
strategy:
matrix:
arch: ["aarch64", "armhf", "armv7", "amd64", "i386"]
tag:
- "3.9-alpine3.14"
steps:
- name: Download requirements.txt
uses: actions/download-artifact@v2
@@ -73,7 +83,7 @@ jobs:
- name: Build wheels
uses: home-assistant/wheels@master
with:
tag: ${{ env.WHEELS_TAG }}
tag: ${{ matrix.tag }}
arch: ${{ matrix.arch }}
wheels-host: ${{ secrets.WHEELS_HOST }}
wheels-key: ${{ secrets.WHEELS_KEY }}
+1 -41
View File
@@ -1,8 +1,6 @@
name: Translations
on:
schedule:
- cron: "30 0 * * *"
push:
branches:
- dev
@@ -10,7 +8,7 @@ on:
- src/translations/en.json
env:
NODE_VERSION: 12
NODE_VERSION: 14
jobs:
upload:
@@ -20,46 +18,8 @@ jobs:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: ${{ env.NODE_VERSION }}
- name: Upload Translations
run: |
export LOKALISE_TOKEN="${{ secrets.LOKALISE_TOKEN }}"
./script/translations_upload_base
download:
name: Download
needs: upload
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
steps:
- name: Checkout the repository
uses: actions/checkout@v2
- name: Set up Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
with:
node-version: ${{ env.NODE_VERSION }}
- name: Download Translations
run: |
export LOKALISE_TOKEN="${{ secrets.LOKALISE_TOKEN }}"
npm install
./script/translations_download
- name: Initialize git
uses: home-assistant/actions/helpers/git-init@master
with:
name: GitHub Action
email: github-action@users.noreply.github.com
- name: Update translation
run: |
git add translations
git commit -am "Translation update"
git push
+19 -11
View File
@@ -1,11 +1,23 @@
build
build-translations/*
node_modules/*
npm-debug.log
.DS_Store
hass_frontend/*
.reify-cache
# build
build
hass_frontend/*
dist
# yarn
.yarn/*
!.yarn/patches
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
.pnp.*
node_modules/*
yarn-error.log
npm-debug.log
# Python stuff
*.py[cod]
*.egg
@@ -14,11 +26,8 @@ hass_frontend/*
# venv stuff
pyvenv.cfg
pip-selfcheck.json
venv
venv/*
.venv
lib
bin
dist
# vscode
.vscode/*
@@ -31,9 +40,8 @@ src/cast/dev_const.ts
# Secrets
.lokalise_token
yarn-error.log
#asdf
# asdf
.tool-versions
# Home Assistant config
+1 -1
View File
@@ -1 +1 @@
12.1
14
-1
View File
@@ -1,5 +1,4 @@
build
build-translations/*
translations/*
node_modules/*
hass_frontend/*
@@ -0,0 +1,29 @@
diff --git a/polyfillLoaders/EventTarget.js b/polyfillLoaders/EventTarget.js
index 4e18ade7ba485849f17f28c94c42f0e0e01ac387..8f34f4f646c7f7becc208fb5a546c96034fc74dc 100644
--- a/polyfillLoaders/EventTarget.js
+++ b/polyfillLoaders/EventTarget.js
@@ -6,16 +6,15 @@
let _ET;
let ET;
export default async function EventTarget() {
- return ET || init();
+ return ET || init();
}
async function init() {
- _ET = window.EventTarget;
- try {
- new _ET();
- }
- catch (_a) {
- _ET = (await import('event-target-shim')).EventTarget;
- }
- return (ET = _ET);
+ _ET = window.EventTarget;
+ try {
+ new _ET();
+ } catch (_a) {
+ _ET = (await import("event-target-shim")).default.EventTarget;
+ }
+ return (ET = _ET);
}
//# sourceMappingURL=EventTarget.js.map
@@ -0,0 +1,12 @@
diff --git a/mwc-icon-button-base.js b/mwc-icon-button-base.js
index 45cdaab93ccc0a6daaaaabc01266dcdc32e46bfd..b3ea5b541597308d85f86ce6c23fd00785fda835 100644
--- a/mwc-icon-button-base.js
+++ b/mwc-icon-button-base.js
@@ -63,7 +63,6 @@ export class IconButtonBase extends LitElement {
@touchend="${this.handleRippleDeactivate}"
@touchcancel="${this.handleRippleDeactivate}"
>${this.renderRipple()}
- <i class="material-icons">${this.icon}</i>
<span
><slot></slot
></span>
@@ -0,0 +1,34 @@
diff --git a/lib/legacy/class.js b/lib/legacy/class.js
index aee2511be1cd9bf900ee552bc98190c1631c57c0..f2f499d68bf52034cac9c28307c99e8ce6b8417d 100644
--- a/lib/legacy/class.js
+++ b/lib/legacy/class.js
@@ -304,17 +304,23 @@ function GenerateClassFromInfo(info, Base, behaviors) {
// only proceed if the generated class' prototype has not been registered.
const generatedProto = PolymerGenerated.prototype;
if (!generatedProto.hasOwnProperty(JSCompiler_renameProperty('__hasRegisterFinished', generatedProto))) {
- generatedProto.__hasRegisterFinished = true;
+ // make sure legacy lifecycle is called on the *element*'s prototype
+ // and not the generated class prototype; if the element has been
+ // extended, these are *not* the same.
+ const proto = Object.getPrototypeOf(this);
+ // Only set flag when generated prototype itself is registered,
+ // as this element may be extended from, and needs to run `registered`
+ // on all behaviors on the subclass as well.
+ if (proto === generatedProto) {
+ generatedProto.__hasRegisterFinished = true;
+ }
// ensure superclass is registered first.
super._registered();
// copy properties onto the generated class lazily if we're optimizing,
- if (legacyOptimizations) {
+ if (legacyOptimizations && !Object.hasOwnProperty(generatedProto, '__hasCopiedProperties')) {
+ generatedProto.__hasCopiedProperties = true;
copyPropertiesToProto(generatedProto);
}
- // make sure legacy lifecycle is called on the *element*'s prototype
- // and not the generated class prototype; if the element has been
- // extended, these are *not* the same.
- const proto = Object.getPrototypeOf(this);
let list = lifecycle.beforeRegister;
if (list) {
for (let i=0; i < list.length; i++) {
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+631
View File
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs
spec: "@yarnpkg/plugin-typescript"
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
yarnPath: .yarn/releases/yarn-3.0.2.cjs
-1
View File
@@ -1,5 +1,4 @@
include README.md
include LICENSE.md
graft hass_frontend
graft hass_frontend_es5
recursive-exclude * *.py[co]
@@ -0,0 +1,170 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require("path");
// Currently only supports CommonJS modules, as require is synchronous. `import` would need babel running asynchronous.
module.exports = function inlineConstants(babel, options, cwd) {
const t = babel.types;
if (!Array.isArray(options.modules)) {
throw new TypeError(
"babel-plugin-inline-constants: expected a `modules` array to be passed"
);
}
if (options.resolveExtensions && !Array.isArray(options.resolveExtensions)) {
throw new TypeError(
"babel-plugin-inline-constants: expected `resolveExtensions` to be an array"
);
}
const ignoreModuleNotFound = options.ignoreModuleNotFound;
const resolveExtensions = options.resolveExtensions;
const hasRelativeModules = options.modules.some(
(module) => module.startsWith(".") || module.startsWith("/")
);
const modules = Object.fromEntries(
options.modules.map((module) => {
const absolute = module.startsWith(".")
? require.resolve(module, { paths: [cwd] })
: module;
// eslint-disable-next-line import/no-dynamic-require
return [absolute, require(absolute)];
})
);
const toLiteral = (value) => {
if (typeof value === "string") {
return t.stringLiteral(value);
}
if (typeof value === "number") {
return t.numericLiteral(value);
}
if (typeof value === "boolean") {
return t.booleanLiteral(value);
}
if (value === null) {
return t.nullLiteral();
}
throw new Error(
"babel-plugin-inline-constants: cannot handle non-literal `" + value + "`"
);
};
const resolveAbsolute = (value, state, resolveExtensionIndex) => {
if (!state.filename) {
throw new TypeError(
"babel-plugin-inline-constants: expected a `filename` to be set for files"
);
}
if (resolveExtensions && resolveExtensionIndex !== undefined) {
value += resolveExtensions[resolveExtensionIndex];
}
try {
return require.resolve(value, { paths: [path.dirname(state.filename)] });
} catch (error) {
if (
error.code === "MODULE_NOT_FOUND" &&
resolveExtensions &&
(resolveExtensionIndex === undefined ||
resolveExtensionIndex < resolveExtensions.length - 1)
) {
const resolveExtensionIdx = (resolveExtensionIndex || -1) + 1;
return resolveAbsolute(value, state, resolveExtensionIdx);
}
if (error.code === "MODULE_NOT_FOUND" && ignoreModuleNotFound) {
return undefined;
}
throw error;
}
};
const importDeclaration = (p, state) => {
if (p.node.type !== "ImportDeclaration") {
return;
}
const absolute =
hasRelativeModules && p.node.source.value.startsWith(".")
? resolveAbsolute(p.node.source.value, state)
: p.node.source.value;
if (!absolute || !(absolute in modules)) {
return;
}
const module = modules[absolute];
for (const specifier of p.node.specifiers) {
if (
specifier.type === "ImportDefaultSpecifier" &&
specifier.local &&
specifier.local.type === "Identifier"
) {
if (!("default" in module)) {
throw new Error(
"babel-plugin-inline-constants: cannot access default export from `" +
p.node.source.value +
"`"
);
}
const variableValue = toLiteral(module.default);
const variable = t.variableDeclarator(
t.identifier(specifier.local.name),
variableValue
);
p.insertBefore({
type: "VariableDeclaration",
kind: "const",
declarations: [variable],
});
} else if (
specifier.type === "ImportSpecifier" &&
specifier.imported &&
specifier.imported.type === "Identifier" &&
specifier.local &&
specifier.local.type === "Identifier"
) {
if (!(specifier.imported.name in module)) {
throw new Error(
"babel-plugin-inline-constants: cannot access `" +
specifier.imported.name +
"` from `" +
p.node.source.value +
"`"
);
}
const variableValue = toLiteral(module[specifier.imported.name]);
const variable = t.variableDeclarator(
t.identifier(specifier.local.name),
variableValue
);
p.insertBefore({
type: "VariableDeclaration",
kind: "const",
declarations: [variable],
});
} else {
throw new Error("Cannot handle specifier `" + specifier.type + "`");
}
}
p.remove();
};
return {
visitor: {
ImportDeclaration: importDeclaration,
},
};
};
+47 -21
View File
@@ -1,17 +1,16 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require("path");
const env = require("./env.js");
const paths = require("./paths.js");
// Files from NPM Packages that should not be imported
module.exports.ignorePackages = ({ latestBuild }) => [
// Bloats bundle and it's not used.
path.resolve(require.resolve("moment"), "../locale"),
// Part of yaml.js and only used for !!js functions that we don't use
require.resolve("esprima"),
];
// Files from NPM packages that we should replace with empty file
module.exports.emptyPackages = ({ latestBuild }) =>
module.exports.emptyPackages = ({ latestBuild, isHassioBuild }) =>
[
// Contains all color definitions for all material color sets.
// We don't use it
@@ -19,7 +18,8 @@ module.exports.emptyPackages = ({ latestBuild }) =>
require.resolve("@polymer/paper-styles/default-theme.js"),
// Loads stuff from a CDN
require.resolve("@polymer/font-roboto/roboto.js"),
require.resolve("@vaadin/vaadin-material-styles/font-roboto.js"),
require.resolve("@vaadin/vaadin-material-styles/typography.js"),
require.resolve("@vaadin/vaadin-material-styles/font-icons.js"),
// Compatibility not needed for latest builds
latestBuild &&
// wrapped in require.resolve so it blows up if file no longer exists
@@ -28,6 +28,15 @@ module.exports.emptyPackages = ({ latestBuild }) =>
),
// This polyfill is loaded in workers to support ES5, filter it out.
latestBuild && require.resolve("proxy-polyfill/src/index.js"),
// Icons in supervisor conflict with icons in HA so we don't load.
isHassioBuild &&
require.resolve(
path.resolve(paths.polymer_dir, "src/components/ha-icon.ts")
),
isHassioBuild &&
require.resolve(
path.resolve(paths.polymer_dir, "src/components/ha-icon-picker.ts")
),
].filter(Boolean);
module.exports.definedVars = ({ isProdBuild, latestBuild, defineOverlay }) => ({
@@ -35,6 +44,7 @@ module.exports.definedVars = ({ isProdBuild, latestBuild, defineOverlay }) => ({
__BUILD__: JSON.stringify(latestBuild ? "latest" : "es5"),
__VERSION__: JSON.stringify(env.version()),
__DEMO__: false,
__SUPERVISOR__: false,
__BACKWARDS_COMPAT__: false,
__STATIC_PATH__: "/static/",
"process.env.NODE_ENV": JSON.stringify(
@@ -51,17 +61,29 @@ module.exports.terserOptions = (latestBuild) => ({
module.exports.babelOptions = ({ latestBuild }) => ({
babelrc: false,
compact: false,
presets: [
!latestBuild && [
require("@babel/preset-env").default,
"@babel/preset-env",
{
useBuiltIns: "entry",
corejs: "3.6",
corejs: "3.15",
bugfixes: true,
},
],
require("@babel/preset-typescript").default,
"@babel/preset-typescript",
].filter(Boolean),
plugins: [
[
path.resolve(
paths.polymer_dir,
"build-scripts/babel-plugins/inline-constants-plugin.js"
),
{
modules: ["@mdi/js"],
ignoreModuleNotFound: true,
},
],
// Part of ES2018. Converts {...a, b: 2} to Object.assign({}, a, {b: 2})
!latestBuild && [
"@babel/plugin-proposal-object-rest-spread",
@@ -70,25 +92,21 @@ module.exports.babelOptions = ({ latestBuild }) => ({
// Only support the syntax, Webpack will handle it.
"@babel/plugin-syntax-import-meta",
"@babel/plugin-syntax-dynamic-import",
"@babel/plugin-syntax-top-level-await",
"@babel/plugin-proposal-optional-chaining",
"@babel/plugin-proposal-nullish-coalescing-operator",
[
require("@babel/plugin-proposal-decorators").default,
{ decoratorsBeforeExport: true },
],
[
require("@babel/plugin-proposal-class-properties").default,
{ loose: true },
],
["@babel/plugin-proposal-decorators", { decoratorsBeforeExport: true }],
["@babel/plugin-proposal-private-methods", { loose: true }],
["@babel/plugin-proposal-private-property-in-object", { loose: true }],
["@babel/plugin-proposal-class-properties", { loose: true }],
].filter(Boolean),
exclude: [
// \\ for Windows, / for Mac OS and Linux
/node_modules[\\/]core-js/,
/node_modules[\\/]webpack[\\/]buildin/,
],
});
// Are already ES5, cause warnings when babelified.
module.exports.babelExclude = () => [
require.resolve("@mdi/js/mdi.js"),
require.resolve("hls.js"),
];
const outputPath = (outputRoot, latestBuild) =>
path.resolve(outputRoot, latestBuild ? "frontend_latest" : "frontend_es5");
@@ -156,6 +174,7 @@ module.exports.config = {
cast({ isProdBuild, latestBuild }) {
const entry = {
launcher: path.resolve(paths.cast_dir, "src/launcher/entrypoint.ts"),
media: path.resolve(paths.cast_dir, "src/media/entrypoint.ts"),
};
if (latestBuild) {
@@ -186,6 +205,10 @@ module.exports.config = {
publicPath: publicPath(latestBuild, paths.hassio_publicPath),
isProdBuild,
latestBuild,
isHassioBuild: true,
defineOverlay: {
__SUPERVISOR__: true,
},
};
},
@@ -198,6 +221,9 @@ module.exports.config = {
publicPath: publicPath(latestBuild),
isProdBuild,
latestBuild,
defineOverlay: {
__DEMO__: true,
},
};
},
};
+4 -3
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require("fs");
const path = require("path");
const paths = require("./paths.js");
@@ -25,11 +26,11 @@ module.exports = {
},
version() {
const version = fs
.readFileSync(path.resolve(paths.polymer_dir, "setup.py"), "utf8")
.match(/\d{8}\.\d+/);
.readFileSync(path.resolve(paths.polymer_dir, "setup.cfg"), "utf8")
.match(/version\W+=\W(\d{8}\.\d)/);
if (!version) {
throw Error("Version not found");
}
return version[0];
return version[1];
},
};
+6 -4
View File
@@ -5,6 +5,7 @@ const env = require("../env");
require("./clean.js");
require("./translations.js");
require("./locale-data.js");
require("./gen-icons-json.js");
require("./gather-static.js");
require("./compress.js");
@@ -26,7 +27,8 @@ gulp.task(
"gen-icons-json",
"gen-pages-dev",
"gen-index-app-dev",
"build-translations"
"build-translations",
"build-locale-data"
),
"copy-static-app",
env.useWDS()
@@ -44,11 +46,11 @@ gulp.task(
process.env.NODE_ENV = "production";
},
"clean",
gulp.parallel("gen-icons-json", "build-translations"),
gulp.parallel("gen-icons-json", "build-translations", "build-locale-data"),
"copy-static-app",
env.useRollup() ? "rollup-prod-app" : "webpack-prod-app",
...// Don't compress running tests
(env.isTest() ? [] : ["compress-app"]),
// Don't compress running tests
...(env.isTest() ? [] : ["compress-app"]),
gulp.parallel(
"gen-pages-prod",
"gen-index-app-prod",
+2 -2
View File
@@ -18,7 +18,7 @@ gulp.task(
},
"clean-cast",
"translations-enable-merge-backend",
gulp.parallel("gen-icons-json", "build-translations"),
gulp.parallel("gen-icons-json", "build-translations", "build-locale-data"),
"copy-static-cast",
"gen-index-cast-dev",
env.useRollup() ? "rollup-dev-server-cast" : "webpack-dev-server-cast"
@@ -33,7 +33,7 @@ gulp.task(
},
"clean-cast",
"translations-enable-merge-backend",
gulp.parallel("gen-icons-json", "build-translations"),
gulp.parallel("gen-icons-json", "build-translations", "build-locale-data"),
"copy-static-cast",
env.useRollup() ? "rollup-prod-cast" : "webpack-prod-cast",
"gen-index-cast-prod"
+15 -15
View File
@@ -5,32 +5,32 @@ require("./translations");
gulp.task(
"clean",
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
return del([paths.app_output_root, paths.build_dir]);
})
gulp.parallel("clean-translations", () =>
del([paths.app_output_root, paths.build_dir])
)
);
gulp.task(
"clean-demo",
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
return del([paths.demo_output_root, paths.build_dir]);
})
gulp.parallel("clean-translations", () =>
del([paths.demo_output_root, paths.build_dir])
)
);
gulp.task(
"clean-cast",
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
return del([paths.cast_output_root, paths.build_dir]);
})
gulp.parallel("clean-translations", () =>
del([paths.cast_output_root, paths.build_dir])
)
);
gulp.task("clean-hassio", function cleanOutputAndBuildDir() {
return del([paths.hassio_output_root, paths.build_dir]);
});
gulp.task("clean-hassio", () =>
del([paths.hassio_output_root, paths.build_dir])
);
gulp.task(
"clean-gallery",
gulp.parallel("clean-translations", function cleanOutputAndBuildDir() {
return del([paths.gallery_output_root, paths.build_dir]);
})
gulp.parallel("clean-translations", () =>
del([paths.gallery_output_root, paths.gallery_build, paths.build_dir])
)
);
+7 -2
View File
@@ -20,7 +20,12 @@ gulp.task(
},
"clean-demo",
"translations-enable-merge-backend",
gulp.parallel("gen-icons-json", "gen-index-demo-dev", "build-translations"),
gulp.parallel(
"gen-icons-json",
"gen-index-demo-dev",
"build-translations",
"build-locale-data"
),
"copy-static-demo",
env.useRollup() ? "rollup-dev-server-demo" : "webpack-dev-server-demo"
)
@@ -35,7 +40,7 @@ gulp.task(
"clean-demo",
// Cast needs to be backwards compatible and older HA has no translations
"translations-enable-merge-backend",
gulp.parallel("gen-icons-json", "build-translations"),
gulp.parallel("gen-icons-json", "build-translations", "build-locale-data"),
"copy-static-demo",
env.useRollup() ? "rollup-prod-demo" : "webpack-prod-demo",
"gen-index-demo-prod"
+29 -3
View File
@@ -154,6 +154,15 @@ gulp.task("gen-index-cast-dev", (done) => {
contentReceiver
);
const contentMedia = renderCastTemplate("media", {
latestMediaJS: "/frontend_latest/media.js",
es5MediaJS: "/frontend_es5/media.js",
});
fs.outputFileSync(
path.resolve(paths.cast_output_root, "media.html"),
contentMedia
);
const contentFAQ = renderCastTemplate("launcher-faq", {
latestLauncherJS: "/frontend_latest/launcher.js",
es5LauncherJS: "/frontend_es5/launcher.js",
@@ -192,6 +201,15 @@ gulp.task("gen-index-cast-prod", (done) => {
contentReceiver
);
const contentMedia = renderCastTemplate("media", {
latestMediaJS: latestManifest["media.js"],
es5MediaJS: es5Manifest["media.js"],
});
fs.outputFileSync(
path.resolve(paths.cast_output_root, "media.html"),
contentMedia
);
const contentFAQ = renderCastTemplate("launcher-faq", {
latestLauncherJS: latestManifest["launcher.js"],
es5LauncherJS: es5Manifest["launcher.js"],
@@ -302,15 +320,23 @@ gulp.task("gen-index-hassio-prod", async () => {
function writeHassioEntrypoint(latestEntrypoint, es5Entrypoint) {
fs.mkdirSync(paths.hassio_output_root, { recursive: true });
// Safari 12 and below does not have a compliant ES2015 implementation of template literals, so we ship ES5
fs.writeFileSync(
path.resolve(paths.hassio_output_root, "entrypoint.js"),
`
try {
new Function("import('${latestEntrypoint}')")();
} catch (err) {
function loadES5() {
var el = document.createElement('script');
el.src = '${es5Entrypoint}';
document.body.appendChild(el);
}
if (/.*Version\\/(?:11|12)(?:\\.\\d+)*.*Safari\\//.test(navigator.userAgent)) {
loadES5();
} else {
try {
new Function("import('${latestEntrypoint}')")();
} catch (err) {
loadES5();
}
}
`,
{ encoding: "utf-8" }
+141 -19
View File
@@ -1,7 +1,11 @@
/* eslint-disable */
// Run demo develop mode
const gulp = require("gulp");
const fs = require("fs");
const path = require("path");
const marked = require("marked");
const glob = require("glob");
const yaml = require("js-yaml");
const env = require("../env");
const paths = require("../paths");
@@ -15,26 +19,129 @@ require("./service-worker.js");
require("./entry-html.js");
require("./rollup.js");
gulp.task("gather-gallery-demos", async function gatherDemos() {
const files = await fs.promises.readdir(
path.resolve(paths.gallery_dir, "src/demos")
);
let content = "export const DEMOS = {\n";
for (const file of files) {
const demoId = path.basename(file, ".ts");
const demoPath = "../src/demos/" + demoId;
content += ` "${demoId}": () => import("${demoPath}"),\n`;
}
content += "};";
gulp.task("gather-gallery-pages", async function gatherPages() {
const pageDir = path.resolve(paths.gallery_dir, "src/pages");
const files = glob.sync(path.resolve(pageDir, "**/*"));
const galleryBuild = path.resolve(paths.gallery_dir, "build");
fs.mkdirSync(galleryBuild, { recursive: true });
let content = "export const PAGES = {\n";
const processed = new Set();
for (const file of files) {
if (fs.lstatSync(file).isDirectory()) {
continue;
}
const pageId = file.substring(pageDir.length + 1, file.lastIndexOf("."));
if (processed.has(pageId)) {
continue;
}
processed.add(pageId);
const [category, name] = pageId.split("/", 2);
const demoFile = path.resolve(pageDir, `${pageId}.ts`);
const descriptionFile = path.resolve(pageDir, `${pageId}.markdown`);
const hasDemo = fs.existsSync(demoFile);
let hasDescription = fs.existsSync(descriptionFile);
let metadata = {};
if (hasDescription) {
let descriptionContent = fs.readFileSync(descriptionFile, "utf-8");
if (descriptionContent.startsWith("---")) {
const metadataEnd = descriptionContent.indexOf("---", 3);
metadata = yaml.load(descriptionContent.substring(3, metadataEnd));
descriptionContent = descriptionContent
.substring(metadataEnd + 3)
.trim();
}
// If description is just metadata
if (descriptionContent === "") {
hasDescription = false;
} else {
descriptionContent = marked(descriptionContent).replace(/`/g, "\\`");
fs.mkdirSync(path.resolve(galleryBuild, category), { recursive: true });
fs.writeFileSync(
path.resolve(galleryBuild, `${pageId}-description.ts`),
`
import {html} from "lit";
export default html\`${descriptionContent}\`
`
);
}
}
content += ` "${pageId}": {
metadata: ${JSON.stringify(metadata)},
${
hasDescription
? `description: () => import("./${pageId}-description").then(m => m.default),`
: ""
}
${hasDemo ? `demo: () => import("../src/pages/${pageId}")` : ""}
},\n`;
}
content += "};\n";
// Generate sidebar
const sidebarPath = path.resolve(paths.gallery_dir, "sidebar.js");
// To make watch work during development
delete require.cache[sidebarPath];
const sidebar = require(sidebarPath);
const pagesToProcess = {};
for (const key of processed) {
const [category, page] = key.split("/", 2);
if (!(category in pagesToProcess)) {
pagesToProcess[category] = new Set();
}
pagesToProcess[category].add(page);
}
for (const group of Object.values(sidebar)) {
const toProcess = pagesToProcess[group.category];
delete pagesToProcess[group.category];
if (!toProcess) {
console.error("Unknown category", group.category);
if (!group.pages) {
group.pages = [];
}
continue;
}
// Any pre-defined groups will not be sorted.
if (group.pages) {
for (const page of group.pages) {
if (!toProcess.delete(page)) {
console.error("Found unreferenced demo", page);
}
}
} else {
group.pages = [];
}
for (const page of Array.from(toProcess).sort()) {
group.pages.push(page);
}
}
for (const [category, pages] of Object.entries(pagesToProcess)) {
sidebar.push({
category,
header: category,
pages: Array.from(pages).sort(),
});
}
content += `export const SIDEBAR = ${JSON.stringify(sidebar, null, 2)};\n`;
fs.writeFileSync(
path.resolve(galleryBuild, "import-demos.ts"),
path.resolve(galleryBuild, "import-pages.ts"),
content,
"utf-8"
);
@@ -51,11 +158,25 @@ gulp.task(
gulp.parallel(
"gen-icons-json",
"build-translations",
"gather-gallery-demos"
"build-locale-data",
"gather-gallery-pages"
),
"copy-static-gallery",
"gen-index-gallery-dev",
env.useRollup() ? "rollup-dev-server-gallery" : "webpack-dev-server-gallery"
gulp.parallel(
env.useRollup()
? "rollup-dev-server-gallery"
: "webpack-dev-server-gallery",
async function watchMarkdownFiles() {
gulp.watch(
[
path.resolve(paths.gallery_dir, "src/pages/**/*.markdown"),
path.resolve(paths.gallery_dir, "sidebar.js"),
],
gulp.series("gather-gallery-pages")
);
}
)
)
);
@@ -70,7 +191,8 @@ gulp.task(
gulp.parallel(
"gen-icons-json",
"build-translations",
"gather-gallery-demos"
"build-locale-data",
"gather-gallery-pages"
),
"copy-static-gallery",
env.useRollup() ? "rollup-prod-gallery" : "webpack-prod-gallery",
+40 -7
View File
@@ -2,7 +2,6 @@
const gulp = require("gulp");
const path = require("path");
const cpx = require("cpx");
const fs = require("fs-extra");
const paths = require("../paths");
@@ -13,19 +12,28 @@ const polyPath = (...parts) => path.resolve(paths.polymer_dir, ...parts);
const copyFileDir = (fromFile, toDir) =>
fs.copySync(fromFile, path.join(toDir, path.basename(fromFile)));
const genStaticPath = (staticDir) => (...parts) =>
path.resolve(staticDir, ...parts);
const genStaticPath =
(staticDir) =>
(...parts) =>
path.resolve(staticDir, ...parts);
function copyTranslations(staticDir) {
const staticPath = genStaticPath(staticDir);
// Translation output
fs.copySync(
polyPath("build-translations/output"),
polyPath("build/translations/output"),
staticPath("translations")
);
}
function copyLocaleData(staticDir) {
const staticPath = genStaticPath(staticDir);
// Locale data output
fs.copySync(polyPath("build/locale-data"), staticPath("locale-data"));
}
function copyMdiIcons(staticDir) {
const staticPath = genStaticPath(staticDir);
@@ -62,12 +70,20 @@ function copyLoaderJS(staticDir) {
function copyFonts(staticDir) {
const staticPath = genStaticPath(staticDir);
// Local fonts
cpx.copySync(
npmPath("roboto-fontface/fonts/roboto/*.woff2"),
staticPath("fonts/roboto")
fs.copySync(
npmPath("roboto-fontface/fonts/roboto/"),
staticPath("fonts/roboto/"),
{
filter: (src) => !src.includes(".") || src.endsWith(".woff2"),
}
);
}
function copyQrScannerWorker(staticDir) {
const staticPath = genStaticPath(staticDir);
copyFileDir(npmPath("qr-scanner/qr-scanner-worker.min.js"), staticPath("js"));
}
function copyMapPanel(staticDir) {
const staticPath = genStaticPath(staticDir);
copyFileDir(
@@ -80,6 +96,11 @@ function copyMapPanel(staticDir) {
);
}
gulp.task("copy-locale-data", async () => {
const staticDir = paths.app_output_static;
copyLocaleData(staticDir);
});
gulp.task("copy-translations-app", async () => {
const staticDir = paths.app_output_static;
copyTranslations(staticDir);
@@ -90,6 +111,11 @@ gulp.task("copy-translations-supervisor", async () => {
copyTranslations(staticDir);
});
gulp.task("copy-locale-data-supervisor", async () => {
const staticDir = paths.hassio_output_static;
copyLocaleData(staticDir);
});
gulp.task("copy-static-app", async () => {
const staticDir = paths.app_output_static;
// Basic static files
@@ -99,10 +125,14 @@ gulp.task("copy-static-app", async () => {
copyPolyfills(staticDir);
copyFonts(staticDir);
copyTranslations(staticDir);
copyLocaleData(staticDir);
copyMdiIcons(staticDir);
// Panel assets
copyMapPanel(staticDir);
// Qr Scanner assets
copyQrScannerWorker(staticDir);
});
gulp.task("copy-static-demo", async () => {
@@ -119,6 +149,7 @@ gulp.task("copy-static-demo", async () => {
copyMapPanel(paths.demo_output_static);
copyFonts(paths.demo_output_static);
copyTranslations(paths.demo_output_static);
copyLocaleData(paths.demo_output_static);
copyMdiIcons(paths.demo_output_static);
});
@@ -133,6 +164,7 @@ gulp.task("copy-static-cast", async () => {
copyMapPanel(paths.cast_output_static);
copyFonts(paths.cast_output_static);
copyTranslations(paths.cast_output_static);
copyLocaleData(paths.cast_output_static);
copyMdiIcons(paths.cast_output_static);
});
@@ -148,5 +180,6 @@ gulp.task("copy-static-gallery", async () => {
copyMapPanel(paths.gallery_output_static);
copyFonts(paths.gallery_output_static);
copyTranslations(paths.gallery_output_static);
copyLocaleData(paths.gallery_output_static);
copyMdiIcons(paths.gallery_output_static);
});
+42 -4
View File
@@ -22,17 +22,40 @@ const getMeta = () => {
const svg = fs.readFileSync(`${ICON_PATH}/${icon.name}.svg`, {
encoding,
});
return { path: svg.match(/ d="([^"]+)"/)[1], name: icon.name };
return {
path: svg.match(/ d="([^"]+)"/)[1],
name: icon.name,
tags: icon.tags,
aliases: icon.aliases,
};
});
};
const addRemovedMeta = (meta) => {
const file = fs.readFileSync(REMOVED_ICONS_PATH, { encoding });
const removed = JSON.parse(file);
const combinedMeta = [...meta, ...removed];
const removedMeta = removed.map((removeIcon) => ({
path: removeIcon.path,
name: removeIcon.name,
tags: [],
aliases: [],
}));
const combinedMeta = [...meta, ...removedMeta];
return combinedMeta.sort((a, b) => a.name.localeCompare(b.name));
};
const homeAutomationTag = "Home Automation";
const orderMeta = (meta) => {
const homeAutomationMeta = meta.filter((icon) =>
icon.tags.includes(homeAutomationTag)
);
const otherMeta = meta.filter(
(icon) => !icon.tags.includes(homeAutomationTag)
);
return [...homeAutomationMeta, ...otherMeta];
};
const splitBySize = (meta) => {
const chunks = [];
const CHUNK_SIZE = 50000;
@@ -77,8 +100,10 @@ const findDifferentiator = (curString, prevString) => {
};
gulp.task("gen-icons-json", (done) => {
const meta = addRemovedMeta(getMeta());
const split = splitBySize(meta);
const meta = getMeta();
const metaAndRemoved = addRemovedMeta(meta);
const split = splitBySize(metaAndRemoved);
if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
@@ -116,5 +141,18 @@ gulp.task("gen-icons-json", (done) => {
JSON.stringify({ version: package.version, parts })
);
fs.writeFileSync(
path.resolve(OUTPUT_DIR, "iconList.json"),
JSON.stringify(
orderMeta(meta).map((icon) => ({
name: icon.name,
keywords: [
...icon.tags.map((t) => t.toLowerCase().replace(/\s\/\s/g, " ")),
...icon.aliases,
],
}))
)
);
done();
});
+4 -5
View File
@@ -1,9 +1,6 @@
const gulp = require("gulp");
const fs = require("fs");
const path = require("path");
const env = require("../env");
const paths = require("../paths");
require("./clean.js");
require("./gen-icons-json.js");
@@ -20,10 +17,11 @@ gulp.task(
process.env.NODE_ENV = "development";
},
"clean-hassio",
"gen-icons-json",
"gen-index-hassio-dev",
"build-supervisor-translations",
"copy-translations-supervisor",
"build-locale-data",
"copy-locale-data-supervisor",
env.useRollup() ? "rollup-watch-hassio" : "webpack-watch-hassio"
)
);
@@ -35,9 +33,10 @@ gulp.task(
process.env.NODE_ENV = "production";
},
"clean-hassio",
"gen-icons-json",
"build-supervisor-translations",
"copy-translations-supervisor",
"build-locale-data",
"copy-locale-data-supervisor",
env.useRollup() ? "rollup-prod-hassio" : "webpack-prod-hassio",
"gen-index-hassio-prod",
...// Don't compress running tests
+74
View File
@@ -0,0 +1,74 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const del = require("del");
const path = require("path");
const gulp = require("gulp");
const fs = require("fs");
const paths = require("../paths");
const outDir = "build/locale-data";
gulp.task("clean-locale-data", () => del([outDir]));
gulp.task("ensure-locale-data-build-dir", (done) => {
if (!fs.existsSync(outDir)) {
fs.mkdirSync(outDir, { recursive: true });
}
done();
});
const modules = {
"intl-relativetimeformat": "RelativeTimeFormat",
"intl-datetimeformat": "DateTimeFormat",
"intl-numberformat": "NumberFormat",
};
gulp.task("create-locale-data", (done) => {
const translationMeta = JSON.parse(
fs.readFileSync(
path.join(paths.translations_src, "translationMetadata.json")
)
);
Object.entries(modules).forEach(([module, className]) => {
Object.keys(translationMeta).forEach((lang) => {
try {
const localeData = String(
fs.readFileSync(
require.resolve(`@formatjs/${module}/locale-data/${lang}.js`)
)
)
.replace(
new RegExp(
`\\/\\*\\s*@generated\\s*\\*\\/\\s*\\/\\/\\s*prettier-ignore\\s*if\\s*\\(Intl\\.${className}\\s*&&\\s*typeof\\s*Intl\\.${className}\\.__addLocaleData\\s*===\\s*'function'\\)\\s*{\\s*Intl\\.${className}\\.__addLocaleData\\(`,
"im"
),
""
)
.replace(/\)\s*}/im, "");
// make sure we have valid JSON
JSON.parse(localeData);
if (!fs.existsSync(path.join(outDir, module))) {
fs.mkdirSync(path.join(outDir, module), { recursive: true });
}
fs.writeFileSync(
path.join(outDir, `${module}/${lang}.json`),
localeData
);
} catch (e) {
if (e.code !== "MODULE_NOT_FOUND") {
throw e;
}
}
});
done();
});
});
gulp.task(
"build-locale-data",
gulp.series(
"clean-locale-data",
"ensure-locale-data-build-dir",
"create-locale-data"
)
);
+110 -105
View File
@@ -1,3 +1,5 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const crypto = require("crypto");
const del = require("del");
const path = require("path");
@@ -15,7 +17,7 @@ const paths = require("../paths");
const inFrontendDir = "translations/frontend";
const inBackendDir = "translations/backend";
const workDir = "build-translations";
const workDir = "build/translations";
const fullDir = workDir + "/full";
const coreDir = workDir + "/core";
const outDir = workDir + "/output";
@@ -26,13 +28,6 @@ gulp.task("translations-enable-merge-backend", (done) => {
done();
});
String.prototype.rsplit = function (sep, maxsplit) {
var split = this.split(sep);
return maxsplit
? [split.slice(0, -maxsplit).join(sep)].concat(split.slice(-maxsplit))
: split;
};
// Panel translations which should be split from the core translations.
const TRANSLATION_FRAGMENTS = Object.keys(
require("../../src/translations/en.json").ui.panel
@@ -40,7 +35,7 @@ const TRANSLATION_FRAGMENTS = Object.keys(
function recursiveFlatten(prefix, data) {
let output = {};
Object.keys(data).forEach(function (key) {
Object.keys(data).forEach((key) => {
if (typeof data[key] === "object") {
output = {
...output,
@@ -101,15 +96,19 @@ function lokaliseTransform(data, original, file) {
if (value instanceof Object) {
output[key] = lokaliseTransform(value, original, file);
} else {
output[key] = value.replace(re_key_reference, (match, key) => {
const replace = key.split("::").reduce((tr, k) => {
output[key] = value.replace(re_key_reference, (_match, lokalise_key) => {
const replace = lokalise_key.split("::").reduce((tr, k) => {
if (!tr) {
throw Error(`Invalid key placeholder ${key} in ${file.path}`);
throw Error(
`Invalid key placeholder ${lokalise_key} in ${file.path}`
);
}
return tr[k];
}, original);
if (typeof replace !== "string") {
throw Error(`Invalid key placeholder ${key} in ${file.path}`);
throw Error(
`Invalid key placeholder ${lokalise_key} in ${file.path}`
);
}
return replace;
});
@@ -118,18 +117,16 @@ function lokaliseTransform(data, original, file) {
return output;
}
gulp.task("clean-translations", function () {
return del([workDir]);
});
gulp.task("clean-translations", () => del([workDir]));
gulp.task("ensure-translations-build-dir", (done) => {
if (!fs.existsSync(workDir)) {
fs.mkdirSync(workDir);
fs.mkdirSync(workDir, { recursive: true });
}
done();
});
gulp.task("create-test-metadata", function (cb) {
gulp.task("create-test-metadata", (cb) => {
fs.writeFile(
workDir + "/testMetadata.json",
JSON.stringify({
@@ -143,17 +140,13 @@ gulp.task("create-test-metadata", function (cb) {
gulp.task(
"create-test-translation",
gulp.series("create-test-metadata", function createTestTranslation() {
return gulp
gulp.series("create-test-metadata", () =>
gulp
.src(path.join(paths.translations_src, "en.json"))
.pipe(
transform(function (data, file) {
return recursiveEmpty(data);
})
)
.pipe(transform((data, _file) => recursiveEmpty(data)))
.pipe(rename("test.json"))
.pipe(gulp.dest(workDir));
})
.pipe(gulp.dest(workDir))
)
);
/**
@@ -165,7 +158,7 @@ gulp.task(
* project is buildable immediately after merging new translation keys, since
* the Lokalise update to translations/en.json will not happen immediately.
*/
gulp.task("build-master-translation", function () {
gulp.task("build-master-translation", () => {
const src = [path.join(paths.translations_src, "en.json")];
if (mergeBackend) {
@@ -174,11 +167,7 @@ gulp.task("build-master-translation", function () {
return gulp
.src(src)
.pipe(
transform(function (data, file) {
return lokaliseTransform(data, data, file);
})
)
.pipe(transform((data, file) => lokaliseTransform(data, data, file)))
.pipe(
merge({
fileName: "translationMaster.json",
@@ -187,18 +176,14 @@ gulp.task("build-master-translation", function () {
.pipe(gulp.dest(workDir));
});
gulp.task("build-merged-translations", function () {
return gulp
gulp.task("build-merged-translations", () =>
gulp
.src([inFrontendDir + "/*.json", workDir + "/test.json"], {
allowEmpty: true,
})
.pipe(transform((data, file) => lokaliseTransform(data, data, file)))
.pipe(
transform(function (data, file) {
return lokaliseTransform(data, data, file);
})
)
.pipe(
foreach(function (stream, file) {
foreach((stream, file) => {
// For each language generate a merged json file. It begins with the master
// translation as a failsafe for untranslated strings, and merges all parent
// tags into one file for each specific subtag
@@ -230,17 +215,17 @@ gulp.task("build-merged-translations", function () {
)
.pipe(gulp.dest(fullDir));
})
);
});
)
);
var taskName;
let taskName;
const splitTasks = [];
TRANSLATION_FRAGMENTS.forEach((fragment) => {
taskName = "build-translation-fragment-" + fragment;
gulp.task(taskName, function () {
gulp.task(taskName, () =>
// Return only the translations for this fragment.
return gulp
gulp
.src(fullDir + "/*.json")
.pipe(
transform((data) => ({
@@ -251,18 +236,18 @@ TRANSLATION_FRAGMENTS.forEach((fragment) => {
},
}))
)
.pipe(gulp.dest(workDir + "/" + fragment));
});
.pipe(gulp.dest(workDir + "/" + fragment))
);
splitTasks.push(taskName);
});
taskName = "build-translation-core";
gulp.task(taskName, function () {
gulp.task(taskName, () =>
// Remove the fragment translations from the core translation.
return gulp
gulp
.src(fullDir + "/*.json")
.pipe(
transform((data, file) => {
transform((data, _file) => {
TRANSLATION_FRAGMENTS.forEach((fragment) => {
delete data.ui.panel[fragment];
});
@@ -270,14 +255,14 @@ gulp.task(taskName, function () {
return data;
})
)
.pipe(gulp.dest(coreDir));
});
.pipe(gulp.dest(coreDir))
);
splitTasks.push(taskName);
gulp.task("build-flattened-translations", function () {
gulp.task("build-flattened-translations", () =>
// Flatten the split versions of our translations, and move them into outDir
return gulp
gulp
.src(
TRANSLATION_FRAGMENTS.map(
(fragment) => workDir + "/" + fragment + "/*.json"
@@ -285,41 +270,45 @@ gulp.task("build-flattened-translations", function () {
{ base: workDir }
)
.pipe(
transform(function (data) {
transform((data) =>
// Polymer.AppLocalizeBehavior requires flattened json
return flatten(data);
})
flatten(data)
)
)
.pipe(
rename((filePath) => {
if (filePath.dirname === "core") {
filePath.dirname = "";
}
// In dev we create the file with the fake hash in the filename
if (!env.isProdBuild()) {
filePath.basename += "-dev";
}
})
)
.pipe(gulp.dest(outDir));
});
.pipe(gulp.dest(outDir))
);
const fingerprints = {};
gulp.task(
"build-translation-fingerprints",
function fingerprintTranslationFiles() {
// Fingerprint full file of each language
const files = fs.readdirSync(fullDir);
gulp.task("build-translation-fingerprints", () => {
// Fingerprint full file of each language
const files = fs.readdirSync(fullDir);
for (let i = 0; i < files.length; i++) {
fingerprints[files[i].split(".")[0]] = {
// In dev we create fake hashes
hash: env.isProdBuild()
? crypto
.createHash("md5")
.update(fs.readFileSync(path.join(fullDir, files[i]), "utf-8"))
.digest("hex")
: "dev",
};
}
for (let i = 0; i < files.length; i++) {
fingerprints[files[i].split(".")[0]] = {
// In dev we create fake hashes
hash: env.isProdBuild()
? crypto
.createHash("md5")
.update(fs.readFileSync(path.join(fullDir, files[i]), "utf-8"))
.digest("hex")
: "dev",
};
}
// In dev we create the file with the fake hash in the filename
if (env.isProdBuild()) {
mapFiles(outDir, ".json", (filename) => {
const parsed = path.parse(filename);
@@ -335,35 +324,43 @@ gulp.task(
}`
);
});
const stream = source("translationFingerprints.json");
stream.write(JSON.stringify(fingerprints));
process.nextTick(() => stream.end());
return stream.pipe(vinylBuffer()).pipe(gulp.dest(workDir));
}
);
gulp.task("build-translation-fragment-supervisor", function () {
return gulp
const stream = source("translationFingerprints.json");
stream.write(JSON.stringify(fingerprints));
process.nextTick(() => stream.end());
return stream.pipe(vinylBuffer()).pipe(gulp.dest(workDir));
});
gulp.task("build-translation-fragment-supervisor", () =>
gulp
.src(fullDir + "/*.json")
.pipe(transform((data) => data.supervisor))
.pipe(gulp.dest(workDir + "/supervisor"));
});
gulp.task("build-translation-flatten-supervisor", function () {
return gulp
.src(workDir + "/supervisor/*.json")
.pipe(
transform(function (data) {
// Polymer.AppLocalizeBehavior requires flattened json
return flatten(data);
rename((filePath) => {
// In dev we create the file with the fake hash in the filename
if (!env.isProdBuild()) {
filePath.basename += "-dev";
}
})
)
.pipe(gulp.dest(outDir));
});
.pipe(gulp.dest(workDir + "/supervisor"))
);
gulp.task("build-translation-write-metadata", function writeMetadata() {
return gulp
gulp.task("build-translation-flatten-supervisor", () =>
gulp
.src(workDir + "/supervisor/*.json")
.pipe(
transform((data) =>
// Polymer.AppLocalizeBehavior requires flattened json
flatten(data)
)
)
.pipe(gulp.dest(outDir))
);
gulp.task("build-translation-write-metadata", () =>
gulp
.src(
[
path.join(paths.translations_src, "translationMetadata.json"),
@@ -374,13 +371,14 @@ gulp.task("build-translation-write-metadata", function writeMetadata() {
)
.pipe(merge({}))
.pipe(
transform(function (data) {
transform((data) => {
const newData = {};
Object.entries(data).forEach(([key, value]) => {
// Filter out translations without native name.
if (value.nativeName) {
newData[key] = value;
} else {
// eslint-disable-next-line no-console
console.warn(
`Skipping language ${key}. Native name was not translated.`
);
@@ -396,19 +394,26 @@ gulp.task("build-translation-write-metadata", function writeMetadata() {
}))
)
.pipe(rename("translationMetadata.json"))
.pipe(gulp.dest(workDir));
});
.pipe(gulp.dest(workDir))
);
gulp.task(
"create-translations",
gulp.series(
env.isProdBuild() ? (done) => done() : "create-test-translation",
"build-master-translation",
"build-merged-translations",
gulp.parallel(...splitTasks),
"build-flattened-translations"
)
);
gulp.task(
"build-translations",
gulp.series(
"clean-translations",
"ensure-translations-build-dir",
env.isProdBuild() ? (done) => done() : "create-test-translation",
"build-master-translation",
"build-merged-translations",
gulp.parallel(...splitTasks),
"build-flattened-translations",
"create-translations",
"build-translation-fingerprints",
"build-translation-write-metadata"
)
+46 -31
View File
@@ -1,4 +1,6 @@
/* eslint-disable @typescript-eslint/no-var-requires */
// Tasks to run webpack.
const fs = require("fs");
const gulp = require("gulp");
const webpack = require("webpack");
const WebpackDevServer = require("webpack-dev-server");
@@ -18,6 +20,13 @@ const bothBuilds = (createConfigFunc, params) => [
createConfigFunc({ ...params, latestBuild: false }),
];
const isWsl =
fs.existsSync("/proc/version") &&
fs
.readFileSync("/proc/version", "utf-8")
.toLocaleLowerCase()
.includes("microsoft");
/**
* @param {{
* compiler: import("webpack").Compiler,
@@ -26,26 +35,29 @@ const bothBuilds = (createConfigFunc, params) => [
* listenHost?: string
* }}
*/
const runDevServer = ({
const runDevServer = async ({
compiler,
contentBase,
port,
listenHost = "localhost",
}) =>
new WebpackDevServer(compiler, {
open: true,
watchContentBase: true,
contentBase,
}).listen(port, listenHost, function (err) {
if (err) {
throw err;
}
// Server listening
log(
"[webpack-dev-server]",
`Project is running at http://localhost:${port}`
);
});
}) => {
const server = new WebpackDevServer(
{
open: true,
host: listenHost,
port,
static: {
directory: contentBase,
watch: true,
},
},
compiler
);
await server.start();
// Server listening
log("[webpack-dev-server]", `Project is running at http://localhost:${port}`);
};
const doneHandler = (done) => (err, stats) => {
if (err) {
@@ -57,6 +69,7 @@ const doneHandler = (done) => (err, stats) => {
}
if (stats.hasErrors() || stats.hasWarnings()) {
// eslint-disable-next-line no-console
console.log(stats.toString("minimal"));
}
@@ -78,13 +91,14 @@ const prodBuild = (conf) =>
gulp.task("webpack-watch-app", () => {
// This command will run forever because we don't close compiler
webpack(createAppConfig({ isProdBuild: false, latestBuild: true })).watch(
{ ignored: /build-translations/ },
doneHandler()
);
webpack(
process.env.ES5
? bothBuilds(createAppConfig, { isProdBuild: false })
: createAppConfig({ isProdBuild: false, latestBuild: true })
).watch({ poll: isWsl }, doneHandler());
gulp.watch(
path.join(paths.translations_src, "en.json"),
gulp.series("build-translations", "copy-translations-app")
gulp.series("create-translations", "copy-translations-app")
);
});
@@ -96,13 +110,13 @@ gulp.task("webpack-prod-app", () =>
)
);
gulp.task("webpack-dev-server-demo", () => {
gulp.task("webpack-dev-server-demo", () =>
runDevServer({
compiler: webpack(bothBuilds(createDemoConfig, { isProdBuild: false })),
contentBase: paths.demo_output_root,
port: 8090,
});
});
})
);
gulp.task("webpack-prod-demo", () =>
prodBuild(
@@ -112,15 +126,15 @@ gulp.task("webpack-prod-demo", () =>
)
);
gulp.task("webpack-dev-server-cast", () => {
gulp.task("webpack-dev-server-cast", () =>
runDevServer({
compiler: webpack(bothBuilds(createCastConfig, { isProdBuild: false })),
contentBase: paths.cast_output_root,
port: 8080,
// Accessible from the network, because that's how Cast hits it.
listenHost: "0.0.0.0",
});
});
})
);
gulp.task("webpack-prod-cast", () =>
prodBuild(
@@ -137,7 +151,7 @@ gulp.task("webpack-watch-hassio", () => {
isProdBuild: false,
latestBuild: true,
})
).watch({ ignored: /build-translations/ }, doneHandler());
).watch({ ignored: /build/, poll: isWsl }, doneHandler());
gulp.watch(
path.join(paths.translations_src, "en.json"),
@@ -153,14 +167,15 @@ gulp.task("webpack-prod-hassio", () =>
)
);
gulp.task("webpack-dev-server-gallery", () => {
gulp.task("webpack-dev-server-gallery", () =>
runDevServer({
// We don't use the es5 build, but the dev server will fuck up the publicPath if we don't
compiler: webpack(bothBuilds(createGalleryConfig, { isProdBuild: false })),
contentBase: paths.gallery_output_root,
port: 8100,
});
});
listenHost: "0.0.0.0",
})
);
gulp.task("webpack-prod-gallery", () =>
prodBuild(
+2
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require("path");
module.exports = {
@@ -25,6 +26,7 @@ module.exports = {
cast_output_es5: path.resolve(__dirname, "../cast/dist/frontend_es5"),
gallery_dir: path.resolve(__dirname, "../gallery"),
gallery_build: path.resolve(__dirname, "../gallery/build"),
gallery_output_root: path.resolve(__dirname, "../gallery/dist"),
gallery_output_latest: path.resolve(
__dirname,
+77 -94
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require("path");
const commonjs = require("@rollup/plugin-commonjs");
@@ -32,88 +33,77 @@ const createRollupConfig = ({
publicPath,
dontHash,
isWDS,
}) => {
return {
/**
* @type { import("rollup").InputOptions }
*/
inputOptions: {
input: entry,
// Some entry points contain no JavaScript. This setting silences a warning about that.
// https://rollupjs.org/guide/en/#preserveentrysignatures
preserveEntrySignatures: false,
plugins: [
ignore({
files: bundle.emptyPackages({ latestBuild }),
}) => ({
/**
* @type { import("rollup").InputOptions }
*/
inputOptions: {
input: entry,
// Some entry points contain no JavaScript. This setting silences a warning about that.
// https://rollupjs.org/guide/en/#preserveentrysignatures
preserveEntrySignatures: false,
plugins: [
ignore({
files: bundle.emptyPackages({ latestBuild }),
}),
resolve({
extensions,
preferBuiltins: false,
browser: true,
rootDir: paths.polymer_dir,
}),
commonjs(),
json(),
babel({
...bundle.babelOptions({ latestBuild }),
extensions,
babelHelpers: isWDS ? "inline" : "bundled",
}),
string({
// Import certain extensions as strings
include: [path.join(paths.polymer_dir, "node_modules/**/*.css")],
}),
replace(bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })),
!isWDS &&
manifest({
publicPath,
}),
resolve({
extensions,
preferBuiltins: false,
browser: true,
rootDir: paths.polymer_dir,
!isWDS && worker(),
!isWDS && dontHashPlugin({ dontHash }),
!isWDS && isProdBuild && terser(bundle.terserOptions(latestBuild)),
!isWDS &&
isStatsBuild &&
visualizer({
// https://github.com/btd/rollup-plugin-visualizer#options
open: true,
sourcemap: true,
}),
commonjs({
namedExports: {
"js-yaml": ["safeDump", "safeLoad"],
},
}),
json(),
babel({
...bundle.babelOptions({ latestBuild }),
extensions,
exclude: bundle.babelExclude(),
babelHelpers: isWDS ? "inline" : "bundled",
}),
string({
// Import certain extensions as strings
include: [path.join(paths.polymer_dir, "node_modules/**/*.css")],
}),
replace(
bundle.definedVars({ isProdBuild, latestBuild, defineOverlay })
),
!isWDS &&
manifest({
publicPath,
}),
!isWDS && worker(),
!isWDS && dontHashPlugin({ dontHash }),
!isWDS && isProdBuild && terser(bundle.terserOptions(latestBuild)),
!isWDS &&
isStatsBuild &&
visualizer({
// https://github.com/btd/rollup-plugin-visualizer#options
open: true,
sourcemap: true,
}),
].filter(Boolean),
},
/**
* @type { import("rollup").OutputOptions }
*/
outputOptions: {
// https://rollupjs.org/guide/en/#outputdir
dir: outputPath,
// https://rollupjs.org/guide/en/#outputformat
format: latestBuild ? "es" : "systemjs",
// https://rollupjs.org/guide/en/#outputexternallivebindings
externalLiveBindings: false,
// https://rollupjs.org/guide/en/#outputentryfilenames
// https://rollupjs.org/guide/en/#outputchunkfilenames
// https://rollupjs.org/guide/en/#outputassetfilenames
entryFileNames:
isProdBuild && !isStatsBuild ? "[name]-[hash].js" : "[name].js",
chunkFileNames:
isProdBuild && !isStatsBuild ? "c.[hash].js" : "[name].js",
assetFileNames:
isProdBuild && !isStatsBuild ? "a.[hash].js" : "[name].js",
// https://rollupjs.org/guide/en/#outputsourcemap
sourcemap: isProdBuild ? true : "inline",
},
};
};
].filter(Boolean),
},
/**
* @type { import("rollup").OutputOptions }
*/
outputOptions: {
// https://rollupjs.org/guide/en/#outputdir
dir: outputPath,
// https://rollupjs.org/guide/en/#outputformat
format: latestBuild ? "es" : "systemjs",
// https://rollupjs.org/guide/en/#outputexternallivebindings
externalLiveBindings: false,
// https://rollupjs.org/guide/en/#outputentryfilenames
// https://rollupjs.org/guide/en/#outputchunkfilenames
// https://rollupjs.org/guide/en/#outputassetfilenames
entryFileNames:
isProdBuild && !isStatsBuild ? "[name]-[hash].js" : "[name].js",
chunkFileNames: isProdBuild && !isStatsBuild ? "c.[hash].js" : "[name].js",
assetFileNames: isProdBuild && !isStatsBuild ? "a.[hash].js" : "[name].js",
// https://rollupjs.org/guide/en/#outputsourcemap
sourcemap: isProdBuild ? true : "inline",
},
});
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild, isWDS }) => {
return createRollupConfig(
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild, isWDS }) =>
createRollupConfig(
bundle.config.app({
isProdBuild,
latestBuild,
@@ -121,31 +111,24 @@ const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild, isWDS }) => {
isWDS,
})
);
};
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
return createRollupConfig(
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) =>
createRollupConfig(
bundle.config.demo({
isProdBuild,
latestBuild,
isStatsBuild,
})
);
};
const createCastConfig = ({ isProdBuild, latestBuild }) => {
return createRollupConfig(bundle.config.cast({ isProdBuild, latestBuild }));
};
const createCastConfig = ({ isProdBuild, latestBuild }) =>
createRollupConfig(bundle.config.cast({ isProdBuild, latestBuild }));
const createHassioConfig = ({ isProdBuild, latestBuild }) => {
return createRollupConfig(bundle.config.hassio({ isProdBuild, latestBuild }));
};
const createHassioConfig = ({ isProdBuild, latestBuild }) =>
createRollupConfig(bundle.config.hassio({ isProdBuild, latestBuild }));
const createGalleryConfig = ({ isProdBuild, latestBuild }) => {
return createRollupConfig(
bundle.config.gallery({ isProdBuild, latestBuild })
);
};
const createGalleryConfig = ({ isProdBuild, latestBuild }) =>
createRollupConfig(bundle.config.gallery({ isProdBuild, latestBuild }));
module.exports = {
createAppConfig,
+1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require("path");
const fs = require("fs");
+43 -36
View File
@@ -1,10 +1,12 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const webpack = require("webpack");
const path = require("path");
const TerserPlugin = require("terser-webpack-plugin");
const { WebpackManifestPlugin } = require("webpack-manifest-plugin");
const paths = require("./paths.js");
const bundle = require("./bundle");
const bundle = require("./bundle.js");
const log = require("fancy-log");
const WebpackBar = require("webpackbar");
class LogStartCompilePlugin {
ignoredFirst = false;
@@ -28,6 +30,7 @@ const createWebpackConfig = ({
isProdBuild,
latestBuild,
isStatsBuild,
isHassioBuild,
dontHash,
}) => {
if (!dontHash) {
@@ -46,15 +49,18 @@ const createWebpackConfig = ({
rules: [
{
test: /\.m?js$|\.ts$/,
exclude: bundle.babelExclude(),
use: {
loader: "babel-loader",
options: bundle.babelOptions({ latestBuild }),
options: {
...bundle.babelOptions({ latestBuild }),
cacheDirectory: !isProdBuild,
cacheCompression: false,
},
},
},
{
test: /\.css$/,
use: "raw-loader",
type: "asset/source",
},
],
},
@@ -66,8 +72,11 @@ const createWebpackConfig = ({
terserOptions: bundle.terserOptions(latestBuild),
}),
],
moduleIds: isProdBuild && !isStatsBuild ? "deterministic" : "named",
chunkIds: isProdBuild && !isStatsBuild ? "deterministic" : "named",
},
plugins: [
new WebpackBar({ fancy: !isProdBuild }),
new WebpackManifestPlugin({
// Only include the JS of entrypoints
filter: (file) => file.isInitial && !file.name.endsWith(".map"),
@@ -94,6 +103,7 @@ const createWebpackConfig = ({
? path.resolve(context, resource)
: require.resolve(resource);
} catch (err) {
// eslint-disable-next-line no-console
console.error(
"Error in Home Assistant ignore plugin",
resource,
@@ -107,70 +117,67 @@ const createWebpackConfig = ({
);
},
}),
new webpack.NormalModuleReplacementPlugin(
new RegExp(bundle.emptyPackages({ latestBuild }).join("|")),
path.resolve(paths.polymer_dir, "src/util/empty.js")
),
// We need to change the import of the polyfill for EventTarget, so we replace the polyfill file with our customized one
new webpack.NormalModuleReplacementPlugin(
new RegExp(
require.resolve(
"lit-virtualizer/lib/uni-virtualizer/lib/polyfillLoaders/EventTarget.js"
)
bundle.emptyPackages({ latestBuild, isHassioBuild }).join("|")
),
path.resolve(paths.polymer_dir, "src/resources/EventTarget-ponyfill.js")
path.resolve(paths.polymer_dir, "src/util/empty.js")
),
!isProdBuild && new LogStartCompilePlugin(),
].filter(Boolean),
resolve: {
extensions: [".ts", ".js", ".json"],
alias: {
"lit/decorators$": "lit/decorators.js",
"lit/directive$": "lit/directive.js",
"lit/directives/until$": "lit/directives/until.js",
"lit/directives/class-map$": "lit/directives/class-map.js",
"lit/directives/style-map$": "lit/directives/style-map.js",
"lit/directives/if-defined$": "lit/directives/if-defined.js",
"lit/directives/guard$": "lit/directives/guard.js",
"lit/directives/cache$": "lit/directives/cache.js",
"lit/directives/repeat$": "lit/directives/repeat.js",
"lit/polyfill-support$": "lit/polyfill-support.js",
},
},
output: {
filename: ({ chunk }) => {
if (!isProdBuild || dontHash.has(chunk.name)) {
if (!isProdBuild || isStatsBuild || dontHash.has(chunk.name)) {
return `${chunk.name}.js`;
}
return `${chunk.name}.${chunk.hash.substr(0, 8)}.js`;
},
chunkFilename:
isProdBuild && !isStatsBuild
? "chunk.[chunkhash].js"
: "[name].chunk.js",
isProdBuild && !isStatsBuild ? "[chunkhash:8].js" : "[id].chunk.js",
path: outputPath,
publicPath,
// To silence warning in worker plugin
globalObject: "self",
},
experiments: {
topLevelAwait: true,
},
};
};
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
return createWebpackConfig(
const createAppConfig = ({ isProdBuild, latestBuild, isStatsBuild }) =>
createWebpackConfig(
bundle.config.app({ isProdBuild, latestBuild, isStatsBuild })
);
};
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) => {
return createWebpackConfig(
const createDemoConfig = ({ isProdBuild, latestBuild, isStatsBuild }) =>
createWebpackConfig(
bundle.config.demo({ isProdBuild, latestBuild, isStatsBuild })
);
};
const createCastConfig = ({ isProdBuild, latestBuild }) => {
return createWebpackConfig(bundle.config.cast({ isProdBuild, latestBuild }));
};
const createCastConfig = ({ isProdBuild, latestBuild }) =>
createWebpackConfig(bundle.config.cast({ isProdBuild, latestBuild }));
const createHassioConfig = ({ isProdBuild, latestBuild }) => {
return createWebpackConfig(
bundle.config.hassio({ isProdBuild, latestBuild })
);
};
const createHassioConfig = ({ isProdBuild, latestBuild }) =>
createWebpackConfig(bundle.config.hassio({ isProdBuild, latestBuild }));
const createGalleryConfig = ({ isProdBuild, latestBuild }) => {
return createWebpackConfig(
bundle.config.gallery({ isProdBuild, latestBuild })
);
};
const createGalleryConfig = ({ isProdBuild, latestBuild }) =>
createWebpackConfig(bundle.config.gallery({ isProdBuild, latestBuild }));
module.exports = {
createAppConfig,
+1 -1
View File
@@ -139,7 +139,7 @@
Your authentication credentials or Home Assistant url are never sent
to the Cloud. You can validate this behavior in
<a
href="https://github.com/home-assistant/home-assistant-polymer/tree/dev/cast"
href="https://github.com/home-assistant/frontend/tree/dev/cast"
target="_blank"
>the source code</a
>.
+46
View File
@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<script src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<style>
body {
--logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
--logo-repeat: no-repeat;
--playback-logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
--theme-hue: 200;
--progress-color: #03a9f4;
--splash-image: url('https://home-assistant.io/images/cast/splash.png');
--splash-size: cover;
--background-color: #41bdf5;
}
</style>
<script>
var _gaq=[['_setAccount','UA-57927901-10'],['_trackPageview']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
s.parentNode.insertBefore(g,s)}(document,'script'));
</script>
</head>
<body>
<%= renderTemplate('_js_base') %>
<cast-media-player></cast-media-player>
<script>
import("<%= latestMediaJS %>");
window.latestJS = true;
</script>
<script>
if (!window.latestJS) {
<% if (useRollup) { %>
_ls("/static/js/s.min.js").onload = function() {
System.import("<%= es5MediaJS %>");
};
<% } else { %>
_ls("<%= es5MediaJS %>");
<% } %>
}
</script>
</body>
</html>
+13 -21
View File
@@ -1,16 +1,10 @@
import "@material/mwc-button/mwc-button";
import { mdiCast, mdiCastConnected } from "@mdi/js";
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,
internalProperty,
TemplateResult,
} from "lit-element";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property, state } from "lit/decorators";
import { CastManager } from "../../../../src/cast/cast_manager";
import {
castSendShowLovelaceView,
@@ -24,6 +18,7 @@ import {
import { atLeastVersion } from "../../../../src/common/config/version";
import { toggleAttribute } from "../../../../src/common/dom/toggle_attribute";
import "../../../../src/components/ha-icon";
import "../../../../src/components/ha-svg-icon";
import {
getLegacyLovelaceCollection,
getLovelaceCollection,
@@ -32,7 +27,6 @@ import {
import "../../../../src/layouts/hass-loading-screen";
import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config";
import "./hc-layout";
import "@material/mwc-button/mwc-button";
@customElement("hc-cast")
class HcCast extends LitElement {
@@ -42,9 +36,9 @@ class HcCast extends LitElement {
@property() public castManager!: CastManager;
@internalProperty() private askWrite = false;
@state() private askWrite = false;
@internalProperty() private lovelaceConfig?: LovelaceConfig | null;
@state() private lovelaceConfig?: LovelaceConfig | null;
protected render(): TemplateResult {
if (this.lovelaceConfig === undefined) {
@@ -54,9 +48,7 @@ class HcCast extends LitElement {
const error =
this.castManager.castState === "NO_DEVICES_AVAILABLE"
? html`
<p>
There were no suitable Chromecast devices to cast to found.
</p>
<p>There were no suitable Chromecast devices to cast to found.</p>
`
: undefined;
@@ -83,7 +75,7 @@ class HcCast extends LitElement {
? html`
<p class="center-item">
<mwc-button raised @click=${this._handleLaunch}>
<ha-icon icon="hass:cast"></ha-icon>
<ha-svg-icon .path=${mdiCast}></ha-svg-icon>
Start Casting
</mwc-button>
</p>
@@ -121,7 +113,7 @@ class HcCast extends LitElement {
${this.castManager.status
? html`
<mwc-button @click=${this._handleLaunch}>
<ha-icon icon="hass:cast-connected"></ha-icon>
<ha-svg-icon .path=${mdiCastConnected}></ha-svg-icon>
Manage
</mwc-button>
`
@@ -201,12 +193,12 @@ class HcCast extends LitElement {
}
this.connection.close();
location.reload();
} catch (err) {
} catch (err: any) {
alert("Unable to log out!");
}
}
static get styles(): CSSResult {
static get styles(): CSSResultGroup {
return css`
.center-item {
display: flex;
@@ -243,7 +235,7 @@ class HcCast extends LitElement {
color: var(--secondary-text-color);
}
mwc-button ha-icon {
mwc-button ha-svg-icon {
margin-right: 8px;
height: 18px;
}
+22 -30
View File
@@ -1,4 +1,5 @@
import "@material/mwc-button";
import { mdiCastConnected, mdiCast } from "@mdi/js";
import "@polymer/paper-input/paper-input";
import {
Auth,
@@ -11,22 +12,15 @@ import {
getAuth,
getAuthOptions,
} from "home-assistant-js-websocket";
import {
css,
CSSResult,
customElement,
html,
LitElement,
TemplateResult,
internalProperty,
} from "lit-element";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, state } from "lit/decorators";
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/components/ha-icon";
import "../../../../src/components/ha-svg-icon";
import "../../../../src/layouts/hass-loading-screen";
import { registerServiceWorker } from "../../../../src/util/register-service-worker";
import "./hc-layout";
@@ -60,19 +54,19 @@ const INTRO = html`
@customElement("hc-connect")
export class HcConnect extends LitElement {
@internalProperty() private loading = false;
@state() private loading = false;
// If we had stored credentials but we cannot connect,
// show a screen asking retry or logout.
@internalProperty() private cannotConnect = false;
@state() private cannotConnect = false;
@internalProperty() private error?: string | TemplateResult;
@state() private error?: string | TemplateResult;
@internalProperty() private auth?: Auth;
@state() private auth?: Auth;
@internalProperty() private connection?: Connection;
@state() private connection?: Connection;
@internalProperty() private castManager?: CastManager | null;
@state() private castManager?: CastManager | null;
private openDemo = false;
@@ -86,9 +80,7 @@ export class HcConnect extends LitElement {
</div>
<div class="card-actions">
<a href="/">
<mwc-button>
Retry
</mwc-button>
<mwc-button> Retry </mwc-button>
</a>
<div class="spacer"></div>
<mwc-button @click=${this._handleLogout}>Log out</mwc-button>
@@ -136,11 +128,11 @@ export class HcConnect extends LitElement {
<div class="card-actions">
<mwc-button @click=${this._handleDemo}>
Show Demo
<ha-icon
.icon=${this.castManager.castState === "CONNECTED"
? "hass:cast-connected"
: "hass:cast"}
></ha-icon>
<ha-svg-icon
.path=${this.castManager.castState === "CONNECTED"
? mdiCastConnected
: mdiCast}
></ha-svg-icon>
</mwc-button>
<div class="spacer"></div>
<mwc-button @click=${this._handleConnect}>Authorize</mwc-button>
@@ -221,7 +213,7 @@ export class HcConnect extends LitElement {
let url: URL;
try {
url = new URL(value);
} catch (err) {
} catch (err: any) {
this.error = "Invalid URL";
return;
}
@@ -249,7 +241,7 @@ export class HcConnect extends LitElement {
try {
this.loading = true;
auth = await getAuth(options);
} catch (err) {
} catch (err: any) {
if (init === "saved-tokens" && err === ERR_CANNOT_CONNECT) {
this.cannotConnect = true;
return;
@@ -268,7 +260,7 @@ export class HcConnect extends LitElement {
try {
conn = await createConnection({ auth });
} catch (err) {
} catch (err: any) {
// In case of saved tokens, silently solve problems.
if (init === "saved-tokens") {
if (err === ERR_CANNOT_CONNECT) {
@@ -294,12 +286,12 @@ export class HcConnect extends LitElement {
try {
saveTokens(null);
location.reload();
} catch (err) {
} catch (err: any) {
alert("Unable to log out!");
}
}
static get styles(): CSSResult {
static get styles(): CSSResultGroup {
return css`
.card-content a {
color: var(--primary-color);
@@ -316,7 +308,7 @@ export class HcConnect extends LitElement {
color: darkred;
}
mwc-button ha-icon {
mwc-button ha-svg-icon {
margin-left: 8px;
}
+4 -11
View File
@@ -4,15 +4,8 @@ import {
getUser,
HassUser,
} from "home-assistant-js-websocket";
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property } from "lit/decorators";
import "../../../../src/components/ha-card";
@customElement("hc-layout")
@@ -69,7 +62,7 @@ class HcLayout extends LitElement {
}
}
static get styles(): CSSResult {
static get styles(): CSSResultGroup {
return css`
:host {
display: flex;
@@ -100,7 +93,7 @@ class HcLayout extends LitElement {
display: block;
margin: 0;
}
.hero {
border-radius: 4px 4px 0 0;
}
+22
View File
@@ -0,0 +1,22 @@
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
(loadRequestData) => {
const media = loadRequestData.media;
// Special handling if it came from Google Assistant
if (media.entity) {
media.contentId = media.entity;
media.streamType = cast.framework.messages.StreamType.LIVE;
media.contentType = "application/vnd.apple.mpegurl";
// @ts-ignore
media.hlsVideoSegmentFormat =
cast.framework.messages.HlsVideoSegmentFormat.FMP4;
}
return loadRequestData;
}
);
castContext.start();
+2 -2
View File
@@ -5,8 +5,8 @@ import {
import { castContext } from "../cast_context";
export const castDemoLovelace: () => LovelaceConfig = () => {
const touchSupported = castContext.getDeviceCapabilities()
.touch_input_supported;
const touchSupported =
castContext.getDeviceCapabilities().touch_input_supported;
return {
views: [
{
+35 -16
View File
@@ -8,6 +8,9 @@ import { ReceivedMessage } from "./types";
const lovelaceController = new HcMain();
document.body.append(lovelaceController);
lovelaceController.addEventListener("cast-view-changed", (ev) => {
playDummyMedia(ev.detail.title);
});
const mediaPlayer = document.createElement("cast-media-player");
mediaPlayer.style.display = "none";
@@ -28,6 +31,31 @@ const setTouchControlsVisibility = (visible: boolean) => {
}
};
let timeOut: number | undefined;
const playDummyMedia = (viewTitle?: string) => {
const loadRequestData = new cast.framework.messages.LoadRequestData();
loadRequestData.autoplay = true;
loadRequestData.media = new cast.framework.messages.MediaInformation();
loadRequestData.media.contentId =
"https://cast.home-assistant.io/images/google-nest-hub.png";
loadRequestData.media.contentType = "image/jpeg";
loadRequestData.media.streamType = cast.framework.messages.StreamType.NONE;
const metadata = new cast.framework.messages.GenericMediaMetadata();
metadata.title = viewTitle;
loadRequestData.media.metadata = metadata;
loadRequestData.requestId = 0;
playerManager.load(loadRequestData);
if (timeOut) {
clearTimeout(timeOut);
timeOut = undefined;
}
if (castContext.getDeviceCapabilities().touch_input_supported) {
timeOut = window.setTimeout(() => playDummyMedia(viewTitle), 540000); // repeat every 9 minutes to keep it active (gets deactivated after 10 minutes)
}
};
const showLovelaceController = () => {
mediaPlayer.style.display = "none";
lovelaceController.style.display = "initial";
@@ -51,6 +79,7 @@ const showMediaPlayer = () => {
--progress-color: #03a9f4;
--splash-image: url('https://home-assistant.io/images/cast/splash.png');
--splash-size: cover;
--background-color: #41bdf5;
}
`;
document.head.appendChild(style);
@@ -63,22 +92,6 @@ options.customNamespaces = {
[CAST_NS]: cast.framework.system.MessageType.JSON,
};
// The docs say we need to set options.touchScreenOptimizeApp = true
// https://developers.google.com/cast/docs/caf_receiver/customize_ui#accessing_ui_controls
// This doesn't work.
// @ts-ignore
options.touchScreenOptimizedApp = true;
// The class reference say we can set a uiConfig in options to set it
// https://developers.google.com/cast/docs/reference/caf_receiver/cast.framework.CastReceiverOptions#uiConfig
// This doesn't work either.
// @ts-ignore
options.uiConfig = new cast.framework.ui.UiConfig();
// @ts-ignore
options.uiConfig.touchScreenOptimizedApp = true;
castContext.setInactivityTimeout(86400); // 1 day
castContext.addCustomMessageListener(
CAST_NS,
// @ts-ignore
@@ -103,6 +116,12 @@ const playerManager = castContext.getPlayerManager();
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
(loadRequestData) => {
if (
loadRequestData.media.contentId ===
"https://cast.home-assistant.io/images/google-nest-hub.png"
) {
return loadRequestData;
}
// We received a play media command, hide Lovelace and show media player
showMediaPlayer();
const media = loadRequestData.media;
+5 -10
View File
@@ -1,10 +1,5 @@
import {
customElement,
html,
internalProperty,
property,
TemplateResult,
} from "lit-element";
import { html, TemplateResult } from "lit";
import { customElement, property, state } from "lit/decorators";
import { mockHistory } from "../../../../demo/src/stubs/history";
import { LovelaceConfig } from "../../../../src/data/lovelace";
import {
@@ -21,7 +16,7 @@ import "./hc-lovelace";
class HcDemo extends HassElement {
@property({ attribute: false }) public lovelacePath!: string;
@internalProperty() private _lovelaceConfig?: LovelaceConfig;
@state() private _lovelaceConfig?: LovelaceConfig;
protected render(): TemplateResult {
if (!this._lovelaceConfig) {
@@ -38,10 +33,10 @@ class HcDemo extends HassElement {
protected firstUpdated(changedProps) {
super.firstUpdated(changedProps);
this._initialize();
this._initializeHass();
}
private async _initialize() {
private async _initializeHass() {
const initial: Partial<MockHomeAssistant> = {
// Override updateHass so that the correct hass lifecycle methods are called
updateHass: (hassUpdate: Partial<HomeAssistant>) =>
+3 -10
View File
@@ -1,12 +1,5 @@
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property } from "lit/decorators";
import { HomeAssistant } from "../../../../src/types";
@customElement("hc-launch-screen")
@@ -29,7 +22,7 @@ class HcLaunchScreen extends LitElement {
`;
}
static get styles(): CSSResult {
static get styles(): CSSResultGroup {
return css`
:host {
display: block;
+34 -13
View File
@@ -1,18 +1,15 @@
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property } from "lit/decorators";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import { LovelaceConfig } from "../../../../src/data/lovelace";
import { Lovelace } from "../../../../src/panels/lovelace/types";
import "../../../../src/panels/lovelace/views/hui-view";
import { HomeAssistant } from "../../../../src/types";
import "./hc-launch-screen";
(window as any).loadCardHelpers = () =>
import("../../../../src/panels/lovelace/custom-card-helpers");
@customElement("hc-lovelace")
class HcLovelace extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -21,7 +18,7 @@ class HcLovelace extends LitElement {
@property() public viewPath?: string | number;
public urlPath?: string | null;
@property() public urlPath: string | null = null;
protected render(): TemplateResult {
const index = this._viewIndex;
@@ -35,11 +32,12 @@ class HcLovelace extends LitElement {
}
const lovelace: Lovelace = {
config: this.lovelaceConfig,
rawConfig: this.lovelaceConfig,
editMode: false,
urlPath: this.urlPath!,
urlPath: this.urlPath,
enableFullEditMode: () => undefined,
mode: "storage",
language: "en",
locale: this.hass.locale,
saveConfig: async () => undefined,
deleteConfig: async () => undefined,
setEditMode: () => undefined,
@@ -60,6 +58,21 @@ class HcLovelace extends LitElement {
const index = this._viewIndex;
if (index !== undefined) {
const dashboardTitle = this.lovelaceConfig.title || this.urlPath;
const viewTitle =
this.lovelaceConfig.views[index].title ||
this.lovelaceConfig.views[index].path;
fireEvent(this, "cast-view-changed", {
title:
dashboardTitle || viewTitle
? `${dashboardTitle || ""}${
dashboardTitle && viewTitle ? ": " : ""
}${viewTitle || ""}`
: undefined,
});
const configBackground =
this.lovelaceConfig.views[index].background ||
this.lovelaceConfig.background;
@@ -90,10 +103,11 @@ class HcLovelace extends LitElement {
return undefined;
}
static get styles(): CSSResult {
static get styles(): CSSResultGroup {
return css`
:host {
min-height: 100vh;
height: 0;
display: flex;
flex-direction: column;
box-sizing: border-box;
@@ -106,8 +120,15 @@ class HcLovelace extends LitElement {
}
}
export interface CastViewChanged {
title: string | undefined;
}
declare global {
interface HTMLElementTagNameMap {
"hc-lovelace": HcLovelace;
}
interface HASSDomEvents {
"cast-view-changed": CastViewChanged;
}
}
+79 -31
View File
@@ -3,12 +3,8 @@ import {
getAuth,
UnsubscribeFunc,
} from "home-assistant-js-websocket";
import {
customElement,
html,
internalProperty,
TemplateResult,
} from "lit-element";
import { html, TemplateResult } from "lit";
import { customElement, state } from "lit/decorators";
import { CAST_NS } from "../../../../src/cast/const";
import {
ConnectMessage,
@@ -17,7 +13,11 @@ import {
ShowDemoMessage,
ShowLovelaceViewMessage,
} from "../../../../src/cast/receiver_messages";
import { ReceiverStatusMessage } from "../../../../src/cast/sender_messages";
import {
ReceiverErrorCode,
ReceiverErrorMessage,
ReceiverStatusMessage,
} from "../../../../src/cast/sender_messages";
import { atLeastVersion } from "../../../../src/common/config/version";
import { isNavigationClick } from "../../../../src/common/dom/is-navigation-click";
import {
@@ -36,18 +36,18 @@ let resourcesLoaded = false;
@customElement("hc-main")
export class HcMain extends HassElement {
@internalProperty() private _showDemo = false;
@state() private _showDemo = false;
@internalProperty() private _lovelaceConfig?: LovelaceConfig;
@state() private _lovelaceConfig?: LovelaceConfig;
@internalProperty() private _lovelacePath: string | number | null = null;
@state() private _lovelacePath: string | number | null = null;
@internalProperty() private _error?: string;
@state() private _error?: string;
@state() private _urlPath?: string | null;
private _unsubLovelace?: UnsubscribeFunc;
private _urlPath?: string | null;
public processIncomingMessage(msg: HassMessage) {
if (msg.type === "connect") {
this._handleConnectMessage(msg);
@@ -72,8 +72,10 @@ export class HcMain extends HassElement {
!this._lovelaceConfig ||
this._lovelacePath === null ||
// Guard against part of HA not being loaded yet.
(this.hass &&
(!this.hass.states || !this.hass.config || !this.hass.services))
!this.hass ||
!this.hass.states ||
!this.hass.config ||
!this.hass.services
) {
return html`
<hc-launch-screen
@@ -111,6 +113,7 @@ export class HcMain extends HassElement {
this._sendStatus();
}
});
this.addEventListener("dialog-closed", this._dialogClosed);
}
private _sendStatus(senderId?: string) {
@@ -122,7 +125,7 @@ export class HcMain extends HassElement {
if (this.hass) {
status.hassUrl = this.hass.auth.data.hassUrl;
status.lovelacePath = this._lovelacePath!;
status.lovelacePath = this._lovelacePath;
status.urlPath = this._urlPath;
}
@@ -135,6 +138,30 @@ export class HcMain extends HassElement {
}
}
private _sendError(
error_code: number,
error_message: string,
senderId?: string
) {
const error: ReceiverErrorMessage = {
type: "receiver_error",
error_code,
error_message,
};
if (senderId) {
this.sendMessage(senderId, error);
} else {
for (const sender of castContext.getSenders()) {
this.sendMessage(sender.id, error);
}
}
}
private _dialogClosed = () => {
document.body.setAttribute("style", "overflow-y: auto !important");
};
private async _handleGetStatusMessage(msg: GetStatusMessage) {
this._sendStatus(msg.senderId!);
}
@@ -152,15 +179,19 @@ export class HcMain extends HassElement {
expires_in: 0,
}),
});
} catch (err) {
this._error = this._getErrorMessage(err);
} catch (err: any) {
const errorMessage = this._getErrorMessage(err);
this._error = errorMessage;
this._sendError(err, errorMessage);
return;
}
let connection;
try {
connection = await createConnection({ auth });
} catch (err) {
this._error = this._getErrorMessage(err);
} catch (err: any) {
const errorMessage = this._getErrorMessage(err);
this._error = errorMessage;
this._sendError(err, errorMessage);
return;
}
if (this.hass) {
@@ -172,24 +203,29 @@ export class HcMain extends HassElement {
}
private async _handleShowLovelaceMessage(msg: ShowLovelaceViewMessage) {
this._showDemo = false;
// We should not get this command before we are connected.
// Means a client got out of sync. Let's send status to them.
if (!this.hass) {
this._sendStatus(msg.senderId!);
this._error = "Cannot show Lovelace because we're not connected.";
this._sendError(ReceiverErrorCode.NOT_CONNECTED, this._error);
return;
}
this._error = undefined;
if (msg.urlPath === "lovelace") {
msg.urlPath = null;
}
this._lovelacePath = msg.viewPath;
if (!this._unsubLovelace || this._urlPath !== msg.urlPath) {
this._urlPath = msg.urlPath;
this._lovelaceConfig = undefined;
if (this._unsubLovelace) {
this._unsubLovelace();
}
const llColl = atLeastVersion(this.hass.connection.haVersion, 0, 107)
? getLovelaceCollection(this.hass!.connection, msg.urlPath)
: getLegacyLovelaceCollection(this.hass!.connection);
? getLovelaceCollection(this.hass.connection, msg.urlPath)
: getLegacyLovelaceCollection(this.hass.connection);
// We first do a single refresh because we need to check if there is LL
// configuration.
try {
@@ -197,9 +233,17 @@ export class HcMain extends HassElement {
this._unsubLovelace = llColl.subscribe((lovelaceConfig) =>
this._handleNewLovelaceConfig(lovelaceConfig)
);
} catch (err) {
// eslint-disable-next-line
console.log("Error fetching Lovelace configuration", err, msg);
} catch (err: any) {
if (
atLeastVersion(this.hass.connection.haVersion, 0, 107) &&
err.code !== "config_not_found"
) {
// eslint-disable-next-line
console.log("Error fetching Lovelace configuration", err, msg);
this._error = `Error fetching Lovelace configuration: ${err.message}`;
this._sendError(ReceiverErrorCode.FETCH_CONFIG_FAILED, this._error);
return;
}
// Generate a Lovelace config.
this._unsubLovelace = () => undefined;
await this._generateLovelaceConfig();
@@ -214,23 +258,27 @@ export class HcMain extends HassElement {
loadLovelaceResources(resources, this.hass!.auth.data.hassUrl);
}
}
this._showDemo = false;
this._lovelacePath = msg.viewPath;
this._sendStatus();
}
private async _generateLovelaceConfig() {
const { generateLovelaceConfigFromHass } = await import(
"../../../../src/panels/lovelace/common/generate-lovelace-config"
const { generateLovelaceDashboardStrategy } = await import(
"../../../../src/panels/lovelace/strategies/get-strategy"
);
this._handleNewLovelaceConfig(
await generateLovelaceConfigFromHass(this.hass!)
await generateLovelaceDashboardStrategy(
{
hass: this.hass!,
narrow: false,
},
"original-states"
)
);
}
private _handleNewLovelaceConfig(lovelaceConfig: LovelaceConfig) {
castContext.setApplicationState(lovelaceConfig.title!);
castContext.setApplicationState(lovelaceConfig.title || "");
this._lovelaceConfig = lovelaceConfig;
}
+21 -13
View File
@@ -246,11 +246,15 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
"light.living_room_lights": {
entity_id: "light.living_room_lights",
state: "off",
state: "on",
attributes: {
min_mireds: 111,
max_mireds: 400,
brightness: 175,
color_temp: 300,
supported_color_modes: ["brightness", "color_temp"],
friendly_name: "Living Room Lights",
color_mode: "color_temp",
supported_features: 55,
},
},
@@ -263,13 +267,27 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
},
"light.kitchen_lights": {
entity_id: "light.kitchen_lights",
state: "on",
attributes: {
min_mireds: 111,
max_mireds: 400,
brightness: 200,
rgb_color: [255, 175, 96],
supported_color_modes: ["brightness", "color_temp", "rgb"],
color_mode: "rgb",
friendly_name: "Kitchen Lights",
supported_features: 55,
},
},
"light.lifx5": {
entity_id: "light.lifx5",
state: "off",
attributes: {
friendly_name: "Kitchen Lights",
supported_color_modes: ["brightness"],
friendly_name: "Garage Lights",
supported_features: 1,
},
},
"sensor.plexspy": {
entity_id: "sensor.plexspy",
state: "0",
@@ -482,16 +500,6 @@ export const demoEntitiesArsaboo: DemoConfig["entities"] = (localize) =>
icon: "hademo:history",
},
},
"light.lifx5": {
entity_id: "light.lifx5",
state: "on",
attributes: {
min_mireds: 111,
max_mireds: 400,
friendly_name: "Garage Lights",
supported_features: 55,
},
},
"sensor.alok_to_home": {
entity_id: "sensor.alok_to_home",
state: "41",
+9 -8
View File
@@ -29,6 +29,11 @@ export const demoLovelaceArsaboo: DemoConfig["lovelace"] = (localize) => ({
},
],
},
{
title: "Energy distribution today",
type: "energy-distribution",
link_dashboard: true,
},
{
type: "thermostat",
entity: "climate.upstairs",
@@ -113,8 +118,7 @@ export const demoLovelaceArsaboo: DemoConfig["lovelace"] = (localize) => ({
on: "/assets/arsaboo/icons/light_bulb_on.png",
},
state_filter: {
on:
"brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
on: "brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
off: "brightness(80%) saturate(0.8)",
},
style: {
@@ -196,8 +200,7 @@ export const demoLovelaceArsaboo: DemoConfig["lovelace"] = (localize) => ({
on: "/assets/arsaboo/icons/light_bulb_on.png",
},
state_filter: {
on:
"brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
on: "brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
off: "brightness(80%) saturate(0.8)",
},
style: {
@@ -277,8 +280,7 @@ export const demoLovelaceArsaboo: DemoConfig["lovelace"] = (localize) => ({
on: "/assets/arsaboo/icons/light_bulb_on.png",
},
state_filter: {
on:
"brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
on: "brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
off: "brightness(80%) saturate(0.8)",
},
style: {
@@ -315,8 +317,7 @@ export const demoLovelaceArsaboo: DemoConfig["lovelace"] = (localize) => ({
on: "/assets/arsaboo/icons/light_bulb_on.png",
},
state_filter: {
on:
"brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
on: "brightness(130%) saturate(1.5) drop-shadow(0px 0px 10px gold)",
off: "brightness(80%) saturate(0.8)",
},
style: {
+4 -3
View File
@@ -1,5 +1,6 @@
import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
import { Lovelace } from "../../../src/panels/lovelace/types";
import { energyEntities } from "../stubs/entities";
import { DemoConfig } from "./types";
export const demoConfigs: Array<() => Promise<DemoConfig>> = [
@@ -12,9 +13,8 @@ export const demoConfigs: Array<() => Promise<DemoConfig>> = [
// eslint-disable-next-line import/no-mutable-exports
export let selectedDemoConfigIndex = 0;
// eslint-disable-next-line import/no-mutable-exports
export let selectedDemoConfig: Promise<DemoConfig> = demoConfigs[
selectedDemoConfigIndex
]();
export let selectedDemoConfig: Promise<DemoConfig> =
demoConfigs[selectedDemoConfigIndex]();
export const setDemoConfig = async (
hass: MockHomeAssistant,
@@ -28,6 +28,7 @@ export const setDemoConfig = async (
selectedDemoConfig = confProm;
hass.addEntities(config.entities(hass.localize), true);
hass.addEntities(energyEntities());
lovelace.saveConfig(config.lovelace(hass.localize));
hass.mockTheme(config.theme());
};
+24 -4
View File
@@ -980,8 +980,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
icon: "mdi:account-off",
custom_ui_state_card: "state-card-custom-ui",
templates: {
icon:
"if (state === 'on') return 'mdi:account'; else if (state === 'off') return 'mdi:account-off';\n",
icon: "if (state === 'on') return 'mdi:account'; else if (state === 'off') return 'mdi:account-off';\n",
icon_color:
"if (state === 'on') return 'rgb(56, 150, 56)'; else if (state === 'off') return 'rgb(249, 251, 255)';\n",
},
@@ -1005,8 +1004,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
icon: "mdi:account-multiple-minus",
custom_ui_state_card: "state-card-custom-ui",
templates: {
icon:
"if (state === 'on') return 'mdi:account-group'; else if (state === 'off') return 'mdi:account-multiple-minus';\n",
icon: "if (state === 'on') return 'mdi:account-group'; else if (state === 'off') return 'mdi:account-multiple-minus';\n",
icon_color:
"if (state === 'on') return 'rgb(56, 150, 56)'; else if (state === 'off') return 'rgb(249, 251, 255)';\n",
},
@@ -1114,6 +1112,9 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
min_mireds: 153,
max_mireds: 500,
brightness: 63,
color_temp: 200,
supported_color_modes: ["brightness", "color_temp", "rgb"],
color_mode: "color_temp",
friendly_name: "Upstairs lights",
supported_features: 63,
custom_ui_state_card: "state-card-custom-ui",
@@ -1125,6 +1126,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
attributes: {
friendly_name: "Walk in closet lights",
supported_features: 41,
supported_color_modes: ["brightness", "color_temp"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:wall-sconce",
},
@@ -1136,6 +1138,8 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
brightness: 254,
friendly_name: "Outdoor lights",
supported_features: 41,
supported_color_modes: ["brightness"],
color_mode: "brightness",
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:wall-sconce",
},
@@ -1148,6 +1152,8 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
max_mireds: 500,
brightness: 128,
color_temp: 366,
supported_color_modes: ["brightness", "color_temp", "rgb"],
color_mode: "color_temp",
effect_list: ["colorloop"],
friendly_name: "Downstairs lights",
supported_features: 63,
@@ -1307,6 +1313,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
attributes: {
min_mireds: 153,
max_mireds: 500,
supported_color_modes: ["brightness", "color_temp"],
is_deconz_group: false,
friendly_name: "Bedside Lamp",
supported_features: 63,
@@ -1320,6 +1327,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
attributes: {
min_mireds: 153,
max_mireds: 500,
supported_color_modes: ["brightness", "color_temp"],
is_deconz_group: false,
friendly_name: "Floorlamp Reading Light",
supported_features: 43,
@@ -1335,6 +1343,8 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
max_mireds: 500,
brightness: 128,
color_temp: 366,
supported_color_modes: ["brightness", "color_temp", "rgb"],
color_mode: "color_temp",
effect_list: ["colorloop"],
is_deconz_group: false,
friendly_name: "Hallway window light",
@@ -1349,6 +1359,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
attributes: {
brightness: 77,
is_deconz_group: false,
supported_color_modes: ["brightness"],
friendly_name: "Isa Ceiling Light",
supported_features: 41,
custom_ui_state_card: "state-card-custom-ui",
@@ -1363,6 +1374,8 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
max_mireds: 500,
brightness: 150,
color_temp: 366,
supported_color_modes: ["brightness", "color_temp"],
color_mode: "color_temp",
effect_list: ["colorloop"],
is_deconz_group: false,
friendly_name: "Floorlamp",
@@ -1377,6 +1390,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
attributes: {
friendly_name: "Bedroom Ceiling Light",
supported_features: 41,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:ceiling-light",
},
@@ -1387,6 +1401,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
attributes: {
friendly_name: "Nightlight",
supported_features: 17,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:lamp",
},
@@ -1753,6 +1768,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
power_consumption: 2.2,
friendly_name: "Upstairs Hallway Light",
supported_features: 33,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:ceiling-light",
},
@@ -1768,6 +1784,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
power_consumption: 0,
friendly_name: "Dining Room Light",
supported_features: 33,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:ceiling-light",
},
@@ -1783,6 +1800,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
power_consumption: 0,
friendly_name: "Living room Spotlights",
supported_features: 33,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:track-light",
},
@@ -1799,6 +1817,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
power_consumption: 2.5,
friendly_name: "Passage Lights",
supported_features: 33,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:track-light",
},
@@ -1843,6 +1862,7 @@ export const demoEntitiesTeachingbirds: DemoConfig["entities"] = () =>
power_consumption: 37.4,
friendly_name: "Kitchen Lights",
supported_features: 33,
supported_color_modes: ["brightness"],
custom_ui_state_card: "state-card-custom-ui",
icon: "mdi:track-light",
},
+29 -43
View File
@@ -440,57 +440,43 @@ export const demoLovelaceTeachingbirds: DemoConfig["lovelace"] = () => ({
type: "horizontal-stack",
},
{
type: "grid",
columns: 2,
cards: [
{
cards: [
{
graph: "line",
type: "sensor",
entity: "sensor.temperature_bedroom",
},
{
graph: "line",
type: "sensor",
name: "S's room",
entity: "sensor.temperature_stefan",
},
],
type: "horizontal-stack",
graph: "line",
type: "sensor",
entity: "sensor.temperature_bedroom",
},
{
cards: [
{
graph: "line",
type: "sensor",
entity: "sensor.temperature_passage",
},
{
graph: "line",
type: "sensor",
name: "Bathroom",
entity: "sensor.temperature_downstairs_bathroom",
},
],
type: "horizontal-stack",
graph: "line",
type: "sensor",
name: "S's room",
entity: "sensor.temperature_stefan",
},
{
cards: [
{
graph: "line",
type: "sensor",
entity: "sensor.temperature_storage",
},
{
graph: "line",
type: "sensor",
name: "Refrigerator",
entity: "sensor.refrigerator",
},
],
type: "horizontal-stack",
graph: "line",
type: "sensor",
entity: "sensor.temperature_passage",
},
{
graph: "line",
type: "sensor",
name: "Bathroom",
entity: "sensor.temperature_downstairs_bathroom",
},
{
graph: "line",
type: "sensor",
entity: "sensor.temperature_storage",
},
{
graph: "line",
type: "sensor",
name: "Refrigerator",
entity: "sensor.refrigerator",
},
],
type: "vertical-stack",
},
{
entities: [
+1 -1
View File
@@ -1,5 +1,5 @@
/* eslint-disable */
import { LitElement } from "lit-element";
import { LitElement } from "lit";
import "./card-tools";
class CardModder extends LitElement {
+1 -1
View File
@@ -1,5 +1,5 @@
/* eslint-disable */
import { html, LitElement } from "lit-element";
import { html, LitElement } from "lit";
if (!window.cardTools) {
const version = 0.2;
+7 -13
View File
@@ -1,12 +1,6 @@
import {
css,
CSSResult,
customElement,
html,
internalProperty,
LitElement,
TemplateResult,
} from "lit-element";
import { mdiTelevision } from "@mdi/js";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, state } from "lit/decorators";
import { CastManager } from "../../../src/cast/cast_manager";
import { castSendShowDemo } from "../../../src/cast/receiver_messages";
import "../../../src/components/ha-icon";
@@ -20,7 +14,7 @@ import { HomeAssistant } from "../../../src/types";
class CastDemoRow extends LitElement implements LovelaceRow {
public hass!: HomeAssistant;
@internalProperty() private _castManager?: CastManager | null;
@state() private _castManager?: CastManager | null;
public setConfig(_config: CastConfig): void {
// No config possible.
@@ -34,7 +28,7 @@ class CastDemoRow extends LitElement implements LovelaceRow {
return html``;
}
return html`
<ha-icon icon="hademo:television"></ha-icon>
<ha-svg-icon .path=${mdiTelevision}></ha-svg-icon>
<div class="flex">
<div class="name">Show Chromecast interface</div>
<google-cast-launcher></google-cast-launcher>
@@ -73,13 +67,13 @@ class CastDemoRow extends LitElement implements LovelaceRow {
this.style.display = this._castManager ? "" : "none";
}
static get styles(): CSSResult {
static get styles(): CSSResultGroup {
return css`
:host {
display: flex;
align-items: center;
}
ha-icon {
ha-svg-icon {
padding: 8px;
color: var(--paper-item-icon-color);
}
+8 -20
View File
@@ -1,14 +1,7 @@
import "@material/mwc-button";
import {
css,
CSSResult,
html,
internalProperty,
LitElement,
property,
TemplateResult,
} from "lit-element";
import { until } from "lit-html/directives/until";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { property, state } from "lit/decorators";
import { until } from "lit/directives/until";
import "../../../src/components/ha-card";
import "../../../src/components/ha-circular-progress";
import { LovelaceCardConfig } from "../../../src/data/lovelace";
@@ -26,7 +19,7 @@ export class HADemoCard extends LitElement implements LovelaceCard {
@property({ attribute: false }) public hass!: MockHomeAssistant;
@internalProperty() private _switching?: boolean;
@state() private _switching = false;
private _hidden = localStorage.hide_demo_card;
@@ -34,12 +27,7 @@ export class HADemoCard extends LitElement implements LovelaceCard {
return this._hidden ? 0 : 2;
}
public setConfig(
// @ts-ignore
// eslint-disable-next-line @typescript-eslint/no-unused-vars
config: LovelaceCardConfig
// eslint-disable-next-line @typescript-eslint/no-empty-function
) {}
public setConfig(_config: LovelaceCardConfig) {}
protected render(): TemplateResult {
if (this._hidden) {
@@ -56,7 +44,7 @@ export class HADemoCard extends LitElement implements LovelaceCard {
(conf) => html`
${conf.name}
<small>
<a target="_blank" href="${conf.authorUrl}">
<a target="_blank" href=${conf.authorUrl}>
${this.hass.localize(
"ui.panel.page-demo.cards.demo.demo_by",
"name",
@@ -106,14 +94,14 @@ export class HADemoCard extends LitElement implements LovelaceCard {
this._switching = true;
try {
await setDemoConfig(this.hass, this.lovelace!, index);
} catch (err) {
} catch (err: any) {
alert("Failed to switch config :-(");
} finally {
this._switching = false;
}
}
static get styles(): CSSResult[] {
static get styles(): CSSResultGroup {
return [
css`
a {
-7
View File
@@ -1,11 +1,4 @@
import "@polymer/polymer/lib/elements/dom-if";
import "@polymer/polymer/lib/elements/dom-repeat";
import "../../src/resources/ha-style";
import "../../src/resources/roboto";
import "../../src/resources/safari-14-attachshadow-patch";
import "./ha-demo";
/* polyfill for paper-dropdown */
setTimeout(() => {
import("web-animations-js/web-animations-next-lite.min");
}, 1000);
+10 -3
View File
@@ -20,11 +20,14 @@ import { mockShoppingList } from "./stubs/shopping_list";
import { mockSystemLog } from "./stubs/system_log";
import { mockTemplate } from "./stubs/template";
import { mockTranslations } from "./stubs/translations";
import { mockEnergy } from "./stubs/energy";
import { mockConfig } from "./stubs/config";
import { energyEntities } from "./stubs/entities";
class HaDemo extends HomeAssistantAppEl {
protected async _initialize() {
protected async _initializeHass() {
const initial: Partial<MockHomeAssistant> = {
panelUrl: (this as any).panelUrl,
panelUrl: (this as any)._panelUrl,
// Override updateHass so that the correct hass lifecycle methods are called
updateHass: (hassUpdate: Partial<HomeAssistant>) =>
this._updateHass(hassUpdate),
@@ -47,8 +50,12 @@ class HaDemo extends HomeAssistantAppEl {
mockEvents(hass);
mockMediaPlayer(hass);
mockFrontend(hass);
mockEnergy(hass);
mockConfig(hass);
mockPersistentNotification(hass);
hass.addEntities(energyEntities());
// Once config is loaded AND localize, set entities and apply theme.
Promise.all([selectedDemoConfig, localizePromise]).then(
([conf, localize]) => {
@@ -70,7 +77,7 @@ class HaDemo extends HomeAssistantAppEl {
}
e.preventDefault();
navigate(this, href);
navigate(href);
},
{ capture: true }
);
File diff suppressed because one or more lines are too long
+7
View File
@@ -0,0 +1,7 @@
import { AreaRegistryEntry } from "../../../src/data/area_registry";
import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockAreaRegistry = (
hass: MockHomeAssistant,
data: AreaRegistryEntry[] = []
) => hass.mockWS("config/area_registry/list", () => data);
+41
View File
@@ -0,0 +1,41 @@
import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockConfig = (hass: MockHomeAssistant) => {
hass.mockAPI("config/config_entries/entry", () => [
{
entry_id: "co2signal",
domain: "co2signal",
title: "CO2 Signal",
source: "user",
state: "loaded",
supports_options: false,
supports_unload: true,
pref_disable_new_entities: false,
pref_disable_polling: false,
disabled_by: null,
reason: null,
},
]);
hass.mockWS("config/entity_registry/list", () => [
{
config_entry_id: "co2signal",
device_id: "co2signal",
area_id: null,
disabled_by: null,
entity_id: "sensor.co2_intensity",
name: null,
icon: null,
platform: "co2signal",
},
{
config_entry_id: "co2signal",
device_id: "co2signal",
area_id: null,
disabled_by: null,
entity_id: "sensor.grid_fossil_fuel_percentage",
name: null,
icon: null,
platform: "co2signal",
},
]);
};
+7
View File
@@ -0,0 +1,7 @@
import { DeviceRegistryEntry } from "../../../src/data/device_registry";
import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockDeviceRegistry = (
hass: MockHomeAssistant,
data: DeviceRegistryEntry[] = []
) => hass.mockWS("config/device_registry/list", () => data);
+137
View File
@@ -0,0 +1,137 @@
import { format, startOfToday, startOfTomorrow } from "date-fns";
import { EnergySolarForecasts } from "../../../src/data/energy";
import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockEnergy = (hass: MockHomeAssistant) => {
hass.mockWS("energy/get_prefs", () => ({
energy_sources: [
{
type: "grid",
flow_from: [
{
stat_energy_from: "sensor.energy_consumption_tarif_1",
stat_cost: "sensor.energy_consumption_tarif_1_cost",
entity_energy_from: "sensor.energy_consumption_tarif_1",
entity_energy_price: null,
number_energy_price: null,
},
{
stat_energy_from: "sensor.energy_consumption_tarif_2",
stat_cost: "sensor.energy_consumption_tarif_2_cost",
entity_energy_from: "sensor.energy_consumption_tarif_2",
entity_energy_price: null,
number_energy_price: null,
},
],
flow_to: [
{
stat_energy_to: "sensor.energy_production_tarif_1",
stat_compensation: "sensor.energy_production_tarif_1_compensation",
entity_energy_to: "sensor.energy_production_tarif_1",
entity_energy_price: null,
number_energy_price: null,
},
{
stat_energy_to: "sensor.energy_production_tarif_2",
stat_compensation: "sensor.energy_production_tarif_2_compensation",
entity_energy_to: "sensor.energy_production_tarif_2",
entity_energy_price: null,
number_energy_price: null,
},
],
cost_adjustment_day: 0,
},
{
type: "solar",
stat_energy_from: "sensor.solar_production",
config_entry_solar_forecast: ["solar_forecast"],
},
/* {
type: "battery",
stat_energy_from: "sensor.battery_output",
stat_energy_to: "sensor.battery_input",
}, */
{
type: "gas",
stat_energy_from: "sensor.energy_gas",
stat_cost: "sensor.energy_gas_cost",
entity_energy_from: "sensor.energy_gas",
entity_energy_price: null,
number_energy_price: null,
},
],
device_consumption: [
{
stat_consumption: "sensor.energy_car",
},
{
stat_consumption: "sensor.energy_ac",
},
{
stat_consumption: "sensor.energy_washing_machine",
},
{
stat_consumption: "sensor.energy_dryer",
},
{
stat_consumption: "sensor.energy_heat_pump",
},
{
stat_consumption: "sensor.energy_boiler",
},
],
}));
hass.mockWS("energy/info", () => ({ cost_sensors: [] }));
hass.mockWS("energy/fossil_energy_consumption", ({ period }) => ({
start: period === "month" ? 250 : period === "day" ? 10 : 2,
}));
const todayString = format(startOfToday(), "yyyy-MM-dd");
const tomorrowString = format(startOfTomorrow(), "yyyy-MM-dd");
hass.mockWS(
"energy/solar_forecast",
(): EnergySolarForecasts => ({
solar_forecast: {
wh_hours: {
[`${todayString}T06:00:00`]: 0,
[`${todayString}T06:23:00`]: 6,
[`${todayString}T06:45:00`]: 39,
[`${todayString}T07:00:00`]: 28,
[`${todayString}T08:00:00`]: 208,
[`${todayString}T09:00:00`]: 352,
[`${todayString}T10:00:00`]: 544,
[`${todayString}T11:00:00`]: 748,
[`${todayString}T12:00:00`]: 1259,
[`${todayString}T13:00:00`]: 1361,
[`${todayString}T14:00:00`]: 1373,
[`${todayString}T15:00:00`]: 1370,
[`${todayString}T16:00:00`]: 1186,
[`${todayString}T17:00:00`]: 937,
[`${todayString}T18:00:00`]: 652,
[`${todayString}T19:00:00`]: 370,
[`${todayString}T20:00:00`]: 155,
[`${todayString}T21:48:00`]: 24,
[`${todayString}T22:36:00`]: 0,
[`${tomorrowString}T06:01:00`]: 0,
[`${tomorrowString}T06:23:00`]: 9,
[`${tomorrowString}T06:45:00`]: 47,
[`${tomorrowString}T07:00:00`]: 48,
[`${tomorrowString}T08:00:00`]: 473,
[`${tomorrowString}T09:00:00`]: 827,
[`${tomorrowString}T10:00:00`]: 1153,
[`${tomorrowString}T11:00:00`]: 1413,
[`${tomorrowString}T12:00:00`]: 1590,
[`${tomorrowString}T13:00:00`]: 1652,
[`${tomorrowString}T14:00:00`]: 1612,
[`${tomorrowString}T15:00:00`]: 1438,
[`${tomorrowString}T16:00:00`]: 1149,
[`${tomorrowString}T17:00:00`]: 830,
[`${tomorrowString}T18:00:00`]: 542,
[`${tomorrowString}T19:00:00`]: 311,
[`${tomorrowString}T20:00:00`]: 140,
[`${tomorrowString}T21:47:00`]: 22,
[`${tomorrowString}T22:34:00`]: 0,
},
},
})
);
};
+178
View File
@@ -0,0 +1,178 @@
import { convertEntities } from "../../../src/fake_data/entity";
export const energyEntities = () =>
convertEntities({
"sensor.grid_fossil_fuel_percentage": {
entity_id: "sensor.grid_fossil_fuel_percentage",
state: "88.6",
attributes: {
unit_of_measurement: "%",
},
},
"sensor.solar_production": {
entity_id: "sensor.solar_production",
state: "88.6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Solar",
unit_of_measurement: "kWh",
},
},
"sensor.battery_input": {
entity_id: "sensor.battery_input",
state: "4",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Battery Input",
unit_of_measurement: "kWh",
},
},
"sensor.battery_output": {
entity_id: "sensor.battery_output",
state: "3",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Battery Output",
unit_of_measurement: "kWh",
},
},
"sensor.energy_consumption_tarif_1": {
entity_id: "sensor.energy_consumption_tarif_1 ",
state: "88.6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Grid consumption low tariff",
unit_of_measurement: "kWh",
},
},
"sensor.energy_consumption_tarif_2": {
entity_id: "sensor.energy_consumption_tarif_2",
state: "88.6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Grid consumption high tariff",
unit_of_measurement: "kWh",
},
},
"sensor.energy_production_tarif_1": {
entity_id: "sensor.energy_production_tarif_1",
state: "88.6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Returned to grid low tariff",
unit_of_measurement: "kWh",
},
},
"sensor.energy_production_tarif_2": {
entity_id: "sensor.energy_production_tarif_2",
state: "88.6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Returned to grid high tariff",
unit_of_measurement: "kWh",
},
},
"sensor.energy_consumption_tarif_1_cost": {
entity_id: "sensor.energy_consumption_tarif_1_cost",
state: "2",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
unit_of_measurement: "EUR",
},
},
"sensor.energy_consumption_tarif_2_cost": {
entity_id: "sensor.energy_consumption_tarif_2_cost",
state: "2",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
unit_of_measurement: "EUR",
},
},
"sensor.energy_production_tarif_1_compensation": {
entity_id: "sensor.energy_production_tarif_1_compensation",
state: "2",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
unit_of_measurement: "EUR",
},
},
"sensor.energy_production_tarif_2_compensation": {
entity_id: "sensor.energy_production_tarif_2_compensation",
state: "2",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
unit_of_measurement: "EUR",
},
},
"sensor.energy_gas_cost": {
entity_id: "sensor.energy_gas_cost",
state: "2",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
unit_of_measurement: "EUR",
},
},
"sensor.energy_gas": {
entity_id: "sensor.energy_gas",
state: "4",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Gas",
unit_of_measurement: "m³",
},
},
"sensor.energy_car": {
entity_id: "sensor.energy_car",
state: "4",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Electric car",
unit_of_measurement: "kWh",
},
},
"sensor.energy_ac": {
entity_id: "sensor.energy_ac",
state: "3",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Air conditioning",
unit_of_measurement: "kWh",
},
},
"sensor.energy_washing_machine": {
entity_id: "sensor.energy_washing_machine",
state: "6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Washing machine",
unit_of_measurement: "kWh",
},
},
"sensor.energy_dryer": {
entity_id: "sensor.energy_dryer",
state: "5.5",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Dryer",
unit_of_measurement: "kWh",
},
},
"sensor.energy_heat_pump": {
entity_id: "sensor.energy_heat_pump",
state: "6",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Heat pump",
unit_of_measurement: "kWh",
},
},
"sensor.energy_boiler": {
entity_id: "sensor.energy_boiler",
state: "7",
attributes: {
last_reset: "1970-01-01T00:00:00:00+00",
friendly_name: "Boiler",
unit_of_measurement: "kWh",
},
},
});
+7
View File
@@ -0,0 +1,7 @@
import { EntityRegistryEntry } from "../../../src/data/entity_registry";
import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockEntityRegistry = (
hass: MockHomeAssistant,
data: EntityRegistryEntry[] = []
) => hass.mockWS("config/entity_registry/list", () => data);
+59
View File
@@ -0,0 +1,59 @@
import { HassioSupervisorInfo } from "../../../src/data/hassio/supervisor";
import type { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockHassioSupervisor = (hass: MockHomeAssistant) => {
hass.config.components.push("hassio");
hass.mockWS("supervisor/api", (msg) => {
if (msg.endpoint === "/supervisor/info") {
const data: HassioSupervisorInfo = {
version: "2021.10.dev0805",
version_latest: "2021.10.dev0806",
update_available: true,
channel: "dev",
arch: "aarch64",
supported: true,
healthy: true,
ip_address: "172.30.32.2",
wait_boot: 5,
timezone: "America/Los_Angeles",
logging: "info",
debug: false,
debug_block: false,
diagnostics: true,
addons: [
{
name: "Visual Studio Code",
slug: "a0d7b954_vscode",
description:
"Fully featured VSCode experience, to edit your HA config in the browser, including auto-completion!",
state: "started",
version: "3.6.2",
version_latest: "3.6.2",
update_available: false,
repository: "a0d7b954",
icon: true,
logo: true,
},
{
name: "Z-Wave JS",
slug: "core_zwave_js",
description:
"Control a ZWave network with Home Assistant Z-Wave JS",
state: "started",
version: "0.1.45",
version_latest: "0.1.45",
update_available: false,
repository: "core",
icon: true,
logo: true,
},
] as any,
addons_repositories: [
"https://github.com/hassio-addons/repository",
] as any,
};
return data;
}
return Promise.reject(`${msg.method} ${msg.endpoint} is not implemented`);
});
};
+373 -9
View File
@@ -1,4 +1,12 @@
import {
addDays,
addHours,
addMonths,
differenceInHours,
endOfDay,
} from "date-fns";
import { HassEntity } from "home-assistant-js-websocket";
import { StatisticValue } from "../../../src/data/history";
import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
interface HistoryQueryParams {
@@ -64,17 +72,335 @@ const generateHistory = (state, deltas) => {
const incrementalUnits = ["clients", "queries", "ads"];
const generateMeanStatistics = (
id: string,
start: Date,
end: Date,
period: "5minute" | "hour" | "day" | "month" = "hour",
initValue: number,
maxDiff: number
) => {
const statistics: StatisticValue[] = [];
let currentDate = new Date(start);
currentDate.setMinutes(0, 0, 0);
let lastVal = initValue;
const now = new Date();
while (end > currentDate && currentDate < now) {
const delta = Math.random() * maxDiff;
const mean = lastVal + delta;
statistics.push({
statistic_id: id,
start: currentDate.toISOString(),
end: currentDate.toISOString(),
mean,
min: mean - Math.random() * maxDiff,
max: mean + Math.random() * maxDiff,
last_reset: "1970-01-01T00:00:00+00:00",
state: mean,
sum: null,
});
lastVal = mean;
currentDate =
period === "day"
? addDays(currentDate, 1)
: period === "month"
? addMonths(currentDate, 1)
: addHours(currentDate, 1);
}
return statistics;
};
const generateSumStatistics = (
id: string,
start: Date,
end: Date,
period: "5minute" | "hour" | "day" | "month" = "hour",
initValue: number,
maxDiff: number
) => {
const statistics: StatisticValue[] = [];
let currentDate = new Date(start);
currentDate.setMinutes(0, 0, 0);
let sum = initValue;
const now = new Date();
while (end > currentDate && currentDate < now) {
const add = Math.random() * maxDiff;
sum += add;
statistics.push({
statistic_id: id,
start: currentDate.toISOString(),
end: currentDate.toISOString(),
mean: null,
min: null,
max: null,
last_reset: "1970-01-01T00:00:00+00:00",
state: initValue + sum,
sum,
});
currentDate =
period === "day"
? addDays(currentDate, 1)
: period === "month"
? addMonths(currentDate, 1)
: addHours(currentDate, 1);
}
return statistics;
};
const generateCurvedStatistics = (
id: string,
start: Date,
end: Date,
_period: "5minute" | "hour" | "day" | "month" = "hour",
initValue: number,
maxDiff: number,
metered: boolean
) => {
const statistics: StatisticValue[] = [];
let currentDate = new Date(start);
currentDate.setMinutes(0, 0, 0);
let sum = initValue;
const hours = differenceInHours(end, start) - 1;
let i = 0;
let half = false;
const now = new Date();
while (end > currentDate && currentDate < now) {
const add = Math.random() * maxDiff;
sum += i * add;
statistics.push({
statistic_id: id,
start: currentDate.toISOString(),
end: currentDate.toISOString(),
mean: null,
min: null,
max: null,
last_reset: "1970-01-01T00:00:00+00:00",
state: initValue + sum,
sum: metered ? sum : null,
});
currentDate = addHours(currentDate, 1);
if (!half && i > hours / 2) {
half = true;
}
i += half ? -1 : 1;
}
return statistics;
};
const statisticsFunctions: Record<
string,
(
id: string,
start: Date,
end: Date,
period: "5minute" | "hour" | "day" | "month"
) => StatisticValue[]
> = {
"sensor.energy_consumption_tarif_1": (
id: string,
start: Date,
end: Date,
period = "hour"
) => {
if (period !== "hour") {
return generateSumStatistics(
id,
start,
end,
period,
0,
period === "day" ? 17 : 504
);
}
const morningEnd = new Date(start.getTime() + 10 * 60 * 60 * 1000);
const morningLow = generateSumStatistics(
id,
start,
morningEnd,
period,
0,
0.7
);
const eveningStart = new Date(start.getTime() + 20 * 60 * 60 * 1000);
const morningFinalVal = morningLow.length
? morningLow[morningLow.length - 1].sum!
: 0;
const empty = generateSumStatistics(
id,
morningEnd,
eveningStart,
period,
morningFinalVal,
0
);
const eveningLow = generateSumStatistics(
id,
eveningStart,
end,
period,
morningFinalVal,
0.7
);
return [...morningLow, ...empty, ...eveningLow];
},
"sensor.energy_consumption_tarif_2": (
id: string,
start: Date,
end: Date,
period = "hour"
) => {
if (period !== "hour") {
return generateSumStatistics(
id,
start,
end,
period,
0,
period === "day" ? 17 : 504
);
}
const morningEnd = new Date(start.getTime() + 9 * 60 * 60 * 1000);
const eveningStart = new Date(start.getTime() + 20 * 60 * 60 * 1000);
const highTarif = generateSumStatistics(
id,
morningEnd,
eveningStart,
period,
0,
0.3
);
const highTarifFinalVal = highTarif.length
? highTarif[highTarif.length - 1].sum!
: 0;
const morning = generateSumStatistics(id, start, morningEnd, period, 0, 0);
const evening = generateSumStatistics(
id,
eveningStart,
end,
period,
highTarifFinalVal,
0
);
return [...morning, ...highTarif, ...evening];
},
"sensor.energy_production_tarif_1": (id, start, end, period = "hour") =>
generateSumStatistics(id, start, end, period, 0, 0),
"sensor.energy_production_tarif_1_compensation": (
id,
start,
end,
period = "hour"
) => generateSumStatistics(id, start, end, period, 0, 0),
"sensor.energy_production_tarif_2": (id, start, end, period = "hour") => {
if (period !== "hour") {
return generateSumStatistics(
id,
start,
end,
period,
0,
period === "day" ? 17 : 504
);
}
const productionStart = new Date(start.getTime() + 9 * 60 * 60 * 1000);
const productionEnd = new Date(start.getTime() + 21 * 60 * 60 * 1000);
const dayEnd = new Date(endOfDay(productionEnd));
const production = generateCurvedStatistics(
id,
productionStart,
productionEnd,
period,
0,
0.15,
true
);
const productionFinalVal = production.length
? production[production.length - 1].sum!
: 0;
const morning = generateSumStatistics(
id,
start,
productionStart,
period,
0,
0
);
const evening = generateSumStatistics(
id,
productionEnd,
dayEnd,
period,
productionFinalVal,
0
);
const rest = generateSumStatistics(
id,
dayEnd,
end,
period,
productionFinalVal,
1
);
return [...morning, ...production, ...evening, ...rest];
},
"sensor.solar_production": (id, start, end, period = "hour") => {
if (period !== "hour") {
return generateSumStatistics(
id,
start,
end,
period,
0,
period === "day" ? 17 : 504
);
}
const productionStart = new Date(start.getTime() + 7 * 60 * 60 * 1000);
const productionEnd = new Date(start.getTime() + 23 * 60 * 60 * 1000);
const dayEnd = new Date(endOfDay(productionEnd));
const production = generateCurvedStatistics(
id,
productionStart,
productionEnd,
period,
0,
0.3,
true
);
const productionFinalVal = production.length
? production[production.length - 1].sum!
: 0;
const morning = generateSumStatistics(
id,
start,
productionStart,
period,
0,
0
);
const evening = generateSumStatistics(
id,
productionEnd,
dayEnd,
period,
productionFinalVal,
0
);
const rest = generateSumStatistics(
id,
dayEnd,
end,
period,
productionFinalVal,
2
);
return [...morning, ...production, ...evening, ...rest];
},
};
export const mockHistory = (mockHass: MockHomeAssistant) => {
mockHass.mockAPI(
new RegExp("history/period/.+"),
(
hass,
// @ts-ignore
method,
path,
// @ts-ignore
parameters
) => {
(hass, _method, path, _parameters) => {
const params = parseQuery<HistoryQueryParams>(path.split("?")[1]);
const entities = params.filter_entity_id.split(",");
@@ -95,7 +421,7 @@ export const mockHistory = (mockHass: MockHomeAssistant) => {
const numberState = Number(state.state);
if (isNaN(numberState)) {
// eslint-disable-next-line
// eslint-disable-next-line no-console
console.log(
"Ignoring state with unparsable state but with a unit",
entityId,
@@ -140,4 +466,42 @@ export const mockHistory = (mockHass: MockHomeAssistant) => {
return results;
}
);
mockHass.mockWS("history/list_statistic_ids", () => []);
mockHass.mockWS(
"history/statistics_during_period",
({ statistic_ids, start_time, end_time, period }, hass) => {
const start = new Date(start_time);
const end = end_time ? new Date(end_time) : new Date();
const statistics: Record<string, StatisticValue[]> = {};
statistic_ids.forEach((id: string) => {
if (id in statisticsFunctions) {
statistics[id] = statisticsFunctions[id](id, start, end, period);
} else {
const entityState = hass.states[id];
const state = entityState ? Number(entityState.state) : 1;
statistics[id] =
entityState && "last_reset" in entityState.attributes
? generateSumStatistics(
id,
start,
end,
period,
state,
state * (state > 80 ? 0.01 : 0.05)
)
: generateMeanStatistics(
id,
start,
end,
period,
state,
state * (state > 80 ? 0.05 : 0.1)
);
}
});
return statistics;
}
);
};
+5 -6
View File
@@ -10,10 +10,9 @@ export const mockLovelace = (
localizePromise: Promise<LocalizeFunc>
) => {
hass.mockWS("lovelace/config", () =>
Promise.all([
selectedDemoConfig,
localizePromise,
]).then(([config, localize]) => config.lovelace(localize))
Promise.all([selectedDemoConfig, localizePromise]).then(
([config, localize]) => config.lovelace(localize)
)
);
hass.mockWS("lovelace/config/save", () => Promise.resolve());
@@ -24,9 +23,9 @@ customElements.whenDefined("hui-view").then(() => {
// 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;
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;
+1 -1
View File
@@ -6,7 +6,7 @@ export const mockTemplate = (hass: MockHomeAssistant) => {
body: { message: "Template dev tool does not work in the demo." },
})
);
hass.mockWS("render_template", (msg, onChange) => {
hass.mockWS("render_template", (msg, _hass, onChange) => {
onChange!({
result: msg.template,
listeners: { all: false, domains: [], entities: [], time: false },
+1 -3
View File
@@ -3,8 +3,6 @@ import { MockHomeAssistant } from "../../../src/fake_data/provide_hass";
export const mockTranslations = (hass: MockHomeAssistant) => {
hass.mockWS(
"frontend/get_translations",
(/* msg: {language: string, category: string} */) => {
return { resources: {} };
}
(/* msg: {language: string, category: string} */) => ({ resources: {} })
);
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

+35
View File
@@ -0,0 +1,35 @@
#!/bin/bash
TARGET_LABEL="needs design preview"
if [[ "$NETLIFY" != "true" ]]; then
echo "This script can only be run on Netlify"
exit 1
fi
function createStatus() {
state="$1"
description="$2"
target_url="$3"
curl -X POST -H "Accept: application/vnd.github.v3+json" -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/home-assistant/frontend/statuses/$COMMIT_REF" \
-d '{"state": "'"${state}"'", "context": "Netlify/Design Preview Build", "description": "'"$description"'", "target_url": "'"$target_url"'"}'
}
if [[ "${PULL_REQUEST}" == "true" ]]; then
if [[ "$(curl -sSLf -H "Accept: application/vnd.github.v3+json" -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/home-assistant/frontend/pulls/${REVIEW_ID}" | jq '.labels[].name' -r)" =~ "$TARGET_LABEL" ]]; then
createStatus "pending" "Building design preview" "https://app.netlify.com/sites/home-assistant-gallery/deploys/$BUILD_ID"
gulp build-gallery
if [ $? -eq 0 ]; then
createStatus "success" "Build complete" "$DEPLOY_URL"
else
createStatus "error" "Build failed" "https://app.netlify.com/sites/home-assistant-gallery/deploys/$BUILD_ID"
fi
else
createStatus "success" "Build was not requested by PR label"
fi
elif [[ "$INCOMING_HOOK_BODY" == "NIGHTLY" ]]; then
gulp build-gallery
fi
+47
View File
@@ -0,0 +1,47 @@
module.exports = [
{
// This section has no header and so all page links are shown directly in the sidebar
category: "concepts",
pages: ["home"],
},
{
category: "lovelace",
// Label for in the sidebar
header: "Lovelace",
// Specify order of pages. Any pages in the category folder but not listed here will
// automatically be added after the pages listed here.
pages: ["introduction"],
},
{
category: "automation",
header: "Automation",
pages: [
"editor-trigger",
"editor-condition",
"editor-action",
"trace",
"trace-timeline",
],
},
{
category: "components",
header: "Components",
},
{
category: "more-info",
header: "More Info dialogs",
},
{
category: "misc",
header: "Miscelaneous",
},
{
category: "user-test",
header: "User Tests",
},
{
category: "design.home-assistant.io",
header: "Design Documentation",
},
];
@@ -0,0 +1,140 @@
import { Button } from "@material/mwc-button";
import { html, LitElement, css, TemplateResult } from "lit";
import { customElement, property } from "lit/decorators";
import { applyThemesOnElement } from "../../../src/common/dom/apply_themes_on_element";
import { fireEvent } from "../../../src/common/dom/fire_event";
import "../../../src/components/ha-card";
@customElement("demo-black-white-row")
class DemoBlackWhiteRow extends LitElement {
@property() title!: string;
@property() value!: any;
@property() disabled = false;
protected render(): TemplateResult {
return html`
<div class="row">
<div class="content light">
<ha-card .header=${this.title}>
<div class="card-content">
<slot name="light"></slot>
</div>
<div class="card-actions">
<mwc-button
.disabled=${this.disabled}
@click=${this.handleSubmit}
>
Submit
</mwc-button>
</div>
</ha-card>
</div>
<div class="content dark">
<ha-card .header=${this.title}>
<div class="card-content">
<slot name="dark"></slot>
</div>
<div class="card-actions">
<mwc-button
.disabled=${this.disabled}
@click=${this.handleSubmit}
>
Submit
</mwc-button>
</div>
</ha-card>
<pre>${JSON.stringify(this.value, undefined, 2)}</pre>
</div>
</div>
`;
}
firstUpdated(changedProps) {
super.firstUpdated(changedProps);
applyThemesOnElement(this.shadowRoot!.querySelector(".dark"), {
default_theme: "default",
default_dark_theme: "default",
themes: {},
darkMode: true,
theme: "default",
});
}
handleSubmit(ev) {
const content = (ev.target as Button).closest(".content")!;
fireEvent(this, "submitted" as any, {
slot: content.classList.contains("light") ? "light" : "dark",
});
}
static styles = css`
.row {
display: flex;
}
.content {
padding: 50px 0;
background-color: var(--primary-background-color);
}
.light {
flex: 1;
padding-left: 50px;
padding-right: 50px;
box-sizing: border-box;
}
.light ha-card {
margin-left: auto;
}
.dark {
display: flex;
flex: 1;
padding-left: 50px;
box-sizing: border-box;
flex-wrap: wrap;
}
ha-card {
width: 400px;
}
pre {
width: 300px;
margin: 0 16px 0;
overflow: auto;
color: var(--primary-text-color);
}
.card-actions {
display: flex;
flex-direction: row-reverse;
border-top: none;
}
@media only screen and (max-width: 1500px) {
.light {
flex: initial;
}
}
@media only screen and (max-width: 1000px) {
.light,
.dark {
padding: 16px;
}
.row,
.dark {
flex-direction: column;
}
ha-card {
margin: 0 auto;
width: 100%;
max-width: 400px;
}
pre {
margin: 16px auto;
}
}
`;
}
declare global {
interface HTMLElementTagNameMap {
"demo-black-white-row": DemoBlackWhiteRow;
}
}
-106
View File
@@ -1,106 +0,0 @@
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 {
static get template() {
return html`
<style>
.root {
display: flex;
}
h2 {
margin: 0 0 20px;
color: var(--primary-color);
}
#card {
max-width: 400px;
width: 100vw;
}
pre {
width: 400px;
margin: 0 16px;
overflow: auto;
color: var(--primary-text-color);
}
@media only screen and (max-width: 800px) {
.root {
flex-direction: column;
}
pre {
margin: 16px 0;
}
}
</style>
<h2>[[config.heading]]</h2>
<div class="root">
<div id="card"></div>
<template is="dom-if" if="[[showConfig]]">
<pre>[[_trim(config.config)]]</pre>
</template>
</div>
`;
}
static get properties() {
return {
hass: {
type: Object,
observer: "_hassChanged",
},
config: {
type: Object,
observer: "_configChanged",
},
showConfig: Boolean,
};
}
ready() {
super.ready();
}
_configChanged(config) {
const card = this.$.card;
while (card.lastChild) {
card.removeChild(card.lastChild);
}
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;
}
_trim(config) {
return config.trim();
}
}
customElements.define("demo-card", DemoCard);
+129
View File
@@ -0,0 +1,129 @@
import { load } from "js-yaml";
import { html, css, LitElement, PropertyValues } from "lit";
import { customElement, property, query, state } from "lit/decorators";
import { createCardElement } from "../../../src/panels/lovelace/create-element/create-card-element";
import { HomeAssistant } from "../../../src/types";
export interface DemoCardConfig {
heading: string;
config: string;
}
@customElement("demo-card")
class DemoCard extends LitElement {
@property() public hass!: HomeAssistant;
@property() public config!: DemoCardConfig;
@property() public showConfig = false;
@state() private _size?: number;
@query("#card") private _card!: HTMLElement;
render() {
return html`
<h2>
${this.config.heading}
${this._size !== undefined
? html`<small>(size ${this._size})</small>`
: ""}
</h2>
<div class="root">
<div id="card"></div>
${this.showConfig ? html`<pre>${this.config.config.trim()}</pre>` : ""}
</div>
`;
}
updated(changedProps: PropertyValues) {
super.updated(changedProps);
if (changedProps.has("config")) {
const card = this._card;
while (card.lastChild) {
card.removeChild(card.lastChild);
}
const el = this._createCardElement((load(this.config.config) as any)[0]);
card.appendChild(el);
this._getSize(el);
}
if (changedProps.has("hass")) {
const card = this._card.lastChild;
if (card) {
(card as any).hass = this.hass;
}
}
}
async _getSize(el) {
await customElements.whenDefined(el.localName);
if (!("getCardSize" in el)) {
this._size = undefined;
return;
}
this._size = await el.getCardSize();
}
_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);
}
static styles = css`
.root {
display: flex;
}
h2 {
margin: 0 0 20px;
color: var(--primary-color);
}
h2 small {
font-size: 0.5em;
color: var(--primary-text-color);
}
#card {
max-width: 400px;
width: 100vw;
}
pre {
width: 400px;
margin: 0 16px;
overflow: auto;
color: var(--primary-text-color);
}
@media only screen and (max-width: 800px) {
.root {
flex-direction: column;
}
pre {
margin: 16px 0;
}
}
`;
}
declare global {
interface HTMLElementTagNameMap {
"demo-card": DemoCard;
}
}
-83
View File
@@ -1,83 +0,0 @@
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 { applyThemesOnElement } from "../../../src/common/dom/apply_themes_on_element";
import "../../../src/components/ha-formfield";
import "../../../src/components/ha-switch";
import "./demo-card";
class DemoCards extends PolymerElement {
static get template() {
return html`
<style>
#container {
min-height: calc(100vh - 128px);
background: var(--primary-background-color);
}
.cards {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
demo-card {
margin: 16px 16px 32px;
}
app-toolbar {
background-color: var(--light-primary-color);
}
.filters {
margin-left: 60px;
}
ha-formfield {
margin-right: 16px;
}
</style>
<app-toolbar>
<div class="filters">
<ha-formfield label="Show config">
<ha-switch checked="[[_showConfig]]" on-change="_showConfigToggled">
</ha-switch>
</ha-formfield>
<ha-formfield label="Dark theme">
<ha-switch on-change="_darkThemeToggled"> </ha-switch>
</ha-formfield>
</div>
</app-toolbar>
<div id="container">
<div class="cards">
<template is="dom-repeat" items="[[configs]]">
<demo-card
config="[[item]]"
show-config="[[_showConfig]]"
hass="[[hass]]"
></demo-card>
</template>
</div>
</div>
`;
}
static get properties() {
return {
configs: Object,
hass: Object,
_showConfig: {
type: Boolean,
value: false,
},
};
}
_showConfigToggled(ev) {
this._showConfig = ev.target.checked;
}
_darkThemeToggled(ev) {
applyThemesOnElement(this.$.container, { themes: {} }, "default", {
dark: ev.target.checked,
});
}
}
customElements.define("demo-cards", DemoCards);
+88
View File
@@ -0,0 +1,88 @@
import "@polymer/app-layout/app-toolbar/app-toolbar";
import { html, css, LitElement } from "lit";
import { customElement, property, query, state } from "lit/decorators";
import { applyThemesOnElement } from "../../../src/common/dom/apply_themes_on_element";
import "../../../src/components/ha-formfield";
import "../../../src/components/ha-switch";
import { HomeAssistant } from "../../../src/types";
import "./demo-card";
import type { DemoCardConfig } from "./demo-card";
@customElement("demo-cards")
class DemoCards extends LitElement {
@property() public configs!: DemoCardConfig[];
@property() public hass!: HomeAssistant;
@state() private _showConfig = false;
@query("#container") private _container!: HTMLElement;
render() {
return html`
<app-toolbar>
<div class="filters">
<ha-formfield label="Show config">
<ha-switch
.checked=${this._showConfig}
@change=${this._showConfigToggled}
>
</ha-switch>
</ha-formfield>
<ha-formfield label="Dark theme">
<ha-switch @change=${this._darkThemeToggled}> </ha-switch>
</ha-formfield>
</div>
</app-toolbar>
<div id="container">
<div class="cards">
${this.configs.map(
(config) => html`
<demo-card
.config=${config}
.showConfig=${this._showConfig}
.hass=${this.hass}
></demo-card>
`
)}
</div>
</div>
`;
}
_showConfigToggled(ev) {
this._showConfig = ev.target.checked;
}
_darkThemeToggled(ev) {
applyThemesOnElement(this._container, { themes: {} } as any, "default", {
dark: ev.target.checked,
});
}
static styles = css`
.cards {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
demo-card {
margin: 16px 16px 32px;
}
app-toolbar {
background-color: var(--light-primary-color);
}
.filters {
margin-left: 60px;
}
ha-formfield {
margin-right: 16px;
}
`;
}
declare global {
interface HTMLElementTagNameMap {
"demo-cards": DemoCards;
}
}
@@ -0,0 +1,46 @@
import { html, css } from "lit";
import { customElement, property } from "lit/decorators";
import { until } from "lit/directives/until";
import { HaMarkdown } from "../../../src/components/ha-markdown";
import { PAGES } from "../../build/import-pages";
@customElement("page-description")
class PageDescription extends HaMarkdown {
@property() public page!: string;
render() {
if (!PAGES[this.page].description) {
return html``;
}
return html`
${until(
PAGES[this.page]
.description()
.then((content) => html`<div class="root">${content}</div>`),
""
)}
`;
}
static styles = [
HaMarkdown.styles,
css`
.root {
max-width: 800px;
margin: 0 auto;
}
.root > *:first-child {
margin-top: 0;
}
.root > *:last-child {
margin-bottom: 0;
}
`,
];
}
declare global {
interface HTMLElementTagNameMap {
"page-description": PageDescription;
}
}
+349
View File
@@ -0,0 +1,349 @@
import { DemoTrace } from "./types";
export const basicTrace: DemoTrace = {
trace: {
last_step: "action/2",
run_id: "0",
state: "stopped",
timestamp: {
start: "2021-03-25T04:36:51.223693+00:00",
finish: "2021-03-25T04:36:51.266132+00:00",
},
trigger: "state of input_boolean.toggle_1",
domain: "automation",
item_id: "1615419646544",
trace: {
"trigger/0": [
{
path: "trigger/0",
timestamp: "2021-03-25T04:36:51.223693+00:00",
},
],
"condition/0": [
{
path: "condition/0",
timestamp: "2021-03-25T04:36:51.228243+00:00",
changed_variables: {
trigger: {
platform: "state",
entity_id: "input_boolean.toggle_1",
from_state: {
entity_id: "input_boolean.toggle_1",
state: "on",
attributes: {
editable: true,
friendly_name: "Toggle 1",
},
last_changed: "2021-03-24T19:03:59.141440+00:00",
last_updated: "2021-03-24T19:03:59.141440+00:00",
context: {
id: "5d0918eb379214d07554bdab6a08bcff",
parent_id: null,
user_id: null,
},
},
to_state: {
entity_id: "input_boolean.toggle_1",
state: "off",
attributes: {
editable: true,
friendly_name: "Toggle 1",
},
last_changed: "2021-03-25T04:36:51.220696+00:00",
last_updated: "2021-03-25T04:36:51.220696+00:00",
context: {
id: "664d6d261450a9ecea6738e97269a149",
parent_id: null,
user_id: "d1b4e89da01445fa8bc98e39fac477ca",
},
},
for: null,
attribute: null,
description: "state of input_boolean.toggle_1",
},
},
result: {
result: true,
},
},
],
"action/0": [
{
path: "action/0",
timestamp: "2021-03-25T04:36:51.243018+00:00",
changed_variables: {
trigger: {
platform: "state",
entity_id: "input_boolean.toggle_1",
from_state: {
entity_id: "input_boolean.toggle_1",
state: "on",
attributes: {
editable: true,
friendly_name: "Toggle 1",
},
last_changed: "2021-03-24T19:03:59.141440+00:00",
last_updated: "2021-03-24T19:03:59.141440+00:00",
context: {
id: "5d0918eb379214d07554bdab6a08bcff",
parent_id: null,
user_id: null,
},
},
to_state: {
entity_id: "input_boolean.toggle_1",
state: "off",
attributes: {
editable: true,
friendly_name: "Toggle 1",
},
last_changed: "2021-03-25T04:36:51.220696+00:00",
last_updated: "2021-03-25T04:36:51.220696+00:00",
context: {
id: "664d6d261450a9ecea6738e97269a149",
parent_id: null,
user_id: "d1b4e89da01445fa8bc98e39fac477ca",
},
},
for: null,
attribute: null,
description: "state of input_boolean.toggle_1",
},
context: {
id: "6cfcae368e7b3686fad6c59e83ae76c9",
parent_id: "664d6d261450a9ecea6738e97269a149",
user_id: null,
},
},
result: {
params: {
domain: "input_boolean",
service: "toggle",
service_data: {},
target: {
entity_id: ["input_boolean.toggle_4"],
},
},
running_script: false,
limit: 10,
},
},
],
"action/1": [
{
path: "action/1",
timestamp: "2021-03-25T04:36:51.252406+00:00",
result: {
choice: 0,
},
},
],
"action/1/choose/0": [
{
path: "action/1/choose/0",
timestamp: "2021-03-25T04:36:51.254569+00:00",
result: {
result: true,
},
},
],
"action/1/choose/0/conditions/0": [
{
path: "action/1/choose/0/conditions/0",
timestamp: "2021-03-25T04:36:51.254697+00:00",
result: {
result: true,
},
},
],
"action/1/choose/0/sequence/0": [
{
path: "action/1/choose/0/sequence/0",
timestamp: "2021-03-25T04:36:51.257360+00:00",
result: {
params: {
domain: "input_boolean",
service: "toggle",
service_data: {},
target: {
entity_id: ["input_boolean.toggle_2"],
},
},
running_script: false,
limit: 10,
},
},
],
"action/1/choose/0/sequence/1": [
{
path: "action/1/choose/0/sequence/1",
timestamp: "2021-03-25T04:36:51.260658+00:00",
result: {
params: {
domain: "input_boolean",
service: "toggle",
service_data: {},
target: {
entity_id: ["input_boolean.toggle_3"],
},
},
running_script: false,
limit: 10,
},
},
],
"action/2": [
{
path: "action/2",
timestamp: "2021-03-25T04:36:51.264159+00:00",
result: {
params: {
domain: "input_boolean",
service: "toggle",
service_data: {},
target: {
entity_id: ["input_boolean.toggle_4"],
},
},
running_script: false,
limit: 10,
},
},
],
},
config: {
id: "1615419646544",
alias: "Ensure Party mode",
description: "",
trigger: [
{
platform: "state",
entity_id: "input_boolean.toggle_1",
},
],
condition: [
{
condition: "template",
alias: "Test if Paulus is home",
value_template: "{{ true }}",
},
],
action: [
{
service: "input_boolean.toggle",
target: {
entity_id: "input_boolean.toggle_4",
},
},
{
choose: [
{
alias: "If toggle 3 is on",
conditions: [
{
condition: "template",
value_template:
"{{ is_state('input_boolean.toggle_3', 'on') }}",
},
],
sequence: [
{
service: "input_boolean.toggle",
alias: "Toggle 2 while 3 is on",
target: {
entity_id: "input_boolean.toggle_2",
},
},
{
service: "input_boolean.toggle",
alias: "Toggle 3",
target: {
entity_id: "input_boolean.toggle_3",
},
},
],
},
],
default: [
{
service: "input_boolean.toggle",
alias: "Toggle 2",
target: {
entity_id: "input_boolean.toggle_2",
},
},
],
},
{
service: "input_boolean.toggle",
target: {
entity_id: "input_boolean.toggle_4",
},
},
],
mode: "single",
},
context: {
id: "6cfcae368e7b3686fad6c59e83ae76c9",
parent_id: "664d6d261450a9ecea6738e97269a149",
user_id: null,
},
script_execution: "finished",
},
logbookEntries: [
{
name: "Ensure Party mode",
message: "has been triggered by state of input_boolean.toggle_1",
source: "state of input_boolean.toggle_1",
entity_id: "automation.toggle_toggles",
context_id: "6cfcae368e7b3686fad6c59e83ae76c9",
when: "2021-03-25T04:36:51.240832+00:00",
domain: "automation",
},
{
when: "2021-03-25T04:36:51.249828+00:00",
name: "Toggle 4",
state: "on",
entity_id: "input_boolean.toggle_4",
context_entity_id: "automation.toggle_toggles",
context_entity_id_name: "Ensure Party mode",
context_event_type: "automation_triggered",
context_domain: "automation",
context_name: "Ensure Party mode",
},
{
when: "2021-03-25T04:36:51.258947+00:00",
name: "Toggle 2",
state: "on",
entity_id: "input_boolean.toggle_2",
context_entity_id: "automation.toggle_toggles",
context_entity_id_name: "Ensure Party mode",
context_event_type: "automation_triggered",
context_domain: "automation",
context_name: "Ensure Party mode",
},
{
when: "2021-03-25T04:36:51.261806+00:00",
name: "Toggle 3",
state: "off",
entity_id: "input_boolean.toggle_3",
context_entity_id: "automation.toggle_toggles",
context_entity_id_name: "Ensure Party mode",
context_event_type: "automation_triggered",
context_domain: "automation",
context_name: "Ensure Party mode",
},
{
when: "2021-03-25T04:36:51.265246+00:00",
name: "Toggle 4",
state: "off",
entity_id: "input_boolean.toggle_4",
context_entity_id: "automation.toggle_toggles",
context_entity_id_name: "Ensure Party mode",
context_event_type: "automation_triggered",
context_domain: "automation",
context_name: "Ensure Party mode",
},
],
};
@@ -0,0 +1,44 @@
import { LogbookEntry } from "../../../../src/data/logbook";
import { AutomationTraceExtended } from "../../../../src/data/trace";
import { DemoTrace } from "./types";
export const mockDemoTrace = (
tracePartial: Partial<AutomationTraceExtended>,
logbookEntries?: LogbookEntry[]
): DemoTrace => ({
trace: {
last_step: "",
run_id: "0",
state: "stopped",
timestamp: {
start: "2021-03-25T04:36:51.223693+00:00",
finish: "2021-03-25T04:36:51.266132+00:00",
},
trigger: "mocked trigger",
domain: "automation",
item_id: "1615419646544",
trace: {
"trigger/0": [
{
path: "trigger/0",
changed_variables: {
trigger: {
description: "mocked trigger",
},
},
timestamp: "2021-03-25T04:36:51.223693+00:00",
},
],
},
config: {
trigger: [],
action: [],
},
context: {
id: "abcd",
},
script_execution: "finished",
...tracePartial,
},
logbookEntries: logbookEntries || [],
});
@@ -0,0 +1,214 @@
import { DemoTrace } from "./types";
export const motionLightTrace: DemoTrace = {
trace: {
last_step: "action/3",
run_id: "1",
state: "stopped",
timestamp: {
start: "2021-03-14T06:07:01.768006+00:00",
finish: "2021-03-14T06:07:53.287525+00:00",
},
trigger: "state of binary_sensor.pauluss_macbook_pro_camera_in_use",
domain: "automation",
item_id: "1614732497392",
trace: {
"trigger/0": [
{
path: "trigger/0",
timestamp: "2021-03-25T04:36:51.223693+00:00",
},
],
"action/0": [
{
path: "action/0",
timestamp: "2021-03-14T06:07:01.771038+00:00",
changed_variables: {
trigger: {
platform: "state",
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
from_state: {
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
state: "off",
attributes: {
friendly_name: "Pauluss MacBook Pro Camera In Use",
icon: "mdi:camera-off",
},
last_changed: "2021-03-14T06:06:29.235325+00:00",
last_updated: "2021-03-14T06:06:29.235325+00:00",
context: {
id: "ad4864c5ce957c38a07b50378eeb245d",
parent_id: null,
user_id: null,
},
},
to_state: {
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
state: "on",
attributes: {
friendly_name: "Pauluss MacBook Pro Camera In Use",
icon: "mdi:camera",
},
last_changed: "2021-03-14T06:07:01.762009+00:00",
last_updated: "2021-03-14T06:07:01.762009+00:00",
context: {
id: "e22ddfd5f11dc4aad9a52fc10dab613b",
parent_id: null,
user_id: null,
},
},
for: null,
attribute: null,
description:
"state of binary_sensor.pauluss_macbook_pro_camera_in_use",
},
context: {
id: "43b6ee9293a551c5cc14e8eb60af54ba",
parent_id: "e22ddfd5f11dc4aad9a52fc10dab613b",
user_id: null,
},
},
},
],
"action/1": [
{ path: "action/1", timestamp: "2021-03-14T06:07:01.875316+00:00" },
],
"action/2": [
{
path: "action/2",
timestamp: "2021-03-14T06:07:53.195013+00:00",
changed_variables: {
wait: {
remaining: null,
trigger: {
platform: "state",
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
from_state: {
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
state: "on",
attributes: {
friendly_name: "Pauluss MacBook Pro Camera In Use",
icon: "mdi:camera",
},
last_changed: "2021-03-14T06:07:01.762009+00:00",
last_updated: "2021-03-14T06:07:01.762009+00:00",
context: {
id: "e22ddfd5f11dc4aad9a52fc10dab613b",
parent_id: null,
user_id: null,
},
},
to_state: {
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
state: "off",
attributes: {
friendly_name: "Pauluss MacBook Pro Camera In Use",
icon: "mdi:camera-off",
},
last_changed: "2021-03-14T06:07:53.186755+00:00",
last_updated: "2021-03-14T06:07:53.186755+00:00",
context: {
id: "b2308cc91d509ea8e0c623331ab178d6",
parent_id: null,
user_id: null,
},
},
for: null,
attribute: null,
description:
"state of binary_sensor.pauluss_macbook_pro_camera_in_use",
},
},
},
},
],
"action/3": [
{
path: "action/3",
timestamp: "2021-03-14T06:07:53.196014+00:00",
},
],
},
config: {
mode: "restart",
max_exceeded: "silent",
trigger: [
{
platform: "state",
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
from: "off",
to: "on",
},
],
action: [
{
service: "light.turn_on",
target: {
entity_id: "light.elgato_key_light_air",
},
},
{
wait_for_trigger: [
{
platform: "state",
entity_id: "binary_sensor.pauluss_macbook_pro_camera_in_use",
from: "on",
to: "off",
},
],
},
{
delay: 0,
},
{
service: "light.turn_off",
target: {
entity_id: "light.elgato_key_light_air",
},
},
],
id: "1614732497392",
alias: "Auto Elgato",
description: "",
},
context: {
id: "43b6ee9293a551c5cc14e8eb60af54ba",
parent_id: "e22ddfd5f11dc4aad9a52fc10dab613b",
user_id: null,
},
script_execution: "finished",
},
logbookEntries: [
{
name: "Auto Elgato",
message:
"has been triggered by state of binary_sensor.pauluss_macbook_pro_camera_in_use",
source: "state of binary_sensor.pauluss_macbook_pro_camera_in_use",
entity_id: "automation.auto_elgato",
when: "2021-03-14T06:07:01.768492+00:00",
domain: "automation",
},
{
when: "2021-03-14T06:07:01.872187+00:00",
name: "Elgato Key Light Air",
state: "on",
entity_id: "light.elgato_key_light_air",
context_entity_id: "automation.auto_elgato",
context_entity_id_name: "Auto Elgato",
context_event_type: "automation_triggered",
context_domain: "automation",
context_name: "Auto Elgato",
},
{
when: "2021-03-14T06:07:53.284505+00:00",
name: "Elgato Key Light Air",
state: "off",
entity_id: "light.elgato_key_light_air",
context_entity_id: "automation.auto_elgato",
context_entity_id_name: "Auto Elgato",
context_event_type: "automation_triggered",
context_domain: "automation",
context_name: "Auto Elgato",
},
],
};
+7
View File
@@ -0,0 +1,7 @@
import { AutomationTraceExtended } from "../../../../src/data/trace";
import { LogbookEntry } from "../../../../src/data/logbook";
export interface DemoTrace {
trace: AutomationTraceExtended;
logbookEntries: LogbookEntry[];
}
-84
View File
@@ -1,84 +0,0 @@
import {
customElement,
html,
LitElement,
property,
PropertyValues,
query,
TemplateResult,
} from "lit-element";
import "../../../src/components/ha-card";
import {
SUPPORT_BRIGHTNESS,
SUPPORT_COLOR,
SUPPORT_COLOR_TEMP,
SUPPORT_EFFECT,
SUPPORT_FLASH,
SUPPORT_TRANSITION,
SUPPORT_WHITE_VALUE,
} from "../../../src/data/light";
import "../../../src/dialogs/more-info/more-info-content";
import { getEntity } from "../../../src/fake_data/entity";
import {
MockHomeAssistant,
provideHass,
} from "../../../src/fake_data/provide_hass";
import "../components/demo-more-infos";
const ENTITIES = [
getEntity("light", "bed_light", "on", {
friendly_name: "Basic Light",
}),
getEntity("light", "kitchen_light", "on", {
friendly_name: "Brightness Light",
brightness: 200,
supported_features: SUPPORT_BRIGHTNESS,
}),
getEntity("light", "color_temperature_light", "on", {
friendly_name: "White Color Temperature Light",
brightness: 128,
color_temp: 75,
min_mireds: 30,
max_mireds: 150,
supported_features: SUPPORT_BRIGHTNESS + SUPPORT_COLOR_TEMP,
}),
getEntity("light", "color_effectslight", "on", {
friendly_name: "Color Effets Light",
brightness: 255,
hs_color: [30, 100],
white_value: 36,
supported_features:
SUPPORT_BRIGHTNESS +
SUPPORT_EFFECT +
SUPPORT_FLASH +
SUPPORT_COLOR +
SUPPORT_TRANSITION +
SUPPORT_WHITE_VALUE,
effect_list: ["random", "colorloop"],
}),
];
@customElement("demo-more-info-light")
class DemoMoreInfoLight extends LitElement {
@property() public hass!: MockHomeAssistant;
@query("demo-more-infos") private _demoRoot!: HTMLElement;
protected render(): TemplateResult {
return html`
<demo-more-infos
.hass=${this.hass}
.entities=${ENTITIES.map((ent) => ent.entityId)}
></demo-more-infos>
`;
}
protected firstUpdated(changedProperties: PropertyValues) {
super.firstUpdated(changedProperties);
const hass = provideHass(this._demoRoot);
hass.updateTranslations(null, "en");
hass.addEntities(ENTITIES);
}
}
customElements.define("demo-more-info-light", DemoMoreInfoLight);
-249
View File
@@ -1,249 +0,0 @@
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 { html } from "@polymer/polymer/lib/utils/html-tag";
/* eslint-plugin-disable lit */
import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../src/components/ha-card";
import "../../src/components/ha-icon";
import "../../src/components/ha-icon-button";
import "../../src/managers/notification-manager";
import "../../src/styles/polymer-ha-style";
// eslint-disable-next-line import/extensions
import { DEMOS } from "../build/import-demos";
class HaGallery extends PolymerElement {
static get template() {
return html`
<style include="iron-positioning ha-style">
:host {
-ms-user-select: initial;
-webkit-user-select: initial;
-moz-user-select: initial;
}
app-header-layout {
min-height: 100vh;
}
ha-icon-button.invisible {
visibility: hidden;
}
.pickers {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: start;
}
.pickers ha-card {
width: 400px;
display: block;
margin: 16px 8px;
}
.pickers ha-card:last-child {
margin-bottom: 16px;
}
.intro {
margin: -1em 0;
}
p a {
color: var(--primary-color);
}
a {
color: var(--primary-text-color);
text-decoration: none;
}
</style>
<app-header-layout>
<app-header slot="header" fixed>
<app-toolbar>
<ha-icon-button
icon="hass:arrow-left"
on-click="_backTapped"
class$="[[_computeHeaderButtonClass(_demo)]]"
></ha-icon-button>
<div main-title>
[[_withDefault(_demo, "Home Assistant Gallery")]]
</div>
</app-toolbar>
</app-header>
<div class="content">
<div id="demo"></div>
<template is="dom-if" if="[[!_demo]]">
<div class="pickers">
<ha-card header="Lovelace Card Demos">
<div class="card-content intro">
<p>
Lovelace has many different cards. Each card allows the user
to tell a different story about what is going on in their
house. These cards are very customizable, as no household is
the same.
</p>
<p>
This gallery helps our developers and designers to see all
the different states that each card can be in.
</p>
<p>
Check
<a href="https://www.home-assistant.io/lovelace"
>the official website</a
>
for instructions on how to get started with Lovelace.
</p>
</div>
<template is="dom-repeat" items="[[_lovelaceDemos]]">
<a href="#[[item]]">
<paper-item>
<paper-item-body>{{ item }}</paper-item-body>
<ha-icon icon="hass:chevron-right"></ha-icon>
</paper-item>
</a>
</template>
</ha-card>
<ha-card header="More Info Demos">
<div class="card-content intro">
<p>
More info screens show up when an entity is clicked.
</p>
</div>
<template is="dom-repeat" items="[[_moreInfoDemos]]">
<a href="#[[item]]">
<paper-item>
<paper-item-body>{{ item }}</paper-item-body>
<ha-icon icon="hass:chevron-right"></ha-icon>
</paper-item>
</a>
</template>
</ha-card>
<ha-card header="Util Demos">
<div class="card-content intro">
<p>
Test pages for our utility functions.
</p>
</div>
<template is="dom-repeat" items="[[_utilDemos]]">
<a href="#[[item]]">
<paper-item>
<paper-item-body>{{ item }}</paper-item-body>
<ha-icon icon="hass:chevron-right"></ha-icon>
</paper-item>
</a>
</template>
</ha-card>
</div>
</template>
</div>
</app-header-layout>
<notification-manager
hass="[[_fakeHass]]"
id="notifications"
></notification-manager>
`;
}
static get properties() {
return {
_fakeHass: {
type: Object,
// Just enough for computeRTL
value: {
language: "en",
translationMetadata: {
translations: {},
},
},
},
_demo: {
type: String,
value: document.location.hash.substr(1),
observer: "_demoChanged",
},
_demos: {
type: Array,
value: Object.keys(DEMOS),
},
_lovelaceDemos: {
type: Array,
computed: "_computeLovelace(_demos)",
},
_moreInfoDemos: {
type: Array,
computed: "_computeMoreInfos(_demos)",
},
_utilDemos: {
type: Array,
computed: "_computeUtil(_demos)",
},
};
}
ready() {
super.ready();
this.addEventListener("show-notification", (ev) =>
this.$.notifications.showDialog({ message: ev.detail.message })
);
this.addEventListener("hass-more-info", (ev) => {
if (ev.detail.entityId) {
this.$.notifications.showDialog({
message: `Showing more info for ${ev.detail.entityId}`,
});
}
});
window.addEventListener("hashchange", () => {
this._demo = document.location.hash.substr(1);
});
}
_withDefault(value, def) {
return value || def;
}
_demoChanged(demo) {
const root = this.$.demo;
while (root.lastChild) root.removeChild(root.lastChild);
if (demo) {
DEMOS[demo]();
const el = document.createElement(demo);
root.appendChild(el);
}
}
_computeHeaderButtonClass(demo) {
return demo ? "" : "invisible";
}
_backTapped() {
document.location.hash = "";
}
_computeLovelace(demos) {
return demos.filter((demo) => demo.includes("hui"));
}
_computeMoreInfos(demos) {
return demos.filter((demo) => demo.includes("more-info"));
}
_computeUtil(demos) {
return demos.filter((demo) => demo.includes("util"));
}
}
customElements.define("ha-gallery", HaGallery);
+257
View File
@@ -0,0 +1,257 @@
import { mdiMenu } from "@mdi/js";
import "@material/mwc-drawer";
import "@material/mwc-top-app-bar-fixed";
import { html, css, LitElement, PropertyValues } from "lit";
import { customElement, property, query } from "lit/decorators";
import "../../src/components/ha-icon-button";
import "../../src/managers/notification-manager";
import { haStyle } from "../../src/resources/styles";
import { PAGES, SIDEBAR } from "../build/import-pages";
import { dynamicElement } from "../../src/common/dom/dynamic-element-directive";
import "./components/page-description";
const GITHUB_DEMO_URL =
"https://github.com/home-assistant/frontend/blob/dev/gallery/src/pages/";
const FAKE_HASS = {
// Just enough for computeRTL for notification-manager
language: "en",
translationMetadata: {
translations: {},
},
};
@customElement("ha-gallery")
class HaGallery extends LitElement {
@property() private _page =
document.location.hash.substring(1) ||
`${SIDEBAR[0].category}/${SIDEBAR[0].pages![0]}`;
@query("notification-manager")
private _notifications!: HTMLElementTagNameMap["notification-manager"];
@query("mwc-drawer")
private _drawer!: HTMLElementTagNameMap["mwc-drawer"];
private _narrow = window.matchMedia("(max-width: 600px)").matches;
render() {
const sidebar: unknown[] = [];
for (const group of SIDEBAR) {
const links: unknown[] = [];
for (const page of group.pages!) {
const key = `${group.category}/${page}`;
const active = this._page === key;
const title = PAGES[key].metadata.title || page;
links.push(html`
<a ?active=${active} href=${`#${group.category}/${page}`}>${title}</a>
`);
}
sidebar.push(
group.header
? html`
<details>
<summary class="section">${group.header}</summary>
${links}
</details>
`
: links
);
}
return html`
<mwc-drawer
hasHeader
.open=${!this._narrow}
.type=${this._narrow ? "modal" : "dismissible"}
>
<span slot="title">Home Assistant Design</span>
<!-- <span slot="subtitle">subtitle</span> -->
<div class="sidebar">${sidebar}</div>
<div slot="appContent">
<mwc-top-app-bar-fixed>
<ha-icon-button
slot="navigationIcon"
@click=${this._menuTapped}
.path=${mdiMenu}
></ha-icon-button>
<div slot="title">
${PAGES[this._page].metadata.title || this._page.split("/")[1]}
</div>
</mwc-top-app-bar-fixed>
<div class="content">
${PAGES[this._page].description
? html`
<page-description .page=${this._page}></page-description>
`
: ""}
${dynamicElement(`demo-${this._page.replace("/", "-")}`)}
</div>
<div class="page-footer">
${PAGES[this._page].description ||
Object.keys(PAGES[this._page].metadata).length > 0
? html`
<a
href=${`${GITHUB_DEMO_URL}${this._page}.markdown`}
target="_blank"
>
Edit text
</a>
`
: ""}
${PAGES[this._page].demo
? html`
<a
href=${`${GITHUB_DEMO_URL}${this._page}.ts`}
target="_blank"
>
Edit demo
</a>
`
: ""}
</div>
</div>
</mwc-drawer>
<notification-manager
.hass=${FAKE_HASS}
id="notifications"
></notification-manager>
`;
}
firstUpdated(changedProps: PropertyValues) {
super.firstUpdated(changedProps);
this.addEventListener("show-notification", (ev) =>
this._notifications.showDialog({ message: ev.detail.message })
);
this.addEventListener("alert-dismissed-clicked", () =>
this._notifications.showDialog({ message: "Alert dismissed clicked" })
);
this.addEventListener("hass-more-info", (ev) => {
if (ev.detail.entityId) {
this._notifications.showDialog({
message: `Showing more info for ${ev.detail.entityId}`,
});
}
});
document.location.hash = this._page;
window.addEventListener("hashchange", () => {
this._page = document.location.hash.substring(1);
if (this._narrow) {
this._drawer.open = false;
}
});
}
updated(changedProps: PropertyValues) {
super.updated(changedProps);
if (!changedProps.has("_page")) {
return;
}
if (PAGES[this._page].demo) {
PAGES[this._page].demo();
}
const menuItem = this.shadowRoot!.querySelector(
`a[href="#${this._page}"]`
)!;
// Make sure section is expanded
if (menuItem.parentElement instanceof HTMLDetailsElement) {
menuItem.parentElement.open = true;
}
}
_menuTapped() {
this._drawer.open = !this._drawer.open;
}
static styles = [
haStyle,
css`
:host {
-ms-user-select: initial;
-webkit-user-select: initial;
-moz-user-select: initial;
}
.sidebar {
padding: 4px;
}
.sidebar details {
margin-top: 1em;
margin-left: 1em;
}
.sidebar summary {
cursor: pointer;
font-weight: bold;
margin-bottom: 8px;
}
.sidebar a {
color: var(--primary-text-color);
display: block;
padding: 4px 12px;
text-decoration: none;
position: relative;
}
.sidebar a[active]::before {
border-radius: 4px;
position: absolute;
top: 0;
right: 2px;
bottom: 0;
left: 2px;
pointer-events: none;
content: "";
transition: opacity 15ms linear;
will-change: opacity;
background-color: var(--sidebar-selected-icon-color);
opacity: 0.12;
}
div[slot="appContent"] {
display: flex;
flex-direction: column;
min-height: 100vh;
background: var(--primary-background-color);
}
.content {
flex: 1;
}
page-description {
margin: 16px;
}
.page-footer {
text-align: center;
margin: 16px 0;
padding-top: 16px;
border-top: 1px solid rgba(0, 0, 0, 0.12);
}
.page-footer a {
display: inline-block;
margin: 0 8px;
}
`,
];
}
declare global {
interface HTMLElementTagNameMap {
"ha-gallery": HaGallery;
}
}
+1 -1
View File
@@ -7,7 +7,7 @@
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="theme-color" content="#2157BC" />
<title>HAGallery</title>
<title>Home Assistant Design</title>
<script type="module" src="<%= latestGalleryJS %>"></script>
<style>
@@ -0,0 +1,3 @@
---
title: Describe Action
---
@@ -0,0 +1,119 @@
import { dump } from "js-yaml";
import { html, css, LitElement, TemplateResult } from "lit";
import { customElement, property } from "lit/decorators";
import "../../../../src/components/ha-card";
import { describeAction } from "../../../../src/data/script_i18n";
import { getEntity } from "../../../../src/fake_data/entity";
import { provideHass } from "../../../../src/fake_data/provide_hass";
import { HomeAssistant } from "../../../../src/types";
const ENTITIES = [
getEntity("scene", "kitchen_morning", "scening", {
friendly_name: "Kitchen Morning",
}),
getEntity("media_player", "kitchen", "playing", {
friendly_name: "Sonos Kitchen",
}),
];
const ACTIONS = [
{ wait_template: "{{ true }}", alias: "Something with an alias" },
{ delay: "0:05" },
{ wait_template: "{{ true }}" },
{
condition: "template",
value_template: "{{ true }}",
},
{ event: "happy_event" },
{
device_id: "abcdefgh",
domain: "plex",
entity_id: "media_player.kitchen",
type: "turn_on",
},
{ scene: "scene.kitchen_morning" },
{
service: "scene.turn_on",
target: { entity_id: "scene.kitchen_morning" },
metadata: {},
},
{
service: "media_player.play_media",
target: { entity_id: "media_player.kitchen" },
data: { media_content_id: "", media_content_type: "" },
metadata: { title: "Happy Song" },
},
{
wait_for_trigger: [
{
platform: "state",
entity_id: "input_boolean.toggle_1",
},
],
},
{
variables: {
hello: "world",
},
},
{
service: "input_boolean.toggle",
target: {
entity_id: "input_boolean.toggle_4",
},
},
];
@customElement("demo-automation-describe-action")
export class DemoAutomationDescribeAction extends LitElement {
@property({ attribute: false }) hass!: HomeAssistant;
protected render(): TemplateResult {
if (!this.hass) {
return html``;
}
return html`
<ha-card header="Actions">
${ACTIONS.map(
(conf) => html`
<div class="action">
<span>${describeAction(this.hass, conf as any)}</span>
<pre>${dump(conf)}</pre>
</div>
`
)}
</ha-card>
`;
}
protected firstUpdated(changedProps) {
super.firstUpdated(changedProps);
const hass = provideHass(this);
hass.updateTranslations(null, "en");
hass.addEntities(ENTITIES);
}
static get styles() {
return css`
ha-card {
max-width: 600px;
margin: 24px auto;
}
.action {
padding: 16px;
display: flex;
align-items: center;
justify-content: space-between;
}
span {
margin-right: 16px;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"demo-automation-describe-action": DemoAutomationDescribeAction;
}
}
@@ -0,0 +1,3 @@
---
title: Describe Condition
---
@@ -0,0 +1,60 @@
import { dump } from "js-yaml";
import { html, css, LitElement, TemplateResult } from "lit";
import { customElement } from "lit/decorators";
import "../../../../src/components/ha-card";
import { describeCondition } from "../../../../src/data/automation_i18n";
const conditions = [
{ condition: "and" },
{ condition: "not" },
{ condition: "or" },
{ condition: "state" },
{ condition: "numeric_state" },
{ condition: "sun", after: "sunset" },
{ condition: "sun", after: "sunrise" },
{ condition: "zone" },
{ condition: "time" },
{ condition: "template" },
];
@customElement("demo-automation-describe-condition")
export class DemoAutomationDescribeCondition extends LitElement {
protected render(): TemplateResult {
return html`
<ha-card header="Conditions">
${conditions.map(
(conf) => html`
<div class="condition">
<span>${describeCondition(conf as any)}</span>
<pre>${dump(conf)}</pre>
</div>
`
)}
</ha-card>
`;
}
static get styles() {
return css`
ha-card {
max-width: 600px;
margin: 24px auto;
}
.condition {
padding: 16px;
display: flex;
align-items: center;
justify-content: space-between;
}
span {
margin-right: 16px;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"demo-automation-describe-condition": DemoAutomationDescribeCondition;
}
}
@@ -0,0 +1,3 @@
---
title: Describe Trigger
---
@@ -0,0 +1,63 @@
import { dump } from "js-yaml";
import { html, css, LitElement, TemplateResult } from "lit";
import { customElement } from "lit/decorators";
import "../../../../src/components/ha-card";
import { describeTrigger } from "../../../../src/data/automation_i18n";
const triggers = [
{ platform: "state" },
{ platform: "mqtt" },
{ platform: "geo_location" },
{ platform: "homeassistant" },
{ platform: "numeric_state" },
{ platform: "sun" },
{ platform: "time_pattern" },
{ platform: "webhook" },
{ platform: "zone" },
{ platform: "tag" },
{ platform: "time" },
{ platform: "template" },
{ platform: "event" },
];
@customElement("demo-automation-describe-trigger")
export class DemoAutomationDescribeTrigger extends LitElement {
protected render(): TemplateResult {
return html`
<ha-card header="Triggers">
${triggers.map(
(conf) => html`
<div class="trigger">
<span>${describeTrigger(conf as any)}</span>
<pre>${dump(conf)}</pre>
</div>
`
)}
</ha-card>
`;
}
static get styles() {
return css`
ha-card {
max-width: 600px;
margin: 24px auto;
}
.trigger {
padding: 16px;
display: flex;
align-items: center;
justify-content: space-between;
}
span {
margin-right: 16px;
}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"demo-automation-describe-trigger": DemoAutomationDescribeTrigger;
}
}
@@ -0,0 +1,3 @@
---
title: Actions
---
@@ -0,0 +1,91 @@
/* eslint-disable lit/no-template-arrow */
import { LitElement, TemplateResult, html } from "lit";
import { customElement, state } from "lit/decorators";
import { provideHass } from "../../../../src/fake_data/provide_hass";
import type { HomeAssistant } from "../../../../src/types";
import "../../components/demo-black-white-row";
import { mockEntityRegistry } from "../../../../demo/src/stubs/entity_registry";
import { mockDeviceRegistry } from "../../../../demo/src/stubs/device_registry";
import { mockAreaRegistry } from "../../../../demo/src/stubs/area_registry";
import { mockHassioSupervisor } from "../../../../demo/src/stubs/hassio_supervisor";
import "../../../../src/panels/config/automation/action/ha-automation-action";
import { HaChooseAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-choose";
import { HaDelayAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-delay";
import { HaDeviceAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-device_id";
import { HaEventAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-event";
import { HaRepeatAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-repeat";
import { HaSceneAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-activate_scene";
import { HaServiceAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-service";
import { HaWaitForTriggerAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-wait_for_trigger";
import { HaWaitAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-wait_template";
import { Action } from "../../../../src/data/script";
import { HaConditionAction } from "../../../../src/panels/config/automation/action/types/ha-automation-action-condition";
const SCHEMAS: { name: string; actions: Action[] }[] = [
{ name: "Event", actions: [HaEventAction.defaultConfig] },
{ name: "Device", actions: [HaDeviceAction.defaultConfig] },
{ name: "Service", actions: [HaServiceAction.defaultConfig] },
{ name: "Condition", actions: [HaConditionAction.defaultConfig] },
{ name: "Delay", actions: [HaDelayAction.defaultConfig] },
{ name: "Scene", actions: [HaSceneAction.defaultConfig] },
{ name: "Wait", actions: [HaWaitAction.defaultConfig] },
{ name: "WaitForTrigger", actions: [HaWaitForTriggerAction.defaultConfig] },
{ name: "Repeat", actions: [HaRepeatAction.defaultConfig] },
{ name: "Choose", actions: [HaChooseAction.defaultConfig] },
{ name: "Variables", actions: [{ variables: { hello: "1" } }] },
];
@customElement("demo-automation-editor-action")
class DemoHaAutomationEditorAction extends LitElement {
@state() private hass!: HomeAssistant;
private data: any = SCHEMAS.map((info) => info.actions);
constructor() {
super();
const hass = provideHass(this);
hass.updateTranslations(null, "en");
hass.updateTranslations("config", "en");
mockEntityRegistry(hass);
mockDeviceRegistry(hass);
mockAreaRegistry(hass);
mockHassioSupervisor(hass);
}
protected render(): TemplateResult {
const valueChanged = (ev) => {
const sampleIdx = ev.target.sampleIdx;
this.data[sampleIdx] = ev.detail.value;
this.requestUpdate();
};
return html`
${SCHEMAS.map(
(info, sampleIdx) => html`
<demo-black-white-row
.title=${info.name}
.value=${this.data[sampleIdx]}
>
${["light", "dark"].map(
(slot) =>
html`
<ha-automation-action
slot=${slot}
.hass=${this.hass}
.actions=${this.data[sampleIdx]}
.sampleIdx=${sampleIdx}
@value-changed=${valueChanged}
></ha-automation-action>
`
)}
</demo-black-white-row>
`
)}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"demo-ha-automation-editor-action": DemoHaAutomationEditorAction;
}
}
@@ -0,0 +1,3 @@
---
title: Conditions
---
@@ -0,0 +1,127 @@
/* eslint-disable lit/no-template-arrow */
import { LitElement, TemplateResult, html } from "lit";
import { customElement, state } from "lit/decorators";
import { provideHass } from "../../../../src/fake_data/provide_hass";
import type { HomeAssistant } from "../../../../src/types";
import "../../components/demo-black-white-row";
import { mockEntityRegistry } from "../../../../demo/src/stubs/entity_registry";
import { mockDeviceRegistry } from "../../../../demo/src/stubs/device_registry";
import { mockAreaRegistry } from "../../../../demo/src/stubs/area_registry";
import { mockHassioSupervisor } from "../../../../demo/src/stubs/hassio_supervisor";
import type { Condition } from "../../../../src/data/automation";
import "../../../../src/panels/config/automation/condition/ha-automation-condition";
import { HaDeviceCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-device";
import { HaLogicalCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-logical";
import HaNumericStateCondition from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-numeric_state";
import { HaStateCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-state";
import { HaSunCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-sun";
import { HaTemplateCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-template";
import { HaTimeCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-time";
import { HaTriggerCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-trigger";
import { HaZoneCondition } from "../../../../src/panels/config/automation/condition/types/ha-automation-condition-zone";
const SCHEMAS: { name: string; conditions: Condition[] }[] = [
{
name: "State",
conditions: [{ condition: "state", ...HaStateCondition.defaultConfig }],
},
{
name: "Numeric State",
conditions: [
{ condition: "numeric_state", ...HaNumericStateCondition.defaultConfig },
],
},
{
name: "Sun",
conditions: [{ condition: "sun", ...HaSunCondition.defaultConfig }],
},
{
name: "Zone",
conditions: [{ condition: "zone", ...HaZoneCondition.defaultConfig }],
},
{
name: "Time",
conditions: [{ condition: "time", ...HaTimeCondition.defaultConfig }],
},
{
name: "Template",
conditions: [
{ condition: "template", ...HaTemplateCondition.defaultConfig },
],
},
{
name: "Device",
conditions: [{ condition: "device", ...HaDeviceCondition.defaultConfig }],
},
{
name: "And",
conditions: [{ condition: "and", ...HaLogicalCondition.defaultConfig }],
},
{
name: "Or",
conditions: [{ condition: "or", ...HaLogicalCondition.defaultConfig }],
},
{
name: "Not",
conditions: [{ condition: "not", ...HaLogicalCondition.defaultConfig }],
},
{
name: "Trigger",
conditions: [{ condition: "trigger", ...HaTriggerCondition.defaultConfig }],
},
];
@customElement("demo-automation-editor-condition")
class DemoHaAutomationEditorCondition extends LitElement {
@state() private hass!: HomeAssistant;
private data: any = SCHEMAS.map((info) => info.conditions);
constructor() {
super();
const hass = provideHass(this);
hass.updateTranslations(null, "en");
hass.updateTranslations("config", "en");
mockEntityRegistry(hass);
mockDeviceRegistry(hass);
mockAreaRegistry(hass);
mockHassioSupervisor(hass);
}
protected render(): TemplateResult {
const valueChanged = (ev) => {
const sampleIdx = ev.target.sampleIdx;
this.data[sampleIdx] = ev.detail.value;
this.requestUpdate();
};
return html`
${SCHEMAS.map(
(info, sampleIdx) => html`
<demo-black-white-row
.title=${info.name}
.value=${this.data[sampleIdx]}
>
${["light", "dark"].map(
(slot) =>
html`
<ha-automation-condition
slot=${slot}
.hass=${this.hass}
.conditions=${this.data[sampleIdx]}
.sampleIdx=${sampleIdx}
@value-changed=${valueChanged}
></ha-automation-condition>
`
)}
</demo-black-white-row>
`
)}
`;
}
}
declare global {
interface HTMLElementTagNameMap {
"demo-ha-automation-editor-condition": DemoHaAutomationEditorCondition;
}
}

Some files were not shown because too many files have changed in this diff Show More