Compare commits
902 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c448bbc3b4 | |||
| 4dcf26236e | |||
| a0e8d69243 | |||
| 33cd9bf516 | |||
| 0132797f2f | |||
| 7e2db0aa4e | |||
| cc1d50491b | |||
| 461b86a04b | |||
| 9a3a7c28f4 | |||
| 1c9d0200ca | |||
| 0037cd2e69 | |||
| 028ae061da | |||
| 2e47763ecc | |||
| 924e4a45d0 | |||
| 8361b9553b | |||
| e52be20fba | |||
| da12233ade | |||
| 57500f6c97 | |||
| 199e17d0b1 | |||
| 3b91343082 | |||
| 1753c9163c | |||
| 89e5953e89 | |||
| 5bfd25c8c6 | |||
| e555b24f50 | |||
| 14db37459f | |||
| 1d9779d47c | |||
| 3dedbc5457 | |||
| facb3266c6 | |||
| 01fe5dd2f7 | |||
| 9b22b1e499 | |||
| 4bc8818145 | |||
| 48ef8c86c2 | |||
| 89f359a52f | |||
| 13b8160d74 | |||
| f1c16d6674 | |||
| 76a088e177 | |||
| 630d8c3bb6 | |||
| f0e959319e | |||
| d0c4475724 | |||
| 99935f1e59 | |||
| fbb43821ba | |||
| c7f5c6c1d1 | |||
| d26f1fa371 | |||
| c3718ff7dd | |||
| d63493a859 | |||
| a72183851a | |||
| 40b2387667 | |||
| d814aa36a7 | |||
| 58a58906e7 | |||
| ba99d1a10d | |||
| efe97e8f51 | |||
| 5ec23bb7ab | |||
| 9b4d01ab75 | |||
| 40191a88d4 | |||
| a19477d179 | |||
| bf98a78f3d | |||
| ba4c2fc1bd | |||
| b56e9ef028 | |||
| dbbd34c520 | |||
| ccb69dbdfa | |||
| 11e555ef6f | |||
| 61e17395c9 | |||
| 733ce3b6b8 | |||
| 375f143199 | |||
| 2419f35eb9 | |||
| 21867c3576 | |||
| 28853b28bc | |||
| e2f27568a5 | |||
| 98b2b796b0 | |||
| b8f3fcf00b | |||
| d3fda9a821 | |||
| 19e69dc13e | |||
| 5fa7cd9fa9 | |||
| a78c00fb41 | |||
| edc2a03d1c | |||
| 174f8f5823 | |||
| 9fbc94e8d8 | |||
| 6aff35196d | |||
| eceed4ed74 | |||
| 7428731eac | |||
| 89b07ea0ae | |||
| d16daf0fd9 | |||
| 211ab4eea8 | |||
| dbd53f8d14 | |||
| 07fc9b98cc | |||
| 33582c0448 | |||
| 611202c905 | |||
| e553f35a68 | |||
| 673649a603 | |||
| c4ed743370 | |||
| 682fa0d3eb | |||
| 30f34eee22 | |||
| eab76bf85b | |||
| bcf405bf9d | |||
| 3c4b0d4a74 | |||
| fb9bd0eb7d | |||
| 7e2dc04123 | |||
| 54ec37994c | |||
| 4a5935ee36 | |||
| 01b9a07320 | |||
| 0fcf0dcd18 | |||
| 80481f142a | |||
| 2be08ce7ab | |||
| 37eb5af3d4 | |||
| 8c8151be92 | |||
| baf31d1c1e | |||
| af2250835a | |||
| 6f2a759ba3 | |||
| 5065901196 | |||
| 41b59e6e11 | |||
| 43afdaadc6 | |||
| 83c5151792 | |||
| 0880ab67c6 | |||
| c0b2143c7c | |||
| c1de162c99 | |||
| a7ef8aba68 | |||
| 3ee4c11a99 | |||
| 990ae10dc2 | |||
| 52b2fd046b | |||
| 9f41f80a91 | |||
| eec4a91ad8 | |||
| 7c51001c3c | |||
| a4ea4b1f5f | |||
| 19fc37539e | |||
| ce7acb0feb | |||
| 105b7678b8 | |||
| b67575586e | |||
| 3dc6898673 | |||
| a73754c1b5 | |||
| 1ebf1c00d6 | |||
| 7dac7d757e | |||
| b1f3192b95 | |||
| 16984d18bb | |||
| e603893d77 | |||
| a7998b30c6 | |||
| 3277a4e8c3 | |||
| 7e769d0e14 | |||
| 713e0579f8 | |||
| 6e130cc020 | |||
| eb036a12d9 | |||
| 534d1f5055 | |||
| cbef909657 | |||
| 874f3b32b3 | |||
| 2fd017cf73 | |||
| 5740b018a7 | |||
| 288bf6805a | |||
| 02d37a369a | |||
| 1d316c3258 | |||
| a56ce62f1a | |||
| c268f42851 | |||
| 7251e802ab | |||
| 5b1a2d10c2 | |||
| 2dd7f292b1 | |||
| 213c53e307 | |||
| ce07dfd8ac | |||
| c1dba462e8 | |||
| 47f0d74812 | |||
| ce80285f8d | |||
| d2dd1a43dd | |||
| 12d73fe90d | |||
| c2741638b2 | |||
| 4a7fb3d509 | |||
| f6ff652ca4 | |||
| 6165cb0f83 | |||
| 1f361b7b10 | |||
| 5269ff978b | |||
| 55595493a9 | |||
| ad3ff0aba7 | |||
| ce48546cef | |||
| 35b3bc995e | |||
| 63f60019d1 | |||
| 0d741b6275 | |||
| 0df9080bbb | |||
| ddcf89e6a2 | |||
| 5de225d5d4 | |||
| 5cddb482f1 | |||
| c000d724de | |||
| 504055f331 | |||
| 7f6880f40e | |||
| 02e4e3c892 | |||
| 993d73c359 | |||
| 97ca0b818e | |||
| 44166f76d4 | |||
| 557d6d37a1 | |||
| d3ad56a307 | |||
| 0641022ec5 | |||
| 80c7a8473a | |||
| d9a954ca91 | |||
| c219f64322 | |||
| f7a9ecff21 | |||
| 2b3126ae04 | |||
| 934c227545 | |||
| cc0515c217 | |||
| 55ba75f2bc | |||
| c220228566 | |||
| 26b476ab3c | |||
| b8a67d530f | |||
| b08c96d2db | |||
| 4773c39a57 | |||
| 892843b290 | |||
| 733244531e | |||
| 66633273e2 | |||
| 0405adcd16 | |||
| 426a7ac8dd | |||
| 3bf6205ff7 | |||
| c7f4986e61 | |||
| 0f0a3fdaf7 | |||
| 7d6911b140 | |||
| b8777539d7 | |||
| b5b1849ab3 | |||
| 0e10c81025 | |||
| 5fc0eaef1a | |||
| 113718c3c1 | |||
| 701bea6cae | |||
| 8d516ed12a | |||
| 667c5744f2 | |||
| 80b7c840e2 | |||
| 919c86796f | |||
| c90c88ecbf | |||
| d9ba0e2c46 | |||
| 45b2fc590b | |||
| 17ffdb0247 | |||
| c2fba15fc6 | |||
| 5937be695f | |||
| a076fcde84 | |||
| ede9931903 | |||
| 722e01608c | |||
| af926370d6 | |||
| 5971aee02e | |||
| cce7ad449a | |||
| d437dd5919 | |||
| f1980730d2 | |||
| 47773e9cae | |||
| 60969b0916 | |||
| ecc7925d03 | |||
| 6d3010dcc7 | |||
| 0164bafbf1 | |||
| 3940606167 | |||
| da9faccada | |||
| 7e708b3bf7 | |||
| 05630c9896 | |||
| 369c56db73 | |||
| 9873459169 | |||
| 7776b3766b | |||
| 29c9004654 | |||
| 601c909004 | |||
| 72aa9a3b62 | |||
| 2ecf7bca97 | |||
| cbdfaccdb2 | |||
| 93d1b9a2d5 | |||
| bfb5ee794e | |||
| 9ae8bd238b | |||
| 98a64e3114 | |||
| 0171f3aec7 | |||
| 2c827bab9a | |||
| ec920093d4 | |||
| 4289ff6652 | |||
| cd32ef60da | |||
| 6ef3d091e1 | |||
| 0f59496778 | |||
| 795b670b3c | |||
| 4ad65e3d69 | |||
| f48b1150cf | |||
| 198db8bc68 | |||
| 3ae447ca44 | |||
| a2ec878ef0 | |||
| d43b5d3337 | |||
| 11e3503dc2 | |||
| accf44b769 | |||
| b612c0e0d6 | |||
| 771c7518e6 | |||
| 4f2bad034a | |||
| 0456669aeb | |||
| 2eb71321e7 | |||
| d2e9e22e4e | |||
| e2427c8dce | |||
| 26162815c8 | |||
| d0c86ea2f7 | |||
| 4f5b4d4472 | |||
| 10d71587e7 | |||
| 9ac777d687 | |||
| 7d1f9f3981 | |||
| a214ab463e | |||
| 2f21f6ef8a | |||
| 590cd8500d | |||
| f48a28264f | |||
| 51953bce09 | |||
| c445d4b839 | |||
| 9dabce1dd7 | |||
| 6b77f08d86 | |||
| 50e03d41ab | |||
| 4759c89628 | |||
| 458ab9b1e0 | |||
| dfb2a7153b | |||
| e9141d82f3 | |||
| d9f42712e4 | |||
| da0658f3d9 | |||
| 412a5a6d8e | |||
| 9cf9e6edd8 | |||
| 28050fc9fb | |||
| ea9f227fa8 | |||
| 05164e90fb | |||
| 97156ccf8a | |||
| 003d55968e | |||
| 98dd21b75c | |||
| a349e34bc2 | |||
| 245c825cbf | |||
| 4ba6698c4b | |||
| dac6edea90 | |||
| b2e2dbe0c2 | |||
| f822fa0d57 | |||
| bbee94edba | |||
| c39c408332 | |||
| dde4a40e69 | |||
| 1afa4d2868 | |||
| d25f371d6c | |||
| 948261d1d1 | |||
| 04b7749f85 | |||
| 8668f0ff5b | |||
| b7d8ff6c99 | |||
| 0894a30f13 | |||
| bd511887a7 | |||
| 0304c0eca0 | |||
| 6d5c6e2fbc | |||
| e7e7912519 | |||
| b9c41d8f99 | |||
| 25a2264ac3 | |||
| ad64657c74 | |||
| 106f18a73a | |||
| 0fb38140a6 | |||
| 60133941ae | |||
| 76db64c073 | |||
| 24b390ba03 | |||
| b4d34d9085 | |||
| f80bea27a9 | |||
| 4b846964be | |||
| e6357e2eef | |||
| d538b6145f | |||
| 229ba3a75c | |||
| 672b867847 | |||
| ca1dacd621 | |||
| 26abb4301d | |||
| 045dac59af | |||
| 1ffa87ea23 | |||
| 357df2bf68 | |||
| 24f3db3e3f | |||
| 4bb51b0120 | |||
| 32b9c1eba1 | |||
| 40bffc1d25 | |||
| ed2c4e2642 | |||
| b3353e220a | |||
| 7dc917babf | |||
| 00dbba04a2 | |||
| 3efd1a0451 | |||
| b7d7ca4014 | |||
| 854a54e9c6 | |||
| 4f4edb109f | |||
| 265bfeb889 | |||
| 96110637d9 | |||
| ad34f98e6d | |||
| a8a1563586 | |||
| 9b25a54a47 | |||
| 4b8c96c769 | |||
| c62ff85e73 | |||
| 7d5a27ec0f | |||
| d6aba040dd | |||
| ca4757db5b | |||
| c917b67cbd | |||
| 9659c97978 | |||
| 7d862d6f2a | |||
| 9c80776d8c | |||
| d5cd288fe8 | |||
| 239e817779 | |||
| 1986215919 | |||
| 239f5f1a2f | |||
| 3bca32c6d5 | |||
| 183eff745d | |||
| 4392d78ff6 | |||
| 858196ab53 | |||
| fb75d8c1f2 | |||
| 7628569579 | |||
| 8a9d5f7753 | |||
| cdcccf5089 | |||
| de95c92e2d | |||
| 3030b8d476 | |||
| 92ed14c0e4 | |||
| 5b94a4de9a | |||
| 709112c498 | |||
| e465ec8835 | |||
| f6eb31bf9d | |||
| 426f939982 | |||
| fab6cebf0d | |||
| ff081dd0f1 | |||
| 868399ed6f | |||
| 1bc9b95289 | |||
| 9af805ab5e | |||
| 6b88081360 | |||
| 667c828359 | |||
| 50d37ce4f6 | |||
| af0246cd27 | |||
| 857e4e49d8 | |||
| c1afed7f98 | |||
| 5480e54185 | |||
| 99d0a0a6fd | |||
| 8a998369d6 | |||
| 8b490c5047 | |||
| 7e70ba6ab2 | |||
| 90e09fc384 | |||
| 266f2e763d | |||
| c979cfb912 | |||
| 8ee29b1e43 | |||
| 26fbc07cac | |||
| f01fe65be4 | |||
| 3fdd6a80f9 | |||
| da1de8db1d | |||
| dd1bf7b49d | |||
| f18913b5a0 | |||
| a2cd227f1a | |||
| 78e64e1f60 | |||
| 23a9b79320 | |||
| 76394ce341 | |||
| 1935df1faa | |||
| 5af4ce28ab | |||
| ce8ee569c4 | |||
| b0508f430e | |||
| 2139a80a7a | |||
| aa4bc2ce03 | |||
| fa65f84e09 | |||
| c06357a351 | |||
| 092a02a624 | |||
| b9699f745f | |||
| 7fa9f10c30 | |||
| 7bf0655dae | |||
| 96c5fdcbeb | |||
| c2e6d40382 | |||
| 810d2a1ceb | |||
| af74f21af9 | |||
| cdf7558a8e | |||
| 41b86e6c10 | |||
| 085c6f8bdd | |||
| 3039c678a5 | |||
| 498882d014 | |||
| 6c2b8c2abb | |||
| e955cc4378 | |||
| eb96dd4803 | |||
| e0bdef98a6 | |||
| 1130007d14 | |||
| d99d092784 | |||
| e3b18a33ca | |||
| 1890aab1e6 | |||
| 42bf350034 | |||
| 5ff52ea113 | |||
| 432e3ba636 | |||
| f7ab52fe9a | |||
| ad8430049d | |||
| 2dffe7ba9e | |||
| 5b8f97e0f6 | |||
| b3a763a48d | |||
| 07569f10b5 | |||
| 7c5a78a1cf | |||
| 5cca5bfe86 | |||
| 0e021e7d7d | |||
| b30ee884a7 | |||
| 869b7c85ca | |||
| 4d0d1ed2a1 | |||
| 291983e4c3 | |||
| 909cff2158 | |||
| 4e676b1dba | |||
| 9149bb9333 | |||
| 4631994f20 | |||
| 82e9178320 | |||
| 67b4688168 | |||
| 6e0e169b6e | |||
| 100ba8edfa | |||
| d7448ecb95 | |||
| 8b1801f378 | |||
| 01a4d57566 | |||
| 7edc9064d9 | |||
| 30c47a65f4 | |||
| 0889f42a00 | |||
| 4999f1ad51 | |||
| f15fbe53cf | |||
| 046f7b5153 | |||
| 5339fe6e06 | |||
| de7ffb10cb | |||
| 80224e6974 | |||
| 0c7c536f73 | |||
| e5c386c39a | |||
| bb2462483e | |||
| d5bc498373 | |||
| 979b7ae651 | |||
| c73330a466 | |||
| efe8eca4e3 | |||
| a37aad18b7 | |||
| cfa0c45213 | |||
| 509481ef06 | |||
| 9aa8175e23 | |||
| 76f59d99a2 | |||
| bd66bd6cf0 | |||
| d69333dea4 | |||
| 3fd7899b93 | |||
| 8f8a2cea56 | |||
| 879011c8e9 | |||
| d5794c3e2e | |||
| 61dbae8b8b | |||
| fcc22ba560 | |||
| 2adeb88fe6 | |||
| e63a78bcdb | |||
| b065f002a4 | |||
| 349a5f52b1 | |||
| aa5e20df05 | |||
| 793b9f238c | |||
| 9c4fdaa4f3 | |||
| d1a9cb488a | |||
| faee2c3e1b | |||
| b7845c318e | |||
| 426a0727c3 | |||
| 584e509a9c | |||
| f3639c2663 | |||
| 1431e75f8b | |||
| be8812e0af | |||
| fd6436d490 | |||
| fd1342f9d1 | |||
| 5fa0012195 | |||
| 9dbb67ef01 | |||
| d16e2f37d4 | |||
| d9e8b53ffe | |||
| 1997e63b7c | |||
| 6f673359ff | |||
| 45dfbff10a | |||
| 348ee96274 | |||
| 8edee32e77 | |||
| 6d8d263ca6 | |||
| 35923709e2 | |||
| fdd4d53448 | |||
| 06419f662e | |||
| 57763ef032 | |||
| 8e506f7749 | |||
| c7f8fe1468 | |||
| 4156a4e36d | |||
| ba3cc7df0f | |||
| 0c212d39eb | |||
| 3bd2e8dbf5 | |||
| 5292119e6e | |||
| 994a397231 | |||
| 353b71f803 | |||
| eb12afe8cc | |||
| 4a176f1b43 | |||
| 8e228baa82 | |||
| 154b53b0d8 | |||
| a3f680d80c | |||
| 0d75fe6b81 | |||
| 4070380ded | |||
| 41195dcef0 | |||
| 78a1e45be2 | |||
| d8e88bc58d | |||
| 448e9b71b8 | |||
| 2e178164cc | |||
| 9f2e3f05a1 | |||
| 405bd29ebd | |||
| b39b54e0ac | |||
| 119c5c9071 | |||
| 7a4c9b128c | |||
| dc5b92030f | |||
| db0a010d7c | |||
| a117a19bdf | |||
| 5f46fdb406 | |||
| f0201de4cc | |||
| 6cd51a318b | |||
| c1a4b27bc7 | |||
| 5113222050 | |||
| 90f12eea5e | |||
| 2403743701 | |||
| 3e6a759309 | |||
| 35a430e9f4 | |||
| b644f7d23d | |||
| 7702a05464 | |||
| 493af5fe82 | |||
| ac66a59cec | |||
| e10c8faa47 | |||
| 9b7d17433c | |||
| a40eb1ff43 | |||
| 04df6c3e9e | |||
| 1b970e5a66 | |||
| 75406c2d01 | |||
| 64d3511fbc | |||
| c610f54977 | |||
| 090ad34f78 | |||
| 358c5205d2 | |||
| 5503cd0589 | |||
| dae42b1bd9 | |||
| 06a25284e8 | |||
| 5989560f15 | |||
| 63c995e5da | |||
| dc5607f554 | |||
| d49302c032 | |||
| 63fef9bd4b | |||
| 6599351d45 | |||
| 47e9531972 | |||
| 3ba31483f4 | |||
| f4ca94f2e1 | |||
| 67f9be2b77 | |||
| e2fd155e1b | |||
| 931068dede | |||
| bc4c9cc40d | |||
| 294665fbe8 | |||
| e8f6a79c8f | |||
| 5fd8b5c5b9 | |||
| 226b2a73af | |||
| 42d421a6fc | |||
| a90203f256 | |||
| c3ef79caa9 | |||
| 1439afcd9c | |||
| d263b19910 | |||
| 1e477226ea | |||
| 026fc1d2e3 | |||
| 2d4bd9857a | |||
| 8f48f5b45c | |||
| 22210b7400 | |||
| 7d05855ee0 | |||
| b2460cbc3d | |||
| 4561957e56 | |||
| 3367fadc3a | |||
| d7e409b042 | |||
| a0b28e8ad1 | |||
| f928a8e58e | |||
| 0bc4b3d0fa | |||
| e352768388 | |||
| 6835b73e49 | |||
| f1503f871b | |||
| c4d8aba5c8 | |||
| 39f24c41ad | |||
| 21644ec889 | |||
| 613470b44d | |||
| 6c918e346b | |||
| bce8539572 | |||
| aab86e00ec | |||
| 2a58726caf | |||
| 4163b35b32 | |||
| 9c6dac8180 | |||
| 80fc37724b | |||
| 77b25f5132 | |||
| 684f098450 | |||
| d09f74d30f | |||
| 3d973b112e | |||
| 96986164a4 | |||
| 78152c20a9 | |||
| 2bb64e9e2f | |||
| 746844dfc8 | |||
| 41b613a2d7 | |||
| 3b3aeea224 | |||
| 71c592a0ce | |||
| 15193fcf5f | |||
| a31f53395f | |||
| 283b134d84 | |||
| 271eb614cd | |||
| 16167bef07 | |||
| 1eac9fa1cd | |||
| 7f819f0020 | |||
| dec1f99a5f | |||
| c705e74fc8 | |||
| 01df10f93e | |||
| 9877f08cf4 | |||
| 3dc4b1d775 | |||
| 02791c51ae | |||
| 49683326e6 | |||
| 947773a82e | |||
| 2a229df624 | |||
| e605ad5e46 | |||
| 0d4f43472b | |||
| b30e467685 | |||
| a56c0b52d5 | |||
| c17ebfd279 | |||
| 5400b1da96 | |||
| 69f4a618b2 | |||
| 16b8b6698c | |||
| b29a700d40 | |||
| bbb1468439 | |||
| 72f9d6a8d3 | |||
| 3ec8da1f17 | |||
| dbea3848df | |||
| 33871435e1 | |||
| f1f22b43dc | |||
| 2fb9a56e0b | |||
| 14e8f66ed7 | |||
| e6f5072462 | |||
| a64f50fa72 | |||
| bb5f6e88d0 | |||
| 6991403203 | |||
| 410bd22f8a | |||
| b81d823602 | |||
| bd5115f9aa | |||
| 7bcbed80d7 | |||
| 8fb62ebf5f | |||
| 209dd9923f | |||
| c75207e391 | |||
| d957f36927 | |||
| 9ac459b6d9 | |||
| e08b2817ba | |||
| 4ca13c409b | |||
| 0d515e2303 | |||
| a2153bc6aa | |||
| ca171afe6f | |||
| bf4e97bd48 | |||
| 8c59a12a03 | |||
| 89569355be | |||
| 3a41b3bdcf | |||
| 12bd7037b3 | |||
| ca4f573be0 | |||
| 07fceeab5a | |||
| 3aa376e912 | |||
| 92d30a8896 | |||
| 83876fb9da | |||
| 29bdf7877c | |||
| 29199e2782 | |||
| 68e1378615 | |||
| cf7efb5bfc | |||
| 8634ee536d | |||
| 632d3cda24 | |||
| 29b6a907d4 | |||
| 7474d09e5d | |||
| fc7bcd7e00 | |||
| f6fb2e4b1d | |||
| 8c8673a272 | |||
| 4404a1173b | |||
| e08c10315e | |||
| 16473c9177 | |||
| 235fd5603f | |||
| d07d5832f5 | |||
| ef8be5d559 | |||
| ccafdc6e1f | |||
| 11827aa4c0 | |||
| 6b0589d343 | |||
| cec1eed99e | |||
| d7e1e9e284 | |||
| cae46453a7 | |||
| a6e948c808 | |||
| 7638020bfc | |||
| 10a62ca17c | |||
| 0afc7c184f | |||
| 168e26aeb4 | |||
| e6b9389b33 | |||
| 377c37425e | |||
| 4af26602bb | |||
| c6624e5cb6 | |||
| f7ae5b91bf | |||
| 07e68496c0 | |||
| d5a947e2cc | |||
| 3f920767f1 | |||
| 3e14d27a1e | |||
| cfa4c14108 | |||
| 209056dbe1 | |||
| 10356a7496 | |||
| d4ae74de44 | |||
| 88d5e7dd5e | |||
| 06c7b0b82e | |||
| 689febda60 | |||
| 80bc6fda8b | |||
| 346eb78c4e | |||
| 2df02f1b09 | |||
| 92915eddc2 | |||
| cddbf460f8 | |||
| 3c63c23e5a | |||
| ba67b1291f | |||
| 7bced28327 | |||
| db2b60700c | |||
| 9034822c44 | |||
| e8254f9aae | |||
| a14179b81a | |||
| 427c5db7f4 | |||
| fcb5865468 | |||
| 41370be2b8 | |||
| d7d8dd8986 | |||
| a0f596e419 | |||
| 0a8894feb7 | |||
| 1db9eea0f8 | |||
| 489783c398 | |||
| be62f327ee | |||
| 32359adb6d | |||
| 2e198af8c3 | |||
| d154fcbd71 | |||
| 21e277b8a2 | |||
| f98cdd0749 | |||
| e60e306426 | |||
| ec36d396d9 | |||
| 135232d880 | |||
| 9c42ca0315 | |||
| 9ad9c569a6 | |||
| a9071d7920 | |||
| 1b4a10fac1 | |||
| d340f3b383 | |||
| f8c5eeab5d | |||
| 9cd2d0df93 | |||
| 78914091b1 | |||
| e12c324613 | |||
| 7cf396b518 | |||
| 8b3b40e627 | |||
| 90e14762e3 | |||
| d1dd8231cd | |||
| e70a3e09bf | |||
| 98656b0044 | |||
| a48aa3c778 | |||
| 05d7b98ba0 | |||
| f291ea6647 | |||
| 5d6e332044 | |||
| acb471fbe5 | |||
| 894f4379e6 | |||
| 1c73007ae6 | |||
| 2f7d744228 | |||
| e2cba90f8d | |||
| 352214ba0a | |||
| bd9b72fb22 | |||
| 50c9a667b3 | |||
| 3d32e6310d | |||
| 3bc54aa9e0 | |||
| def1ec3518 | |||
| 077802f972 | |||
| 914b47f340 | |||
| b2a78fd063 | |||
| 7d1835e59c | |||
| 833ccf3637 | |||
| 51be916f39 | |||
| e375408777 | |||
| 5078dc1cbf | |||
| 875148366e | |||
| c9ec4b4e24 | |||
| efa2b2db27 | |||
| 8ce120b74d | |||
| 26e678a97d | |||
| e71dd7409e | |||
| 58ffc2c6ca | |||
| d3f29362b9 | |||
| b429fe8254 | |||
| e1cb549b28 | |||
| 65a22257cc | |||
| e2f753eaa7 | |||
| c7127b65bf | |||
| 0c58c3572a | |||
| 26ae5fd728 | |||
| 370d92213b | |||
| 6e8321a22a | |||
| a8e8c1ce5d | |||
| a8a8cafd2b | |||
| b609890f28 | |||
| aac09ae092 | |||
| f1ff872944 | |||
| b195d2980a | |||
| d11736181f | |||
| 3e84486dd5 | |||
| a674ce36e4 | |||
| f6569a2625 | |||
| da10da79b3 | |||
| f236b76d5c | |||
| a71c22bedd | |||
| cc528e41cf | |||
| 351962475f | |||
| 6c73392a57 | |||
| 072ad87831 | |||
| 370a1f0574 | |||
| 9ca7aca4b7 | |||
| 0f2e9f66b1 | |||
| d03c3ab713 | |||
| 57c0b34ae9 | |||
| 06a94f0f28 | |||
| 750e7b1262 | |||
| 19e32752bb | |||
| 89c0729964 | |||
| fd07152aea | |||
| b656f189b6 | |||
| 9ac8d70152 | |||
| 8cc0b46335 | |||
| 1f15094da7 | |||
| b881adb853 | |||
| 4bfc3a5629 | |||
| ae6c0bfe40 | |||
| 4ce9c71521 | |||
| ec48323a7d | |||
| 7d9bae16cd | |||
| 163ff3d4e4 | |||
| 43fbf97e10 | |||
| 71faaf2ab1 | |||
| 7b0e743eca | |||
| 31a0c53855 | |||
| e8996063dd | |||
| 00842a3354 | |||
| d33f18ecb7 | |||
| fb7f620316 | |||
| 712e0d3e3b | |||
| 1870dc29c0 | |||
| da6fdc74d8 | |||
| 515e39154a | |||
| ff7731d063 | |||
| e9a3666dd5 | |||
| 55c56d53f4 | |||
| e4d55e6842 | |||
| d8661cf2db | |||
| 8815b126b5 | |||
| 2cd367f29f | |||
| 7395d19489 | |||
| d55cb95479 | |||
| 68ece7d363 | |||
| 6e4a8ac6df |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"extends": [
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"airbnb-typescript/base",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:wc/recommended",
|
||||
"plugin:lit/recommended",
|
||||
"prettier",
|
||||
@@ -45,16 +45,16 @@
|
||||
"func-names": 0,
|
||||
"prefer-arrow-callback": 0,
|
||||
"no-underscore-dangle": 0,
|
||||
"no-var": 0,
|
||||
"strict": 0,
|
||||
"prefer-spread": 0,
|
||||
"no-plusplus": 0,
|
||||
"no-bitwise": 0,
|
||||
"no-bitwise": 2,
|
||||
"comma-dangle": 0,
|
||||
"vars-on-top": 0,
|
||||
"no-continue": 0,
|
||||
"no-param-reassign": 0,
|
||||
"no-multi-assign": 0,
|
||||
"no-console": 2,
|
||||
"radix": 0,
|
||||
"no-alert": 0,
|
||||
"no-return-await": 0,
|
||||
@@ -75,13 +75,16 @@
|
||||
"object-curly-newline": 0,
|
||||
"default-case": 0,
|
||||
"wc/no-self-class": 0,
|
||||
"no-shadow": 0,
|
||||
"@typescript-eslint/camelcase": 0,
|
||||
"@typescript-eslint/ban-ts-ignore": 0,
|
||||
"@typescript-eslint/ban-ts-comment": 0,
|
||||
"@typescript-eslint/no-use-before-define": 0,
|
||||
"@typescript-eslint/no-non-null-assertion": 0,
|
||||
"@typescript-eslint/no-explicit-any": 0,
|
||||
"@typescript-eslint/no-unused-vars": 0,
|
||||
"@typescript-eslint/explicit-function-return-type": 0
|
||||
"@typescript-eslint/explicit-function-return-type": 0,
|
||||
"@typescript-eslint/explicit-module-boundary-types": 0,
|
||||
"@typescript-eslint/no-shadow": ["error"]
|
||||
},
|
||||
"plugins": ["disable", "import", "lit", "prettier", "@typescript-eslint"],
|
||||
"processor": "disable/disable"
|
||||
|
||||
@@ -51,7 +51,7 @@ DO NOT DELETE ANY TEXT from this template! Otherwise, your issue may be closed w
|
||||
<!--
|
||||
Provide details about the versions you are using, which helps us reproducing
|
||||
and finding the issue quicker. Version information is found in the
|
||||
Home Assistant frontend: Developer tools -> Info.
|
||||
Home Assistant frontend: Configuration -> Info.
|
||||
|
||||
Browser version and operating system is important! Please try to replicate
|
||||
your issue in a different browser and be sure to include your findings.
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: Request a feature for the UI, Frontend or Lovelace
|
||||
about: Request an new feature for the Home Assistant frontend.
|
||||
labels: feature request
|
||||
---
|
||||
|
||||
<!--
|
||||
DO NOT DELETE ANY TEXT from this template!
|
||||
Otherwise, your request may be closed without comment.
|
||||
-->
|
||||
|
||||
## The request
|
||||
|
||||
<!--
|
||||
Describe to our maintainers, the feature you would like to be added.
|
||||
Please be clear and concise and, if possible, provide a screenshot or mockup.
|
||||
-->
|
||||
|
||||
## The alternatives
|
||||
|
||||
<!--
|
||||
Are you currently using, or have you considered alternatives?
|
||||
If so, could you please describe those?
|
||||
-->
|
||||
|
||||
## Additional information
|
||||
@@ -1,5 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Request a feature for the UI, Frontend or Lovelace
|
||||
url: https://github.com/home-assistant/frontend/discussions/category_choices
|
||||
about: Request an new feature for the Home Assistant frontend.
|
||||
- name: Report a bug that is NOT related to the UI, Frontend or Lovelace
|
||||
url: https://github.com/home-assistant/core/issues
|
||||
about: This is the issue tracker for our frontend. Please report other issues with the backend repository.
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [dev, master]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [dev]
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Override automatic language detection by changing the below list
|
||||
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
|
||||
language: ['javascript']
|
||||
# Learn more...
|
||||
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
# We must fetch at least the immediate parents so that if this is
|
||||
# a pull request then we can checkout the head.
|
||||
fetch-depth: 2
|
||||
|
||||
# If this run was triggered by a pull request event, then checkout
|
||||
# the head of the pull request instead of the merge commit.
|
||||
- run: git checkout HEAD^2
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
@@ -26,4 +26,4 @@ A complete guide can be found at the following [link](https://www.home-assistant
|
||||
|
||||
Home Assistant is open-source and Apache 2 licensed. Feel free to browse the repository, learn and reuse parts in your own projects.
|
||||
|
||||
We use [BrowserStack](https://www.browserstack.com) to test Home Assistant on a large variation of devices.
|
||||
We use [BrowserStack](https://www.browserstack.com) to test Home Assistant on a large variety of devices.
|
||||
|
||||
@@ -52,7 +52,13 @@ module.exports.terserOptions = (latestBuild) => ({
|
||||
module.exports.babelOptions = ({ latestBuild }) => ({
|
||||
babelrc: false,
|
||||
presets: [
|
||||
!latestBuild && [require("@babel/preset-env").default, { modules: false }],
|
||||
!latestBuild && [
|
||||
require("@babel/preset-env").default,
|
||||
{
|
||||
useBuiltIns: "entry",
|
||||
corejs: "3.6",
|
||||
},
|
||||
],
|
||||
require("@babel/preset-typescript").default,
|
||||
].filter(Boolean),
|
||||
plugins: [
|
||||
@@ -62,7 +68,8 @@ module.exports.babelOptions = ({ latestBuild }) => ({
|
||||
{ loose: true, useBuiltIns: true },
|
||||
],
|
||||
// Only support the syntax, Webpack will handle it.
|
||||
"@babel/syntax-dynamic-import",
|
||||
"@babel/plugin-syntax-import-meta",
|
||||
"@babel/plugin-syntax-dynamic-import",
|
||||
"@babel/plugin-proposal-optional-chaining",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator",
|
||||
[
|
||||
@@ -178,7 +185,6 @@ module.exports.config = {
|
||||
publicPath: publicPath(latestBuild, paths.hassio_publicPath),
|
||||
isProdBuild,
|
||||
latestBuild,
|
||||
dontHash: new Set(["entrypoint"]),
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
@@ -90,8 +90,6 @@ gulp.task("gen-pages-prod", (done) => {
|
||||
});
|
||||
|
||||
gulp.task("gen-index-app-dev", (done) => {
|
||||
// In dev mode we don't mangle names, so we hardcode urls. That way we can
|
||||
// run webpack as last in watch mode, which blocks output.
|
||||
const content = renderTemplate("index", {
|
||||
latestAppJS: "/frontend_latest/app.js",
|
||||
latestCoreJS: "/frontend_latest/core.js",
|
||||
@@ -201,8 +199,6 @@ gulp.task("gen-index-cast-prod", (done) => {
|
||||
});
|
||||
|
||||
gulp.task("gen-index-demo-dev", (done) => {
|
||||
// In dev mode we don't mangle names, so we hardcode urls. That way we can
|
||||
// run webpack as last in watch mode, which blocks output.
|
||||
const content = renderDemoTemplate("index", {
|
||||
latestDemoJS: "/frontend_latest/main.js",
|
||||
|
||||
@@ -240,8 +236,6 @@ gulp.task("gen-index-demo-prod", (done) => {
|
||||
});
|
||||
|
||||
gulp.task("gen-index-gallery-dev", (done) => {
|
||||
// In dev mode we don't mangle names, so we hardcode urls. That way we can
|
||||
// run webpack as last in watch mode, which blocks output.
|
||||
const content = renderGalleryTemplate("index", {
|
||||
latestGalleryJS: "./frontend_latest/entrypoint.js",
|
||||
});
|
||||
@@ -269,3 +263,42 @@ gulp.task("gen-index-gallery-prod", (done) => {
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
gulp.task("gen-index-hassio-dev", async () => {
|
||||
writeHassioEntrypoint(
|
||||
`${paths.hassio_publicPath}/frontend_latest/entrypoint.js`,
|
||||
`${paths.hassio_publicPath}/frontend_es5/entrypoint.js`
|
||||
);
|
||||
});
|
||||
|
||||
gulp.task("gen-index-hassio-prod", async () => {
|
||||
const latestManifest = require(path.resolve(
|
||||
paths.hassio_output_latest,
|
||||
"manifest.json"
|
||||
));
|
||||
const es5Manifest = require(path.resolve(
|
||||
paths.hassio_output_es5,
|
||||
"manifest.json"
|
||||
));
|
||||
writeHassioEntrypoint(
|
||||
latestManifest["entrypoint.js"],
|
||||
es5Manifest["entrypoint.js"]
|
||||
);
|
||||
});
|
||||
|
||||
function writeHassioEntrypoint(latestEntrypoint, es5Entrypoint) {
|
||||
fs.mkdirSync(paths.hassio_output_root, { recursive: true });
|
||||
fs.writeFileSync(
|
||||
path.resolve(paths.hassio_output_root, "entrypoint.js"),
|
||||
`
|
||||
try {
|
||||
new Function("import('${latestEntrypoint}')")();
|
||||
} catch (err) {
|
||||
var el = document.createElement('script');
|
||||
el.src = '${es5Entrypoint}';
|
||||
document.body.appendChild(el);
|
||||
}
|
||||
`,
|
||||
{ encoding: "utf-8" }
|
||||
);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ const META_PATH = path.resolve(ICON_PACKAGE_PATH, "meta.json");
|
||||
const PACKAGE_PATH = path.resolve(ICON_PACKAGE_PATH, "package.json");
|
||||
const ICON_PATH = path.resolve(ICON_PACKAGE_PATH, "svg");
|
||||
const OUTPUT_DIR = path.resolve(__dirname, "../../build/mdi");
|
||||
const REMOVED_ICONS_PATH = path.resolve(__dirname, "../removedIcons.json");
|
||||
|
||||
const encoding = "utf8";
|
||||
|
||||
@@ -25,6 +26,13 @@ const getMeta = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const addRemovedMeta = (meta) => {
|
||||
const file = fs.readFileSync(REMOVED_ICONS_PATH, { encoding });
|
||||
const removed = JSON.parse(file);
|
||||
const combinedMeta = [...meta, ...removed];
|
||||
return combinedMeta.sort((a, b) => a.name.localeCompare(b.name));
|
||||
};
|
||||
|
||||
const splitBySize = (meta) => {
|
||||
const chunks = [];
|
||||
const CHUNK_SIZE = 50000;
|
||||
@@ -69,7 +77,7 @@ const findDifferentiator = (curString, prevString) => {
|
||||
};
|
||||
|
||||
gulp.task("gen-icons-json", (done) => {
|
||||
const meta = getMeta();
|
||||
const meta = addRemovedMeta(getMeta());
|
||||
const split = splitBySize(meta);
|
||||
|
||||
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||
|
||||
@@ -11,24 +11,6 @@ require("./webpack.js");
|
||||
require("./compress.js");
|
||||
require("./rollup.js");
|
||||
|
||||
async function writeEntrypointJS() {
|
||||
// We ship two builds and we need to do feature detection on what version to load.
|
||||
fs.mkdirSync(paths.hassio_output_root, { recursive: true });
|
||||
fs.writeFileSync(
|
||||
path.resolve(paths.hassio_output_root, "entrypoint.js"),
|
||||
`
|
||||
try {
|
||||
new Function("import('${paths.hassio_publicPath}/frontend_latest/entrypoint.js')")();
|
||||
} catch (err) {
|
||||
var el = document.createElement('script');
|
||||
el.src = '${paths.hassio_publicPath}/frontend_es5/entrypoint.js';
|
||||
document.body.appendChild(el);
|
||||
}
|
||||
`,
|
||||
{ encoding: "utf-8" }
|
||||
);
|
||||
}
|
||||
|
||||
gulp.task(
|
||||
"develop-hassio",
|
||||
gulp.series(
|
||||
@@ -37,7 +19,7 @@ gulp.task(
|
||||
},
|
||||
"clean-hassio",
|
||||
"gen-icons-json",
|
||||
writeEntrypointJS,
|
||||
"gen-index-hassio-dev",
|
||||
env.useRollup() ? "rollup-watch-hassio" : "webpack-watch-hassio"
|
||||
)
|
||||
);
|
||||
@@ -51,7 +33,7 @@ gulp.task(
|
||||
"clean-hassio",
|
||||
"gen-icons-json",
|
||||
env.useRollup() ? "rollup-prod-hassio" : "webpack-prod-hassio",
|
||||
writeEntrypointJS,
|
||||
"gen-index-hassio-prod",
|
||||
...// Don't compress running tests
|
||||
(env.isTest() ? [] : ["compress-hassio"])
|
||||
)
|
||||
|
||||
@@ -7,7 +7,6 @@ const gulp = require("gulp");
|
||||
const fs = require("fs");
|
||||
const foreach = require("gulp-foreach");
|
||||
const merge = require("gulp-merge-json");
|
||||
const minify = require("gulp-jsonminify");
|
||||
const rename = require("gulp-rename");
|
||||
const transform = require("gulp-json-transform");
|
||||
const { mapFiles } = require("../util");
|
||||
@@ -301,7 +300,6 @@ gulp.task("build-flattened-translations", function () {
|
||||
return flatten(data);
|
||||
})
|
||||
)
|
||||
.pipe(minify())
|
||||
.pipe(
|
||||
rename((filePath) => {
|
||||
if (filePath.dirname === "core") {
|
||||
|
||||
@@ -34,6 +34,11 @@ module.exports = {
|
||||
|
||||
hassio_dir: path.resolve(__dirname, "../hassio"),
|
||||
hassio_output_root: path.resolve(__dirname, "../hassio/build"),
|
||||
hassio_output_latest: path.resolve(
|
||||
__dirname,
|
||||
"../hassio/build/frontend_latest"
|
||||
),
|
||||
hassio_output_es5: path.resolve(__dirname, "../hassio/build/frontend_es5"),
|
||||
hassio_publicPath: "/api/hassio/app",
|
||||
|
||||
translations_src: path.resolve(__dirname, "../src/translations"),
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
[]
|
||||
@@ -2,7 +2,6 @@ const webpack = require("webpack");
|
||||
const path = require("path");
|
||||
const TerserPlugin = require("terser-webpack-plugin");
|
||||
const ManifestPlugin = require("webpack-manifest-plugin");
|
||||
const WorkerPlugin = require("worker-plugin");
|
||||
const paths = require("./paths.js");
|
||||
const bundle = require("./bundle");
|
||||
|
||||
@@ -30,7 +29,7 @@ const createWebpackConfig = ({
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$|\.ts$/,
|
||||
test: /\.m?js$|\.ts$/,
|
||||
exclude: bundle.babelExclude(),
|
||||
use: {
|
||||
loader: "babel-loader",
|
||||
@@ -46,16 +45,13 @@ const createWebpackConfig = ({
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new TerserPlugin({
|
||||
cache: true,
|
||||
parallel: true,
|
||||
extractComments: true,
|
||||
sourceMap: true,
|
||||
terserOptions: bundle.terserOptions(latestBuild),
|
||||
}),
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
new WorkerPlugin(),
|
||||
new ManifestPlugin({
|
||||
// Only include the JS of entrypoints
|
||||
filter: (file) => file.isInitial && !file.name.endsWith(".map"),
|
||||
@@ -99,6 +95,15 @@ const createWebpackConfig = ({
|
||||
new RegExp(bundle.emptyPackages({ latestBuild }).join("|")),
|
||||
path.resolve(paths.polymer_dir, "src/util/empty.js")
|
||||
),
|
||||
// We need to change the import of the polyfill for EventTarget, so we replace the polyfill file with our customized one
|
||||
new webpack.NormalModuleReplacementPlugin(
|
||||
new RegExp(
|
||||
require.resolve(
|
||||
"lit-virtualizer/lib/uni-virtualizer/lib/polyfillLoaders/EventTarget.js"
|
||||
)
|
||||
),
|
||||
path.resolve(paths.polymer_dir, "src/resources/EventTarget-ponyfill.js")
|
||||
),
|
||||
],
|
||||
resolve: {
|
||||
extensions: [".ts", ".js", ".json"],
|
||||
@@ -110,6 +115,22 @@ const createWebpackConfig = ({
|
||||
}
|
||||
return `${chunk.name}.${chunk.hash.substr(0, 8)}.js`;
|
||||
},
|
||||
environment: {
|
||||
// The environment supports arrow functions ('() => { ... }').
|
||||
arrowFunction: latestBuild,
|
||||
// The environment supports BigInt as literal (123n).
|
||||
bigIntLiteral: false,
|
||||
// The environment supports const and let for variable declarations.
|
||||
const: latestBuild,
|
||||
// The environment supports destructuring ('{ a, b } = obj').
|
||||
destructuring: latestBuild,
|
||||
// The environment supports an async import() function to import EcmaScript modules.
|
||||
dynamicImport: latestBuild,
|
||||
// The environment supports 'for of' iteration ('for (const x of array) { ... }').
|
||||
forOf: latestBuild,
|
||||
// The environment supports ECMAScript Module syntax to import ECMAScript modules (import ... from '...').
|
||||
module: latestBuild,
|
||||
},
|
||||
chunkFilename:
|
||||
isProdBuild && !isStatsBuild
|
||||
? "chunk.[chunkhash].js"
|
||||
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
@@ -212,13 +212,8 @@
|
||||
Chromecast is a technology developed by Google, and is available on:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Google Chrome (all platforms except on iOS)</li>
|
||||
<li>
|
||||
Microsoft Edge (all platforms,
|
||||
<a href="https://www.microsoftedgeinsider.com" target="_blank"
|
||||
>dev and canary builds only</a
|
||||
>)
|
||||
</li>
|
||||
<li>Google Chrome (all platforms except iOS)</li>
|
||||
<li>Microsoft Edge (all platforms)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import "../../../src/resources/safari-14-attachshadow-patch";
|
||||
import "../../../src/resources/ha-style";
|
||||
import "../../../src/resources/roboto";
|
||||
import "./layout/hc-connect";
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { CastManager } from "../../../../src/cast/cast_manager";
|
||||
@@ -28,7 +29,7 @@ import {
|
||||
getLovelaceCollection,
|
||||
LovelaceConfig,
|
||||
} from "../../../../src/data/lovelace";
|
||||
import "../../../../src/layouts/loading-screen";
|
||||
import "../../../../src/layouts/hass-loading-screen";
|
||||
import { generateDefaultViewConfig } from "../../../../src/panels/lovelace/common/generate-lovelace-config";
|
||||
import "./hc-layout";
|
||||
import "@material/mwc-button/mwc-button";
|
||||
@@ -41,13 +42,13 @@ class HcCast extends LitElement {
|
||||
|
||||
@property() public castManager!: CastManager;
|
||||
|
||||
@property() private askWrite = false;
|
||||
@internalProperty() private askWrite = false;
|
||||
|
||||
@property() private lovelaceConfig?: LovelaceConfig | null;
|
||||
@internalProperty() private lovelaceConfig?: LovelaceConfig | null;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (this.lovelaceConfig === undefined) {
|
||||
return html` <loading-screen></loading-screen>> `;
|
||||
return html` <hass-loading-screen no-toolbar></hass-loading-screen>> `;
|
||||
}
|
||||
|
||||
const error =
|
||||
|
||||
@@ -17,8 +17,8 @@ import {
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
TemplateResult,
|
||||
internalProperty,
|
||||
} from "lit-element";
|
||||
import { CastManager, getCastManager } from "../../../../src/cast/cast_manager";
|
||||
import { castSendShowDemo } from "../../../../src/cast/receiver_messages";
|
||||
@@ -27,7 +27,7 @@ import {
|
||||
saveTokens,
|
||||
} from "../../../../src/common/auth/token_storage";
|
||||
import "../../../../src/components/ha-icon";
|
||||
import "../../../../src/layouts/loading-screen";
|
||||
import "../../../../src/layouts/hass-loading-screen";
|
||||
import { registerServiceWorker } from "../../../../src/util/register-service-worker";
|
||||
import "./hc-layout";
|
||||
|
||||
@@ -60,19 +60,19 @@ const INTRO = html`
|
||||
|
||||
@customElement("hc-connect")
|
||||
export class HcConnect extends LitElement {
|
||||
@property() private loading = false;
|
||||
@internalProperty() private loading = false;
|
||||
|
||||
// If we had stored credentials but we cannot connect,
|
||||
// show a screen asking retry or logout.
|
||||
@property() private cannotConnect = false;
|
||||
@internalProperty() private cannotConnect = false;
|
||||
|
||||
@property() private error?: string | TemplateResult;
|
||||
@internalProperty() private error?: string | TemplateResult;
|
||||
|
||||
@property() private auth?: Auth;
|
||||
@internalProperty() private auth?: Auth;
|
||||
|
||||
@property() private connection?: Connection;
|
||||
@internalProperty() private connection?: Connection;
|
||||
|
||||
@property() private castManager?: CastManager | null;
|
||||
@internalProperty() private castManager?: CastManager | null;
|
||||
|
||||
private openDemo = false;
|
||||
|
||||
@@ -98,7 +98,7 @@ export class HcConnect extends LitElement {
|
||||
}
|
||||
|
||||
if (this.castManager === undefined || this.loading) {
|
||||
return html` <loading-screen></loading-screen> `;
|
||||
return html` <hass-loading-screen no-toolbar></hass-loading-screen> `;
|
||||
}
|
||||
|
||||
if (this.castManager === null) {
|
||||
|
||||
@@ -30,7 +30,7 @@ class HcLayout extends LitElement {
|
||||
<ha-card>
|
||||
<div class="layout">
|
||||
<img class="hero" src="/images/google-nest-hub.png" />
|
||||
<div class="card-header">
|
||||
<h1 class="card-header">
|
||||
Home Assistant Cast${this.subtitle ? ` – ${this.subtitle}` : ""}
|
||||
${this.auth
|
||||
? html`
|
||||
@@ -44,7 +44,7 @@ class HcLayout extends LitElement {
|
||||
</div>
|
||||
`
|
||||
: ""}
|
||||
</div>
|
||||
</h1>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</ha-card>
|
||||
|
||||
@@ -6,13 +6,60 @@ import { castContext } from "./cast_context";
|
||||
import { HcMain } from "./layout/hc-main";
|
||||
import { ReceivedMessage } from "./types";
|
||||
|
||||
const controller = new HcMain();
|
||||
document.body.append(controller);
|
||||
const lovelaceController = new HcMain();
|
||||
document.body.append(lovelaceController);
|
||||
|
||||
const mediaPlayer = document.createElement("cast-media-player");
|
||||
mediaPlayer.style.display = "none";
|
||||
document.body.append(mediaPlayer);
|
||||
const playerStylesAdded = false;
|
||||
|
||||
let controls: HTMLElement | null;
|
||||
|
||||
const setTouchControlsVisibility = (visible: boolean) => {
|
||||
if (!castContext.getDeviceCapabilities().touch_input_supported) {
|
||||
return;
|
||||
}
|
||||
controls =
|
||||
controls ||
|
||||
(document.body.querySelector("touch-controls") as HTMLElement | null);
|
||||
if (controls) {
|
||||
controls.style.display = visible ? "initial" : "none";
|
||||
}
|
||||
};
|
||||
|
||||
const showLovelaceController = () => {
|
||||
mediaPlayer.style.display = "none";
|
||||
lovelaceController.style.display = "initial";
|
||||
document.body.setAttribute("style", "overflow-y: auto !important");
|
||||
setTouchControlsVisibility(false);
|
||||
};
|
||||
|
||||
const showMediaPlayer = () => {
|
||||
lovelaceController.style.display = "none";
|
||||
mediaPlayer.style.display = "initial";
|
||||
document.body.removeAttribute("style");
|
||||
setTouchControlsVisibility(true);
|
||||
if (!playerStylesAdded) {
|
||||
const style = document.createElement("style");
|
||||
style.innerHTML = `
|
||||
body {
|
||||
--logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
|
||||
--logo-repeat: no-repeat;
|
||||
--playback-logo-image: url('https://www.home-assistant.io/images/home-assistant-logo.svg');
|
||||
--theme-hue: 200;
|
||||
--progress-color: #03a9f4;
|
||||
--splash-image: url('https://home-assistant.io/images/cast/splash.png');
|
||||
--splash-size: cover;
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
};
|
||||
|
||||
const options = new cast.framework.CastReceiverOptions();
|
||||
options.disableIdleTimeout = true;
|
||||
options.customNamespaces = {
|
||||
// @ts-ignore
|
||||
[CAST_NS]: cast.framework.system.MessageType.JSON,
|
||||
};
|
||||
|
||||
@@ -30,13 +77,61 @@ options.uiConfig = new cast.framework.ui.UiConfig();
|
||||
// @ts-ignore
|
||||
options.uiConfig.touchScreenOptimizedApp = true;
|
||||
|
||||
castContext.setInactivityTimeout(86400); // 1 day
|
||||
|
||||
castContext.addCustomMessageListener(
|
||||
CAST_NS,
|
||||
// @ts-ignore
|
||||
(ev: ReceivedMessage<HassMessage>) => {
|
||||
// We received a show Lovelace command, stop media from playing, hide media player and show Lovelace controller
|
||||
if (
|
||||
playerManager.getPlayerState() !==
|
||||
cast.framework.messages.PlayerState.IDLE
|
||||
) {
|
||||
playerManager.stop();
|
||||
} else {
|
||||
showLovelaceController();
|
||||
}
|
||||
const msg = ev.data;
|
||||
msg.senderId = ev.senderId;
|
||||
controller.processIncomingMessage(msg);
|
||||
lovelaceController.processIncomingMessage(msg);
|
||||
}
|
||||
);
|
||||
|
||||
const playerManager = castContext.getPlayerManager();
|
||||
|
||||
playerManager.setMessageInterceptor(
|
||||
cast.framework.messages.MessageType.LOAD,
|
||||
(loadRequestData) => {
|
||||
// We received a play media command, hide Lovelace and show media player
|
||||
showMediaPlayer();
|
||||
const media = loadRequestData.media;
|
||||
// Special handling if it came from Google Assistant
|
||||
if (media.entity) {
|
||||
media.contentId = media.entity;
|
||||
media.streamType = cast.framework.messages.StreamType.LIVE;
|
||||
media.contentType = "application/vnd.apple.mpegurl";
|
||||
// @ts-ignore
|
||||
media.hlsVideoSegmentFormat =
|
||||
cast.framework.messages.HlsVideoSegmentFormat.FMP4;
|
||||
}
|
||||
return loadRequestData;
|
||||
}
|
||||
);
|
||||
|
||||
playerManager.addEventListener(
|
||||
cast.framework.events.EventType.MEDIA_STATUS,
|
||||
(event) => {
|
||||
if (
|
||||
event.mediaStatus?.playerState ===
|
||||
cast.framework.messages.PlayerState.IDLE &&
|
||||
event.mediaStatus?.idleReason &&
|
||||
event.mediaStatus?.idleReason !==
|
||||
cast.framework.messages.IdleReason.INTERRUPTED
|
||||
) {
|
||||
// media finished or stopped, return to default Lovelace
|
||||
showLovelaceController();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||
import {
|
||||
customElement,
|
||||
html,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { mockHistory } from "../../../../demo/src/stubs/history";
|
||||
import { LovelaceConfig } from "../../../../src/data/lovelace";
|
||||
import {
|
||||
@@ -13,9 +19,9 @@ import "./hc-lovelace";
|
||||
|
||||
@customElement("hc-demo")
|
||||
class HcDemo extends HassElement {
|
||||
@property() public lovelacePath!: string;
|
||||
@property({ attribute: false }) public lovelacePath!: string;
|
||||
|
||||
@property() private _lovelaceConfig?: LovelaceConfig;
|
||||
@internalProperty() private _lovelaceConfig?: LovelaceConfig;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
if (!this._lovelaceConfig) {
|
||||
|
||||
@@ -11,7 +11,7 @@ import { HomeAssistant } from "../../../../src/types";
|
||||
|
||||
@customElement("hc-launch-screen")
|
||||
class HcLaunchScreen extends LitElement {
|
||||
@property() public hass?: HomeAssistant;
|
||||
@property({ attribute: false }) public hass?: HomeAssistant;
|
||||
|
||||
@property() public error?: string;
|
||||
|
||||
|
||||
@@ -9,19 +9,20 @@ import {
|
||||
} from "lit-element";
|
||||
import { LovelaceConfig } from "../../../../src/data/lovelace";
|
||||
import { Lovelace } from "../../../../src/panels/lovelace/types";
|
||||
import "../../../../src/panels/lovelace/views/hui-panel-view";
|
||||
import "../../../../src/panels/lovelace/views/hui-view";
|
||||
import { HomeAssistant } from "../../../../src/types";
|
||||
import "./hc-launch-screen";
|
||||
|
||||
@customElement("hc-lovelace")
|
||||
class HcLovelace extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@property() public lovelaceConfig!: LovelaceConfig;
|
||||
@property({ attribute: false }) public lovelaceConfig!: LovelaceConfig;
|
||||
|
||||
@property() public viewPath?: string | number;
|
||||
|
||||
public urlPath?: string | null;
|
||||
|
||||
protected render(): TemplateResult {
|
||||
const index = this._viewIndex;
|
||||
if (index === undefined) {
|
||||
@@ -35,6 +36,7 @@ class HcLovelace extends LitElement {
|
||||
const lovelace: Lovelace = {
|
||||
config: this.lovelaceConfig,
|
||||
editMode: false,
|
||||
urlPath: this.urlPath!,
|
||||
enableFullEditMode: () => undefined,
|
||||
mode: "storage",
|
||||
language: "en",
|
||||
@@ -42,22 +44,13 @@ class HcLovelace extends LitElement {
|
||||
deleteConfig: async () => undefined,
|
||||
setEditMode: () => undefined,
|
||||
};
|
||||
return this.lovelaceConfig.views[index].panel
|
||||
? html`
|
||||
<hui-panel-view
|
||||
.hass=${this.hass}
|
||||
.lovelace=${lovelace}
|
||||
.config=${this.lovelaceConfig.views[index]}
|
||||
></hui-panel-view>
|
||||
`
|
||||
: html`
|
||||
<hui-view
|
||||
.hass=${this.hass}
|
||||
.lovelace=${lovelace}
|
||||
.index=${index}
|
||||
columns="2"
|
||||
></hui-view>
|
||||
`;
|
||||
return html`
|
||||
<hui-view
|
||||
.hass=${this.hass}
|
||||
.lovelace=${lovelace}
|
||||
.index=${index}
|
||||
></hui-view>
|
||||
`;
|
||||
}
|
||||
|
||||
protected updated(changedProps) {
|
||||
@@ -73,7 +66,7 @@ class HcLovelace extends LitElement {
|
||||
|
||||
if (configBackground) {
|
||||
(this.shadowRoot!.querySelector(
|
||||
"hui-view, hui-panel-view"
|
||||
"hui-view"
|
||||
) as HTMLElement)!.style.setProperty(
|
||||
"--lovelace-background",
|
||||
configBackground
|
||||
|
||||
@@ -3,7 +3,12 @@ import {
|
||||
getAuth,
|
||||
UnsubscribeFunc,
|
||||
} from "home-assistant-js-websocket";
|
||||
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||
import {
|
||||
customElement,
|
||||
html,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { CAST_NS } from "../../../../src/cast/const";
|
||||
import {
|
||||
ConnectMessage,
|
||||
@@ -31,13 +36,13 @@ let resourcesLoaded = false;
|
||||
|
||||
@customElement("hc-main")
|
||||
export class HcMain extends HassElement {
|
||||
@property() private _showDemo = false;
|
||||
@internalProperty() private _showDemo = false;
|
||||
|
||||
@property() private _lovelaceConfig?: LovelaceConfig;
|
||||
@internalProperty() private _lovelaceConfig?: LovelaceConfig;
|
||||
|
||||
@property() private _lovelacePath: string | number | null = null;
|
||||
@internalProperty() private _lovelacePath: string | number | null = null;
|
||||
|
||||
@property() private _error?: string;
|
||||
@internalProperty() private _error?: string;
|
||||
|
||||
private _unsubLovelace?: UnsubscribeFunc;
|
||||
|
||||
@@ -82,6 +87,7 @@ export class HcMain extends HassElement {
|
||||
.hass=${this.hass}
|
||||
.lovelaceConfig=${this._lovelaceConfig}
|
||||
.viewPath=${this._lovelacePath}
|
||||
.urlPath=${this._urlPath}
|
||||
@config-refresh=${this._generateLovelaceConfig}
|
||||
></hc-lovelace>
|
||||
`;
|
||||
@@ -210,9 +216,7 @@ export class HcMain extends HassElement {
|
||||
}
|
||||
this._showDemo = false;
|
||||
this._lovelacePath = msg.viewPath;
|
||||
if (castContext.getDeviceCapabilities().touch_input_supported) {
|
||||
this._breakFree();
|
||||
}
|
||||
|
||||
this._sendStatus();
|
||||
}
|
||||
|
||||
@@ -235,9 +239,6 @@ export class HcMain extends HassElement {
|
||||
this._showDemo = true;
|
||||
this._lovelacePath = "overview";
|
||||
this._sendStatus();
|
||||
if (castContext.getDeviceCapabilities().touch_input_supported) {
|
||||
this._breakFree();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -258,14 +259,6 @@ export class HcMain extends HassElement {
|
||||
}
|
||||
}
|
||||
|
||||
private _breakFree() {
|
||||
const controls = document.body.querySelector("touch-controls");
|
||||
if (controls) {
|
||||
controls.remove();
|
||||
}
|
||||
document.body.setAttribute("style", "overflow-y: auto !important");
|
||||
}
|
||||
|
||||
private sendMessage(senderId: string, response: any) {
|
||||
castContext.sendCustomMessage(CAST_NS, senderId, response);
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 767 B After Width: | Height: | Size: 532 B |
|
Before Width: | Height: | Size: 803 B After Width: | Height: | Size: 535 B |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 184 B |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 19 KiB |
@@ -26,9 +26,9 @@ export const demoThemeJimpower = () => ({
|
||||
"switch-checked-color": "var(--accent-color)",
|
||||
"paper-dialog-background-color": "#434954",
|
||||
"secondary-text-color": "#5294E2",
|
||||
"google-red-500": "#E45E65",
|
||||
"error-color": "#E45E65",
|
||||
"divider-color": "rgba(0, 0, 0, .12)",
|
||||
"google-green-500": "#39E949",
|
||||
"success-color": "#39E949",
|
||||
"switch-unchecked-button-color": "var(--disabled-text-color)",
|
||||
"label-badge-border-color": "green",
|
||||
"paper-listbox-color": "var(--primary-color)",
|
||||
|
||||
@@ -27,9 +27,9 @@ export const demoThemeKernehed = () => ({
|
||||
"switch-checked-color": "var(--accent-color)",
|
||||
"paper-dialog-background-color": "#292929",
|
||||
"secondary-text-color": "#b58e31",
|
||||
"google-red-500": "#b58e31",
|
||||
"error-color": "#b58e31",
|
||||
"divider-color": "rgba(0, 0, 0, .12)",
|
||||
"google-green-500": "#2980b9",
|
||||
"success-color": "#2980b9",
|
||||
"switch-unchecked-button-color": "var(--disabled-text-color)",
|
||||
"label-badge-border-color": "green",
|
||||
"paper-listbox-color": "#777777",
|
||||
|
||||
@@ -7,205 +7,183 @@ export const demoLovelaceTeachingbirds: DemoConfig["lovelace"] = () => ({
|
||||
cards: [
|
||||
{ type: "custom:ha-demo-card" },
|
||||
{
|
||||
type: "grid",
|
||||
columns: 4,
|
||||
cards: [
|
||||
{
|
||||
cards: [
|
||||
image: "/assets/teachingbirds/isa_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "more-info",
|
||||
},
|
||||
entity: "sensor.presence_isa",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/Stefan_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "more-info",
|
||||
},
|
||||
entity: "sensor.presence_stefan",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/background_square.png",
|
||||
elements: [
|
||||
{
|
||||
image: "/assets/teachingbirds/isa_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
state_image: {
|
||||
on: "/assets/teachingbirds/radiator_on.jpg",
|
||||
off: "/assets/teachingbirds/radiator_off.jpg",
|
||||
},
|
||||
type: "image",
|
||||
style: {
|
||||
width: "100%",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
},
|
||||
tap_action: {
|
||||
action: "more-info",
|
||||
},
|
||||
entity: "sensor.presence_isa",
|
||||
entity: "switch.stefan_radiator_3",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/Stefan_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "more-info",
|
||||
style: {
|
||||
top: "90%",
|
||||
left: "50%",
|
||||
},
|
||||
entity: "sensor.presence_stefan",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/background_square.png",
|
||||
elements: [
|
||||
{
|
||||
state_image: {
|
||||
on: "/assets/teachingbirds/radiator_on.jpg",
|
||||
off: "/assets/teachingbirds/radiator_off.jpg",
|
||||
},
|
||||
type: "image",
|
||||
style: {
|
||||
width: "100%",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
},
|
||||
tap_action: {
|
||||
action: "more-info",
|
||||
},
|
||||
entity: "switch.stefan_radiator_3",
|
||||
},
|
||||
{
|
||||
style: {
|
||||
top: "90%",
|
||||
left: "50%",
|
||||
},
|
||||
type: "state-label",
|
||||
entity: "sensor.temperature_stefan",
|
||||
},
|
||||
],
|
||||
type: "picture-elements",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/background_square.png",
|
||||
elements: [
|
||||
{
|
||||
style: {
|
||||
"--mdc-icon-size": "100%",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
},
|
||||
type: "icon",
|
||||
tap_action: {
|
||||
action: "navigate",
|
||||
navigation_path: "/lovelace/home_info",
|
||||
},
|
||||
icon: "mdi:car",
|
||||
},
|
||||
],
|
||||
type: "picture-elements",
|
||||
},
|
||||
],
|
||||
type: "horizontal-stack",
|
||||
},
|
||||
{
|
||||
cards: [
|
||||
{
|
||||
show_name: false,
|
||||
type: "picture-entity",
|
||||
name: "Alarm",
|
||||
image: "/assets/teachingbirds/House_square.jpg",
|
||||
entity: "alarm_control_panel.house",
|
||||
},
|
||||
{
|
||||
name: "Roomba",
|
||||
image: "/assets/teachingbirds/roomba_square.jpg",
|
||||
show_name: false,
|
||||
type: "picture-entity",
|
||||
state_image: {
|
||||
"Not Today": "/assets/teachingbirds/roomba_bw_square.jpg",
|
||||
},
|
||||
entity: "input_select.roomba_mode",
|
||||
},
|
||||
{
|
||||
show_name: false,
|
||||
type: "picture-entity",
|
||||
state_image: {
|
||||
Mail: "/assets/teachingbirds/mailbox_square.jpg",
|
||||
"Package and mail":
|
||||
"/assets/teachingbirds/mailbox_square.jpg",
|
||||
Empty: "/assets/teachingbirds/mailbox_bw_square.jpg",
|
||||
Package: "/assets/teachingbirds/mailbox_square.jpg",
|
||||
},
|
||||
entity: "sensor.mailbox",
|
||||
},
|
||||
{
|
||||
show_name: false,
|
||||
state_image: {
|
||||
"Put out": "/assets/teachingbirds/trash_square.jpg",
|
||||
"Take in": "/assets/teachingbirds/trash_square.jpg",
|
||||
},
|
||||
type: "picture-entity",
|
||||
image: "/assets/teachingbirds/trash_bear_bw_square.jpg",
|
||||
entity: "sensor.trash_status",
|
||||
},
|
||||
],
|
||||
type: "horizontal-stack",
|
||||
},
|
||||
{
|
||||
cards: [
|
||||
{
|
||||
state_image: {
|
||||
Idle: "/assets/teachingbirds/washer_square.jpg",
|
||||
Running: "/assets/teachingbirds/laundry_running_square.jpg",
|
||||
Clean: "/assets/teachingbirds/laundry_clean_2_square.jpg",
|
||||
},
|
||||
entity: "input_select.washing_machine_status",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
name: "Washer",
|
||||
},
|
||||
{
|
||||
state_image: {
|
||||
Idle: "/assets/teachingbirds/dryer_square.jpg",
|
||||
Running: "/assets/teachingbirds/clothes_drying_square.jpg",
|
||||
Clean: "/assets/teachingbirds/folded_clothes_square.jpg",
|
||||
},
|
||||
entity: "input_select.dryer_status",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
name: "Dryer",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/guests_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "toggle",
|
||||
},
|
||||
entity: "input_boolean.guest_mode",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/cleaning_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "toggle",
|
||||
},
|
||||
entity: "input_boolean.cleaning_day",
|
||||
},
|
||||
],
|
||||
type: "horizontal-stack",
|
||||
},
|
||||
],
|
||||
type: "vertical-stack",
|
||||
},
|
||||
{
|
||||
type: "vertical-stack",
|
||||
cards: [
|
||||
{
|
||||
cards: [
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
entity: "sensor.temperature_bedroom",
|
||||
},
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
name: "S's room",
|
||||
type: "state-label",
|
||||
entity: "sensor.temperature_stefan",
|
||||
},
|
||||
],
|
||||
type: "horizontal-stack",
|
||||
type: "picture-elements",
|
||||
},
|
||||
{
|
||||
cards: [
|
||||
image: "/assets/teachingbirds/background_square.png",
|
||||
elements: [
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
entity: "sensor.temperature_passage",
|
||||
},
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
name: "Laundry",
|
||||
entity: "sensor.temperature_downstairs_bathroom",
|
||||
style: {
|
||||
"--mdc-icon-size": "100%",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
},
|
||||
type: "icon",
|
||||
tap_action: {
|
||||
action: "navigate",
|
||||
navigation_path: "/lovelace/home_info",
|
||||
},
|
||||
icon: "mdi:car",
|
||||
},
|
||||
],
|
||||
type: "horizontal-stack",
|
||||
type: "picture-elements",
|
||||
},
|
||||
|
||||
{
|
||||
show_name: false,
|
||||
type: "picture-entity",
|
||||
name: "Alarm",
|
||||
image: "/assets/teachingbirds/House_square.jpg",
|
||||
entity: "alarm_control_panel.house",
|
||||
},
|
||||
{
|
||||
name: "Roomba",
|
||||
image: "/assets/teachingbirds/roomba_square.jpg",
|
||||
show_name: false,
|
||||
type: "picture-entity",
|
||||
state_image: {
|
||||
"Not Today": "/assets/teachingbirds/roomba_bw_square.jpg",
|
||||
},
|
||||
entity: "input_select.roomba_mode",
|
||||
},
|
||||
{
|
||||
show_name: false,
|
||||
type: "picture-entity",
|
||||
state_image: {
|
||||
Mail: "/assets/teachingbirds/mailbox_square.jpg",
|
||||
"Package and mail": "/assets/teachingbirds/mailbox_square.jpg",
|
||||
Empty: "/assets/teachingbirds/mailbox_bw_square.jpg",
|
||||
Package: "/assets/teachingbirds/mailbox_square.jpg",
|
||||
},
|
||||
entity: "sensor.mailbox",
|
||||
},
|
||||
{
|
||||
show_name: false,
|
||||
state_image: {
|
||||
"Put out": "/assets/teachingbirds/trash_square.jpg",
|
||||
"Take in": "/assets/teachingbirds/trash_square.jpg",
|
||||
},
|
||||
type: "picture-entity",
|
||||
image: "/assets/teachingbirds/trash_bear_bw_square.jpg",
|
||||
entity: "sensor.trash_status",
|
||||
},
|
||||
|
||||
{
|
||||
state_image: {
|
||||
Idle: "/assets/teachingbirds/washer_square.jpg",
|
||||
Running: "/assets/teachingbirds/laundry_running_square.jpg",
|
||||
Clean: "/assets/teachingbirds/laundry_clean_2_square.jpg",
|
||||
},
|
||||
entity: "input_select.washing_machine_status",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
name: "Washer",
|
||||
},
|
||||
{
|
||||
state_image: {
|
||||
Idle: "/assets/teachingbirds/dryer_square.jpg",
|
||||
Running: "/assets/teachingbirds/clothes_drying_square.jpg",
|
||||
Clean: "/assets/teachingbirds/folded_clothes_square.jpg",
|
||||
},
|
||||
entity: "input_select.dryer_status",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
name: "Dryer",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/guests_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "toggle",
|
||||
},
|
||||
entity: "input_boolean.guest_mode",
|
||||
},
|
||||
{
|
||||
image: "/assets/teachingbirds/cleaning_square.jpg",
|
||||
type: "picture-entity",
|
||||
show_name: false,
|
||||
tap_action: {
|
||||
action: "toggle",
|
||||
},
|
||||
entity: "input_boolean.cleaning_day",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: "grid",
|
||||
columns: 2,
|
||||
cards: [
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
entity: "sensor.temperature_bedroom",
|
||||
},
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
name: "S's room",
|
||||
entity: "sensor.temperature_stefan",
|
||||
},
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
entity: "sensor.temperature_passage",
|
||||
},
|
||||
{
|
||||
graph: "line",
|
||||
type: "sensor",
|
||||
name: "Laundry",
|
||||
entity: "sensor.temperature_downstairs_bathroom",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -4,7 +4,7 @@ import {
|
||||
customElement,
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { CastManager } from "../../../src/cast/cast_manager";
|
||||
@@ -20,7 +20,7 @@ import { HomeAssistant } from "../../../src/types";
|
||||
class CastDemoRow extends LitElement implements LovelaceRow {
|
||||
public hass!: HomeAssistant;
|
||||
|
||||
@property() private _castManager?: CastManager | null;
|
||||
@internalProperty() private _castManager?: CastManager | null;
|
||||
|
||||
public setConfig(_config: CastConfig): void {
|
||||
// No config possible.
|
||||
@@ -52,7 +52,6 @@ class CastDemoRow extends LitElement implements LovelaceRow {
|
||||
});
|
||||
mgr.castContext.addEventListener(
|
||||
// eslint-disable-next-line no-undef
|
||||
// @ts-ignore
|
||||
cast.framework.CastContextEventType.SESSION_STATE_CHANGED,
|
||||
(ev) => {
|
||||
// On Android, opening a new session always results in SESSION_RESUMED.
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
html,
|
||||
LitElement,
|
||||
property,
|
||||
internalProperty,
|
||||
TemplateResult,
|
||||
} from "lit-element";
|
||||
import { until } from "lit-html/directives/until";
|
||||
@@ -21,11 +22,11 @@ import {
|
||||
} from "../configs/demo-configs";
|
||||
|
||||
export class HADemoCard extends LitElement implements LovelaceCard {
|
||||
@property() public lovelace?: Lovelace;
|
||||
@property({ attribute: false }) public lovelace?: Lovelace;
|
||||
|
||||
@property() public hass!: MockHomeAssistant;
|
||||
@property({ attribute: false }) public hass!: MockHomeAssistant;
|
||||
|
||||
@property() private _switching?: boolean;
|
||||
@internalProperty() private _switching?: boolean;
|
||||
|
||||
private _hidden = localStorage.hide_demo_card;
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import "../../src/resources/safari-14-attachshadow-patch";
|
||||
import "@polymer/polymer/lib/elements/dom-if";
|
||||
import "@polymer/polymer/lib/elements/dom-repeat";
|
||||
import "../../src/resources/ha-style";
|
||||
|
||||
@@ -6,4 +6,11 @@ export const mockTemplate = (hass: MockHomeAssistant) => {
|
||||
body: { message: "Template dev tool does not work in the demo." },
|
||||
})
|
||||
);
|
||||
hass.mockWS("render_template", (msg, onChange) => {
|
||||
onChange!({
|
||||
result: msg.template,
|
||||
listeners: { all: false, domains: [], entities: [], time: false },
|
||||
});
|
||||
return () => {};
|
||||
});
|
||||
};
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 110 KiB |
@@ -5,11 +5,16 @@ import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../../src/components/ha-switch";
|
||||
import "../../../src/components/ha-formfield";
|
||||
import "./demo-card";
|
||||
import { applyThemesOnElement } from "../../../src/common/dom/apply_themes_on_element";
|
||||
|
||||
class DemoCards extends PolymerElement {
|
||||
static get template() {
|
||||
return html`
|
||||
<style>
|
||||
#container {
|
||||
min-height: calc(100vh - 128px);
|
||||
background: var(--primary-background-color);
|
||||
}
|
||||
.cards {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
@@ -24,6 +29,9 @@ class DemoCards extends PolymerElement {
|
||||
.filters {
|
||||
margin-left: 60px;
|
||||
}
|
||||
ha-formfield {
|
||||
margin-right: 16px;
|
||||
}
|
||||
</style>
|
||||
<app-toolbar>
|
||||
<div class="filters">
|
||||
@@ -31,16 +39,21 @@ class DemoCards extends PolymerElement {
|
||||
<ha-switch checked="[[_showConfig]]" on-change="_showConfigToggled">
|
||||
</ha-switch>
|
||||
</ha-formfield>
|
||||
<ha-formfield label="Dark theme">
|
||||
<ha-switch on-change="_darkThemeToggled"> </ha-switch>
|
||||
</ha-formfield>
|
||||
</div>
|
||||
</app-toolbar>
|
||||
<div class="cards">
|
||||
<template is="dom-repeat" items="[[configs]]">
|
||||
<demo-card
|
||||
config="[[item]]"
|
||||
show-config="[[_showConfig]]"
|
||||
hass="[[hass]]"
|
||||
></demo-card>
|
||||
</template>
|
||||
<div id="container">
|
||||
<div class="cards">
|
||||
<template is="dom-repeat" items="[[configs]]">
|
||||
<demo-card
|
||||
config="[[item]]"
|
||||
show-config="[[_showConfig]]"
|
||||
hass="[[hass]]"
|
||||
></demo-card>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -59,6 +72,12 @@ class DemoCards extends PolymerElement {
|
||||
_showConfigToggled(ev) {
|
||||
this._showConfig = ev.target.checked;
|
||||
}
|
||||
|
||||
_darkThemeToggled(ev) {
|
||||
applyThemesOnElement(this.$.container, { themes: {} }, "default", {
|
||||
dark: ev.target.checked,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("demo-cards", DemoCards);
|
||||
|
||||
@@ -2,8 +2,8 @@ import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../../src/components/ha-card";
|
||||
import "../../../src/dialogs/more-info/controls/more-info-content";
|
||||
import "../../../src/state-summary/state-card-content";
|
||||
import "../../../src/dialogs/more-info/more-info-content";
|
||||
|
||||
class DemoMoreInfo extends PolymerElement {
|
||||
static get template() {
|
||||
@@ -16,15 +16,12 @@ class DemoMoreInfo extends PolymerElement {
|
||||
|
||||
ha-card {
|
||||
width: 333px;
|
||||
padding: 20px 24px;
|
||||
}
|
||||
|
||||
state-card-content {
|
||||
display: block;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
more-info-content {
|
||||
padding: 0 16px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
pre {
|
||||
|
||||
@@ -420,15 +420,6 @@ export default {
|
||||
last_changed: "2018-07-19T10:44:46.105940+00:00",
|
||||
last_updated: "2018-07-19T10:44:46.105940+00:00",
|
||||
},
|
||||
"weblink.router": {
|
||||
entity_id: "weblink.router",
|
||||
state: "http://192.168.1.1",
|
||||
attributes: {
|
||||
friendly_name: "Router",
|
||||
},
|
||||
last_changed: "2018-07-19T10:44:46.107286+00:00",
|
||||
last_updated: "2018-07-19T10:44:46.107286+00:00",
|
||||
},
|
||||
"group.all_plants": {
|
||||
entity_id: "group.all_plants",
|
||||
state: "ok",
|
||||
@@ -1090,18 +1081,6 @@ export default {
|
||||
last_changed: "2018-07-19T10:44:46.510448+00:00",
|
||||
last_updated: "2018-07-19T10:44:46.510448+00:00",
|
||||
},
|
||||
"history_graph.recent_switches": {
|
||||
entity_id: "history_graph.recent_switches",
|
||||
state: "unknown",
|
||||
attributes: {
|
||||
hours_to_show: 1,
|
||||
refresh: 60,
|
||||
entity_id: ["switch.ac", "switch.decorative_lights"],
|
||||
friendly_name: "Recent Switches",
|
||||
},
|
||||
last_changed: "2018-07-19T10:44:46.512351+00:00",
|
||||
last_updated: "2018-07-19T10:44:46.512351+00:00",
|
||||
},
|
||||
"scene.switch_on_and_off": {
|
||||
entity_id: "scene.switch_on_and_off",
|
||||
state: "scening",
|
||||
|
||||
@@ -15,6 +15,10 @@ const ENTITIES = [
|
||||
getEntity("alarm_control_panel", "unavailable", "unavailable", {
|
||||
friendly_name: "Alarm",
|
||||
}),
|
||||
getEntity("alarm_control_panel", "alarm_code", "disarmed", {
|
||||
friendly_name: "Alarm",
|
||||
code_format: "number",
|
||||
}),
|
||||
];
|
||||
|
||||
const CONFIGS = [
|
||||
@@ -30,7 +34,14 @@ const CONFIGS = [
|
||||
config: `
|
||||
- type: alarm-panel
|
||||
entity: alarm_control_panel.alarm_armed
|
||||
title: My Alarm
|
||||
name: My Alarm
|
||||
`,
|
||||
},
|
||||
{
|
||||
heading: "Code Example",
|
||||
config: `
|
||||
- type: alarm-panel
|
||||
entity: alarm_control_panel.alarm_code
|
||||
`,
|
||||
},
|
||||
{
|
||||
@@ -83,8 +94,12 @@ class DemoAlarmPanelEntity extends PolymerElement {
|
||||
|
||||
public ready() {
|
||||
super.ready();
|
||||
this._setupDemo();
|
||||
}
|
||||
|
||||
private async _setupDemo() {
|
||||
const hass = provideHass(this.$.demos);
|
||||
hass.updateTranslations(null, "en");
|
||||
await hass.updateTranslations(null, "en");
|
||||
hass.addEntities(ENTITIES);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,4 +98,4 @@ class DemoButtonEntity extends PolymerElement {
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("demo-hui-button-card", DemoButtonEntity);
|
||||
customElements.define("demo-hui-entity-button-card", DemoButtonEntity);
|
||||
|
||||
@@ -8,6 +8,7 @@ import "../components/demo-cards";
|
||||
const ENTITIES = [
|
||||
getEntity("sensor", "brightness", "12", {}),
|
||||
getEntity("plant", "bonsai", "ok", {}),
|
||||
getEntity("sensor", "not_working", "unavailable", {}),
|
||||
getEntity("sensor", "outside_humidity", "54", {
|
||||
unit_of_measurement: "%",
|
||||
}),
|
||||
@@ -74,6 +75,13 @@ const CONFIGS = [
|
||||
entity: plant.bonsai
|
||||
`,
|
||||
},
|
||||
{
|
||||
heading: "Unavailable entity",
|
||||
config: `
|
||||
- type: gauge
|
||||
entity: sensor.not_working
|
||||
`,
|
||||
},
|
||||
];
|
||||
|
||||
class DemoGaugeEntity extends PolymerElement {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import { mockTemplate } from "../../../demo/src/stubs/template";
|
||||
import { provideHass } from "../../../src/fake_data/provide_hass";
|
||||
import "../components/demo-cards";
|
||||
|
||||
const CONFIGS = [
|
||||
@@ -254,7 +256,7 @@ const CONFIGS = [
|
||||
|
||||
class DemoMarkdown extends PolymerElement {
|
||||
static get template() {
|
||||
return html` <demo-cards configs="[[_configs]]"></demo-cards> `;
|
||||
return html` <demo-cards id="demos" configs="[[_configs]]"></demo-cards> `;
|
||||
}
|
||||
|
||||
static get properties() {
|
||||
@@ -265,6 +267,12 @@ class DemoMarkdown extends PolymerElement {
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
public ready() {
|
||||
super.ready();
|
||||
const hass = provideHass(this.$.demos);
|
||||
mockTemplate(hass);
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("demo-hui-markdown-card", DemoMarkdown);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import { mockHistory } from "../../../demo/src/stubs/history";
|
||||
import { getEntity } from "../../../src/fake_data/entity";
|
||||
import { provideHass } from "../../../src/fake_data/provide_hass";
|
||||
import "../components/demo-cards";
|
||||
@@ -36,6 +37,10 @@ const ENTITIES = [
|
||||
battery: 71,
|
||||
friendly_name: "Home Boy",
|
||||
}),
|
||||
getEntity("sensor", "illumination", "23", {
|
||||
friendly_name: "Illumination",
|
||||
unit_of_measurement: "lx",
|
||||
}),
|
||||
];
|
||||
|
||||
const CONFIGS = [
|
||||
@@ -89,6 +94,42 @@ const CONFIGS = [
|
||||
entity: light.bed_light
|
||||
`,
|
||||
},
|
||||
{
|
||||
heading: "Default Grid",
|
||||
config: `
|
||||
- type: grid
|
||||
cards:
|
||||
- type: entity
|
||||
entity: light.kitchen_lights
|
||||
- type: entity
|
||||
entity: light.bed_light
|
||||
- type: entity
|
||||
entity: device_tracker.demo_paulus
|
||||
- type: sensor
|
||||
entity: sensor.illumination
|
||||
graph: line
|
||||
- type: entity
|
||||
entity: device_tracker.demo_anne_therese
|
||||
`,
|
||||
},
|
||||
{
|
||||
heading: "Non-square Grid with 2 columns",
|
||||
config: `
|
||||
- type: grid
|
||||
columns: 2
|
||||
square: false
|
||||
cards:
|
||||
- type: entity
|
||||
entity: light.kitchen_lights
|
||||
- type: entity
|
||||
entity: light.bed_light
|
||||
- type: entity
|
||||
entity: device_tracker.demo_paulus
|
||||
- type: sensor
|
||||
entity: sensor.illumination
|
||||
graph: line
|
||||
`,
|
||||
},
|
||||
];
|
||||
|
||||
class DemoStack extends PolymerElement {
|
||||
@@ -110,6 +151,7 @@ class DemoStack extends PolymerElement {
|
||||
const hass = provideHass(this.$.demos);
|
||||
hass.updateTranslations(null, "en");
|
||||
hass.addEntities(ENTITIES);
|
||||
mockHistory(hass);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,10 +3,10 @@ import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../../src/components/ha-card";
|
||||
import { SUPPORT_BRIGHTNESS } from "../../../src/data/light";
|
||||
import "../../../src/dialogs/more-info/controls/more-info-content";
|
||||
import { getEntity } from "../../../src/fake_data/entity";
|
||||
import { provideHass } from "../../../src/fake_data/provide_hass";
|
||||
import "../components/demo-more-infos";
|
||||
import "../../../src/dialogs/more-info/more-info-content";
|
||||
|
||||
const ENTITIES = [
|
||||
getEntity("light", "bed_light", "on", {
|
||||
@@ -40,8 +40,12 @@ class DemoMoreInfoLight extends PolymerElement {
|
||||
|
||||
public ready() {
|
||||
super.ready();
|
||||
this._setupDemo();
|
||||
}
|
||||
|
||||
private async _setupDemo() {
|
||||
const hass = provideHass(this);
|
||||
hass.updateTranslations(null, "en");
|
||||
await hass.updateTranslations(null, "en");
|
||||
hass.addEntities(ENTITIES);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import "@polymer/app-layout/app-header-layout/app-header-layout";
|
||||
import "@polymer/app-layout/app-header/app-header";
|
||||
import "@polymer/app-layout/app-toolbar/app-toolbar";
|
||||
import "../../src/components/ha-icon-button";
|
||||
import "../../src/components/ha-icon";
|
||||
import "@polymer/paper-item/paper-item";
|
||||
import "@polymer/paper-item/paper-item-body";
|
||||
import { html } from "@polymer/polymer/lib/utils/html-tag";
|
||||
/* eslint-plugin-disable lit */
|
||||
import { PolymerElement } from "@polymer/polymer/polymer-element";
|
||||
import "../../src/components/ha-card";
|
||||
import "../../src/components/ha-icon";
|
||||
import "../../src/components/ha-icon-button";
|
||||
import "../../src/managers/notification-manager";
|
||||
import "../../src/styles/polymer-ha-style";
|
||||
// eslint-disable-next-line import/extensions
|
||||
import { DEMOS } from "../build/import-demos";
|
||||
|
||||
const fixPath = (path) => path.substr(2, path.length - 5);
|
||||
|
||||
@@ -21,11 +21,11 @@ import { filterAndSort } from "../components/hassio-filter-addons";
|
||||
import { hassioStyle } from "../resources/hassio-style";
|
||||
|
||||
class HassioAddonRepositoryEl extends LitElement {
|
||||
@property() public hass!: HomeAssistant;
|
||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||
|
||||
@property() public repo!: HassioAddonRepository;
|
||||
@property({ attribute: false }) public repo!: HassioAddonRepository;
|
||||
|
||||
@property() public addons!: HassioAddonInfo[];
|
||||
@property({ attribute: false }) public addons!: HassioAddonInfo[];
|
||||
|
||||
@property() public filter!: string;
|
||||
|
||||
@@ -78,18 +78,18 @@ class HassioAddonRepositoryEl extends LitElement {
|
||||
.title=${addon.name}
|
||||
.description=${addon.description}
|
||||
.available=${addon.available}
|
||||
.icon=${addon.installed && addon.installed !== addon.version
|
||||
.icon=${addon.installed && addon.update_available
|
||||
? mdiArrowUpBoldCircle
|
||||
: mdiPuzzle}
|
||||
.iconTitle=${addon.installed
|
||||
? addon.installed !== addon.version
|
||||
? addon.update_available
|
||||
? "New version available"
|
||||
: "Add-on is installed"
|
||||
: addon.available
|
||||
? "Add-on is not installed"
|
||||
: "Add-on is not available on your system"}
|
||||
.iconClass=${addon.installed
|
||||
? addon.installed !== addon.version
|
||||
? addon.update_available
|
||||
? "update"
|
||||
: "installed"
|
||||
: !addon.available
|
||||
@@ -104,7 +104,7 @@ class HassioAddonRepositoryEl extends LitElement {
|
||||
: undefined}
|
||||
.showTopbar=${addon.installed || !addon.available}
|
||||
.topbarClass=${addon.installed
|
||||
? addon.installed !== addon.version
|
||||
? addon.update_available
|
||||
? "update"
|
||||
: "installed"
|
||||
: !addon.available
|
||||
|
||||