Compare commits

...

36 Commits

Author SHA1 Message Date
Bram Kragten
4f4edb109f Merge pull request #7028 from home-assistant/dev 2020-09-16 21:58:42 +02:00
Bram Kragten
265bfeb889 Bumped version to 20200916.0 2020-09-16 21:39:35 +02:00
Joakim Sørensen
96110637d9 Remove deprecated icons (#6818) 2020-09-16 21:38:40 +02:00
Bram Kragten
ad34f98e6d Add default actions to button row (#7026) 2020-09-16 21:38:08 +02:00
Bram Kragten
a8a1563586 Fix safari not rendering history graph (#7025) 2020-09-16 17:20:49 +02:00
Zack Barett
9b25a54a47 Fix sidebar from not displaying (#7022)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2020-09-16 11:09:25 +02:00
HomeAssistant Azure
4b8c96c769 [ci skip] Translation update 2020-09-16 00:33:16 +00:00
Tomasz
c62ff85e73 Fix package.json for windows (errors when runing yarn run lint and yarn run format) (#6762) 2020-09-15 21:15:05 +02:00
Bram Kragten
7d5a27ec0f Merge pull request #7019 from home-assistant/dev 2020-09-15 14:59:48 +02:00
Bram Kragten
d6aba040dd revert remove tap action from button stub (#7018) 2020-09-15 14:45:38 +02:00
Bram Kragten
ca4757db5b Bumped version to 20200915.0 2020-09-15 14:44:55 +02:00
Bram Kragten
c917b67cbd Adjust local media error messages (#7017) 2020-09-15 14:43:13 +02:00
Zack Barett
9659c97978 Update Error handling (#7007)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2020-09-15 14:32:02 +02:00
Joakim Sørensen
7d862d6f2a Use helper to generate documentation URL (#7012) 2020-09-15 13:20:43 +02:00
Joakim Sørensen
9c80776d8c Refresh snapshots on first update (#7014) 2020-09-15 13:20:17 +02:00
uvjustin
d5cd288fe8 Temporarily remove exoplayer (#7015) 2020-09-15 13:18:11 +02:00
Joakim Sørensen
239e817779 Rename upgrade -> update (#7013) 2020-09-15 11:15:58 +02:00
Joakim Sørensen
1986215919 Remove version check (#6984) 2020-09-15 11:15:22 +02:00
Franck Nijhof
239f5f1a2f Add snapshot support for new media folder (#6889) 2020-09-15 11:14:25 +02:00
Bram Kragten
3bca32c6d5 Disable cloud expose controls when yaml filter (#6990) 2020-09-15 08:42:09 +02:00
HomeAssistant Azure
183eff745d [ci skip] Translation update 2020-09-15 00:32:23 +00:00
uvjustin
4392d78ff6 Allow ExoPlayer only from more-info-camera (#6974)
Co-authored-by: Bram Kragten <mail@bramkragten.nl>
2020-09-15 00:26:26 +02:00
Bram Kragten
858196ab53 Update en.json 2020-09-15 00:19:23 +02:00
Bram Kragten
fb75d8c1f2 Fix hex to rgb conversion (#6999) 2020-09-15 00:08:16 +02:00
Bram Kragten
7628569579 Cleanup more info styling (#7004) 2020-09-15 00:07:45 +02:00
Joakim Sørensen
8a9d5f7753 mwc-button -> mwc-icon-button (#6993) 2020-09-15 00:07:11 +02:00
Charles Garwood
cdcccf5089 Pass ozw instance to ozw panel call service buttons (#6992) 2020-09-14 23:50:03 +02:00
Bram Kragten
de95c92e2d Sidebar tweaks (#6994) 2020-09-14 23:46:40 +02:00
Joakim Sørensen
667c828359 Merge pull request #6963 from home-assistant/dev 2020-09-12 22:17:44 +02:00
Joakim Sørensen
085c6f8bdd Merge pull request #6900 from home-assistant/dev
20200909.0
2020-09-09 23:22:01 +02:00
Bram Kragten
5cca5bfe86 Merge pull request #6865 from home-assistant/dev 2020-09-08 21:33:22 +02:00
Bram Kragten
4999f1ad51 Merge pull request #6821 from home-assistant/dev 2020-09-07 20:53:40 +02:00
Bram Kragten
61dbae8b8b Merge pull request #6792 from home-assistant/dev 2020-09-04 23:26:27 +02:00
Bram Kragten
ba3cc7df0f Merge pull request #6765 from home-assistant/dev 2020-09-01 23:44:41 +02:00
Bram Kragten
090ad34f78 Merge pull request #6692 from home-assistant/dev 2020-08-24 20:48:44 +02:00
Bram Kragten
b2460cbc3d Merge pull request #6662 from home-assistant/dev 2020-08-20 16:10:18 +02:00
76 changed files with 963 additions and 912 deletions

View File

@@ -1,267 +1 @@
[ []
{
"path": "M17.5,15.61C17.33,15.37 9.53,5.4 9.27,5.08C9,4.75 9.08,4.65 9.13,4.59C9.22,4.5 9.36,4.5 9.93,4.5C10.26,4.5 13.59,4.5 13.94,4.47C14.66,4.47 14.78,4.53 14.85,4.56C14.93,4.58 15.13,4.75 15.26,4.92C15.33,5 22.32,13.36 22.39,13.45C22.46,13.54 22.59,13.69 22.67,13.84C22.76,14 22.77,14.18 22.64,14.25C22.56,14.3 18.7,15.89 18.59,15.93C18.5,16 18.27,16.06 18.11,16.04C18,16 17.77,15.92 17.5,15.61M21.47,15.42L21.75,15.47C21.75,15.47 22.68,15.65 22.77,15.67C22.87,15.69 22.96,15.76 22.95,15.79C22.94,15.87 22.9,15.91 22.83,15.95C22.77,16 18.58,18.58 18.5,18.62C18.43,18.66 18.33,18.72 18.11,18.75C17.7,18.83 16.91,18.61 16.66,18.56C16.41,18.5 6.15,16.23 6.06,16.2C5.97,16.17 5.91,16.16 5.9,16.08C5.89,15.94 6.11,15.88 6.28,15.81C6.46,15.75 11.28,14 11.45,13.93C11.62,13.86 11.84,13.84 11.95,13.83C12.06,13.82 12.73,13.93 13.03,13.97C13.34,14 14.2,14.15 14.2,14.15L16.16,16.7C16.5,17.09 16.72,17.25 17,17.28C17.15,17.29 17.31,17.25 17.42,17.2C17.5,17.16 21.47,15.42 21.47,15.42M10.25,9.18L11.96,11.37L12,11.45V11.5C11.96,11.54 8.93,14.32 8.91,14.35L5.72,15.5C5.72,15.5 5.63,15.55 5.58,15.58C5.53,15.61 5.47,15.67 5.5,15.82C5.5,15.87 5.5,16.59 5.5,16.79L1.56,18.04C1.37,18.1 1,18.23 0.95,18.19C0.88,18.14 0.97,18.03 1,17.97C1.06,17.91 9.08,10 9.39,9.7C9.84,9.24 10.25,9.18 10.25,9.18",
"name": "accusoft"
},
{
"path": "M4.94,11.12C5.23,11.12 5.5,11.16 5.76,11.23C5.77,9.09 7.5,7.35 9.65,7.35C11.27,7.35 12.67,8.35 13.24,9.77C13.83,9 14.74,8.53 15.76,8.53C17.5,8.53 18.94,9.95 18.94,11.71C18.94,11.95 18.91,12.2 18.86,12.43C19.1,12.34 19.37,12.29 19.65,12.29C20.95,12.29 22,13.35 22,14.65C22,15.95 20.95,17 19.65,17C18.35,17 6.36,17 4.94,17C3.32,17 2,15.68 2,14.06C2,12.43 3.32,11.12 4.94,11.12Z",
"name": "amazon-drive"
},
{
"path": "M8,11.5A1.25,1.25 0 0,0 6.75,12.75A1.25,1.25 0 0,0 8,14A1.25,1.25 0 0,0 9.25,12.75A1.25,1.25 0 0,0 8,11.5M16,11.5A1.25,1.25 0 0,0 14.75,12.75A1.25,1.25 0 0,0 16,14A1.25,1.25 0 0,0 17.25,12.75A1.25,1.25 0 0,0 16,11.5M12,7C13.5,7 14.9,7.33 16.18,7.91L18.34,5.75C18.73,5.36 19.36,5.36 19.75,5.75C20.14,6.14 20.14,6.77 19.75,7.16L17.95,8.96C20.41,10.79 22,13.71 22,17H2C2,13.71 3.59,10.79 6.05,8.96L4.25,7.16C3.86,6.77 3.86,6.14 4.25,5.75C4.64,5.36 5.27,5.36 5.66,5.75L7.82,7.91C9.1,7.33 10.5,7 12,7Z",
"name": "android-head"
},
{
"path": "M2,16.25C2,16.25 4,3.75 12,3.75C20,3.75 22,16.25 22,16.25C22,16.25 20,20.25 12,20.25C4,20.25 2,16.25 2,16.25M3.35,15.65C3.35,15.65 4.3,19 12,19C17,19 20,17.8 20.65,15.85C21.3,13.9 15.65,7.6 14.65,7.6C13.65,7.6 11.2,12 10.45,12C8.45,12 8.9,10 7.15,10C5.4,10 3.35,15.65 3.35,15.65Z",
"name": "basecamp"
},
{
"path": "M7,12A5,5 0 0,0 12,17A5,5 0 0,0 17,12A5,5 0 0,0 12,7C10.87,7 9.84,7.37 9,8V2.46C9.95,2.16 10.95,2 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12C2,8.3 4,5.07 7,3.34V12M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9Z",
"name": "beats"
},
{
"path": "M19.58,12.27C19.54,11.65 19.33,11.18 18.96,10.86C18.59,10.54 18.13,10.38 17.58,10.38C17,10.38 16.5,10.55 16.19,10.89C15.86,11.23 15.65,11.69 15.57,12.27M21.92,12.04C22,12.45 22,13.04 22,13.81H15.5C15.55,14.71 15.85,15.33 16.44,15.69C16.79,15.92 17.22,16.03 17.73,16.03C18.26,16.03 18.69,15.89 19,15.62C19.2,15.47 19.36,15.27 19.5,15H21.88C21.82,15.54 21.53,16.07 21,16.62C20.22,17.5 19.1,17.92 17.66,17.92C16.47,17.92 15.43,17.55 14.5,16.82C13.62,16.09 13.16,14.9 13.16,13.25C13.16,11.7 13.57,10.5 14.39,9.7C15.21,8.87 16.27,8.46 17.58,8.46C18.35,8.46 19.05,8.6 19.67,8.88C20.29,9.16 20.81,9.59 21.21,10.2C21.58,10.73 21.81,11.34 21.92,12.04M9.58,14.07C9.58,13.42 9.31,12.97 8.79,12.73C8.5,12.6 8.08,12.53 7.54,12.5H4.87V15.84H7.5C8.04,15.84 8.46,15.77 8.76,15.62C9.31,15.35 9.58,14.83 9.58,14.07M4.87,10.46H7.5C8.04,10.46 8.5,10.36 8.82,10.15C9.16,9.95 9.32,9.58 9.32,9.06C9.32,8.5 9.1,8.1 8.66,7.91C8.27,7.78 7.78,7.72 7.19,7.72H4.87M11.72,12.42C12.04,12.92 12.2,13.53 12.2,14.24C12.2,15 12,15.64 11.65,16.23C11.41,16.62 11.12,16.94 10.77,17.21C10.37,17.5 9.9,17.72 9.36,17.83C8.82,17.94 8.24,18 7.61,18H2V5.55H8C9.53,5.58 10.6,6 11.23,6.88C11.61,7.41 11.8,8.04 11.8,8.78C11.8,9.54 11.61,10.15 11.23,10.61C11,10.87 10.7,11.11 10.28,11.32C10.91,11.55 11.39,11.92 11.72,12.42M20.06,7.32H15.05V6.07H20.06V7.32Z",
"name": "behance"
},
{
"path": "M5.45,10.28C6.4,10.28 7.5,11.05 7.5,12C7.5,12.95 6.4,13.72 5.45,13.72H2L2.69,10.28H5.45M6.14,4.76C7.09,4.76 8.21,5.53 8.21,6.5C8.21,7.43 7.09,8.21 6.14,8.21H2.69L3.38,4.76H6.14M13.03,4.76C14,4.76 15.1,5.53 15.1,6.5C15.1,7.43 14,8.21 13.03,8.21H9.41L10.1,4.76H13.03M12.34,10.28C13.3,10.28 14.41,11.05 14.41,12C14.41,12.95 13.3,13.72 12.34,13.72H8.72L9.41,10.28H12.34M10.97,15.79C11.92,15.79 13.03,16.57 13.03,17.5C13.03,18.47 11.92,19.24 10.97,19.24H7.5L8.21,15.79H10.97M18.55,13.72C19.5,13.72 20.62,14.5 20.62,15.45C20.62,16.4 19.5,17.17 18.55,17.17H15.1L15.79,13.72H18.55M19.93,8.21C20.88,8.21 22,9 22,9.93C22,10.88 20.88,11.66 19.93,11.66H16.5L17.17,8.21H19.93Z",
"name": "blackberry"
},
{
"path": "M12,3A9,9 0 0,1 21,12A9,9 0 0,1 12,21A9,9 0 0,1 3,12A9,9 0 0,1 12,3M5.94,8.5C4,11.85 5.15,16.13 8.5,18.06C11.85,20 18.85,7.87 15.5,5.94C12.15,4 7.87,5.15 5.94,8.5Z",
"name": "cisco-webex"
},
{
"path": "M11.9,14.5H10.8V9.5H11.9C13.5,9.5 14.6,10.4 14.6,12C14.6,13.6 13.5,14.5 11.9,14.5M11.9,7H8.1V17H11.8C15.3,17 17.4,14.9 17.4,12V12C17.4,9.1 15.4,7 11.9,7M12,20C10.1,20 8.3,19.3 6.9,18.1L6.2,17.5L4.5,17.7L5.2,16.1L4.9,15.3C4.4,14.2 4.2,13.1 4.2,11.9C4.2,7.5 7.8,3.9 12.1,3.9C16.4,3.9 19.9,7.6 19.9,12C19.9,16.4 16.3,20 12,20M12,2C6.5,2 2.1,6.5 2.1,12C2.1,13.5 2.4,14.9 3,16.2L1.4,20.3L5.7,19.7C7.4,21.2 9.7,22.1 12.1,22.1C17.6,22.1 22,17.6 22,12.1C22,6.6 17.5,2 12,2Z",
"name": "disqus-outline"
},
{
"path": "M16.42,18.42C16,16.5 15.5,14.73 15,13.17C15.5,13.1 16,13.06 16.58,13.06H16.6V13.06H16.6C17.53,13.06 18.55,13.18 19.66,13.43C19.28,15.5 18.08,17.27 16.42,18.42M12,19.8C10.26,19.8 8.66,19.23 7.36,18.26C7.64,17.81 8.23,16.94 9.18,16.04C10.14,15.11 11.5,14.15 13.23,13.58C13.82,15.25 14.36,17.15 14.77,19.29C13.91,19.62 13,19.8 12,19.8M4.2,12C4.2,11.96 4.2,11.93 4.2,11.89C4.42,11.9 4.71,11.9 5.05,11.9H5.06C6.62,11.89 9.36,11.76 12.14,10.89C12.29,11.22 12.44,11.56 12.59,11.92C10.73,12.54 9.27,13.53 8.19,14.5C7.16,15.46 6.45,16.39 6.04,17C4.9,15.66 4.2,13.91 4.2,12M8.55,5C9.1,5.65 10.18,7.06 11.34,9.25C9,9.96 6.61,10.12 5.18,10.12C5.14,10.12 5.1,10.12 5.06,10.12H5.05C4.81,10.12 4.6,10.12 4.43,10.11C5,7.87 6.5,6 8.55,5M12,4.2C13.84,4.2 15.53,4.84 16.86,5.91C15.84,7.14 14.5,8 13.03,8.65C12,6.67 11,5.25 10.34,4.38C10.88,4.27 11.43,4.2 12,4.2M18.13,7.18C19.1,8.42 19.71,9.96 19.79,11.63C18.66,11.39 17.6,11.28 16.6,11.28V11.28H16.59C15.79,11.28 15.04,11.35 14.33,11.47C14.16,11.05 14,10.65 13.81,10.26C15.39,9.57 16.9,8.58 18.13,7.18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",
"name": "dribbble"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M15.09,16.5C14.81,15.14 14.47,13.91 14.08,12.82L15.2,12.74H15.22V12.74C15.87,12.74 16.59,12.82 17.36,13C17.09,14.44 16.26,15.69 15.09,16.5M12,17.46C10.79,17.46 9.66,17.06 8.76,16.39C8.95,16.07 9.36,15.46 10,14.83C10.7,14.18 11.64,13.5 12.86,13.11C13.28,14.27 13.65,15.6 13.94,17.1C13.33,17.33 12.68,17.46 12,17.46M6.54,12V11.92L7.14,11.93V11.93C8.24,11.93 10.15,11.83 12.1,11.22L12.41,11.94C11.11,12.38 10.09,13.07 9.34,13.76C8.61,14.42 8.12,15.08 7.83,15.5C7.03,14.56 6.54,13.34 6.54,12M9.59,7.11C9.97,7.56 10.73,8.54 11.54,10.08C9.89,10.57 8.23,10.68 7.22,10.68H7.14V10.68H6.7C7.09,9.11 8.17,7.81 9.59,7.11M12,6.54C13.29,6.54 14.47,7 15.41,7.74C14.69,8.6 13.74,9.22 12.72,9.66C12,8.27 11.31,7.28 10.84,6.67C11.21,6.59 11.6,6.54 12,6.54M16.29,8.63C16.97,9.5 17.4,10.57 17.45,11.74C16.66,11.58 15.92,11.5 15.22,11.5V11.5C14.66,11.5 14.13,11.54 13.63,11.63L13.27,10.78C14.37,10.3 15.43,9.61 16.29,8.63M12,5A7,7 0 0,0 5,12A7,7 0 0,0 12,19A7,7 0 0,0 19,12A7,7 0 0,0 12,5Z",
"name": "dribbble-box"
},
{
"path": "M6.72,20.78C8.23,20.71 10.07,20.78 11.87,20.78C13.72,20.78 15.62,20.66 17.12,20.78C17.72,20.83 18.28,21.19 18.77,20.87C19.16,20.38 18.87,19.71 18.96,19.05C19.12,17.78 20.28,16.27 18.59,15.95C17.87,16.61 18.35,17.23 17.95,18.05C17.45,19.03 15.68,19.37 14,19.5C12.54,19.62 10,19.76 9.5,18.77C9.04,17.94 9.29,16.65 9.29,15.58C9.29,14.38 9.16,13.22 9.5,12.3C11.32,12.43 13.7,11.69 15,12.5C15.87,13 15.37,14.06 16.38,14.4C17.07,14.21 16.7,13.32 16.66,12.5C16.63,11.94 16.63,11.19 16.66,10.57C16.69,9.73 17,8.76 16.1,8.74C15.39,9.3 15.93,10.23 15.18,10.75C14.95,10.92 14.43,11 14.08,11C12.7,11.17 10.54,11.05 9.38,10.84C9.23,9.16 9.24,6.87 9.38,5.19C10,4.57 11.45,4.54 12.42,4.55C14.13,4.55 16.79,4.7 17.3,5.55C17.58,6 17.36,7 17.85,7.1C18.85,7.33 18.36,5.55 18.41,4.73C18.44,4.11 18.71,3.72 18.59,3.27C18.27,2.83 17.79,3.05 17.5,3.09C14.35,3.5 9.6,3.27 6.26,3.27C5.86,3.27 5.16,3.07 4.88,3.54C4.68,4.6 6.12,4.16 6.62,4.73C6.79,4.91 7.03,5.73 7.08,6.28C7.23,7.74 7.08,9.97 7.08,12.12C7.08,14.38 7.26,16.67 7.08,18.05C7,18.53 6.73,19.3 6.62,19.41C6,20.04 4.34,19.35 4.5,20.69C5.09,21.08 5.93,20.82 6.72,20.78Z",
"name": "etsy"
},
{
"path": "M12,17.5C10.15,17.5 8.42,16.56 7.41,15L17.41,12.75L22.08,11.75C22.05,10.32 21.71,8.92 21.08,7.64C18.66,2.61 12.62,0.5 7.58,2.92C2.55,5.34 0.44,11.38 2.86,16.41C5.29,21.44 11.33,23.56 16.36,21.14C18.5,20.09 20.25,18.31 21.22,16.11L16.61,15C15.6,16.57 13.86,17.5 12,17.5M12,6.5C13.76,6.5 15.41,7.34 16.44,8.77L6.57,11.19C6.96,8.5 9.28,6.5 12,6.5Z",
"name": "eventbrite"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M18,5H15.5A3.5,3.5 0 0,0 12,8.5V11H10V14H12V21H15V14H18V11H15V9A1,1 0 0,1 16,8H18V5Z",
"name": "facebook-box"
},
{
"path": "M21,12A9,9 0 0,1 12,21H4.5L9.74,15.76L11.16,17.17L9.33,19H12A7,7 0 0,0 19,12V7L21,5V12M3,12A9,9 0 0,1 12,3H19.5L14.26,8.24L12.84,6.83L14.67,5H12A7,7 0 0,0 5,12V17L3,19V12Z",
"name": "flattr"
},
{
"path": "M11,12C11,14.5 9,16.5 6.5,16.5C4,16.5 2,14.5 2,12C2,9.5 4,7.5 6.5,7.5C9,7.5 11,9.5 11,12M17.5,7.5C15,7.5 13,9.5 13,12C13,14.5 15,16.5 17.5,16.5C20,16.5 22,14.5 22,12C22,9.5 20,7.5 17.5,7.5Z",
"name": "flickr"
},
{
"path": "M17,5L16.57,7.5C16.5,7.73 16.2,8 15.91,8C15.61,8 12,8 12,8C11.53,8 10.95,8.32 10.95,8.79V9.2C10.95,9.67 11.53,10 12,10C12,10 14.95,10 15.28,10C15.61,10 15.93,10.36 15.86,10.71C15.79,11.07 14.94,13.28 14.9,13.5C14.86,13.67 14.64,14 14.25,14C13.92,14 11.37,14 11.37,14C10.85,14 10.69,14.07 10.34,14.5C10,14.94 7.27,18.1 7.27,18.1C7.24,18.13 7,18.04 7,18V5C7,4.7 7.61,4 8,4C8,4 16.17,4 16.5,4C16.82,4 17.08,4.61 17,5M17,14.45C17.11,13.97 18.78,6.72 19.22,4.55M17.58,2C17.58,2 8.38,2 6.91,2C5.43,2 5,3.11 5,3.8C5,4.5 5,20.76 5,20.76C5,21.54 5.42,21.84 5.66,21.93C5.9,22.03 6.55,22.11 6.94,21.66C6.94,21.66 11.65,16.22 11.74,16.13C11.87,16 11.87,16 12,16C12.26,16 14.2,16 15.26,16C16.63,16 16.85,15 17,14.45C17.11,13.97 18.78,6.72 19.22,4.55C19.56,2.89 19.14,2 17.58,2Z",
"name": "foursquare"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H14.56C14.24,20.93 14.23,20.32 14.23,20.11L14.24,17.64C14.24,16.8 13.95,16.25 13.63,15.97C15.64,15.75 17.74,15 17.74,11.53C17.74,10.55 17.39,9.74 16.82,9.11C16.91,8.89 17.22,7.97 16.73,6.73C16.73,6.73 15.97,6.5 14.25,7.66C13.53,7.46 12.77,7.36 12,7.35C11.24,7.36 10.46,7.46 9.75,7.66C8.03,6.5 7.27,6.73 7.27,6.73C6.78,7.97 7.09,8.89 7.18,9.11C6.61,9.74 6.26,10.55 6.26,11.53C6.26,15 8.36,15.75 10.36,16C10.1,16.2 9.87,16.6 9.79,17.18C9.27,17.41 7.97,17.81 7.17,16.43C7.17,16.43 6.69,15.57 5.79,15.5C5.79,15.5 4.91,15.5 5.73,16.05C5.73,16.05 6.32,16.33 6.73,17.37C6.73,17.37 7.25,19.12 9.76,18.58L9.77,20.11C9.77,20.32 9.75,20.93 9.43,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3Z",
"name": "github-box"
},
{
"path": "M20.38,8.53C20.54,8.13 21.06,6.54 20.21,4.39C20.21,4.39 18.9,4 15.91,6C14.66,5.67 13.33,5.62 12,5.62C10.68,5.62 9.34,5.67 8.09,6C5.1,3.97 3.79,4.39 3.79,4.39C2.94,6.54 3.46,8.13 3.63,8.53C2.61,9.62 2,11 2,12.72C2,19.16 6.16,20.61 12,20.61C17.79,20.61 22,19.16 22,12.72C22,11 21.39,9.62 20.38,8.53M12,19.38C7.88,19.38 4.53,19.19 4.53,15.19C4.53,14.24 5,13.34 5.8,12.61C7.14,11.38 9.43,12.03 12,12.03C14.59,12.03 16.85,11.38 18.2,12.61C19,13.34 19.5,14.23 19.5,15.19C19.5,19.18 16.13,19.38 12,19.38M8.86,13.12C8.04,13.12 7.36,14.12 7.36,15.34C7.36,16.57 8.04,17.58 8.86,17.58C9.69,17.58 10.36,16.58 10.36,15.34C10.36,14.11 9.69,13.12 8.86,13.12M15.14,13.12C14.31,13.12 13.64,14.11 13.64,15.34C13.64,16.58 14.31,17.58 15.14,17.58C15.96,17.58 16.64,16.58 16.64,15.34C16.64,14.11 16,13.12 15.14,13.12Z",
"name": "github-face"
},
{
"path": "M8,2A3,3 0 0,0 5,5V16.5H8V5H19A3,3 0 0,0 16,2H8M16,7.5V19H5A3,3 0 0,0 8,22H16A3,3 0 0,0 19,19V7.5H16Z",
"name": "glassdoor"
},
{
"path": "M2,22L8.5,2H15.4L9.2,20C9.2,20 8.6,22 7,22C5.9,22 2,22 2,22M16.4,5L13,15L15,20.7C15,20.7 15.4,22 17,22C18.3,22 22,22 22,22L16.4,5Z",
"name": "google-adwords"
},
{
"path": "M19,3H13V8L17,7L16,11H21V5C21,3.89 20.1,3 19,3M17,17L13,16V21H19A2,2 0 0,0 21,19V13H16M8,13H3V19A2,2 0 0,0 5,21H11V16L7,17M3,5V11H8L7,7L11,8V3H5C3.89,3 3,3.89 3,5Z",
"name": "google-pages"
},
{
"path": "M12,1.5A9,9 0 0,1 21,10.5C21,13.11 19.89,15.47 18.11,17.11L17.05,16.05C18.55,14.68 19.5,12.7 19.5,10.5A7.5,7.5 0 0,0 12,3A7.5,7.5 0 0,0 4.5,10.5C4.5,12.7 5.45,14.68 6.95,16.05L5.89,17.11C4.11,15.47 3,13.11 3,10.5A9,9 0 0,1 12,1.5M12,4.5A6,6 0 0,1 18,10.5C18,12.28 17.22,13.89 16,15L14.92,13.92C15.89,13.1 16.5,11.87 16.5,10.5C16.5,8 14.5,6 12,6C9.5,6 7.5,8 7.5,10.5C7.5,11.87 8.11,13.1 9.08,13.92L8,15C6.78,13.89 6,12.28 6,10.5A6,6 0 0,1 12,4.5M8.11,17.65L11.29,14.46C11.68,14.07 12.32,14.07 12.71,14.46L15.89,17.65C16.28,18.04 16.28,18.67 15.89,19.06L12.71,22.24C12.32,22.63 11.68,22.63 11.29,22.24L8.11,19.06C7.72,18.67 7.72,18.04 8.11,17.65Z",
"name": "google-physical-web"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M19.5,12H18V10.5H17V12H15.5V13H17V14.5H18V13H19.5V12M9.65,11.36V12.9H12.22C12.09,13.54 11.45,14.83 9.65,14.83C8.11,14.83 6.89,13.54 6.89,12C6.89,10.46 8.11,9.17 9.65,9.17C10.55,9.17 11.13,9.56 11.45,9.88L12.67,8.72C11.9,7.95 10.87,7.5 9.65,7.5C7.14,7.5 5.15,9.5 5.15,12C5.15,14.5 7.14,16.5 9.65,16.5C12.22,16.5 13.96,14.7 13.96,12.13C13.96,11.81 13.96,11.61 13.89,11.36H9.65Z",
"name": "google-plus-box"
},
{
"path": "M14,20.95H20V10.78L8,7.34V3.05H4V20.95H10V15.31H14V20.95Z",
"name": "houzz"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M13.5,18.71H18V11.09L9,8.5V5.29H6V18.71H10.5V14.5H13.5V18.71Z",
"name": "houzz-box"
},
{
"path": "M10,5A1,1 0 0,0 9,4H8V2H16V4H15A1,1 0 0,0 14,5V19A1,1 0 0,0 15,20H16V22H8V20H9A1,1 0 0,0 10,19V5Z",
"name": "instapaper"
},
{
"path": "M7.85,17.07C7.03,17.17 3.5,17.67 4.06,20.26C4.69,23.3 9.87,22.59 9.83,19C9.81,16.57 9.83,9.2 9.83,9.2C9.83,9.2 9.76,8.53 10.43,8.39L18.19,6.79C18.19,6.79 18.83,6.65 18.83,7.29C18.83,7.89 18.83,14.2 18.83,14.2C18.83,14.2 18.9,14.83 18.12,15C17.34,15.12 13.91,15.4 14.19,18C14.5,21.07 20,20.65 20,17.07V2.61C20,2.61 20.04,1.62 18.9,1.87L9.5,3.78C9.5,3.78 8.66,3.96 8.66,4.77C8.66,5.5 8.66,16.11 8.66,16.11C8.66,16.11 8.66,16.96 7.85,17.07Z",
"name": "itunes"
},
{
"path": "M2,5.69C8.92,1.07 11.1,7 11.28,10.27C11.46,13.53 8.29,17.64 4.31,14.92V20.3L2,18.77V5.69M4.22,7.4V12.78C7.84,14.95 9.08,13.17 9.08,10.09C9.08,5.74 6.57,5.59 4.22,7.4M15.08,4.15C15.08,4.15 14.9,7.64 15.08,11.07C15.44,14.5 19.69,11.84 19.69,11.84V4.92L22,5.2V14.44C22,20.6 15.85,20.3 15.85,20.3L15.08,18C20.46,18 19.78,14.43 19.78,14.43C13.27,16.97 12.77,12.61 12.77,12.61V5.69L15.08,4.15Z",
"name": "language-python-text"
},
{
"path": "M18,17.93C15.92,17.92 14.81,16.9 14.04,15.09L13.82,14.6L11.92,10.23C11.29,8.69 9.72,7.64 7.96,7.64C5.57,7.64 3.63,9.59 3.63,12C3.63,14.41 5.57,16.36 7.96,16.36C9.62,16.36 11.08,15.41 11.8,14L12.57,15.81C11.5,17.15 9.82,18 7.96,18C4.67,18 2,15.32 2,12C2,8.69 4.67,6 7.96,6C10.44,6 12.45,7.34 13.47,9.7C13.54,9.89 14.54,12.24 15.42,14.24C15.96,15.5 16.42,16.31 17.91,16.36C19.38,16.41 20.39,15.5 20.39,14.37C20.39,13.26 19.62,13 18.32,12.56C16,11.79 14.79,11 14.79,9.15C14.79,7.33 16,6.12 18,6.12C19.31,6.12 20.24,6.7 20.89,7.86L19.62,8.5C19.14,7.84 18.61,7.57 17.94,7.57C17,7.57 16.33,8.23 16.33,9.1C16.33,10.34 17.43,10.53 18.97,11.03C21.04,11.71 22,12.5 22,14.42C22,16.45 20.27,17.93 18,17.93Z",
"name": "lastfm"
},
{
"path": "M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M18.5,18.5V13.2A3.26,3.26 0 0,0 15.24,9.94C14.39,9.94 13.4,10.46 12.92,11.24V10.13H10.13V18.5H12.92V13.57C12.92,12.8 13.54,12.17 14.31,12.17A1.4,1.4 0 0,1 15.71,13.57V18.5H18.5M6.88,8.56A1.68,1.68 0 0,0 8.56,6.88C8.56,5.95 7.81,5.19 6.88,5.19A1.69,1.69 0 0,0 5.19,6.88C5.19,7.81 5.95,8.56 6.88,8.56M8.27,18.5V10.13H5.5V18.5H8.27Z",
"name": "linkedin-box"
},
{
"path": "M9.56,12.5C9.56,12.6 9.5,12.72 9.4,12.79C9.2,12.97 8.89,12.94 8.71,12.74C8.63,12.65 8.59,12.53 8.59,12.41V8.5H5.66V13.39A2.44,2.44 0 0,0 8.1,15.83C8.68,15.83 9.24,15.62 9.68,15.24C9.64,15.6 9.43,15.93 9.11,16.11C8.75,16.31 8.35,16.42 7.94,16.41C7.46,16.41 7,16.3 6.56,16.09L6.39,16V18.6C7.04,18.86 7.74,19 8.44,19C9.47,19 10.46,18.66 11.25,18C12.08,17.25 12.54,16.18 12.5,15.06V8.5H9.56V12.5M4.93,13.39V5.59H2V12.9C1.84,14.35 2.88,15.65 4.33,15.81C4.41,15.82 4.5,15.83 4.56,15.83V15.83C4.93,15.83 5.29,15.74 5.63,15.59L5.75,15.5L5.65,15.41C5.17,14.85 4.91,14.13 4.93,13.39M22,11.39V8.5H21C20.59,6.38 18.53,5 16.41,5.41C16.17,5.45 15.94,5.5 15.71,5.61C14.28,6.24 13.33,7.62 13.26,9.18V15.83H13.39C14.95,15.76 16.19,14.47 16.19,12.9H17.41V10H16.15V9.17C16.15,8.86 16.32,8.57 16.59,8.41C17.06,8.13 17.68,8.28 17.96,8.76C18.05,8.91 18.09,9.07 18.1,9.24V11.93C18.07,14.05 19.75,15.79 21.87,15.83H22V12.9H22A1,1 0 0,1 21,11.9V11.41L22,11.39Z",
"name": "lyft"
},
{
"path": "M15.45,11.91C15.34,9.7 13.7,8.37 11.72,8.37H11.64C9.35,8.37 8.09,10.17 8.09,12.21C8.09,14.5 9.62,15.95 11.63,15.95C13.88,15.95 15.35,14.3 15.46,12.36M11.65,6.39C13.18,6.39 14.62,7.07 15.67,8.13V8.13C15.67,7.62 16,7.24 16.5,7.24H16.61C17.35,7.24 17.5,7.94 17.5,8.16V16.06C17.46,16.58 18.04,16.84 18.37,16.5C19.64,15.21 21.15,9.81 17.58,6.69C14.25,3.77 9.78,4.25 7.4,5.89C4.88,7.63 3.26,11.5 4.83,15.11C6.54,19.06 11.44,20.24 14.35,19.06C15.83,18.47 16.5,20.46 15,21.11C12.66,22.1 6.23,22 3.22,16.79C1.19,13.27 1.29,7.08 6.68,3.87C10.81,1.42 16.24,2.1 19.5,5.5C22.95,9.1 22.75,15.8 19.4,18.41C17.89,19.59 15.64,18.44 15.66,16.71L15.64,16.15C14.59,17.2 13.18,17.81 11.65,17.81C8.63,17.81 6,15.15 6,12.13C6,9.08 8.63,6.39 11.65,6.39Z",
"name": "mail-ru"
},
{
"path": "M20.93,14C20.66,15.4 18.5,16.95 15.97,17.25C14.66,17.4 13.38,17.55 12,17.5C9.76,17.38 8,16.95 8,16.95L8.03,17.57C8.32,19.78 10.22,19.92 12.03,20C13.85,20.04 15.47,19.53 15.47,19.53L15.55,21.17C15.55,21.17 14.27,21.86 12,22C10.75,22.05 9.2,21.95 7.39,21.47C3.47,20.43 2.79,16.25 2.69,12L2.68,8.57C2.68,4.23 5.5,2.96 5.5,2.96C6.95,2.3 9.41,2 11.97,2H12.03C14.59,2 17.05,2.3 18.5,2.96C18.5,2.96 21.33,4.23 21.33,8.57C21.33,8.57 21.36,11.77 20.93,14M8.33,10.32C8.33,9.54 7.7,8.91 6.93,8.91C6.15,8.91 5.5,9.54 5.5,10.32C5.5,11.09 6.15,11.72 6.93,11.72A1.4,1.4 0 0,0 8.33,10.32M13.41,10.32A1.41,1.41 0 0,0 12,8.91A1.41,1.41 0 0,0 10.59,10.32C10.59,11.09 11.22,11.72 12,11.72C12.78,11.72 13.41,11.09 13.41,10.32M18.5,10.32C18.5,9.54 17.85,8.91 17.07,8.91C16.3,8.91 15.67,9.54 15.67,10.32A1.4,1.4 0 0,0 17.07,11.72C17.85,11.72 18.5,11.09 18.5,10.32Z",
"name": "mastodon-variant"
},
{
"path": "M4.37,7.3C4.4,7.05 4.3,6.81 4.12,6.65L2.25,4.4V4.06H8.05L12.53,13.89L16.47,4.06H22V4.4L20.4,5.93C20.27,6.03 20.2,6.21 20.23,6.38V17.62C20.2,17.79 20.27,17.97 20.4,18.07L21.96,19.6V19.94H14.12V19.6L15.73,18.03C15.89,17.88 15.89,17.83 15.89,17.59V8.5L11.4,19.9H10.8L5.57,8.5V16.14C5.5,16.46 5.63,16.78 5.86,17L7.96,19.57V19.9H2V19.57L4.1,17C4.33,16.78 4.43,16.46 4.37,16.14V7.3Z",
"name": "medium"
},
{
"path": "M19.61,14.86C19.61,16.68 18.3,18.25 16.5,18.55C16.29,18.59 16.07,18.62 15.84,18.61C15.76,18.61 15.73,18.64 15.71,18.71C15.35,19.74 14.64,20.35 13.57,20.5C12.86,20.6 12.22,20.41 11.65,19.97C11.57,19.9 11.5,19.9 11.44,19.96C10.78,20.43 10.04,20.64 9.23,20.59C7.66,20.5 6.33,19.29 6.08,17.74C6.06,17.63 6.04,17.5 6.04,17.41C6.04,17.32 6,17.29 5.92,17.27C5.44,17.18 5,17 4.63,16.68C3.92,16.13 3.5,15.41 3.4,14.5C3.29,13.5 3.61,12.62 4.32,11.89C4.38,11.83 4.38,11.79 4.34,11.72C4.07,11.24 3.94,10.72 3.96,10.17C4,8.79 4.97,7.65 6.31,7.37C6.46,7.33 6.54,7.27 6.61,7.13C7.27,5.71 8.37,4.85 9.91,4.56C11,4.36 12,4.58 12.94,5.13C13,5.18 13.08,5.18 13.17,5.16C14.67,4.72 16,5.04 17.12,6.11C17.78,6.74 18.15,7.54 18.26,8.46C18.28,8.66 18.29,8.86 18.28,9.06C18.27,9.14 18.29,9.17 18.37,9.19C19.04,9.44 19.5,9.91 19.71,10.6C19.96,11.45 19.75,12.21 19.11,12.83C19.05,12.89 19.07,12.92 19.1,12.97C19.44,13.56 19.61,14.18 19.61,14.86M12.93,14.57C12.93,15.34 13.43,16 14.14,16.26C14.5,16.37 14.85,16.43 15.22,16.45C15.5,16.46 15.75,16.44 16,16.32C16.19,16.22 16.28,16.06 16.27,15.85C16.26,15.64 16.16,15.5 15.96,15.4C15.89,15.37 15.82,15.34 15.74,15.33C15.5,15.29 15.3,15.26 15.07,15.21C14.71,15.14 14.55,14.95 14.55,14.57C14.54,14.24 14.63,13.93 14.73,13.63C14.92,13.07 15.17,12.53 15.41,12C15.64,11.47 15.88,10.95 16.04,10.4C16.13,10.1 16.18,9.8 16.09,9.5C15.97,9 15.69,8.7 15.2,8.61C14.75,8.5 14.3,8.5 13.9,8.78C13.76,8.87 13.63,8.85 13.5,8.74C13.43,8.67 13.34,8.58 13.26,8.5C12.84,8.12 12.3,8.1 11.85,8.45C11.67,8.59 11.5,8.76 11.33,8.89C11.16,9 11,9.03 10.79,8.92C10.6,8.83 10.42,8.74 10.23,8.65C10.03,8.57 9.85,8.46 9.63,8.44C8.95,8.38 8.24,8.79 7.94,9.41C7.8,9.68 7.69,9.96 7.59,10.25C7.11,11.57 6.72,12.91 6.32,14.26C6.14,14.86 6.35,15.45 6.86,15.77C7.26,16 7.69,16.09 8.14,15.95C8.5,15.84 8.71,15.55 8.85,15.22C9.31,14.13 9.73,13 10.17,11.91C10.29,11.61 10.41,11.3 10.54,11C10.67,10.7 11.04,10.6 11.26,10.8C11.4,10.92 11.44,11.09 11.42,11.26C11.41,11.45 11.34,11.62 11.27,11.79C11,12.5 10.69,13.24 10.4,13.97C10.34,14.11 10.28,14.26 10.25,14.42C10.21,14.69 10.31,14.93 10.54,15C10.76,15.12 11,15.14 11.23,15.05C11.5,14.95 11.67,14.74 11.79,14.5C12.22,13.65 12.65,12.8 13.08,11.95C13.28,11.56 13.5,11.17 13.68,10.78C13.76,10.64 13.85,10.5 14,10.41C14.12,10.33 14.25,10.33 14.38,10.4C14.5,10.47 14.5,10.6 14.5,10.73C14.5,10.8 14.5,10.87 14.47,10.93C14.41,11.07 14.36,11.2 14.3,11.33C13.94,12.09 13.57,12.84 13.22,13.59C13.07,13.91 12.91,14.23 12.93,14.57M17.96,20.12C17.96,19.62 17.54,19.2 17.04,19.2C16.5,19.2 16.1,19.61 16.1,20.12A0.93,0.93 0 0,0 17.03,21.05A0.93,0.93 0 0,0 17.96,20.12M2.38,12.46C2.86,12.46 3.27,12.05 3.27,11.57C3.27,11.09 2.87,10.69 2.39,10.69C1.89,10.69 1.5,11.08 1.5,11.57C1.5,12.06 1.89,12.46 2.38,12.46M13.26,2.55C12.77,2.55 12.37,2.94 12.37,3.42C12.37,3.91 12.77,4.3 13.25,4.3C13.74,4.3 14.13,3.92 14.13,3.43C14.13,2.95 13.74,2.55 13.26,2.55M20.45,8.03C20.45,7.63 20.11,7.29 19.71,7.29C19.3,7.28 18.95,7.63 18.95,8.04C18.95,8.45 19.28,8.78 19.7,8.78C20.12,8.78 20.46,8.45 20.45,8.03M5.04,5.89C5.04,6.27 5.34,6.56 5.71,6.56C6.09,6.56 6.39,6.26 6.38,5.88C6.38,5.5 6.09,5.22 5.72,5.22C5.33,5.22 5.04,5.5 5.04,5.89M12.06,21.44C12.06,21.12 11.81,20.86 11.5,20.86C11.16,20.86 10.91,21.11 10.91,21.44C10.91,21.75 11.16,22 11.5,22C11.8,22 12.06,21.75 12.06,21.44M21,12.5C20.71,12.5 20.45,12.78 20.45,13.08A0.55,0.55 0 0,0 21,13.63C21.33,13.63 21.57,13.4 21.57,13.08C21.57,12.77 21.33,12.5 21,12.5M7.62,2C7.35,2 7.14,2.2 7.14,2.47C7.14,2.73 7.35,2.94 7.62,2.94A0.47,0.47 0 0,0 8.09,2.47C8.09,2.2 7.89,2 7.62,2M22.08,10C21.86,10 21.67,10.17 21.66,10.4C21.66,10.63 21.85,10.82 22.08,10.82C22.32,10.82 22.5,10.64 22.5,10.41C22.5,10.17 22.32,10 22.08,10M5.5,18.26C5.5,18.04 5.29,17.85 5.06,17.84C4.84,17.84 4.65,18.03 4.65,18.27C4.65,18.5 4.84,18.68 5.07,18.68C5.3,18.68 5.5,18.5 5.5,18.26Z",
"name": "meetup"
},
{
"path": "M21.11,18.5C20.97,18.5 20.83,18.44 20.71,18.36C20.37,18.13 20.28,17.68 20.5,17.34C21.18,16.34 21.54,15.16 21.54,13.93C21.54,12.71 21.18,11.53 20.5,10.5C20.28,10.18 20.37,9.73 20.71,9.5C21.04,9.28 21.5,9.37 21.72,9.7C22.56,10.95 23,12.41 23,13.93C23,15.45 22.56,16.91 21.72,18.16C21.58,18.37 21.35,18.5 21.11,18.5M19,17.29C18.88,17.29 18.74,17.25 18.61,17.17C18.28,16.94 18.19,16.5 18.42,16.15C18.86,15.5 19.1,14.73 19.1,13.93C19.1,13.14 18.86,12.37 18.42,11.71C18.19,11.37 18.28,10.92 18.61,10.69C18.95,10.47 19.4,10.55 19.63,10.89C20.24,11.79 20.56,12.84 20.56,13.93C20.56,15 20.24,16.07 19.63,16.97C19.5,17.18 19.25,17.29 19,17.29M14.9,15.73C15.89,15.73 16.7,14.92 16.7,13.93C16.7,13.17 16.22,12.5 15.55,12.25C15.5,12.55 15.43,12.85 15.34,13.14C15.23,13.44 14.95,13.64 14.64,13.64C14.57,13.64 14.5,13.62 14.41,13.6C14.03,13.47 13.82,13.06 13.95,12.67C14.09,12.24 14.17,11.78 14.17,11.32C14.17,8.93 12.22,7 9.82,7C8.1,7 6.56,8 5.87,9.5C6.54,9.7 7.16,10.04 7.66,10.54C7.95,10.83 7.95,11.29 7.66,11.58C7.38,11.86 6.91,11.86 6.63,11.58C6.17,11.12 5.56,10.86 4.9,10.86C3.56,10.86 2.46,11.96 2.46,13.3C2.46,14.64 3.56,15.73 4.9,15.73H14.9M15.6,10.75C17.06,11.07 18.17,12.37 18.17,13.93C18.17,15.73 16.7,17.19 14.9,17.19H4.9C2.75,17.19 1,15.45 1,13.3C1,11.34 2.45,9.73 4.33,9.45C5.12,7.12 7.33,5.5 9.82,5.5C12.83,5.5 15.31,7.82 15.6,10.75Z",
"name": "mixcloud"
},
{
"path": "M5.68,3.96L11.41,11.65C11.55,11.84 11.55,12.1 11.41,12.29L5.65,20L5.5,20.18C4.76,21 3.47,21.07 2.64,20.31C1.85,19.59 1.79,18.37 2.43,17.5L6.56,11.97L2.46,6.47C1.83,5.62 1.88,4.39 2.67,3.67L2.82,3.54C3.73,2.87 5,3.05 5.68,3.96M18.32,3.96C19,3.05 20.27,2.87 21.18,3.54L21.33,3.67C22.12,4.39 22.17,5.61 21.54,6.47L17.44,11.97L21.57,17.5C22.21,18.36 22.15,19.59 21.36,20.31C20.53,21.07 19.24,21 18.5,20.18L18.35,20L12.59,12.29C12.45,12.1 12.45,11.84 12.59,11.65L18.32,3.96Z",
"name": "mixer"
},
{
"path": "M3.25,4.03L19.95,20.73L18.7,22L14.86,18.13C14.77,18.12 14.68,18.09 14.59,18.05C14.26,17.89 14.14,17.62 14.11,17.38L12.18,15.45C12.14,15.53 12.09,15.6 12.05,15.66C11.62,16.26 11.19,16.26 10.86,16.04C10.54,15.83 5.5,12 5.23,11.87C4.95,11.76 4.85,12.03 5.12,13.5C5.39,15 4.95,15.39 4.57,15.45C4.2,15.5 3.06,15.18 3,12.14C2.95,9.11 3.76,8.62 4.14,8.62C4.6,8.62 7.08,10.69 8.84,12.12L2,5.28L3.25,4.03M18.38,16.56C18.75,15.4 19.12,13.8 19.1,12.03V12C19.14,8.5 17.66,5.58 17.66,5.58C17.66,5.58 17.42,4.72 18.12,4.39C18.83,4.06 19.3,4.61 19.3,4.61C21.12,8.22 21,11.64 21,12C21,12.27 21.09,14.96 19.88,18.05L18.38,16.56M15.14,13.31C15.19,12.92 15.22,12.5 15.24,12.03V12C15.14,8.5 14.13,7.21 14.13,7.21C14.13,7.21 13.89,6.34 14.59,6C15.3,5.69 15.77,6.23 15.77,6.23C17.26,8.94 17.16,11.64 17.14,12C17.15,12.2 17.2,13.38 16.82,15L15.14,13.31M10.2,8.38C10.23,7.77 10.59,7.64 10.59,7.64C10.59,7.64 11.19,7.37 11.57,7.8C11.91,8.19 12.72,9.57 12.89,11.07L10.2,8.38Z",
"name": "nfc-off"
},
{ "path": "M20,4H4V20H12V8H16V20H20V4", "name": "npm-variant" },
{
"path": "M3,3V21H21V3H3M6,6H18V18H15V9H12V18H6V6Z",
"name": "npm-variant-outline"
},
{
"path": "M8.32,21.97C8.21,21.92 8.08,21.76 8.06,21.65C8.03,21.5 8,21.76 8.66,17.56C9.26,13.76 9.25,13.82 9.33,13.71C9.46,13.54 9.44,13.54 10.94,13.53C12.26,13.5 12.54,13.5 13.13,13.41C16.38,12.96 18.39,11.05 19.09,7.75C19.13,7.53 19.17,7.34 19.18,7.34C19.18,7.33 19.25,7.38 19.33,7.44C20.36,8.22 20.71,9.66 20.32,11.58C19.86,13.87 18.64,15.39 16.74,16.04C15.93,16.32 15.25,16.43 14.05,16.46C13.25,16.5 13.23,16.5 13,16.65C12.83,16.82 12.84,16.79 12.45,19.2C12.18,20.9 12.08,21.45 12.04,21.55C11.97,21.71 11.83,21.85 11.67,21.93L11.56,22H10C8.71,22 8.38,22 8.32,21.97V21.97M3.82,19.74C3.63,19.64 3.5,19.47 3.5,19.27C3.5,19 6.11,2.68 6.18,2.5C6.27,2.32 6.5,2.13 6.68,2.06L6.83,2H10.36C14.27,2 14.12,2 15,2.2C17.62,2.75 18.82,4.5 18.37,7.13C17.87,10.06 16.39,11.8 13.87,12.43C13,12.64 12.39,12.7 10.73,12.7C9.42,12.7 9.32,12.71 9.06,12.85C8.8,13 8.59,13.27 8.5,13.6C8.46,13.67 8.23,15.07 7.97,16.7C7.71,18.33 7.5,19.69 7.5,19.72L7.47,19.78H5.69C4.11,19.78 3.89,19.78 3.82,19.74V19.74Z",
"name": "paypal"
},
{
"path": "M12,7A2,2 0 0,1 10,9A2,2 0 0,1 8,7C7.37,7.84 7,8.87 7,10A5,5 0 0,0 12,15A5,5 0 0,0 17,10A5,5 0 0,0 12,5C11.57,5 11.16,5.05 10.77,5.15C11.5,5.45 12,6.17 12,7M12,2A8,8 0 0,1 20,10C20,11.05 19.8,12.04 19.43,12.96C17.89,17.38 13.63,22 12,22C10.37,22 6.11,17.38 4.57,12.96C4.2,12.04 4,11.05 4,10A8,8 0 0,1 12,2Z",
"name": "periscope"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H9.29C9.69,20.33 10.19,19.38 10.39,18.64L11.05,16.34C11.36,16.95 12.28,17.45 13.22,17.45C16.17,17.45 18.22,14.78 18.22,11.45C18.22,8.28 15.64,5.89 12.3,5.89C8.14,5.89 5.97,8.67 5.97,11.72C5.97,13.14 6.69,14.89 7.91,15.45C8.08,15.56 8.19,15.5 8.19,15.34L8.47,14.28C8.5,14.14 8.5,14.06 8.41,14C7.97,13.45 7.69,12.61 7.69,11.78C7.69,9.64 9.3,7.61 12.03,7.61C14.42,7.61 16.08,9.19 16.08,11.5C16.08,14.11 14.75,15.95 13.03,15.95C12.05,15.95 11.39,15.11 11.55,14.17C11.83,13.03 12.39,11.83 12.39,11C12.39,10.22 12,9.61 11.16,9.61C10.22,9.61 9.39,10.61 9.39,11.95C9.39,12.83 9.66,13.39 9.66,13.39L8.55,18.17C8.39,19 8.47,20.25 8.55,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3Z",
"name": "pinterest-box"
},
{
"path": "M21.9,4.26C21.64,3.55 20.96,3.07 20.2,3.07H20.19L18.46,3.07H3.81C3.07,3.07 2.39,3.54 2.12,4.24C2.04,4.45 2,4.66 2,4.88V10.92L2.07,12.12C2.36,14.85 3.78,17.23 5.97,18.9C6,18.93 6.05,18.96 6.09,19H6.11C7.29,19.86 8.6,20.44 10,20.73C10.68,20.86 11.35,20.93 12,20.93C12.63,20.93 13.25,20.87 13.85,20.76C13.93,20.75 14,20.73 14.07,20.72C14.09,20.71 14.11,20.7 14.14,20.69C15.5,20.4 16.76,19.83 17.89,19H17.91C17.95,18.96 18,18.93 18.03,18.9C20.22,17.23 21.64,14.85 21.93,12.12L22,10.92V4.88C22,4.68 21.97,4.47 21.9,4.26M17.67,10.55L12.96,15.06C12.7,15.32 12.35,15.44 12,15.44C11.67,15.44 11.33,15.32 11.06,15.06L6.36,10.55C5.81,10.03 5.79,9.16 6.32,8.61C6.84,8.06 7.71,8.05 8.26,8.57L12,12.17L15.77,8.57C16.31,8.05 17.18,8.07 17.71,8.61C18.23,9.16 18.21,10.03 17.67,10.55Z",
"name": "pocket"
},
{
"path": "M12,3A9,9 0 0,1 21,12C21,13.76 20.5,15.4 19.62,16.79L21,18.17V20A1,1 0 0,1 20,21H18.18L16.79,19.62C15.41,20.5 13.76,21 12,21A9,9 0 0,1 3,12A9,9 0 0,1 12,3M12,7A5,5 0 0,0 7,12A5,5 0 0,0 12,17C12.65,17 13.26,16.88 13.83,16.65L10.95,13.77C10.17,13 10.17,11.72 10.95,10.94C11.73,10.16 13,10.16 13.78,10.94L16.66,13.82C16.88,13.26 17,12.64 17,12A5,5 0 0,0 12,7Z",
"name": "quicktime"
},
{
"path": "M18.61,5.89C18.6,5.79 18.5,5.73 18.44,5.73C18.37,5.72 16.83,5.61 16.83,5.61C16.83,5.61 15.76,4.55 15.65,4.43C15.53,4.31 15.3,4.35 15.21,4.37C15.2,4.37 15,4.44 14.61,4.55C14.25,3.5 13.62,2.58 12.43,2.58C12.11,2.18 11.72,2 11.38,2C8.8,2 7.57,5.22 7.18,6.86C6.18,7.17 5.47,7.39 5.37,7.42C4.82,7.6 4.8,7.62 4.73,8.14C4.67,8.54 3.21,19.86 3.21,19.86L14.61,22L20.79,20.66C20.79,20.66 18.62,6 18.61,5.89M14,4.76C13.69,4.85 13.37,4.95 13,5.06C13,5 13,4.93 13,4.85C13,4.21 12.93,3.7 12.79,3.29C13.35,3.36 13.73,4 14,4.76M12.08,3.42C12.24,3.82 12.34,4.39 12.34,5.16C12.34,5.2 12.34,5.24 12.34,5.27C11.71,5.46 11.03,5.68 10.35,5.89C10.73,4.4 11.45,3.69 12.08,3.42M11.31,2.69C11.42,2.69 11.53,2.73 11.64,2.8C10.81,3.19 9.93,4.17 9.55,6.12C9,6.3 8.47,6.46 8,6.62C8.42,5.12 9.46,2.69 11.31,2.69M12.5,9.15L11.76,11.42C11.76,11.42 11.09,11.06 10.27,11.06C9.07,11.06 9,11.81 9,12C9,13.04 11.71,13.43 11.71,15.86C11.71,17.77 10.5,19 8.87,19C6.91,19 5.91,17.78 5.91,17.78L6.43,16.05C6.43,16.05 7.46,16.93 8.33,16.93C8.9,16.93 9.13,16.5 9.13,16.16C9.13,14.81 6.92,14.75 6.92,12.53C6.92,10.66 8.26,8.85 10.97,8.85C12,8.85 12.5,9.15 12.5,9.15M15.43,5.29L16.75,6.6L17.71,6.68C18.05,9 19.19,16.73 19.66,19.88L14.66,20.97L15.43,5.29Z",
"name": "shopify"
},
{
"path": "M7.47,17.19C7.37,17.95 7.08,18.21 6.19,18.21C5.27,18.21 4.87,17.79 4.81,16.87L4.61,13.65C4.61,12.91 4.87,12.55 5.86,12.55C7.21,12.55 7.04,13.54 7.64,14.5C8.33,15.62 10,16.35 12.31,16.35C15.17,16.35 17,15.14 17,13.57C17,12.23 15.89,11.39 13.85,11.16L11.5,10.89C7.21,10.42 5.1,9.19 5.1,6.62C5.1,4.07 8.06,2 12.21,2C13.5,2 14.81,2.29 16.29,2.76C16.29,2.26 16.58,2.1 17.3,2.1C18.46,2.1 18.55,2.39 18.62,3.08L18.85,5.88C18.85,6.5 18.39,6.83 17.63,6.83C16.35,6.83 16.55,5.88 15.86,5.07C15.17,4.26 13.79,3.73 12.08,3.73C9.44,3.73 7.7,4.89 7.7,6.5C7.7,7.8 8.92,8.56 11.38,8.82L13.95,9.08C17.7,9.5 19.61,10.92 19.61,13.33C19.61,16.17 16.71,18.08 12.21,18.08C10.56,18.08 9.08,17.77 7.47,17.19M1,16H2V21H23V22H1V16Z",
"name": "slackware"
},
{
"path": "M6,3H18A3,3 0 0,1 21,6V18A3,3 0 0,1 18,21H6A3,3 0 0,1 3,18V6A3,3 0 0,1 6,3M7,6A1,1 0 0,0 6,7V17A1,1 0 0,0 7,18H17A1,1 0 0,0 18,17V7A1,1 0 0,0 17,6H7M9.5,9H14.5A0.5,0.5 0 0,1 15,9.5V14.5A0.5,0.5 0 0,1 14.5,15H9.5A0.5,0.5 0 0,1 9,14.5V9.5A0.5,0.5 0 0,1 9.5,9Z",
"name": "square-inc"
},
{
"path": "M5.5,0H18.5A5.5,5.5 0 0,1 24,5.5V18.5A5.5,5.5 0 0,1 18.5,24H5.5A5.5,5.5 0 0,1 0,18.5V5.5A5.5,5.5 0 0,1 5.5,0M15.39,15.18C15.39,16.76 14.5,17.81 12.85,17.95V12.61C14.55,13.13 15.39,13.66 15.39,15.18M11.65,6V10.88C10.34,10.5 9.03,9.93 9.03,8.43C9.03,6.94 10.18,6.12 11.65,6M15.5,7.6L16.5,6.8C15.62,5.66 14.4,4.92 12.85,4.77V3.8H11.65V3.8L11.65,4.75C9.5,4.89 7.68,6.17 7.68,8.5C7.68,11 9.74,11.78 11.65,12.29V17.96C10.54,17.84 9.29,17.31 8.43,16.03L7.3,16.78C8.2,18.12 9.76,19 11.65,19.14V20.2H12.07L12.85,20.2V19.16C15.35,19 16.7,17.34 16.7,15.14C16.7,12.58 14.81,11.76 12.85,11.19V6.05C14,6.22 14.85,6.76 15.5,7.6Z",
"name": "square-inc-cash"
},
{
"path": "M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V15L6.19,16.31C6.45,17.6 7.6,18.58 8.97,18.58C10.53,18.58 11.8,17.31 11.8,15.75V15.62L15.2,13.19H15.28C17.36,13.19 19.05,11.5 19.05,9.42C19.05,7.34 17.36,5.65 15.28,5.65C13.2,5.65 11.5,7.34 11.5,9.42V9.47L9.13,12.93L8.97,12.92C8.38,12.92 7.83,13.1 7.38,13.41L3,11.6V5A2,2 0 0,1 5,3H19M8.28,17.17C9.08,17.5 10,17.13 10.33,16.33C10.66,15.53 10.28,14.62 9.5,14.29L8.22,13.76C8.71,13.58 9.26,13.57 9.78,13.79C10.31,14 10.72,14.41 10.93,14.94C11.15,15.46 11.15,16.04 10.93,16.56C10.5,17.64 9.23,18.16 8.15,17.71C7.65,17.5 7.27,17.12 7.06,16.67L8.28,17.17M17.8,9.42C17.8,10.81 16.67,11.94 15.28,11.94C13.9,11.94 12.77,10.81 12.77,9.42A2.51,2.51 0 0,1 15.28,6.91C16.67,6.91 17.8,8.04 17.8,9.42M13.4,9.42C13.4,10.46 14.24,11.31 15.29,11.31C16.33,11.31 17.17,10.46 17.17,9.42C17.17,8.38 16.33,7.53 15.29,7.53C14.24,7.53 13.4,8.38 13.4,9.42Z",
"name": "steam-box"
},
{
"path": "M14.92,17.16L16.75,13.53H19.45L14.94,22.5L10.37,13.53H13.07L14.92,17.16M10.63,8.66L8.18,13.55H4.55L10.61,1.5L16.74,13.55H13.11L10.63,8.66Z",
"name": "strava"
},
{
"path": "M12,14C11,14 9,15 9,16C9,18 12,18 12,18V17A1,1 0 0,1 11,16A1,1 0 0,1 12,15V14M12,19C12,19 8,18.5 8,16.5C8,13.5 11,12.75 12,12.75V11.5C11,11.5 7,13 7,16C7,20 12,20 12,20V19M10.07,7.03L11.26,7.56C11.69,5.12 12.84,3.5 12.84,3.5C12.41,4.53 12.13,5.38 11.95,6.05C13.16,3.55 15.61,2 15.61,2C14.43,3.18 13.56,4.46 12.97,5.53C14.55,3.85 16.74,2.75 16.74,2.75C14.05,4.47 12.84,7.2 12.54,7.96L13.09,8.04C13.09,8.56 13.09,9.04 13.34,9.42C14.1,11.31 18,11.47 18,16C18,20.53 13.97,22 11.83,22C9.69,22 5,21.03 5,16C5,10.97 9.95,10.93 10.83,8.92C10.95,8.54 10.07,7.03 10.07,7.03Z",
"name": "tor"
},
{
"path": "M17,11H13V15.5C13,16.44 13.28,17 14.5,17H17V21C17,21 15.54,21.05 14.17,21.05C10.8,21.05 9.5,19 9.5,16.75V11H7V7C10.07,6.74 10.27,4.5 10.5,3H13V7H17",
"name": "tumblr"
},
{
"path": "M16,11H13V14.9C13,15.63 13.14,16 14.1,16H16V19C16,19 14.97,19.1 13.9,19.1C11.25,19.1 10,17.5 10,15.7V11H8V8.2C10.41,8 10.62,6.16 10.8,5H13V8H16M20,2H4C2.89,2 2,2.89 2,4V20A2,2 0 0,0 4,22H20A2,2 0 0,0 22,20V4C22,2.89 21.1,2 20,2Z",
"name": "tumblr-box"
},
{
"path": "M3.75,17L8,12.75V16H18V11.5L20,9.5V16A2,2 0 0,1 18,18H8V21.25L3.75,17M20.25,7L16,11.25V8H6V12.5L4,14.5V8A2,2 0 0,1 6,6H16V2.75L20.25,7Z",
"name": "tumblr-reblog"
},
{
"path": "M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M17.71,9.33C18.19,8.93 18.75,8.45 19,7.92C18.59,8.13 18.1,8.26 17.56,8.33C18.06,7.97 18.47,7.5 18.68,6.86C18.16,7.14 17.63,7.38 16.97,7.5C15.42,5.63 11.71,7.15 12.37,9.95C9.76,9.79 8.17,8.61 6.85,7.16C6.1,8.38 6.75,10.23 7.64,10.74C7.18,10.71 6.83,10.57 6.5,10.41C6.54,11.95 7.39,12.69 8.58,13.09C8.22,13.16 7.82,13.18 7.44,13.12C7.81,14.19 8.58,14.86 9.9,15C9,15.76 7.34,16.29 6,16.08C7.15,16.81 8.46,17.39 10.28,17.31C14.69,17.11 17.64,13.95 17.71,9.33Z",
"name": "twitter-box"
},
{
"path": "M17.71,9.33C18.19,8.93 18.75,8.45 19,7.92C18.59,8.13 18.1,8.26 17.56,8.33C18.06,7.97 18.47,7.5 18.68,6.86C18.16,7.14 17.63,7.38 16.97,7.5C15.42,5.63 11.71,7.15 12.37,9.95C9.76,9.79 8.17,8.61 6.85,7.16C6.1,8.38 6.75,10.23 7.64,10.74C7.18,10.71 6.83,10.57 6.5,10.41C6.54,11.95 7.39,12.69 8.58,13.09C8.22,13.16 7.82,13.18 7.44,13.12C7.81,14.19 8.58,14.86 9.9,15C9,15.76 7.34,16.29 6,16.08C7.15,16.81 8.46,17.39 10.28,17.31C14.69,17.11 17.64,13.95 17.71,9.33M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2Z",
"name": "twitter-circle"
},
{
"path": "M6.38,13.24V13.24C6.38,11.84 6.38,10.44 6.38,9.04H7.4V15.84H6.39C6.39,15.63 6.39,15.42 6.39,15.21C5.93,15.68 5.29,15.96 4.58,15.96C3.12,15.96 2,14.9 2,13.3V9.04H3V13.24C3,14.33 3.74,15.04 4.7,15.04C5.64,15.04 6.38,14.31 6.38,13.24M9.14,9.04V11.5C9.37,11.29 9.65,11.1 9.95,10.97C10.25,10.85 10.58,10.78 10.91,10.78C12.37,10.78 13.5,11.94 13.5,13.37C13.5,14.8 12.37,15.96 10.91,15.96C10.58,15.96 10.25,15.89 9.95,15.77C9.64,15.64 9.37,15.45 9.13,15.22C9.13,15.43 9.13,15.63 9.13,15.84C8.81,15.84 8.5,15.84 8.16,15.84V9.04H9.14M12.55,13.37V13.37C12.55,12.41 11.77,11.65 10.84,11.65C9.89,11.65 9.13,12.41 9.13,13.37C9.13,14.32 9.88,15.09 10.84,15.09C11.77,15.09 12.55,14.32 12.55,13.37M16.46,10.79C17.9,10.79 18.95,11.89 18.95,13.36V13.69H14.91C15.04,14.5 15.71,15.09 16.55,15.09C17.13,15.09 17.61,14.86 18,14.36L18.7,14.89C18.2,15.55 17.46,15.95 16.55,15.95C15.06,15.95 13.91,14.84 13.91,13.36C13.91,11.97 15,10.79 16.46,10.79M14.92,12.91H17.95C17.79,12.15 17.18,11.65 16.44,11.65C15.71,11.65 15.1,12.15 14.92,12.91M20.5,13V15.84H19.5V10.89C19.82,10.89 20.14,10.89 20.47,10.89V11.5C20.71,11.1 21.11,10.85 21.66,10.85H22V11.76H21.59C20.95,11.76 20.5,12.26 20.5,13",
"name": "uber"
},
{
"path": "M19.5,3C20.14,4.08 20.44,5.19 20.44,6.6C20.44,11.08 16.61,16.91 13.5,21H6.41L3.56,4L9.77,3.39L11.28,15.5C12.69,13.21 14.42,9.61 14.42,7.16C14.42,5.81 14.19,4.9 13.83,4.15L19.5,3Z",
"name": "venmo"
},
{
"path": "M5,3A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3H5M5.5,8.5H7C7.36,8.5 7.5,8.66 7.64,9.07C8.36,11.17 9.57,13 10.07,13C10.26,13 10.35,12.92 10.35,12.45V10.28C10.29,9.28 9.76,9.19 9.76,8.84C9.76,8.67 9.9,8.5 10.14,8.5H12.45C12.77,8.5 12.87,8.67 12.87,9.04V11.96C12.87,12.27 13,12.38 13.1,12.38C13.29,12.38 13.45,12.27 13.79,11.93C14.85,10.74 15.6,8.92 15.6,8.92C15.7,8.7 15.87,8.5 16.24,8.5H17.71C18.16,8.5 18.26,8.73 18.16,9.04C17.97,9.9 16.18,12.43 16.18,12.43C16,12.68 15.96,12.8 16.18,13.09C16.33,13.3 16.85,13.74 17.19,14.15C17.83,14.86 18.3,15.46 18.44,15.87C18.56,16.29 18.35,16.5 17.93,16.5H16.45C15.89,16.5 15.73,16.05 14.73,15.05C13.85,14.21 13.5,14.1 13.26,14.1C12.96,14.1 12.87,14.18 12.87,14.61V15.93C12.87,16.29 12.76,16.5 11.82,16.5C10.26,16.5 8.54,15.55 7.33,13.8C5.5,11.24 5,9.31 5,8.92C5,8.7 5.08,8.5 5.5,8.5Z",
"name": "vk-box"
},
{
"path": "M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M5.5,8.5H7C7.36,8.5 7.5,8.66 7.64,9.07C8.36,11.17 9.57,13 10.07,13C10.26,13 10.35,12.92 10.35,12.45V10.28C10.29,9.28 9.76,9.19 9.76,8.84C9.76,8.67 9.9,8.5 10.14,8.5H12.45C12.77,8.5 12.87,8.67 12.87,9.04V11.96C12.87,12.27 13,12.38 13.1,12.38C13.29,12.38 13.45,12.27 13.79,11.93C14.85,10.74 15.6,8.92 15.6,8.92C15.7,8.7 15.87,8.5 16.24,8.5H17.71C18.16,8.5 18.26,8.73 18.16,9.04C17.97,9.9 16.18,12.43 16.18,12.43C16,12.68 15.96,12.8 16.18,13.09C16.33,13.3 16.85,13.74 17.19,14.15C17.83,14.86 18.3,15.46 18.44,15.87C18.56,16.29 18.35,16.5 17.93,16.5H16.45C15.89,16.5 15.73,16.05 14.73,15.05C13.85,14.21 13.5,14.1 13.26,14.1C12.96,14.1 12.87,14.18 12.87,14.61V15.93C12.87,16.29 12.76,16.5 11.82,16.5C10.26,16.5 8.54,15.55 7.33,13.8C5.5,11.24 5,9.31 5,8.92C5,8.7 5.08,8.5 5.5,8.5Z",
"name": "vk-circle"
},
{
"path": "M17,17.5L12,15L7,17.5V5H5V19H19V5H17V17.5M12,12.42L14.25,13.77L13.65,11.22L15.64,9.5L13,9.27L12,6.86L11,9.27L8.36,9.5L10.35,11.22L9.75,13.77L12,12.42M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3Z",
"name": "wunderlist"
},
{
"path": "M0 16.7L3.2 12.9L0 9.1L1.5 7.8L4.5 11.3L7.5 7.8L9 9.1L5.8 12.9L9 16.7L7.5 18L4.5 14.4L1.5 18L0 16.7M24 16.9C24 17.4 23.6 17.9 23 17.9H20C18.9 17.9 18 17 18 15.9V13.9C18 12.8 18.9 11.9 20 11.9H22V9.9H18V8H23C23.5 8 24 8.4 24 9M22 14H20V16H22V14M16 16.9C16 17.4 15.6 17.9 15 17.9H12C10.9 17.9 10 17 10 15.9V9.9C10 8.8 10.9 7.9 12 7.9H14V5H16V16.9M14 15.9V9.9H12V15.9H14Z",
"name": "xda"
},
{
"path": "M4.8,3C3.8,3 3,3.8 3,4.8V19.2C3,20.2 3.8,21 4.8,21H19.2C20.2,21 21,20.2 21,19.2V4.8C21,3.8 20.2,3 19.2,3M16.07,5H18.11C18.23,5 18.33,5.04 18.37,5.13C18.43,5.22 18.43,5.33 18.37,5.44L13.9,13.36L16.75,18.56C16.81,18.67 16.81,18.78 16.75,18.87C16.7,18.95 16.61,19 16.5,19H14.47C14.16,19 14,18.79 13.91,18.61L11.04,13.35C11.18,13.1 15.53,5.39 15.53,5.39C15.64,5.19 15.77,5 16.07,5M7.09,7.76H9.1C9.41,7.76 9.57,7.96 9.67,8.15L11.06,10.57C10.97,10.71 8.88,14.42 8.88,14.42C8.77,14.61 8.63,14.81 8.32,14.81H6.3C6.18,14.81 6.09,14.76 6.04,14.67C6,14.59 6,14.47 6.04,14.36L8.18,10.57L6.82,8.2C6.77,8.09 6.75,8 6.81,7.89C6.86,7.81 6.96,7.76 7.09,7.76Z",
"name": "xing-box"
},
{
"path": "M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M15.85,6H17.74C17.86,6 17.94,6.04 18,6.12C18.04,6.2 18.04,6.3 18,6.41L13.84,13.76L16.5,18.59C16.53,18.69 16.53,18.8 16.5,18.88C16.43,18.96 16.35,19 16.24,19H14.36C14.07,19 13.93,18.81 13.84,18.64L11.17,13.76C11.31,13.5 15.35,6.36 15.35,6.36C15.45,6.18 15.57,6 15.85,6M7.5,8.57H9.39C9.67,8.57 9.81,8.75 9.9,8.92L11.19,11.17C11.12,11.3 9.17,14.75 9.17,14.75C9.07,14.92 8.94,15.11 8.66,15.11H6.78C6.67,15.11 6.59,15.06 6.54,15C6.5,14.9 6.5,14.8 6.54,14.69L8.53,11.17L7.27,9C7.21,8.87 7.2,8.77 7.25,8.69C7.3,8.61 7.39,8.57 7.5,8.57Z",
"name": "xing-circle"
},
{
"path": "M10.59,2C11.23,2 11.5,2.27 11.58,2.97L11.79,6.14L12.03,10.29C12.05,10.64 12,11 11.86,11.32C11.64,11.77 11.14,11.89 10.73,11.58C10.5,11.39 10.31,11.14 10.15,10.87L6.42,4.55C6.06,3.94 6.17,3.54 6.77,3.16C7.5,2.68 9.73,2 10.59,2M14.83,14.85L15.09,14.91L18.95,16.31C19.61,16.55 19.79,16.92 19.5,17.57C19.06,18.7 18.34,19.66 17.42,20.45C16.96,20.85 16.5,20.78 16.21,20.28L13.94,16.32C13.55,15.61 14.03,14.8 14.83,14.85M4.5,14C4.5,13.26 4.5,12.55 4.75,11.87C4.97,11.2 5.33,11 6,11.27L9.63,12.81C10.09,13 10.35,13.32 10.33,13.84C10.3,14.36 9.97,14.58 9.53,14.73L5.85,15.94C5.15,16.17 4.79,15.96 4.64,15.25C4.55,14.83 4.47,14.4 4.5,14M11.97,21C11.95,21.81 11.6,22.12 10.81,22C9.77,21.8 8.81,21.4 7.96,20.76C7.54,20.44 7.45,19.95 7.76,19.53L10.47,15.97C10.7,15.67 11.03,15.6 11.39,15.74C11.77,15.88 11.97,16.18 11.97,16.59V21M14.45,13.32C13.73,13.33 13.23,12.5 13.64,11.91C14.47,10.67 15.35,9.46 16.23,8.26C16.5,7.85 16.94,7.82 17.31,8.16C18.24,9 18.91,10 19.29,11.22C19.43,11.67 19.25,12.08 18.83,12.2L15.09,13.17L14.45,13.32Z",
"name": "yelp"
}
]

View File

@@ -1,16 +1,17 @@
import "@polymer/app-layout/app-header-layout/app-header-layout"; import "@polymer/app-layout/app-header-layout/app-header-layout";
import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-header/app-header";
import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/app-layout/app-toolbar/app-toolbar";
import "../../src/components/ha-icon-button";
import "../../src/components/ha-icon";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-item/paper-item-body"; import "@polymer/paper-item/paper-item-body";
import { html } from "@polymer/polymer/lib/utils/html-tag"; import { html } from "@polymer/polymer/lib/utils/html-tag";
/* eslint-plugin-disable lit */ /* eslint-plugin-disable lit */
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import "../../src/components/ha-card"; import "../../src/components/ha-card";
import "../../src/components/ha-icon";
import "../../src/components/ha-icon-button";
import "../../src/managers/notification-manager"; import "../../src/managers/notification-manager";
import "../../src/styles/polymer-ha-style"; import "../../src/styles/polymer-ha-style";
// eslint-disable-next-line import/extensions
import { DEMOS } from "../build/import-demos"; import { DEMOS } from "../build/import-demos";
const fixPath = (path) => path.substr(2, path.length - 5); const fixPath = (path) => path.substr(2, path.length - 5);

View File

@@ -153,7 +153,7 @@ export class HassioUpdate extends LitElement {
item.progress = true; item.progress = true;
const confirmed = await showConfirmationDialog(this, { const confirmed = await showConfirmationDialog(this, {
title: `Update ${item.name}`, title: `Update ${item.name}`,
text: `Are you sure you want to upgrade ${item.name} to version ${item.version}?`, text: `Are you sure you want to update ${item.name} to version ${item.version}?`,
confirmText: "update", confirmText: "update",
dismissText: "cancel", dismissText: "cancel",
}); });

View File

@@ -79,6 +79,7 @@ class HassioSnapshots extends LitElement {
}, },
{ slug: "ssl", name: "SSL", checked: true }, { slug: "ssl", name: "SSL", checked: true },
{ slug: "share", name: "Share", checked: true }, { slug: "share", name: "Share", checked: true },
{ slug: "media", name: "Media", checked: true },
{ slug: "addons/local", name: "Local add-ons", checked: true }, { slug: "addons/local", name: "Local add-ons", checked: true },
]; ];
@@ -241,7 +242,7 @@ class HassioSnapshots extends LitElement {
protected firstUpdated(changedProps: PropertyValues) { protected firstUpdated(changedProps: PropertyValues) {
super.firstUpdated(changedProps); super.firstUpdated(changedProps);
this._updateSnapshots(); this.refreshData();
} }
protected updated(changedProps: PropertyValues) { protected updated(changedProps: PropertyValues) {

View File

@@ -14,7 +14,6 @@ import {
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { atLeastVersion } from "../../../src/common/config/version";
import "../../../src/components/buttons/ha-progress-button"; import "../../../src/components/buttons/ha-progress-button";
import "../../../src/components/ha-button-menu"; import "../../../src/components/ha-button-menu";
import "../../../src/components/ha-card"; import "../../../src/components/ha-card";
@@ -85,8 +84,7 @@ class HassioHostInfo extends LitElement {
</mwc-button> </mwc-button>
</ha-settings-row>` </ha-settings-row>`
: ""} : ""}
${this.hostInfo.features.includes("network") && ${this.hostInfo.features.includes("network")
atLeastVersion(this.hass.config.version, 0, 115)
? html` <ha-settings-row> ? html` <ha-settings-row>
<span slot="heading"> <span slot="heading">
IP address IP address

View File

@@ -213,7 +213,7 @@ class HassioSupervisorInfo extends LitElement {
const confirmed = await showConfirmationDialog(this, { const confirmed = await showConfirmationDialog(this, {
title: "Update supervisor", title: "Update supervisor",
text: `Are you sure you want to upgrade supervisor to version ${this.supervisorInfo.version_latest}?`, text: `Are you sure you want to update supervisor to version ${this.supervisorInfo.version_latest}?`,
confirmText: "update", confirmText: "update",
dismissText: "cancel", dismissText: "cancel",
}); });

View File

@@ -8,12 +8,12 @@
"version": "1.0.0", "version": "1.0.0",
"scripts": { "scripts": {
"build": "script/build_frontend", "build": "script/build_frontend",
"lint:eslint": "eslint '**/src/**/*.{js,ts,html}' --ignore-path .gitignore", "lint:eslint": "eslint \"**/src/**/*.{js,ts,html}\" --ignore-path .gitignore",
"format:eslint": "eslint '**/src/**/*.{js,ts,html}' --fix --ignore-path .gitignore", "format:eslint": "eslint \"**/src/**/*.{js,ts,html}\" --fix --ignore-path .gitignore",
"lint:prettier": "prettier '**/src/**/*.{js,ts,json,css,md}' --check", "lint:prettier": "prettier \"**/src/**/*.{js,ts,json,css,md}\" --check",
"format:prettier": "prettier '**/src/**/*.{js,ts,json,css,md}' --write", "format:prettier": "prettier \"**/src/**/*.{js,ts,json,css,md}\" --write",
"lint:types": "tsc", "lint:types": "tsc",
"lint:lit": "lit-analyzer '**/src/**/*.ts' --format markdown --outFile result.md", "lint:lit": "lit-analyzer \"**/src/**/*.ts\" --format markdown --outFile result.md",
"lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:types", "lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:types",
"format": "npm run format:eslint && npm run format:prettier", "format": "npm run format:eslint && npm run format:prettier",
"mocha": "node_modules/.bin/ts-mocha -p test-mocha/tsconfig.test.json --opts test-mocha/mocha.opts", "mocha": "node_modules/.bin/ts-mocha -p test-mocha/tsconfig.test.json --opts test-mocha/mocha.opts",

View File

@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup( setup(
name="home-assistant-frontend", name="home-assistant-frontend",
version="20200912.0", version="20200916.0",
description="The Home Assistant frontend", description="The Home Assistant frontend",
url="https://github.com/home-assistant/home-assistant-polymer", url="https://github.com/home-assistant/home-assistant-polymer",
author="The Home Assistant Authors", author="The Home Assistant Authors",

View File

@@ -1,14 +1,14 @@
import { derivedStyles, darkStyles } from "../../resources/styles"; import { darkStyles, derivedStyles } from "../../resources/styles";
import { HomeAssistant, Theme } from "../../types"; import { HomeAssistant, Theme } from "../../types";
import { import {
hex2rgb, hex2rgb,
lab2hex,
lab2rgb,
rgb2hex, rgb2hex,
rgb2lab, rgb2lab,
lab2rgb,
lab2hex,
} from "../color/convert-color"; } from "../color/convert-color";
import { labBrighten, labDarken } from "../color/lab";
import { rgbContrast } from "../color/rgb"; import { rgbContrast } from "../color/rgb";
import { labDarken, labBrighten } from "../color/lab";
interface ProcessedTheme { interface ProcessedTheme {
keys: { [key: string]: "" }; keys: { [key: string]: "" };
@@ -105,12 +105,12 @@ const processTheme = (
const keys = {}; const keys = {};
for (const key of Object.keys(combinedTheme)) { for (const key of Object.keys(combinedTheme)) {
const prefixedKey = `--${key}`; const prefixedKey = `--${key}`;
const value = String(combinedTheme[key]!); const value = String(combinedTheme[key]);
styles[prefixedKey] = value; styles[prefixedKey] = value;
keys[prefixedKey] = ""; keys[prefixedKey] = "";
// Try to create a rgb value for this key if it is not a var // Try to create a rgb value for this key if it is not a var
if (value.startsWith("#")) { if (!value.startsWith("#")) {
// Can't convert non hex value // Can't convert non hex value
continue; continue;
} }

View File

@@ -24,8 +24,7 @@ export const iconColorCSS = css`
ha-icon[data-domain="group"][data-state="home"], ha-icon[data-domain="group"][data-state="home"],
ha-icon[data-domain="group"][data-state="open"], ha-icon[data-domain="group"][data-state="open"],
ha-icon[data-domain="group"][data-state="locked"], ha-icon[data-domain="group"][data-state="locked"],
ha-icon[data-domain="group"][data-state="problem"] ha-icon[data-domain="group"][data-state="problem"] {
{
color: var(--paper-item-icon-active-color, #fdd835); color: var(--paper-item-icon-active-color, #fdd835);
} }

View File

@@ -1,16 +1,16 @@
import type { HassEntity } from "home-assistant-js-websocket"; import type { HassEntity } from "home-assistant-js-websocket";
import { styleMap } from "lit-html/directives/style-map";
import { import {
css, css,
CSSResult, CSSResult,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
internalProperty,
PropertyValues, PropertyValues,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { ifDefined } from "lit-html/directives/if-defined"; import { ifDefined } from "lit-html/directives/if-defined";
import { styleMap } from "lit-html/directives/style-map";
import { computeActiveState } from "../../common/entity/compute_active_state"; import { computeActiveState } from "../../common/entity/compute_active_state";
import { computeStateDomain } from "../../common/entity/compute_state_domain"; import { computeStateDomain } from "../../common/entity/compute_state_domain";
import { stateIcon } from "../../common/entity/state_icon"; import { stateIcon } from "../../common/entity/state_icon";
@@ -73,10 +73,15 @@ export class StateBadge extends LitElement {
if (stateObj) { if (stateObj) {
// hide icon if we have entity picture // hide icon if we have entity picture
if ( if (
((stateObj.attributes.entity_picture_local || stateObj.attributes.entity_picture) && !this.overrideIcon) || ((stateObj.attributes.entity_picture_local ||
stateObj.attributes.entity_picture) &&
!this.overrideIcon) ||
this.overrideImage this.overrideImage
) { ) {
let imageUrl = this.overrideImage || stateObj.attributes.entity_picture_local || stateObj.attributes.entity_picture; let imageUrl =
this.overrideImage ||
stateObj.attributes.entity_picture_local ||
stateObj.attributes.entity_picture;
if (this.hass) { if (this.hass) {
imageUrl = this.hass.hassUrl(imageUrl); imageUrl = this.hass.hassUrl(imageUrl);
} }

View File

@@ -1,17 +1,16 @@
import {
customElement,
html,
TemplateResult,
LitElement,
CSSResult,
css,
query,
property,
} from "lit-element";
import "@material/mwc-button"; import "@material/mwc-button";
import "@material/mwc-menu"; import "@material/mwc-menu";
import type { Menu, Corner } from "@material/mwc-menu"; import type { Corner, Menu } from "@material/mwc-menu";
import {
css,
CSSResult,
customElement,
html,
LitElement,
property,
query,
TemplateResult,
} from "lit-element";
import "./ha-icon-button"; import "./ha-icon-button";
@customElement("ha-button-menu") @customElement("ha-button-menu")
@@ -22,6 +21,8 @@ export class HaButtonMenu extends LitElement {
@property({ type: Boolean }) public activatable = false; @property({ type: Boolean }) public activatable = false;
@property({ type: Boolean }) public disabled = false;
@query("mwc-menu") private _menu?: Menu; @query("mwc-menu") private _menu?: Menu;
public get items() { public get items() {
@@ -48,6 +49,9 @@ export class HaButtonMenu extends LitElement {
} }
private _handleClick(): void { private _handleClick(): void {
if (this.disabled) {
return;
}
this._menu!.anchor = this; this._menu!.anchor = this;
this._menu!.show(); this._menu!.show();
} }

View File

@@ -32,6 +32,9 @@ class HaCameraStream extends LitElement {
@property({ type: Boolean, attribute: "muted" }) @property({ type: Boolean, attribute: "muted" })
public muted = false; public muted = false;
@property({ type: Boolean, attribute: "allow-exoplayer" })
public allowExoPlayer = false;
// We keep track if we should force MJPEG with a string // We keep track if we should force MJPEG with a string
// that way it automatically resets if we change entity. // that way it automatically resets if we change entity.
@internalProperty() private _forceMJPEG?: string; @internalProperty() private _forceMJPEG?: string;
@@ -61,6 +64,7 @@ class HaCameraStream extends LitElement {
<ha-hls-player <ha-hls-player
autoplay autoplay
playsinline playsinline
.allowExoPlayer=${this.allowExoPlayer}
.muted=${this.muted} .muted=${this.muted}
.controls=${this.controls} .controls=${this.controls}
.hass=${this.hass} .hass=${this.hass}

View File

@@ -12,7 +12,6 @@ import {
} from "lit-element"; } from "lit-element";
import { fireEvent } from "../common/dom/fire_event"; import { fireEvent } from "../common/dom/fire_event";
import { nextRender } from "../common/util/render-status"; import { nextRender } from "../common/util/render-status";
import { getExternalConfig } from "../external_app/external_config";
import type { HomeAssistant } from "../types"; import type { HomeAssistant } from "../types";
type HLSModule = typeof import("hls.js"); type HLSModule = typeof import("hls.js");
@@ -35,6 +34,9 @@ class HaHLSPlayer extends LitElement {
@property({ type: Boolean, attribute: "playsinline" }) @property({ type: Boolean, attribute: "playsinline" })
public playsInline = false; public playsInline = false;
@property({ type: Boolean, attribute: "allow-exoplayer" })
public allowExoPlayer = false;
@query("video") private _videoEl!: HTMLVideoElement; @query("video") private _videoEl!: HTMLVideoElement;
@internalProperty() private _attached = false; @internalProperty() private _attached = false;
@@ -91,11 +93,7 @@ class HaHLSPlayer extends LitElement {
} }
private async _getUseExoPlayer(): Promise<boolean> { private async _getUseExoPlayer(): Promise<boolean> {
if (!this.hass!.auth.external) { return false;
return false;
}
const externalConfig = await getExternalConfig(this.hass!.auth.external);
return externalConfig && externalConfig.hasExoPlayer;
} }
private async _startHls(): Promise<void> { private async _startHls(): Promise<void> {
@@ -137,7 +135,10 @@ class HaHLSPlayer extends LitElement {
this._videoEl.style.visibility = "hidden"; this._videoEl.style.visibility = "hidden";
await this.hass!.auth.external!.sendMessage({ await this.hass!.auth.external!.sendMessage({
type: "exoplayer/play_hls", type: "exoplayer/play_hls",
payload: new URL(url, window.location.href).toString(), payload: {
url: new URL(url, window.location.href).toString(),
muted: this.muted,
},
}); });
} }

View File

@@ -24,207 +24,16 @@ import {
import { debounce } from "../common/util/debounce"; import { debounce } from "../common/util/debounce";
import { fireEvent } from "../common/dom/fire_event"; import { fireEvent } from "../common/dom/fire_event";
const mdiRenameMapping = { interface DeprecatedIcon {
"account-badge": "badge-account", [key: string]: {
"account-badge-alert": "badge-account-alert", removeIn: string;
"account-badge-alert-outline": "badge-account-alert-outline", newName?: string;
"account-badge-horizontal": "badge-account-horizontal", };
"account-badge-horizontal-outline": "badge-account-horizontal-outline", }
"account-badge-outline": "badge-account-outline",
"account-card-details": "card-account-details",
"account-card-details-outline": "card-account-details-outline",
airplay: "apple-airplay",
artist: "account-music",
"artist-outline": "account-music-outline",
audiobook: "book-music",
azure: "microsoft-azure",
"azure-devops": "microsoft-azure-devops",
bible: "book-cross",
bowl: "bowl-mix",
"calendar-repeat": "calendar-sync",
"calendar-repeat-outline": "calendar-sync-outline",
"camcorder-box": "video-box",
"camcorder-box-off": "video-box-off",
"cellphone-settings-variant": "cellphone-cog",
"chart-snakey": "chart-sankey",
"chart-snakey-variant": "chart-sankey-variant",
coin: "currency-usd-circle",
"coin-outline": "currency-usd-circle-outline",
"coins-outline": "circle-multiple-outline",
"contact-mail": "card-account-mail",
"contact-mail-outline": "card-account-mail-outline",
"contact-phone": "card-account-phone",
"contact-phone-outline": "card-account-phone-outline",
cowboy: "account-cowboy-hat",
"database-refresh": "database-sync",
dictionary: "book-alphabet",
edge: "microsoft-edge",
"edge-legacy": "microsoft-edge-legacy",
"file-document-box": "text-box",
"file-document-box-check-outline": "text-box-check-outline",
"file-document-box-minus": "text-box-minus",
"file-document-box-minus-outline": "text-box-minus-outline",
"file-document-box-multiple": "text-box-multiple",
"file-document-box-multiple-outline": "text-box-multiple-outline",
"file-document-box-outline": "text-box-outline",
"file-document-box-plus": "text-box-plus",
"file-document-box-plus-outline": "text-box-plus-outline",
"file-document-box-remove": "text-box-remove",
"file-document-box-remove-outline": "text-box-remove-outline",
"file-document-box-search": "text-box-search",
"file-document-box-search-outline": "text-box-search-outline",
"file-settings-variant": "file-cog",
"file-settings-variant-outline": "file-cog-outline",
"folder-settings-variant": "folder-cog",
"folder-settings-variant-outline": "folder-cog-outline",
"github-circle": "github",
"google-adwords": "google-ads",
hackernews: "y-combinator",
hotel: "bed",
"image-filter": "image-multiple-outline",
"internet-explorer": "microsoft-internet-explorer",
json: "code-json",
kotlin: "language-kotlin",
"library-books": "filmstrip-box",
"library-movie": "filmstrip-box-multiple",
"library-music": "music-box-multiple",
"library-music-outline": "music-box-multiple-outline",
"library-video": "play-box-multiple",
markdown: "language-markdown",
"markdown-outline": "language-markdown-outline",
"message-settings-variant": "message-cog",
"message-settings-variant-outline": "message-cog-outline",
"microsoft-dynamics": "microsoft-dynamics-365",
"network-router": "router-network",
office: "microsoft-office",
onedrive: "microsoft-onedrive",
onenote: "microsoft-onenote",
outlook: "microsoft-outlook",
playstation: "sony-playstation",
"periodic-table-co": "molecule-co",
"periodic-table-co2": "molecule-co2",
pot: "pot-steam",
ruby: "language-ruby",
sailing: "sail-boat",
scooter: "human-scooter",
settings: "cog",
"settings-box": "cog-box",
"settings-outline": "cog-outline",
"settings-transfer": "cog-transfer",
"settings-transfer-outline": "cog-transfer-outline",
"shield-refresh": "shield-sync",
"shield-refresh-outline": "shield-sync-outline",
"sort-alphabetical": "sort-alphabetical-variant",
"sort-alphabetical-ascending": "sort-alphabetical-ascending-variant",
"sort-alphabetical-descending": "sort-alphabetical-descending-variant",
"sort-numeric": "sort-numeric-variant",
"star-half": "star-half-full",
storefront: "storefront-outline",
timer: "timer-outline",
"timer-off": "timer-off-outline",
towing: "tow-truck",
voice: "account-voice",
"wall-sconce-variant": "wall-sconce-round-variant",
wii: "nintendo-wii",
wiiu: "nintendo-wiiu",
windows: "microsoft-windows",
"windows-classic": "microsoft-windows-classic",
worker: "account-hard-hat",
xbox: "microsoft-xbox",
"xbox-controller": "microsoft-xbox-controller",
"xbox-controller-battery-alert": "microsoft-xbox-controller-battery-alert",
"xbox-controller-battery-charging":
"microsoft-xbox-controller-battery-charging",
"xbox-controller-battery-empty": "microsoft-xbox-controller-battery-empty",
"xbox-controller-battery-full": "microsoft-xbox-controller-battery-full",
"xbox-controller-battery-low": "microsoft-xbox-controller-battery-low",
"xbox-controller-battery-medium": "microsoft-xbox-controller-battery-medium",
"xbox-controller-battery-unknown":
"microsoft-xbox-controller-battery-unknown",
"xbox-controller-menu": "microsoft-xbox-controller-menu",
"xbox-controller-off": "microsoft-xbox-controller-off",
"xbox-controller-view": "microsoft-xbox-controller-view",
yammer: "microsoft-yammer",
"youtube-creator-studio": "youtube-studio",
"selection-mutliple": "selection-multiple",
textarea: "form-textarea",
textbox: "form-textbox",
"textbox-lock": "form-textbox-lock",
"textbox-password": "form-textbox-password",
"syllabary-katakana-half-width": "syllabary-katakana-halfwidth",
"visual-studio-code": "microsoft-visual-studio-code",
"visual-studio": "microsoft-visual-studio",
};
const mdiRemovedIcons = new Set([ const mdiDeprecatedIcons: DeprecatedIcon = {
"accusoft", scooter: { removeIn: "117", newName: "human-scooter" },
"amazon-drive", };
"android-head",
"basecamp",
"beats",
"behance",
"blackberry",
"cisco-webex",
"disqus-outline",
"dribbble",
"dribbble-box",
"etsy",
"eventbrite",
"facebook-box",
"flattr",
"flickr",
"foursquare",
"github-box",
"github-face",
"glassdoor",
"google-adwords",
"google-pages",
"google-physical-web",
"google-plus-box",
"houzz",
"houzz-box",
"instapaper",
"itunes",
"language-python-text",
"lastfm",
"linkedin-box",
"lyft",
"mail-ru",
"mastodon-variant",
"medium",
"meetup",
"mixcloud",
"mixer",
"nfc-off",
"npm-variant",
"npm-variant-outline",
"paypal",
"periscope",
"pinterest-box",
"pocket",
"quicktime",
"shopify",
"slackware",
"square-inc",
"square-inc-cash",
"steam-box",
"strava",
"tor",
"tumblr",
"tumblr-box",
"tumblr-reblog",
"twitter-box",
"twitter-circle",
"uber",
"venmo",
"vk-box",
"vk-circle",
"wunderlist",
"xda",
"xing-box",
"xing-circle",
"yelp",
]);
const chunks: Chunks = {}; const chunks: Chunks = {};
@@ -291,17 +100,16 @@ export class HaIcon extends LitElement {
this._legacy = false; this._legacy = false;
if (iconName in mdiRenameMapping) { if (iconName in mdiDeprecatedIcons) {
iconName = mdiRenameMapping[iconName]; const deprecatedIcon = mdiDeprecatedIcons[iconName];
const message = `Icon ${iconPrefix}:${origIconName} was renamed to ${iconPrefix}:${iconName}, please change your config, it will be removed in version 0.115.`; let message: string;
// eslint-disable-next-line no-console
console.warn(message); if (deprecatedIcon.newName) {
fireEvent(this, "write_log", { message = `Icon ${iconPrefix}:${iconName} was renamed to ${iconPrefix}:${deprecatedIcon.newName}, please change your config, it will be removed in version ${deprecatedIcon.removeIn}.`;
level: "warning", iconName = deprecatedIcon.newName!;
message, } else {
}); message = `Icon ${iconPrefix}:${iconName} was removed from MDI, please replace this icon with an other icon in your config, it will be removed in version ${deprecatedIcon.removeIn}.`;
} else if (mdiRemovedIcons.has(iconName)) { }
const message = `Icon ${this.icon} was removed from MDI, please replace this icon with an other icon in your config, it will be removed in version 0.115.`;
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.warn(message); console.warn(message);
fireEvent(this, "write_log", { fireEvent(this, "write_log", {
@@ -334,6 +142,7 @@ export class HaIcon extends LitElement {
this._setPath(chunks[chunk], iconName); this._setPath(chunks[chunk], iconName);
return; return;
} }
const iconPromise = fetch(`/static/mdi/${chunk}.json`).then((response) => const iconPromise = fetch(`/static/mdi/${chunk}.json`).then((response) =>
response.json() response.json()
); );

View File

@@ -159,8 +159,6 @@ const computePanels = memoizeOne(
let Sortable; let Sortable;
let sortStyles: CSSResult;
@customElement("ha-sidebar") @customElement("ha-sidebar")
class HaSidebar extends LitElement { class HaSidebar extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant; @property({ attribute: false }) public hass!: HomeAssistant;
@@ -171,12 +169,12 @@ class HaSidebar extends LitElement {
@property({ type: Boolean, reflect: true }) public expanded = false; @property({ type: Boolean, reflect: true }) public expanded = false;
@property({ type: Boolean }) public editMode = false;
@internalProperty() private _externalConfig?: ExternalConfig; @internalProperty() private _externalConfig?: ExternalConfig;
@internalProperty() private _notifications?: PersistentNotification[]; @internalProperty() private _notifications?: PersistentNotification[];
@internalProperty() private _editMode = false;
// property used only in css // property used only in css
// @ts-ignore // @ts-ignore
@property({ type: Boolean, reflect: true }) public rtl = false; @property({ type: Boolean, reflect: true }) public rtl = false;
@@ -227,19 +225,12 @@ class HaSidebar extends LitElement {
} }
return html` return html`
${this._editMode
? html`
<style>
${sortStyles?.cssText}
</style>
`
: ""}
<div <div
class="menu" class="menu"
@action=${this._handleAction} @action=${this._handleAction}
.actionHandler=${actionHandler({ .actionHandler=${actionHandler({
hasHold: !this._editMode, hasHold: !this.editMode,
disabled: this._editMode, disabled: this.editMode,
})} })}
> >
${!this.narrow ${!this.narrow
@@ -257,7 +248,7 @@ class HaSidebar extends LitElement {
` `
: ""} : ""}
<div class="title"> <div class="title">
${this._editMode ${this.editMode
? html`<mwc-button outlined @click=${this._closeEditMode}> ? html`<mwc-button outlined @click=${this._closeEditMode}>
${hass.localize("ui.sidebar.done")} ${hass.localize("ui.sidebar.done")}
</mwc-button>` </mwc-button>`
@@ -273,7 +264,7 @@ class HaSidebar extends LitElement {
@scroll=${this._listboxScroll} @scroll=${this._listboxScroll}
@keydown=${this._listboxKeydown} @keydown=${this._listboxKeydown}
> >
${this._editMode ${this.editMode
? html`<div id="sortable"> ? html`<div id="sortable">
${guard([this._hiddenPanels, this._renderEmptySortable], () => ${guard([this._hiddenPanels, this._renderEmptySortable], () =>
this._renderEmptySortable this._renderEmptySortable
@@ -283,7 +274,7 @@ class HaSidebar extends LitElement {
</div>` </div>`
: this._renderPanels(beforeSpacer)} : this._renderPanels(beforeSpacer)}
<div class="spacer" disabled></div> <div class="spacer" disabled></div>
${this._editMode && this._hiddenPanels.length ${this.editMode && this._hiddenPanels.length
? html` ? html`
${this._hiddenPanels.map((url) => { ${this._hiddenPanels.map((url) => {
const panel = this.hass.panels[url]; const panel = this.hass.panels[url];
@@ -307,7 +298,7 @@ class HaSidebar extends LitElement {
: hass.localize(`panel.${panel.title}`) || : hass.localize(`panel.${panel.title}`) ||
panel.title}</span panel.title}</span
> >
<mwc-icon-button class="hide-panel"> <mwc-icon-button class="show-panel">
<ha-svg-icon .path=${mdiPlus}></ha-svg-icon> <ha-svg-icon .path=${mdiPlus}></ha-svg-icon>
</mwc-icon-button> </mwc-icon-button>
</paper-icon-item>`; </paper-icon-item>`;
@@ -412,10 +403,10 @@ class HaSidebar extends LitElement {
changedProps.has("alwaysExpand") || changedProps.has("alwaysExpand") ||
changedProps.has("_externalConfig") || changedProps.has("_externalConfig") ||
changedProps.has("_notifications") || changedProps.has("_notifications") ||
changedProps.has("_editMode") || changedProps.has("editMode") ||
changedProps.has("_renderEmptySortable") || changedProps.has("_renderEmptySortable") ||
changedProps.has("_hiddenPanels") || changedProps.has("_hiddenPanels") ||
(changedProps.has("_panelOrder") && !this._editMode) (changedProps.has("_panelOrder") && !this.editMode)
) { ) {
return true; return true;
} }
@@ -449,9 +440,6 @@ class HaSidebar extends LitElement {
subscribeNotifications(this.hass.connection, (notifications) => { subscribeNotifications(this.hass.connection, (notifications) => {
this._notifications = notifications; this._notifications = notifications;
}); });
window.addEventListener("hass-edit-sidebar", () =>
this._activateEditMode()
);
} }
protected updated(changedProps) { protected updated(changedProps) {
@@ -459,6 +447,13 @@ class HaSidebar extends LitElement {
if (changedProps.has("alwaysExpand")) { if (changedProps.has("alwaysExpand")) {
this.expanded = this.alwaysExpand; this.expanded = this.alwaysExpand;
} }
if (changedProps.has("editMode")) {
if (this.editMode) {
this._activateEditMode();
} else {
this._deactivateEditMode();
}
}
if (!changedProps.has("hass")) { if (!changedProps.has("hass")) {
return; return;
} }
@@ -489,7 +484,7 @@ class HaSidebar extends LitElement {
return; return;
} }
this._activateEditMode(); fireEvent(this, "hass-edit-sidebar", { editMode: true });
} }
private async _activateEditMode() { private async _activateEditMode() {
@@ -499,15 +494,14 @@ class HaSidebar extends LitElement {
import("../resources/ha-sortable-style"), import("../resources/ha-sortable-style"),
]); ]);
sortStyles = sortStylesImport.sortableStyles; const style = document.createElement("style");
style.innerHTML = sortStylesImport.sortableStyles.cssText;
this.shadowRoot!.appendChild(style);
Sortable = sortableImport.Sortable; Sortable = sortableImport.Sortable;
Sortable.mount(sortableImport.OnSpill); Sortable.mount(sortableImport.OnSpill);
Sortable.mount(sortableImport.AutoScroll()); Sortable.mount(sortableImport.AutoScroll());
} }
this._editMode = true;
fireEvent(this, "hass-open-menu");
await this.updateComplete; await this.updateComplete;
@@ -519,16 +513,20 @@ class HaSidebar extends LitElement {
animation: 150, animation: 150,
fallbackClass: "sortable-fallback", fallbackClass: "sortable-fallback",
dataIdAttr: "data-panel", dataIdAttr: "data-panel",
handle: "paper-icon-item",
onSort: async () => { onSort: async () => {
this._panelOrder = this._sortable.toArray(); this._panelOrder = this._sortable.toArray();
}, },
}); });
} }
private _closeEditMode() { private _deactivateEditMode() {
this._sortable?.destroy(); this._sortable?.destroy();
this._sortable = undefined; this._sortable = undefined;
this._editMode = false; }
private _closeEditMode() {
fireEvent(this, "hass-edit-sidebar", { editMode: false });
} }
private async _hidePanel(ev: Event) { private async _hidePanel(ev: Event) {
@@ -692,16 +690,16 @@ class HaSidebar extends LitElement {
></ha-svg-icon>` ></ha-svg-icon>`
: html`<ha-icon slot="item-icon" .icon=${icon}></ha-icon>`} : html`<ha-icon slot="item-icon" .icon=${icon}></ha-icon>`}
<span class="item-text">${title}</span> <span class="item-text">${title}</span>
${this._editMode
? html`<mwc-icon-button
class="hide-panel"
.panel=${urlPath}
@click=${this._hidePanel}
>
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
</mwc-icon-button>`
: ""}
</paper-icon-item> </paper-icon-item>
${this.editMode
? html`<mwc-icon-button
class="hide-panel"
.panel=${urlPath}
@click=${this._hidePanel}
>
<ha-svg-icon .path=${mdiClose}></ha-svg-icon>
</mwc-icon-button>`
: ""}
</a> </a>
`; `;
} }
@@ -777,6 +775,10 @@ class HaSidebar extends LitElement {
.title mwc-button { .title mwc-button {
width: 100%; width: 100%;
} }
#sortable,
.hidden-panel {
display: none;
}
paper-listbox { paper-listbox {
padding: 4px 0; padding: 4px 0;

View File

@@ -25,7 +25,7 @@ import { debounce } from "../../common/util/debounce";
import { import {
browseLocalMediaPlayer, browseLocalMediaPlayer,
browseMediaPlayer, browseMediaPlayer,
BROWSER_SOURCE, BROWSER_PLAYER,
MediaClassBrowserSettings, MediaClassBrowserSettings,
MediaPickedEvent, MediaPickedEvent,
MediaPlayerBrowseAction, MediaPlayerBrowseAction,
@@ -35,6 +35,7 @@ import { showAlertDialog } from "../../dialogs/generic/show-dialog-box";
import { installResizeObserver } from "../../panels/lovelace/common/install-resize-observer"; import { installResizeObserver } from "../../panels/lovelace/common/install-resize-observer";
import { haStyle } from "../../resources/styles"; import { haStyle } from "../../resources/styles";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import { documentationUrl } from "../../util/documentation-url";
import "../entity/ha-entity-picker"; import "../entity/ha-entity-picker";
import "../ha-button-menu"; import "../ha-button-menu";
import "../ha-card"; import "../ha-card";
@@ -108,9 +109,11 @@ export class HaMediaPlayerBrowse extends LitElement {
text: this._renderError(this._error), text: this._renderError(this._error),
}); });
} else { } else {
return html`<div class="container"> return html`
${this._renderError(this._error)} <div class="container">
</div>`; ${this._renderError(this._error)}
</div>
`;
} }
} }
@@ -235,7 +238,7 @@ export class HaMediaPlayerBrowse extends LitElement {
</div> </div>
${this._error ${this._error
? html` ? html`
<div class="container error"> <div class="container">
${this._renderError(this._error)} ${this._renderError(this._error)}
</div> </div>
` `
@@ -354,7 +357,31 @@ export class HaMediaPlayerBrowse extends LitElement {
` `
: html` : html`
<div class="container"> <div class="container">
${this.hass.localize("ui.components.media-browser.no_items")} ${this.hass.localize("ui.components.media-browser.no_items")}<br />
${currentItem.media_content_id.startsWith(
"media-source://media_source/local_source"
)
? html`${this.hass.localize(
"ui.components.media-browser.learn_adding_local_media",
"documentation",
html`<a
href="${documentationUrl(
this.hass,
"/more-info/local-media/add-media"
)}"
target="_blank"
rel="noreferrer"
>${this.hass.localize(
"ui.components.media-browser.documentation"
)}</a
>`
)}
<br />
${this.hass.localize(
"ui.components.media-browser.local_media_files"
)}.`
: ""}
</div> </div>
`} `}
`; `;
@@ -456,7 +483,7 @@ export class HaMediaPlayerBrowse extends LitElement {
mediaContentType?: string mediaContentType?: string
): Promise<MediaPlayerItem> { ): Promise<MediaPlayerItem> {
const itemData = const itemData =
this.entityId !== BROWSER_SOURCE this.entityId !== BROWSER_PLAYER
? await browseMediaPlayer( ? await browseMediaPlayer(
this.hass, this.hass,
this.entityId, this.entityId,
@@ -498,29 +525,35 @@ export class HaMediaPlayerBrowse extends LitElement {
private _renderError(err: { message: string; code: string }) { private _renderError(err: { message: string; code: string }) {
if (err.message === "Media directory does not exist.") { if (err.message === "Media directory does not exist.") {
return html` return html`
<h2>No local media found.</h2> <h2>
${this.hass.localize(
"ui.components.media-browser.no_local_media_found"
)}
</h2>
<p> <p>
It looks like you have not yet created a media directory. ${this.hass.localize("ui.components.media-browser.no_media_folder")}
<br />Create a directory with the name <b>"media"</b> in the <br />
configuration directory of Home Assistant ${this.hass.localize(
(${this.hass.config.config_dir}). <br />Place your video, audio and "ui.components.media-browser.setup_local_help",
image files in this directory to be able to browse and play them in "documentation",
the browser or on supported media players. html`<a
</p> href="${documentationUrl(
this.hass,
<p> "/more-info/local-media/setup-media"
Check the )}"
<a target="_blank"
href="https://www.home-assistant.io/integrations/media_source/#local-media" rel="noreferrer"
target="_blank" >${this.hass.localize(
rel="noreferrer" "ui.components.media-browser.documentation"
>documentation</a )}</a
> >`
for more info )}
<br />
${this.hass.localize("ui.components.media-browser.local_media_files")}
</p> </p>
`; `;
} }
return html`<span class="error">err.message</span>`; return html`<span class="error">${err.message}</span>`;
} }
static get styles(): CSSResultArray { static get styles(): CSSResultArray {

View File

@@ -62,12 +62,22 @@ class StateHistoryChartLine extends LocalizeMixin(PolymerElement) {
this.drawChart(); this.drawChart();
} }
ready() {
super.ready();
// safari doesn't always render the canvas when we animate it, so we remove overflow hidden when the animation is complete
this.addEventListener("transitionend", () => {
this.style.overflow = "auto";
});
}
dataChanged() { dataChanged() {
this.drawChart(); this.drawChart();
} }
_onRenderedChanged(rendered) { _onRenderedChanged(rendered) {
if (rendered) this.animateHeight(); if (rendered) {
this.animateHeight();
}
} }
animateHeight() { animateHeight() {
@@ -79,15 +89,15 @@ class StateHistoryChartLine extends LocalizeMixin(PolymerElement) {
} }
drawChart() { drawChart() {
if (!this._isAttached) {
return;
}
const unit = this.unit; const unit = this.unit;
const deviceStates = this.data; const deviceStates = this.data;
const datasets = []; const datasets = [];
let endTime; let endTime;
if (!this._isAttached) {
return;
}
if (deviceStates.length === 0) { if (deviceStates.length === 0) {
return; return;
} }

View File

@@ -1,23 +1,23 @@
import {
mdiAccountMusic,
mdiAccountMusicOutline,
mdiAlbum,
mdiApplication,
mdiDramaMasks,
mdiFileMusic,
mdiFolder,
mdiGamepadVariant,
mdiImage,
mdiMovie,
mdiMusic,
mdiPlaylistMusic,
mdiPodcast,
mdiTelevisionClassic,
mdiVideo,
mdiWeb,
} from "@mdi/js";
import type { HassEntity } from "home-assistant-js-websocket"; import type { HassEntity } from "home-assistant-js-websocket";
import type { HomeAssistant } from "../types"; import type { HomeAssistant } from "../types";
import {
mdiFolder,
mdiPlaylistMusic,
mdiFileMusic,
mdiAlbum,
mdiMusic,
mdiTelevisionClassic,
mdiMovie,
mdiVideo,
mdiImage,
mdiWeb,
mdiGamepadVariant,
mdiAccountMusic,
mdiPodcast,
mdiApplication,
mdiAccountMusicOutline,
mdiDramaMasks,
} from "@mdi/js";
export const SUPPORT_PAUSE = 1; export const SUPPORT_PAUSE = 1;
export const SUPPORT_SEEK = 2; export const SUPPORT_SEEK = 2;
@@ -38,7 +38,7 @@ export const CONTRAST_RATIO = 4.5;
export type MediaPlayerBrowseAction = "pick" | "play"; export type MediaPlayerBrowseAction = "pick" | "play";
export const BROWSER_SOURCE = "browser"; export const BROWSER_PLAYER = "browser";
export type MediaClassBrowserSetting = { export type MediaClassBrowserSetting = {
icon: string; icon: string;

View File

@@ -20,6 +20,7 @@ import { LocalizeFunc } from "../../common/translations/localize";
import "../../components/ha-icon-next"; import "../../components/ha-icon-next";
import { domainToName } from "../../data/integration"; import { domainToName } from "../../data/integration";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
import { documentationUrl } from "../../util/documentation-url";
import { FlowConfig } from "./show-dialog-data-entry-flow"; import { FlowConfig } from "./show-dialog-data-entry-flow";
import { configFlowContentStyles } from "./styles"; import { configFlowContentStyles } from "./styles";
@@ -122,7 +123,7 @@ class StepFlowPickHandler extends LitElement {
${this.hass.localize( ${this.hass.localize(
"ui.panel.config.integrations.note_about_website_reference" "ui.panel.config.integrations.note_about_website_reference"
)}<a )}<a
href="https://www.home-assistant.io/integrations/" href="${documentationUrl(this.hass, "/integrations/")}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>${this.hass.localize( >${this.hass.localize(

View File

@@ -48,6 +48,7 @@ class MoreInfoCamera extends LitElement {
<ha-camera-stream <ha-camera-stream
.hass=${this.hass} .hass=${this.hass}
.stateObj=${this.stateObj} .stateObj=${this.stateObj}
allow-exoplayer
controls controls
></ha-camera-stream> ></ha-camera-stream>
${this._cameraPrefs ${this._cameraPrefs

View File

@@ -32,7 +32,7 @@ class MoreInfoPerson extends LitElement {
return html` return html`
<ha-attributes <ha-attributes
.stateObj=${this.stateObj} .stateObj=${this.stateObj}
extraFilters="id,user_id,editable" extra-filters="id,user_id,editable"
></ha-attributes> ></ha-attributes>
${this.stateObj.attributes.latitude && this.stateObj.attributes.longitude ${this.stateObj.attributes.latitude && this.stateObj.attributes.longitude
? html` ? html`
@@ -78,6 +78,9 @@ class MoreInfoPerson extends LitElement {
margin: 36px 0 8px 0; margin: 36px 0 8px 0;
text-align: right; text-align: right;
} }
ha-map {
margin-top: 16px;
}
`; `;
} }
} }

View File

@@ -26,10 +26,8 @@ import { navigate } from "../../common/navigate";
import "../../components/ha-dialog"; import "../../components/ha-dialog";
import "../../components/ha-header-bar"; import "../../components/ha-header-bar";
import "../../components/ha-svg-icon"; import "../../components/ha-svg-icon";
import "../../components/state-history-charts";
import { removeEntityRegistryEntry } from "../../data/entity_registry"; import { removeEntityRegistryEntry } from "../../data/entity_registry";
import { showEntityEditorDialog } from "../../panels/config/entities/show-dialog-entity-editor"; import { showEntityEditorDialog } from "../../panels/config/entities/show-dialog-entity-editor";
import "../../panels/logbook/ha-logbook";
import { haStyleDialog } from "../../resources/styles"; import { haStyleDialog } from "../../resources/styles";
import "../../state-summary/state-card-content"; import "../../state-summary/state-card-content";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
@@ -394,7 +392,9 @@ export class MoreInfoDialog extends LitElement {
--dialog-content-padding: 0; --dialog-content-padding: 0;
} }
state-card-content { state-card-content,
ha-more-info-history,
ha-more-info-logbook:not(:last-child) {
display: block; display: block;
margin-bottom: 16px; margin-bottom: 16px;
} }

View File

@@ -1,5 +1,4 @@
import { import {
css,
customElement, customElement,
html, html,
internalProperty, internalProperty,
@@ -13,7 +12,6 @@ import { throttle } from "../../common/util/throttle";
import "../../components/state-history-charts"; import "../../components/state-history-charts";
import { getRecentWithCache } from "../../data/cached-history"; import { getRecentWithCache } from "../../data/cached-history";
import { HistoryResult } from "../../data/history"; import { HistoryResult } from "../../data/history";
import { haStyle } from "../../resources/styles";
import { HomeAssistant } from "../../types"; import { HomeAssistant } from "../../types";
@customElement("ha-more-info-history") @customElement("ha-more-info-history")
@@ -88,18 +86,6 @@ export class MoreInfoHistory extends LitElement {
this.hass!.language this.hass!.language
); );
} }
static get styles() {
return [
haStyle,
css`
state-history-charts {
display: block;
margin-bottom: 16px;
}
`,
];
}
} }
declare global { declare global {

View File

@@ -152,8 +152,6 @@ export class MoreInfoLogbook extends LitElement {
ha-logbook { ha-logbook {
max-height: 250px; max-height: 250px;
overflow: auto; overflow: auto;
display: block;
margin-top: 16px;
} }
ha-circular-progress { ha-circular-progress {
display: flex; display: flex;

View File

@@ -7,12 +7,13 @@ import {
CSSResult, CSSResult,
customElement, customElement,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
PropertyValues, PropertyValues,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { fireEvent } from "../common/dom/fire_event"; import { fireEvent, HASSDomEvent } from "../common/dom/fire_event";
import { listenMediaQuery } from "../common/dom/media_query"; import { listenMediaQuery } from "../common/dom/media_query";
import { toggleAttribute } from "../common/dom/toggle_attribute"; import { toggleAttribute } from "../common/dom/toggle_attribute";
import { showNotificationDrawer } from "../dialogs/notifications/show-notification-drawer"; import { showNotificationDrawer } from "../dialogs/notifications/show-notification-drawer";
@@ -24,10 +25,17 @@ const NON_SWIPABLE_PANELS = ["map"];
declare global { declare global {
// for fire event // for fire event
interface HASSDomEvents { interface HASSDomEvents {
"hass-open-menu": undefined;
"hass-toggle-menu": undefined; "hass-toggle-menu": undefined;
"hass-edit-sidebar": EditSideBarEvent;
"hass-show-notifications": undefined; "hass-show-notifications": undefined;
} }
interface HTMLElementEventMap {
"hass-edit-sidebar": HASSDomEvent<EditSideBarEvent>;
}
}
interface EditSideBarEvent {
editMode: boolean;
} }
@customElement("home-assistant-main") @customElement("home-assistant-main")
@@ -36,7 +44,9 @@ class HomeAssistantMain extends LitElement {
@property() public route?: Route; @property() public route?: Route;
@property({ type: Boolean }) private narrow?: boolean; @property({ type: Boolean }) public narrow?: boolean;
@internalProperty() private _sidebarEditMode = false;
protected render(): TemplateResult { protected render(): TemplateResult {
const hass = this.hass; const hass = this.hass;
@@ -48,7 +58,9 @@ class HomeAssistantMain extends LitElement {
const sidebarNarrow = this._sidebarNarrow; const sidebarNarrow = this._sidebarNarrow;
const disableSwipe = const disableSwipe =
!sidebarNarrow || NON_SWIPABLE_PANELS.indexOf(hass.panelUrl) !== -1; this._sidebarEditMode ||
!sidebarNarrow ||
NON_SWIPABLE_PANELS.indexOf(hass.panelUrl) !== -1;
// Style block in render because of the mixin that is not supported // Style block in render because of the mixin that is not supported
return html` return html`
@@ -76,6 +88,7 @@ class HomeAssistantMain extends LitElement {
<ha-sidebar <ha-sidebar
.hass=${hass} .hass=${hass}
.narrow=${sidebarNarrow} .narrow=${sidebarNarrow}
.editMode=${this._sidebarEditMode}
.alwaysExpand=${sidebarNarrow || .alwaysExpand=${sidebarNarrow ||
this.hass.dockedSidebar === "docked"} this.hass.dockedSidebar === "docked"}
></ha-sidebar> ></ha-sidebar>
@@ -93,18 +106,28 @@ class HomeAssistantMain extends LitElement {
protected firstUpdated() { protected firstUpdated() {
import(/* webpackChunkName: "ha-sidebar" */ "../components/ha-sidebar"); import(/* webpackChunkName: "ha-sidebar" */ "../components/ha-sidebar");
this.addEventListener("hass-open-menu", () => { this.addEventListener(
if (this._sidebarNarrow) { "hass-edit-sidebar",
this.drawer.open(); (ev: HASSDomEvent<EditSideBarEvent>) => {
} else { this._sidebarEditMode = ev.detail.editMode;
fireEvent(this, "hass-dock-sidebar", {
dock: "docked", if (this._sidebarEditMode) {
}); if (this._sidebarNarrow) {
setTimeout(() => this.appLayout.resetLayout()); this.drawer.open();
} else {
fireEvent(this, "hass-dock-sidebar", {
dock: "docked",
});
setTimeout(() => this.appLayout.resetLayout());
}
}
} }
}); );
this.addEventListener("hass-toggle-menu", () => { this.addEventListener("hass-toggle-menu", () => {
if (this._sidebarEditMode) {
return;
}
if (this._sidebarNarrow) { if (this._sidebarNarrow) {
if (this.drawer.opened) { if (this.drawer.opened) {
this.drawer.close(); this.drawer.close();

View File

@@ -39,6 +39,7 @@ import "../../../layouts/ha-app-layout";
import "../../../layouts/hass-tabs-subpage"; import "../../../layouts/hass-tabs-subpage";
import { haStyle } from "../../../resources/styles"; import { haStyle } from "../../../resources/styles";
import { HomeAssistant, Route } from "../../../types"; import { HomeAssistant, Route } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
import "../ha-config-section"; import "../ha-config-section";
import { configSections } from "../ha-panel-config"; import { configSections } from "../ha-panel-config";
import "./action/ha-automation-action"; import "./action/ha-automation-action";
@@ -159,7 +160,10 @@ export class HaAutomationEditor extends LitElement {
"ui.panel.config.automation.editor.modes.description", "ui.panel.config.automation.editor.modes.description",
"documentation_link", "documentation_link",
html`<a html`<a
href="https://www.home-assistant.io/integrations/automation/#automation-modes" href="${documentationUrl(
this.hass,
"/integrations/automation/#automation-modes"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>${this.hass.localize( >${this.hass.localize(
@@ -247,7 +251,10 @@ export class HaAutomationEditor extends LitElement {
)} )}
</p> </p>
<a <a
href="https://home-assistant.io/docs/automation/trigger/" href="${documentationUrl(
this.hass,
"/docs/automation/trigger/"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
@@ -276,7 +283,10 @@ export class HaAutomationEditor extends LitElement {
)} )}
</p> </p>
<a <a
href="https://home-assistant.io/docs/scripts/conditions/" href="${documentationUrl(
this.hass,
"/docs/scripts/conditions/"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
@@ -305,7 +315,10 @@ export class HaAutomationEditor extends LitElement {
)} )}
</p> </p>
<a <a
href="https://home-assistant.io/docs/automation/action/" href="${documentationUrl(
this.hass,
"/docs/automation/action/"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -124,6 +124,26 @@ class CloudAlexa extends LitElement {
? exposedCards ? exposedCards
: notExposedCards; : notExposedCards;
const iconButton = html`<mwc-icon-button
slot="trigger"
class=${classMap({
exposed: isExposed!,
"not-exposed": !isExposed,
})}
.disabled=${!emptyFilter}
.title=${this.hass!.localize("ui.panel.config.cloud.google.expose")}
>
<ha-svg-icon
.path=${config.should_expose !== null
? isExposed
? mdiCheckboxMarked
: mdiCloseBox
: isDomainExposed
? mdiCheckboxMultipleMarked
: mdiCloseBoxMultiple}
></ha-svg-icon>
</mwc-icon-button>`;
target.push(html` target.push(html`
<ha-card> <ha-card>
<div class="card-content"> <div class="card-content">
@@ -139,67 +159,50 @@ class CloudAlexa extends LitElement {
.map((ifc) => ifc.replace(/(Alexa.|Controller)/g, "")) .map((ifc) => ifc.replace(/(Alexa.|Controller)/g, ""))
.join(", ")} .join(", ")}
</state-info> </state-info>
<ha-button-menu ${!emptyFilter
corner="BOTTOM_START" ? html`${iconButton}`
.entityId=${stateObj.entity_id} : html`<ha-button-menu
@action=${this._exposeChanged} corner="BOTTOM_START"
> .entityId=${stateObj.entity_id}
<mwc-icon-button @action=${this._exposeChanged}
slot="trigger" >
class=${classMap({ ${iconButton}
exposed: isExposed!, <mwc-list-item hasMeta>
"not-exposed": !isExposed, ${this.hass!.localize(
})} "ui.panel.config.cloud.google.expose_entity"
.title=${this.hass!.localize( )}
"ui.panel.config.cloud.alexa.expose" <ha-svg-icon
)} class="exposed"
> slot="meta"
<ha-svg-icon .path=${mdiCheckboxMarked}
.path=${config.should_expose !== null ></ha-svg-icon>
? isExposed </mwc-list-item>
? mdiCheckboxMarked <mwc-list-item hasMeta>
: mdiCloseBox ${this.hass!.localize(
: isDomainExposed "ui.panel.config.cloud.google.dont_expose_entity"
? mdiCheckboxMultipleMarked )}
: mdiCloseBoxMultiple} <ha-svg-icon
></ha-svg-icon> class="not-exposed"
</mwc-icon-button> slot="meta"
<mwc-list-item hasMeta> .path=${mdiCloseBox}
${this.hass!.localize( ></ha-svg-icon>
"ui.panel.config.cloud.alexa.expose_entity" </mwc-list-item>
)} <mwc-list-item hasMeta>
<ha-svg-icon ${this.hass!.localize(
class="exposed" "ui.panel.config.cloud.google.follow_domain"
slot="meta" )}
.path=${mdiCheckboxMarked} <ha-svg-icon
></ha-svg-icon> class=${classMap({
</mwc-list-item> exposed: isDomainExposed,
<mwc-list-item hasMeta> "not-exposed": !isDomainExposed,
${this.hass!.localize( })}
"ui.panel.config.cloud.alexa.dont_expose_entity" slot="meta"
)} .path=${isDomainExposed
<ha-svg-icon ? mdiCheckboxMultipleMarked
class="not-exposed" : mdiCloseBoxMultiple}
slot="meta" ></ha-svg-icon>
.path=${mdiCloseBox} </mwc-list-item>
></ha-svg-icon> </ha-button-menu>`}
</mwc-list-item>
<mwc-list-item hasMeta>
${this.hass!.localize(
"ui.panel.config.cloud.alexa.follow_domain"
)}
<ha-svg-icon
class=${classMap({
exposed: isDomainExposed,
"not-exposed": !isDomainExposed,
})}
slot="meta"
.path=${isDomainExposed
? mdiCheckboxMultipleMarked
: mdiCloseBoxMultiple}
></ha-svg-icon>
</mwc-list-item>
</ha-button-menu>
</div> </div>
</div> </div>
</ha-card> </ha-card>

View File

@@ -14,6 +14,7 @@ import type { HaPaperDialog } from "../../../../components/dialog/ha-paper-dialo
import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box"; import { showConfirmationDialog } from "../../../../dialogs/generic/show-dialog-box";
import { haStyle } from "../../../../resources/styles"; import { haStyle } from "../../../../resources/styles";
import { HomeAssistant } from "../../../../types"; import { HomeAssistant } from "../../../../types";
import { documentationUrl } from "../../../../util/documentation-url";
import { WebhookDialogParams } from "./show-dialog-manage-cloudhook"; import { WebhookDialogParams } from "./show-dialog-manage-cloudhook";
const inputLabel = "Public URL Click to copy to clipboard"; const inputLabel = "Public URL Click to copy to clipboard";
@@ -37,8 +38,11 @@ export class DialogManageCloudhook extends LitElement {
const { webhook, cloudhook } = this._params; const { webhook, cloudhook } = this._params;
const docsUrl = const docsUrl =
webhook.domain === "automation" webhook.domain === "automation"
? "https://www.home-assistant.io/docs/automation/trigger/#webhook-trigger" ? documentationUrl(
: `https://www.home-assistant.io/integrations/${webhook.domain}/`; this.hass!,
"/docs/automation/trigger/#webhook-trigger"
)
: documentationUrl(this.hass!, `/integrations/${webhook.domain}/`);
return html` return html`
<ha-paper-dialog with-backdrop> <ha-paper-dialog with-backdrop>
<h2> <h2>

View File

@@ -130,6 +130,26 @@ class CloudGoogleAssistant extends LitElement {
? exposedCards ? exposedCards
: notExposedCards; : notExposedCards;
const iconButton = html`<mwc-icon-button
slot="trigger"
class=${classMap({
exposed: isExposed!,
"not-exposed": !isExposed,
})}
.disabled=${!emptyFilter}
.title=${this.hass!.localize("ui.panel.config.cloud.google.expose")}
>
<ha-svg-icon
.path=${config.should_expose !== null
? isExposed
? mdiCheckboxMarked
: mdiCloseBox
: isDomainExposed
? mdiCheckboxMultipleMarked
: mdiCloseBoxMultiple}
></ha-svg-icon>
</mwc-icon-button>`;
target.push(html` target.push(html`
<ha-card> <ha-card>
<div class="card-content"> <div class="card-content">
@@ -144,67 +164,50 @@ class CloudGoogleAssistant extends LitElement {
.map((trait) => trait.substr(trait.lastIndexOf(".") + 1)) .map((trait) => trait.substr(trait.lastIndexOf(".") + 1))
.join(", ")} .join(", ")}
</state-info> </state-info>
<ha-button-menu ${!emptyFilter
corner="BOTTOM_START" ? html`${iconButton}`
.entityId=${stateObj.entity_id} : html`<ha-button-menu
@action=${this._exposeChanged} corner="BOTTOM_START"
> .entityId=${stateObj.entity_id}
<mwc-icon-button @action=${this._exposeChanged}
slot="trigger" >
class=${classMap({ ${iconButton}
exposed: isExposed!, <mwc-list-item hasMeta>
"not-exposed": !isExposed, ${this.hass!.localize(
})} "ui.panel.config.cloud.google.expose_entity"
.title=${this.hass!.localize( )}
"ui.panel.config.cloud.google.expose" <ha-svg-icon
)} class="exposed"
> slot="meta"
<ha-svg-icon .path=${mdiCheckboxMarked}
.path=${config.should_expose !== null ></ha-svg-icon>
? isExposed </mwc-list-item>
? mdiCheckboxMarked <mwc-list-item hasMeta>
: mdiCloseBox ${this.hass!.localize(
: isDomainExposed "ui.panel.config.cloud.google.dont_expose_entity"
? mdiCheckboxMultipleMarked )}
: mdiCloseBoxMultiple} <ha-svg-icon
></ha-svg-icon> class="not-exposed"
</mwc-icon-button> slot="meta"
<mwc-list-item hasMeta> .path=${mdiCloseBox}
${this.hass!.localize( ></ha-svg-icon>
"ui.panel.config.cloud.google.expose_entity" </mwc-list-item>
)} <mwc-list-item hasMeta>
<ha-svg-icon ${this.hass!.localize(
class="exposed" "ui.panel.config.cloud.google.follow_domain"
slot="meta" )}
.path=${mdiCheckboxMarked} <ha-svg-icon
></ha-svg-icon> class=${classMap({
</mwc-list-item> exposed: isDomainExposed,
<mwc-list-item hasMeta> "not-exposed": !isDomainExposed,
${this.hass!.localize( })}
"ui.panel.config.cloud.google.dont_expose_entity" slot="meta"
)} .path=${isDomainExposed
<ha-svg-icon ? mdiCheckboxMultipleMarked
class="not-exposed" : mdiCloseBoxMultiple}
slot="meta" ></ha-svg-icon>
.path=${mdiCloseBox} </mwc-list-item>
></ha-svg-icon> </ha-button-menu>`}
</mwc-list-item>
<mwc-list-item hasMeta>
${this.hass!.localize(
"ui.panel.config.cloud.google.follow_domain"
)}
<ha-svg-icon
class=${classMap({
exposed: isDomainExposed,
"not-exposed": !isDomainExposed,
})}
slot="meta"
.path=${isDomainExposed
? mdiCheckboxMultipleMarked
: mdiCloseBoxMultiple}
></ha-svg-icon>
</mwc-list-item>
</ha-button-menu>
</div> </div>
${entity.might_2fa ${entity.might_2fa
? html` ? html`

View File

@@ -8,6 +8,7 @@ import "../../../../layouts/hass-subpage";
import { EventsMixin } from "../../../../mixins/events-mixin"; import { EventsMixin } from "../../../../mixins/events-mixin";
import LocalizeMixin from "../../../../mixins/localize-mixin"; import LocalizeMixin from "../../../../mixins/localize-mixin";
import "../../../../styles/polymer-ha-style"; import "../../../../styles/polymer-ha-style";
import { documentationUrl } from "../../../../util/documentation-url";
import "../../ha-config-section"; import "../../ha-config-section";
/* /*
@@ -70,8 +71,8 @@ class CloudRegister extends LocalizeMixin(EventsMixin(PolymerElement)) {
<p> <p>
[[localize('ui.panel.config.cloud.register.information4')]] [[localize('ui.panel.config.cloud.register.information4')]]
</p><ul> </p><ul>
<li><a href="https://home-assistant.io/tos/" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_terms_conditions')]]</a></li> <li><a href="[[_computeDocumentationUrlTos(hass)]]" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_terms_conditions')]]</a></li>
<li><a href="https://home-assistant.io/privacy/" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_privacy_policy')]]</a></li> <li><a href="[[_computeDocumentationUrlPrivacy(hass)]]" target="_blank" rel="noreferrer">[[localize('ui.panel.config.cloud.register.link_privacy_policy')]]</a></li>
</ul> </ul>
</p> </p>
</div> </div>
@@ -137,6 +138,14 @@ class CloudRegister extends LocalizeMixin(EventsMixin(PolymerElement)) {
} }
} }
_computeDocumentationUrlTos(hass) {
return documentationUrl(hass, "/tos/");
}
_computeDocumentationUrlPrivacy(hass) {
return documentationUrl(hass, "/privacy/");
}
_handleRegister() { _handleRegister() {
let invalid = false; let invalid = false;

View File

@@ -6,10 +6,11 @@ import { html } from "@polymer/polymer/lib/utils/html-tag";
import { PolymerElement } from "@polymer/polymer/polymer-element"; import { PolymerElement } from "@polymer/polymer/polymer-element";
import { computeStateDomain } from "../../../common/entity/compute_state_domain"; import { computeStateDomain } from "../../../common/entity/compute_state_domain";
import LocalizeMixin from "../../../mixins/localize-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin";
import hassAttributeUtil from "../../../util/hass-attributes-util";
import "./ha-form-customize-attributes";
import "../ha-form-style";
import "../../../styles/polymer-ha-style"; import "../../../styles/polymer-ha-style";
import { documentationUrl } from "../../../util/documentation-url";
import hassAttributeUtil from "../../../util/hass-attributes-util";
import "../ha-form-style";
import "./ha-form-customize-attributes";
class HaFormCustomize extends LocalizeMixin(PolymerElement) { class HaFormCustomize extends LocalizeMixin(PolymerElement) {
static get template() { static get template() {
@@ -30,7 +31,7 @@ class HaFormCustomize extends LocalizeMixin(PolymerElement) {
<div class="warning"> <div class="warning">
[[localize('ui.panel.config.customize.warning.include_sentence')]] [[localize('ui.panel.config.customize.warning.include_sentence')]]
<a <a
href="https://www.home-assistant.io/docs/configuration/customizing-devices/#customization-using-the-ui" href="[[_computeDocumentationUrl(hass)]]"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>[[localize('ui.panel.config.customize.warning.include_link')]]</a >[[localize('ui.panel.config.customize.warning.include_link')]]</a
@@ -210,6 +211,13 @@ class HaFormCustomize extends LocalizeMixin(PolymerElement) {
); );
} }
_computeDocumentationUrl(hass) {
return documentationUrl(
hass,
"/docs/configuration/customizing-devices/#customization-using-the-ui"
);
}
computeLocalAttributes(localConfig) { computeLocalAttributes(localConfig) {
if (!localConfig) return []; if (!localConfig) return [];
const localKeys = Object.keys(localConfig); const localKeys = Object.keys(localConfig);

View File

@@ -12,6 +12,7 @@ import "./integrations-card";
import "./system-health-card"; import "./system-health-card";
import { configSections } from "../ha-panel-config"; import { configSections } from "../ha-panel-config";
import "../../../layouts/hass-tabs-subpage"; import "../../../layouts/hass-tabs-subpage";
import { documentationUrl } from "../../../util/documentation-url";
const JS_TYPE = __BUILD__; const JS_TYPE = __BUILD__;
const JS_VERSION = __VERSION__; const JS_VERSION = __VERSION__;
@@ -42,7 +43,7 @@ class HaConfigInfo extends LitElement {
> >
<div class="about"> <div class="about">
<a <a
href="https://www.home-assistant.io" href="${documentationUrl(this.hass, "")}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
><img ><img
@@ -63,7 +64,7 @@ class HaConfigInfo extends LitElement {
</p> </p>
<p class="develop"> <p class="develop">
<a <a
href="https://www.home-assistant.io/developers/credits/" href="${documentationUrl(this.hass, "/developers/credits/")}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -159,11 +159,13 @@ class OZWNetworkDashboard extends LitElement {
} }
private _generateServiceButton(service: string) { private _generateServiceButton(service: string) {
const serviceData = { instance_id: this.ozwInstance };
return html` return html`
<ha-call-service-button <ha-call-service-button
.hass=${this.hass} .hass=${this.hass}
domain="ozw" domain="ozw"
.service=${service} .service=${service}
.serviceData=${serviceData}
> >
${this.hass!.localize(`ui.panel.config.ozw.services.${service}`)} ${this.hass!.localize(`ui.panel.config.ozw.services.${service}`)}
</ha-call-service-button> </ha-call-service-button>

View File

@@ -1,20 +1,20 @@
import "../../../../../components/ha-icon-button";
import "../../../../../components/ha-circular-progress";
import { UnsubscribeFunc } from "home-assistant-js-websocket"; import { UnsubscribeFunc } from "home-assistant-js-websocket";
import { import {
css, css,
CSSResult, CSSResult,
customElement, customElement,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
internalProperty,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import "../../../../../components/buttons/ha-call-api-button"; import "../../../../../components/buttons/ha-call-api-button";
import "../../../../../components/buttons/ha-call-service-button"; import "../../../../../components/buttons/ha-call-service-button";
import "../../../../../components/ha-card"; import "../../../../../components/ha-card";
import "../../../../../components/ha-circular-progress";
import "../../../../../components/ha-icon"; import "../../../../../components/ha-icon";
import "../../../../../components/ha-icon-button";
import "../../../../../components/ha-service-description"; import "../../../../../components/ha-service-description";
import { import {
fetchNetworkStatus, fetchNetworkStatus,
@@ -26,6 +26,7 @@ import {
} from "../../../../../data/zwave"; } from "../../../../../data/zwave";
import { haStyle } from "../../../../../resources/styles"; import { haStyle } from "../../../../../resources/styles";
import { HomeAssistant } from "../../../../../types"; import { HomeAssistant } from "../../../../../types";
import { documentationUrl } from "../../../../../util/documentation-url";
import "../../../ha-config-section"; import "../../../ha-config-section";
@customElement("zwave-network") @customElement("zwave-network")
@@ -71,7 +72,10 @@ export class ZwaveNetwork extends LitElement {
)} )}
<p> <p>
<a <a
href="https://www.home-assistant.io/docs/z-wave/control-panel/" href="${documentationUrl(
this.hass,
"/docs/z-wave/control-panel/"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -4,23 +4,24 @@ import {
css, css,
CSSResult, CSSResult,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
internalProperty,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import "../../../components/ha-picture-upload";
import type { HaPictureUpload } from "../../../components/ha-picture-upload";
import "../../../components/entity/ha-entities-picker"; import "../../../components/entity/ha-entities-picker";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-picture-upload";
import type { HaPictureUpload } from "../../../components/ha-picture-upload";
import "../../../components/user/ha-user-picker"; import "../../../components/user/ha-user-picker";
import { PersonMutableParams } from "../../../data/person"; import { PersonMutableParams } from "../../../data/person";
import { CropOptions } from "../../../dialogs/image-cropper-dialog/show-image-cropper-dialog";
import { PolymerChangedEvent } from "../../../polymer-types"; import { PolymerChangedEvent } from "../../../polymer-types";
import { haStyleDialog } from "../../../resources/styles"; import { haStyleDialog } from "../../../resources/styles";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
import { PersonDetailDialogParams } from "./show-dialog-person-detail"; import { PersonDetailDialogParams } from "./show-dialog-person-detail";
import { CropOptions } from "../../../dialogs/image-cropper-dialog/show-image-cropper-dialog";
const includeDomains = ["device_tracker"]; const includeDomains = ["device_tracker"];
@@ -153,7 +154,10 @@ class DialogPersonDetail extends LitElement {
<ul> <ul>
<li> <li>
<a <a
href="https://www.home-assistant.io/integrations/#presence-detection" href="${documentationUrl(
this.hass,
"/integrations/#presence-detection"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>${this.hass!.localize( >${this.hass!.localize(

View File

@@ -25,6 +25,7 @@ import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
import "../../../layouts/hass-tabs-subpage-data-table"; import "../../../layouts/hass-tabs-subpage-data-table";
import { haStyle } from "../../../resources/styles"; import { haStyle } from "../../../resources/styles";
import { HomeAssistant, Route } from "../../../types"; import { HomeAssistant, Route } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
import { showToast } from "../../../util/toast"; import { showToast } from "../../../util/toast";
import { configSections } from "../ha-panel-config"; import { configSections } from "../ha-panel-config";
@@ -191,7 +192,7 @@ class HaSceneDashboard extends LitElement {
${this.hass.localize("ui.panel.config.scene.picker.introduction")} ${this.hass.localize("ui.panel.config.scene.picker.introduction")}
<p> <p>
<a <a
href="https://home-assistant.io/docs/scene/editor/" href="${documentationUrl(this.hass, "/docs/scene/editor/")}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -1,46 +1,47 @@
import "@material/mwc-fab";
import { mdiContentSave } from "@mdi/js";
import "@polymer/app-layout/app-header/app-header"; import "@polymer/app-layout/app-header/app-header";
import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
import "@polymer/app-layout/app-toolbar/app-toolbar"; import "@polymer/app-layout/app-toolbar/app-toolbar";
import "../../../components/ha-icon-button"; import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
import { PaperListboxElement } from "@polymer/paper-listbox";
import { import {
css, css,
CSSResult, CSSResult,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
internalProperty,
PropertyValues, PropertyValues,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { classMap } from "lit-html/directives/class-map"; import { classMap } from "lit-html/directives/class-map";
import { computeObjectId } from "../../../common/entity/compute_object_id"; import { computeObjectId } from "../../../common/entity/compute_object_id";
import { navigate } from "../../../common/navigate"; import { navigate } from "../../../common/navigate";
import { slugify } from "../../../common/string/slugify";
import { computeRTL } from "../../../common/util/compute_rtl"; import { computeRTL } from "../../../common/util/compute_rtl";
import "../../../components/ha-card"; import "../../../components/ha-card";
import "../../../components/ha-icon-button";
import "../../../components/ha-icon-input"; import "../../../components/ha-icon-input";
import { showToast } from "../../../util/toast"; import "../../../components/ha-svg-icon";
import "@material/mwc-fab";
import { import {
Action, Action,
deleteScript, deleteScript,
getScriptEditorInitData, getScriptEditorInitData,
ScriptConfig,
triggerScript,
MODES, MODES,
MODES_MAX, MODES_MAX,
ScriptConfig,
triggerScript,
} from "../../../data/script"; } from "../../../data/script";
import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box";
import "../../../layouts/ha-app-layout"; import "../../../layouts/ha-app-layout";
import { haStyle } from "../../../resources/styles"; import { haStyle } from "../../../resources/styles";
import { HomeAssistant, Route } from "../../../types"; import { HomeAssistant, Route } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
import { showToast } from "../../../util/toast";
import "../automation/action/ha-automation-action"; import "../automation/action/ha-automation-action";
import { HaDeviceAction } from "../automation/action/types/ha-automation-action-device_id"; import { HaDeviceAction } from "../automation/action/types/ha-automation-action-device_id";
import "../ha-config-section"; import "../ha-config-section";
import { configSections } from "../ha-panel-config"; import { configSections } from "../ha-panel-config";
import "../../../components/ha-svg-icon";
import { mdiContentSave } from "@mdi/js";
import { PaperListboxElement } from "@polymer/paper-listbox";
import { slugify } from "../../../common/string/slugify";
export class HaScriptEditor extends LitElement { export class HaScriptEditor extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant; @property({ attribute: false }) public hass!: HomeAssistant;
@@ -148,7 +149,10 @@ export class HaScriptEditor extends LitElement {
"ui.panel.config.script.editor.modes.description", "ui.panel.config.script.editor.modes.description",
"documentation_link", "documentation_link",
html`<a html`<a
href="https://www.home-assistant.io/integrations/script/#script-modes" href="${documentationUrl(
this.hass,
"/integrations/script/#script-modes"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>${this.hass.localize( >${this.hass.localize(
@@ -197,18 +201,20 @@ export class HaScriptEditor extends LitElement {
</div> </div>
${this.scriptEntityId ${this.scriptEntityId
? html` ? html`
<div class="card-actions layout horizontal justified center"> <div
<span></span> class="card-actions layout horizontal justified center"
<mwc-button
@click=${this._runScript}
title="${this.hass.localize(
"ui.panel.config.script.picker.activate_script"
)}"
?disabled=${this._dirty}
> >
${this.hass.localize("ui.card.script.execute")} <span></span>
</mwc-button> <mwc-button
</div> @click=${this._runScript}
title="${this.hass.localize(
"ui.panel.config.script.picker.activate_script"
)}"
?disabled=${this._dirty}
>
${this.hass.localize("ui.card.script.execute")}
</mwc-button>
</div>
` `
: ``} : ``}
</ha-card> </ha-card>
@@ -227,7 +233,7 @@ export class HaScriptEditor extends LitElement {
)} )}
</p> </p>
<a <a
href="https://home-assistant.io/docs/scripts/" href="${documentationUrl(this.hass, "/docs/scripts/")}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -25,6 +25,7 @@ import { configSections } from "../ha-panel-config";
import "../../../components/ha-svg-icon"; import "../../../components/ha-svg-icon";
import { mdiPlus } from "@mdi/js"; import { mdiPlus } from "@mdi/js";
import { stateIcon } from "../../../common/entity/state_icon"; import { stateIcon } from "../../../common/entity/state_icon";
import { documentationUrl } from "../../../util/documentation-url";
@customElement("ha-script-picker") @customElement("ha-script-picker")
class HaScriptPicker extends LitElement { class HaScriptPicker extends LitElement {
@@ -187,7 +188,7 @@ class HaScriptPicker extends LitElement {
${this.hass.localize("ui.panel.config.script.picker.introduction")} ${this.hass.localize("ui.panel.config.script.picker.introduction")}
<p> <p>
<a <a
href="https://home-assistant.io/docs/scripts/editor/" href="${documentationUrl(this.hass, "/docs/scripts/editor/")}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -9,6 +9,7 @@ import "../../../components/ha-code-editor";
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box"; import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
import { EventsMixin } from "../../../mixins/events-mixin"; import { EventsMixin } from "../../../mixins/events-mixin";
import LocalizeMixin from "../../../mixins/localize-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin";
import { documentationUrl } from "../../../util/documentation-url";
import "../../../styles/polymer-ha-style"; import "../../../styles/polymer-ha-style";
import "./event-subscribe-card"; import "./event-subscribe-card";
import "./events-list"; import "./events-list";
@@ -61,7 +62,7 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
<p> <p>
[[localize( 'ui.panel.developer-tools.tabs.events.description' )]] [[localize( 'ui.panel.developer-tools.tabs.events.description' )]]
<a <a
href="https://www.home-assistant.io/docs/configuration/events/" href="[[_computeDocumentationUrl(hass)]]"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
@@ -149,6 +150,10 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
} }
} }
_computeDocumentationUrl(hass) {
return documentationUrl(hass, "/docs/configuration/events/");
}
_computeValidJSON(parsedJSON) { _computeValidJSON(parsedJSON) {
return parsedJSON !== ERROR_SENTINEL; return parsedJSON !== ERROR_SENTINEL;
} }

View File

@@ -19,6 +19,7 @@ import {
} from "../../../data/ws-templates"; } from "../../../data/ws-templates";
import { haStyle } from "../../../resources/styles"; import { haStyle } from "../../../resources/styles";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
const DEMO_TEMPLATE = `{## Imitate available variables: ##} const DEMO_TEMPLATE = `{## Imitate available variables: ##}
{% set my_test_json = { {% set my_test_json = {
@@ -107,7 +108,10 @@ class HaPanelDevTemplate extends LitElement {
</li> </li>
<li> <li>
<a <a
href="https://home-assistant.io/docs/configuration/templating/" href="${documentationUrl(
this.hass,
"/docs/configuration/templating/"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -285,7 +285,7 @@ class HaLogbook extends LitElement {
.narrow .entry { .narrow .entry {
flex-direction: column; flex-direction: column;
line-height: 1.5; line-height: 1.5;
padding: 8px; padding: 8px 0;
} }
.narrow .icon-message ha-icon { .narrow .icon-message ha-icon {

View File

@@ -5,9 +5,9 @@ import {
CSSResult, CSSResult,
customElement, customElement,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
internalProperty,
PropertyValues, PropertyValues,
query, query,
TemplateResult, TemplateResult,
@@ -191,7 +191,7 @@ class HuiAlarmPanelCard extends LitElement implements LovelaceCard {
: html` : html`
<paper-input <paper-input
id="alarmCode" id="alarmCode"
.label=${this.hass.localize('ui.card.alarm_control_panel.code')} .label=${this.hass.localize("ui.card.alarm_control_panel.code")}
type="password" type="password"
></paper-input> ></paper-input>
`} `}

View File

@@ -63,6 +63,9 @@ export class HuiButtonCard extends LitElement implements LovelaceCard {
return { return {
type: "button", type: "button",
tap_action: {
action: "toggle",
},
entity: foundEntities[0] || "", entity: foundEntities[0] || "",
}; };
} }

View File

@@ -115,7 +115,10 @@ export class HuiDialogEditCard extends LitElement implements HassDialog {
const oldConfig = changedProps.get("_cardConfig") as LovelaceCardConfig; const oldConfig = changedProps.get("_cardConfig") as LovelaceCardConfig;
if (oldConfig?.type !== this._cardConfig!.type) { if (oldConfig?.type !== this._cardConfig!.type) {
this._documentationURL = getCardDocumentationURL(this._cardConfig!.type); this._documentationURL = getCardDocumentationURL(
this.hass,
this._cardConfig!.type
);
} }
} }

View File

@@ -1,14 +1,17 @@
import { import {
getCustomCardEntry,
CUSTOM_TYPE_PREFIX, CUSTOM_TYPE_PREFIX,
getCustomCardEntry,
} from "../../../data/lovelace_custom_cards"; } from "../../../data/lovelace_custom_cards";
import { HomeAssistant } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
const coreDocumentationURLBase = "https://www.home-assistant.io/lovelace/"; export const getCardDocumentationURL = (
hass: HomeAssistant,
export const getCardDocumentationURL = (type: string): string | undefined => { type: string
): string | undefined => {
if (type.startsWith(CUSTOM_TYPE_PREFIX)) { if (type.startsWith(CUSTOM_TYPE_PREFIX)) {
return getCustomCardEntry(type)?.documentationURL; return getCustomCardEntry(type)?.documentationURL;
} }
return `${coreDocumentationURLBase}${type}`; return `${documentationUrl(hass, "/lovelace/")}${type}`;
}; };

View File

@@ -1,33 +1,32 @@
import "@material/mwc-button"; import "@material/mwc-button";
import "@material/mwc-icon-button/mwc-icon-button"; import "@material/mwc-icon-button/mwc-icon-button";
import { mdiHelpCircle } from "@mdi/js";
import { import {
css, css,
CSSResult, CSSResult,
customElement, customElement,
html, html,
internalProperty,
LitElement, LitElement,
property, property,
internalProperty,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { mdiHelpCircle } from "@mdi/js";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import { computeRTLDirection } from "../../../common/util/compute_rtl";
import "../../../components/ha-circular-progress";
import "../../../components/ha-dialog";
import "../../../components/ha-formfield";
import "../../../components/ha-svg-icon";
import "../../../components/ha-switch";
import "../../../components/ha-yaml-editor";
import type { HassDialog } from "../../../dialogs/make-dialog-manager";
import { haStyleDialog } from "../../../resources/styles"; import { haStyleDialog } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
import { documentationUrl } from "../../../util/documentation-url";
import type { SaveDialogParams } from "./show-save-config-dialog"; import type { SaveDialogParams } from "./show-save-config-dialog";
import { computeRTLDirection } from "../../../common/util/compute_rtl";
import type { HassDialog } from "../../../dialogs/make-dialog-manager";
import "../../../components/ha-switch";
import "../../../components/ha-formfield";
import "../../../components/ha-yaml-editor";
import "../../../components/ha-svg-icon";
import "../../../components/ha-dialog";
import "../../../components/ha-circular-progress";
const EMPTY_CONFIG = { views: [] }; const EMPTY_CONFIG = { views: [] };
const coreDocumentationURLBase = "https://www.home-assistant.io/lovelace/";
@customElement("hui-dialog-save-config") @customElement("hui-dialog-save-config")
export class HuiSaveConfig extends LitElement implements HassDialog { export class HuiSaveConfig extends LitElement implements HassDialog {
@property({ attribute: false }) public hass?: HomeAssistant; @property({ attribute: false }) public hass?: HomeAssistant;
@@ -68,7 +67,7 @@ export class HuiSaveConfig extends LitElement implements HassDialog {
"ui.panel.lovelace.editor.save_config.header" "ui.panel.lovelace.editor.save_config.header"
)}<a )}<a
class="header_button" class="header_button"
href=${coreDocumentationURLBase} href=${documentationUrl(this.hass!, "/lovelace/")}
title=${this.hass!.localize("ui.panel.lovelace.menu.help")} title=${this.hass!.localize("ui.panel.lovelace.menu.help")}
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"

View File

@@ -53,6 +53,7 @@ import { showVoiceCommandDialog } from "../../dialogs/voice-command-dialog/show-
import "../../layouts/ha-app-layout"; import "../../layouts/ha-app-layout";
import { haStyle } from "../../resources/styles"; import { haStyle } from "../../resources/styles";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import { documentationUrl } from "../../util/documentation-url";
import { swapView } from "./editor/config-util"; import { swapView } from "./editor/config-util";
import { showEditLovelaceDialog } from "./editor/lovelace-editor/show-edit-lovelace-dialog"; import { showEditLovelaceDialog } from "./editor/lovelace-editor/show-edit-lovelace-dialog";
import { showEditViewDialog } from "./editor/view-editor/show-edit-view-dialog"; import { showEditViewDialog } from "./editor/view-editor/show-edit-view-dialog";
@@ -136,7 +137,7 @@ class HUIRoot extends LitElement {
</mwc-icon-button> </mwc-icon-button>
</div> </div>
<a <a
href="https://www.home-assistant.io/lovelace/" href="${documentationUrl(this.hass, "/lovelace/")}"
rel="noreferrer" rel="noreferrer"
class="menu-link" class="menu-link"
target="_blank" target="_blank"
@@ -266,7 +267,7 @@ class HUIRoot extends LitElement {
` `
: ""} : ""}
<a <a
href="https://www.home-assistant.io/lovelace/" href="${documentationUrl(this.hass, "/lovelace/")}"
rel="noreferrer" rel="noreferrer"
class="menu-link" class="menu-link"
target="_blank" target="_blank"

View File

@@ -4,10 +4,12 @@ import {
CSSResult, CSSResult,
customElement, customElement,
html, html,
LitElement,
internalProperty, internalProperty,
LitElement,
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import { DOMAINS_TOGGLE } from "../../../common/const";
import { computeDomain } from "../../../common/entity/compute_domain";
import "../../../components/ha-icon"; import "../../../components/ha-icon";
import { ActionHandlerEvent } from "../../../data/lovelace"; import { ActionHandlerEvent } from "../../../data/lovelace";
import { HomeAssistant } from "../../../types"; import { HomeAssistant } from "../../../types";
@@ -31,11 +33,16 @@ export class HuiButtonRow extends LitElement implements LovelaceRow {
throw new Error("Error in card configuration. No name specified."); throw new Error("Error in card configuration. No name specified.");
} }
if (!config.tap_action) { this._config = {
throw new Error("Error in card configuration. No action specified."); tap_action: {
} action:
config.entity && DOMAINS_TOGGLE.has(computeDomain(config.entity))
this._config = config; ? "toggle"
: "more-info",
},
hold_action: { action: "more-info" },
...config,
};
} }
protected render(): TemplateResult { protected render(): TemplateResult {

View File

@@ -17,7 +17,7 @@ import { supportsFeature } from "../../common/entity/supports-feature";
import "../../components/ha-menu-button"; import "../../components/ha-menu-button";
import "../../components/media-player/ha-media-player-browse"; import "../../components/media-player/ha-media-player-browse";
import { import {
BROWSER_SOURCE, BROWSER_PLAYER,
MediaPickedEvent, MediaPickedEvent,
SUPPORT_BROWSE_MEDIA, SUPPORT_BROWSE_MEDIA,
} from "../../data/media-player"; } from "../../data/media-player";
@@ -36,7 +36,7 @@ class PanelMediaBrowser extends LitElement {
// @ts-ignore // @ts-ignore
@LocalStorage("mediaBrowseEntityId", true) @LocalStorage("mediaBrowseEntityId", true)
private _entityId = BROWSER_SOURCE; private _entityId = BROWSER_PLAYER;
protected render(): TemplateResult { protected render(): TemplateResult {
const stateObj = this._entityId const stateObj = this._entityId
@@ -44,7 +44,7 @@ class PanelMediaBrowser extends LitElement {
: undefined; : undefined;
const title = const title =
this._entityId === BROWSER_SOURCE this._entityId === BROWSER_PLAYER
? `${this.hass.localize("ui.components.media-browser.web-browser")}` ? `${this.hass.localize("ui.components.media-browser.web-browser")}`
: stateObj?.attributes.friendly_name : stateObj?.attributes.friendly_name
? `${stateObj?.attributes.friendly_name}` ? `${stateObj?.attributes.friendly_name}`
@@ -95,7 +95,7 @@ class PanelMediaBrowser extends LitElement {
ev: HASSDomEvent<MediaPickedEvent> ev: HASSDomEvent<MediaPickedEvent>
): Promise<void> { ): Promise<void> {
const item = ev.detail.item; const item = ev.detail.item;
if (this._entityId === BROWSER_SOURCE) { if (this._entityId === BROWSER_PLAYER) {
const resolvedUrl: any = await this.hass.callWS({ const resolvedUrl: any = await this.hass.callWS({
type: "media_source/resolve_media", type: "media_source/resolve_media",
media_content_id: item.media_content_id, media_content_id: item.media_content_id,

View File

@@ -1,3 +1,5 @@
import "@material/mwc-list/mwc-list";
import "@material/mwc-list/mwc-list-item";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import { import {
@@ -13,7 +15,8 @@ import { fireEvent } from "../../common/dom/fire_event";
import { computeStateName } from "../../common/entity/compute_state_name"; import { computeStateName } from "../../common/entity/compute_state_name";
import { compare } from "../../common/string/compare"; import { compare } from "../../common/string/compare";
import { createCloseHeading } from "../../components/ha-dialog"; import { createCloseHeading } from "../../components/ha-dialog";
import { BROWSER_SOURCE } from "../../data/media-player"; import { UNAVAILABLE_STATES } from "../../data/entity";
import { BROWSER_PLAYER } from "../../data/media-player";
import { haStyleDialog } from "../../resources/styles"; import { haStyleDialog } from "../../resources/styles";
import type { HomeAssistant } from "../../types"; import type { HomeAssistant } from "../../types";
import type { SelectMediaPlayerDialogParams } from "./show-select-media-source-dialog"; import type { SelectMediaPlayerDialogParams } from "./show-select-media-source-dialog";
@@ -49,30 +52,31 @@ export class HuiDialogSelectMediaPlayer extends LitElement {
)} )}
@closed=${this.closeDialog} @closed=${this.closeDialog}
> >
<paper-listbox <mwc-list>
attr-for-selected="itemName" <mwc-list-item .player=${BROWSER_PLAYER} @click=${this._selectPlayer}
@iron-select=${this._selectSource}
><paper-item .itemName=${BROWSER_SOURCE}
>${this.hass.localize( >${this.hass.localize(
"ui.components.media-browser.web-browser" "ui.components.media-browser.web-browser"
)}</paper-item )}</mwc-list-item
> >
${this._params.mediaSources ${this._params.mediaSources
.sort((a, b) => compare(computeStateName(a), computeStateName(b))) .sort((a, b) => compare(computeStateName(a), computeStateName(b)))
.map( .map(
(source) => html` (source) => html`
<paper-item .itemName=${source.entity_id} <mwc-list-item
>${computeStateName(source)}</paper-item .disabled=${UNAVAILABLE_STATES.includes(source.state)}
.player=${source.entity_id}
@click=${this._selectPlayer}
>${computeStateName(source)}</mwc-list-item
> >
` `
)} )}
</paper-listbox> </mwc-list>
</ha-dialog> </ha-dialog>
`; `;
} }
private _selectSource(ev: CustomEvent): void { private _selectPlayer(ev: CustomEvent): void {
const entityId = ev.detail.item.itemName; const entityId = (ev.currentTarget as any).player;
this._params!.sourceSelectedCallback(entityId); this._params!.sourceSelectedCallback(entityId);
this.closeDialog(); this.closeDialog();
} }
@@ -84,8 +88,8 @@ export class HuiDialogSelectMediaPlayer extends LitElement {
ha-dialog { ha-dialog {
--dialog-content-padding: 0 24px 20px; --dialog-content-padding: 0 24px 20px;
} }
paper-item { mwc-list-item[disabled] {
cursor: pointer; --mdc-theme-text-primary-on-background: var(--disabled-text-color);
} }
`, `,
]; ];

View File

@@ -1,4 +1,5 @@
import "@material/mwc-button/mwc-button"; import "@material/mwc-button/mwc-button";
import "@material/mwc-icon-button/mwc-icon-button";
import { mdiDelete } from "@mdi/js"; import { mdiDelete } from "@mdi/js";
import { import {
css, css,
@@ -80,14 +81,14 @@ class HaLongLivedTokens extends LitElement {
) )
)} )}
</div> </div>
<mwc-button <mwc-icon-button
.token=${token} .token=${token}
.disabled=${token.is_current} .disabled=${token.is_current}
.title=${this.hass.localize(`ui.common.delete`)} .title=${this.hass.localize(`ui.common.delete`)}
@click=${this._deleteToken} @click=${this._deleteToken}
> >
<ha-svg-icon .path=${mdiDelete}></ha-svg-icon> <ha-svg-icon .path=${mdiDelete}></ha-svg-icon>
</mwc-button> </mwc-icon-button>
</ha-settings-row>` </ha-settings-row>`
)} )}
</div> </div>
@@ -185,6 +186,9 @@ class HaLongLivedTokens extends LitElement {
mwc-button { mwc-button {
--mdc-theme-primary: var(--primary-color); --mdc-theme-primary: var(--primary-color);
} }
mwc-icon-button {
color: var(--primary-text-color);
}
`, `,
]; ];
} }

View File

@@ -201,7 +201,7 @@ class HaPanelProfile extends LitElement {
} }
private _customizeSidebar() { private _customizeSidebar() {
fireEvent(this, "hass-edit-sidebar"); fireEvent(this, "hass-edit-sidebar", { editMode: true });
} }
private async _refreshRefreshTokens() { private async _refreshRefreshTokens() {

View File

@@ -1,24 +1,25 @@
import "@material/mwc-button/mwc-button";
import "@polymer/paper-input/paper-input";
import "@polymer/paper-item/paper-item"; import "@polymer/paper-item/paper-item";
import "@polymer/paper-listbox/paper-listbox"; import "@polymer/paper-listbox/paper-listbox";
import "../../components/ha-paper-dropdown-menu";
import { TemplateResult, html } from "lit-html";
import { import {
property, css,
CSSResult,
customElement,
internalProperty, internalProperty,
LitElement, LitElement,
customElement, property,
PropertyValues, PropertyValues,
CSSResult,
css,
} from "lit-element"; } from "lit-element";
import { HomeAssistant } from "../../types"; import { html, TemplateResult } from "lit-html";
import "../../components/ha-settings-row";
import { fireEvent } from "../../common/dom/fire_event"; import { fireEvent } from "../../common/dom/fire_event";
import "../../components/ha-formfield"; import "../../components/ha-formfield";
import "../../components/ha-paper-dropdown-menu";
import "../../components/ha-radio"; import "../../components/ha-radio";
import "@polymer/paper-input/paper-input";
import type { HaRadio } from "../../components/ha-radio"; import type { HaRadio } from "../../components/ha-radio";
import "@material/mwc-button/mwc-button"; import "../../components/ha-settings-row";
import { HomeAssistant } from "../../types";
import { documentationUrl } from "../../util/documentation-url";
@customElement("ha-pick-theme-row") @customElement("ha-pick-theme-row")
export class HaPickThemeRow extends LitElement { export class HaPickThemeRow extends LitElement {
@@ -45,7 +46,10 @@ export class HaPickThemeRow extends LitElement {
? this.hass.localize("ui.panel.profile.themes.error_no_theme") ? this.hass.localize("ui.panel.profile.themes.error_no_theme")
: ""} : ""}
<a <a
href="https://www.home-assistant.io/integrations/frontend/#defining-themes" href="${documentationUrl(
this.hass!,
"/integrations/frontend/#defining-themes"
)}"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >

View File

@@ -7,6 +7,7 @@ import { isComponentLoaded } from "../../common/config/is_component_loaded";
import { pushSupported } from "../../components/ha-push-notifications-toggle"; import { pushSupported } from "../../components/ha-push-notifications-toggle";
import LocalizeMixin from "../../mixins/localize-mixin"; import LocalizeMixin from "../../mixins/localize-mixin";
import "../../components/ha-settings-row"; import "../../components/ha-settings-row";
import { documentationUrl } from "../../util/documentation-url";
/* /*
* @appliesMixin LocalizeMixin * @appliesMixin LocalizeMixin
@@ -26,7 +27,7 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
<span slot="description"> <span slot="description">
[[_description(_platformLoaded, _pushSupported)]] [[_description(_platformLoaded, _pushSupported)]]
<a <a
href="https://www.home-assistant.io/integrations/html5" href="[[_computeDocumentationUrl(hass)]]"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>[[localize('ui.panel.profile.push_notifications.link_promo')]]</a >[[localize('ui.panel.profile.push_notifications.link_promo')]]</a
@@ -59,6 +60,10 @@ class HaPushNotificationsRow extends LocalizeMixin(PolymerElement) {
}; };
} }
_computeDocumentationUrl(hass) {
return documentationUrl(hass, "/integrations/html5");
}
_compPlatformLoaded(hass) { _compPlatformLoaded(hass) {
return isComponentLoaded(hass, "notify.html5"); return isComponentLoaded(hass, "notify.html5");
} }

View File

@@ -1,4 +1,4 @@
import "@material/mwc-button/mwc-button"; import "@material/mwc-icon-button/mwc-icon-button";
import { mdiDelete } from "@mdi/js"; import { mdiDelete } from "@mdi/js";
import "@polymer/paper-tooltip/paper-tooltip"; import "@polymer/paper-tooltip/paper-tooltip";
import { import {
@@ -83,14 +83,14 @@ class HaRefreshTokens extends LitElement {
)} )}
</paper-tooltip>` </paper-tooltip>`
: ""} : ""}
<mwc-button <mwc-icon-button
.token=${token} .token=${token}
.disabled=${token.is_current} .disabled=${token.is_current}
.title=${this.hass.localize(`ui.common.delete`)} .title=${this.hass.localize(`ui.common.delete`)}
@click=${this._deleteToken} @click=${this._deleteToken}
> >
<ha-svg-icon .path=${mdiDelete}></ha-svg-icon> <ha-svg-icon .path=${mdiDelete}></ha-svg-icon>
</mwc-button> </mwc-icon-button>
</div> </div>
</ha-settings-row>` </ha-settings-row>`
) )
@@ -135,8 +135,8 @@ class HaRefreshTokens extends LitElement {
ha-settings-row { ha-settings-row {
padding: 0; padding: 0;
} }
mwc-button { mwc-icon-button {
--mdc-theme-primary: var(--primary-color); color: var(--primary-text-color);
} }
`, `,
]; ];

View File

@@ -18,8 +18,22 @@ export const sortableStyles = css`
animation-duration: 0.33s; animation-duration: 0.33s;
} }
#sortable a {
height: 48px;
display: flex;
}
#sortable { #sortable {
outline: none; outline: none;
display: block !important;
}
.hidden-panel {
display: flex !important;
}
.sortable-fallback {
display: none;
} }
.sortable-ghost { .sortable-ghost {
@@ -54,13 +68,25 @@ export const sortableStyles = css`
} }
} }
.show-panel,
.hide-panel { .hide-panel {
display: none; display: none;
position: absolute; position: absolute;
top: 0;
right: 0; right: 0;
--mdc-icon-button-size: 40px;
}
.hide-panel {
top: 4px;
right: 8px;
} }
:host([expanded]) .hide-panel { :host([expanded]) .hide-panel {
display: block;
}
:host([expanded]) .show-panel {
display: inline-flex; display: inline-flex;
} }

View File

@@ -16,13 +16,11 @@ declare global {
interface HASSDomEvents { interface HASSDomEvents {
"hass-dock-sidebar": DockSidebarParams; "hass-dock-sidebar": DockSidebarParams;
"hass-default-panel": DefaultPanelParams; "hass-default-panel": DefaultPanelParams;
"hass-edit-sidebar": undefined;
} }
// for add event listener // for add event listener
interface HTMLElementEventMap { interface HTMLElementEventMap {
"hass-dock-sidebar": HASSDomEvent<DockSidebarParams>; "hass-dock-sidebar": HASSDomEvent<DockSidebarParams>;
"hass-default-panel": HASSDomEvent<DefaultPanelParams>; "hass-default-panel": HASSDomEvent<DefaultPanelParams>;
"hass-edit-sidebar": undefined;
} }
} }

View File

@@ -374,6 +374,12 @@
"video_not_supported": "Your browser does not support the video element.", "video_not_supported": "Your browser does not support the video element.",
"media_not_supported": "The Browser Media Player does not support this type of media", "media_not_supported": "The Browser Media Player does not support this type of media",
"media_browsing_error": "Media Browsing Error", "media_browsing_error": "Media Browsing Error",
"learn_adding_local_media": "Learn more about adding media in the {documentation}.",
"local_media_files": "Place your video, audio and image files in the media directory to be able to browse and play them in the browser or on supported media players.",
"documentation": "documentation",
"no_local_media_found": "No local media found",
"no_media_folder": "It looks like you have not yet created a media directory.",
"setup_local_help": "Check the {documentation} on how to setup local media.",
"class": { "class": {
"album": "Album", "album": "Album",
"app": "App", "app": "App",
@@ -2150,7 +2156,7 @@
"save": "Save", "save": "Save",
"unsaved_changes": "Unsaved changes", "unsaved_changes": "Unsaved changes",
"saved": "Saved", "saved": "Saved",
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration? We will automatically generate your Lovelace UI views with your areas and devices.", "confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration?",
"confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.", "confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.",
"confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?", "confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?",
"confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?", "confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?",

View File

@@ -0,0 +1,11 @@
import { HomeAssistant } from "../types";
export const documentationUrl = (hass: HomeAssistant, path: string) => {
return `https://${
hass.config.version.includes("b")
? "rc"
: hass.config.version.includes("dev")
? "next"
: "www"
}.home-assistant.io${path}`;
};

View File

@@ -0,0 +1,19 @@
import * as assert from "assert";
import { documentationUrl } from "../../src/util/documentation-url";
describe("Generate documentation URL", function () {
it("Generate documentation url for stable", function () {
assert.strictEqual(
// @ts-ignore
documentationUrl({ config: { version: "1.0.0" } }, "/blog"),
"https://www.home-assistant.io/blog"
);
});
it("Generate documentation url for rc", function () {
assert.strictEqual(
// @ts-ignore
documentationUrl({ config: { version: "1.0.0b0" } }, "/blog"),
"https://rc.home-assistant.io/blog"
);
});
});

View File

@@ -440,6 +440,7 @@
"common": { "common": {
"cancel": "Kanselleer", "cancel": "Kanselleer",
"close": "Sluit", "close": "Sluit",
"copied": "Copiato",
"loading": "Laai tans", "loading": "Laai tans",
"save": "Stoor" "save": "Stoor"
}, },
@@ -470,6 +471,25 @@
"loading_history": "Laai tans toestandsgeskiedenis ...", "loading_history": "Laai tans toestandsgeskiedenis ...",
"no_history_found": "Geen toestandsgeskiedenis gevind nie." "no_history_found": "Geen toestandsgeskiedenis gevind nie."
}, },
"media-browser": {
"class": {
"composer": "Compositore",
"directory": "Libreria",
"episode": "Episodio",
"game": "Gioco",
"genre": "Genere",
"image": "Immagine",
"movie": "Film",
"music": "Musica",
"playlist": "Playlist",
"podcast": "Podcast",
"season": "Stagione",
"track": "Traccia",
"tv_show": "Programma televisivo",
"url": "Url",
"video": "Video"
}
},
"related-items": { "related-items": {
"area": "Area", "area": "Area",
"automation": "Deel van die volgende outomatisering", "automation": "Deel van die volgende outomatisering",

View File

@@ -507,6 +507,7 @@
"cancel": "Cancel·la", "cancel": "Cancel·la",
"close": "Tanca", "close": "Tanca",
"continue": "Continua", "continue": "Continua",
"copied": "Copiat",
"delete": "Elimina", "delete": "Elimina",
"error_required": "Obligatori", "error_required": "Obligatori",
"loading": "Carregant", "loading": "Carregant",

View File

@@ -507,6 +507,7 @@
"cancel": "Zrušit", "cancel": "Zrušit",
"close": "Zavřít", "close": "Zavřít",
"continue": "Pokračovat", "continue": "Pokračovat",
"copied": "Zkopírováno",
"delete": "Smazat", "delete": "Smazat",
"error_required": "Povinné", "error_required": "Povinné",
"loading": "Načítání", "loading": "Načítání",
@@ -2691,7 +2692,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "Pokud odeberete konfiguraci uživatelského rozhraní Lovelace, automaticky vygenerujeme pohledy Lovelace s vašimi oblastmi a zařízeními.", "confirm_remove_config_text": "Pokud odeberete konfiguraci uživatelského rozhraní Lovelace, automaticky vygenerujeme pohledy Lovelace s vašimi oblastmi a zařízeními.",
"confirm_remove_config_title": "Opravdu chcete odstranit nastavení Lovelace? Automaticky vygenerujeme vaše zobrazení Lovelace s vašimi oblastmi a zařízeními.", "confirm_remove_config_title": "Opravdu chcete odstranit nastavení uživatelského rozhraní Lovelace?",
"confirm_unsaved_changes": "Máte neuložené změny. Opravdu chcete odejít?", "confirm_unsaved_changes": "Máte neuložené změny. Opravdu chcete odejít?",
"confirm_unsaved_comments": "Vaše konfigurace obsahuje komentáře, které se neuloží. Chcete pokračovat?", "confirm_unsaved_comments": "Vaše konfigurace obsahuje komentáře, které se neuloží. Chcete pokračovat?",
"error_invalid_config": "Vaše konfigurace není platná: {error}", "error_invalid_config": "Vaše konfigurace není platná: {error}",

View File

@@ -419,6 +419,7 @@
"unlock": "Entriegeln" "unlock": "Entriegeln"
}, },
"media_player": { "media_player": {
"media_next_track": "Weiter",
"media_play": "Abspielen", "media_play": "Abspielen",
"sound_mode": "Sound-Modus", "sound_mode": "Sound-Modus",
"source": "Quelle", "source": "Quelle",
@@ -501,6 +502,8 @@
"back": "Zurück", "back": "Zurück",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"close": "Schließen", "close": "Schließen",
"continue": "Weiter",
"copied": "Kopiert",
"delete": "Löschen", "delete": "Löschen",
"error_required": "Benötigt", "error_required": "Benötigt",
"loading": "Laden", "loading": "Laden",
@@ -557,8 +560,26 @@
"loading_history": "Lade Zustandsverlauf...", "loading_history": "Lade Zustandsverlauf...",
"no_history_found": "Kein Zustandsverlauf gefunden." "no_history_found": "Kein Zustandsverlauf gefunden."
}, },
"logbook": {
"entries_not_found": "Keine Logbucheinträge gefunden."
},
"media-browser": { "media-browser": {
"audio_not_supported": "Ihr Browser unterstützt das Audioelement nicht.",
"choose-source": "Quelle wählen", "choose-source": "Quelle wählen",
"class": {
"album": "Album",
"app": "App",
"directory": "Bibliothek",
"episode": "Episode",
"game": "Spiel",
"movie": "Film",
"music": "Musik",
"playlist": "Wiedergabeliste",
"podcast": "Podcast",
"season": "Episode",
"url": "URL",
"video": "Video"
},
"content-type": { "content-type": {
"album": "Album", "album": "Album",
"artist": "Künstler", "artist": "Künstler",
@@ -566,7 +587,13 @@
"playlist": "Playlist", "playlist": "Playlist",
"server": "Server" "server": "Server"
}, },
"play": "Abspielen" "no_items": "Keine Einträge",
"play": "Abspielen",
"video_not_supported": "Ihr Browser unterstützt das Videoelement nicht."
},
"picture-upload": {
"label": "Bild",
"unsupported_format": "Nicht unterstütztes Format, bitte wähle ein JPEG-, PNG- oder GIF-Bild."
}, },
"related-items": { "related-items": {
"area": "Bereich", "area": "Bereich",
@@ -672,8 +699,10 @@
"yaml_not_editable": "Die Einstellungen dieser Entität können nicht über die Benutzeroberfläche bearbeitet werden. Nur über die Benutzeroberfläche eingerichtete Entitäten können über die Benutzeroberfläche konfiguriert werden." "yaml_not_editable": "Die Einstellungen dieser Entität können nicht über die Benutzeroberfläche bearbeitet werden. Nur über die Benutzeroberfläche eingerichtete Entitäten können über die Benutzeroberfläche konfiguriert werden."
}, },
"more_info_control": { "more_info_control": {
"details": "Details",
"dismiss": "Dialog ausblenden", "dismiss": "Dialog ausblenden",
"edit": "Entität bearbeiten", "edit": "Entität bearbeiten",
"history": "Verlauf",
"person": { "person": {
"create_zone": "Zone vom aktuellen Standort erstellen" "create_zone": "Zone vom aktuellen Standort erstellen"
}, },
@@ -849,7 +878,13 @@
"type_select": "Aktionstyp", "type_select": "Aktionstyp",
"type": { "type": {
"choose": { "choose": {
"label": "Auswählen" "add_option": "Option hinzufügen",
"conditions": "Bedingungen",
"default": "Standard-Aktionen",
"label": "Auswählen",
"option": "Option {number}",
"remove_option": "Option entfernen",
"sequence": "Aktionen"
}, },
"condition": { "condition": {
"label": "Bedingung" "label": "Bedingung"
@@ -872,6 +907,7 @@
}, },
"repeat": { "repeat": {
"label": "Wiederholen", "label": "Wiederholen",
"sequence": "Aktionen",
"type_select": "Wiederholungstyp", "type_select": "Wiederholungstyp",
"type": { "type": {
"count": { "count": {
@@ -1044,6 +1080,7 @@
"value_template": "Wert-Template (optional)" "value_template": "Wert-Template (optional)"
}, },
"state": { "state": {
"attribute": "Attribut (Optional)",
"for": "Für", "for": "Für",
"from": "Von", "from": "Von",
"label": "Zustand", "label": "Zustand",
@@ -1068,7 +1105,8 @@
}, },
"time": { "time": {
"at": "Um", "at": "Um",
"label": "Zeit" "label": "Zeit",
"type_value": "Feste Zeit"
}, },
"webhook": { "webhook": {
"label": "Webhook", "label": "Webhook",
@@ -1091,6 +1129,8 @@
"add_automation": "Automatisierung hinzufügen", "add_automation": "Automatisierung hinzufügen",
"delete_automation": "Automatisierung löschen", "delete_automation": "Automatisierung löschen",
"delete_confirm": "Bist du sicher, dass du diese Automatisierung löschen möchtest?", "delete_confirm": "Bist du sicher, dass du diese Automatisierung löschen möchtest?",
"duplicate": "Duplizieren",
"duplicate_automation": "Automatisierung kopieren",
"edit_automation": "Automatisierung bearbeiten", "edit_automation": "Automatisierung bearbeiten",
"header": "Automatisierungseditor", "header": "Automatisierungseditor",
"headers": { "headers": {
@@ -1314,6 +1354,7 @@
} }
}, },
"devices": { "devices": {
"add_prompt": "Mit diesem Gerät wurden noch keine {name} hinzugefügt. Du kannst eins hinzufügen, indem du auf den + Knopf drückst.",
"automation": { "automation": {
"actions": { "actions": {
"caption": "Wenn etwas ausgelöst wird ..." "caption": "Wenn etwas ausgelöst wird ..."
@@ -1477,6 +1518,7 @@
}, },
"integrations": { "integrations": {
"add_integration": "Integration hinzufügen", "add_integration": "Integration hinzufügen",
"attention": "Aufmerksamkeit erforderlich",
"caption": "Integrationen", "caption": "Integrationen",
"config_entry": { "config_entry": {
"area": "In {area}", "area": "In {area}",
@@ -1495,6 +1537,8 @@
"no_device": "Entitäten ohne Geräte", "no_device": "Entitäten ohne Geräte",
"no_devices": "Diese Integration hat keine Geräte.", "no_devices": "Diese Integration hat keine Geräte.",
"options": "Optionen", "options": "Optionen",
"reload": "Neu laden",
"reload_confirm": "Die Integration wurde neu geladen",
"rename": "Umbenennen", "rename": "Umbenennen",
"restart_confirm": "Starte Home Assistant neu, um das Entfernen dieser Integration abzuschließen", "restart_confirm": "Starte Home Assistant neu, um das Entfernen dieser Integration abzuschließen",
"settings_button": "Einstellungen für {integration} bearbeiten", "settings_button": "Einstellungen für {integration} bearbeiten",
@@ -1543,6 +1587,7 @@
"none_found_detail": "Passe deine Suchkriterien an.", "none_found_detail": "Passe deine Suchkriterien an.",
"note_about_integrations": "Nicht alle Integrationen können über die Benutzeroberfläche konfiguriert werden.", "note_about_integrations": "Nicht alle Integrationen können über die Benutzeroberfläche konfiguriert werden.",
"note_about_website_reference": "Weitere Informationen findest du auf der ", "note_about_website_reference": "Weitere Informationen findest du auf der ",
"reconfigure": "Neu konfigurieren",
"rename_dialog": "Bearbeite den Namen dieses Konfigurationseintrags", "rename_dialog": "Bearbeite den Namen dieses Konfigurationseintrags",
"rename_input_label": "Eintragsname", "rename_input_label": "Eintragsname",
"search": "Such-Integrationen" "search": "Such-Integrationen"
@@ -1653,8 +1698,11 @@
"topic": "Topic" "topic": "Topic"
}, },
"ozw": { "ozw": {
"button": "Konfigurieren",
"common": { "common": {
"instance": "Instanz" "instance": "Instanz",
"network": "Netzwerk",
"zwave": "Z-Wave"
}, },
"device_info": { "device_info": {
"zwave_info": "Z-Wave Infos" "zwave_info": "Z-Wave Infos"
@@ -1664,12 +1712,27 @@
"select_instance": "Instanz auswählen" "select_instance": "Instanz auswählen"
}, },
"network_status": { "network_status": {
"details": {
"driverremoved": "Der Treiber wurde entfernt",
"driverreset": "Der Treiber wurde zurückgesetzt",
"ready": "Bereit zum Verbinden",
"started": "Verbindung mit MQTT hergestellt",
"starting": "Verbinde zu MQTT"
},
"offline": "Offline", "offline": "Offline",
"online": "Online", "online": "Online",
"starting": "Startet",
"unknown": "Unbekannt" "unknown": "Unbekannt"
}, },
"network": { "network": {
"header": "Netzwerkverwaltung" "header": "Netzwerkverwaltung"
},
"nodes_table": {
"failed": "Fehlgeschlagen",
"manufacturer": "Hersteller"
},
"refresh_node": {
"start_refresh_button": "Aktualisierung starten"
} }
}, },
"person": { "person": {
@@ -1798,6 +1861,7 @@
"core": "Ort & Anpassungen neu laden", "core": "Ort & Anpassungen neu laden",
"group": "Gruppen neu laden", "group": "Gruppen neu laden",
"heading": "Neuladen der YAML-Konfiguration", "heading": "Neuladen der YAML-Konfiguration",
"homekit": "HomeKit neu laden",
"input_boolean": "Eingabe-Booleans neu laden", "input_boolean": "Eingabe-Booleans neu laden",
"input_datetime": "Eingabe-Datums- und Zeitfelder neu laden", "input_datetime": "Eingabe-Datums- und Zeitfelder neu laden",
"input_number": "Eingabenummern neu laden", "input_number": "Eingabenummern neu laden",
@@ -1807,6 +1871,7 @@
"person": "Personen neu laden", "person": "Personen neu laden",
"scene": "Szenen neu laden", "scene": "Szenen neu laden",
"script": "Skripte neu laden", "script": "Skripte neu laden",
"telegram": "Telegram-Benachrichtigungsdienste neu laden",
"zone": "Zonen neu laden" "zone": "Zonen neu laden"
}, },
"server_management": { "server_management": {
@@ -1828,12 +1893,18 @@
}, },
"tags": { "tags": {
"detail": { "detail": {
"name": "Name" "delete": "Löschen",
"description": "Beschreibung",
"name": "Name",
"update": "Aktualisieren"
}, },
"edit": "Bearbeiten",
"headers": { "headers": {
"last_scanned": "Zuletzt gescannt",
"name": "Name" "name": "Name"
}, },
"never_scanned": "Nie gescannt" "never_scanned": "Nie gescannt",
"write": "Schreiben"
}, },
"users": { "users": {
"add_user": { "add_user": {
@@ -1841,6 +1912,7 @@
"create": "Benutzerkonto anlegen", "create": "Benutzerkonto anlegen",
"name": "Name", "name": "Name",
"password": "Passwort", "password": "Passwort",
"password_confirm": "Passwort bestätigen",
"username": "Benutzername" "username": "Benutzername"
}, },
"caption": "Benutzer", "caption": "Benutzer",
@@ -1857,7 +1929,9 @@
"group": "Gruppe", "group": "Gruppe",
"id": "ID", "id": "ID",
"name": "Name", "name": "Name",
"new_password": "Neues Passwort",
"owner": "Besitzer", "owner": "Besitzer",
"password_changed": "Das Passwort wurde geändert!",
"system_generated": "System generiert", "system_generated": "System generiert",
"system_generated_users_not_editable": "Systemgenerierte Benutzer können nicht aktualisiert werden.", "system_generated_users_not_editable": "Systemgenerierte Benutzer können nicht aktualisiert werden.",
"system_generated_users_not_removable": "Vom System generierte Benutzer können nicht entfernt werden.", "system_generated_users_not_removable": "Vom System generierte Benutzer können nicht entfernt werden.",
@@ -2728,6 +2802,9 @@
"submit": "Absenden" "submit": "Absenden"
}, },
"current_user": "Sie sind derzeit als {fullName} angemeldet.", "current_user": "Sie sind derzeit als {fullName} angemeldet.",
"customize_sidebar": {
"button": "Bearbeiten"
},
"dashboard": { "dashboard": {
"description": "Wähle ein Standard-Dashboard für dieses Gerät.", "description": "Wähle ein Standard-Dashboard für dieses Gerät.",
"dropdown_label": "Dashboard", "dropdown_label": "Dashboard",
@@ -2750,6 +2827,7 @@
"confirm_delete": "Möchten Sie den Zugriffs-Token für {name} wirklich löschen?", "confirm_delete": "Möchten Sie den Zugriffs-Token für {name} wirklich löschen?",
"create": "Token erstellen", "create": "Token erstellen",
"create_failed": "Das Zugriffs-Token konnte nicht erstellt werden.", "create_failed": "Das Zugriffs-Token konnte nicht erstellt werden.",
"created": "Erstellt am {date}",
"created_at": "Erstellt am {date}", "created_at": "Erstellt am {date}",
"delete_failed": "Fehler beim Löschen des Zugriffs-Tokens.", "delete_failed": "Fehler beim Löschen des Zugriffs-Tokens.",
"description": "Erstelle langlebige Zugriffstoken, damit deine Skripte mit deiner Home Assistant-Instanz interagieren können. Jedes Token ist ab der Erstellung für 10 Jahre gültig. Die folgenden langlebigen Zugriffstoken sind derzeit aktiv.", "description": "Erstelle langlebige Zugriffstoken, damit deine Skripte mit deiner Home Assistant-Instanz interagieren können. Jedes Token ist ab der Erstellung für 10 Jahre gültig. Die folgenden langlebigen Zugriffstoken sind derzeit aktiv.",
@@ -2757,6 +2835,7 @@
"header": "Langlebige Zugangs-Token", "header": "Langlebige Zugangs-Token",
"last_used": "Zuletzt verwendet am {date} in {location}", "last_used": "Zuletzt verwendet am {date} in {location}",
"learn_auth_requests": "Erfahre, wie du authentifizierte Anfragen stellen kannst.", "learn_auth_requests": "Erfahre, wie du authentifizierte Anfragen stellen kannst.",
"name": "Name",
"not_used": "Wurde noch nie benutzt", "not_used": "Wurde noch nie benutzt",
"prompt_copy_token": "Kopiere deinen Zugangs-Token. Er wird nicht wieder angezeigt werden.", "prompt_copy_token": "Kopiere deinen Zugangs-Token. Er wird nicht wieder angezeigt werden.",
"prompt_name": "Name?" "prompt_name": "Name?"
@@ -2808,7 +2887,8 @@
"error_no_theme": "Keine Themen verfügbar.", "error_no_theme": "Keine Themen verfügbar.",
"header": "Thema", "header": "Thema",
"link_promo": "Erfahre mehr über Themen", "link_promo": "Erfahre mehr über Themen",
"primary_color": "Primärfarbe" "primary_color": "Primärfarbe",
"reset": "zurücksetzen"
}, },
"vibrate": { "vibrate": {
"description": "Aktiviere oder deaktiviere die Vibration an diesem Gerät, wenn du Geräte steuerst.", "description": "Aktiviere oder deaktiviere die Vibration an diesem Gerät, wenn du Geräte steuerst.",
@@ -2822,6 +2902,7 @@
} }
}, },
"sidebar": { "sidebar": {
"done": "fertig",
"external_app_configuration": "App-Konfiguration", "external_app_configuration": "App-Konfiguration",
"sidebar_toggle": "Seitenleiste umschalten" "sidebar_toggle": "Seitenleiste umschalten"
} }

View File

@@ -604,15 +604,21 @@
"playlist": "Playlist", "playlist": "Playlist",
"server": "Server" "server": "Server"
}, },
"documentation": "documentation",
"learn_adding_local_media": "Learn more about adding media in the {documentation}.",
"local_media_files": "Place your video, audio and image files in the media directory to be able to browse and play them in the browser or on supported media players.",
"media_browsing_error": "Media Browsing Error", "media_browsing_error": "Media Browsing Error",
"media_not_supported": "The Browser Media Player does not support this type of media", "media_not_supported": "The Browser Media Player does not support this type of media",
"media_player": "Media Player", "media_player": "Media Player",
"media-player-browser": "Media Player Browser", "media-player-browser": "Media Player Browser",
"no_items": "No items", "no_items": "No items",
"no_local_media_found": "No local media found",
"no_media_folder": "It looks like you have not yet created a media directory.",
"pick": "Pick", "pick": "Pick",
"pick-media": "Pick Media", "pick-media": "Pick Media",
"play": "Play", "play": "Play",
"play-media": "Play Media", "play-media": "Play Media",
"setup_local_help": "Check the {documentation} on how to setup local media.",
"video_not_supported": "Your browser does not support the video element.", "video_not_supported": "Your browser does not support the video element.",
"web-browser": "Web Browser" "web-browser": "Web Browser"
}, },
@@ -2692,7 +2698,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.", "confirm_remove_config_text": "We will automatically generate your Lovelace UI views with your areas and devices if you remove your Lovelace UI configuration.",
"confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration? We will automatically generate your Lovelace UI views with your areas and devices.", "confirm_remove_config_title": "Are you sure you want to remove your Lovelace UI configuration?",
"confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?", "confirm_unsaved_changes": "You have unsaved changes, are you sure you want to exit?",
"confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?", "confirm_unsaved_comments": "Your configuration contains comment(s), these will not be saved. Do you want to continue?",
"error_invalid_config": "Your configuration is not valid: {error}", "error_invalid_config": "Your configuration is not valid: {error}",

View File

@@ -507,6 +507,7 @@
"cancel": "Cancelar", "cancel": "Cancelar",
"close": "Cerrar", "close": "Cerrar",
"continue": "Continuar", "continue": "Continuar",
"copied": "Copiado",
"delete": "Eliminar", "delete": "Eliminar",
"error_required": "Obligatorio", "error_required": "Obligatorio",
"loading": "Cargando", "loading": "Cargando",
@@ -567,11 +568,27 @@
"loading_history": "Cargando historial de estado...", "loading_history": "Cargando historial de estado...",
"no_history_found": "No se encontró historial de estado." "no_history_found": "No se encontró historial de estado."
}, },
"logbook": {
"entries_not_found": "No se han encontrado entradas en el registro."
},
"media-browser": { "media-browser": {
"audio_not_supported": "Tu navegador no es compatible con el elemento de audio.", "audio_not_supported": "Tu navegador no es compatible con el elemento de audio.",
"choose_player": "Elige reproductor", "choose_player": "Elige reproductor",
"choose-source": "Elige la fuente", "choose-source": "Elige la fuente",
"class": { "class": {
"album": "Álbum",
"app": "Aplicación",
"artist": "Artista",
"channel": "Canal",
"composer": "Compositor",
"contributing_artist": "Artista colaborador",
"directory": "Biblioteca",
"episode": "Episodio",
"game": "Juego",
"genre": "Género",
"image": "Imagen",
"movie": "Película",
"music": "Música",
"playlist": "Lista de reproducción", "playlist": "Lista de reproducción",
"podcast": "Podcast", "podcast": "Podcast",
"season": "Temporada", "season": "Temporada",
@@ -712,6 +729,7 @@
}, },
"more_info_control": { "more_info_control": {
"controls": "Controles", "controls": "Controles",
"details": "Detalles",
"dismiss": "Descartar diálogo", "dismiss": "Descartar diálogo",
"edit": "Editar entidad", "edit": "Editar entidad",
"history": "Historial", "history": "Historial",
@@ -2357,9 +2375,14 @@
"title": "Estados" "title": "Estados"
}, },
"templates": { "templates": {
"all_listeners": "Esta plantilla escucha todos los eventos de cambio de estado.",
"description": "Las plantillas se muestran utilizando el motor de plantillas Jinja2 con algunas extensiones específicas de Home Assistant.", "description": "Las plantillas se muestran utilizando el motor de plantillas Jinja2 con algunas extensiones específicas de Home Assistant.",
"domain": "Dominio",
"editor": "Editor de plantillas", "editor": "Editor de plantillas",
"entity": "Entidad",
"jinja_documentation": "Documentación de plantilla Jinja2", "jinja_documentation": "Documentación de plantilla Jinja2",
"listeners": "Esta plantilla escucha los siguientes eventos de cambio de estado:",
"no_listeners": "Esta plantilla no escucha ningún evento de cambio de estado y no se actualizará automáticamente.",
"reset": "Reiniciar a la plantilla de demostración", "reset": "Reiniciar a la plantilla de demostración",
"template_extensions": "Extensiones de plantilla de Home Assistant", "template_extensions": "Extensiones de plantilla de Home Assistant",
"title": "Plantillas", "title": "Plantillas",
@@ -2946,6 +2969,11 @@
"submit": "Enviar" "submit": "Enviar"
}, },
"current_user": "Has iniciado sesión como {fullName}.", "current_user": "Has iniciado sesión como {fullName}.",
"customize_sidebar": {
"button": "Editar",
"description": "También puedes mantener pulsada la cabecera de la barra lateral para activar el modo de edición.",
"header": "Cambiar el orden y ocultar elementos de la barra lateral"
},
"dashboard": { "dashboard": {
"description": "Selecciona un panel de control predeterminado para este dispositivo.", "description": "Selecciona un panel de control predeterminado para este dispositivo.",
"dropdown_label": "Panel de control", "dropdown_label": "Panel de control",
@@ -2968,6 +2996,7 @@
"confirm_delete": "¿Estás seguro de que quieres eliminar el token de acceso para {name}?", "confirm_delete": "¿Estás seguro de que quieres eliminar el token de acceso para {name}?",
"create": "Crear Token", "create": "Crear Token",
"create_failed": "No se ha podido crear el token de acceso.", "create_failed": "No se ha podido crear el token de acceso.",
"created": "Creado en {date}",
"created_at": "Creado el {date}", "created_at": "Creado el {date}",
"delete_failed": "Error al eliminar el token de acceso.", "delete_failed": "Error al eliminar el token de acceso.",
"description": "Crea tokens de acceso de larga duración para permitir que tus scripts interactúen con tu instancia de Home Assistant. Cada token será válido por 10 años desde la creación. Los siguientes tokens de acceso de larga duración están actualmente activos.", "description": "Crea tokens de acceso de larga duración para permitir que tus scripts interactúen con tu instancia de Home Assistant. Cada token será válido por 10 años desde la creación. Los siguientes tokens de acceso de larga duración están actualmente activos.",
@@ -2975,9 +3004,10 @@
"header": "Tokens de acceso de larga duración", "header": "Tokens de acceso de larga duración",
"last_used": "Último uso el {date} desde {location}", "last_used": "Último uso el {date} desde {location}",
"learn_auth_requests": "Aprende cómo realizar solicitudes autenticadas.", "learn_auth_requests": "Aprende cómo realizar solicitudes autenticadas.",
"name": "Nombre",
"not_used": "Nunca ha sido usado", "not_used": "Nunca ha sido usado",
"prompt_copy_token": "Copia tu token de acceso. No se mostrará de nuevo.", "prompt_copy_token": "Copia tu token de acceso. No se mostrará de nuevo.",
"prompt_name": "¿Nombre?" "prompt_name": "Dale un nombre al token"
}, },
"mfa_setup": { "mfa_setup": {
"close": "Cerrar", "close": "Cerrar",
@@ -3041,6 +3071,7 @@
} }
}, },
"sidebar": { "sidebar": {
"done": "Hecho",
"external_app_configuration": "Configuración de la aplicación", "external_app_configuration": "Configuración de la aplicación",
"sidebar_toggle": "Alternar barra lateral" "sidebar_toggle": "Alternar barra lateral"
} }

View File

@@ -507,6 +507,7 @@
"cancel": "Annuler", "cancel": "Annuler",
"close": "Fermer", "close": "Fermer",
"continue": "Continuer", "continue": "Continuer",
"copied": "Copié",
"delete": "Supprimer", "delete": "Supprimer",
"error_required": "Obligatoire", "error_required": "Obligatoire",
"loading": "Chargement", "loading": "Chargement",
@@ -567,10 +568,35 @@
"loading_history": "Chargement de l'historique des valeurs ...", "loading_history": "Chargement de l'historique des valeurs ...",
"no_history_found": "Aucun historique des valeurs trouvé." "no_history_found": "Aucun historique des valeurs trouvé."
}, },
"logbook": {
"entries_not_found": "Aucune entrée trouvée dans le journal."
},
"media-browser": { "media-browser": {
"audio_not_supported": "Votre navigateur ne prend pas en charge l'élément audio.", "audio_not_supported": "Votre navigateur ne prend pas en charge l'élément audio.",
"choose_player": "Choisissez le lecteur", "choose_player": "Choisissez le lecteur",
"choose-source": "Choisissez la source", "choose-source": "Choisissez la source",
"class": {
"album": "Album",
"app": "App",
"artist": "Artiste",
"channel": "Canal",
"composer": "Compositeur",
"contributing_artist": "Artiste collaborateur",
"directory": "Bibliothèque",
"episode": "Épisode",
"game": "Jeu",
"genre": "Genre",
"image": "Image",
"movie": "Film",
"music": "Musique",
"playlist": "Liste de lecture",
"podcast": "Podcast",
"season": "Saison",
"track": "Piste",
"tv_show": "Émission de télévision",
"url": "Url",
"video": "Vidéo"
},
"content-type": { "content-type": {
"album": "Album", "album": "Album",
"artist": "Artiste", "artist": "Artiste",
@@ -703,6 +729,7 @@
}, },
"more_info_control": { "more_info_control": {
"controls": "Contrôles", "controls": "Contrôles",
"details": "Détails",
"dismiss": "Fermer la fenêtre de dialogue", "dismiss": "Fermer la fenêtre de dialogue",
"edit": "Modifier l'entité", "edit": "Modifier l'entité",
"history": "Historique", "history": "Historique",
@@ -934,9 +961,12 @@
"service_data": "Données du service" "service_data": "Données du service"
}, },
"wait_for_trigger": { "wait_for_trigger": {
"label": "Attendre le déclencheur" "continue_timeout": "Continuer à l'expiration du délai",
"label": "Attendre le déclencheur",
"timeout": "Délai d'expiration (optionnel)"
}, },
"wait_template": { "wait_template": {
"continue_timeout": "Continuer à l'expiration du délai",
"label": "Attendre", "label": "Attendre",
"timeout": "Délai d'expiration (optionnel)", "timeout": "Délai d'expiration (optionnel)",
"wait_template": "Template d'attente" "wait_template": "Template d'attente"
@@ -1000,7 +1030,9 @@
"time": { "time": {
"after": "Après", "after": "Après",
"before": "Avant", "before": "Avant",
"label": "Heure" "label": "Heure",
"type_input": "Valeur d'une aide de date/heure",
"type_value": "Temps fixe"
}, },
"zone": { "zone": {
"entity": "Entité avec localisation", "entity": "Entité avec localisation",
@@ -1567,6 +1599,7 @@
"reload_restart_confirm": "Redémarrer Home Assistant pour finaliser le rechargement de cette intégration", "reload_restart_confirm": "Redémarrer Home Assistant pour finaliser le rechargement de cette intégration",
"rename": "Renommer", "rename": "Renommer",
"restart_confirm": "Redémarrer Home Assistant pour terminer la suppression de cette intégration", "restart_confirm": "Redémarrer Home Assistant pour terminer la suppression de cette intégration",
"services": "{count} {count, plural,\n one {service}\n other {services}\n}",
"settings_button": "Modifier les paramètres pour {integration}", "settings_button": "Modifier les paramètres pour {integration}",
"system_options": "Options système", "system_options": "Options système",
"system_options_button": "Options système pour {integration}", "system_options_button": "Options système pour {integration}",
@@ -2342,9 +2375,14 @@
"title": "États" "title": "États"
}, },
"templates": { "templates": {
"all_listeners": "Ce modèle écoute tous les événements de changement d'état.",
"description": "Les modèles sont rendus à l'aide du moteur de modèles Jinja2 avec certaines extensions spécifiques de Home Assistant.", "description": "Les modèles sont rendus à l'aide du moteur de modèles Jinja2 avec certaines extensions spécifiques de Home Assistant.",
"domain": "Domaine",
"editor": "Éditeur de modèles", "editor": "Éditeur de modèles",
"entity": "Entité",
"jinja_documentation": "Documentation de modèle Jinja2", "jinja_documentation": "Documentation de modèle Jinja2",
"listeners": "Ce modèle écoute les événements de changement d'état suivants:",
"no_listeners": "Ce modèle n'écoute aucun événement de changement d'état et ne sera pas mis à jour automatiquement.",
"reset": "Réinitialiser au modèle de démonstration", "reset": "Réinitialiser au modèle de démonstration",
"template_extensions": "Extensions de modèles de Home Assistant", "template_extensions": "Extensions de modèles de Home Assistant",
"title": "Modèle", "title": "Modèle",
@@ -2931,6 +2969,11 @@
"submit": "Envoyer" "submit": "Envoyer"
}, },
"current_user": "Vous êtes actuellement connecté en tant que {fullName}.", "current_user": "Vous êtes actuellement connecté en tant que {fullName}.",
"customize_sidebar": {
"button": "Modifier",
"description": "Vous pouvez également appuyer et maintenir l'en-tête de la barre latérale pour activer le mode d'édition.",
"header": "Modifier l'ordre et masquer les éléments de la barre latérale"
},
"dashboard": { "dashboard": {
"description": "Choisissez un tableau de bord par défaut pour cet appareil.", "description": "Choisissez un tableau de bord par défaut pour cet appareil.",
"dropdown_label": "Tableau de bord", "dropdown_label": "Tableau de bord",
@@ -2953,6 +2996,7 @@
"confirm_delete": "Êtes-vous sûr de vouloir supprimer le jeton d'accès de {name} ?", "confirm_delete": "Êtes-vous sûr de vouloir supprimer le jeton d'accès de {name} ?",
"create": "Créer un jeton", "create": "Créer un jeton",
"create_failed": "Impossible de créer le jeton d'accès.", "create_failed": "Impossible de créer le jeton d'accès.",
"created": "Créé le {date}",
"created_at": "Créé le {date}", "created_at": "Créé le {date}",
"delete_failed": "Impossible de supprimer le jeton d'accès.", "delete_failed": "Impossible de supprimer le jeton d'accès.",
"description": "Créez des jetons d'accès de longue durée pour permettre à vos scripts d'interagir avec votre instance de Home Assistant. Chaque jeton sera valable 10 ans à compter de sa création. Les jetons d'accès longue durée suivants sont actuellement actifs.", "description": "Créez des jetons d'accès de longue durée pour permettre à vos scripts d'interagir avec votre instance de Home Assistant. Chaque jeton sera valable 10 ans à compter de sa création. Les jetons d'accès longue durée suivants sont actuellement actifs.",
@@ -2960,6 +3004,7 @@
"header": "Jetons d'accès de longue durée", "header": "Jetons d'accès de longue durée",
"last_used": "Dernière utilisation le {date} à partir de {location}", "last_used": "Dernière utilisation le {date} à partir de {location}",
"learn_auth_requests": "Apprenez comment faire des demandes authentifiées.", "learn_auth_requests": "Apprenez comment faire des demandes authentifiées.",
"name": "Nom",
"not_used": "N'a jamais été utilisé", "not_used": "N'a jamais été utilisé",
"prompt_copy_token": "Copiez votre jeton d'accès. Il ne sera plus affiché à nouveau.", "prompt_copy_token": "Copiez votre jeton d'accès. Il ne sera plus affiché à nouveau.",
"prompt_name": "Nom ?" "prompt_name": "Nom ?"
@@ -3026,6 +3071,7 @@
} }
}, },
"sidebar": { "sidebar": {
"done": "Terminé",
"external_app_configuration": "Configuration de l'application", "external_app_configuration": "Configuration de l'application",
"sidebar_toggle": "Activer la barre latérale" "sidebar_toggle": "Activer la barre latérale"
} }

View File

@@ -507,6 +507,7 @@
"cancel": "Annulla", "cancel": "Annulla",
"close": "Chiudi", "close": "Chiudi",
"continue": "Continua", "continue": "Continua",
"copied": "Copiato",
"delete": "Elimina", "delete": "Elimina",
"error_required": "Necessario", "error_required": "Necessario",
"loading": "Caricamento", "loading": "Caricamento",
@@ -574,6 +575,12 @@
"audio_not_supported": "Il tuo browser non supporta l'elemento audio.", "audio_not_supported": "Il tuo browser non supporta l'elemento audio.",
"choose_player": "Scegli il lettore", "choose_player": "Scegli il lettore",
"choose-source": "Scegli origine", "choose-source": "Scegli origine",
"class": {
"movie": "Film",
"music": "Musica",
"season": "Stagione",
"track": "Traccia dispositivo"
},
"content-type": { "content-type": {
"album": "Album", "album": "Album",
"artist": "Artista", "artist": "Artista",

View File

@@ -507,6 +507,7 @@
"cancel": "Avbryt", "cancel": "Avbryt",
"close": "Lukk", "close": "Lukk",
"continue": "Fortsette", "continue": "Fortsette",
"copied": "Kopiert",
"delete": "Slett", "delete": "Slett",
"error_required": "Nødvendig", "error_required": "Nødvendig",
"loading": "Laster", "loading": "Laster",
@@ -910,7 +911,7 @@
"add_option": "Legg til alternativ", "add_option": "Legg til alternativ",
"conditions": "Betingelser", "conditions": "Betingelser",
"default": "Standard handlinger", "default": "Standard handlinger",
"label": "Velge", "label": "Velg",
"option": "Alternativ {number}", "option": "Alternativ {number}",
"remove_option": "Fjern alternativ", "remove_option": "Fjern alternativ",
"sequence": "Handlinger" "sequence": "Handlinger"
@@ -943,11 +944,11 @@
"label": "Antall" "label": "Antall"
}, },
"until": { "until": {
"conditions": "Inntil forholdene", "conditions": "Inntil betingelser",
"label": "Før" "label": "Til"
}, },
"while": { "while": {
"conditions": "Mens forholdene", "conditions": "Mens betingelser",
"label": "Mens" "label": "Mens"
} }
} }
@@ -2043,7 +2044,7 @@
"tag_id_placeholder": "Automatisk generert når den er tom", "tag_id_placeholder": "Automatisk generert når den er tom",
"update": "Oppdater" "update": "Oppdater"
}, },
"edit": "Redigere", "edit": "Rediger",
"headers": { "headers": {
"last_scanned": "Sist skannet", "last_scanned": "Sist skannet",
"name": "Navn" "name": "Navn"
@@ -2374,11 +2375,14 @@
"title": "Tilstander" "title": "Tilstander"
}, },
"templates": { "templates": {
"all_listeners": "Denne malen lytter etter alle tilstand endret hendelser.",
"description": "Maler blir rendret ved hjelp av Jinja2-malmotoren med noen spesifikke utvidelser for Home Assistant.", "description": "Maler blir rendret ved hjelp av Jinja2-malmotoren med noen spesifikke utvidelser for Home Assistant.",
"domain": "Domene", "domain": "Domene",
"editor": "Maleditor", "editor": "Maleditor",
"entity": "Entitet", "entity": "Entitet",
"jinja_documentation": "Jinja2 mal dokumentasjon", "jinja_documentation": "Jinja2 mal dokumentasjon",
"listeners": "Denne malen lytter etter følgende tilstand endret hendelser:",
"no_listeners": "Denne malen lytter ikke etter noen tilstand endret hendelser og oppdateres ikke automatisk.",
"reset": "Tilbakestill til demomal", "reset": "Tilbakestill til demomal",
"template_extensions": "Mal utvidelser for Home Assistant", "template_extensions": "Mal utvidelser for Home Assistant",
"title": "Mal", "title": "Mal",
@@ -2626,7 +2630,7 @@
} }
}, },
"cardpicker": { "cardpicker": {
"by_card": "Med kort", "by_card": "Etter kort",
"by_entity": "Etter entitet", "by_entity": "Etter entitet",
"custom_card": "Tilpasset", "custom_card": "Tilpasset",
"domain": "Domene", "domain": "Domene",
@@ -2688,7 +2692,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "Vi vil automatisk opprette Lovelace-visningene dine med områdene og enhetene dine hvis du fjerner Lovelace-konfigurasjonen.", "confirm_remove_config_text": "Vi vil automatisk opprette Lovelace-visningene dine med områdene og enhetene dine hvis du fjerner Lovelace-konfigurasjonen.",
"confirm_remove_config_title": "Er du sikker på at du vil fjerne Lovelace-konfigurasjonen? Vi vil automatisk opprette Lovelace-visningene dine med områdene og enhetene dine.", "confirm_remove_config_title": "Er du sikker på at du vil fjerne Lovelace UI-konfigurasjonen?",
"confirm_unsaved_changes": "Du har ulagrede endringer, er du sikker på at du vil avslutte?", "confirm_unsaved_changes": "Du har ulagrede endringer, er du sikker på at du vil avslutte?",
"confirm_unsaved_comments": "Konfigurasjonen din inneholder kommentarer, disse vil ikke bli lagret. Vil du fortsette?", "confirm_unsaved_comments": "Konfigurasjonen din inneholder kommentarer, disse vil ikke bli lagret. Vil du fortsette?",
"error_invalid_config": "Konfigurasjonen din er ikke gyldig: {error}", "error_invalid_config": "Konfigurasjonen din er ikke gyldig: {error}",
@@ -2966,6 +2970,8 @@
}, },
"current_user": "Du er logget inn som {fullName}.", "current_user": "Du er logget inn som {fullName}.",
"customize_sidebar": { "customize_sidebar": {
"button": "Rediger",
"description": "Du kan også trykke på og holde nede overskriften på sidepanelet for å aktivere redigeringsmodus.",
"header": "Endre rekkefølgen og skjul elementer fra sidepanelet" "header": "Endre rekkefølgen og skjul elementer fra sidepanelet"
}, },
"dashboard": { "dashboard": {
@@ -3001,7 +3007,7 @@
"name": "Navn", "name": "Navn",
"not_used": "Har aldri blitt brukt", "not_used": "Har aldri blitt brukt",
"prompt_copy_token": "Kopier tilgangstoken. Det blir ikke vist igjen.", "prompt_copy_token": "Kopier tilgangstoken. Det blir ikke vist igjen.",
"prompt_name": "Navn?" "prompt_name": "Gi tokenet et navn"
}, },
"mfa_setup": { "mfa_setup": {
"close": "Lukk", "close": "Lukk",

View File

@@ -507,6 +507,7 @@
"cancel": "Annuleren", "cancel": "Annuleren",
"close": "Sluiten", "close": "Sluiten",
"continue": "Ga verder", "continue": "Ga verder",
"copied": "Gekopieerd",
"delete": "Verwijderen", "delete": "Verwijderen",
"error_required": "Verplicht", "error_required": "Verplicht",
"loading": "Bezig met laden", "loading": "Bezig met laden",
@@ -2374,11 +2375,14 @@
"title": "Toestanden" "title": "Toestanden"
}, },
"templates": { "templates": {
"all_listeners": "Deze template luistert naar alle gebeurtenissen met gewijzigde status.",
"description": "Sjablonen worden weergegeven met de Jinja2-sjabloonediter samen met enkele extensies van Home Assistant.", "description": "Sjablonen worden weergegeven met de Jinja2-sjabloonediter samen met enkele extensies van Home Assistant.",
"domain": "Domein", "domain": "Domein",
"editor": "Sjabloonediter", "editor": "Sjabloonediter",
"entity": "Entiteit", "entity": "Entiteit",
"jinja_documentation": "Jinja2-sjabloondocumentatie", "jinja_documentation": "Jinja2-sjabloondocumentatie",
"listeners": "Deze template luistert naar de volgende gebeurtenissen met gewijzigde status:",
"no_listeners": "Deze template luistert niet naar gebeurtenissen met statuswijziging en wordt niet automatisch bijgewerkt.",
"reset": "Resetten naar demosjabloon", "reset": "Resetten naar demosjabloon",
"template_extensions": "Home Assistant sjabloon extensiesHome Assistant", "template_extensions": "Home Assistant sjabloon extensiesHome Assistant",
"title": "Sjablonen", "title": "Sjablonen",
@@ -2688,7 +2692,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "We zullen je Lovelace gebruikersinterface automatisch genereren met je gebieden en apparaten als je de huidige Lovelace gebruikersinterface verwijdert.", "confirm_remove_config_text": "We zullen je Lovelace gebruikersinterface automatisch genereren met je gebieden en apparaten als je de huidige Lovelace gebruikersinterface verwijdert.",
"confirm_remove_config_title": "Weet je zeker dat je de huidige Lovelace gebruikersinterface wilt verwijderen? We zullen automatisch een nieuwe Lovelace gebruikersinterface genereren op basis van je gebieden en apparaten.", "confirm_remove_config_title": "Weet u zeker dat u uw Lovelace UI-configuratie wilt verwijderen?",
"confirm_unsaved_changes": "Er zijn nog niet-opgeslagen wijzigingen, weet je zeker dat je wilt afsluiten?", "confirm_unsaved_changes": "Er zijn nog niet-opgeslagen wijzigingen, weet je zeker dat je wilt afsluiten?",
"confirm_unsaved_comments": "Uw configuratie bevat opmerkingen, deze worden niet opgeslagen. Wil je doorgaan?", "confirm_unsaved_comments": "Uw configuratie bevat opmerkingen, deze worden niet opgeslagen. Wil je doorgaan?",
"error_invalid_config": "Uw configuratie is niet geldig: {error}", "error_invalid_config": "Uw configuratie is niet geldig: {error}",
@@ -3003,7 +3007,7 @@
"name": "Naam", "name": "Naam",
"not_used": "Is nog nooit gebruikt", "not_used": "Is nog nooit gebruikt",
"prompt_copy_token": "Kopieer je toegangstoken. Het wordt niet meer getoond.", "prompt_copy_token": "Kopieer je toegangstoken. Het wordt niet meer getoond.",
"prompt_name": "Naam?" "prompt_name": "Geef het token een naam"
}, },
"mfa_setup": { "mfa_setup": {
"close": "Sluiten", "close": "Sluiten",

View File

@@ -507,6 +507,7 @@
"cancel": "Anuluj", "cancel": "Anuluj",
"close": "Zamknij", "close": "Zamknij",
"continue": "Kontynuuj", "continue": "Kontynuuj",
"copied": "Skopiowano",
"delete": "Usuń", "delete": "Usuń",
"error_required": "To pole jest wymagane", "error_required": "To pole jest wymagane",
"loading": "Ładowanie", "loading": "Ładowanie",

View File

@@ -489,6 +489,7 @@
"back": "Înapoi", "back": "Înapoi",
"cancel": "Revocare", "cancel": "Revocare",
"close": "Închide", "close": "Închide",
"copied": "Copiat",
"delete": "Șterge", "delete": "Șterge",
"error_required": "Necesar", "error_required": "Necesar",
"loading": "Se încarcă", "loading": "Se încarcă",
@@ -544,6 +545,32 @@
"loading_history": "Încărcarea istoricului de stare ...", "loading_history": "Încărcarea istoricului de stare ...",
"no_history_found": "Nici un istoric de stare nu a fost găsit." "no_history_found": "Nici un istoric de stare nu a fost găsit."
}, },
"logbook": {
"entries_not_found": "Nu s-au găsit intrări în jurnal."
},
"media-browser": {
"class": {
"album": "Album",
"app": "Aplicație",
"artist": "Artist",
"channel": "Canal",
"composer": "Compozitor",
"contributing_artist": "Artist contribuitor",
"directory": "Bibliotecă",
"episode": "Episod",
"game": "Joc",
"genre": "Gen",
"image": "Imagine",
"movie": "Film",
"music": "Muzică",
"playlist": "Playlist",
"podcast": "Podcast",
"season": "Sezon",
"tv_show": "Emisiune TV",
"url": "Url",
"video": "Video"
}
},
"related-items": { "related-items": {
"area": "Zonă", "area": "Zonă",
"automation": "Parte din următoarele automatizări", "automation": "Parte din următoarele automatizări",
@@ -647,6 +674,7 @@
"yaml_not_editable": "Setările acestei entități nu se pot edita din interfața grafica. Numai entitățile configurate in interfața grafica sunt configurabile din interfața grafica." "yaml_not_editable": "Setările acestei entități nu se pot edita din interfața grafica. Numai entitățile configurate in interfața grafica sunt configurabile din interfața grafica."
}, },
"more_info_control": { "more_info_control": {
"details": "Detalii",
"dismiss": "Se respinge dialogul", "dismiss": "Se respinge dialogul",
"edit": "Editează entitatea", "edit": "Editează entitatea",
"person": { "person": {
@@ -850,7 +878,13 @@
"label": "Cheama serviciu", "label": "Cheama serviciu",
"service_data": "Date serviciu" "service_data": "Date serviciu"
}, },
"wait_for_trigger": {
"continue_timeout": "Continua la timeout",
"label": "Așteptați declanșatorul",
"timeout": "Timeout (optional)"
},
"wait_template": { "wait_template": {
"continue_timeout": "Continuați la expirare",
"label": "Asteptare", "label": "Asteptare",
"timeout": "Timeout (opțional)", "timeout": "Timeout (opțional)",
"wait_template": "Sablon Asteptare" "wait_template": "Sablon Asteptare"
@@ -1260,6 +1294,7 @@
}, },
"integrations": { "integrations": {
"add_integration": "Adăugați integrare", "add_integration": "Adăugați integrare",
"attention": "Atenție necesară",
"caption": "Integrări", "caption": "Integrări",
"config_entry": { "config_entry": {
"delete": "Șterge", "delete": "Șterge",
@@ -1317,6 +1352,7 @@
"none": "Nimic nu a fost configurat încă", "none": "Nimic nu a fost configurat încă",
"none_found": "Nu s-au găsit integrări", "none_found": "Nu s-au găsit integrări",
"none_found_detail": "Ajustați criteriile de căutare.", "none_found_detail": "Ajustați criteriile de căutare.",
"reconfigure": "Reconfigurați",
"rename_dialog": "Editați numele acestei intrări de configurare", "rename_dialog": "Editați numele acestei intrări de configurare",
"rename_input_label": "Introdu nume", "rename_input_label": "Introdu nume",
"search": "Căutare integrari" "search": "Căutare integrari"
@@ -1848,9 +1884,14 @@
"title": "Status" "title": "Status"
}, },
"templates": { "templates": {
"all_listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:",
"description": "Șabloanele sunt redate utilizând motorul de șablon Jinja2 cu unele extensii specifice Home Assistant.", "description": "Șabloanele sunt redate utilizând motorul de șablon Jinja2 cu unele extensii specifice Home Assistant.",
"domain": "Domeniu",
"editor": "Editor șabloane", "editor": "Editor șabloane",
"entity": "Entitate",
"jinja_documentation": "Șablon documentație Jinja2", "jinja_documentation": "Șablon documentație Jinja2",
"listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:",
"no_listeners": "Acest șablon ascultă următoarele evenimente modificate de stare:",
"template_extensions": "Șabloane de extensie pentru Home Assistant", "template_extensions": "Șabloane de extensie pentru Home Assistant",
"title": "Sabloane", "title": "Sabloane",
"unknown_error_template": "Sa produs o eroare de randare necunoscută." "unknown_error_template": "Sa produs o eroare de randare necunoscută."
@@ -2353,6 +2394,11 @@
"submit": "Trimite" "submit": "Trimite"
}, },
"current_user": "În prezent sunteți conectat ca {fullName}.", "current_user": "În prezent sunteți conectat ca {fullName}.",
"customize_sidebar": {
"button": "Editeaza",
"description": "De asemenea, puteți apăsa și ține apăsat antetul barei laterale pentru a activa modul de editare.",
"header": "Schimbați ordinea și ascundeți elementele din bara laterală"
},
"dashboard": { "dashboard": {
"description": "Alegeți un tablou de bord implicit pentru acest dispozitiv.", "description": "Alegeți un tablou de bord implicit pentru acest dispozitiv.",
"dropdown_label": "Tablou de bord", "dropdown_label": "Tablou de bord",
@@ -2375,6 +2421,7 @@
"confirm_delete": "Sigur doriti sa stergeti tokenul de acces pentru {name}?", "confirm_delete": "Sigur doriti sa stergeti tokenul de acces pentru {name}?",
"create": "Creaza un Token", "create": "Creaza un Token",
"create_failed": "Crearea tokenului de acces eşuată", "create_failed": "Crearea tokenului de acces eşuată",
"created": "Creat in {data}",
"created_at": "Creat in {date}", "created_at": "Creat in {date}",
"delete_failed": "Ştergerea tokenului de acces eşuată", "delete_failed": "Ştergerea tokenului de acces eşuată",
"description": "Creați tokenuri de acces cu durată lungă de viață pentru a permite script-urilor dvs. să interacționeze cu instanța dvs. Home Assistant. Fiecare token va fi valabil timp de 10 ani de la creatie. Următoarele tokenuri de acces de lungă durată sunt active la ora actuala.", "description": "Creați tokenuri de acces cu durată lungă de viață pentru a permite script-urilor dvs. să interacționeze cu instanța dvs. Home Assistant. Fiecare token va fi valabil timp de 10 ani de la creatie. Următoarele tokenuri de acces de lungă durată sunt active la ora actuala.",
@@ -2382,6 +2429,7 @@
"header": "Tokenuri de acces de lunga durata", "header": "Tokenuri de acces de lunga durata",
"last_used": "Ultima utilizare la {date} din {location}", "last_used": "Ultima utilizare la {date} din {location}",
"learn_auth_requests": "Aflați cum să faceți cereri autentificate.", "learn_auth_requests": "Aflați cum să faceți cereri autentificate.",
"name": "Nume",
"not_used": "Nu a fost utilizat niciodata", "not_used": "Nu a fost utilizat niciodata",
"prompt_copy_token": "Copia token-ul de acces. Acesta nu va fi afișat din nou.", "prompt_copy_token": "Copia token-ul de acces. Acesta nu va fi afișat din nou.",
"prompt_name": "Nume?" "prompt_name": "Nume?"
@@ -2443,6 +2491,7 @@
} }
}, },
"sidebar": { "sidebar": {
"done": "Terminat",
"external_app_configuration": "Configurație aplicație", "external_app_configuration": "Configurație aplicație",
"sidebar_toggle": "Schimbati bara laterală" "sidebar_toggle": "Schimbati bara laterală"
} }

View File

@@ -507,6 +507,7 @@
"cancel": "Отменить", "cancel": "Отменить",
"close": "Закрыть", "close": "Закрыть",
"continue": "Продолжить", "continue": "Продолжить",
"copied": "Скопировано",
"delete": "Удалить", "delete": "Удалить",
"error_required": "Обязательное поле", "error_required": "Обязательное поле",
"loading": "Загрузка", "loading": "Загрузка",
@@ -580,6 +581,7 @@
"artist": "Исполнитель", "artist": "Исполнитель",
"channel": "Канал", "channel": "Канал",
"composer": "Композитор", "composer": "Композитор",
"contributing_artist": "Соисполнитель",
"directory": "Библиотека", "directory": "Библиотека",
"episode": "Эпизод", "episode": "Эпизод",
"game": "Игра", "game": "Игра",
@@ -2373,11 +2375,14 @@
"title": "Состояния" "title": "Состояния"
}, },
"templates": { "templates": {
"all_listeners": "Этот шаблон отслеживает все события изменения состояния.",
"description": "Здесь Вы можете протестировать поведение шаблонов. В Home Assistant используется шаблонизатор Jinja2 с некоторыми специальными расширениями.", "description": "Здесь Вы можете протестировать поведение шаблонов. В Home Assistant используется шаблонизатор Jinja2 с некоторыми специальными расширениями.",
"domain": "Домен", "domain": "Домен",
"editor": "Редактор шаблонов", "editor": "Редактор шаблонов",
"entity": "Объект", "entity": "Объект",
"jinja_documentation": "Узнайте больше о шаблонизаторе Jinja2", "jinja_documentation": "Узнайте больше о шаблонизаторе Jinja2",
"listeners": "Этот шаблон отслеживает следующие события изменения состояния:",
"no_listeners": "Этот шаблон не отслеживает события изменения состояния и не обновляется автоматически.",
"reset": "Вернуться к демонстрационному шаблону", "reset": "Вернуться к демонстрационному шаблону",
"template_extensions": "Узнайте больше о шаблонах Home Assistant", "template_extensions": "Узнайте больше о шаблонах Home Assistant",
"title": "Шаблоны", "title": "Шаблоны",
@@ -2687,7 +2692,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "Если Вы очистите конфигурацию этой панели Lovelace, карточки с Вашими устройствами и помещениями будут создаваться автоматически.", "confirm_remove_config_text": "Если Вы очистите конфигурацию этой панели Lovelace, карточки с Вашими устройствами и помещениями будут создаваться автоматически.",
"confirm_remove_config_title": "Очистить конфигурацию?", "confirm_remove_config_title": "Вы уверены, что хотите очистить конфигурацию пользовательского интерфейса Lovelace?",
"confirm_unsaved_changes": "У вас есть несохраненные изменения. Вы уверены, что хотите выйти?", "confirm_unsaved_changes": "У вас есть несохраненные изменения. Вы уверены, что хотите выйти?",
"confirm_unsaved_comments": "Ваша конфигурация содержит комментарии, они не будут сохранены. Вы хотите продолжить?", "confirm_unsaved_comments": "Ваша конфигурация содержит комментарии, они не будут сохранены. Вы хотите продолжить?",
"error_invalid_config": "Конфигурация недействительна: {error}", "error_invalid_config": "Конфигурация недействительна: {error}",

View File

@@ -505,6 +505,7 @@
"back": "Tillbaka", "back": "Tillbaka",
"cancel": "Avbryt", "cancel": "Avbryt",
"close": "Stäng", "close": "Stäng",
"continue": "Fortsätt",
"delete": "Radera", "delete": "Radera",
"error_required": "Krävs", "error_required": "Krävs",
"loading": "Läser in", "loading": "Läser in",
@@ -688,8 +689,11 @@
"crop": "Beskär" "crop": "Beskär"
}, },
"more_info_control": { "more_info_control": {
"controls": "Kontroller",
"details": "Detaljer",
"dismiss": "Avfärda", "dismiss": "Avfärda",
"edit": "Redigera entitet", "edit": "Redigera entitet",
"history": "Historik",
"person": { "person": {
"create_zone": "Skapa zon från aktuell plats" "create_zone": "Skapa zon från aktuell plats"
}, },
@@ -1574,6 +1578,7 @@
"none_found_detail": "Justera dina sökkriterier.", "none_found_detail": "Justera dina sökkriterier.",
"note_about_integrations": "Inte alla integrationer kan konfigureras via användargränssnittet ännu.", "note_about_integrations": "Inte alla integrationer kan konfigureras via användargränssnittet ännu.",
"note_about_website_reference": "Fler finns på ", "note_about_website_reference": "Fler finns på ",
"reconfigure": "Konfigurera om",
"rename_dialog": "Redigera namnet på den här konfigurationsposten", "rename_dialog": "Redigera namnet på den här konfigurationsposten",
"rename_input_label": "Ange namn", "rename_input_label": "Ange namn",
"search": "Sök integrationer" "search": "Sök integrationer"
@@ -1724,6 +1729,9 @@
"session": "Hämtar värden som sällan ändras från noden", "session": "Hämtar värden som sällan ändras från noden",
"static": "Hämtar statiska värden från enheten" "static": "Hämtar statiska värden från enheten"
}, },
"nodes_table": {
"id": "ID"
},
"refresh_node": { "refresh_node": {
"complete": "Uppdatering av noden klar", "complete": "Uppdatering av noden klar",
"node_status": "Nodstatus", "node_status": "Nodstatus",
@@ -1875,6 +1883,7 @@
"input_text": "Ladda om inmatningstext", "input_text": "Ladda om inmatningstext",
"introduction": "Vissa delar av Home Assistant kan laddas om utan att en omstart krävs. Att trycka på \"ladda om\" innebär att den nuvarande konfiguration inaktiveras och den nya laddas.", "introduction": "Vissa delar av Home Assistant kan laddas om utan att en omstart krävs. Att trycka på \"ladda om\" innebär att den nuvarande konfiguration inaktiveras och den nya laddas.",
"person": "Ladda om personer", "person": "Ladda om personer",
"rpi_gpio": "Ladda om Raspberry Pi GPIO-entiteter",
"scene": "Ladda om scenarier", "scene": "Ladda om scenarier",
"script": "Ladda om skript", "script": "Ladda om skript",
"template": "Ladda om mallar för entiteter", "template": "Ladda om mallar för entiteter",
@@ -1923,6 +1932,8 @@
"create": "Skapa", "create": "Skapa",
"name": "Namn", "name": "Namn",
"password": "Lösenord", "password": "Lösenord",
"password_confirm": "Bekräfta lösenord",
"password_not_match": "Lösenorden överensstämmer inte",
"username": "Användarnamn" "username": "Användarnamn"
}, },
"caption": "Användare", "caption": "Användare",
@@ -1939,7 +1950,9 @@
"group": "Grupp", "group": "Grupp",
"id": "ID", "id": "ID",
"name": "Namn", "name": "Namn",
"new_password": "Nytt lösenord",
"owner": "Ägare", "owner": "Ägare",
"password_changed": "Lösenordet har ändrats!",
"system_generated": "Skapad av systemet", "system_generated": "Skapad av systemet",
"system_generated_users_not_editable": "Det gick inte att uppdatera systemgenererade användare.", "system_generated_users_not_editable": "Det gick inte att uppdatera systemgenererade användare.",
"system_generated_users_not_removable": "Det går inte att ta bort användare som skapats av systemet.", "system_generated_users_not_removable": "Det går inte att ta bort användare som skapats av systemet.",
@@ -2485,6 +2498,8 @@
}, },
"cardpicker": { "cardpicker": {
"custom_card": "Anpassad", "custom_card": "Anpassad",
"domain": "Domän",
"entity": "Entitet",
"no_description": "Ingen beskrivning finns tillgänglig." "no_description": "Ingen beskrivning finns tillgänglig."
}, },
"edit_card": { "edit_card": {
@@ -2818,6 +2833,9 @@
"submit": "Skicka" "submit": "Skicka"
}, },
"current_user": "Du är inloggad som {fullName}.", "current_user": "Du är inloggad som {fullName}.",
"customize_sidebar": {
"button": "Redigera"
},
"dashboard": { "dashboard": {
"description": "Välj en standardpanel för den här enheten.", "description": "Välj en standardpanel för den här enheten.",
"dropdown_label": "Instrumentpanel", "dropdown_label": "Instrumentpanel",

View File

@@ -507,6 +507,7 @@
"cancel": "取消", "cancel": "取消",
"close": "關閉", "close": "關閉",
"continue": "繼續", "continue": "繼續",
"copied": "已複製",
"delete": "刪除", "delete": "刪除",
"error_required": "必填", "error_required": "必填",
"loading": "讀取中", "loading": "讀取中",
@@ -2691,7 +2692,7 @@
}, },
"raw_editor": { "raw_editor": {
"confirm_remove_config_text": "假如移除 Lovelace UI 設定的話,將自動以區域與設備產生 Lovelace UI 視圖。", "confirm_remove_config_text": "假如移除 Lovelace UI 設定的話,將自動以區域與設備產生 Lovelace UI 視圖。",
"confirm_remove_config_title": "確定要移除 Lovelace UI 設定?將依據區域與設備自動產生 Lovelace UI 視圖。", "confirm_remove_config_title": "確定要移除 Lovelace UI 設定?",
"confirm_unsaved_changes": "變更尚未儲存,確定要退出?", "confirm_unsaved_changes": "變更尚未儲存,確定要退出?",
"confirm_unsaved_comments": "設定包含命令、將不會被儲存。是否要繼續?", "confirm_unsaved_comments": "設定包含命令、將不會被儲存。是否要繼續?",
"error_invalid_config": "設定無效:{error}", "error_invalid_config": "設定無效:{error}",