diff --git a/build-scripts/gulp/gen-icons-json.js b/build-scripts/gulp/gen-icons-json.js index 5648308486..58bb4faaaa 100644 --- a/build-scripts/gulp/gen-icons-json.js +++ b/build-scripts/gulp/gen-icons-json.js @@ -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)) { diff --git a/build-scripts/removedIcons.json b/build-scripts/removedIcons.json new file mode 100644 index 0000000000..887da3dab7 --- /dev/null +++ b/build-scripts/removedIcons.json @@ -0,0 +1,263 @@ +[ + { + "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": "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" + } +] diff --git a/cast/src/launcher/layout/hc-cast.ts b/cast/src/launcher/layout/hc-cast.ts index 099c7f70be..32139fa557 100644 --- a/cast/src/launcher/layout/hc-cast.ts +++ b/cast/src/launcher/layout/hc-cast.ts @@ -28,7 +28,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"; @@ -47,7 +47,7 @@ class HcCast extends LitElement { protected render(): TemplateResult { if (this.lovelaceConfig === undefined) { - return html` > `; + return html` > `; } const error = diff --git a/cast/src/launcher/layout/hc-connect.ts b/cast/src/launcher/layout/hc-connect.ts index 048a69f403..2aa72385e9 100644 --- a/cast/src/launcher/layout/hc-connect.ts +++ b/cast/src/launcher/layout/hc-connect.ts @@ -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"; @@ -98,7 +98,7 @@ export class HcConnect extends LitElement { } if (this.castManager === undefined || this.loading) { - return html` `; + return html` `; } if (this.castManager === null) { diff --git a/gallery/src/components/demo-more-info.js b/gallery/src/components/demo-more-info.js index c1cac68c8b..9def4e6095 100644 --- a/gallery/src/components/demo-more-info.js +++ b/gallery/src/components/demo-more-info.js @@ -2,7 +2,7 @@ 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/dialogs/more-info/more-info-content"; import "../../../src/state-summary/state-card-content"; class DemoMoreInfo extends PolymerElement { diff --git a/gallery/src/data/demo_states.js b/gallery/src/data/demo_states.js index a00841ffc4..060ce56e29 100644 --- a/gallery/src/data/demo_states.js +++ b/gallery/src/data/demo_states.js @@ -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", diff --git a/gallery/src/demos/demo-more-info-light.ts b/gallery/src/demos/demo-more-info-light.ts index 67cd631b87..19677825d5 100644 --- a/gallery/src/demos/demo-more-info-light.ts +++ b/gallery/src/demos/demo-more-info-light.ts @@ -3,7 +3,7 @@ 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 "../../../src/dialogs/more-info/more-info-content"; import { getEntity } from "../../../src/fake_data/entity"; import { provideHass } from "../../../src/fake_data/provide_hass"; import "../components/demo-more-infos"; diff --git a/hassio/src/addon-store/hassio-addon-store.ts b/hassio/src/addon-store/hassio-addon-store.ts index 80f210b6e3..88dfb115c6 100644 --- a/hassio/src/addon-store/hassio-addon-store.ts +++ b/hassio/src/addon-store/hassio-addon-store.ts @@ -19,7 +19,7 @@ import { reloadHassioAddons, } from "../../../src/data/hassio/addon"; import "../../../src/layouts/hass-tabs-subpage"; -import "../../../src/layouts/loading-screen"; +import "../../../src/layouts/hass-loading-screen"; import { HomeAssistant, Route } from "../../../src/types"; import { showRepositoriesDialog } from "../dialogs/repositories/show-dialog-repositories"; import { supervisorTabs } from "../hassio-tabs"; @@ -108,7 +108,7 @@ class HassioAddonStore extends LitElement { ${repos.length === 0 - ? html`` + ? html`` : html` diff --git a/hassio/src/system/hassio-supervisor-log.ts b/hassio/src/system/hassio-supervisor-log.ts index af3b94665d..d9f3218a7a 100644 --- a/hassio/src/system/hassio-supervisor-log.ts +++ b/hassio/src/system/hassio-supervisor-log.ts @@ -13,7 +13,7 @@ import { } from "lit-element"; import "../../../src/components/ha-card"; import { fetchHassioLogs } from "../../../src/data/hassio/supervisor"; -import "../../../src/layouts/loading-screen"; +import "../../../src/layouts/hass-loading-screen"; import { haStyle } from "../../../src/resources/styles"; import { HomeAssistant } from "../../../src/types"; import "../components/hassio-ansi-to-html"; @@ -98,7 +98,7 @@ class HassioSupervisorLog extends LitElement { ? html`` - : html``} + : html``}
Refresh diff --git a/package.json b/package.json index 87a988abf4..7b4ada4548 100644 --- a/package.json +++ b/package.json @@ -25,20 +25,23 @@ "@formatjs/intl-pluralrules": "^1.5.8", "@fullcalendar/core": "^5.0.0-beta.2", "@fullcalendar/daygrid": "^5.0.0-beta.2", - "@material/chips": "7.0.0-canary.d92d8c93e.0", - "@material/circular-progress": "7.0.0-canary.d92d8c93e.0", - "@material/mwc-button": "^0.15.0", - "@material/mwc-checkbox": "^0.15.0", - "@material/mwc-dialog": "^0.15.0", - "@material/mwc-fab": "^0.15.0", - "@material/mwc-formfield": "^0.15.0", - "@material/mwc-icon-button": "^0.15.0", - "@material/mwc-list": "^0.15.0", - "@material/mwc-menu": "^0.15.0", - "@material/mwc-ripple": "^0.15.0", - "@material/mwc-switch": "^0.15.0", - "@mdi/js": "4.9.95", - "@mdi/svg": "4.9.95", + "@material/chips": "=8.0.0-canary.a78ceb112.0", + "@material/circular-progress": "=8.0.0-canary.a78ceb112.0", + "@material/mwc-button": "^0.17.2", + "@material/mwc-checkbox": "^0.17.2", + "@material/mwc-dialog": "^0.17.2", + "@material/mwc-fab": "^0.17.2", + "@material/mwc-formfield": "^0.17.2", + "@material/mwc-icon-button": "^0.17.2", + "@material/mwc-list": "^0.17.2", + "@material/mwc-menu": "^0.17.2", + "@material/mwc-ripple": "^0.17.2", + "@material/mwc-switch": "^0.17.2", + "@material/mwc-tab": "^0.17.2", + "@material/mwc-tab-bar": "^0.17.2", + "@material/top-app-bar": "=8.0.0-canary.a78ceb112.0", + "@mdi/js": "5.3.45", + "@mdi/svg": "5.3.45", "@polymer/app-layout": "^3.0.2", "@polymer/app-route": "^3.0.2", "@polymer/app-storage": "^3.0.2", @@ -105,6 +108,7 @@ "resize-observer-polyfill": "^1.5.1", "roboto-fontface": "^0.10.0", "superstruct": "^0.6.1", + "svg-gauge": "^1.0.6", "unfetch": "^4.1.0", "vue": "^2.6.11", "vue2-daterange-picker": "^0.5.1", @@ -206,20 +210,7 @@ "@webcomponents/webcomponentsjs": "^2.2.10", "@polymer/polymer": "3.1.0", "lit-html": "1.2.1", - "lit-element": "2.3.1", - "@material/animation": "7.0.0-canary.d92d8c93e.0", - "@material/base": "7.0.0-canary.d92d8c93e.0", - "@material/checkbox": "7.0.0-canary.d92d8c93e.0", - "@material/density": "7.0.0-canary.d92d8c93e.0", - "@material/dom": "7.0.0-canary.d92d8c93e.0", - "@material/elevation": "7.0.0-canary.d92d8c93e.0", - "@material/feature-targeting": "7.0.0-canary.d92d8c93e.0", - "@material/ripple": "7.0.0-canary.d92d8c93e.0", - "@material/rtl": "7.0.0-canary.d92d8c93e.0", - "@material/shape": "7.0.0-canary.d92d8c93e.0", - "@material/theme": "7.0.0-canary.d92d8c93e.0", - "@material/touch-target": "7.0.0-canary.d92d8c93e.0", - "@material/typography": "7.0.0-canary.d92d8c93e.0" + "lit-element": "2.3.1" }, "main": "src/home-assistant.js", "husky": { diff --git a/setup.py b/setup.py index 5c4437c7f0..6db083fc4d 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="home-assistant-frontend", - version="20200702.1", + version="20200714.0", description="The Home Assistant frontend", url="https://github.com/home-assistant/home-assistant-polymer", author="The Home Assistant Authors", diff --git a/src/cards/ha-history_graph-card.js b/src/cards/ha-history_graph-card.js deleted file mode 100644 index 33e2472d82..0000000000 --- a/src/cards/ha-history_graph-card.js +++ /dev/null @@ -1,131 +0,0 @@ -import "@polymer/paper-card/paper-card"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { computeStateName } from "../common/entity/compute_state_name"; -import "../components/state-history-charts"; -import "../data/ha-state-history-data"; -import { EventsMixin } from "../mixins/events-mixin"; - -/* - * @appliesMixin EventsMixin - */ -class HaHistoryGraphCard extends EventsMixin(PolymerElement) { - static get template() { - return html` - - - -
[[computeTitle(stateObj)]]
-
- - -
-
- `; - } - - static get properties() { - return { - hass: Object, - stateObj: { - type: Object, - observer: "stateObjObserver", - }, - inDialog: { - type: Boolean, - value: false, - }, - stateHistory: Object, - stateHistoryLoading: Boolean, - cacheConfig: { - type: Object, - value: { - refresh: 0, - cacheKey: null, - hoursToShow: 24, - }, - }, - }; - } - - stateObjObserver(stateObj) { - if (!stateObj) return; - if ( - this.cacheConfig.cacheKey !== stateObj.entity_id || - this.cacheConfig.refresh !== (stateObj.attributes.refresh || 0) || - this.cacheConfig.hoursToShow !== (stateObj.attributes.hours_to_show || 24) - ) { - this.cacheConfig = { - refresh: stateObj.attributes.refresh || 0, - cacheKey: stateObj.entity_id, - hoursToShow: stateObj.attributes.hours_to_show || 24, - }; - } - } - - computeTitle(stateObj) { - return computeStateName(stateObj); - } - - computeContentClass(inDialog) { - return inDialog ? "" : "content"; - } - - computeHistoryEntities(stateObj) { - return stateObj.attributes.entity_id; - } - - computeElevation(inDialog) { - return inDialog ? 0 : 1; - } - - cardTapped(ev) { - const mq = window.matchMedia("(min-width: 610px) and (min-height: 550px)"); - if (mq.matches) { - ev.stopPropagation(); - this.fire("hass-more-info", { entityId: this.stateObj.entity_id }); - } - } -} -customElements.define("ha-history_graph-card", HaHistoryGraphCard); diff --git a/src/common/const.ts b/src/common/const.ts index b801ae37fc..dc2bf20595 100644 --- a/src/common/const.ts +++ b/src/common/const.ts @@ -22,7 +22,6 @@ export const DOMAINS_WITH_CARD = [ "timer", "vacuum", "water_heater", - "weblink", ]; /** Domains with separate more info dialog. */ @@ -36,7 +35,6 @@ export const DOMAINS_WITH_MORE_INFO = [ "cover", "fan", "group", - "history_graph", "humidifier", "input_datetime", "light", @@ -58,16 +56,10 @@ export const DOMAINS_HIDE_MORE_INFO = [ "input_select", "input_text", "scene", - "weblink", ]; /** Domains that should have the history hidden in the more info dialog. */ -export const DOMAINS_MORE_INFO_NO_HISTORY = [ - "camera", - "configurator", - "history_graph", - "scene", -]; +export const DOMAINS_MORE_INFO_NO_HISTORY = ["camera", "configurator", "scene"]; /** States that we consider "off". */ export const STATES_OFF = ["closed", "locked", "off"]; diff --git a/src/common/datetime/relative_time.ts b/src/common/datetime/relative_time.ts index 8eaafb4ad3..cc414b1e12 100644 --- a/src/common/datetime/relative_time.ts +++ b/src/common/datetime/relative_time.ts @@ -20,31 +20,24 @@ export default function relativeTime( let delta = (compareTime.getTime() - dateObj.getTime()) / 1000; const tense = delta >= 0 ? "past" : "future"; delta = Math.abs(delta); - - let timeDesc; + let roundedDelta = Math.round(delta); + let unit = "week"; for (let i = 0; i < tests.length; i++) { - if (delta < tests[i]) { - delta = Math.floor(delta); - timeDesc = localize( - `ui.components.relative_time.duration.${langKey[i]}`, - "count", - delta - ); + if (roundedDelta < tests[i]) { + unit = langKey[i]; break; } delta /= tests[i]; + roundedDelta = Math.round(delta); } - if (timeDesc === undefined) { - delta = Math.floor(delta); - timeDesc = localize( - "ui.components.relative_time.duration.week", - "count", - delta - ); - } + const timeDesc = localize( + `ui.components.relative_time.duration.${unit}`, + "count", + roundedDelta + ); return options.includeTense === false ? timeDesc diff --git a/src/common/dom/load_resource.ts b/src/common/dom/load_resource.ts index f5288b886d..670afddc9e 100644 --- a/src/common/dom/load_resource.ts +++ b/src/common/dom/load_resource.ts @@ -22,6 +22,8 @@ const _load = ( (element as HTMLScriptElement).async = true; if (type) { (element as HTMLScriptElement).type = type; + // https://github.com/home-assistant/frontend/pull/6328 + (element as HTMLScriptElement).crossOrigin = url.substr(0, 1) === "/" ? "use-credentials" : "anonymous"; } break; case "link": diff --git a/src/common/entity/battery_icon.ts b/src/common/entity/battery_icon.ts new file mode 100644 index 0000000000..26ffb3a3d8 --- /dev/null +++ b/src/common/entity/battery_icon.ts @@ -0,0 +1,28 @@ +/** Return an icon representing a battery state. */ +import { HassEntity } from "home-assistant-js-websocket"; + +export const batteryIcon = ( + batteryState: HassEntity, + batteryChargingState?: HassEntity +) => { + const battery = Number(batteryState.state); + const battery_charging = + batteryChargingState && batteryChargingState.state === "on"; + + if (isNaN(battery)) { + return "hass:battery-unknown"; + } + + var icon = "hass:battery"; + const batteryRound = Math.round(battery / 10) * 10; + if (battery_charging && battery > 10) { + icon += `-charging-${batteryRound}`; + } else if (battery_charging) { + icon += "-outline"; + } else if (battery <= 5) { + icon += "-alert"; + } else if (battery > 5 && battery < 95) { + icon += `-${batteryRound}`; + } + return icon; +}; diff --git a/src/common/entity/domain_icon.ts b/src/common/entity/domain_icon.ts index 650c4288e1..82b8795454 100644 --- a/src/common/entity/domain_icon.ts +++ b/src/common/entity/domain_icon.ts @@ -13,14 +13,13 @@ const fixedIcons = { calendar: "hass:calendar", camera: "hass:video", climate: "hass:thermostat", - configurator: "hass:settings", + configurator: "hass:cog", conversation: "hass:text-to-speech", counter: "hass:counter", device_tracker: "hass:account", fan: "hass:fan", google_assistant: "hass:google-assistant", group: "hass:google-circles-communities", - history_graph: "hass:chart-line", homeassistant: "hass:home-assistant", homekit: "hass:home-automation", humidifier: "hass:air-humidifier", @@ -29,7 +28,7 @@ const fixedIcons = { input_datetime: "hass:calendar-clock", input_number: "hass:ray-vertex", input_select: "hass:format-list-bulleted", - input_text: "hass:textbox", + input_text: "hass:form-textbox", light: "hass:lightbulb", mailbox: "hass:mailbox", notify: "hass:comment-alert", @@ -44,12 +43,11 @@ const fixedIcons = { simple_alarm: "hass:bell", sun: "hass:white-balance-sunny", switch: "hass:flash", - timer: "hass:timer", + timer: "hass:timer-outline", updater: "hass:cloud-upload", vacuum: "hass:robot-vacuum", water_heater: "hass:thermometer", weather: "hass:weather-cloudy", - weblink: "hass:open-in-new", zone: "hass:map-marker-radius", }; diff --git a/src/common/entity/sensor_icon.ts b/src/common/entity/sensor_icon.ts index 32d7436d3b..1ec97ff5d9 100644 --- a/src/common/entity/sensor_icon.ts +++ b/src/common/entity/sensor_icon.ts @@ -2,6 +2,7 @@ import { HassEntity } from "home-assistant-js-websocket"; import { UNIT_C, UNIT_F } from "../const"; import { domainIcon } from "./domain_icon"; +import { batteryIcon } from "./battery_icon"; const fixedDeviceClassIcons = { humidity: "hass:water-percent", @@ -19,29 +20,7 @@ export const sensorIcon = (state: HassEntity) => { return fixedDeviceClassIcons[dclass]; } if (dclass === "battery") { - const battery = Number(state.state); - if (isNaN(battery)) { - return "hass:battery-unknown"; - } - const batteryRound = Math.round(battery / 10) * 10; - if (batteryRound >= 100) { - return "hass:battery"; - } - if (batteryRound <= 0) { - return "hass:battery-alert"; - } - // Will return one of the following icons: (listed so extractor picks up) - // hass:battery-10 - // hass:battery-20 - // hass:battery-30 - // hass:battery-40 - // hass:battery-50 - // hass:battery-60 - // hass:battery-70 - // hass:battery-80 - // hass:battery-90 - // We obscure 'hass' in iconname so this name does not get picked up - return `${"hass"}:battery-${batteryRound}`; + return batteryIcon(state); } const unit = state.attributes.unit_of_measurement; diff --git a/src/common/search/search-input.ts b/src/common/search/search-input.ts index 0b819496f2..1d52dbcde6 100644 --- a/src/common/search/search-input.ts +++ b/src/common/search/search-input.ts @@ -26,6 +26,9 @@ class SearchInput extends LitElement { @property({ type: Boolean }) public autofocus = false; + @property({ type: String }) + public label?: string; + public focus() { this.shadowRoot!.querySelector("paper-input")!.focus(); } @@ -43,7 +46,7 @@ class SearchInput extends LitElement { { +export const slugify = (value: string, delimiter = "-") => { const a = "àáäâãåăæąçćčđďèéěėëêęğǵḧìíïîįłḿǹńňñòóöôœøṕŕřßşśšșťțùúüûǘůűūųẃẍÿýźžż·/_,:;"; - const b = - "aaaaaaaaacccddeeeeeeegghiiiiilmnnnnooooooprrsssssttuuuuuuuuuwxyyzzz------"; + const b = `aaaaaaaaacccddeeeeeeegghiiiiilmnnnnooooooprrsssssttuuuuuuuuuwxyyzzz${delimiter}${delimiter}${delimiter}${delimiter}${delimiter}${delimiter}`; const p = new RegExp(a.split("").join("|"), "g"); return value .toString() .toLowerCase() - .replace(/\s+/g, "-") // Replace spaces with - + .replace(/\s+/g, delimiter) // Replace spaces with delimiter .replace(p, (c) => b.charAt(a.indexOf(c))) // Replace special characters - .replace(/&/g, "-and-") // Replace & with 'and' + .replace(/&/g, `${delimiter}and${delimiter}`) // Replace & with 'and' .replace(/[^\w-]+/g, "") // Remove all non-word characters - .replace(/--+/g, "-") // Replace multiple - with single - - .replace(/^-+/, "") // Trim - from start of text - .replace(/-+$/, ""); // Trim - from end of text + .replace(/-/, delimiter) // Replace - with delimiter + .replace(new RegExp(`/${delimiter}${delimiter}+/`, "g"), delimiter) // Replace multiple delimiters with single delimiter + .replace(new RegExp(`/^${delimiter}+/`), "") // Trim delimiter from start of text + .replace(new RegExp(`/-+$/`), ""); // Trim delimiter from end of text }; diff --git a/src/components/data-table/ha-data-table.ts b/src/components/data-table/ha-data-table.ts index a3194ad23d..3ec2aba13a 100644 --- a/src/components/data-table/ha-data-table.ts +++ b/src/components/data-table/ha-data-table.ts @@ -69,6 +69,7 @@ export interface DataTableColumnData extends DataTableSortColumnData { width?: string; maxWidth?: string; grows?: boolean; + forceLTR?: boolean; } export interface DataTableRowData { @@ -352,6 +353,7 @@ export class HaDataTable extends LitElement { column.type === "icon-button" ), grows: Boolean(column.grows), + forceLTR: Boolean(column.forceLTR), })}" style=${column.width ? styleMap({ @@ -604,10 +606,8 @@ export class HaDataTable extends LitElement { padding-right: 0; width: 56px; } - [dir="rtl"] .mdc-data-table__header-cell--checkbox, - .mdc-data-table__header-cell--checkbox[dir="rtl"], - [dir="rtl"] .mdc-data-table__cell--checkbox, - .mdc-data-table__cell--checkbox[dir="rtl"] { + :host([dir="rtl"]) .mdc-data-table__header-cell--checkbox, + :host([dir="rtl"]) .mdc-data-table__cell--checkbox { /* @noflip */ padding-left: 0; /* @noflip */ @@ -641,8 +641,7 @@ export class HaDataTable extends LitElement { .mdc-data-table__cell--numeric { text-align: right; } - [dir="rtl"] .mdc-data-table__cell--numeric, - .mdc-data-table__cell--numeric[dir="rtl"] { + :host([dir="rtl"]) .mdc-data-table__cell--numeric { /* @noflip */ text-align: left; } @@ -660,18 +659,33 @@ export class HaDataTable extends LitElement { .mdc-data-table__header-cell.mdc-data-table__header-cell--icon { text-align: center; } + .mdc-data-table__header-cell.sortable.mdc-data-table__header-cell--icon:hover, .mdc-data-table__header-cell.sortable.mdc-data-table__header-cell--icon:not(.not-sorted) { text-align: left; } + :host([dir="rtl"]) + .mdc-data-table__header-cell.sortable.mdc-data-table__header-cell--icon:hover, + :host([dir="rtl"]) + .mdc-data-table__header-cell.sortable.mdc-data-table__header-cell--icon:not(.not-sorted) { + text-align: right; + } .mdc-data-table__cell--icon:first-child ha-icon { margin-left: 8px; } + :host([dir="rtl"]) .mdc-data-table__cell--icon:first-child ha-icon { + margin-left: auto; + margin-right: 8px; + } .mdc-data-table__cell--icon:first-child state-badge { margin-right: -8px; } + :host([dir="rtl"]) .mdc-data-table__cell--icon:first-child state-badge { + margin-right: auto; + margin-left: -8px; + } .mdc-data-table__header-cell--icon-button, .mdc-data-table__cell--icon-button { @@ -689,12 +703,22 @@ export class HaDataTable extends LitElement { width: 64px; padding-left: 16px; } + :host([dir="rtl"]) .mdc-data-table__header-cell--icon-button:first-child, + :host([dir="rtl"]) .mdc-data-table__cell--icon-button:first-child { + padding-left: auto; + padding-right: 16px; + } .mdc-data-table__header-cell--icon-button:last-child, .mdc-data-table__cell--icon-button:last-child { width: 64px; padding-right: 16px; } + :host([dir="rtl"]) .mdc-data-table__header-cell--icon-button:last-child, + :host([dir="rtl"]) .mdc-data-table__cell--icon-button:last-child { + padding-right: auto; + padding-left: 16px; + } .mdc-data-table__cell--icon-button a { color: var(--secondary-text-color); @@ -712,8 +736,7 @@ export class HaDataTable extends LitElement { text-transform: inherit; text-align: left; } - [dir="rtl"] .mdc-data-table__header-cell, - .mdc-data-table__header-cell[dir="rtl"] { + :host([dir="rtl"]) .mdc-data-table__header-cell { /* @noflip */ text-align: right; } @@ -725,11 +748,15 @@ export class HaDataTable extends LitElement { .mdc-data-table__header-cell--numeric.sortable:not(.not-sorted) { text-align: left; } - [dir="rtl"] .mdc-data-table__header-cell--numeric, - .mdc-data-table__header-cell--numeric[dir="rtl"] { + :host([dir="rtl"]) .mdc-data-table__header-cell--numeric { /* @noflip */ text-align: left; } + :host([dir="rtl"]) .mdc-data-table__header-cell--numeric.sortable:hover, + :host([dir="rtl"]) + .mdc-data-table__header-cell--numeric.sortable:not(.not-sorted) { + text-align: right; + } /* custom from here */ @@ -750,6 +777,10 @@ export class HaDataTable extends LitElement { position: relative; left: 0px; } + :host([dir="rtl"]) .mdc-data-table__header-cell span { + left: auto; + right: 0px; + } .mdc-data-table__header-cell.sortable { cursor: pointer; @@ -757,6 +788,9 @@ export class HaDataTable extends LitElement { .mdc-data-table__header-cell > * { transition: left 0.2s ease; } + :host([dir="rtl"]) .mdc-data-table__header-cell > * { + transition: right 0.2s ease; + } .mdc-data-table__header-cell ha-icon { top: -3px; position: absolute; @@ -764,14 +798,35 @@ export class HaDataTable extends LitElement { .mdc-data-table__header-cell.not-sorted ha-icon { left: -20px; } + :host([dir="rtl"]) .mdc-data-table__header-cell.not-sorted ha-icon { + right: -20px; + } .mdc-data-table__header-cell.sortable:not(.not-sorted) span, .mdc-data-table__header-cell.sortable.not-sorted:hover span { left: 24px; } + :host([dir="rtl"]) + .mdc-data-table__header-cell.sortable:not(.not-sorted) + span, + :host([dir="rtl"]) + .mdc-data-table__header-cell.sortable.not-sorted:hover + span { + left: auto; + right: 24px; + } .mdc-data-table__header-cell.sortable:not(.not-sorted) ha-icon, .mdc-data-table__header-cell.sortable:hover.not-sorted ha-icon { left: 12px; } + :host([dir="rtl"]) + .mdc-data-table__header-cell.sortable:not(.not-sorted) + ha-icon, + :host([dir="rtl"]) + .mdc-data-table__header-cell.sortable:hover.not-sorted + ha-icon { + left: auto; + right: 12px; + } .table-header { border-bottom: 1px solid rgba(var(--rgb-primary-text-color), 0.12); padding: 0 16px; @@ -802,6 +857,9 @@ export class HaDataTable extends LitElement { flex-grow: 1; flex-shrink: 1; } + .forceLTR { + direction: ltr; + } `; } } diff --git a/src/components/entity/ha-battery-icon.ts b/src/components/entity/ha-battery-icon.ts new file mode 100644 index 0000000000..1838f6af5e --- /dev/null +++ b/src/components/entity/ha-battery-icon.ts @@ -0,0 +1,18 @@ +import { batteryIcon } from "../../common/entity/battery_icon"; +import "../ha-icon"; +import { customElement, html, property, LitElement } from "lit-element"; + +@customElement("ha-battery-icon") +export class HaBatteryIcon extends LitElement { + @property() public batteryStateObj; + + @property() public batteryChargingStateObj; + + protected render() { + return html` + + `; + } +} diff --git a/src/components/entity/ha-state-label-badge.ts b/src/components/entity/ha-state-label-badge.ts index 1761191504..1c812a6065 100644 --- a/src/components/entity/ha-state-label-badge.ts +++ b/src/components/entity/ha-state-label-badge.ts @@ -155,7 +155,9 @@ export class HaStateLabelBadge extends LitElement { ? domainIcon(domain) : "hass:brightness-3"; case "timer": - return state.state === "active" ? "hass:timer" : "hass:timer-off"; + return state.state === "active" + ? "hass:timer-outline" + : "hass:timer-off-outline"; default: return null; } diff --git a/src/components/ha-card.ts b/src/components/ha-card.ts index 9d48bca2cb..8b2cbd8292 100644 --- a/src/components/ha-card.ts +++ b/src/components/ha-card.ts @@ -19,7 +19,7 @@ class HaCard extends LitElement { :host { background: var( --ha-card-background, - var(--paper-card-background-color, white) + var(--card-background-color, white) ); border-radius: var(--ha-card-border-radius, 4px); box-shadow: var( diff --git a/src/components/ha-cover-controls.js b/src/components/ha-cover-controls.js index 3cf69923d3..1849439d4a 100644 --- a/src/components/ha-cover-controls.js +++ b/src/components/ha-cover-controls.js @@ -65,6 +65,7 @@ class HaCoverControls extends PolymerElement { computeOpenIcon(stateObj) { switch (stateObj.attributes.device_class) { case "awning": + case "door": case "gate": return "hass:arrow-expand-horizontal"; default: @@ -75,6 +76,7 @@ class HaCoverControls extends PolymerElement { computeCloseIcon(stateObj) { switch (stateObj.attributes.device_class) { case "awning": + case "door": case "gate": return "hass:arrow-collapse-horizontal"; default: diff --git a/src/components/ha-dialog.ts b/src/components/ha-dialog.ts index 6a6d35a031..03472c6495 100644 --- a/src/components/ha-dialog.ts +++ b/src/components/ha-dialog.ts @@ -5,6 +5,7 @@ import "./ha-icon-button"; import { css, CSSResult, customElement, html } from "lit-element"; import type { Constructor, HomeAssistant } from "../types"; import { mdiClose } from "@mdi/js"; +import { computeRTL } from "../common/util/compute_rtl"; const MwcDialog = customElements.get("mwc-dialog") as Constructor; @@ -13,6 +14,7 @@ export const createCloseHeading = (hass: HomeAssistant, title: string) => html` @@ -21,6 +23,12 @@ export const createCloseHeading = (hass: HomeAssistant, title: string) => html` @customElement("ha-dialog") export class HaDialog extends MwcDialog { + protected renderHeading() { + return html` + ${super.renderHeading()} + `; + } + protected static get styles(): CSSResult[] { return [ style, @@ -38,16 +46,25 @@ export class HaDialog extends MwcDialog { display: block; height: 20px; } - .mdc-dialog__content { + .mdc-dialog .mdc-dialog__content { + position: var(--dialog-content-position, relative); padding: var(--dialog-content-padding, 20px 24px); } + .mdc-dialog .mdc-dialog__surface { + position: var(--dialog-content-position, relative); + min-height: var(--mdc-dialog-min-height, auto); + } .header_button { position: absolute; right: 16px; - top: 12px; + top: 10px; text-decoration: none; color: inherit; } + mwc-icon-button[rtl].header_button { + right: auto; + left: 16px; + } `, ]; } diff --git a/src/components/ha-form/ha-form-constant.ts b/src/components/ha-form/ha-form-constant.ts new file mode 100644 index 0000000000..9ce3a02437 --- /dev/null +++ b/src/components/ha-form/ha-form-constant.ts @@ -0,0 +1,47 @@ +import { + customElement, + html, + LitElement, + property, + TemplateResult, + CSSResult, + css, + PropertyValues, +} from "lit-element"; +import { HaFormElement, HaFormConstantSchema } from "./ha-form"; +import { fireEvent } from "../../common/dom/fire_event"; + +@customElement("ha-form-constant") +export class HaFormConstant extends LitElement implements HaFormElement { + @property({ attribute: false }) public schema!: HaFormConstantSchema; + + @property() public label!: string; + + protected firstUpdated(changedProps: PropertyValues) { + super.firstUpdated(changedProps); + fireEvent(this, "value-changed", { + value: this.schema.value, + }); + } + + protected render(): TemplateResult { + return html`${this.label}: ${this.schema.value}`; + } + + static get styles(): CSSResult { + return css` + :host { + display: block; + } + .label { + font-weight: 500; + } + `; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-form-constant": HaFormConstant; + } +} diff --git a/src/components/ha-form/ha-form-integer.ts b/src/components/ha-form/ha-form-integer.ts index 0e5674edfb..e00aa40a0e 100644 --- a/src/components/ha-form/ha-form-integer.ts +++ b/src/components/ha-form/ha-form-integer.ts @@ -58,7 +58,9 @@ export class HaFormInteger extends LitElement implements HaFormElement { .value=${this._value} .min=${this.schema.valueMin} .max=${this.schema.valueMax} - .disabled=${this.data === undefined} + .disabled=${this.data === undefined && + this.schema.optional && + this.schema.default === undefined} @value-changed=${this._valueChanged} >
diff --git a/src/components/ha-form/ha-form.ts b/src/components/ha-form/ha-form.ts index be6b4eb1da..5f57df1bc1 100644 --- a/src/components/ha-form/ha-form.ts +++ b/src/components/ha-form/ha-form.ts @@ -15,8 +15,10 @@ import "./ha-form-multi_select"; import "./ha-form-positive_time_period_dict"; import "./ha-form-select"; import "./ha-form-string"; +import "./ha-form-constant"; export type HaFormSchema = + | HaFormConstantSchema | HaFormStringSchema | HaFormIntegerSchema | HaFormFloatSchema @@ -33,6 +35,11 @@ export interface HaFormBaseSchema { description?: { suffix?: string; suggested_value?: HaFormData }; } +export interface HaFormConstantSchema extends HaFormBaseSchema { + type: "constant"; + value: string; +} + export interface HaFormIntegerSchema extends HaFormBaseSchema { type: "integer"; default?: HaFormIntegerData; diff --git a/src/components/ha-formfield.ts b/src/components/ha-formfield.ts index 45462d0689..6d0a5b8ba0 100644 --- a/src/components/ha-formfield.ts +++ b/src/components/ha-formfield.ts @@ -14,12 +14,12 @@ export class HaFormfield extends MwcFormfield { return [ style, css` - ::slotted(ha-switch) { + :host(:not([alignEnd])) ::slotted(ha-switch) { margin-right: 10px; } - [dir="rtl"] ::slotted(ha-switch), - ::slotted(ha-switch)[dir="rtl"] { + :host([dir="rtl"]:not([alignEnd])) ::slotted(ha-switch) { margin-left: 10px; + margin-right: auto; } `, ]; diff --git a/src/components/ha-header-bar.ts b/src/components/ha-header-bar.ts new file mode 100644 index 0000000000..946c1979de --- /dev/null +++ b/src/components/ha-header-bar.ts @@ -0,0 +1,47 @@ +import { customElement, LitElement, html, unsafeCSS, css } from "lit-element"; +// @ts-ignore +import topAppBarStyles from "@material/top-app-bar/dist/mdc.top-app-bar.min.css"; + +@customElement("ha-header-bar") +export class HaHeaderBar extends LitElement { + protected render() { + return html`
+
+ + +
+
`; + } + + static get styles() { + return [ + unsafeCSS(topAppBarStyles), + css` + .mdc-top-app-bar { + position: static; + color: var(--mdc-theme-on-primary, #fff); + } + `, + ]; + } +} + +declare global { + interface HTMLElementTagNameMap { + "ha-header-bar": HaHeaderBar; + } +} diff --git a/src/components/ha-icon.ts b/src/components/ha-icon.ts index 7a8eee1896..c89b1d2f51 100644 --- a/src/components/ha-icon.ts +++ b/src/components/ha-icon.ts @@ -21,6 +21,205 @@ import { writeCache, } from "../data/iconsets"; import { debounce } from "../common/util/debounce"; +import { fireEvent } from "../common/dom/fire_event"; + +const mdiRenameMapping = { + "account-badge": "badge-account", + "account-badge-alert": "badge-account-alert", + "account-badge-alert-outline": "badge-account-alert-outline", + "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-mutiple", + 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", + 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", +}; + +const mdiRemovedIcons = new Set([ + "accusoft", + "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", + "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 = {}; @@ -65,7 +264,9 @@ export class HaIcon extends LitElement { if (!this.icon) { return; } - const [iconPrefix, iconName] = this.icon.split(":", 2); + const [iconPrefix, origIconName] = this.icon.split(":", 2); + + let iconName = origIconName; if (!iconPrefix || !iconName) { return; @@ -85,6 +286,25 @@ export class HaIcon extends LitElement { this._legacy = false; + if (iconName in mdiRenameMapping) { + iconName = mdiRenameMapping[iconName]; + const message = `Icon ${iconPrefix}:${origIconName} was renamed to ${iconPrefix}:${iconName}, please change your config, it will be removed in version 0.115.`; + // eslint-disable-next-line no-console + console.warn(message); + fireEvent(this, "write_log", { + level: "warning", + message, + }); + } 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 + console.warn(message); + fireEvent(this, "write_log", { + level: "warning", + message, + }); + } + if (iconName in cachedIcons) { this._path = cachedIcons[iconName]; return; diff --git a/src/components/ha-labeled-slider.js b/src/components/ha-labeled-slider.js index bbe09e6829..9939db3d1b 100644 --- a/src/components/ha-labeled-slider.js +++ b/src/components/ha-labeled-slider.js @@ -10,6 +10,7 @@ class HaLabeledSlider extends PolymerElement { diff --git a/src/components/ha-related-items.ts b/src/components/ha-related-items.ts index 3e4df6d4e5..e056361c53 100644 --- a/src/components/ha-related-items.ts +++ b/src/components/ha-related-items.ts @@ -96,7 +96,6 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { ${this.hass.localize(`component.${entry.domain}.title`)}: ${entry.title} @@ -116,10 +115,7 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) {

${this.hass.localize("ui.components.related-items.device")}:

-
+ ${device.name_by_user || device.name} `; @@ -137,7 +133,9 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) {

${this.hass.localize("ui.components.related-items.area")}:

- ${area.name} + + ${area.name} + `; }) : ""} @@ -290,10 +288,6 @@ export class HaRelatedItems extends SubscribeMixin(LitElement) { fireEvent(this, "hass-more-info", { entityId }); } - private _close() { - fireEvent(this, "close-dialog"); - } - static get styles(): CSSResult { return css` a { diff --git a/src/components/ha-sidebar.ts b/src/components/ha-sidebar.ts index 5b02f1896c..549b77c19f 100644 --- a/src/components/ha-sidebar.ts +++ b/src/components/ha-sidebar.ts @@ -1,7 +1,7 @@ import "@material/mwc-icon-button"; import { mdiBell, - mdiCellphoneSettingsVariant, + mdiCellphoneCog, mdiMenuOpen, mdiMenu, mdiViewDashboard, @@ -219,7 +219,7 @@ class HaSidebar extends LitElement { ${hass.localize("ui.sidebar.external_app_configuration")} diff --git a/src/data/automation.ts b/src/data/automation.ts index cf4ce18ebf..f495c59b48 100644 --- a/src/data/automation.ts +++ b/src/data/automation.ts @@ -20,6 +20,8 @@ export interface AutomationConfig { trigger: Trigger[]; condition?: Condition[]; action: Action[]; + mode?: "single" | "restart" | "queued" | "parallel"; + max?: number; } export interface ForDict { diff --git a/src/data/entity.ts b/src/data/entity.ts index 80f4e7c820..f8dc2efe42 100644 --- a/src/data/entity.ts +++ b/src/data/entity.ts @@ -17,7 +17,6 @@ export const ENTITY_COMPONENT_DOMAINS = [ "fan", "geo_location", "group", - "history_graph", "image_processing", "input_boolean", "input_datetime", diff --git a/src/data/entity_registry.ts b/src/data/entity_registry.ts index 5abaa9084b..a5d897ca8b 100644 --- a/src/data/entity_registry.ts +++ b/src/data/entity_registry.ts @@ -37,6 +37,17 @@ export const findBatteryEntity = ( hass.states[entity.entity_id].attributes.device_class === "battery" ); +export const findBatteryChargingEntity = ( + hass: HomeAssistant, + entities: EntityRegistryEntry[] +): EntityRegistryEntry | undefined => + entities.find( + (entity) => + hass.states[entity.entity_id] && + hass.states[entity.entity_id].attributes.device_class === + "battery_charging" + ); + export const computeEntityRegistryName = ( hass: HomeAssistant, entry: EntityRegistryEntry diff --git a/src/data/ha-state-history-data.js b/src/data/ha-state-history-data.js deleted file mode 100644 index bcce4509f8..0000000000 --- a/src/data/ha-state-history-data.js +++ /dev/null @@ -1,178 +0,0 @@ -import { timeOut } from "@polymer/polymer/lib/utils/async"; -import { Debouncer } from "@polymer/polymer/lib/utils/debounce"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import LocalizeMixin from "../mixins/localize-mixin"; -import { getRecent, getRecentWithCache } from "./cached-history"; -import { computeHistory, fetchDate } from "./history"; - -/* - * @appliesMixin LocalizeMixin - */ -class HaStateHistoryData extends LocalizeMixin(PolymerElement) { - static get properties() { - return { - hass: { - type: Object, - observer: "hassChanged", - }, - - filterType: String, - - cacheConfig: Object, - - startTime: Date, - endTime: Date, - - entityId: String, - - isLoading: { - type: Boolean, - value: true, - readOnly: true, - notify: true, - }, - - data: { - type: Object, - value: null, - readOnly: true, - notify: true, - }, - }; - } - - static get observers() { - return [ - "filterChangedDebouncer(filterType, entityId, startTime, endTime, cacheConfig, localize)", - ]; - } - - connectedCallback() { - super.connectedCallback(); - this.filterChangedDebouncer( - this.filterType, - this.entityId, - this.startTime, - this.endTime, - this.cacheConfig, - this.localize - ); - } - - disconnectedCallback() { - if (this._refreshTimeoutId) { - window.clearInterval(this._refreshTimeoutId); - this._refreshTimeoutId = null; - } - super.disconnectedCallback(); - } - - hassChanged(newHass, oldHass) { - if (!oldHass && !this._madeFirstCall) { - this.filterChangedDebouncer( - this.filterType, - this.entityId, - this.startTime, - this.endTime, - this.cacheConfig, - this.localize - ); - } - } - - filterChangedDebouncer(...args) { - this._debounceFilterChanged = Debouncer.debounce( - this._debounceFilterChanged, - timeOut.after(0), - () => { - this.filterChanged(...args); - } - ); - } - - filterChanged( - filterType, - entityId, - startTime, - endTime, - cacheConfig, - localize - ) { - if (!this.hass) { - return; - } - if (cacheConfig && !cacheConfig.cacheKey) { - return; - } - if (!localize) { - return; - } - this._madeFirstCall = true; - const language = this.hass.language; - let data; - - if (filterType === "date") { - if (!startTime || !endTime) return; - - data = fetchDate(this.hass, startTime, endTime).then((dateHistory) => - computeHistory(this.hass, dateHistory, localize, language) - ); - } else if (filterType === "recent-entity") { - if (!entityId) return; - if (cacheConfig) { - data = this.getRecentWithCacheRefresh( - entityId, - cacheConfig, - localize, - language - ); - } else { - data = getRecent( - this.hass, - entityId, - startTime, - endTime, - localize, - language - ); - } - } else { - return; - } - this._setIsLoading(true); - - data.then((stateHistory) => { - this._setData(stateHistory); - this._setIsLoading(false); - }); - } - - getRecentWithCacheRefresh(entityId, cacheConfig, localize, language) { - if (this._refreshTimeoutId) { - window.clearInterval(this._refreshTimeoutId); - this._refreshTimeoutId = null; - } - if (cacheConfig.refresh) { - this._refreshTimeoutId = window.setInterval(() => { - getRecentWithCache( - this.hass, - entityId, - cacheConfig, - localize, - language - ).then((stateHistory) => { - this._setData({ ...stateHistory }); - }); - }, cacheConfig.refresh * 1000); - } - return getRecentWithCache( - this.hass, - entityId, - cacheConfig, - localize, - language - ); - } -} -customElements.define("ha-state-history-data", HaStateHistoryData); diff --git a/src/data/scene.ts b/src/data/scene.ts index c0245a4f24..6b029412c4 100644 --- a/src/data/scene.ts +++ b/src/data/scene.ts @@ -40,6 +40,7 @@ export interface SceneEntity extends HassEntityBase { export interface SceneConfig { name: string; + icon?: string; entities: SceneEntities; } diff --git a/src/data/script.ts b/src/data/script.ts index 5f027ce413..2a2cf1912c 100644 --- a/src/data/script.ts +++ b/src/data/script.ts @@ -7,15 +7,24 @@ import { navigate } from "../common/navigate"; import { HomeAssistant } from "../types"; import { Condition } from "./automation"; +export const MODES = ["single", "restart", "queued", "parallel"]; +export const MODES_MAX = ["queued", "parallel"]; + export interface ScriptEntity extends HassEntityBase { attributes: HassEntityAttributeBase & { last_triggered: string; + mode: "single" | "restart" | "queued" | "parallel"; + current?: number; + max?: number; }; } export interface ScriptConfig { alias: string; sequence: Action[]; + icon?: string; + mode?: "single" | "restart" | "queued" | "parallel"; + max?: number; } export interface EventAction { @@ -64,6 +73,20 @@ export const triggerScript = ( variables?: {} ) => hass.callService("script", computeObjectId(entityId), variables); +export const canExcecute = (state: ScriptEntity) => { + if (state.state === "off") { + return true; + } + if ( + state.state === "on" && + MODES_MAX.includes(state.attributes.mode) && + state.attributes.current! < state.attributes.max! + ) { + return true; + } + return false; +}; + export const deleteScript = (hass: HomeAssistant, objectId: string) => hass.callApi("DELETE", `config/script/config/${objectId}`); diff --git a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts index cb2f95a287..915eb18556 100644 --- a/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts +++ b/src/dialogs/config-entry-system-options/dialog-config-entry-system-options.ts @@ -22,6 +22,7 @@ import type { PolymerChangedEvent } from "../../polymer-types"; import { haStyleDialog } from "../../resources/styles"; import type { HomeAssistant } from "../../types"; import { ConfigEntrySystemOptionsDialogParams } from "./show-dialog-config-entry-system-options"; +import { computeRTLDirection } from "../../common/util/compute_rtl"; @customElement("dialog-config-entry-system-options") class DialogConfigEntrySystemOptions extends LitElement { @@ -99,6 +100,7 @@ class DialogConfigEntrySystemOptions extends LitElement { ) || this._params.entry.domain )}

`} + .dir=${computeRTLDirection(this.hass)} > ${this._step === null ? // Show handler picker @@ -295,16 +309,6 @@ class DataEntryFlowDialog extends LitElement { } } - private _close(): void { - if (this._step) { - this._flowDone(); - } else if (this._step === null) { - // Flow aborted during picking flow - this._step = undefined; - this._params = undefined; - } - } - static get styles(): CSSResultArray { return [ haStyleDialog, @@ -318,6 +322,10 @@ class DataEntryFlowDialog extends LitElement { top: 0; right: 0; } + ha-icon-button[rtl] { + right: auto; + left: 0; + } `, ]; } diff --git a/src/dialogs/config-flow/step-flow-pick-handler.ts b/src/dialogs/config-flow/step-flow-pick-handler.ts index 3edd9cc581..930b067b17 100644 --- a/src/dialogs/config-flow/step-flow-pick-handler.ts +++ b/src/dialogs/config-flow/step-flow-pick-handler.ts @@ -81,6 +81,7 @@ class StepFlowPickHandler extends LitElement { autofocus .filter=${this.filter} @value-changed=${this._filterChanged} + .label=${this.hass.localize("ui.panel.config.integrations.search")} >
{ + private _dismiss(): void { if (this._params!.cancel) { this._params!.cancel(); } - this._params = undefined; + this._close(); } private _handleKeyUp(ev: KeyboardEvent) { @@ -113,15 +125,16 @@ class DialogBox extends LitElement { } } - private async _confirm(): Promise { + private _confirm(): void { if (this._params!.confirm) { this._params!.confirm(this._value); } - this._dismiss(); + this._close(); } private _close(): void { this._params = undefined; + fireEvent(this, "dialog-closed", { dialog: this.localName }); } static get styles(): CSSResult[] { diff --git a/src/dialogs/ha-more-info-dialog.js b/src/dialogs/ha-more-info-dialog.js deleted file mode 100644 index 1f80d19aec..0000000000 --- a/src/dialogs/ha-more-info-dialog.js +++ /dev/null @@ -1,155 +0,0 @@ -import "@polymer/paper-dialog-behavior/paper-dialog-shared-styles"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { computeStateDomain } from "../common/entity/compute_state_domain"; -import DialogMixin from "../mixins/dialog-mixin"; -import "../styles/polymer-ha-style-dialog"; -import "./more-info/more-info-controls"; - -/* - * @appliesMixin DialogMixin - */ -class HaMoreInfoDialog extends DialogMixin(PolymerElement) { - static get template() { - return html` - - - - `; - } - - static get properties() { - return { - hass: Object, - stateObj: { - type: Object, - computed: "_computeStateObj(hass)", - observer: "_stateObjChanged", - }, - - large: { - type: Boolean, - reflectToAttribute: true, - observer: "_largeChanged", - }, - - dataDomain: { - computed: "_computeDomain(stateObj)", - reflectToAttribute: true, - }, - }; - } - - static get observers() { - return ["_dialogOpenChanged(opened)"]; - } - - _dialogElement() { - return this; - } - - _computeDomain(stateObj) { - return stateObj ? computeStateDomain(stateObj) : ""; - } - - _computeStateObj(hass) { - return hass.states[hass.moreInfoEntityId] || null; - } - - async _stateObjChanged(newVal) { - if (!newVal) { - this.setProperties({ - opened: false, - large: false, - }); - return; - } - - requestAnimationFrame(() => - requestAnimationFrame(() => { - // allow dialog to render content before showing it so it will be - // positioned correctly. - this.opened = true; - }) - ); - } - - _dialogOpenChanged(newVal) { - if (!newVal && this.stateObj) { - this.fire("hass-more-info", { entityId: null }); - } - } - - _equals(a, b) { - return a === b; - } - - _largeChanged() { - this.notifyResize(); - } -} -customElements.define("ha-more-info-dialog", HaMoreInfoDialog); diff --git a/src/dialogs/make-dialog-manager.ts b/src/dialogs/make-dialog-manager.ts index 02af7d4e96..5baf4d3e65 100644 --- a/src/dialogs/make-dialog-manager.ts +++ b/src/dialogs/make-dialog-manager.ts @@ -6,15 +6,18 @@ declare global { interface HASSDomEvents { "show-dialog": ShowDialogParams; "close-dialog": undefined; + "dialog-closed": DialogClosedParams; } // for add event listener interface HTMLElementEventMap { "show-dialog": HASSDomEvent>; + "dialog-closed": HASSDomEvent; } } interface HassDialog extends HTMLElement { showDialog(params: T); + closeDialog?: () => boolean | void; } interface ShowDialogParams { @@ -23,16 +26,30 @@ interface ShowDialogParams { dialogParams: T; } +export interface DialogClosedParams { + dialog: string; +} + +export interface DialogState { + dialog: string; + open: boolean; + oldState: null | DialogState; + dialogParams?: unknown; +} + const LOADED = {}; export const showDialog = async ( element: HTMLElement & ProvideHassElement, root: ShadowRoot | HTMLElement, - dialogImport: () => Promise, dialogTag: string, - dialogParams: unknown + dialogParams: unknown, + dialogImport?: () => Promise ) => { if (!(dialogTag in LOADED)) { + if (!dialogImport) { + return; + } LOADED[dialogTag] = dialogImport().then(() => { const dialogEl = document.createElement(dialogTag) as HassDialog; element.provideHass(dialogEl); @@ -40,19 +57,55 @@ export const showDialog = async ( return dialogEl; }); } + + history.replaceState( + { + dialog: dialogTag, + open: false, + oldState: + history.state?.open && history.state?.dialog !== dialogTag + ? history.state + : null, + }, + "" + ); + try { + history.pushState( + { dialog: dialogTag, dialogParams: dialogParams, open: true }, + "" + ); + } catch (err) { + // dialogParams could not be cloned, probably contains callback + history.pushState( + { dialog: dialogTag, dialogParams: null, open: true }, + "" + ); + } + const dialogElement = await LOADED[dialogTag]; dialogElement.showDialog(dialogParams); }; +export const closeDialog = async (dialogTag: string): Promise => { + if (!(dialogTag in LOADED)) { + return true; + } + const dialogElement = await LOADED[dialogTag]; + if (dialogElement.closeDialog) { + return dialogElement.closeDialog() !== false; + } + return true; +}; + export const makeDialogManager = ( element: HTMLElement & ProvideHassElement, root: ShadowRoot | HTMLElement ) => { element.addEventListener( "show-dialog", - async (e: HASSDomEvent>) => { + (e: HASSDomEvent>) => { const { dialogTag, dialogImport, dialogParams } = e.detail; - showDialog(element, root, dialogImport, dialogTag, dialogParams); + showDialog(element, root, dialogTag, dialogParams, dialogImport); } ); }; diff --git a/src/dialogs/more-info/controls/more-info-history_graph.js b/src/dialogs/more-info/controls/more-info-history_graph.js deleted file mode 100644 index febd00b62f..0000000000 --- a/src/dialogs/more-info/controls/more-info-history_graph.js +++ /dev/null @@ -1,33 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import "../../../cards/ha-history_graph-card"; -import "../../../components/ha-attributes"; - -class MoreInfoHistoryGraph extends PolymerElement { - static get template() { - return html` - - - - - `; - } - - static get properties() { - return { - hass: Object, - stateObj: Object, - }; - } -} -customElements.define("more-info-history_graph", MoreInfoHistoryGraph); diff --git a/src/dialogs/more-info/controls/more-info-light.js b/src/dialogs/more-info/controls/more-info-light.js index 83a0abf115..f961c9c6a8 100644 --- a/src/dialogs/more-info/controls/more-info-light.js +++ b/src/dialogs/more-info/controls/more-info-light.js @@ -28,6 +28,12 @@ class MoreInfoLight extends LocalizeMixin(EventsMixin(PolymerElement)) { return html` - - - -
- [[_computeStateName(stateObj)]] -
- - -
- - - - - - - - `; - } - - static get properties() { - return { - hass: Object, - - stateObj: { - type: Object, - observer: "_stateObjChanged", - }, - - dialogElement: Object, - registryEntry: Object, - - domain: { - type: String, - reflectToAttribute: true, - computed: "_computeDomain(stateObj)", - }, - - _stateHistory: Object, - _stateHistoryLoading: Boolean, - - large: { - type: Boolean, - value: false, - notify: true, - }, - - _cacheConfig: { - type: Object, - value: { - refresh: 60, - cacheKey: null, - hoursToShow: 24, - }, - }, - rtl: { - type: Boolean, - reflectToAttribute: true, - computed: "_computeRTL(hass)", - }, - }; - } - - enlarge() { - this.large = !this.large; - } - - _computeShowStateInfo(stateObj) { - return !stateObj || !DOMAINS_NO_INFO.includes(computeStateDomain(stateObj)); - } - - _computeShowRestored(stateObj) { - return stateObj && stateObj.attributes.restored; - } - - _computeShowHistoryComponent(hass, stateObj) { - return ( - hass && - stateObj && - isComponentLoaded(hass, "history") && - !DOMAINS_MORE_INFO_NO_HISTORY.includes(computeStateDomain(stateObj)) - ); - } - - _computeDomain(stateObj) { - return stateObj ? computeStateDomain(stateObj) : ""; - } - - _computeStateName(stateObj) { - return stateObj ? computeStateName(stateObj) : ""; - } - - _computeEdit(hass, stateObj) { - const domain = this._computeDomain(stateObj); - return ( - stateObj && - hass.user.is_admin && - ((EDITABLE_DOMAINS_WITH_ID.includes(domain) && stateObj.attributes.id) || - EDITABLE_DOMAINS.includes(domain)) - ); - } - - _stateObjChanged(newVal) { - if (!newVal) { - return; - } - - if (this._cacheConfig.cacheKey !== `more_info.${newVal.entity_id}`) { - this._cacheConfig = { - ...this._cacheConfig, - cacheKey: `more_info.${newVal.entity_id}`, - }; - } - } - - _removeEntity() { - showConfirmationDialog(this, { - title: this.localize( - "ui.dialogs.more_info_control.restored.confirm_remove_title" - ), - text: this.localize( - "ui.dialogs.more_info_control.restored.confirm_remove_text" - ), - confirmText: this.localize("ui.common.yes"), - dismissText: this.localize("ui.common.no"), - confirm: () => - removeEntityRegistryEntry(this.hass, this.stateObj.entity_id), - }); - } - - _gotoSettings() { - showEntityEditorDialog(this, { - entity_id: this.stateObj.entity_id, - }); - this.fire("hass-more-info", { entityId: null }); - } - - _gotoEdit() { - const domain = this._computeDomain(this.stateObj); - navigate( - this, - `/config/${domain}/edit/${ - EDITABLE_DOMAINS_WITH_ID.includes(domain) - ? this.stateObj.attributes.id - : this.stateObj.entity_id - }` - ); - this.fire("hass-more-info", { entityId: null }); - } - - _computeRTL(hass) { - return computeRTL(hass); - } -} -customElements.define("more-info-controls", MoreInfoControls); diff --git a/src/entrypoints/app.ts b/src/entrypoints/app.ts index 934affb498..bb4b54b6e7 100644 --- a/src/entrypoints/app.ts +++ b/src/entrypoints/app.ts @@ -5,8 +5,6 @@ import "../layouts/home-assistant"; import "../util/legacy-support"; setPassiveTouchGestures(true); -/* LastPass createElement workaround. See #428 */ -document.createElement = Document.prototype.createElement; (window as any).frontendVersion = __VERSION__; diff --git a/src/fake_data/demo_panels.ts b/src/fake_data/demo_panels.ts index 000076eef1..71aa6ac0ff 100644 --- a/src/fake_data/demo_panels.ts +++ b/src/fake_data/demo_panels.ts @@ -74,7 +74,7 @@ export const demoPanels: Panels = { }, // config: { // component_name: "config", - // icon: "hass:settings", + // icon: "hass:cog", // title: "config", // config: null, // url_path: "config", diff --git a/src/layouts/hass-error-screen.ts b/src/layouts/hass-error-screen.ts index f8838eff85..eab453b29e 100644 --- a/src/layouts/hass-error-screen.ts +++ b/src/layouts/hass-error-screen.ts @@ -12,29 +12,56 @@ import "./hass-subpage"; @customElement("hass-error-screen") class HassErrorScreen extends LitElement { - @property() - public error?: string; + @property({ type: Boolean }) public toolbar = true; + + @property() public error?: string; protected render(): TemplateResult { return html` - -
-

${this.error}

- - go back - -
-
+ ${this.toolbar + ? html`
+ +
` + : ""} +
+

${this.error}

+ + go back + +
`; } - private _backTapped(): void { + private _handleBack(): void { history.back(); } static get styles(): CSSResultArray { return [ css` + :host { + display: block; + height: 100%; + background-color: var(--primary-background-color); + } + .toolbar { + display: flex; + align-items: center; + font-size: 20px; + height: 65px; + padding: 0 16px; + pointer-events: none; + background-color: var(--app-header-background-color); + font-weight: 400; + color: var(--app-header-text-color, white); + border-bottom: var(--app-header-border-bottom, none); + box-sizing: border-box; + } + ha-icon-button-arrow-prev { + pointer-events: auto; + } .content { height: calc(100% - 64px); display: flex; diff --git a/src/layouts/hass-loading-screen.ts b/src/layouts/hass-loading-screen.ts index 83021927d9..c8cdf24d97 100644 --- a/src/layouts/hass-loading-screen.ts +++ b/src/layouts/hass-loading-screen.ts @@ -16,7 +16,10 @@ import { HomeAssistant } from "../types"; @customElement("hass-loading-screen") class HassLoadingScreen extends LitElement { - @property({ type: Boolean }) public rootnav? = false; + @property({ type: Boolean, attribute: "no-toolbar" }) + public noToolbar = false; + + @property({ type: Boolean }) public rootnav = false; @property() public hass?: HomeAssistant; @@ -24,20 +27,22 @@ class HassLoadingScreen extends LitElement { protected render(): TemplateResult { return html` - - ${this.rootnav - ? html` - - ` - : html` - - `} - + ${this.noToolbar + ? "" + : html`
+ ${this.rootnav + ? html` + + ` + : html` + + `} +
`}
@@ -57,6 +62,23 @@ class HassLoadingScreen extends LitElement { height: 100%; background-color: var(--primary-background-color); } + .toolbar { + display: flex; + align-items: center; + font-size: 20px; + height: 65px; + padding: 0 16px; + pointer-events: none; + background-color: var(--app-header-background-color); + font-weight: 400; + color: var(--app-header-text-color, white); + border-bottom: var(--app-header-border-bottom, none); + box-sizing: border-box; + } + ha-menu-button, + ha-icon-button-arrow-prev { + pointer-events: auto; + } .content { height: calc(100% - 64px); display: flex; diff --git a/src/layouts/hass-router-page.ts b/src/layouts/hass-router-page.ts index d463b86ca6..450e331a73 100644 --- a/src/layouts/hass-router-page.ts +++ b/src/layouts/hass-router-page.ts @@ -169,9 +169,9 @@ export class HassRouterPage extends UpdatingElement { } // Show error screen - const errorEl = document.createElement("hass-error-screen"); - errorEl.error = `Error while loading page ${newPage}.`; - this.appendChild(errorEl); + this.appendChild( + this.createErrorScreen(`Error while loading page ${newPage}.`) + ); }); // If we don't show loading screen, just show the panel. @@ -252,6 +252,12 @@ export class HassRouterPage extends UpdatingElement { return document.createElement("hass-loading-screen"); } + protected createErrorScreen(error: string) { + const errorEl = document.createElement("hass-error-screen"); + errorEl.error = error; + return errorEl; + } + /** * Rebuild the current panel. * diff --git a/src/layouts/hass-subpage.ts b/src/layouts/hass-subpage.ts index 4eb7a3153e..2039b7654f 100644 --- a/src/layouts/hass-subpage.ts +++ b/src/layouts/hass-subpage.ts @@ -36,7 +36,7 @@ class HassSubpage extends LitElement { class=${classMap({ hidden: !this.showBackButton })} > -
${this.header}
+
${this.header}
@@ -74,7 +74,6 @@ class HassSubpage extends LitElement { box-sizing: border-box; } - ha-menu-button, ha-icon-button-arrow-prev, ::slotted([slot="toolbar-icon"]) { pointer-events: auto; @@ -84,7 +83,7 @@ class HassSubpage extends LitElement { visibility: hidden; } - [main-title] { + .main-title { margin: 0 0 0 24px; line-height: 20px; flex-grow: 1; diff --git a/src/layouts/hass-tabs-subpage-data-table.ts b/src/layouts/hass-tabs-subpage-data-table.ts index b55bbcfa37..b504b29947 100644 --- a/src/layouts/hass-tabs-subpage-data-table.ts +++ b/src/layouts/hass-tabs-subpage-data-table.ts @@ -20,6 +20,7 @@ import type { import type { HomeAssistant, Route } from "../types"; import "./hass-tabs-subpage"; import type { PageNavigation } from "./hass-tabs-subpage"; +import { computeRTLDirection } from "../common/util/compute_rtl"; @customElement("hass-tabs-subpage-data-table") export class HaTabsSubpageDataTable extends LitElement { @@ -126,6 +127,9 @@ export class HaTabsSubpageDataTable extends LitElement { no-label-float no-underline @value-changed=${this._handleSearchChange} + .label=${this.hass.localize( + "ui.components.data-table.search" + )} > ${this.activeFilters ? html`
@@ -158,6 +162,7 @@ export class HaTabsSubpageDataTable extends LitElement { .hasFab=${this.hasFab} .id=${this.id} .noDataText=${this.noDataText} + .dir=${computeRTLDirection(this.hass)} > ${!this.narrow ? html` @@ -170,6 +175,9 @@ export class HaTabsSubpageDataTable extends LitElement { no-label-float no-underline @value-changed=${this._handleSearchChange} + .label=${this.hass.localize( + "ui.components.data-table.search" + )} > ${this.activeFilters @@ -234,7 +242,6 @@ export class HaTabsSubpageDataTable extends LitElement { } search-input.header { left: -8px; - top: -7px; } .active-filters { color: var(--primary-text-color); diff --git a/src/layouts/hass-tabs-subpage.ts b/src/layouts/hass-tabs-subpage.ts index d089792a7c..ebb3a8e4b8 100644 --- a/src/layouts/hass-tabs-subpage.ts +++ b/src/layouts/hass-tabs-subpage.ts @@ -240,7 +240,7 @@ class HassTabsSubpage extends LitElement { flex: 1; overflow: hidden; text-overflow: ellipsis; - max-height: 40px; + max-height: 58px; line-height: 20px; } diff --git a/src/layouts/loading-screen.ts b/src/layouts/loading-screen.ts deleted file mode 100644 index 5d0270c261..0000000000 --- a/src/layouts/loading-screen.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - css, - CSSResult, - customElement, - html, - LitElement, - TemplateResult, -} from "lit-element"; -import "../components/ha-circular-progress"; - -@customElement("loading-screen") -class LoadingScreen extends LitElement { - protected render(): TemplateResult { - return html` `; - } - - static get styles(): CSSResult { - return css` - :host { - height: 100%; - display: flex; - align-items: center; - justify-content: center; - } - `; - } -} - -declare global { - interface HTMLElementTagNameMap { - "loading-screen": LoadingScreen; - } -} diff --git a/src/panels/config/areas/ha-config-area-page.ts b/src/panels/config/areas/ha-config-area-page.ts index 46d0a0d026..151ed75bb9 100644 --- a/src/panels/config/areas/ha-config-area-page.ts +++ b/src/panels/config/areas/ha-config-area-page.ts @@ -1,6 +1,4 @@ import "@material/mwc-button"; -import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable"; -import "@polymer/paper-input/paper-input"; import { css, CSSResult, @@ -14,7 +12,7 @@ import { ifDefined } from "lit-html/directives/if-defined"; import memoizeOne from "memoize-one"; import { isComponentLoaded } from "../../../common/config/is_component_loaded"; import { computeStateName } from "../../../common/entity/compute_state_name"; -import "../../../components/dialog/ha-paper-dialog"; +import "../../../components/ha-card"; import { AreaRegistryEntry, deleteAreaRegistryEntry, @@ -106,7 +104,7 @@ class HaConfigAreaPage extends LitElement { diff --git a/src/panels/config/areas/ha-config-areas-dashboard.ts b/src/panels/config/areas/ha-config-areas-dashboard.ts index 240c211fdb..2e0e56e9f2 100644 --- a/src/panels/config/areas/ha-config-areas-dashboard.ts +++ b/src/panels/config/areas/ha-config-areas-dashboard.ts @@ -38,6 +38,7 @@ import { showAreaRegistryDetailDialog, } from "./show-dialog-area-registry-detail"; import { mdiPlus } from "@mdi/js"; +import { computeRTL } from "../../../common/util/compute_rtl"; @customElement("ha-config-areas-dashboard") export class HaConfigAreasDashboard extends LitElement { @@ -126,6 +127,7 @@ export class HaConfigAreasDashboard extends LitElement { +

+ ${this.hass.localize( + "ui.panel.config.automation.editor.modes.description", + "documentation_link", + html`${this.hass.localize( + "ui.panel.config.automation.editor.modes.documentation" + )}` + )} +

+ + + ${MODES.map( + (mode) => html` + + ${this.hass.localize( + `ui.panel.config.automation.editor.modes.${mode}` + ) || mode} + + ` + )} + + + ${this._config.mode && + MODES_MAX.includes(this._config.mode) + ? html` + ` + : html``}
${stateObj ? html` @@ -343,14 +399,28 @@ export class HaAutomationEditor extends LitElement { this._entityId = automation?.entity_id; } + private _modeChanged(ev: CustomEvent) { + const mode = ((ev.target as PaperListboxElement)?.selectedItem as any) + ?.mode; + + this._config = { ...this._config!, mode }; + if (!MODES_MAX.includes(mode)) { + delete this._config.max; + } + this._dirty = true; + } + private _valueChanged(ev: CustomEvent) { ev.stopPropagation(); - const name = (ev.target as any)?.name; + const target = ev.target as any; + const name = target.name; if (!name) { return; } - const newVal = ev.detail.value; - + let newVal = ev.detail.value; + if (target.type === "number") { + newVal = Number(newVal); + } if ((this._config![name] || "") === newVal) { return; } @@ -453,6 +523,9 @@ export class HaAutomationEditor extends LitElement { span[slot="introduction"] a { color: var(--primary-color); } + p { + margin-bottom: 0; + } ha-entity-toggle { margin-right: 8px; } diff --git a/src/panels/config/cloud/account/cloud-account.js b/src/panels/config/cloud/account/cloud-account.js index b622c8a9ff..fda5256c36 100644 --- a/src/panels/config/cloud/account/cloud-account.js +++ b/src/panels/config/cloud/account/cloud-account.js @@ -10,6 +10,7 @@ import { fetchCloudSubscriptionInfo } from "../../../../data/cloud"; import "../../../../layouts/hass-subpage"; import { EventsMixin } from "../../../../mixins/events-mixin"; import LocalizeMixin from "../../../../mixins/localize-mixin"; +import { computeRTLDirection } from "../../../../common/util/compute_rtl"; import "../../../../styles/polymer-ha-style"; import "../../ha-config-section"; import "./cloud-alexa-pref"; @@ -33,7 +34,6 @@ class CloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) { } .content { padding-bottom: 24px; - direction: ltr; } .account-row { display: flex; @@ -132,21 +132,25 @@ class CloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) { @@ -163,6 +167,10 @@ class CloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) { type: Object, value: null, }, + _rtlDirection: { + type: Boolean, + computed: "_computeRTLDirection(hass)", + }, }; } @@ -215,6 +223,10 @@ class CloudAccount extends EventsMixin(LocalizeMixin(PolymerElement)) { return description; } + + _computeRTLDirection(hass) { + return computeRTLDirection(hass); + } } customElements.define("cloud-account", CloudAccount); diff --git a/src/panels/config/cloud/account/cloud-alexa-pref.ts b/src/panels/config/cloud/account/cloud-alexa-pref.ts index bedd66fe3e..8fae8a1895 100644 --- a/src/panels/config/cloud/account/cloud-alexa-pref.ts +++ b/src/panels/config/cloud/account/cloud-alexa-pref.ts @@ -167,6 +167,10 @@ export class CloudAlexaPref extends LitElement { right: 24px; top: 32px; } + :host([dir="rtl"]) .switch { + right: auto; + left: 24px; + } .card-actions { display: flex; } diff --git a/src/panels/config/cloud/account/cloud-google-pref.ts b/src/panels/config/cloud/account/cloud-google-pref.ts index f701a27e8c..ed9db0a768 100644 --- a/src/panels/config/cloud/account/cloud-google-pref.ts +++ b/src/panels/config/cloud/account/cloud-google-pref.ts @@ -205,6 +205,10 @@ export class CloudGooglePref extends LitElement { right: 24px; top: 32px; } + :host([dir="rtl"]) .switch { + right: auto; + left: 24px; + } ha-call-api-button { color: var(--primary-color); font-weight: 500; diff --git a/src/panels/config/cloud/account/cloud-remote-pref.ts b/src/panels/config/cloud/account/cloud-remote-pref.ts index 7455d1d9bc..c2c72c1ed7 100644 --- a/src/panels/config/cloud/account/cloud-remote-pref.ts +++ b/src/panels/config/cloud/account/cloud-remote-pref.ts @@ -150,6 +150,10 @@ export class CloudRemotePref extends LitElement { right: 24px; top: 32px; } + :host([dir="rtl"]) .switch { + right: auto; + left: 24px; + } .card-actions { display: flex; } diff --git a/src/panels/config/cloud/alexa/cloud-alexa.ts b/src/panels/config/cloud/alexa/cloud-alexa.ts index e0218135b6..277d0022d4 100644 --- a/src/panels/config/cloud/alexa/cloud-alexa.ts +++ b/src/panels/config/cloud/alexa/cloud-alexa.ts @@ -34,6 +34,7 @@ import "../../../../layouts/hass-loading-screen"; import "../../../../layouts/hass-subpage"; import type { HomeAssistant } from "../../../../types"; import "../../../../components/ha-formfield"; +import { computeRTLDirection } from "../../../../common/util/compute_rtl"; const DEFAULT_CONFIG_EXPOSE = true; const IGNORE_INTERFACES = ["Alexa.EndpointHealth"]; @@ -132,6 +133,7 @@ class CloudAlexa extends LitElement { .label=${this.hass!.localize( "ui.panel.config.cloud.alexa.expose" )} + .dir=${computeRTLDirection(this.hass!)} > .content { padding-bottom: 24px; - direction: ltr; } ha-card { @@ -126,8 +125,9 @@ class CloudForgotPassword extends LocalizeMixin(EventsMixin(PolymerElement)) { () => { this._requestInProgress = false; this.fire("cloud-done", { - flashMessage: - "[[localize('ui.panel.config.cloud.forgot_password.check_your_email')]]", + flashMessage: this.hass.localize( + "ui.panel.config.cloud.forgot_password.check_your_email" + ), }); }, (err) => diff --git a/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts b/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts index a6738488cc..ea09102aea 100644 --- a/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts +++ b/src/panels/config/cloud/google-assistant/cloud-google-assistant.ts @@ -39,6 +39,7 @@ import "../../../../layouts/hass-subpage"; import type { HomeAssistant } from "../../../../types"; import { showToast } from "../../../../util/toast"; import "../../../../components/ha-formfield"; +import { computeRTLDirection } from "../../../../common/util/compute_rtl"; const DEFAULT_CONFIG_EXPOSE = true; @@ -83,6 +84,7 @@ class CloudGoogleAssistant extends LitElement { const filterFunc = this._getEntityFilterFunc( this.cloudStatus.google_entities ); + const dir = computeRTLDirection(this.hass!); // We will only generate `isInitialExposed` during first render. // On each subsequent render we will use the same set so that cards @@ -128,32 +130,38 @@ class CloudGoogleAssistant extends LitElement { .map((trait) => trait.substr(trait.lastIndexOf(".") + 1)) .join(", ")} - - + - - + + + + ${entity.might_2fa ? html` - - - +
+ + + +
` : ""} @@ -353,7 +361,7 @@ class CloudGoogleAssistant extends LitElement { color: var(--primary-text-color); background-color: var( --ha-card-background, - var(--paper-card-background-color, white) + var(--card-background-color, white) ); padding: 16px 8px; text-align: center; @@ -377,9 +385,6 @@ class CloudGoogleAssistant extends LitElement { state-info { cursor: pointer; } - ha-formfield { - display: block; - } ha-switch { padding: 8px 0; } diff --git a/src/panels/config/cloud/login/cloud-login.js b/src/panels/config/cloud/login/cloud-login.js index c251be6ffe..3b060d9bd1 100644 --- a/src/panels/config/cloud/login/cloud-login.js +++ b/src/panels/config/cloud/login/cloud-login.js @@ -16,6 +16,7 @@ import LocalizeMixin from "../../../../mixins/localize-mixin"; import NavigateMixin from "../../../../mixins/navigate-mixin"; import "../../../../styles/polymer-ha-style"; import "../../ha-config-section"; +import { computeRTL } from "../../../../common/util/compute_rtl"; /* * @appliesMixin NavigateMixin @@ -30,7 +31,6 @@ class CloudLogin extends LocalizeMixin(
@@ -192,6 +196,11 @@ class CloudLogin extends LocalizeMixin( type: String, notify: true, }, + rtl: { + type: Boolean, + reflectToAttribute: true, + computed: "_computeRTL(hass)", + }, _error: String, }; } @@ -307,6 +316,10 @@ class CloudLogin extends LocalizeMixin( this.flashMessage = ""; }, 200); } + + _computeRTL(hass) { + return computeRTL(hass); + } } customElements.define("cloud-login", CloudLogin); diff --git a/src/panels/config/cloud/register/cloud-register.js b/src/panels/config/cloud/register/cloud-register.js index 7a3fab226a..8b5b04c5b1 100644 --- a/src/panels/config/cloud/register/cloud-register.js +++ b/src/panels/config/cloud/register/cloud-register.js @@ -18,10 +18,6 @@ class CloudRegister extends LocalizeMixin(EventsMixin(PolymerElement)) { static get template() { return html` - - -
- ${this.stateInfoTemplate} - - -
- `; - } - - static get stateInfoTemplate() { - return html` - - `; - } - - static get properties() { - return { - hass: Object, - stateObj: Object, - inDialog: { - type: Boolean, - value: false, - }, - }; - } - - fireScript(ev) { - ev.stopPropagation(); - this.hass.callService("script", "turn_on", { - entity_id: this.stateObj.entity_id, - }); - } -} -customElements.define("state-card-script", StateCardScript); diff --git a/src/state-summary/state-card-script.ts b/src/state-summary/state-card-script.ts new file mode 100644 index 0000000000..da04bff86a --- /dev/null +++ b/src/state-summary/state-card-script.ts @@ -0,0 +1,77 @@ +import "@material/mwc-button"; +import "../components/entity/ha-entity-toggle"; +import "../components/entity/state-info"; +import { HomeAssistant } from "../types"; +import { + html, + customElement, + LitElement, + property, + CSSResult, +} from "lit-element"; +import { HassEntity } from "home-assistant-js-websocket"; +import { haStyle } from "../resources/styles"; +import { UNAVAILABLE_STATES } from "../data/entity"; +import { canExcecute, ScriptEntity } from "../data/script"; + +@customElement("state-card-script") +export class StateCardScript extends LitElement { + @property() public hass!: HomeAssistant; + + @property() public stateObj!: HassEntity; + + @property({ type: Boolean }) public inDialog = false; + + protected render() { + const stateObj = this.stateObj as ScriptEntity; + return html` +
+ + ${stateObj.state === "on" + ? html` + ${(stateObj.attributes.current || 0) > 0 + ? this.hass.localize( + "ui.card.script.cancel_multiple", + "number", + stateObj.attributes.current + ) + : this.hass.localize("ui.card.script.cancel")} + ` + : ""} + ${stateObj.state === "off" || stateObj.attributes.max + ? html` + ${this.hass!.localize("ui.card.script.execute")} + ` + : ""} +
+ `; + } + + private _cancelScript(ev: Event) { + ev.stopPropagation(); + this._callService("turn_off"); + } + + private _executeScript(ev: Event) { + ev.stopPropagation(); + this._callService("turn_on"); + } + + private _callService(service: string): void { + this.hass.callService("script", service, { + entity_id: this.stateObj.entity_id, + }); + } + + static get styles(): CSSResult { + return haStyle; + } +} diff --git a/src/state-summary/state-card-weblink.js b/src/state-summary/state-card-weblink.js deleted file mode 100644 index aeb233b61f..0000000000 --- a/src/state-summary/state-card-weblink.js +++ /dev/null @@ -1,61 +0,0 @@ -import { html } from "@polymer/polymer/lib/utils/html-tag"; -/* eslint-plugin-disable lit */ -import { PolymerElement } from "@polymer/polymer/polymer-element"; -import { computeStateName } from "../common/entity/compute_state_name"; -import "../components/entity/state-badge"; - -class StateCardWeblink extends PolymerElement { - static get template() { - return html` - - - ${this.stateBadgeTemplate} - [[_computeStateName(stateObj)]] - `; - } - - static get stateBadgeTemplate() { - return html` `; - } - - static get properties() { - return { - stateObj: Object, - inDialog: { - type: Boolean, - value: false, - }, - }; - } - - ready() { - super.ready(); - this.addEventListener("click", (ev) => this.onTap(ev)); - } - - _computeStateName(stateObj) { - return computeStateName(stateObj); - } - - onTap(ev) { - ev.stopPropagation(); - ev.preventDefault(); - window.open(this.stateObj.state, "_blank"); - } -} -customElements.define("state-card-weblink", StateCardWeblink); diff --git a/src/state/dialog-manager-mixin.ts b/src/state/dialog-manager-mixin.ts index 9d2a4104dd..9e86636785 100644 --- a/src/state/dialog-manager-mixin.ts +++ b/src/state/dialog-manager-mixin.ts @@ -2,6 +2,7 @@ import { HASSDomEvent } from "../common/dom/fire_event"; import { makeDialogManager, showDialog } from "../dialogs/make-dialog-manager"; import { Constructor } from "../types"; import { HassBaseEl } from "./hass-base-mixin"; +import { PropertyValues } from "lit-element"; interface RegisterDialogParams { dialogShowEvent: keyof HASSDomEvents; @@ -24,7 +25,7 @@ export const dialogManagerMixin = >( superClass: T ) => class extends superClass { - protected firstUpdated(changedProps) { + protected firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); // deprecated this.addEventListener("register-dialog", (e) => @@ -42,9 +43,9 @@ export const dialogManagerMixin = >( showDialog( this, this.shadowRoot!, - dialogImport, dialogTag, - (showEv as HASSDomEvent).detail + (showEv as HASSDomEvent).detail, + dialogImport ); }); } diff --git a/src/state/hass-element.ts b/src/state/hass-element.ts index a5cb0992ae..0c9c1fd2c0 100644 --- a/src/state/hass-element.ts +++ b/src/state/hass-element.ts @@ -12,6 +12,7 @@ import SidebarMixin from "./sidebar-mixin"; import ThemesMixin from "./themes-mixin"; import TranslationsMixin from "./translations-mixin"; import { urlSyncMixin } from "./url-sync-mixin"; +import { loggingMixin } from "./logging-mixin"; const ext = (baseClass: T, mixins): T => mixins.reduceRight((base, mixin) => mixin(base), baseClass); @@ -29,4 +30,5 @@ export class HassElement extends ext(HassBaseEl, [ urlSyncMixin, hapticMixin, panelTitleMixin, + loggingMixin, ]) {} diff --git a/src/state/logging-mixin.ts b/src/state/logging-mixin.ts new file mode 100644 index 0000000000..1d1a232e31 --- /dev/null +++ b/src/state/logging-mixin.ts @@ -0,0 +1,40 @@ +import { HASSDomEvent } from "../common/dom/fire_event"; +import { Constructor } from "../types"; +import { HassBaseEl } from "./hass-base-mixin"; + +interface WriteLogParams { + level?: "debug" | "info" | "warning" | "error" | "critical"; + message: string; +} + +declare global { + // for fire event + interface HASSDomEvents { + write_log: WriteLogParams; + } + interface HTMLElementEventMap { + write_log: HASSDomEvent; + } +} + +export const loggingMixin = >( + superClass: T +) => + class extends superClass { + protected firstUpdated(changedProps) { + super.firstUpdated(changedProps); + this.addEventListener("write_log", (ev) => { + this._writeLog(ev.detail); + }); + } + + private _writeLog(log: WriteLogParams) { + this.hass?.callService("system_log", "write", { + logger: `frontend.${ + __DEV__ ? "js_dev" : "js" + }.${__BUILD__}.${__VERSION__.replace(".", "")}`, + message: log.message, + level: log.level || "error", + }); + } + }; diff --git a/src/state/more-info-mixin.ts b/src/state/more-info-mixin.ts index b2d3d852af..2fc9088eb1 100644 --- a/src/state/more-info-mixin.ts +++ b/src/state/more-info-mixin.ts @@ -1,35 +1,46 @@ -import { Constructor } from "../types"; -import { HassBaseEl } from "./hass-base-mixin"; +import { showDialog } from "../dialogs/make-dialog-manager"; +import type { Constructor } from "../types"; +import type { HassBaseEl } from "./hass-base-mixin"; +import type { MoreInfoDialogParams } from "../dialogs/more-info/ha-more-info-dialog"; +import type { PropertyValues } from "lit-element"; +import type { HASSDomEvent } from "../common/dom/fire_event"; declare global { // for fire event interface HASSDomEvents { - "hass-more-info": { - entityId: string | null; - }; + "hass-more-info": MoreInfoDialogParams; } } +let moreInfoImportPromise; +const importMoreInfo = () => { + if (!moreInfoImportPromise) { + moreInfoImportPromise = import( + /* webpackChunkName: "more-info-dialog" */ "../dialogs/more-info/ha-more-info-dialog" + ); + } + return moreInfoImportPromise; +}; + export default >(superClass: T) => class extends superClass { - private _moreInfoEl?: any; - - protected firstUpdated(changedProps) { + protected firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); - this.addEventListener("hass-more-info", (e) => this._handleMoreInfo(e)); + this.addEventListener("hass-more-info", (ev) => this._handleMoreInfo(ev)); // Load it once we are having the initial rendering done. - import( - /* webpackChunkName: "more-info-dialog" */ "../dialogs/ha-more-info-dialog" - ); + importMoreInfo(); } - private async _handleMoreInfo(ev) { - if (!this._moreInfoEl) { - this._moreInfoEl = document.createElement("ha-more-info-dialog"); - this.shadowRoot!.appendChild(this._moreInfoEl); - this.provideHass(this._moreInfoEl); - } - this._updateHass({ moreInfoEntityId: ev.detail.entityId }); + private async _handleMoreInfo(ev: HASSDomEvent) { + showDialog( + this, + this.shadowRoot!, + "ha-more-info-dialog", + { + entityId: ev.detail.entityId, + }, + importMoreInfo + ); } }; diff --git a/src/state/url-sync-mixin.ts b/src/state/url-sync-mixin.ts index d7178b3fe0..ae5078e5d0 100644 --- a/src/state/url-sync-mixin.ts +++ b/src/state/url-sync-mixin.ts @@ -1,9 +1,15 @@ /* eslint-disable no-console */ -import { fireEvent } from "../common/dom/fire_event"; +import { + closeDialog, + showDialog, + DialogState, + DialogClosedParams, +} from "../dialogs/make-dialog-manager"; import { Constructor } from "../types"; import { HassBaseEl } from "./hass-base-mixin"; +import { HASSDomEvent } from "../common/dom/fire_event"; -const DEBUG = false; +const DEBUG = true; export const urlSyncMixin = >( superClass: T @@ -12,81 +18,77 @@ export const urlSyncMixin = >( __DEMO__ ? superClass : class extends superClass { - private _ignoreNextHassChange = false; - - private _ignoreNextPopstate = false; - - private _moreInfoOpenedFromPath?: string; + private _ignoreNextPopState = false; public connectedCallback(): void { super.connectedCallback(); window.addEventListener("popstate", this._popstateChangeListener); + this.addEventListener("dialog-closed", this._dialogClosedListener); } public disconnectedCallback(): void { super.disconnectedCallback(); window.removeEventListener("popstate", this._popstateChangeListener); + this.removeEventListener("dialog-closed", this._dialogClosedListener); } - protected hassChanged(newHass, oldHass): void { - super.hassChanged(newHass, oldHass); - - if (this._ignoreNextHassChange) { - if (DEBUG) { - console.log("ignore hasschange"); - } - this._ignoreNextHassChange = false; - return; - } + private _dialogClosedListener = ( + ev: HASSDomEvent + ) => { + // If not closed by navigating back, and not a new dialog is open, remove the open state from history if ( - !oldHass || - oldHass.moreInfoEntityId === newHass.moreInfoEntityId + history.state?.open && + history.state?.dialog === ev.detail.dialog ) { - if (DEBUG) { - console.log("ignoring hass change"); - } - return; - } - - if (newHass.moreInfoEntityId) { - if (DEBUG) { - console.log("pushing state"); - } - // We keep track of where we opened moreInfo from so that we don't - // pop the state when we close the modal if the modal has navigated - // us away. - this._moreInfoOpenedFromPath = window.location.pathname; - history.pushState(null, "", window.location.pathname); - } else if ( - window.location.pathname === this._moreInfoOpenedFromPath - ) { - if (DEBUG) { - console.log("history back"); - } - this._ignoreNextPopstate = true; + this._ignoreNextPopState = true; history.back(); } - } + }; - private _popstateChangeListener = (ev) => { - if (this._ignoreNextPopstate) { - if (DEBUG) { - console.log("ignore popstate"); - } - this._ignoreNextPopstate = false; + private _popstateChangeListener = (ev: PopStateEvent) => { + if (this._ignoreNextPopState) { + this._ignoreNextPopState = false; return; } - - if (DEBUG) { - console.log("popstate", ev); - } - - if (this.hass && this.hass.moreInfoEntityId) { + if (ev.state && "dialog" in ev.state) { if (DEBUG) { - console.log("deselect entity"); + console.log("popstate", ev); } - this._ignoreNextHassChange = true; - fireEvent(this, "hass-more-info", { entityId: null }); + this._handleDialogStateChange(ev.state); } }; + + private async _handleDialogStateChange(state: DialogState) { + if (DEBUG) { + console.log("handle state", state); + } + if (!state.open) { + const closed = await closeDialog(state.dialog); + if (!closed) { + // dialog could not be closed, push state again + history.pushState( + { + dialog: state.dialog, + open: true, + dialogParams: null, + oldState: null, + }, + "" + ); + return; + } + if (state.oldState) { + this._handleDialogStateChange(state.oldState); + } + return; + } + if (state.dialogParams !== null) { + showDialog( + this, + this.shadowRoot!, + state.dialog, + state.dialogParams + ); + } + } }; diff --git a/src/translations/en.json b/src/translations/en.json index fab0367798..cd2f1eb8a9 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -188,7 +188,9 @@ "activate": "Activate" }, "script": { - "execute": "Execute" + "execute": "Execute", + "cancel": "Cancel", + "cancel_multiple": "Cancel {number}" }, "service": { "run": "Run" @@ -331,6 +333,9 @@ "scene": "Part of the following scenes", "script": "Part of the following scripts", "automation": "Part of the following automations" + }, + "data-table": { + "search": "Search" } }, "dialogs": { @@ -602,7 +607,8 @@ "type": "Type", "editable": "Editable" }, - "add_helper": "Add helper" + "add_helper": "Add helper", + "no_helpers": "Looks like you don't have any helpers yet!" }, "dialog": { "create": "Create", @@ -837,6 +843,19 @@ "label": "Description", "placeholder": "Optional description" }, + "modes": { + "label": "Mode", + "description": "The mode controls what happens when the automation is triggered while the actions are still running from a previous trigger. Check the {documentation_link} for more info.", + "documentation": "automation documentation", + "single": "Single", + "restart": "Restart", + "queued": "Queued", + "parallel": "Parallel (default)" + }, + "max": { + "queued": "Queue length", + "parallel": "Max number of parallel runs" + }, "edit_yaml": "Edit as YAML", "edit_ui": "Edit with UI", "triggers": { @@ -1061,9 +1080,26 @@ }, "editor": { "alias": "Name", + "icon": "Icon", + "id": "Entity ID", + "id_already_exists_save_error": "You can't save this script because the ID is not unique, pick another ID or leave it blank to automatically generate one.", + "id_already_exists": "This ID already exists", "introduction": "Use scripts to execute a sequence of actions.", "header": "Script: {name}", "default_name": "New Script", + "modes": { + "label": "Mode", + "description": "The mode controls what happens when script is invoked while it is still running from one or more previous invocations. Check the {documentation_link} for more info.", + "documentation": "script documentation", + "single": "Single (default)", + "restart": "Restart", + "queued": "Queued", + "parallel": "Parallel" + }, + "max": { + "queued": "Queue length", + "parallel": "Max number of parallel runs" + }, "load_error_not_editable": "Only scripts inside scripts.yaml are editable.", "delete_confirm": "Are you sure you want to delete this script?", "delete_script": "Delete script", @@ -1100,6 +1136,7 @@ "save": "Save", "unsaved_confirm": "You have unsaved changes. Are you sure you want to leave?", "name": "Name", + "icon": "Icon", "devices": { "header": "Devices", "introduction": "Add the devices that you want to be included in your scene. Set all the devices to the state you want for this scene.", @@ -1338,6 +1375,7 @@ "header": "Entities", "introduction": "Home Assistant keeps a registry of every entity it has ever seen that can be uniquely identified. Each of these entities will have an entity ID assigned which will be reserved for just this entity.", "introduction2": "Use the entity registry to override the name, change the entity ID or remove the entry from Home Assistant.", + "search": "Search entities", "filter": { "filter": "Filter", "show_disabled": "Show disabled entities", @@ -1452,6 +1490,7 @@ "details": "Integration details", "rename_dialog": "Edit the name of this config entry", "rename_input_label": "Entry name", + "search": "Search integrations", "ignore": { "ignore": "Ignore", "confirm_ignore_title": "Ignore discovery of {name}?", @@ -1839,7 +1878,8 @@ "edit_lovelace": { "header": "Title of your Lovelace UI", "explanation": "This title is shown above all your views in the Lovelace UI.", - "edit_title": "Edit title" + "edit_title": "Edit title", + "title": "Title" }, "edit_view": { "header": "View Configuration", @@ -1996,7 +2036,8 @@ "unit": "Unit", "url": "Url", "state": "State", - "secondary_info_attribute": "Secondary Info Attribute" + "secondary_info_attribute": "Secondary Info Attribute", + "search": "Search" }, "map": { "name": "Map", @@ -2285,7 +2326,7 @@ } }, "abort": { - "not_whitelisted": "Your computer is not whitelisted." + "not_allowed": "Your computer is not allowed." } } } diff --git a/test-mocha/common/entity/entity_filter.ts b/test-mocha/common/entity/entity_filter.ts index 74f4b48e7b..35e1f7ac05 100644 --- a/test-mocha/common/entity/entity_filter.ts +++ b/test-mocha/common/entity/entity_filter.ts @@ -13,14 +13,14 @@ describe("EntityFilter", () => { }); // case 2 - it("allows whitelisting entities by entity id", () => { + it("allows entities by entity id", () => { const filter = generateFilter(undefined, ["light.kitchen"]); assert(filter("light.kitchen")); assert(!filter("light.living_room")); }); - it("allows whitelisting entities by domain", () => { + it("allows entities by domain", () => { const filter = generateFilter(["switch"]); assert(filter("switch.bla")); @@ -28,7 +28,7 @@ describe("EntityFilter", () => { }); // case 3 - it("allows blacklisting entities by entity id", () => { + it("excluding entities by entity id", () => { const filter = generateFilter(undefined, undefined, undefined, [ "light.kitchen", ]); @@ -37,7 +37,7 @@ describe("EntityFilter", () => { assert(filter("light.living_room")); }); - it("allows blacklisting entities by domain", () => { + it("excluding entities by domain", () => { const filter = generateFilter(undefined, undefined, ["switch"]); assert(!filter("switch.bla")); @@ -45,7 +45,7 @@ describe("EntityFilter", () => { }); // case 4a - it("allows whitelisting domain and blacklisting entity", () => { + it("allows domain and excluding entity", () => { const filter = generateFilter(["switch"], undefined, undefined, [ "switch.kitchen", ]); @@ -55,7 +55,7 @@ describe("EntityFilter", () => { assert(!filter("sensor.bla")); }); - it("allows whitelisting entity while whitelisting other domains", () => { + it("allows entity while other domains", () => { const filter = generateFilter(["switch"], ["light.kitchen"]); assert(filter("switch.living_room")); @@ -64,7 +64,7 @@ describe("EntityFilter", () => { }); // case 4b - it("allows blacklisting domain and whitelisting entity", () => { + it("excluding domain and entity", () => { const filter = generateFilter(undefined, ["switch.kitchen"], ["switch"]); assert(filter("switch.kitchen")); @@ -72,7 +72,7 @@ describe("EntityFilter", () => { assert(filter("sensor.bla")); }); - it("allows blacklisting domain and excluding entities", () => { + it("excluding domain and excluding entities", () => { const filter = generateFilter( undefined, undefined, @@ -86,7 +86,7 @@ describe("EntityFilter", () => { }); // case 4c - it("allows whitelisting entities", () => { + it("allows entities", () => { const filter = generateFilter(undefined, ["light.kitchen"]); assert(filter("light.kitchen")); diff --git a/translations/frontend/ca.json b/translations/frontend/ca.json index f28caf3ae0..232718650c 100644 --- a/translations/frontend/ca.json +++ b/translations/frontend/ca.json @@ -525,6 +525,9 @@ "clear": "Esborra", "show_areas": "Mostra àrees" }, + "data-table": { + "search": "Cerca" + }, "date-range-picker": { "end_date": "Data final", "select": "Selecciona", @@ -1356,6 +1359,7 @@ "confirm_text": "Les hauries d'eliminar de la configuració Lovelace i de les automatitzacions si contenen aquestes entitats.", "confirm_title": "Vols eliminar {number} entitat/s?" }, + "search": "Cerca entitats", "selected": "{number} seleccionada/es", "status": { "disabled": "Desactivada/es", @@ -1386,7 +1390,8 @@ "entity_id": "ID de l'entitat", "name": "Nom", "type": "Tipus" - } + }, + "no_helpers": "Sembla que encara no tens ajudants." }, "types": { "input_boolean": "Interruptor", @@ -1465,7 +1470,7 @@ }, "configure": "Configurar", "configured": "Configurades", - "description": "Gestionar i configurar integracións", + "description": "Gestiona i configura les integracions", "details": "Detalls de la integració", "discovered": "Descobertes", "home_assistant_website": "lloc web de Home Assistant", @@ -1490,7 +1495,8 @@ "note_about_integrations": "Encara no es poden configurar totes les integracions a través de la UI.", "note_about_website_reference": "N'hi ha més disponibles al ", "rename_dialog": "Edita el nom de l'entrada de configuració", - "rename_input_label": "Nom de l'entrada" + "rename_input_label": "Nom de l'entrada", + "search": "Cerca integracions" }, "introduction": "Aquí pots configurar Home Assistant i els seus components. Encara no és possible configurar-ho tot des de la interfície d'usuari, però hi estem treballant.", "logs": { @@ -2194,6 +2200,7 @@ "name": "Nom", "no_theme": "Sense tema", "refresh_interval": "Interval d'actualització", + "search": "Cerca", "secondary_info_attribute": "Atribut d’informació secundària", "show_icon": "Mostra icona?", "show_name": "Mostra nom?", @@ -2314,7 +2321,8 @@ "edit_lovelace": { "edit_title": "Edita el títol", "explanation": "Aquest títol es mostra a sobre de cada panell Lovelace.", - "header": "Títol de la interfície d'usuari Lovelace" + "header": "Títol de la interfície d'usuari Lovelace", + "title": "Títol" }, "edit_view": { "add": "Afegeix visualització", @@ -2678,6 +2686,10 @@ "not_used": "Mai no s'ha utilitzat", "token_title": "Token d'actualització de {clientId}" }, + "suspend": { + "description": "Tancar la connexió amb el servidor després d'haver estat ocult durant 5 minuts?", + "header": "Tanca la connexió automàticament" + }, "themes": { "dropdown_label": "Tema", "error_no_theme": "No hi ha temes disponibles.", diff --git a/translations/frontend/cs.json b/translations/frontend/cs.json index d89e99aadb..e3c9659867 100644 --- a/translations/frontend/cs.json +++ b/translations/frontend/cs.json @@ -1431,6 +1431,7 @@ "delete_confirm": "Opravdu chcete odstranit tuto integraci?", "device_unavailable": "zařízení není k dispozici", "devices": "{count} {count, plural,\n one {zařízení}\n other {zařízení}\n}", + "documentation": "Dokumentace", "entities": "{count} {count, plural,\n one {entita}\n other {entit}\n}", "entity_unavailable": "entita není k dispozici", "firmware": "Firmware: {version}", diff --git a/translations/frontend/de.json b/translations/frontend/de.json index 09733803ce..60752ca372 100644 --- a/translations/frontend/de.json +++ b/translations/frontend/de.json @@ -48,6 +48,19 @@ "none": "Keine", "sleep": "Schlafen" } + }, + "humidifier": { + "mode": { + "auto": "Automatisch", + "away": "Abwesend", + "baby": "Baby", + "boost": "Boost", + "comfort": "Komfort", + "eco": "Eco", + "home": "Zu Hause", + "normal": "Normal", + "sleep": "Schlafen" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Rückwärts", "speed": "Geschwindigkeit" }, + "humidifier": { + "humidity": "Soll-Luftfeuchtigkeit", + "mode": "Modus", + "on_entity": "{name} eingeschaltet", + "target_humidity_entity": "{name} Soll-Luftfeuchtigkeit" + }, "light": { "brightness": "Helligkeit", "color_temperature": "Farbtemperatur", @@ -483,6 +502,7 @@ "menu": "Menü", "next": "Weiter", "no": "Nein", + "overflow_menu": "Überlauf-Menü", "previous": "Vorher", "refresh": "Aktualisieren", "save": "Speichern", @@ -505,6 +525,14 @@ "clear": "Löschen", "show_areas": "Bereiche anzeigen" }, + "data-table": { + "search": "Suche" + }, + "date-range-picker": { + "end_date": "Enddatum", + "select": "Auswählen", + "start_date": "Anfangsdatum" + }, "device-picker": { "clear": "Löschen", "device": "Gerät", @@ -694,6 +722,7 @@ "zha_device_info": { "buttons": { "add": "Geräte über dieses Gerät hinzufügen", + "clusters": "Cluster verwalten", "reconfigure": "Gerät neu konfigurieren", "remove": "Gerät entfernen", "zigbee_information": "ZigBee-Gerätesignatur" @@ -1330,6 +1359,7 @@ "confirm_text": "Du solltest sie aus deiner Lovelace-Konfiguration und deinen Automatisierungen entfernen, wenn sie diese Entitäten enthalten.", "confirm_title": "Möchtest du {number} Entitäten entfernen?" }, + "search": "Entitäten suchen", "selected": "{number} ausgewählt", "status": { "disabled": "Deaktiviert", @@ -1360,7 +1390,8 @@ "entity_id": "Entitäts-ID", "name": "Name", "type": "Typ" - } + }, + "no_helpers": "Sieht so aus, als hätten Sie noch keine Helfer!" }, "types": { "input_boolean": "Umschalten", @@ -1390,6 +1421,11 @@ "system_health_error": "System Health-Komponente wird nicht geladen. Füge 'system_health:' zu configuration.yaml hinzu", "title": "Info" }, + "integration_panel_move": { + "link_integration_page": "Integrationsseite", + "missing_zha": "Vermissen Sie das ZHA-Konfigurationspanel? Es wurde in den ZHA-Eintrag auf der {integrations_page} verschoben.", + "missing_zwave": "Vermissen Sie das Z-Wave-Konfigurationspanel? Es wurde in den Z-Wave-Eintrag auf der {integrations_page} verschoben." + }, "integrations": { "add_integration": "Integration hinzufügen", "caption": "Integrationen", @@ -1400,6 +1436,7 @@ "delete_confirm": "Möchtest du diese Integration wirklich löschen?", "device_unavailable": "Gerät nicht verfügbar", "devices": "{count} {count, plural,\n one {Gerät}\n other {Geräte}\n}", + "documentation": "Dokumentation", "entities": "{count} {count, plural,\none {Entität}\nother {Entitäten}\n}", "entity_unavailable": "Entität nicht verfügbar", "firmware": "Firmware: {version}", @@ -1458,7 +1495,8 @@ "note_about_integrations": "Nicht alle Integrationen können über die Benutzeroberfläche konfiguriert werden.", "note_about_website_reference": "Weitere Informationen findest Du auf der ", "rename_dialog": "Bearbeite den Namen dieses Konfigurationseintrags", - "rename_input_label": "Eintragsname" + "rename_input_label": "Eintragsname", + "search": "Such-Integrationen" }, "introduction": "Hier ist es möglich, deine Komponenten und Home Assistant zu konfigurieren. Noch ist nicht alles über die GUI einstellbar, aber wir arbeiten daran.", "logs": { @@ -1552,6 +1590,7 @@ } }, "mqtt": { + "button": "Konfigurieren", "description_listen": "Auf einen Topic hören", "description_publish": "Ein Paket veröffentlichen", "listening_to": "Anhören von", @@ -1672,6 +1711,11 @@ "core": "Ort & Anpassungen neu laden", "group": "Gruppen neu laden", "heading": "Neuladen der YAML-Konfiguration", + "input_boolean": "Eingabe-Booleans neu laden", + "input_datetime": "Eingabe-Datums- und Zeitfelder neu laden", + "input_number": "Eingabenummern neu laden", + "input_select": "Eingabe-Auswahl neu laden", + "input_text": "Eingabetexte neu laden", "introduction": "Einige Komponenten von Home Assistant können ohne einen Neustart neu geladen werden. \"Neu laden\" entlädt dabei die aktuelle Konfiguration und lädt die neue Konfiguration.", "person": "Personen neu laden", "scene": "Szenen neu laden", @@ -2024,11 +2068,23 @@ }, "history": { "period": "Zeitraum", + "ranges": { + "last_week": "Letzte Woche", + "this_week": "Diese Woche", + "today": "Heute", + "yesterday": "Gestern" + }, "showing_entries": "Zeige Einträge für" }, "logbook": { "entries_not_found": "Keine Logbucheinträge gefunden.", "period": "Zeitraum", + "ranges": { + "last_week": "Letzte Woche", + "this_week": "Diese Woche", + "today": "Heute", + "yesterday": "Gestern" + }, "showing_entries": "Zeige Einträge für" }, "lovelace": { @@ -2144,6 +2200,7 @@ "name": "Name", "no_theme": "Kein Theme", "refresh_interval": "Aktualisierungsintervall", + "search": "Suche", "secondary_info_attribute": "Zweites Infoattribut", "show_icon": "Symbol anzeigen?", "show_name": "Namen anzeigen?", @@ -2168,6 +2225,10 @@ "description": "Mit der Karte \"Horizontaler Stapel\" kannst du mehrere Karten so gruppieren, dass sie immer nebeneinander sitzen und gemeinsam die Breite einer Spalte einnehmen.", "name": "Horizontaler Stapel" }, + "humidifier": { + "description": "Die Luftbefeuchter-Karte gibt dir die Kontrolle über deine Luftbefeuchter-Entität. Sie ermöglicht es dir, die Luftfeuchtigkeit und den Modus der Entität zu ändern.", + "name": "Luftbefeuchter" + }, "iframe": { "description": "Mit der Webseiten-Karte kannst du deine Lieblingswebseite direkt in Home Assistant einbetten.", "name": "Webseite" @@ -2260,7 +2321,8 @@ "edit_lovelace": { "edit_title": "Titel bearbeiten", "explanation": "Dieser Titel wird überhalb aller deiner Lovelace Ansichten gezeigt.", - "header": "Titel deiner Lovelace UI" + "header": "Titel deiner Lovelace UI", + "title": "Titel" }, "edit_view": { "add": "Ansicht hinzufügen", @@ -2624,6 +2686,10 @@ "not_used": "Wurde noch nie benutzt", "token_title": "Aktualisierungs-Token für {clientId}" }, + "suspend": { + "description": "Sollen wir die Verbindung zum Server schließen, nachdem sie 5 Minuten lang versteckt war?", + "header": "Verbindung automatisch schließen" + }, "themes": { "dropdown_label": "Thema", "error_no_theme": "Keine Themen verfügbar.", diff --git a/translations/frontend/en.json b/translations/frontend/en.json index d66d8e20c7..20d8cc2a95 100644 --- a/translations/frontend/en.json +++ b/translations/frontend/en.json @@ -525,6 +525,9 @@ "clear": "Clear", "show_areas": "Show areas" }, + "data-table": { + "search": "Search" + }, "date-range-picker": { "end_date": "End date", "select": "Select", @@ -938,6 +941,19 @@ "introduction": "Use automations to bring your home alive.", "load_error_not_editable": "Only automations in automations.yaml are editable.", "load_error_unknown": "Error loading automation ({err_no}).", + "max": { + "parallel": "Max number of parallel runs", + "queued": "Queue length" + }, + "modes": { + "description": "The mode controls what happens when the automation is triggered while the actions are still running from a previous trigger. Check the {documentation_link} for more info.", + "documentation": "automation documentation", + "label": "Mode", + "parallel": "Parallel (default)", + "queued": "Queued", + "restart": "Restart", + "single": "Single" + }, "move_down": "Move down", "move_up": "Move up", "save": "Save", @@ -1356,6 +1372,7 @@ "confirm_text": "You should remove them from your Lovelace config and automations if they contain these entities.", "confirm_title": "Do you want to remove {number} entities?" }, + "search": "Search entities", "selected": "{number} selected", "status": { "disabled": "Disabled", @@ -1386,7 +1403,8 @@ "entity_id": "Entity ID", "name": "Name", "type": "Type" - } + }, + "no_helpers": "Looks like you don't have any helpers yet!" }, "types": { "input_boolean": "Toggle", @@ -1490,7 +1508,8 @@ "note_about_integrations": "Not all integrations can be configured via the UI yet.", "note_about_website_reference": "More are available on the ", "rename_dialog": "Edit the name of this config entry", - "rename_input_label": "Entry name" + "rename_input_label": "Entry name", + "search": "Search integrations" }, "introduction": "Here it is possible to configure your components and Home Assistant. Not everything is possible to configure from the UI yet, but we're working on it.", "logs": { @@ -1679,6 +1698,19 @@ "introduction": "Use scripts to execute a sequence of actions.", "link_available_actions": "Learn more about available actions.", "load_error_not_editable": "Only scripts inside scripts.yaml are editable.", + "max": { + "parallel": "Max number of parallel runs", + "queued": "Queue length" + }, + "modes": { + "description": "The mode controls what happens when script is invoked while it is still running from one or more previous invocations. Check the {documentation_link} for more info.", + "documentation": "script documentation", + "label": "Mode", + "parallel": "Parallel", + "queued": "Queued", + "restart": "Restart", + "single": "Single (default)" + }, "sequence": "Sequence", "sequence_sentence": "The sequence of actions of this script." }, @@ -2194,6 +2226,7 @@ "name": "Name", "no_theme": "No theme", "refresh_interval": "Refresh Interval", + "search": "Search", "secondary_info_attribute": "Secondary Info Attribute", "show_icon": "Show Icon?", "show_name": "Show Name?", @@ -2314,7 +2347,8 @@ "edit_lovelace": { "edit_title": "Edit title", "explanation": "This title is shown above all your views in the Lovelace UI.", - "header": "Title of your Lovelace UI" + "header": "Title of your Lovelace UI", + "title": "Title" }, "edit_view": { "add": "Add view", @@ -2503,6 +2537,7 @@ }, "trusted_networks": { "abort": { + "not_allowed": "Your computer is not allowed.", "not_whitelisted": "Your computer is not whitelisted." }, "step": { @@ -2678,6 +2713,10 @@ "not_used": "Has never been used", "token_title": "Refresh token for {clientId}" }, + "suspend": { + "description": "Should we close the connection to the server after being hidden for 5 minutes?", + "header": "Automatically close connection" + }, "themes": { "dropdown_label": "Theme", "error_no_theme": "No themes available.", diff --git a/translations/frontend/es.json b/translations/frontend/es.json index 9f4537b1cc..0bf1709566 100644 --- a/translations/frontend/es.json +++ b/translations/frontend/es.json @@ -525,6 +525,9 @@ "clear": "Limpiar", "show_areas": "Mostrar áreas" }, + "data-table": { + "search": "Buscar" + }, "date-range-picker": { "end_date": "Fecha de finalización", "select": "Seleccionar", @@ -1356,6 +1359,7 @@ "confirm_text": "Debes eliminarlos de la configuración y las automatizaciones de Lovelace si contienen estas entidades.", "confirm_title": "¿Deseas eliminar {number} entidades?" }, + "search": "Buscar entidades", "selected": "{number} seleccionadas", "status": { "disabled": "Deshabilitado", @@ -1386,7 +1390,8 @@ "entity_id": "ID de la entidad", "name": "Nombre", "type": "Tipo" - } + }, + "no_helpers": "¡Parece que aún no tienes ayudantes!" }, "types": { "input_boolean": "Alternar", @@ -1490,7 +1495,8 @@ "note_about_integrations": "Todavía no se pueden configurar todas las integraciones a través de la interfaz de usuario.", "note_about_website_reference": "Hay más disponibles en el ", "rename_dialog": "Edita el nombre de esta entrada de configuración", - "rename_input_label": "Nombre de la entrada" + "rename_input_label": "Nombre de la entrada", + "search": "Buscar integraciones" }, "introduction": "Aquí puedes configurar tus componentes y Home Assistant. Aún no es posible configurar todo desde la interfaz de usuario, pero estamos trabajando en ello.", "logs": { @@ -2194,6 +2200,7 @@ "name": "Nombre", "no_theme": "Sin tema", "refresh_interval": "Intervalo de actualización", + "search": "Buscar", "secondary_info_attribute": "Atributo de información secundaria", "show_icon": "¿Mostrar icono?", "show_name": "¿Mostrar nombre?", @@ -2314,7 +2321,8 @@ "edit_lovelace": { "edit_title": "Editar título", "explanation": "Este título se muestra sobre todas tus vistas en la IU Lovelace.", - "header": "Título de tu interfaz de usuario de Lovelace" + "header": "Título de tu interfaz de usuario de Lovelace", + "title": "Título" }, "edit_view": { "add": "Añadir vista", @@ -2678,6 +2686,10 @@ "not_used": "Nunca ha sido usado", "token_title": "Actualizar token para {clientId}" }, + "suspend": { + "description": "¿Deberíamos cerrar la conexión con el servidor después de estar oculto durante 5 minutos?", + "header": "Cerrar automáticamente la conexión" + }, "themes": { "dropdown_label": "Tema", "error_no_theme": "No hay temas disponibles", diff --git a/translations/frontend/fr.json b/translations/frontend/fr.json index 234dde16f8..4da2ae549d 100644 --- a/translations/frontend/fr.json +++ b/translations/frontend/fr.json @@ -48,6 +48,19 @@ "none": "Aucun", "sleep": "Veille" } + }, + "humidifier": { + "mode": { + "auto": "Auto", + "away": "Absent", + "baby": "Bébé", + "boost": "Boost", + "comfort": "Confort", + "eco": "Éco", + "home": "Présent", + "normal": "Normal", + "sleep": "Sommeil" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Sens inverse", "speed": "Vitesse" }, + "humidifier": { + "humidity": "Humidité cible", + "mode": "Mode", + "on_entity": "{name} on", + "target_humidity_entity": "{name} humidité cible" + }, "light": { "brightness": "Luminosité", "color_temperature": "Température de couleur", @@ -506,6 +525,9 @@ "clear": "Effacer", "show_areas": "Afficher les pièces" }, + "data-table": { + "search": "Chercher" + }, "date-range-picker": { "end_date": "Date de fin", "select": "Sélectionner", @@ -870,8 +892,8 @@ "label": "Pas" }, "numeric_state": { - "above": "Au-Dessus", - "below": "En-Dessous", + "above": "Au dessus de", + "below": "En-dessous de", "label": "Valeur numérique", "value_template": "Contenu du modèle (optionnel)" }, @@ -1337,6 +1359,7 @@ "confirm_text": "Les entités ne peuvent être supprimées que lorsque l'intégration ne fournit plus les entités.", "confirm_title": "Voulez-vous supprimer {number} entités ?" }, + "search": "Chercher les entités", "selected": "{number} sélectionné", "status": { "disabled": "Désactivé", @@ -1367,7 +1390,8 @@ "entity_id": "ID de l'entité", "name": "Nom", "type": "Type" - } + }, + "no_helpers": "On dirait que vous n'avez pas encore d'aide!" }, "types": { "input_boolean": "Interrupteur", @@ -1412,6 +1436,7 @@ "delete_confirm": "Êtes-vous sûr de vouloir supprimer cette intégration?", "device_unavailable": "appareil indisponible", "devices": "{count} {count, plural,\n zero {appareil}\n one {appareil}\n other {appareils}\n}", + "documentation": "Documentation", "entities": "{count} {count, plural,\n zero {entité}\n one {entité}\n other {entités}\n}", "entity_unavailable": "entité indisponible", "firmware": "Firmware: {version}", @@ -1470,7 +1495,8 @@ "note_about_integrations": "Toutes les intégrations ne peuvent pas encore être configurées via l'interface utilisateur.", "note_about_website_reference": "D'autres sont disponibles sur le ", "rename_dialog": "Modifier le nom de cette entrée de configuration", - "rename_input_label": "Nom de l'entrée" + "rename_input_label": "Nom de l'entrée", + "search": "Chercher les intégrations" }, "introduction": "Ici, il est possible de configurer vos composants et Home Assistant. Tout n'est pas encore possible de configurer à partir de l'interface utilisateur, mais nous y travaillons.", "logs": { @@ -2174,6 +2200,7 @@ "name": "Nom", "no_theme": "Pas de thème", "refresh_interval": "Intervalle de rafraîchissement", + "search": "Chercher", "secondary_info_attribute": "Attribut d'informations secondaires", "show_icon": "Afficher l'icône ?", "show_name": "Afficher le nom ?", @@ -2198,6 +2225,10 @@ "description": "La carte de pile horizontale vous permet d'empiler plusieurs cartes, de sorte qu'elles soient toujours côte à côte dans l'espace d'une colonne.", "name": "Pile horizontale" }, + "humidifier": { + "description": "La carte humidificateur donne le contrôle de votre entité humidificateur. Vous permettant de modifier l'humidité et le mode de l'entité.", + "name": "Humidificateur" + }, "iframe": { "description": "La carte Page Web vous permet d'intégrer votre page Web préférée directement dans Home Assistant.", "name": "Page Web" @@ -2290,7 +2321,8 @@ "edit_lovelace": { "edit_title": "Éditer le titre", "explanation": "Ce titre est affiché au-dessus de toutes vos vues dans Lovelace UI.", - "header": "Titre de votre UI Lovelace" + "header": "Titre de votre UI Lovelace", + "title": "Titre" }, "edit_view": { "add": "Ajouter la vue", @@ -2654,6 +2686,10 @@ "not_used": "N'a jamais été utilisé", "token_title": "Actualiser le jeton de {clientId}" }, + "suspend": { + "description": "Faut-il fermer la connexion au serveur après avoir été caché pendant 5 minutes ?", + "header": "Fermer automatiquement la connexion" + }, "themes": { "dropdown_label": "Thème", "error_no_theme": "Aucun thème disponible.", diff --git a/translations/frontend/he.json b/translations/frontend/he.json index 1783a8686d..f758bc2eda 100644 --- a/translations/frontend/he.json +++ b/translations/frontend/he.json @@ -21,7 +21,7 @@ "map": "מפה", "profile": "פרופיל", "shopping_list": "רשימת קניות", - "states": "סקירה כללית" + "states": "ראשי" }, "state_attributes": { "climate": { @@ -525,6 +525,9 @@ "clear": "נקה", "show_areas": "הצג אזורים" }, + "data-table": { + "search": "חיפוש" + }, "date-range-picker": { "end_date": "תאריך סיום", "select": "בחר", @@ -577,7 +580,7 @@ }, "dialogs": { "config_entry_system_options": { - "enable_new_entities_description": "אם הם מושבתים, ישויות שהתגלו לאחרונה עבור {integration} לא יתווספו אוטומטית ל Home Assistant.", + "enable_new_entities_description": "אם הן מושבתות, ישויות שהתגלו לאחרונה עבור {integration} לא יתווספו אוטומטית ל Home Assistant.", "enable_new_entities_label": "הפוך ישויות חדשות שנוספו לזמינות.", "title": "אפשרויות מערכת", "update": "עדכון" @@ -602,7 +605,7 @@ "unavailable": "ישות זו אינה זמינה כרגע.", "update": "עדכון" }, - "no_unique_id": "לישות זו אין מזהה ייחודי, ולכן לא ניתן לנהל את ההגדרות שלה ממשק המשתמש.", + "no_unique_id": "לישות זו אין מזהה ייחודי, ולכן לא ניתן לנהל את ההגדרות שלה מממשק המשתמש.", "related": "קשורים", "settings": "הגדרות" }, @@ -1046,7 +1049,7 @@ }, "introduction": "עורך אוטומציה מאפשר לך ליצור ולערוך אוטומציות. אנא עקוב אחר הקישור למטה וקרא את ההוראות כדי לוודא שהגדרת את ה - Home Assistant כהלכה.", "learn_more": "למד עוד על אוטומציות", - "no_automations": "לא הצלחנו למצוא שום אוטומציה הניתנת לעריכה", + "no_automations": "לא מצאנו אוטומציה הניתנת לעריכה", "only_editable": "רק אוטומציות שהוגדרו ב automations.yaml ניתנות לעריכה.", "pick_automation": "בחר אוטומציה לעריכה", "show_info_automation": "הצג מידע על אוטומציה" @@ -1356,6 +1359,7 @@ "confirm_text": "עליך להסיר אותם מתצורת ה- Lovelace ומהאוטומציות שלך אם הם מכילים ישויות אלה.", "confirm_title": "האם ברצונך להסיר {מספר} ישויות?" }, + "search": "חיפוש ישויות", "selected": "{number} נבחרו", "status": { "disabled": "מושבת", @@ -1386,7 +1390,8 @@ "entity_id": "מזהה ישות", "name": "שם", "type": "סוג" - } + }, + "no_helpers": "נראה שאין לך עדיין עזרים!" }, "types": { "input_boolean": "החלף מצב", @@ -1431,6 +1436,7 @@ "delete_confirm": "האם אתה בטוח שברצונך למחוק אינטגרציה זו?", "device_unavailable": "מכשיר אינו זמין", "devices": "{count} {count, plural,\n one {device}\n other {devices}\n}", + "documentation": "תיעוד", "entities": "{count} {count, plural,\n one {entity}\n other {entities}\n}", "entity_unavailable": "ישות לא זמינה", "firmware": "קושחה: {version}", @@ -1489,7 +1495,8 @@ "note_about_integrations": "קיימות אינטגרציות שלא ניתן עדיין להגדירן ע\"י ממשק המשתמש.", "note_about_website_reference": "מידע נוסף זמין ב:", "rename_dialog": "ערוך את שם ישות התצורה הזו", - "rename_input_label": "שם ישות" + "rename_input_label": "שם ישות", + "search": "חיפוש אינטגרציות" }, "introduction": "כאן ניתן להגדיר את הרכיבים ואת ה Home Assistant. לא הכל ניתן להגדיר את ממשק המשתמש עדיין, אבל אנחנו עובדים על זה.", "logs": { @@ -1544,7 +1551,7 @@ "sidebar": "הצג בסרגל הצד", "title": "כותרת" }, - "open": "פתוח" + "open": "פתח" } }, "description": "הגדרת לוחות המחוונים של Lovelace", @@ -2187,12 +2194,13 @@ "icon_height": "גובה אייקון", "image": "נתיב תמונה", "manual": "ידני", - "manual_description": "צריך להוסיף כרטיס מותאם אישית או פשוט רוצה לכתוב באופן ידני את yaml?", + "manual_description": "צריך להוסיף כרטיס מותאם אישית או פשוט רוצה לכתוב באופן ידני את ה-yaml?", "maximum": "מקסימום", "minimum": "מינימום", "name": "שם", "no_theme": "אין ערכת נושא", "refresh_interval": "מרווח זמן לרענון", + "search": "חיפוש", "secondary_info_attribute": "שדה מידע משני", "show_icon": "הצג סמל?", "show_name": "להציג שם?", @@ -2313,7 +2321,8 @@ "edit_lovelace": { "edit_title": "ערוך כותרת", "explanation": "כותרת זו מוצגת מעל לכל התצוגות שלך ב- Lovelace.", - "header": "כותרת ממשק ה- Lovelace שלך" + "header": "כותרת ממשק ה- Lovelace שלך", + "title": "כותרת" }, "edit_view": { "add": "הוסף תצוגה", @@ -2347,9 +2356,9 @@ "confirm_unsaved_changes": "יש לך שינויים שלא נשמרו, אתה בטוח שברצונך לצאת?", "confirm_unsaved_comments": "התצורה שלך מכילה הערות, אלה לא יישמרו. האם אתה רוצה להמשיך?", "error_invalid_config": "התצורה שלך אינה תקפה: {error}", - "error_parse_yaml": "לא ניתן לנתח את YAML: {error}", + "error_parse_yaml": "לא ניתן לנתח את ה-YAML: {error}", "error_remove": "לא ניתן להסיר את הקונפיגורציה: {error}", - "error_save_yaml": "אין אפשרות לשמור את YAML: {error}", + "error_save_yaml": "אין אפשרות לשמור את ה-YAML: {error}", "header": "עריכת קונפיגורציה", "resources_moved": "אין להוסיף עוד משאבים לתצורת Lovelace אך ניתן להוסיף אותם בלוח התצורה של Lovelace.", "save": "שמור", @@ -2638,7 +2647,7 @@ "delete_failed": "מחיקת אסימון הגישה נכשלה.", "description": "צור אסימוני גישה ארוכי טווח כדי לאפשר לסקריפטים שלך לקיים אינטראקציה עם Home Assistant.\nאסימונים אלו פועלים כיום:", "empty_state": "אין לך עדיין אסימוני גישה ארוכים.", - "header": "אסימוני גישה ארוכים חיים", + "header": "אסימוני גישה ארוכי חיים", "last_used": "נעשה שימוש לאחרונה {date} מ{location}", "learn_auth_requests": "למד כיצד לבצע בקשות מאומתות.", "not_used": "לא היה בשימוש", @@ -2677,6 +2686,10 @@ "not_used": "לא היה בשימוש", "token_title": "אסימון רענון עבור {clientId}" }, + "suspend": { + "description": "האם עלינו לסגור את החיבור לשרת לאחר שהוסתרנו במשך 5 דקות?", + "header": "סגור חיבור באופן אוטומטי" + }, "themes": { "dropdown_label": "ערכת נושא", "error_no_theme": "אין ערכות נושא זמינות.", diff --git a/translations/frontend/is.json b/translations/frontend/is.json index 1a4ba2b4ab..c4ad7ec496 100644 --- a/translations/frontend/is.json +++ b/translations/frontend/is.json @@ -205,6 +205,7 @@ "stopped": "Stöðvuð" }, "default": { + "on": "Á", "unavailable": "Ekki tiltækt", "unknown": "Óþekkt" }, @@ -606,10 +607,14 @@ "title": "Uppfærslu leiðbeiningar" }, "vacuum": { - "status": "Staða" + "pause": "Hlé", + "start": "Byrja", + "status": "Staða", + "stop": "Stöðva" } }, "mqtt_device_debug_info": { + "deserialize": "Reyni að flokka MQTT skilaboð sem JSON", "entities": "Einingar", "no_entities": "Engar einingar", "show_as_yaml": "Birta sem YAML" @@ -1121,6 +1126,7 @@ "disabled": "Afvirkjað", "ok": "í lagi", "readonly": "Ritvarið", + "restored": "Endurheimt", "unavailable": "Ekki tiltækt" } } @@ -1136,6 +1142,7 @@ }, "picker": { "headers": { + "editable": "Breytanlegt", "name": "Nafn", "type": "Gerð" } @@ -1206,7 +1213,8 @@ "integration": "samþætting", "integration_not_found": "Samþætting fannst ekki.", "new": "Setja upp nýja samþættingu", - "none": "Ekkert skilgreint sem stendur" + "none": "Ekkert skilgreint sem stendur", + "none_found": "Engar samþættingar fundust" }, "introduction": "Hér er mögulegt að stilla af íhluti og Home Assistant. Því miður er ekki hægt að breyta öllu í gegnum viðmótið ennþá, en við erum að vinna í því.", "logs": { @@ -1220,6 +1228,7 @@ "conf_mode": { "yaml": "YAML skrá" }, + "default_dashboard": "Þetta er sjálfgefið mælaborð", "detail": { "create": "Stofna", "delete": "Eyða", @@ -1270,6 +1279,7 @@ } }, "mqtt": { + "button": "Stilla", "listening_to": "Hlusta á", "title": "MQTT" }, @@ -1417,6 +1427,7 @@ "add": { "caption": "Bæta við tækjum" }, + "button": "Stilla", "caption": "ZHA", "cluster_commands": { "header": "Klasa skipanir" @@ -1472,6 +1483,7 @@ } }, "zwave": { + "button": "Stilla", "caption": "Z-Wave", "common": { "unknown": "óþekkt", @@ -1494,6 +1506,7 @@ "set_config_parameter": "Stilltu Config Parameter" }, "node_management": { + "add_to_group": "Bæta í hóp", "entity_info": "Upplýsingar um einingu", "group": "Hópur" }, @@ -1599,7 +1612,8 @@ "conditional": { "card": "Spjald", "change_type": "Breyta gerð", - "conditions": "Skilyrði" + "conditions": "Skilyrði", + "current_state": "núverandi" }, "config": { "optional": "Valfrjálst", @@ -2016,6 +2030,10 @@ "not_used": "Hefur aldrei verið notaður", "token_title": "Uppfæra tóka fyrir {clientId}" }, + "suspend": { + "description": "Ættum við að loka tengingunni við þjóninn eftir að hafa verið falin í 5 mínútur?", + "header": "Loka tengingu sjálfkrafa" + }, "themes": { "dropdown_label": "Þema", "error_no_theme": "Engar þemu í boði.", diff --git a/translations/frontend/it.json b/translations/frontend/it.json index 681720b018..9a915b5d6a 100644 --- a/translations/frontend/it.json +++ b/translations/frontend/it.json @@ -1431,6 +1431,7 @@ "delete_confirm": "Sei sicuro di voler eliminare questa integrazione?", "device_unavailable": "dispositivo non disponibile", "devices": "{count} {count, plural, \none {dispositivo}\nother {dispositivi}\n}", + "documentation": "Documentazione", "entities": "{count} {count, plural, \none {entità}\nother {entità }\n}", "entity_unavailable": "entità non disponibile", "firmware": "Firmware: {version}", @@ -2677,6 +2678,10 @@ "not_used": "Non è mai stato usato", "token_title": "Token di aggiornamento per {clientId}" }, + "suspend": { + "description": "Dovremmo chiudere la connessione al server dopo essere stati nascosti per 5 minuti?", + "header": "Chiudi automaticamente la connessione" + }, "themes": { "dropdown_label": "Tema", "error_no_theme": "Nessun tema disponibile.", diff --git a/translations/frontend/ko.json b/translations/frontend/ko.json index dba4fdec40..4c9d3da4b4 100644 --- a/translations/frontend/ko.json +++ b/translations/frontend/ko.json @@ -525,6 +525,9 @@ "clear": "지우기", "show_areas": "영역 표시" }, + "data-table": { + "search": "검색" + }, "date-range-picker": { "end_date": "종료 날짜", "select": "선택", @@ -646,7 +649,7 @@ "pattern": "클라이언트 측 검증을 위한 정규표현식", "text": "텍스트" }, - "platform_not_loaded": "{platform} 통합 구성요소가 로드되지 않았습니다. 'default_config:' 또는 \"{platform}:\" 을 추가하여 구성을 추가해주세요.", + "platform_not_loaded": "{platform} 통합 구성요소가 로드되지 않았습니다. 'default_config:' 또는 \"{platform}:\" 을 configuration.yaml 에 추가해주세요.", "required_error_msg": "이 입력란은 필수 요소입니다", "yaml_not_editable": "이 구성요소의 설정은 UI 에서 편집할 수 없습니다. UI 에서 설정한 구성요소만 UI 에서 구성할 수 있습니다." }, @@ -1126,7 +1129,7 @@ "title": "Alexa" }, "caption": "Home Assistant Cloud", - "description_features": "Alexa 및 Google 어시스턴트를 통해 집 밖에서도 집을 관리하세요.", + "description_features": "Alexa 및 Google 어시스턴트를 통해 집 밖에서도 집을 관리합니다", "description_login": "{email} 로(으로) 로그인 되어있습니다", "description_not_login": "로그인이 되어있지 않습니다", "dialog_certificate": { @@ -1356,6 +1359,7 @@ "confirm_text": "이러한 구성요소가 포함된 경우 Lovelace 구성 및 자동화에서 제거해야 합니다.", "confirm_title": "{number} 개의 구성요소를 제거하시겠습니까?" }, + "search": "구성요소 검색", "selected": "{number} 개 선택됨", "status": { "disabled": "비활성화", @@ -1386,7 +1390,8 @@ "entity_id": "구성요소 ID", "name": "이름", "type": "유형" - } + }, + "no_helpers": "아직 설정한 도우미가 없는 것 같습니다." }, "types": { "input_boolean": "토글", @@ -1400,7 +1405,7 @@ "built_using": "다음을 사용하여 제작", "caption": "정보", "custom_uis": "사용자 UI :", - "description": "Home Assistant 설치에 대한 정보", + "description": "설치된 Home Assistant 에 대한 정보입니다", "developed_by": "Home Assistant 는 수많은 멋진 사람들에 의해 개발되었습니다.", "documentation": "관련문서", "frontend": "프런트엔드-UI", @@ -1431,6 +1436,7 @@ "delete_confirm": "이 통합 구성요소를 제거하시겠습니까?", "device_unavailable": "기기 사용불가", "devices": "{count} {count, plural,\none {기기}\nother {기기}\n}", + "documentation": "관련문서", "entities": "{count} {count, plural,\none {구성요소}\nother {구성요소}\n}", "entity_unavailable": "구성요소 사용불가", "firmware": "펌웨어: {version}", @@ -1489,13 +1495,14 @@ "note_about_integrations": "아직 UI 에서 모든 통합 구성요소를 구성할 수 있는 것은 아닙니다.", "note_about_website_reference": "더 많은 구성요소는 다음에서 살펴 봐주세요. ", "rename_dialog": "이 구성 항목의 이름을 편집하기", - "rename_input_label": "구성 항목의 이름" + "rename_input_label": "구성 항목의 이름", + "search": "통합 구성요소 검색" }, "introduction": "여기에서 구성요소와 Home Assistant 를 설정할 수 있습니다. 아직 여기서 모두 설정할 수는 없지만, 모든 내용을 설정할 수 있도록 작업 중입니다.", "logs": { "caption": "로그", "clear": "지우기", - "description": "Home Assistant 로그 보기", + "description": "Home Assistant 로그 내역을 봅니다", "details": "로그 상세정보 ({level})", "load_full_log": "Home Assistant 로그 전부 불러오기", "loading_log": "오류 로그를 읽는 중...", @@ -2193,6 +2200,7 @@ "name": "이름", "no_theme": "테마 없음", "refresh_interval": "새로 고침 간격", + "search": "검색", "secondary_info_attribute": "보조 정보 속성", "show_icon": "아이콘 표시", "show_name": "이름 표시", @@ -2218,8 +2226,8 @@ "name": "수평 모아보기" }, "humidifier": { - "description": "가습기 카드는 가습 기기를 제어합니다. 구성요소의 가습 모드를 변경할 수 있습니다.", - "name": "가습기" + "description": "습도 조절기 카드는 가습 및 제습 기기와 같은 습도 조절기기를 제어합니다. 구성요소의 습도 조절 모드를 변경할 수 있습니다.", + "name": "습도 조절기" }, "iframe": { "description": "웹 페이지 카드를 사용하면 즐겨 찾는 웹 페이지를 Home Assistant 에 삽입할 수 있습니다.", @@ -2313,7 +2321,8 @@ "edit_lovelace": { "edit_title": "제목 편집", "explanation": "이 제목은 Lovelace UI 모든 뷰의 상단에 표시됩니다.", - "header": "Lovelace UI 의 제목" + "header": "Lovelace UI 의 제목", + "title": "제목" }, "edit_view": { "add": "뷰 추가", @@ -2677,6 +2686,10 @@ "not_used": "사용된 적이 없음", "token_title": "{clientId} 의 리프레시 토큰" }, + "suspend": { + "description": "Home Assistant UI 가 5분 동안 보이지 않는 경우 서버와의 연결을 종료시킬까요?", + "header": "자동 연결 종료" + }, "themes": { "dropdown_label": "테마", "error_no_theme": "사용할 수 있는 테마가 없습니다.", diff --git a/translations/frontend/lt.json b/translations/frontend/lt.json index cc0a53ba9f..568dd51c70 100644 --- a/translations/frontend/lt.json +++ b/translations/frontend/lt.json @@ -181,6 +181,13 @@ "active": "aktyvus", "paused": "pristabdytas" }, + "weather": { + "clear-night": "Giedra naktis", + "cloudy": "Debesuota", + "partlycloudy": "Nepastoviai debesuota", + "sunny": "Saulėta", + "windy": "Vėjuota" + }, "zwave": { "query_stage": { "dead": " ({query_stage})", @@ -192,6 +199,25 @@ "card": { "alarm_control_panel": { "arm_custom_bypass": "Individualizuotas apėjimas" + }, + "weather": { + "attributes": { + "air_pressure": "Atmosferos slėgis", + "humidity": "Santykinė oro drėgmė", + "temperature": "Temperatūra", + "wind_speed": "Vėjo greitis" + }, + "cardinal_direction": { + "e": "R", + "n": "Š", + "ne": "ŠR", + "nw": "ŠV", + "s": "P", + "se": "PR", + "sw": "PV", + "w": "V" + }, + "forecast": "Prognozė" } }, "common": { @@ -428,8 +454,17 @@ "question_trust": "Ar pasitikite išoriniu skydeliu {name} adresu {link}?" } }, + "history": { + "ranges": { + "today": "Šiandien", + "yesterday": "Vakar" + } + }, "logbook": { - "period": "Laikotarpis" + "period": "Laikotarpis", + "ranges": { + "today": "Šiandien" + } }, "lovelace": { "cards": { @@ -541,6 +576,10 @@ "header": "Keisti slaptažodį", "new_password": "Naujas slaptažodis" }, + "language": { + "dropdown_label": "Kalba", + "header": "Kalba" + }, "mfa_setup": { "close": "Uždaryti", "title_aborted": "Nutraukta" diff --git a/translations/frontend/lv.json b/translations/frontend/lv.json index 51b27da212..649bb7cbb0 100644 --- a/translations/frontend/lv.json +++ b/translations/frontend/lv.json @@ -329,8 +329,8 @@ "ui": { "auth_store": { "ask": "Vai vēlaties saglabāt šo pieteikšanos?", - "confirm": "Saglabāt pieteikšanos", - "decline": "Nē, paldies" + "confirm": "Jā", + "decline": "Nē" }, "card": { "alarm_control_panel": { @@ -460,7 +460,7 @@ } }, "common": { - "back": "Tilbake", + "back": "Atpakaļ", "cancel": "Atcelt", "loading": "Ielāde", "no": "Nē", @@ -476,6 +476,11 @@ }, "clear": "Notīrīt" }, + "date-range-picker": { + "end_date": "Beigu datums", + "select": "Pielietot", + "start_date": "Sākuma datums" + }, "device-picker": { "clear": "Notīrīt", "device": "Ierīce" @@ -491,8 +496,15 @@ "no_history_found": "Vēsturiskie ieraksti par stāvokli netika atrasti." }, "related-items": { + "area": "Apgabals", + "automation": "Izmantojas automatizācijās", "device": "Ierīce", - "integration": "Integrācija" + "entity": "Saistītās vienības", + "group": "Iekļauta grupās", + "integration": "Integrācija", + "no_related_found": "Nekādas saistības nav atrastas.", + "scene": "Izmantojas ainās", + "script": "Izmantojas skriptos" }, "relative_time": { "duration": { @@ -515,12 +527,23 @@ "update": "Atjaunināt" }, "entity_registry": { + "dismiss": "Aizvērt", "editor": { - "delete": "DZĒST", + "confirm_delete": "Vai tiešām vēlaties dzēst šo vienību?", + "delete": "Dzēst", + "enabled_cause": "Atspējots dēļ {cause}.", + "enabled_description": "Atspējotās vienības netiks pievienotas Home Assistant.", + "enabled_label": "Iespējot vienību", + "entity_id": "Vienības ID", + "icon": "Pielāgota ikona", + "icon_error": "Ikonām jābūt formātā “prefikss:nosaukums”, piemēram, “mdi:home”", "name": "Nosaukuma pārlabošana", "note": "Ievērībai: pašlaik tas var nedarboties ar visām integrācijām.", - "unavailable": "Šī vienība pašlaik nav pieejama." + "unavailable": "Šī vienība pašlaik nav pieejama.", + "update": "Atjaunināt" }, + "no_unique_id": "Šai vienībai nav unikāla ID, tāpēc tās iestatījumus nevar pārvaldīt, izmantojot lietotāja saskarni.", + "related": "Saistības", "settings": "Iestatījumi" }, "generic": { @@ -529,18 +552,40 @@ }, "helper_settings": { "generic": { - "icon": "Ikona" + "icon": "Ikona", + "name": "Nosaukums" + }, + "input_datetime": { + "date": "Datums", + "datetime": "Datums un laiks", + "mode": "Ko vēlaties ievadīt", + "time": "Laiks" + }, + "input_number": { + "box": "Ievades lauks", + "max": "Maksimālā vērtība", + "min": "Minimālā vērtība", + "mode": "Rādīšanas režīms", + "step": "Soļa lielums", + "unit_of_measurement": "Mērvienība" }, "input_select": { "add": "Pievienot", "add_option": "Pievienot iespēju", + "no_options": "Vēl nav nevienas opcijas", "options": "Iespējas" }, "input_text": { + "max": "Maksimālais garums", + "min": "Minimālais garums", + "mode": "Rādīšanas režīms", "password": "Parole", + "pattern": "Regex izteiksme klienta puses validācijai", "text": "Teksts" }, - "required_error_msg": "Šis lauks ir obligāts" + "platform_not_loaded": "{platform} integrācija nav ielādēta. Lūdzu, pievienojiet 'default_config:' vai ''{platform}:'' savā konfigurācijā.", + "required_error_msg": "Šis lauks ir obligāts", + "yaml_not_editable": "Šīs vienības iestatījumus nevar rediģēt, izmantojot lietotāja saskarni. Tikai lietotāja saskarnē iestatītie vienumi ir konfigurējami no lietotāja saskarnes." }, "more_info_control": { "dismiss": "Aizvērt dialogu", @@ -632,7 +677,7 @@ "editor": { "create": "IZVEIDOT", "delete": "DZĒST", - "name": "Navn", + "name": "Nosaukums", "update": "ATJAUNINĀT" }, "picker": { @@ -863,6 +908,9 @@ "delete_confirm": "Vai tiešām vēlaties dzēst šo automatizāciju?", "edit_automation": "Rediģēt automatizāciju", "header": "Automatizāciju redaktors", + "headers": { + "name": "Nosaukums" + }, "introduction": "Automatizācijas redaktors ļauj jums izveidot un rediģēt automatizācijas. Lūdzu, sekojiet saitei zemāk, lai pārliecinātos, ka esat pareizi konfigurējis Home Assistant.", "learn_more": "Uzziniet vairāk par automatizācijām", "no_automations": "Mēs nevarējām atrast rediģējamas automatizācijas", @@ -913,7 +961,9 @@ "edit_requires_storage": "Redaktors ir atspējots, jo konfigurācija ir definēta configuration.yaml.", "elevation": "Augstums", "elevation_meters": "metri", + "external_url": "Ārējais URL", "imperial_example": "Fārenheita, mārciņas", + "internal_url": "Iekšējais URL", "latitude": "Platums", "location_name": "Jūsu Home Assistant instalācijas nosaukums", "longitude": "Garums", @@ -930,12 +980,16 @@ } }, "customize": { + "attributes_customize": "Šie atribūti jau ir iestatīti customize.yaml konfigurācijā", "attributes_not_set": "Šie atribūti netika iestatīti. Iestatiet tos, ja vēlaties.", + "attributes_outside": "Šie atribūti tiek pielāgoti ārpus customize.yaml", "attributes_override": "Varat pārlabot pēc savas patikas.", + "attributes_set": "Šie vienības atribūti ir iestatīti programmatiski.", "caption": "Pielāgojumi", "description": "Pielāgojiet jūsu iekārtas", "pick_attribute": "Izvēlieties atribūtu, kuru pārlabot", "picker": { + "entity": "Vienība", "header": "Pielāgojumi", "introduction": "Uzlabojiet atribūtus katrai vienībai. Pievienotie jeb mainīties pielāgojumi stāsies spēkā nekavējoties. Noņemtie pielāgojumi stāsies spēkā, kad vienība tiks atjaunināta." }, @@ -944,7 +998,21 @@ } }, "devices": { + "automation": { + "automations": "Automatizācijas", + "conditions": { + "caption": "Darīt kaut ko tikai tad, ja ..." + }, + "create": "Izveidot automatizāciju ar ierīci", + "no_automations": "Nav automatizāciju", + "no_device_automations": "Šai ierīcei nav pieejamas automatizācijas", + "triggers": { + "caption": "Darīt kaut ko tad, kad ..." + } + }, + "cant_edit": "Rediģējamas ir tikai tās vienības, kas izveidotas, izmantojot lietotāja saskarni.", "caption": "Ierīces", + "confirm_delete": "Vai tiešām vēlaties izdzēst šo ierīci?", "confirm_rename_entity_ids": "Vai vēlaties pārdēvēt arī vienības ID no Jūsu vinībām?", "data_table": { "area": "Apgabals", @@ -952,10 +1020,35 @@ "device": "Ierīce", "integration": "Integrācija", "manufacturer": "Ražotājs", - "model": "Modelis" + "model": "Modelis", + "no_area": "Apgabals nav norādīts", + "no_devices": "Nav ierīču" }, + "delete": "Dzēst", "description": "Pievienoto ierīču pārvaldība", + "device_info": "Informācija par ierīci", "device_not_found": "Ierīce nav atrasta.", + "entities": { + "add_entities_lovelace": "Pievienot Lovelace", + "disabled_entities": "+{count} {count, plural,\n one {atspējota ierīce}\n other {atspējotas ierīces}\n}", + "entities": "Vienības", + "hide_disabled": "Slēpt atspējotās", + "none": "Šai ierīcei nav vienību" + }, + "name": "Nosaukums", + "no_devices": "Nav ierīču", + "scene": { + "create": "Izveidot ainu ar ierīci", + "no_scenes": "Nav ainas", + "scenes": "Ainas" + }, + "scenes": "Ainas", + "script": { + "create": "Izveidot skriptu ar ierīci", + "no_scripts": "Nav skriptu", + "scripts": "Skripti" + }, + "scripts": "Skripti", "unknown_error": "Nezināma kļūda", "unnamed_device": "Nenosaukta ierīce", "update": "Atjaunināt" @@ -994,7 +1087,7 @@ "confirm_text": "Vienības var noņemt tikai tad, kad tās vairs nerada attiecīgā integrācija.", "confirm_title": "Vai vēlaties noņemt {number} vienības?" }, - "selected": "{numurs} atlasītas", + "selected": "{number} atlasītas", "status": { "disabled": "Atspējota", "ok": "Labi", @@ -1005,21 +1098,47 @@ }, "header": "Home Assistant konfigurēšana", "helpers": { + "caption": "Palīgi", + "description": "Elementi, kas var palīdzēt automatizāciju veidošanā", "dialog": { + "add_helper": "Pievienot palīgu", + "add_platform": "Pievienot {platform}", "create": "Izveidot" }, "picker": { + "add_helper": "Pievienot palīgu", "headers": { + "editable": "Rediģējams", + "entity_id": "Vienības ID", + "name": "Nosaukums", "type": "Veids" } }, "types": { + "input_boolean": "Pārslēdzējs", + "input_datetime": "Datums un/vai laiks", + "input_number": "Skaitlis", + "input_select": "Izkrītošā izvēlne", "input_text": "Teksts" } }, "info": { + "built_using": "Veidots, izmantojot", + "caption": "Informācija", + "custom_uis": "Pielāgots UI:", + "description": "Informācija par šo Home Assistant instalāciju", + "documentation": "Dokumentācija", + "frontend": "lietotāja saskarne", + "frontend_version": "Lietotāja saskarnes versija: {version} - {type}", + "home_assistant_logo": "Home Assistant logotips", + "icons_by": "Ikonas no", + "integrations": "Integrācijas", + "issues": "Problēmas", + "license": "Publicēts saskaņā ar Apache 2.0 licenci", + "path_configuration": "Ceļš uz configuration.yaml: {path}", "server": "serveris", - "source": "Avots:", + "source": "Pirmkods:", + "system_health_error": "System Health komponents nav ielādēts. Pievienojiet “system_health:” bloku configuration.yaml", "title": "Informācija" }, "integrations": { @@ -1029,6 +1148,7 @@ "delete_button": "Dzēst {integration}", "delete_confirm": "Vai tiešām vēlaties dzēst šo integrāciju?", "device_unavailable": "ierīce nav pieejama", + "documentation": "Dokumentācija", "entity_unavailable": "vienība nav pieejama", "firmware": "Programmaparatūra: {version}", "hub": "Savienots caur", @@ -1072,15 +1192,82 @@ "stop_ignore": "Pārtraukt ignorēšanu" }, "integration_not_found": "Integrācija nav atrasta.", - "new": "Izveidot jaunu integrāciju", + "new": "Pievienot jaunu integrāciju", "none": "Pagaidām nekas nav nokonfigurēts", + "none_found_detail": "Pielāgot meklēšanas kritērijus.", "note_about_integrations": "Pagaidām ne visas integrācijas var nokonfigurēt, izmantojot lietotāja saskarni.", "note_about_website_reference": "Vairāk informācijas vietnē " }, - "introduction": "Šeit iespējams konfigurēt Jūsu komponentus un pašu Home Assistant. Pagaidām ne visu ir iespējams konfigurēt no lietotāja saskarnes, bet mēs strādājam pie tā.", + "introduction": "Šeit iespējams konfigurēt Jūsu komponentus un pašu Home Assistant. Pagaidām ne visu ir iespējams konfigurēt, izmantojot lietotāja saskarni, bet mēs strādājam pie tā.", "logs": { + "caption": "Žurnāli", "clear": "Notīrīt", - "refresh": "Atsvaidzināt" + "description": "Pārskatiet Home Assistant žurnālus", + "details": "Detaļas ({level})", + "load_full_log": "Ielādēt pilnu Home Assistant žurnālu", + "loading_log": "Kļūdu žurnāla ielāde...", + "multiple_messages": "ieraksts pirmo reizi parādījās {time} un pārādas {counter} reizes", + "no_errors": "Par kļūdām nav ziņots", + "no_issues": "Nav jaunu problēmu!", + "refresh": "Atsvaidzināt", + "title": "Žurnāli" + }, + "lovelace": { + "caption": "Lovelace infopaneļi", + "dashboards": { + "cant_edit_default": "Standarta Lovelace infopaneli nevar rediģēt lietotāja saskarnē. Varat to paslēpt, iestatot citu infopaneli kā noklusēto.", + "cant_edit_yaml": "YAML definētos infopaneļus nevar rediģēt, izmantojot lietotāja saskarni. Mainiet tos konfigurācijā.yaml.", + "caption": "Infopaneļi", + "conf_mode": { + "storage": "UI kontrolēts", + "yaml": "YAML fails" + }, + "confirm_delete": "Vai tiešām vēlaties izdzēst šo infopaneli?", + "default_dashboard": "Šis ir noklusējuma infopanelis", + "detail": { + "create": "Izveidot", + "delete": "Dzēst", + "dismiss": "Aizvērt", + "edit_dashboard": "Rediģēt infopaneli", + "icon": "Ikona", + "new_dashboard": "Pievienot jaunu infopaneli", + "remove_default": "Noņemt kā noklusējumu šajā ierīcē", + "require_admin": "Tikai administratoram", + "set_default": "Iestatīt kā noklusējumu šajā ierīcē", + "show_sidebar": "Rādīt sānjoslā", + "title": "Nosaukums", + "title_required": "Nosaukums ir obligāts.", + "update": "Atjaunināt", + "url": "URL", + "url_error_msg": "URL ir jāsatur - un tajā nedrīkst būt atstarpes vai speciālās rakstzīmes, izņemot _ un -" + }, + "picker": { + "add_dashboard": "Pievienot infopaneli", + "headers": { + "conf_mode": "Konfigurācijas metode", + "default": "Noklusējuma", + "filename": "Faila nosaukums", + "require_admin": "Tikai administratoram", + "sidebar": "Rādīt sānjoslā", + "title": "Nosaukums" + }, + "open": "Atvērt" + } + }, + "description": "Konfigurējiet savus Lovelace infopaneļus", + "resources": { + "cant_edit_yaml": "Jūs izmantojat Lovelace YAML režīmā, tāpēc jūs nevarat pārvaldīt savus resursus, izmantojot lietotāja saskarni. Pārvaldiet tos konfigurācijā.yaml.", + "caption": "Resursi", + "detail": { + "url": "URL" + }, + "picker": { + "headers": { + "url": "URL" + }, + "no_resources": "Nav resursu" + } + } }, "mqtt": { "publish": "Publicēt", @@ -1176,6 +1363,7 @@ "introduction": "Skriptu redaktors ļauj jums izveidot un rediģēt skriptus. Lūdzu, izmantojiet zemāk esošo saiti, lai izlasītu instrukcijas, lai pārliecinātos, ka esat pareizi konfigurējis Home Assistant.", "learn_more": "Uzziniet vairāk par skriptiem", "no_scripts": "Rediģējami skripti nav atrasti", + "show_info": "Rādīt informāciju par skriptu", "trigger_script": "Izpildīt skriptu" } }, @@ -1220,10 +1408,11 @@ "username": "Lietotājvārds" }, "caption": "Lietotāji", - "description": "Pārvaldīt lietotājus", + "description": "Pārvaldiet lietotājus", "editor": { "activate_user": "Aktivizēt lietotāju", "active": "Aktīvs", + "admin": "Administrators", "caption": "Skatīt lietotāju", "change_password": "Mainīt paroli", "confirm_user_deletion": "Vai tiešām vēlaties dzēst {name}?", @@ -1231,11 +1420,22 @@ "delete_user": "Dzēst lietotāju", "group": "Grupa", "id": "ID", + "name": "Vārds", "owner": "Īpašnieks", "system_generated": "Sistēmas ģenerēts", - "system_generated_users_not_removable": "Nevar noņemt sistēmas ģenerētos lietotājus.", - "unnamed_user": "Lietotājs bez vārda" - } + "system_generated_users_not_editable": "Sistēmas ģenerētos lietotājus nevar atjaunināt.", + "system_generated_users_not_removable": "Sistēmas ģenerētos lietotājus nevar dzēst.", + "unnamed_user": "Lietotājs bez vārda", + "update_user": "Atjaunināt" + }, + "picker": { + "headers": { + "group": "Grupa", + "name": "Vārds", + "system": "Sistēmas" + } + }, + "users_privileges_note": "Lietotāju grupa ir izstrādes procesā. Lietotājs nevarēs administrēt instalāciju, izmantojot lietotāja saskarni. Mēs joprojām pārbaudām pārvaldības API, lai pārliecinātos, ka tie pareizi ierobežo piekļuvi administratoriem." }, "zha": { "add_device_page": { @@ -1378,6 +1578,12 @@ "logbook": { "entries_not_found": "Neviens žurnāla ieraksts nav atrasts.", "period": "Periods", + "ranges": { + "last_week": "Iepriekšējā nedēļā", + "this_week": "Šonedēļ", + "today": "Šodien", + "yesterday": "Vakardien" + }, "showing_entries": "Ieraksti par" }, "lovelace": { @@ -1414,7 +1620,8 @@ "toggle": "Pārslēgt vienības." }, "generic": { - "icon": "Ikona" + "icon": "Ikona", + "url": "URL" }, "iframe": { "name": "iFrame" @@ -1479,6 +1686,7 @@ "error_parse_yaml": "Nevar noparsēt YAML: {error}", "error_save_yaml": "Nevar saglabāt YAML: {error}", "header": "Konfigurācijas redaktors", + "resources_moved": "Resursus vairs nevajadzētu pievienot Lovelace konfigurācijai, bet tos var pievienot Lovelace konfigurācijas panelī.", "save": "Saglabāt", "saved": "Saglabāts", "unsaved_changes": "Nesaglabātās izmaiņas" @@ -1497,7 +1705,8 @@ "configure_ui": "Konfigurēt lietotāja saskarni", "exit_edit_mode": "Iziet no UI rediģēšanas režīma", "help": "Palīdzība", - "refresh": "Atsvaidzināt" + "refresh": "Atsvaidzināt", + "reload_resources": "Pārlādēt resursus" }, "reload_lovelace": "Pārlādēt lietotāja saskarni", "unused_entities": { @@ -1764,6 +1973,10 @@ "not_used": "Nekad nav izmantots", "token_title": "{clientId} atsvaidzināšanas pilnvara" }, + "suspend": { + "description": "Vai pārtraukt savienojumu ar serveri pēc 5 neativitātes minūtēm?", + "header": "Automātiski pārtraukt savienojumu" + }, "themes": { "dropdown_label": "Tēma", "error_no_theme": "Nav nevienas tēmas", diff --git a/translations/frontend/nb.json b/translations/frontend/nb.json index b0d5e9f04a..c011c8ff84 100644 --- a/translations/frontend/nb.json +++ b/translations/frontend/nb.json @@ -51,14 +51,14 @@ }, "humidifier": { "mode": { - "auto": "Auto", + "auto": "", "away": "Borte", - "baby": "Baby", + "baby": "", "boost": "Øke", "comfort": "Komfort", "eco": "Øko", "home": "Hjem", - "normal": "Normal", + "normal": "", "sleep": "Sove" } } @@ -1418,8 +1418,8 @@ }, "integration_panel_move": { "link_integration_page": "integrasjonsside", - "missing_zha": "Mangler ZHA-konfigurasjonspanelet? Den ble flyttet til ZHA-oppføringen på {integrations_page} .", - "missing_zwave": "Mangler Z-Wave-konfigurasjonspanelet? Den ble flyttet til Z-Wave-oppføringen på {integrations_page} ." + "missing_zha": "Mangler ZHA konfigurasjonspanelet? Det ble flyttet til ZHA oppføringen på {integrations_page}.", + "missing_zwave": "Mangler Z-Wave konfigurasjonspanelet? Det ble flyttet til Z-Wave oppføringen på {integrations_page}." }, "integrations": { "add_integration": "Legg til integrasjon", @@ -1431,6 +1431,7 @@ "delete_confirm": "Er du sikker på at du vil slette denne integrasjonen?", "device_unavailable": "enheten er utilgjengelig", "devices": "{count} {count, plural,\n one {enhet}\n other {enheter}\n}", + "documentation": "Dokumentasjon", "entities": "{count} {count, plural,\n one {entitet}\n other {entiteter}\n}", "entity_unavailable": "entiteten er utilgjengelig", "firmware": "Fastvare: {version}", @@ -2218,7 +2219,7 @@ "name": "Horisontal Stack" }, "humidifier": { - "description": "Luftfukterkortet gir kontroll over luftfukterenheten din. Lar deg endre fuktigheten og modusen til enheten.", + "description": "Luftfukter kortet gir kontroll over luftfukter enheten din. Lar deg endre fuktigheten og modusen til enheten.", "name": "Luftfukter" }, "iframe": { @@ -2677,6 +2678,10 @@ "not_used": "Har aldri blitt brukt", "token_title": "Oppdateringstoken for {clientId}" }, + "suspend": { + "description": "Skal vi lukke tilkoblingen til serveren etter å ha vært gjemt i 5 minutter?", + "header": "Lukk tilkoblingen automatisk" + }, "themes": { "dropdown_label": "Tema", "error_no_theme": "Ingen temaer er tilgjengelig.", diff --git a/translations/frontend/nl.json b/translations/frontend/nl.json index 02a13c7da4..7e09673c70 100644 --- a/translations/frontend/nl.json +++ b/translations/frontend/nl.json @@ -1431,6 +1431,7 @@ "delete_confirm": "Weet je zeker dat je deze integratie wilt verwijderen?", "device_unavailable": "apparaat niet beschikbaar", "devices": "{count} {count, plural,\n one {apparaat}\n other {apparaten}\n}", + "documentation": "Documentatie", "entities": "{count} {count, plural,\n one {entiteit}\n other {entiteiten}\n}", "entity_unavailable": "entiteit niet beschikbaar", "firmware": "Firmware: {version}", @@ -1940,29 +1941,43 @@ }, "node_management": { "add_to_group": "Toevoegen aan groep", + "entities": "Entiteiten van dit knooppunt", "entity_info": "Entiteitsinformatie", "exclude_entity": "Sluit deze entiteit uit van Home Assistant", "group": "Groep", + "header": "Z-Wave Knooppunt-beheer", + "introduction": "Voer Z-Wave commando's uit die een enkel knooppunt beïnvloeden. Kies een knooppunt om een lijst met beschikbare commando's te zien.", + "nodes": "Knooppunten", + "nodes_hint": "Selecteer knooppunt om de opties per knooppunt te bekijken", "protection": "Bescherming", "remove_from_group": "Verwijderen uit groep", "set_protection": "Bescherming instellen" }, "ozw_log": { "header": "OZW-logboek", - "introduction": "Bekijk het logboek. 0 is het minimum (laadt het gehele logboek) en 1000 is het maximum. Laad toont een statisch logboek en staart wordt automatisch bijgewerkt met het laatst opgegeven aantal regels van het logboek." + "introduction": "Bekijk het logboek. 0 is het minimum (laadt het gehele logboek) en 1000 is het maximum. Laad toont een statisch logboek en staart wordt automatisch bijgewerkt met het laatst opgegeven aantal regels van het logboek.", + "load": "Laden", + "tail": "Staart" }, "services": { "add_node": "Node toevoegen", "add_node_secure": "Secure Node toevoegen", "cancel_command": "Opdracht annuleren", "heal_network": "Herstel Netwerk", + "heal_node": "Herstel node", + "node_info": "Node informatie", + "print_node": "Print node", "refresh_entity": "Entiteit vernieuwen", + "refresh_node": "Node verwijderen", + "remove_failed_node": "Verwijder gefaalde node", "remove_node": "Node verwijderen", + "replace_failed_node": "Vervang gefaalde node", "save_config": "Configuratie Opslaan", "soft_reset": "Soft Reset", "start_network": "Start netwerk", "stop_network": "Stop Netwerk", - "test_network": "Test Netwerk" + "test_network": "Test Netwerk", + "test_node": "Test node" }, "values": { "header": "Knooppunt waarden" @@ -2655,6 +2670,10 @@ "not_used": "Is nog nooit gebruikt", "token_title": "Token voor {clientId}" }, + "suspend": { + "description": "Moeten we de verbinding met de server verbreken na 5 minuten verborgen te zijn geweest?", + "header": "Verbinding automatisch verbreken" + }, "themes": { "dropdown_label": "Thema", "error_no_theme": "Geen thema's beschikbaar.", diff --git a/translations/frontend/nn.json b/translations/frontend/nn.json index 609bd201d0..3e8e390309 100644 --- a/translations/frontend/nn.json +++ b/translations/frontend/nn.json @@ -668,7 +668,7 @@ "actions": { "add": "Legg til handling", "delete": "Slett", - "delete_confirm": "Er det sekert du vil slettje?", + "delete_confirm": "Er du sikker på at du vil slette?", "duplicate": "Dupliser", "header": "Handlingar", "introduction": "Handlinga Home Assistant vil gjennomføre når automasjonen vert utløyst.", @@ -708,10 +708,10 @@ "conditions": { "add": "Legg til føresetnad", "delete": "Slett", - "delete_confirm": "Er det sekert du vil slettje?", + "delete_confirm": "Er du sikker på at du vil slette?", "duplicate": "Dupliser", "header": "Føresetnadar", - "introduction": "Føresetnadar er ein valfri del av automasjonsregelen og kan brukast til å hindre at ei handling vert gjennomført når den er utløyst. Føresetnadane liknar på utløysarane, men er veldig forskjellig frå dei. Ein utløysar vil sjå på hendingar som skjer i systemet, medan ein føresetnad berre ser på korleis systemet er akkuratt no. Ein utløysar kan observere at ein brytar blir skrudt på, medan ein føresetnad berre kan sjå om brytaren er på eller av. \n\n[Lær meir om føresetnadar.](https://home-assistant.io/docs/scripts/conditions/)", + "introduction": "Føresetnadar er valfrie og vil hindre vidare framgang i automasjonen med mindre alle føresetnadene er møtt.", "learn_more": "Lær meir om føresetnader", "name": "Betingelse", "type_select": "Føresetnadstype", @@ -771,7 +771,7 @@ "delete_confirm": "Er du sikker på at du vil slette?", "duplicate": "Dupliser", "header": "Utløysarar", - "introduction": "Utløysarar er det som startar ein prosess i ein automasjonsregel. Det er mogleg å spesifisere fleire utløysarar for same regel. Når ein utløysar startar, vil Home Assistant validere føresetnadane, dersom der er nokon, og så setje i gang handlinga.\n\n[Lær meir om utløysarar.](https://home-assistant.io/docs/automation/trigger/)", + "introduction": "Utløysarar er det som startar ein prosess i ein automasjonsregel. Det er mogleg å spesifisere fleire utløysarar for same regel. Når ein utløysar startar, vil Home Assistant validere føresetnadane, dersom der er nokon, og så setje i gang handlinga.", "learn_more": "Lær meir om utløysarar", "name": "Utløysar", "type_select": "Utløysartype", diff --git a/translations/frontend/pl.json b/translations/frontend/pl.json index ab994f8749..7d86564b8c 100644 --- a/translations/frontend/pl.json +++ b/translations/frontend/pl.json @@ -1431,6 +1431,7 @@ "delete_confirm": "Czy na pewno chcesz usunąć tę integrację?", "device_unavailable": "urządzenie niedostępne", "devices": "{count} {count, plural,\n one {urządzenie}\n few {urządzenia}\n many {urządzeń}\n other {urządzeń}\n}", + "documentation": "Dokumentacja", "entities": "{count} {count, plural,\n one {encja}\n few {encje}\n many {encji}\n other {encji}\n}", "entity_unavailable": "encja niedostępna", "firmware": "oprogramowanie: {version}", @@ -1583,7 +1584,7 @@ } }, "mqtt": { - "button": "Konfiguruj", + "button": "Konfiguracja", "description_listen": "Nasłuch tematu", "description_publish": "Opublikuj pakiet", "listening_to": "Nasłuchiwanie...", @@ -1784,7 +1785,7 @@ "caption": "Dodaj urządzenia", "description": "Dodaj urządzenia do sieci Zigbee" }, - "button": "Konfiguruj", + "button": "Konfiguracja", "caption": "ZHA", "cluster_attributes": { "attributes_of_cluster": "Atrybuty wybranego klastra", @@ -1905,7 +1906,7 @@ "no_zones_created_yet": "Wygląda na to, że nie utworzyłeś jeszcze żadnych stref." }, "zwave": { - "button": "Konfiguruj", + "button": "Konfiguracja", "caption": "Z-Wave", "common": { "index": "Indeks", @@ -2677,6 +2678,10 @@ "not_used": "Nigdy nie był używany", "token_title": "Token dla {clientId}" }, + "suspend": { + "description": "Czy połączenie z serwerem powinno być zamykane, jeśli jest ukryte przez 5 minut?", + "header": "Automatyczne zamykanie połączenia" + }, "themes": { "dropdown_label": "Motyw", "error_no_theme": "Brak dostępnych motywów.", diff --git a/translations/frontend/pt.json b/translations/frontend/pt.json index d25874f22f..d05b868f9f 100644 --- a/translations/frontend/pt.json +++ b/translations/frontend/pt.json @@ -52,9 +52,14 @@ "humidifier": { "mode": { "auto": "Auto", + "away": "Ausente", + "baby": "Bebê", + "boost": "Impulso", "comfort": "Conforto", "eco": "Eco", - "normal": "Normal" + "home": "Início", + "normal": "Normal", + "sleep": "Dormir" } } }, @@ -497,6 +502,7 @@ "menu": "Menu", "next": "Seguinte", "no": "Não", + "overflow_menu": "Abrir menu Lovelace IU", "previous": "Anterior", "refresh": "Atualizar", "save": "Guardar", @@ -519,6 +525,11 @@ "clear": "Limpar", "show_areas": "Mostrar áreas" }, + "date-range-picker": { + "end_date": "Data de fim", + "select": "Selecione", + "start_date": "Data de início" + }, "device-picker": { "clear": "Apagar", "device": "Dispositivo", @@ -617,6 +628,7 @@ "max": "Valor máximo", "min": "Valor mínimo", "mode": "Modo de exibição", + "slider": "Controlador deslizante", "step": "Tamanho do passo", "unit_of_measurement": "Unidade de medida" }, @@ -706,10 +718,11 @@ }, "zha_device_info": { "buttons": { - "add": "Adicionar Dispositivos", + "add": "Adicionar dispositivos através deste dispositivo", + "clusters": "Gerir utilizadores", "reconfigure": "Reconfigurar Dispositivo", "remove": "Remover Dispositivo", - "zigbee_information": "Informação Zigbee" + "zigbee_information": "Assinatura do dispositivo Zigbee" }, "confirmations": { "remove": "Tem a certeza que deseja remover este dispositivo?" @@ -729,7 +742,7 @@ "unknown": "Desconhecido", "zha_device_card": { "area_picker_label": "Área", - "device_name_placeholder": "Nome do utilizador", + "device_name_placeholder": "Alterar o nome do dispositivo", "update_name_button": "Atualizar Nome" } } @@ -756,7 +769,7 @@ "connection_lost": "Ligação perdida. A ligar de novo...", "service_call_failed": "Falha ao chamar o serviço {service}.", "started": "Home Assistant já iniciou", - "starting": "Home Assistant está a inicializar, nem tudo estará disponivel até o processo concluir.", + "starting": "Home Assistant está a inicializar, nem tudo estará disponível até o processo concluir.", "triggered": "Despoletado {name}" }, "panel": { @@ -1076,7 +1089,7 @@ }, "integrations": "Integrações", "integrations_introduction": "As integrações para o Home Assistant Cloud permitem-lhe ligar-se aos serviços na nuvem sem ter de expor publicamente o seu Home Assistant na Internet.", - "integrations_introduction2": "Consulte o site para ", + "integrations_introduction2": "Consulte o site para", "integrations_link_all_features": " todas as funcionalidades disponíveis", "manage_account": "Gerir conta", "nabu_casa_account": "Conta Nabu Casa", @@ -1135,12 +1148,12 @@ "webhook_for": "Webhook para {name}" }, "forgot_password": { - "check_your_email": "Verifique o seu e-mail para obter instruções sobre como redefinir a sua senha.", + "check_your_email": "Verifique o seu e-mail para obter instruções sobre como redefinir a sua palavra-passe.", "email": "", "email_error_msg": "E-mail inválido", "instructions": "Introduza o seu endereço de e-mail e nós lhe enviaremos um link para redefinir sua password.", "send_reset_email": "Enviar e-mail de redefinição", - "subtitle": "Esquecer a senha", + "subtitle": "Esqueceu-se da palavra-passe?", "title": "Esqueci-me da palavra-passe" }, "google": { @@ -1158,7 +1171,7 @@ "dismiss": "Fechar", "email": "", "email_error_msg": "E-mail inválido", - "forgot_password": "Esqueceu-se da senha?", + "forgot_password": "Esqueceu-se da palavra-passe?", "introduction": "O Home Assistant Cloud fornece uma conexão remota segura à sua instância enquanto estiver fora de casa. Também permite que você se conecte com serviços que apenas utilizam a nuvem: Amazon Alexa e Google Assistant.", "introduction2": "Este serviço é gerido pelo nosso parceiro ", "introduction2a": ", uma empresa criada pelos fundadores do Home Assistant e do Hass.io.", @@ -1185,7 +1198,7 @@ "information2": "A avaliação gratuita dará acesso a todos os benefícios do Home Assistant Cloud, incluindo:", "information3": "Este serviço é executado pelo nosso parceiro", "information3a": ", uma empresa criada pelos fundadores do Home Assistant e do Hass.io.", - "information4": "Ao registrar uma conta, concorda com os seguintes termos e condições.", + "information4": "Ao registar uma conta, concorda com os seguintes termos e condições.", "link_privacy_policy": "Política de privacidade", "link_terms_conditions": "Termos e condições", "password": "Palavra-passe", @@ -1235,6 +1248,7 @@ "attributes_set": "Os seguintes atributos de uma entidade são definidos por meio de programação.", "caption": "Personalização", "description": "Personalizar as suas entidades", + "different_include": "Possivelmente através de um domínio, um glob ou um include diferente.", "pick_attribute": "Escolha um atributo para substituir.", "picker": { "entity": "Entidade", @@ -1283,7 +1297,7 @@ "device_not_found": "Dispositivo não encontrado.", "entities": { "add_entities_lovelace": "Adicionar ao Lovelace", - "disabled_entities": "+{count} {count, plural,\n uma {entity}\n outras {entities}\n}", + "disabled_entities": "+{count} {count, plural,\n one {entidade inactiva}\n other {entidades inactivas}\n}", "entities": "Entidades", "hide_disabled": "Mostrar entidades desativadas", "none": "Este dispositivo não possui entidades" @@ -1292,6 +1306,7 @@ "no_devices": "Sem dispositivos", "scene": { "create": "Criar cena com o dispositivo", + "no_scenes": "Sem cenários", "scenes": "Cenas" }, "scenes": "Cenas", @@ -1338,6 +1353,7 @@ "button": "Remover selecionado", "confirm_partly_text": "Você pode remover apenas {removable} das {selected} entidades selecionadas. As entidades só podem ser removidas quando a integração deixar de suportá-las. Por vezes é necessário reiniciar o Home Assistant antes de poder remover as entidades de uma integração removida. Tem a certeza de que deseja remover as entidades removíveis?", "confirm_partly_title": "Somente {número} entidades selecionadas podem ser removidas.", + "confirm_text": "Deve remover da configuração do Lovelace e das automações se contêm estas entidades", "confirm_title": "Deseja remover {number} entidades?" }, "selected": "Selecionou {number}", @@ -1376,12 +1392,15 @@ "input_boolean": "Interruptor", "input_datetime": "Data e/ou hora", "input_number": "Número", + "input_select": "Lista de selecção", "input_text": "Texto" } }, "info": { "built_using": "Construído com", + "caption": "Informação", "custom_uis": "IUs personalizados:", + "description": "Saiba mais sobre o Home Assistant Cloud", "developed_by": "Desenvolvido por um punhado de pessoas incríveis.", "documentation": "Documentação", "frontend": "", @@ -1397,6 +1416,11 @@ "system_health_error": "O componente System Health não está carregado. Adicione 'system_health:' ao configuration.yaml", "title": "Informações" }, + "integration_panel_move": { + "link_integration_page": "Página de Integrações", + "missing_zha": "Falta o painel de configuração do Z-Wave? Foi movido para a entrada do Z-Wave na {integrations_page} .", + "missing_zwave": "Falta o painel de configuração do Z-Wave? Foi movido para a entrada do Z-Wave na {integrations_page} ." + }, "integrations": { "add_integration": "Adicionar integração", "caption": "Integrações", @@ -1406,8 +1430,9 @@ "delete_button": "Apagar {integration}", "delete_confirm": "Tem a certeza que pretende apagar esta integração?", "device_unavailable": "Dispositivo indisponível", - "devices": "{count} {count, plural,\n um {entity}\n outros {entities}\n}", - "entities": "{count} {count, plural,\n uma {entity}\n outras {entities}\n}", + "devices": "{count} {count, plural,\n one {dispositivo}\n other {dispositivos}\n}", + "documentation": "Documentação", + "entities": "{count} {count, plural,\n one {entidade}\n other {entidades}\n}", "entity_unavailable": "Entidade indisponível", "firmware": "Firmware: {version}", "hub": "Conectado via", @@ -1469,7 +1494,9 @@ }, "introduction": "Aqui é possível configurar os seus componentes e o Home Assistant. Nem tudo é possível de ser configurado a partir da Interface Gráfica, mas estamos a trabalhar para isso.", "logs": { + "caption": "Logs", "clear": "Limpar", + "description": "Exibir os logs do Assistente Inicial", "details": "Detalhes do log ( {level} )", "load_full_log": "Carregar log completo do Home Assistant", "loading_log": "A carregar o log de erros...", @@ -1678,8 +1705,11 @@ "core": "Recarregar localização e personalizações", "group": "Recarregar grupos", "heading": "A recarregar a configuração YAML", + "input_boolean": "Recarregar booleanos de entrada", "input_datetime": "Recarregar input date times", - "input_select": "Recarregar da", + "input_number": "Recarregar input numbers", + "input_select": "Recarregar input selects", + "input_text": "Recarregar input texts", "introduction": "Algumas partes do Home Assistant podem ser recarregadas sem a necessidade de reiniciar. Ao carregar em Recarregar a configuração irá descartar a configuração atual e carregar a nova.", "person": "Recarregar pessoas", "scene": "Recarregar cenas", @@ -1728,7 +1758,7 @@ "owner": "Proprietário", "system_generated": "Gerado pelo sistema", "system_generated_users_not_editable": "Não foi possível atualizar os utilizadores gerados pelo sistema.", - "system_generated_users_not_removable": "Não é possível remover usuários gerados pelo sistema.", + "system_generated_users_not_removable": "Não é possível remover utilizadores gerados pelo sistema.", "unnamed_user": "Utilizador sem nome", "update_user": "Atualizar" }, @@ -1738,12 +1768,16 @@ "name": "Nome", "system": "Sistema" } - } + }, + "users_privileges_note": "O grupo de utilizadores é um trabalho em progresso. O utilizador não poderá administrar a instância por meio da interface de utilizador. Ainda estamos a auditar todos os endpoints da API de gestão para garantir que eles limitam corretamente o acesso aos administradores." }, "zha": { "add_device_page": { + "discovered_text": "Os dispositivos aparecem aqui uma vez descobertos.", "discovery_text": "Os dispositivos descobertos aparecerão aqui. Siga as instruções para o(s) seu(s) dispositivo(s) e coloque o(s) dispositivo(s) em modo de emparelhamento.", "header": "Zigbee Home Automation - Adicionar dispositivos", + "no_devices_found": "Nenhum dispositivo encontrado, verifique se eles estão no modo de emparelhamento e mantenha-os acordados enquanto a descoberta está em execução.", + "pairing_mode": "Verifique se seus dispositivos estão no modo de emparelhamento. Verifique as instruções do seu dispositivo sobre como fazer isso.", "search_again": "Pesquisar Novamente", "spinner": "À procura de dispositivos ZHA Zigbee..." }, @@ -1751,6 +1785,7 @@ "caption": "Adicionar Dispositivos", "description": "Adicionar dispositivos à rede Zigbee" }, + "button": "Configurar", "caption": "ZHA", "cluster_attributes": { "attributes_of_cluster": "Atributos do cluster selecionado", @@ -1829,6 +1864,9 @@ "header": "Gestão ", "introduction": "Comandos que afetam toda a rede" }, + "network": { + "caption": "Rede" + }, "node_management": { "header": "Gestão dispositivos", "help_node_dropdown": "Selecione um dispositivo para visualizar as opções por dispositivo.", @@ -1868,6 +1906,7 @@ "no_zones_created_yet": "Parece que você ainda não criou nenhuma zona." }, "zwave": { + "button": "Configurar UI", "caption": "Z-Wave", "common": { "index": "Índice", @@ -1901,25 +1940,52 @@ "true": "Verdadeiro" }, "node_management": { - "exclude_entity": "Excluir esta entidade do Home Assistant" + "add_to_group": "Adicionar ao Grupo", + "entities": "Entidades deste nó", + "entity_info": "Definições da entidade", + "exclude_entity": "Excluir esta entidade do Home Assistant", + "group": "Grupo", + "header": "Gestão de nó Z-Wave", + "introduction": "Execute comandos do Z-Wave que afetam um único nó. Escolha um nó para ver uma lista dos comandos disponíveis.", + "max_associations": "Máximo de Associações:", + "node_group_associations": "Associações de grupos de nós", + "node_protection": "Proteção de nó", + "node_to_control": "Configurar opçoes do nó", + "nodes": "Nós", + "nodes_hint": "Selecione o nó para visualizar as opções por nó", + "nodes_in_group": "Outros nós neste grupo:", + "pooling_intensity": "Intensidade de interrogação", + "protection": "Proteção", + "remove_broadcast": "Remover Difusão", + "remove_from_group": "Remover do Grupo", + "set_protection": "Definir proteção" }, "ozw_log": { "header": "Log OZW", - "introduction": "Veja o log. 0 é o mínimo (carrega o log inteiro) e 1000 é o máximo. Ao carregar irá ser mostrado um log estático e a cauda será atualizada automaticamente com o último número especificado de linhas do log." + "introduction": "Veja o log. 0 é o mínimo (carrega o log inteiro) e 1000 é o máximo. Ao carregar irá ser mostrado um log estático e a cauda será atualizada automaticamente com o último número especificado de linhas do log.", + "last_log_lines": "Número de últimas linhas de registos", + "load": "Carga", + "tail": "Cauda" }, "services": { "add_node": "Adicionar nó", "add_node_secure": "Adicionar nó seguro", "cancel_command": "Cancelar comando", "heal_network": "Curar a Rede", + "heal_node": "Adicionar nó", "node_info": "Informação do Nó", + "print_node": "Nó de impressão", "refresh_entity": "Actualizar entidade", + "refresh_node": "Atualizar nó", + "remove_failed_node": "Remover nó com falha", "remove_node": "Remover nó", + "replace_failed_node": "Substituir nó com falha", "save_config": "Guardar configuração", "soft_reset": "Reinicio suave", "start_network": "Iniciar a rede", "stop_network": "Parar a rede", - "test_network": "Testar rede" + "test_network": "Testar rede", + "test_node": "Nó de Teste" }, "values": { "header": "Valores do Nó" @@ -2109,12 +2175,14 @@ } }, "generic": { + "aspect_ratio": "Rácio de Proporção", "attribute": "Atributo", "camera_image": "Entidade de Câmera", "camera_view": "Vista da Câmera", "double_tap_action": "Ação de toque duplo", "entities": "Entidades", "entity": "Entidade", + "hold_action": "Ação de retenção", "hours_to_show": "Horas a mostrar", "icon": "Ícone", "icon_height": "Altura do ícone", @@ -2151,6 +2219,7 @@ "name": "Agrupamento Horizontal" }, "humidifier": { + "description": "O cartão Termóstato dá-lhe o controle da sua entidade de climatização. Permitindo alterar a temperatura e o modo dessa entidade.", "name": "Humidificador" }, "iframe": { @@ -2188,7 +2257,8 @@ "name": "Entidade de imagem" }, "picture-glance": { - "description": "O cartão Vista de imagem mostra uma imagem e os estados das entidades correspondentes como um ícone. As entidades do lado direito permitem alternar ações, outras mostram a opção mais informações." + "description": "O cartão Vista de imagem mostra uma imagem e os estados das entidades correspondentes como um ícone. As entidades do lado direito permitem alternar ações, outras mostram a opção mais informações.", + "name": "Vista sobre imagem" }, "picture": { "description": "O cartão de imagem permite definir uma imagem a ser usada para navegação em vários pontos na sua interface ou para chamar um serviço.", @@ -2345,7 +2415,7 @@ "entity_non_numeric": "A entidade é não numérica: {entity}", "entity_not_found": "Entidade não disponível: {entity}", "entity_unavailable": "{entity} está indisponível no momento", - "starting": "Home Assistant está a inicializar, nem tudo está já disponivel" + "starting": "Home Assistant está a inicializar, nem tudo está já disponível" } }, "mailbox": { @@ -2608,6 +2678,10 @@ "not_used": "Nunca foi utilizado", "token_title": "Atualizar o token de {clientId}" }, + "suspend": { + "description": "Devemos fechar a conexão com o servidor depois de ficar oculto por 5 minutos?", + "header": "Fechar automaticamente a conexão" + }, "themes": { "dropdown_label": "Tema", "error_no_theme": "Não há temas disponíveis.", diff --git a/translations/frontend/ru.json b/translations/frontend/ru.json index fd2989794a..e62fccb3d5 100644 --- a/translations/frontend/ru.json +++ b/translations/frontend/ru.json @@ -525,6 +525,9 @@ "clear": "Очистить", "show_areas": "Показать помещения" }, + "data-table": { + "search": "Поиск" + }, "date-range-picker": { "end_date": "До даты", "select": "Выбрать", @@ -1356,6 +1359,7 @@ "confirm_text": "Вы должны удалить эти объекты из конфигурации Lovelace и из правил автоматизации.", "confirm_title": "Вы уверены, что хотите удалить выбранные объекты? ({number})" }, + "search": "Поиск объектов", "selected": "Выбрано: {number}", "status": { "disabled": "Скрыто", @@ -1386,7 +1390,8 @@ "entity_id": "ID объекта", "name": "Название", "type": "Тип" - } + }, + "no_helpers": "У Вас еще нет вспомогательных элементов." }, "types": { "input_boolean": "Переключатель", @@ -1440,7 +1445,7 @@ "no_area": "Не указано", "no_device": "Объекты без устройств", "no_devices": "Эта интеграция не имеет устройств", - "options": "Параметры", + "options": "Настройки", "rename": "Переименовать", "restart_confirm": "Перезапустите Home Assistant, чтобы завершить удаление этой интеграции", "settings_button": "Настройки интеграции {integration}", @@ -1472,7 +1477,7 @@ "ignore": { "confirm_delete_ignore": "Эта интеграция станет доступна для обнаружения системой. Обнаружение произойдёт автоматически в течении некоторого времени, либо после перезапуска системы.", "confirm_delete_ignore_title": "Прекратить игнорировать {name}?", - "confirm_ignore": "Вы сможете снова включить обнаружение этой интеграции системой. Для этого откройте меню в правом верхнем углу и нажмите «Показать игнорируемые интеграции».", + "confirm_ignore": "Вы сможете снова включить обнаружение этой интеграции. Для этого откройте меню в правом верхнем углу и нажмите «Показать игнорируемые интеграции».", "confirm_ignore_title": "Игнорировать обнаружение интеграции {name}?", "hide_ignored": "Скрыть игнорируемые интеграции", "ignore": "Игнорировать", @@ -1490,7 +1495,8 @@ "note_about_integrations": "Пока что не все интеграции могут быть настроены через пользовательский интерфейс.", "note_about_website_reference": "Все доступные интеграции Вы можете найти на ", "rename_dialog": "Изменение названия интеграции", - "rename_input_label": "Название" + "rename_input_label": "Название", + "search": "Поиск интеграций" }, "introduction": "Здесь можно настроить Home Assistant. Пока что не все настройки доступны из интерфейса, но мы работаем над этим.", "logs": { @@ -1584,7 +1590,7 @@ } }, "mqtt": { - "button": "Настройка", + "button": "Настройки", "description_listen": "Подписаться на топик", "description_publish": "Опубликовать данные", "listening_to": "Подписано на", @@ -1785,7 +1791,7 @@ "caption": "Добавить устройства", "description": "Добавить устройства в сеть Zigbee" }, - "button": "Настройка", + "button": "Настройки", "caption": "Zigbee Home Automation", "cluster_attributes": { "attributes_of_cluster": "Атрибуты выбранного кластера", @@ -1836,7 +1842,7 @@ "adding_members": "Добавление участников", "caption": "Группы", "create": "Создать группу", - "create_group": "Zigbee Home Automation - Создать группу", + "create_group": "Создание новой группы", "create_group_details": "Укажите необходимые данные для создания новой группы Zigbee", "creating_group": "Создание группы", "description": "Создавайте и изменяйте группы Zigbee", @@ -1906,7 +1912,7 @@ "no_zones_created_yet": "У Вас еще нет добавленных зон." }, "zwave": { - "button": "Настройка", + "button": "Настройки", "caption": "Z-Wave", "common": { "index": "Индекс", @@ -2194,6 +2200,7 @@ "name": "Название", "no_theme": "Нет темы", "refresh_interval": "Интервал обновления", + "search": "Поиск", "secondary_info_attribute": "Дополнительная информация", "show_icon": "Значок", "show_name": "Название", @@ -2314,7 +2321,8 @@ "edit_lovelace": { "edit_title": "Изменить заголовок", "explanation": "Этот заголовок будет показан над всеми Вашими карточками и вкладками.", - "header": "Заголовок для Lovelace" + "header": "Заголовок для Lovelace", + "title": "Заголовок" }, "edit_view": { "add": "Добавить вкладку", @@ -2620,7 +2628,7 @@ }, "force_narrow": { "description": "Боковая панель будет скрыта, аналогично мобильному интерфейсу", - "header": "Всегда скрывать боковую панель" + "header": "Скрывать боковую панель" }, "is_owner": "Вы являетесь владельцем.", "language": { @@ -2678,6 +2686,10 @@ "not_used": "Никогда не использовался", "token_title": "Токен обновления для {clientId}" }, + "suspend": { + "description": "Закрыть соединение с сервером, если окно было скрыто в течении пяти и более минут", + "header": "Закрывать соединение автоматически" + }, "themes": { "dropdown_label": "Тема", "error_no_theme": "Нет доступных тем.", diff --git a/translations/frontend/sv.json b/translations/frontend/sv.json index d0daac646c..3acd239aa3 100644 --- a/translations/frontend/sv.json +++ b/translations/frontend/sv.json @@ -48,6 +48,19 @@ "none": "Ingen", "sleep": "Sover" } + }, + "humidifier": { + "mode": { + "auto": "Automatisk", + "away": "Borta", + "baby": "Baby", + "boost": "Boost-läge", + "comfort": "Komfort", + "eco": "Eco", + "home": "Hemma", + "normal": "Normal", + "sleep": "Viloläge" + } } }, "state_badge": { @@ -388,6 +401,12 @@ "reverse": "Baklänges", "speed": "Hastighet" }, + "humidifier": { + "humidity": "Målfuktighet", + "mode": "Läge", + "on_entity": "{name} på", + "target_humidity_entity": "{name} målfuktighet" + }, "light": { "brightness": "Ljusstyrka", "color_temperature": "Färgtemperatur", @@ -506,6 +525,11 @@ "clear": "Rensa", "show_areas": "Visa områden" }, + "date-range-picker": { + "end_date": "Slutdatum", + "select": "Välj", + "start_date": "Startdatum" + }, "device-picker": { "clear": "Rensa", "device": "Enhet", @@ -695,6 +719,7 @@ "zha_device_info": { "buttons": { "add": "Lägg till enheter via den här enheten", + "clusters": "Hantera kluster", "reconfigure": "Konfigurera om enheten", "remove": "Ta bort enhet", "zigbee_information": "Zigbee-information" @@ -1391,6 +1416,11 @@ "system_health_error": "Systemhälsokomponenten har inte lästs in. Lägg till 'system_health:' i configuration.yaml", "title": "Info" }, + "integration_panel_move": { + "link_integration_page": "integrationssidan", + "missing_zha": "Saknar du konfigurationspanelen för ZHA? Den är flyttad till {integrations_page} ", + "missing_zwave": "Saknar du konfigurationspanelen för Z-Wave? Den är flyttad till {integrations_page} " + }, "integrations": { "add_integration": "Lägg till integration", "caption": "Integrationer", @@ -1401,6 +1431,7 @@ "delete_confirm": "Är du säker på att du vill radera denna integration?", "device_unavailable": "enhet otillgänglig", "devices": "{count} {count, plural,\n one {enhet}\n other {enheter}\n}", + "documentation": "Dokumentation", "entities": "{count} {count, plural,\n one {entitet}\n other {entiteter}\n}", "entity_unavailable": "entitet otillgänglig", "firmware": "Firmware: {version}", @@ -1553,6 +1584,7 @@ } }, "mqtt": { + "button": "Konfigurera", "description_listen": "Lyssna på ett ämne", "description_publish": "Publicera ett paket", "listening_to": "Lyssnar på", @@ -1737,7 +1769,7 @@ "system": "System" } }, - "users_privileges_note": "Användar gruppen är under konstruktion. Användaren kommer inte att kunna administrera instansen via användargränssnittet. Vi granskar fortfarande alla API-slutpunkter för att försäkra att de korrekt begränsar åtkomst till endast administratörer." + "users_privileges_note": "Användargruppen är under konstruktion. Användaren kommer inte att kunna administrera instansen via användargränssnittet. Vi granskar fortfarande alla API-slutpunkter för att försäkra att de korrekt begränsar åtkomst till endast administratörer." }, "zha": { "add_device_page": { @@ -1930,10 +1962,10 @@ }, "ozw_log": { "header": "OZW-logg", - "introduction": "Visa loggen. 0 är det minsta (laddar hela loggen) och 1000 är det maximala. Ladda visar en statisk logg och svansen uppdateras automatiskt med det sist angivna antalet rader i loggen.", + "introduction": "Visa loggen. 0 är det minsta (laddar hela loggen) och 1000 är det maximala. Ladda visar en statisk logg och medan Följ uppdateras automatiskt med det sist angivna antalet rader i loggen.", "last_log_lines": "Antal sista loggrader", "load": "Ladda", - "tail": "Svans" + "tail": "Följ" }, "services": { "add_node": "Lägg till nod", @@ -2030,11 +2062,23 @@ }, "history": { "period": "Period", + "ranges": { + "last_week": "Föregående vecka", + "this_week": "Denna vecka", + "today": "Idag", + "yesterday": "Igår" + }, "showing_entries": "Visar poster för" }, "logbook": { "entries_not_found": "Inga loggboksposter hittades.", "period": "Period", + "ranges": { + "last_week": "Föregående vecka", + "this_week": "Denna vecka", + "today": "Idag", + "yesterday": "Igår" + }, "showing_entries": "Visar poster för" }, "lovelace": { @@ -2174,6 +2218,10 @@ "description": "Med Horizontal Stack-kortet kan du stapla ihop flera kort, så att de alltid sitter bredvid varandra i utrymmet av en kolumn.", "name": "Vågrät trave" }, + "humidifier": { + "description": "Termostatkortet kontrollerar din klimatenhet så att du kan ändra luftfuktigheten och läge.", + "name": "Luftfuktare" + }, "iframe": { "description": "Webbsidakortet låter dig bädda in din favoritwebbplats direkt i Home Assistant.", "name": "Webbsida" @@ -2630,6 +2678,10 @@ "not_used": "Har aldrig använts", "token_title": "Uppdatera token för {clientId}" }, + "suspend": { + "description": "Ska vi stänga anslutningen till servern efter att den varit gömd i 5 minuter?", + "header": "Stäng anslutningen automatiskt" + }, "themes": { "dropdown_label": "Tema", "error_no_theme": "Inga teman finns tillgängliga.", diff --git a/translations/frontend/th.json b/translations/frontend/th.json index cb7f26dd0a..06203fdf6e 100644 --- a/translations/frontend/th.json +++ b/translations/frontend/th.json @@ -448,7 +448,7 @@ "components": { "entity": { "entity-picker": { - "entity": "เลือกเอนทิตี" + "entity": "เอนทิตี" } }, "history_charts": { @@ -743,7 +743,7 @@ }, "cloud": { "caption": "Home Assistant Cloud", - "description_features": "ควบคุมการทำงานเมื่อออกจากบ้านร่วมกับ Alexa และ Google Assistant", + "description_features": "ควบคุมการทำงานจากนอกบ้าน ร่วมกับ Alexa และ Google Assistant", "description_login": "ลงชื่อเข้าใช้เป็น {email}", "description_not_login": "ยังไม่ได้เข้าสู่ระบบ", "forgot_password": { @@ -793,7 +793,13 @@ } }, "devices": { - "caption": "อุปกรณ์" + "caption": "อุปกรณ์", + "scene": { + "create": "สร้างฉากด้วยอุปกรณ์", + "no_scenes": "ไม่มีฉาก", + "scenes": "ฉาก" + }, + "scenes": "ฉาก" }, "entities": { "caption": "เอนทิตีรีจิสทรี", @@ -835,7 +841,7 @@ "new": "สร้างการทำงานร่วมกันอันใหม่", "none": "ยังไม่มีการกำหนดค่าใดๆ เลย" }, - "introduction": "ดูสิ! สามารถกำหนดค่าส่วนประกอบต่างๆ ของคุณได้ด้วย รวมถึงส่วนของระบบของ Home Assistant เลยเชียวนะ! ถึงแม้ตอนนี้ส่วนการแสดงผลยังทำไม่ได้ก็ตาม แต่เรากำลังพัฒนามันอยู่ คงจะใช้ได้เร็วๆ นี้ละ", + "introduction": "ที่นี่คือที่สำหรับกำหนดค่าองค์ประกอบต่างๆ รวมถึงระบบของ Home Assistant ไม่ใช่ทุกอย่างที่จะสามารถตั้งค่าได้ผ่าน UI ในขณะนี้ แต่เรากำลังพัฒนาเพิ่มเติมอยู่นะ", "mqtt": { "title": "MQTT" }, @@ -849,6 +855,14 @@ "name": "ชื่อ" } }, + "scene": { + "editor": { + "entities": { + "add": "เพิ่มเอนทิตี", + "delete": "ลบเอนทิตี" + } + } + }, "script": { "caption": "สคริปต์", "description": "สร้างและแก้ไขสคริปต์", @@ -1023,7 +1037,7 @@ }, "header": "แก้ไข UI", "menu": { - "raw_editor": "ตัวแก้ไข config แบบดิบๆ" + "raw_editor": "ตัวแก้ไขไฟล์ตั้งค่าแบบหยาบ" }, "migrate": { "header": "การกำหนดค่าไม่ถูกต้อง", diff --git a/translations/frontend/uk.json b/translations/frontend/uk.json index 8c2c8fb8eb..c28066bd67 100644 --- a/translations/frontend/uk.json +++ b/translations/frontend/uk.json @@ -48,6 +48,11 @@ "none": "Немає", "sleep": "Сон" } + }, + "humidifier": { + "mode": { + "normal": "Нормальний" + } } }, "state_badge": { @@ -388,6 +393,9 @@ "reverse": "На себе", "speed": "Швидкість" }, + "humidifier": { + "mode": "Режим" + }, "light": { "brightness": "Яскравість", "color_temperature": "Температура кольору", @@ -474,6 +482,7 @@ "close": "Закрити", "delete": "Видалити", "loading": "Завантаження", + "menu": "Меню", "no": "Ні", "save": "Зберегти", "successfully_deleted": "Успішно видалено", @@ -487,6 +496,10 @@ "clear": "Очистити", "show_areas": "Показати приміщення" }, + "date-range-picker": { + "end_date": "Дата закінчення", + "select": "Вибрати" + }, "device-picker": { "clear": "Очистити", "device": "Пристрій", @@ -538,7 +551,8 @@ "editor": { "confirm_delete": "Ви впевнені, що хочете видалити цей об'єкт?", "delete": "Видалити", - "entity_id": "Ідентифікатор об'єкта" + "entity_id": "Ідентифікатор об'єкта", + "update": "Оновити" } }, "generic": { @@ -814,6 +828,8 @@ "introduction": "Використовуйте автоматизацію, щоб оживити ваш будинок", "load_error_not_editable": "Можна редагувати лише секцію automations у файлі automations.yaml", "load_error_unknown": "Помилка під час завантаження автоматизації ({err_no}).", + "move_down": "Рухатися вниз", + "move_up": "Рухатися вгору", "save": "Зберегти", "triggers": { "add": "Додати тригер", @@ -1089,7 +1105,9 @@ "edit_requires_storage": "Редактор відключено, оскільки конфігурація вже збережена у configuration.yaml.", "elevation": "Висота", "elevation_meters": "метрів", + "external_url": "Зовнішня URL-адреса", "imperial_example": "Фаренгейти, фунти", + "internal_url": "Внутрішня URL-адреса", "latitude": "Широта", "location_name": "Заголовок для вашого Home Assistant", "longitude": "Довгота", @@ -1116,6 +1134,7 @@ "different_include": "Можливо, через домен, glob або інше включення.", "pick_attribute": "Виберіть атрибут, який слід замінити", "picker": { + "entity": "Об'єкт", "header": "Налаштування", "introduction": "Налаштування атрибутів на об'єкт. Додані / відредаговані налаштування набудуть чинності негайно. Видалені налаштування набудуть чинності після оновлення об'єкта." }, @@ -1171,7 +1190,8 @@ }, "scripts": "Скрипти", "unknown_error": "Невідома помилка", - "unnamed_device": "Пристрій без імені" + "unnamed_device": "Пристрій без імені", + "update": "Оновити" }, "entities": { "caption": "Реєстр об'єктів", @@ -1215,21 +1235,35 @@ }, "header": "Налаштуваня Home Assistant", "helpers": { + "caption": "Помічники", + "description": "Елементи, які можуть допомогти побудувати автоматизацію.", "dialog": { + "add_helper": "Додати помічника", + "add_platform": "Додати {platform}", "create": "Створити" }, "picker": { + "add_helper": "Додати помічника", "headers": { - "name": "Назва" + "editable": "Можна редагувати", + "entity_id": "Ідентифікатор об'єкта", + "name": "Назва", + "type": "Тип" } }, "types": { - "input_datetime": "Дата та/або час" + "input_boolean": "Тумблер", + "input_datetime": "Дата та/або час", + "input_number": "Номер", + "input_select": "Випадання", + "input_text": "Текст" } }, "info": { "built_using": "Побудований за допомогою", + "caption": "Інформація", "custom_uis": "Спеціальні інтерфейси користувача:", + "description": "Інформація про інсталяцію Home Assistant", "developed_by": "Розроблена купою дивовижних людей.", "frontend": "інтерфейс користувача", "frontend_version": "Версія Frontend: {version} - {type}", @@ -1251,6 +1285,7 @@ "delete_button": "Видалити {integration}", "delete_confirm": "Ви впевнені, що хочете видалити цю інтеграцію?", "device_unavailable": "пристрій недоступний", + "documentation": "Документація", "entity_unavailable": "Недоступний", "firmware": "Прошивка: {version}", "hub": "Підключено через", @@ -1309,6 +1344,7 @@ }, "introduction": "Тут можна налаштувати свої компоненти та Home Assistant. Не все можна налаштувати з інтерфейсу користувача, але ми працюємо над цим.", "logs": { + "caption": "Журнали", "clear": "Очистити", "details": "Деталі журналу ({level})", "load_full_log": "Завантажте повний журнал Home Assistant", @@ -1320,29 +1356,53 @@ "title": "Лог" }, "lovelace": { + "caption": "Інформаційні панелі Lovelace", "dashboards": { + "cant_edit_default": "Стандартну інформаційну панель Lovelace не можна редагувати з інтерфейсу користувача. Ви можете приховати це, встановивши іншу інформаційну панель за замовчуванням.", + "cant_edit_yaml": "Інформаційні панелі, визначені в YAML, не можна редагувати з інтерфейсу користувача. Змініть їх у config.yaml.", + "caption": "Інформаційні панелі", "conf_mode": { + "storage": "Керований інтерфейсом користувача", "yaml": "Файл YAML" }, + "confirm_delete": "Ви впевнені, що хочете видалити цю інформаційну панель?", "default_dashboard": "Це стандартна панель", "detail": { "create": "Створити", "delete": "Видалити", "dismiss": "Закрити", + "edit_dashboard": "Редагувати інформаційну панель", + "icon": "Іконка", + "new_dashboard": "Додати нову панель", + "remove_default": "Видалити за замовчуванням на цьому пристрої", "require_admin": "Лише адміністратор", + "set_default": "Встановити за замовчуванням на цьому пристрої", + "show_sidebar": "Показати на бічній панелі", + "title": "Назва", + "title_required": "Назва обов'язкова.", "update": "Оновити", - "url": "URL-адреса" + "url": "URL-адреса", + "url_error_msg": "URL-адреса повинна містити - і не може містити пробілів або спеціальних символів, за винятком _ та -" }, "picker": { + "add_dashboard": "Додати панель", "headers": { + "conf_mode": "Метод конфігурації", + "default": "За замовчуванням", "filename": "Назва файлу", - "require_admin": "Лише адміністратор" + "require_admin": "Лише адміністратор", + "sidebar": "Показати на бічній панелі", + "title": "Назва" }, "open": "Відкрити" } }, + "description": "Налаштуйте панелі Lovelace", "resources": { "caption": "Ресурси", + "detail": { + "update": "Оновити" + }, "picker": { "add_resource": "Додати ресурс", "headers": { @@ -1359,6 +1419,7 @@ } }, "mqtt": { + "button": "Налаштувати", "description_listen": "Слухати тему", "description_publish": "Опублікувати пакет", "listening_to": "Слухати", @@ -1526,6 +1587,7 @@ "name": "Назва", "owner": "Власник", "system_generated": "Системний", + "system_generated_users_not_editable": "Не вдається оновити користувачів, створених системою.", "system_generated_users_not_removable": "Не вдається видалити користувачів, створених системою.", "unnamed_user": "Безіменний користувач", "update_user": "Оновити" @@ -1548,6 +1610,7 @@ "add": { "caption": "Додати пристрій" }, + "button": "Налаштувати", "caption": "ZHA", "cluster_attributes": { "attributes_of_cluster": "Атрибути вибраного кластера", @@ -1597,6 +1660,9 @@ "header": "Керування мережею", "introduction": "Команди, які впливають на всю мережу" }, + "network": { + "caption": "Мережа" + }, "node_management": { "header": "Керування пристроями", "help_node_dropdown": "Виберіть пристрій для перегляду параметрів на кожному пристрої.", @@ -1616,7 +1682,8 @@ "longitude": "Довгота", "passive": "Пасивний", "passive_note": "Пасивні зони приховані у front-end-і і не використовуються як місце для відстеження пристроїв. Це корисно, якщо ви просто хочете використовувати його для автоматизації.", - "radius": "Радіус" + "radius": "Радіус", + "update": "Оновити" }, "go_to_core_config": "Перейти до загальних налаштувань?", "home_zone_core_config": "Місцезнаходження вашої домашньої зони можна редагувати на сторінці загальних налаштувань. На даний час, радіус зони \"Головна\" не можна редагувати з адміністративної панелі. Ви хочете перейти до загальних налаштувань?", @@ -1624,6 +1691,7 @@ "no_zones_created_yet": "Схоже, ви ще не створили жодної зони." }, "zwave": { + "button": "Налаштувати", "caption": "Z-Wave", "common": { "index": "Індекс", @@ -1665,6 +1733,7 @@ "add_node_secure": "Додати захищений вузол", "cancel_command": "Скасувати команду", "heal_network": "Виправити мережу", + "refresh_entity": "Оновити", "remove_node": "Видалити вузол", "save_config": "Зберегти конфігурацію", "soft_reset": "Скидання", @@ -1747,11 +1816,23 @@ }, "history": { "period": "Період", + "ranges": { + "last_week": "Минулого тижня", + "this_week": "Цього тижня", + "today": "Сьогодні", + "yesterday": "Вчора" + }, "showing_entries": "Показані записи для" }, "logbook": { "entries_not_found": "Не знайдено записів журналу.", "period": "Період", + "ranges": { + "last_week": "Минулого тижня", + "this_week": "Цього тижня", + "today": "Сьогодні", + "yesterday": "Вчора" + }, "showing_entries": "Відображення записів за" }, "lovelace": { @@ -1779,6 +1860,10 @@ "add_item": "Додати елемент", "checked_items": "Позначені елементи", "clear_items": "Очистити позначені елементи" + }, + "starting": { + "description": "Home Assistant запускається, будь ласка, зачекайте ...", + "header": "Home Assistant запускається, будь ласка, зачекайте ..." } }, "changed_toast": { @@ -1860,6 +1945,9 @@ "horizontal-stack": { "name": "Горизонтальний стек" }, + "humidifier": { + "name": "Зволожувач" + }, "iframe": { "name": "iFrame" }, @@ -1984,6 +2072,7 @@ "save": "Взяти під контроль" }, "suggest_card": { + "add": "Додати до Lovelace", "create_own": "Вибрати іншу картку" }, "view": { @@ -2023,7 +2112,8 @@ "attribute_not_found": "Атрибут {attribute} недоступний у: {entity}", "entity_non_numeric": "Об'єкт не є числовим: {entity}", "entity_not_found": "Об'єкт не доступний: {entity}", - "entity_unavailable": "{entity} наразі недоступний." + "entity_unavailable": "{entity} наразі недоступний.", + "starting": "Home Assistant запускається, ще не все може бути доступно" } }, "mailbox": { @@ -2219,6 +2309,7 @@ }, "current_user": "Ви ввійшли як {fullName}.", "dashboard": { + "description": "Виберіть інформаційну панель за замовчуванням для цього пристрою.", "dropdown_label": "Панель", "header": "Панель" }, @@ -2280,6 +2371,9 @@ "not_used": "Ніколи не використовувався", "token_title": "Оновити токен для {clientId}" }, + "suspend": { + "header": "Автоматично закривати з'єднання" + }, "themes": { "dropdown_label": "Тема", "error_no_theme": "Немає доступних тем.", diff --git a/translations/frontend/vi.json b/translations/frontend/vi.json index 99807773aa..5c8f715fba 100644 --- a/translations/frontend/vi.json +++ b/translations/frontend/vi.json @@ -624,6 +624,7 @@ "yaml_not_editable": "Không thể sửa cài đặt của thực thể này từ giao diện người dùng. Chỉ các thực thể được thiết lập từ giao diện người dùng mới có thể được sửa chữa từ giao diện người dùng." }, "more_info_control": { + "dismiss": "Bỏ qua hộp thoại", "edit": "Chỉnh sửa thực thể", "person": { "create_zone": "Tạo vùng từ vị trí hiện tại" @@ -639,6 +640,7 @@ "last_action": "Hành động cuối", "last_triggered": "Lần kích hoạt cuối" }, + "settings": "Các cài đặt thực thể", "sun": { "elevation": "Độ cao", "rising": "Mọc lên", @@ -672,6 +674,8 @@ "triggers": "Các kích hoạt" }, "voice_command": { + "did_not_hear": "Home Assistant không nghe thấy gì cả", + "how_can_i_help": "Tôi có thể giúp gì nào?", "label": "Nhập câu hỏi và nhấn 'Enter'" }, "zha_device_info": { @@ -703,6 +707,7 @@ }, "notification_drawer": { "click_to_configure": "Nhấp vào nút để cấu hình {entity}", + "close": "Đóng", "empty": "Không có thông báo", "title": "Thông báo" }, @@ -850,6 +855,8 @@ "unsupported_condition": "Điều kiện không được hỗ trợ: {condition}" }, "default_name": "Thêm Tự động hóa", + "edit_ui": "Chỉnh sửa với UI", + "edit_yaml": "Chỉnh sửa dưới dạng YAML", "enable_disable": "Bật/Tắt tự động hóa", "introduction": "Sử dụng tự động hóa để mang sự sống cho nhà bạn", "load_error_not_editable": "Chỉ tự động hóa trong automations.yaml là có thể chỉnh sửa.", @@ -1012,6 +1019,10 @@ "entity": "Thực thể", "header": "Tùy chỉnh", "introduction": "Tinh chỉnh thuộc tính mỗi thực thể. Các tùy chỉnh được thêm / chỉnh sửa sẽ có hiệu lực ngay lập tức. Các tùy chỉnh bị xóa sẽ có hiệu lực khi thực thể được cập nhật." + }, + "warning": { + "include_link": "bao gồm customize.yaml", + "include_sentence": "Có vẻ như cấu hình trong configuration.yaml của bạn chưa đúng" } }, "devices": { @@ -1071,10 +1082,13 @@ "description": "Tổng quan tất cả các thực thể đã biết.", "picker": { "disable_selected": { - "button": "Vô hiệu hoá các mục đã chọn" + "button": "Vô hiệu hoá các mục đã chọn", + "confirm_text": "Các thực thể bị vô hiệu hoá sẽ không được thêm vào Home Assistant.", + "confirm_title": "Bạn có muốn vô hiệu hoá {number} thực thể không?" }, "enable_selected": { - "button": "Kích hoạt các mục đã chọn" + "button": "Kích hoạt các mục đã chọn", + "confirm_title": "Bạn có muốn kích hoạt {number} thực thể?" }, "filter": { "filter": "Lọc", @@ -1084,13 +1098,17 @@ }, "header": "Đăng ký thực thể", "headers": { + "entity_id": "Mã định danh Thực thể", + "integration": "Tích hợp", + "name": "Tên", "status": "Trạng thái" }, "introduction": "Home Assistant giữ một sổ đăng ký của mọi thực thể mà nó từng thấy có thể được xác định duy nhất. Mỗi thực thể này sẽ có một ID thực thể được gán sẽ chỉ dành riêng cho thực thể này.", "introduction2": "Sử dụng sổ đăng ký thực thể để ghi đè tên, thay đổi ID thực thể hoặc xóa mục nhập khỏi Home Assistant. Lưu ý, xóa mục đăng ký thực thể sẽ không xóa thực thể. Để làm điều đó, hãy theo liên kết dưới đây và xóa nó khỏi trang tích hợp.", "remove_selected": { "button": "Loại bỏ mục đã chọn", - "confirm_partly_title": "Chỉ {number} thực thể đã chọn có thể bị xoá." + "confirm_partly_title": "Chỉ {number} thực thể đã chọn có thể bị xoá.", + "confirm_title": "Bạn có muốn xoá bỏ {number} thực thể không?" }, "selected": "{number} đã chọn", "status": { @@ -1162,6 +1180,7 @@ "delete_confirm": "Bạn chắc chắn muốn xóa bộ tích hợp này?", "device_unavailable": "Thiết bị không khả dụng", "devices": "{count} {count, plural,\n one { thiết bị }\n other { các thiết bị }\n}", + "documentation": "Tài liệu", "entities": "{count} {count, plural,\n one { thực thể }\n other { các thực thể }\n}", "entity_unavailable": "Thiết bị không khả dụng", "firmware": "Firmware: {version}", @@ -1193,10 +1212,13 @@ "configure": "Cấu hình", "configured": "Đã cấu hình", "description": "Quản lý thiết bị và dịch vụ đã kết nối", + "details": "Chi tiết về tích hợp", "discovered": "Đã quét", "ignore": { "confirm_delete_ignore_title": "Ngừng bỏ qua {name}?", + "confirm_ignore_title": "Bỏ qua tự động phát hiện {name}?", "hide_ignored": "Ẩn các tích hợp bị bỏ qua", + "ignore": "Bỏ qua", "ignored": "Đã bỏ qua", "show_ignored": "Hiển thị các tích hợp bị bỏ qua", "stop_ignore": "Ngừng bỏ qua" @@ -1373,6 +1395,7 @@ "caption": "Kịch bản", "description": "Tạo và chỉnh sửa các tập lệnh", "editor": { + "alias": "Tên", "delete_script": "Xóa kịch bản", "link_available_actions": "Tìm hiểu thêm về các hành động khả dụng.", "sequence": "Trình tự", @@ -1440,6 +1463,7 @@ "deactivate_user": "Hủy kích hoạt người dùng", "delete_user": "Xóa người dùng", "name": "Tên", + "system_generated_users_not_editable": "Không thể chỉnh sửa người dùng do hệ thống tạo ra.", "update_user": "Cập nhật" }, "picker": { @@ -1481,7 +1505,9 @@ "bind_button_label": "Liên kết Nhóm", "cluster_selection_help": "Chọn các cụm để liên kết với nhóm đã chọn.", "group_picker_help": "Chọn một nhóm để thi hành một lệnh liên kết.", + "group_picker_label": "Các nhóm có thể Liên kết", "header": "Ràng buộc Nhóm", + "introduction": "Liên kết và ngừng liên kết các nhóm.", "unbind_button_help": "Hủy liên kết nhóm đã chọn khỏi cụm thiết bị đã chọn.", "unbind_button_label": "Ngừng liên kết Nhóm" }, @@ -1564,13 +1590,15 @@ }, "node_management": { "add_to_group": "Thêm vào Nhóm", + "entities": "Các thực thể của nút này", "group": "Nhóm", "node_to_control": "Nút để điều khiển", "remove_from_group": "Xóa Khỏi Nhóm" }, "ozw_log": { "last_log_lines": "Số dòng nhật ký gần nhất", - "load": "Tải" + "load": "Tải", + "tail": "Đuôi" }, "services": { "cancel_command": "Hủy lệnh", @@ -1642,6 +1670,7 @@ }, "templates": { "editor": "Trình soạn thảo bản mẫu", + "jinja_documentation": "Tài liệu về Jinja2", "title": "Mẫu sẵn", "unknown_error_template": "Lỗi không xác định khi kết xuất bản mẫu" } @@ -1729,7 +1758,9 @@ "state_not_equal": "Trạng thái không bằng với" }, "entities": { - "description": "Thẻ Các Thực thể là loại thẻ phổ biến nhất. Nó nhóm các mục với nhau thành một danh sách." + "description": "Thẻ Các Thực thể là loại thẻ phổ biến nhất. Nó nhóm các mục với nhau thành một danh sách.", + "name": "Các Thực thể", + "show_header_toggle": "Hiển thị Nút chuyển đổi ở Trên cùng" }, "entity-filter": { "description": "Thẻ Bộ lọc Thực thể cho phép bạn xác định danh sách các thực thể mà bạn muốn theo dõi chỉ khi chúng ở trạng thái nhất định.", @@ -1745,6 +1776,7 @@ "generic": { "attribute": "Thuộc tính", "double_tap_action": "Hành động khi Nhấn Đôi", + "entities": "Các Thực thể", "manual": "Thủ công", "manual_description": "Cần thêm một thẻ tuỳ chỉnh hay chỉ muốn viết cấu hình yaml thủ công?", "no_theme": "Không có theme.", @@ -1845,6 +1877,7 @@ "delete": "Xóa Tầm nhìn", "edit": "Chỉnh sửa Tầm nhìn", "header": "Cấu hình Tầm nhìn", + "move_left": "Chuyển tầm nhìn sang trái", "move_right": "Di chuyển tầm nhìn sang phải", "tab_badges": "Huy hiệu", "tab_settings": "Cài đặt", @@ -1907,6 +1940,7 @@ "menu": { "close": "Đóng", "configure_ui": "Cấu hình giao diện", + "exit_edit_mode": "Thoát khỏi chế độ chỉnh sửa với UI", "help": "Trợ giúp", "refresh": "Làm tươi", "reload_resources": "Tải lại các tài nguyên" @@ -2177,6 +2211,10 @@ "not_used": "Chưa bao giờ được sử dụng", "token_title": "Làm mới token cho {clientId}" }, + "suspend": { + "description": "Chúng ta có nên đóng kết nối đến máy chủ sau khi trình duyệt được ẩn trong 5 phút?", + "header": "Tự động đóng kết nối" + }, "themes": { "dropdown_label": "Giao diện", "error_no_theme": "Không có giao diện nào.", @@ -2191,7 +2229,8 @@ } }, "sidebar": { - "external_app_configuration": "Cấu hình ứng dụng" + "external_app_configuration": "Cấu hình ứng dụng", + "sidebar_toggle": "Ẩn/Hiện Thanh Bên" } } } \ No newline at end of file diff --git a/translations/frontend/zh-Hans.json b/translations/frontend/zh-Hans.json index 8dac5f5969..04beaf70ed 100644 --- a/translations/frontend/zh-Hans.json +++ b/translations/frontend/zh-Hans.json @@ -123,7 +123,7 @@ }, "default": { "off": "关闭", - "on": "开" + "on": "开启" }, "door": { "off": "关闭", @@ -229,7 +229,7 @@ }, "fan": { "off": "关闭", - "on": "开" + "on": "开启" }, "group": { "closed": "已关闭", @@ -251,7 +251,7 @@ "on": "开" }, "light": { - "off": "关闭", + "off": "关", "on": "开" }, "lock": { @@ -261,7 +261,7 @@ "media_player": { "idle": "空闲", "off": "关闭", - "on": "开", + "on": "开启", "paused": "已暂停", "playing": "正在播放", "standby": "待机" @@ -286,7 +286,7 @@ }, "sensor": { "off": "关闭", - "on": "开" + "on": "开启" }, "sun": { "above_horizon": "日出", @@ -525,6 +525,9 @@ "clear": "清除", "show_areas": "显示区域" }, + "data-table": { + "search": "搜索" + }, "date-range-picker": { "end_date": "结束日期", "select": "选定", @@ -1356,6 +1359,7 @@ "confirm_text": "如果它们包含这些实体,则应将它们从 Lovelace 配置和自动化中删除。", "confirm_title": "您要删除这 {number} 个实体吗?" }, + "search": "搜索实体", "selected": "选择了 {number} 项", "status": { "disabled": "已禁用", @@ -1386,7 +1390,8 @@ "entity_id": "实体 ID", "name": "名称", "type": "类型" - } + }, + "no_helpers": "您还没有辅助元素。" }, "types": { "input_boolean": "开关", @@ -1490,7 +1495,8 @@ "note_about_integrations": "并非所有集成都可以通过 UI 进行配置。", "note_about_website_reference": "更多可用信息,尽在 ", "rename_dialog": "编辑此配置项的名称", - "rename_input_label": "条目名称" + "rename_input_label": "条目名称", + "search": "搜索集成" }, "introduction": "您可以在此配置 Home Assistant 及组件。目前并非所有配置都能通过前端 UI 完成,但是我们在努力实现中。", "logs": { @@ -2194,6 +2200,7 @@ "name": "名称", "no_theme": "没有主题", "refresh_interval": "刷新间隔", + "search": "搜索", "secondary_info_attribute": "次要信息属性", "show_icon": "显示图标?", "show_name": "显示名称?", @@ -2314,7 +2321,8 @@ "edit_lovelace": { "edit_title": "编辑标题", "explanation": "此标题将显示在 Lovelace 的所有视图之上。", - "header": "Lovelace UI 标题" + "header": "Lovelace UI 标题", + "title": "标题" }, "edit_view": { "add": "添加视图", @@ -2678,6 +2686,10 @@ "not_used": "从未使用过", "token_title": "{clientId} 的刷新令牌" }, + "suspend": { + "description": "是否要在转至后台 5 分钟后,关闭与服务器的连接?", + "header": "自动关闭连接" + }, "themes": { "dropdown_label": "主题", "error_no_theme": "没有可用的主题。", diff --git a/translations/frontend/zh-Hant.json b/translations/frontend/zh-Hant.json index 8cd8272259..3a1d810592 100644 --- a/translations/frontend/zh-Hant.json +++ b/translations/frontend/zh-Hant.json @@ -2678,6 +2678,10 @@ "not_used": "從未使用過", "token_title": "{clientId}更新密鑰" }, + "suspend": { + "description": "於隱藏五分鐘後關閉連線?", + "header": "自動關閉連線" + }, "themes": { "dropdown_label": "主題", "error_no_theme": "無主題可使用。", diff --git a/yarn.lock b/yarn.lock index 06be65a121..50621e3fee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1330,475 +1330,545 @@ "@babel/runtime" "^7.7.2" core-js "^3.4.1" -"@material/animation@7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/animation/-/animation-7.0.0-canary.d92d8c93e.0.tgz#7aa9f15b710c478c84ac31e239f0c3d85192fbc1" - integrity sha512-MeOcW2xEyeHTwCrGERStR3lbPlDIZLqAe9d4gTHAZjf7lnTSzjOpJiXiaX8GRjBAlQ9Z4Ucy8rfCSHjKa4BU2Q== +"@material/animation@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/animation/-/animation-8.0.0-canary.a78ceb112.0.tgz#b7bd0c91f6431f3294224936b7e37827ca2f77ee" + integrity sha512-avnYo5iXt64I5nJfNbiYebtZ8sYcgxbje1JpU0mr58VpgDpSRbQCDoJi+/LPDQiNDr/lU3vUM9MEQaECY8KVzw== dependencies: tslib "^1.9.3" -"@material/base@7.0.0-canary.d92d8c93e.0", "@material/base@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/base/-/base-7.0.0-canary.d92d8c93e.0.tgz#e111a21bc5ae1a9c4cb6ae37d09edd791aaadcc1" - integrity sha512-ey7Sz8E1A/u0lqCahn57seXYOglJk+bwBgHB+ErJICdUpVD8OhKYtAb++2+eNXVujsHohXx8TM/tZOsefATsQg== +"@material/base@8.0.0-canary.a78ceb112.0", "@material/base@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/base/-/base-8.0.0-canary.a78ceb112.0.tgz#65bb27333255fb0cc3047d79115a82d540f5b9d8" + integrity sha512-gSCgOkjtyrpxGm8BC7mx0dM6yyWda/jSvBcCejlydHQ76fwJ/uV8snBvCdyqgW+E2fDt8Y2o5HyeJSFHAb9q/w== dependencies: tslib "^1.9.3" -"@material/button@7.0.0-canary.d92d8c93e.0", "@material/button@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/button/-/button-7.0.0-canary.d92d8c93e.0.tgz#14fa7bea4a082f43839593c0883addb6f3fdab15" - integrity sha512-YJqwOB6Xr619nSuWGUmkJN/+bj5sV/AsDfaE28Mv3xjoFqPK19I5RsDI62uZCmODGQfgxkY768JziT49zY9LXg== +"@material/button@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/button/-/button-8.0.0-canary.a78ceb112.0.tgz#79b13900307f769e7b63f9eef1d209b40df7fc2c" + integrity sha512-HQExVH0zD7VIYt+48YOaHRcCXYRiMeGsVwhYDeLJilipqxAjniDLhudlBjnmAFBOFs0kWAYuIyXRiszJfgOVUQ== dependencies: - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/shape" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/touch-target" "7.0.0-canary.d92d8c93e.0" - "@material/typography" "7.0.0-canary.d92d8c93e.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/shape" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/touch-target" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" -"@material/checkbox@7.0.0-canary.d92d8c93e.0", "@material/checkbox@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/checkbox/-/checkbox-7.0.0-canary.d92d8c93e.0.tgz#547af5361e3f8f02b0e58ac952309ab7d673217d" - integrity sha512-yI0C0ua5JJn6qezG71cNWJC6uBxIlyqCDv/3s+aE8j/pHYel2IAJw9wWXA33Xi1QzFpjY8+gAmvN6Go3jS8JDg== +"@material/checkbox@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/checkbox/-/checkbox-8.0.0-canary.a78ceb112.0.tgz#4222388f5bbb1aba3bdc6639060049cebe6fde1e" + integrity sha512-ke91NUbI+j8/zzpBr0Iw4MjUF8gj5VNmdTTJP8dvHmRNObSBwXo6ZERactzndK7/CG+dVV0hkwQfcTqC52DrTg== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/touch-target" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/touch-target" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/chips@7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/chips/-/chips-7.0.0-canary.d92d8c93e.0.tgz#c96849885e32b61c0486e9f5259aeb1ea1e3f851" - integrity sha512-W0jUAYQyZwzowgWDCkTPGOpLAhiFyD6GgMMnBv7oHMF8nWKTVrdU6deTbTjMXQtgBtNCyXaISmOFyoiU8+bixw== +"@material/chips@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/chips/-/chips-8.0.0-canary.a78ceb112.0.tgz#e1d9e3c5b5dc34a70edd669048a8a34a5e390964" + integrity sha512-ZZYTMb4CP7dSy/8BGpIQu1ejFHJv1/tdLxAWEDXI28OTTka3H9I74SExUkC3htqpV22xfWjSUZt+XnPMzIqffA== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/checkbox" "7.0.0-canary.d92d8c93e.0" - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/shape" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/touch-target" "7.0.0-canary.d92d8c93e.0" - "@material/typography" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/checkbox" "8.0.0-canary.a78ceb112.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/shape" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/touch-target" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/circular-progress@7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/circular-progress/-/circular-progress-7.0.0-canary.d92d8c93e.0.tgz#f644c90076cdf30208201dfb37e0d7c8f2c58724" - integrity sha512-Xoj6E+HtvxesuRo/u8xLqDQ0rJY9DKXOelKErrOkxJskkS4G30jFRvdlDWXenBjzRaynH/Iu3RcnNOUTrcSL4A== +"@material/circular-progress@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/circular-progress/-/circular-progress-8.0.0-canary.a78ceb112.0.tgz#6e65832501dd975b0438abc98eabfaf7072e5c30" + integrity sha512-jMg57QaFHCgls5WYkKONUlqmHbzVy3EDJkgtcUOnNTzuG1FnO99Ddg/O02RYf5U9siUGvpS+ve2GHLobSE//CA== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/progress-indicator" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/progress-indicator" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/density@7.0.0-canary.d92d8c93e.0", "@material/density@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/density/-/density-7.0.0-canary.d92d8c93e.0.tgz#a7a3b0a4fdb4ce92487611a18af4bf51b8f7b09f" - integrity sha512-yUZw5NSTp7Aj/6Qu5bqLmX23X1QWBfShAoKIwFFZMpLkgWQPy2+p+o9JqaPXN9U824/sDFDP9nofR5VosaNyVg== +"@material/density@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/density/-/density-8.0.0-canary.a78ceb112.0.tgz#f84414a9d87a932e6857b7c979166e57563865ac" + integrity sha512-1fZUwRxnCvVbDA2cEtkbGjGSkvsjsUSFAfN4eWCqylUqbkQC0AWO5EDmrYH+sT3VpHAZ+Hr3cLcydydsT3o2wQ== -"@material/dialog@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/dialog/-/dialog-7.0.0-canary.d92d8c93e.0.tgz#d11440345d57ed7f86eb2186c0e9cb72ba8938ed" - integrity sha512-2CX0C9gAXm1hNlGBGNk8fA0hnBZF2Ehtr+KDAGO/EaYJDL72cXFsd6lWewjG2MuKk0XorVlv7EaHEZpUoprA3w== +"@material/dialog@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/dialog/-/dialog-8.0.0-canary.a78ceb112.0.tgz#09948b18d3286154dfb2ada24b2b50d13fe652d0" + integrity sha512-DnMCAlCHDP6LdPpxksrKJs/go/37sZpFHkYG3YaFd7yNoO8K1isRbsf7U6H9KQvE0tGAXZLDY7vy4ERiLxKoYg== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/button" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/shape" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/touch-target" "7.0.0-canary.d92d8c93e.0" - "@material/typography" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/button" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/shape" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/touch-target" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/dom@7.0.0-canary.d92d8c93e.0", "@material/dom@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/dom/-/dom-7.0.0-canary.d92d8c93e.0.tgz#079c9d4e0a5e926acc26b22277bca94750122e9f" - integrity sha512-mHMF2dkKbymywgkOdMPdW1+MbQn2GzvdSpjfRDX/cGh6lKQ0/fado276b/vpXRQb7vNXG1Z21TUtBiZyuyf/PA== +"@material/dom@8.0.0-canary.a78ceb112.0", "@material/dom@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/dom/-/dom-8.0.0-canary.a78ceb112.0.tgz#3c9d3f8f177a8b723e4fdd95651f7288f5fa3a27" + integrity sha512-FmmLO+F/kyo/0rbkkp955JiN8ZCG9CI5g3VH4Ru02jtZdXnGSzo8Cdqjq2fzgP7MQ//eTTwMdeCZfp81UCwjQw== dependencies: - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/elevation@7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/elevation/-/elevation-7.0.0-canary.d92d8c93e.0.tgz#9403d7abf0019b2864c672e7d9de6409f2c48670" - integrity sha512-qBIxG2wKZCsKN99zfss9xcI312dOnnkp6HfRSdnVSIsJd/c5RicY0hw/EE+hS+VYc8M0rnc+HSgM/+MMbFzz9w== +"@material/elevation@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/elevation/-/elevation-8.0.0-canary.a78ceb112.0.tgz#811b3e2990434cddb6a44dafd8d3a3945513cda0" + integrity sha512-eTBJ0NCDpfD9pc6AJjzkWGtXSHybKO9+RlxSyIGhax7xiMaIFlXqsk9SlLXwNlbwyU0EqIjPPJdKE9492EavDA== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" -"@material/fab@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/fab/-/fab-7.0.0-canary.d92d8c93e.0.tgz#b36379e02bf6e29699b50e0951751dc65dbe87bc" - integrity sha512-MMunuvYq7CnVKpV4nIdevFo02Cbypx9QtyTUYQ/RncRRXSlt5myZBk90dBvInp2B5Tq9XcbkbyIK2WCvS8d1FQ== +"@material/feature-targeting@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/feature-targeting/-/feature-targeting-8.0.0-canary.a78ceb112.0.tgz#998c7b2331796fee6489b2eaf95a9a75683ed60b" + integrity sha512-pYiHlUwKiAwBAULUDVxADD2eHb80cuzwQsQI9IpNr1mgdLcoKomWYxmHYzyD9AUIOlYsPrft+ozyC4gXt5kOtg== + +"@material/form-field@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/form-field/-/form-field-8.0.0-canary.a78ceb112.0.tgz#232db5ce9d76935524242a9ee23e6931257b1189" + integrity sha512-VIDXQjthFqk3S5w7IgziErin/3p+L/c6lnw6e0E/DiUFgf6gTUenbbzx1+9plBOGqCl67wTN9NwQBekHUOKxhQ== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/shape" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/touch-target" "7.0.0-canary.d92d8c93e.0" - "@material/typography" "7.0.0-canary.d92d8c93e.0" - -"@material/feature-targeting@7.0.0-canary.d92d8c93e.0", "@material/feature-targeting@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/feature-targeting/-/feature-targeting-7.0.0-canary.d92d8c93e.0.tgz#7fd210bebaf260ce8b3db8a27100b9716d807bab" - integrity sha512-0avhPtQSnHrQV6jeBZpnqLq51KFjP1oHaQKr2Tm+eqZXqQibNTUyds9oXVTzukd9v3NYTsbdMBpeiKyNrPfHMA== - -"@material/form-field@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/form-field/-/form-field-7.0.0-canary.d92d8c93e.0.tgz#1ebe0866ba81bf5c155a753d3741f0490cdf9320" - integrity sha512-/F9jAGYCX5m1hNuyTgXUUdTqQDuYRirkZ8vIDcgPImCb/a/LiYI8KuIhUjXsS8vuiVmTgQTPxYMJ4QPoiFoI3Q== - dependencies: - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/typography" "7.0.0-canary.d92d8c93e.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/icon-button@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/icon-button/-/icon-button-7.0.0-canary.d92d8c93e.0.tgz#e3cb688d9d0bd185f8c67e4d255c5095ea9941fd" - integrity sha512-7LWQ4rStg7xiLSQ1DUSOXmuS5oyLFWt4kuDiMeqraapluMFHwFZ9RwmmliE+KhhZGHpe/4VT+M+mR9ZlG507oQ== +"@material/list@8.0.0-canary.a78ceb112.0", "@material/list@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/list/-/list-8.0.0-canary.a78ceb112.0.tgz#0b986116de8d99daf50867a82219552bdc0cc854" + integrity sha512-B6ysRJm6HOTQdrAyYcRqZv807vbSrsOnxk3AE9Qscx6erdoJLm9lLX066YfFVk5iGbMzebhFi8lkEIVJBLKwSg== dependencies: - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/shape" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/list@7.0.0-canary.d92d8c93e.0", "@material/list@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/list/-/list-7.0.0-canary.d92d8c93e.0.tgz#fbc46ddc860c67dc4fe466b872abfa90e13d1514" - integrity sha512-7hdSglQRGOg4y8tGx6dega12VQp1B8/SbjIsJ5fLH9gvnvusJCNVexvBO4bAa6D4ul4eWv8buJgu517plbnthA== +"@material/menu-surface@8.0.0-canary.a78ceb112.0", "@material/menu-surface@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/menu-surface/-/menu-surface-8.0.0-canary.a78ceb112.0.tgz#88617336a0369cd71ec0430914bdf202cf464fa1" + integrity sha512-PRzYXJz/VmLTmAMJMs6U+BRAAH1+Gn36vVAGtFptYFHk1XO/BTrHKqMmriXPsRE4Kqw8BBf6fTsIImvZcqxhYA== dependencies: - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/shape" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/typography" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/shape" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/menu-surface@7.0.0-canary.d92d8c93e.0", "@material/menu-surface@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/menu-surface/-/menu-surface-7.0.0-canary.d92d8c93e.0.tgz#21c6b0efcc5f781bf4aef846f45c93a0c8fb7cea" - integrity sha512-TGxf+gMy1JjBxJhVFydWYt9ikE4mrMwA1Ki0Ts3n/Og6GizYUk1nsV6QTPUVlzOgX4vHkKHIfSCh+3tf9VokHA== +"@material/menu@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/menu/-/menu-8.0.0-canary.a78ceb112.0.tgz#259c76ac52b769dde9309e385a72db1f2ae8ed7e" + integrity sha512-Z9D8MyNjtMeZ47jwlcnvbGCLLsLSGc4h+a2g/LWnlpbMSyAa91d0x2XlQANmfIzFah3nTcjoon08q/9g8up93Q== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/shape" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/list" "8.0.0-canary.a78ceb112.0" + "@material/menu-surface" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/menu@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/menu/-/menu-7.0.0-canary.d92d8c93e.0.tgz#496ca4b078bc0072308d89905bd3c8788a4af8b9" - integrity sha512-//ZbJmt4qepOu+i8VmgLevYAm4TtGTs4Q6k7NsZTbcaLKPM61upszM5oZ/YnlNELWZ3CUFweY2tdQIn6AnFkjw== +"@material/mwc-base@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-base/-/mwc-base-0.17.2.tgz#90c863f428c281c2d71465d89958dd2fbe4b5e3f" + integrity sha512-SJ4GLhikChTp7HwyAqccIk1usxwLporj5EWCNx+1h2ECWIY5BdIySFkmq9uqrVLEDTwW0wPB+0ZD+E3ScJdvZw== dependencies: - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/list" "7.0.0-canary.d92d8c93e.0" - "@material/menu-surface" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - tslib "^1.9.3" - -"@material/mwc-base@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-base/-/mwc-base-0.15.0.tgz#ddc8271c0f8b06c9098436ff8a9892ed0dcab5dc" - integrity sha512-TlZQtwKMhU5e4GMQ3ZFwhJ2ANQJHTnPMRq6ZDEIG2vfoxx8JIWJ2f/yoI8MkoYUJ1Q6t5arBaBaI2Qr0JEstWw== - dependencies: - "@material/base" "=7.0.0-canary.d92d8c93e.0" - "@material/dom" "=7.0.0-canary.d92d8c93e.0" - "@material/ripple" "=7.0.0-canary.d92d8c93e.0" + "@material/base" "=8.0.0-canary.a78ceb112.0" + "@material/dom" "=8.0.0-canary.a78ceb112.0" lit-element "^2.3.0" tslib "^1.10.0" -"@material/mwc-button@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-button/-/mwc-button-0.15.0.tgz#8ebe3718f2f23207d60e069c49235a607120012b" - integrity sha512-vwwT5I8b7mMAH4UzGZdfStbWx+/blhBlZ/wZM+CKbolwPuOeMLeTMMawhyRnLqMxedCPExQ1koYoABXNoUB4lQ== +"@material/mwc-button@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-button/-/mwc-button-0.17.2.tgz#90924f028ac52fd462d127a8b5587be8eca6877c" + integrity sha512-2fNVfF2tL1yywufCY4qLgqBR5lS2QFUIu9AqOmImN0MNmFk3jhXAiVSdWbuMKruiGI0HW4DAzM/w+uiAVu83KA== dependencies: - "@material/button" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/mwc-icon" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" + "@material/mwc-icon" "^0.17.2" + "@material/mwc-ripple" "^0.17.2" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-checkbox@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-checkbox/-/mwc-checkbox-0.15.0.tgz#57cd3cb194102951639ed0a6675f5a19bab988ad" - integrity sha512-ssjko688R/qPAfn4E79hFMyHq91h2rHqrAtvt7rFZT8to0uOurnXNwFLyuzwruhMbPjDRSr5fVcJWqWBV/SN3Q== +"@material/mwc-checkbox@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-checkbox/-/mwc-checkbox-0.17.2.tgz#e4185cd88857fbe25946a27edfa46cd950062bd9" + integrity sha512-y+9VJ2dvcQloShRv/wYJDUjp6H0rWGu7MbhqvxlKeDOcCBz9a/3eGZQj7MnWwz2vkRPfIBwVRsJRO5HxIwZvuQ== dependencies: - "@material/checkbox" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" + "@material/mwc-base" "^0.17.2" + "@material/mwc-ripple" "^0.17.2" lit-element "^2.3.0" + lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-dialog@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-dialog/-/mwc-dialog-0.15.0.tgz#1b5266123ee4eac2274d9410ef7eadb354d27008" - integrity sha512-3zIu0gVJyAAeKW/57/+4tsgaVKPUvo33ciZ8oDzGvOdbnkZIyWwylx6ydnPCuWED9BkQekAgH7YM+vzutP0UhQ== +"@material/mwc-dialog@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-dialog/-/mwc-dialog-0.17.2.tgz#3ae79c74d94e3a773a11e3d744be78c713a3bc0a" + integrity sha512-U9iLbDfpzkDAKtQKOSWACDqBCiYu6POymdIPmA4N9yRJGX1v2sNDulaGhDu/IqINz26TKT6FUMWmto18E70xrA== dependencies: - "@material/dialog" "=7.0.0-canary.d92d8c93e.0" - "@material/dom" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/touch-target" "=7.0.0-canary.d92d8c93e.0" + "@material/dialog" "=8.0.0-canary.a78ceb112.0" + "@material/dom" "=8.0.0-canary.a78ceb112.0" + "@material/mwc-base" "^0.17.2" blocking-elements "^0.1.0" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" wicg-inert "^3.0.0" -"@material/mwc-fab@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-fab/-/mwc-fab-0.15.0.tgz#b0bdd664f61250e4f3a593ca8656cdd37bb3a487" - integrity sha512-VejrZQgwAwcV72xOBaROxl3GQVg4nqczaxEZAmhVCJ5DNW58vhd32xmfXAtcySjKEROZbyIo24e3EZp8di/1Xg== +"@material/mwc-fab@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-fab/-/mwc-fab-0.17.2.tgz#837e1aa489b7673a434fa49a3c319e8081721a6a" + integrity sha512-YmN+IlP4sca3dD5kHi79WDaha862QH1FzsgNLuOeL9tz3dE6cmuYZ7v7cok1LZVQOd0oVbGmJsTdfdJsFYMDXg== dependencies: - "@material/fab" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/mwc-icon" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" + "@material/mwc-ripple" "^0.17.2" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-formfield@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-formfield/-/mwc-formfield-0.15.0.tgz#ff06babe3c6aa522e33daf2e9dc507f18896a819" - integrity sha512-LLzG9/35LrHW1rx5pVUmOmpvSZRw8yD3H7HkQvYeTUbEKP7quRj7v+VMFRQkvznYIWMqEudgTFhNyUAD9DrUPQ== +"@material/mwc-formfield@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-formfield/-/mwc-formfield-0.17.2.tgz#b69a9423d4dd7cc83145d7cc7ad5bb0a030fa622" + integrity sha512-3VN0Nzh7IwlknCHcOedLTLIROvkHnjQ6M38kHL9MOZm8DnCTduJ4eYY4sQyoZxtnkZR3E1e4sA8+bnpSj4ggPA== dependencies: - "@material/form-field" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" + "@material/form-field" "=8.0.0-canary.a78ceb112.0" + "@material/mwc-base" "^0.17.2" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-icon-button@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-icon-button/-/mwc-icon-button-0.15.0.tgz#cad5a841ea58ba1f39003ba17f99a6ae55fbd0ac" - integrity sha512-7Xw4uYdMSRWBmviMB0i1BoacX/cnlA3JKT2kKipnXlj1JP0Y8hwLebXn18m0z8TbDhwAQnXuKp6cWSZMgcVcWw== +"@material/mwc-icon-button@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-icon-button/-/mwc-icon-button-0.17.2.tgz#b068c3ea7b6c2e92312ab9ec20baac0cff3dfb20" + integrity sha512-kA0RaOmE35yaTCMlqZT7m6A/lJfcsgBKnutAQlhzHlwANTDbWApVi9CjvvN4568EXlBfvfCEL7oUdMDy219K0Q== dependencies: - "@material/icon-button" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/mwc-icon" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" + "@material/mwc-ripple" "^0.17.2" lit-element "^2.3.0" tslib "^1.10.0" -"@material/mwc-icon@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-icon/-/mwc-icon-0.15.0.tgz#3f4aab00aa137f6f109d42180aeb2dd55f5981a1" - integrity sha512-jKTwh9pNYn/DgQ1jmh3J7cl8CpOz7/seqLs70mURs2pMlbv9DIQiiYYprADExko7aaOwig9+lGmKQlEyLeV6DQ== +"@material/mwc-icon@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-icon/-/mwc-icon-0.17.2.tgz#06f019525001b3e42e18106fc6f321b4c8ca0b3c" + integrity sha512-9EpoLbn82RD5Wsxv0J7o1hTyn+WLfC1tdaTBvDmkRJZhfFheXYKUWNQXWrra0I/BpmojOGvijStOH0rga513WA== dependencies: - "@material/mwc-base" "^0.15.0" lit-element "^2.3.0" tslib "^1.10.0" -"@material/mwc-list@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-list/-/mwc-list-0.15.0.tgz#3f8a9e17f303107ba2cd24dfb95dc5017f8562c9" - integrity sha512-LEjy+nnsL6r6RAqef/zgk9aRIClyOtXp2k73AncHJMFdYhjQfgVNJLl+RChlxTuyCafKclVD+ufQFphD+cPZBw== +"@material/mwc-list@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-list/-/mwc-list-0.17.2.tgz#f09fc4cf1a0ca03d097938c7bcc75682cec39eb3" + integrity sha512-fKGJkfWntNUQxfRSM/G7Zsaq0SD8JsFi730BS7q8X3OlFhuOGGeMP7sY5FtBVX0hjAO1/khp9KKgmvZunUoXkg== dependencies: - "@material/base" "=7.0.0-canary.d92d8c93e.0" - "@material/density" "=7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "=7.0.0-canary.d92d8c93e.0" - "@material/list" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/mwc-checkbox" "^0.15.0" - "@material/mwc-radio" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" - "@material/ripple" "=7.0.0-canary.d92d8c93e.0" - "@material/rtl" "=7.0.0-canary.d92d8c93e.0" - "@material/theme" "=7.0.0-canary.d92d8c93e.0" - "@material/typography" "=7.0.0-canary.d92d8c93e.0" + "@material/base" "=8.0.0-canary.a78ceb112.0" + "@material/list" "=8.0.0-canary.a78ceb112.0" + "@material/mwc-base" "^0.17.2" + "@material/mwc-checkbox" "^0.17.2" + "@material/mwc-radio" "^0.17.2" + "@material/mwc-ripple" "^0.17.2" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-menu@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-menu/-/mwc-menu-0.15.0.tgz#f23eec7fdfd59e7268be6769b1adfc2af2642084" - integrity sha512-LG3VpP34woRMrIJn40bkrEMuv8CXmFJ70GLFEMmNFYp8z53ftIxQ9oL3kz09q0mOwgyThZAKrXJbyluO43NMlg== +"@material/mwc-menu@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-menu/-/mwc-menu-0.17.2.tgz#53cfb5edf6ebc7c9e992a6909f211d529375effd" + integrity sha512-WrQalgdp2NYr/ws5rX9ify8trKiqNUy7tAXlHYAg5qKRb3HpHV6gsmNCScOZ4e95xXJvEOaUp67YDZsma3/rzQ== dependencies: - "@material/menu" "=7.0.0-canary.d92d8c93e.0" - "@material/menu-surface" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/mwc-list" "^0.15.0" + "@material/menu" "=8.0.0-canary.a78ceb112.0" + "@material/menu-surface" "=8.0.0-canary.a78ceb112.0" + "@material/mwc-base" "^0.17.2" + "@material/mwc-list" "^0.17.2" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-radio@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-radio/-/mwc-radio-0.15.0.tgz#629f362ddb951b331c41798214a2d347b446ac6e" - integrity sha512-SbemYU6ZvqUGTNi62yQ6p9GIOBH2WajQFebgEsSCaaxWNJqTQGCh3vw7Wbx+75ZTTjGY6VQL0oeXDKoz2cRwmA== +"@material/mwc-radio@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-radio/-/mwc-radio-0.17.2.tgz#101c41eedcd947f6159f2b3cbdd52d1a6b4bb277" + integrity sha512-+aPdJBUWTfT4pQg7s7g4wDvTvNE9gdBywJICtgaRM5z8NjYoWnF3aZGwb49yz+TAbf6d3ZYwRWPnXYx4sfh/gg== dependencies: - "@material/mwc-base" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" - "@material/radio" "=7.0.0-canary.d92d8c93e.0" + "@material/mwc-base" "^0.17.2" + "@material/mwc-ripple" "^0.17.2" + "@material/radio" "=8.0.0-canary.a78ceb112.0" lit-element "^2.3.0" tslib "^1.10.0" -"@material/mwc-ripple@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-ripple/-/mwc-ripple-0.15.0.tgz#ec451c85671573d42cda9745847b922b053f83f2" - integrity sha512-3elf4ysHoURfdoWRle/0zQ2l7OUSWE7Ah73B/PYr/DgHISmYYUjg2k/K5NSro9UcmshAVnppIujlcZN3GbQIyA== +"@material/mwc-ripple@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-ripple/-/mwc-ripple-0.17.2.tgz#327eb714d1e3445e7c80a2ae92a1e293919c69af" + integrity sha512-rdx/mR9vxPS6ZnM7oWP4E5FGRQ3pgo7n/hGUPcGMxFfXaxaHs1evoIQscp9a6HcXVrLPXemKD6msObwMDKetQA== dependencies: - "@material/dom" "=7.0.0-canary.d92d8c93e.0" - "@material/mwc-base" "^0.15.0" - "@material/ripple" "=7.0.0-canary.d92d8c93e.0" + "@material/dom" "=8.0.0-canary.a78ceb112.0" + "@material/mwc-base" "^0.17.2" + "@material/ripple" "=8.0.0-canary.a78ceb112.0" lit-element "^2.3.0" lit-html "^1.1.2" tslib "^1.10.0" -"@material/mwc-switch@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@material/mwc-switch/-/mwc-switch-0.15.0.tgz#f9f24e57d53df92bd2fd4a65ebde89a8ea4aa177" - integrity sha512-z4bOJgm9PYACk6JtFCQWMHpfO3HQOALmnV4EUDrUL4628oGcIfa3VJPeINDAoNzjwIvjY5EtoGKWEBDJpFnrfw== +"@material/mwc-switch@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-switch/-/mwc-switch-0.17.2.tgz#4bdff3f981958cb0b396bc38a8b27f094fc0195c" + integrity sha512-HgNYKKAKcVEOxVeIoHtvYd5Y7Pb3laHRSKX9cLgKivUgwjBx62QdU0q8KcqQAySklI+6MUXAMqofZj8eggkCzw== dependencies: - "@material/mwc-base" "^0.15.0" - "@material/mwc-ripple" "^0.15.0" - "@material/switch" "=7.0.0-canary.d92d8c93e.0" + "@material/mwc-base" "^0.17.2" + "@material/mwc-ripple" "^0.17.2" + "@material/switch" "=8.0.0-canary.a78ceb112.0" lit-element "^2.3.0" tslib "^1.10.0" -"@material/progress-indicator@7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/progress-indicator/-/progress-indicator-7.0.0-canary.d92d8c93e.0.tgz#e49e3d22ed594f53624eae5c8b82b19fa13e93d8" - integrity sha512-ibwqKAKd8xJqN2SceGo7fsjwdy7E2yjmP8V3ASUqUnK+MXepKoxdjfj+pXBAuCwNy8ehx1b4HzYq7LA20PKWKw== +"@material/mwc-tab-bar@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-tab-bar/-/mwc-tab-bar-0.17.2.tgz#d89a290d4dda5f854ee51a539b69020c6634d1db" + integrity sha512-QsHOmxj6FM7jKYM9Dt6u7jKQv8r13z7/ryocQAAqyd13+LwAc+ec2o0hE6lTFpqNPAdlIhosip5Y3GDHdoKT5w== + dependencies: + "@material/mwc-base" "^0.17.2" + "@material/mwc-tab" "^0.17.2" + "@material/mwc-tab-scroller" "^0.17.2" + "@material/tab" "=8.0.0-canary.a78ceb112.0" + "@material/tab-bar" "=8.0.0-canary.a78ceb112.0" + lit-element "^2.3.0" + tslib "^1.10.0" + +"@material/mwc-tab-indicator@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-tab-indicator/-/mwc-tab-indicator-0.17.2.tgz#fc3ac2c7a53df20acc99e71599dd38e8abbc2cda" + integrity sha512-JaAyWLhU/FO1v0wX1LLk4nTph13kFla14tYzMNg1rK6DcHdU19FgpjO7T1D61AJXQUmOMJ5q1qX/8dWd7BLlXg== + dependencies: + "@material/mwc-base" "^0.17.2" + "@material/tab-indicator" "=8.0.0-canary.a78ceb112.0" + lit-element "^2.3.0" + lit-html "^1.1.2" + tslib "^1.10.0" + +"@material/mwc-tab-scroller@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-tab-scroller/-/mwc-tab-scroller-0.17.2.tgz#1f90691fe1bb91058cb884a72056951484967654" + integrity sha512-T03XsOQH457yhqeoZojMb2cfBshnBYCW4KIF8h2XqZiL9d47/E1OQqpWT/r1BbSZ7ysVhpH0TiwHvIaPzNW4ZA== + dependencies: + "@material/dom" "=8.0.0-canary.a78ceb112.0" + "@material/mwc-base" "^0.17.2" + "@material/tab-scroller" "=8.0.0-canary.a78ceb112.0" + lit-element "^2.3.0" + tslib "^1.10.0" + +"@material/mwc-tab@^0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@material/mwc-tab/-/mwc-tab-0.17.2.tgz#5629164b9099acd6d3d1109232b99ff23088f0ba" + integrity sha512-M8+T4jXL/noG3MAoxXNuN/or2Ky3Zozxa9XsgK4vGHK3rN5tB1w0t2ZMjmVgp8qJ4JIqgnYtsiM0Z1P/MLV4lw== + dependencies: + "@material/mwc-base" "^0.17.2" + "@material/mwc-ripple" "^0.17.2" + "@material/mwc-tab-indicator" "^0.17.2" + "@material/tab" "=8.0.0-canary.a78ceb112.0" + lit-element "^2.3.0" + lit-html "^1.1.2" + tslib "^1.10.0" + +"@material/progress-indicator@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/progress-indicator/-/progress-indicator-8.0.0-canary.a78ceb112.0.tgz#70a769d413910daf8ea1c4d51712487e381eaeab" + integrity sha512-r54SULT+K9TfvsMmBf4fkUFrblRmBssCEzqQD9DN/La3iidsWmhmId7wEuUukYtmFEQyIZUFo1Q9sqMlfyCCow== dependencies: tslib "^1.9.3" -"@material/radio@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/radio/-/radio-7.0.0-canary.d92d8c93e.0.tgz#bf112f224cc3f3d64021e2ba45def87203dfc3fe" - integrity sha512-ldDuoAMGy0bDNmIiYIro/N4XdoFERgM+7sJ+eHSlXUvR9Tl/YDkkGHvjRmEcl9E2CwjI9Oa3tPlj5dkggIBMGA== +"@material/radio@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/radio/-/radio-8.0.0-canary.a78ceb112.0.tgz#82ff41946e3cfc34af7a056f242700d34e00eda2" + integrity sha512-wjJ4MP9In0mhh+vafraFeuVa/M8HImwpFPzIkgH7TcSS4yIPK3KnTK5RHyWWEUA+Lk3DK02B8VRCqNPjRUhUBQ== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" - "@material/touch-target" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/touch-target" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/ripple@7.0.0-canary.d92d8c93e.0", "@material/ripple@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/ripple/-/ripple-7.0.0-canary.d92d8c93e.0.tgz#f617d942cecce3f219a15e46d0e540bde355e5f5" - integrity sha512-lnusvG5+xsaNsmj4MbUdzKeATzJ9uY8oWwSIApxyj4JOoHZzgwtkp/FTxri/rT0nE9wK7+h1oh+bEgZn7VCkZw== +"@material/ripple@8.0.0-canary.a78ceb112.0", "@material/ripple@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/ripple/-/ripple-8.0.0-canary.a78ceb112.0.tgz#98f03a91f42d730a0a6ef72f8025c4e27d09d500" + integrity sha512-0vftc/VRNBGNkVeaumc+ztN6cPUDUXL0+X1HQSuNGn4tS0slqQH6yi9+juZhteOGY9Ca+1D3agsB7H9eNzdM8Q== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/rtl@7.0.0-canary.d92d8c93e.0", "@material/rtl@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/rtl/-/rtl-7.0.0-canary.d92d8c93e.0.tgz#23b16cee381f52d31a25a424bbb921a3b23ba266" - integrity sha512-HmxYd7BKsR37QZQWX7lrZepvaZGCc9kJn5CBv3b8d9i3Oo+m6aJttDU/U0f7QNBTNBD+kLAlTL9pDd9CgvsYuQ== - -"@material/shape@7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/shape/-/shape-7.0.0-canary.d92d8c93e.0.tgz#85f3b60118dec525260dca048ec351520bb14b0f" - integrity sha512-ymVfwUsitJWLpUtsn4bjJo0+cvfkAWvjQbwFj7mDViF3FvLwZEp1pHeuuciso+YDYo4l3NAz/fG/xAy+FBMTfw== +"@material/rtl@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/rtl/-/rtl-8.0.0-canary.a78ceb112.0.tgz#1e2f515735c96afaace5c91aac14c168c6270e9a" + integrity sha512-+R/yFoO1Olt9hY0nvWRbTIQ7/PG9r7iv35J2Ld3Gx6CNZM2utql16bOG+5Ec81C6gBdvlgBcrCdQ8NdgYiablA== dependencies: - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" -"@material/switch@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/switch/-/switch-7.0.0-canary.d92d8c93e.0.tgz#b8f293b3a38c39a0f41e2d44163c45d2bd57a7d0" - integrity sha512-wWgObFNBl5oSnUZ+I3jZydQFmuv+H1sgBwSxdDTw0MJG/snZYX5V8KastUbqyG/uzuXnAtUNnhHLlPEmLDW/QQ== +"@material/shape@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/shape/-/shape-8.0.0-canary.a78ceb112.0.tgz#b652e07486250b36346246c4db07d5b2dab3e145" + integrity sha512-82fYRqdoBoFyS9+zuqqd9YJrsw8XykLA2xEf/ybtRGifwbLlk8ACrGN9dEwX6ixl7gt+JsXKBR9piF4XvxVjaw== dependencies: - "@material/animation" "7.0.0-canary.d92d8c93e.0" - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/density" "7.0.0-canary.d92d8c93e.0" - "@material/dom" "7.0.0-canary.d92d8c93e.0" - "@material/elevation" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/ripple" "7.0.0-canary.d92d8c93e.0" - "@material/rtl" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + +"@material/switch@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/switch/-/switch-8.0.0-canary.a78ceb112.0.tgz#bb735bfc32cfe0a5959ece836976d9706bfbf96a" + integrity sha512-Bu2Q8bjUCry4CAGLaaPQ83ID4xHp7BZyC3tJCvSbdX5qb7NGDDquTSIQ5YlJub5yfKPOyzHvBzbhmzFMym0j0g== + dependencies: + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" tslib "^1.9.3" -"@material/theme@7.0.0-canary.d92d8c93e.0", "@material/theme@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/theme/-/theme-7.0.0-canary.d92d8c93e.0.tgz#24da57015cba9d4759dade806a0ce92e10bf937a" - integrity sha512-Qx1ZPWDQVzE2adGGuVZ3wT0/jXvF8dW2Vei3oIbe52jNmHKS81ZMPgkHlYonKX5v53nKuxEdMIclZcFaEoBZWQ== +"@material/tab-bar@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/tab-bar/-/tab-bar-8.0.0-canary.a78ceb112.0.tgz#f15dc55be11dbfe9d42d5a924e5ebe0e122fd430" + integrity sha512-OrrieVHPPdBPm7Nsc2rdjLWIH5S1+immZxDe3zmn8eX0kw+EZf1HucFUwPWYFVTj1bFQfAk+P5AOHbrpu0UeAA== dependencies: - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/density" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/tab" "8.0.0-canary.a78ceb112.0" + "@material/tab-scroller" "8.0.0-canary.a78ceb112.0" + tslib "^1.9.3" -"@material/touch-target@7.0.0-canary.d92d8c93e.0", "@material/touch-target@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/touch-target/-/touch-target-7.0.0-canary.d92d8c93e.0.tgz#90c568ae9fcf083ddeb00dc1930ea722c39177b6" - integrity sha512-md7J3xLYHej2k2yQy/T7SJRCf9nOKsn7J8ufWsamy6HvGXOCvZivFlf70eDbdz7wUQiG0H6kT5KywQtdP16uvQ== +"@material/tab-indicator@8.0.0-canary.a78ceb112.0", "@material/tab-indicator@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/tab-indicator/-/tab-indicator-8.0.0-canary.a78ceb112.0.tgz#24ad5d88b9fd652c91cfdb0c4f86eae7b7f48c4f" + integrity sha512-LPh3RZwzbyoaCnCkRw2GvEdH1m3m49H+jzJaA56vP7XCrSqlFD0UvGHM622ObkFbJb3xV+SKtq+jcRzHcSlQQw== dependencies: - "@material/base" "7.0.0-canary.d92d8c93e.0" - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + tslib "^1.9.3" -"@material/typography@7.0.0-canary.d92d8c93e.0", "@material/typography@=7.0.0-canary.d92d8c93e.0": - version "7.0.0-canary.d92d8c93e.0" - resolved "https://registry.yarnpkg.com/@material/typography/-/typography-7.0.0-canary.d92d8c93e.0.tgz#5523b743ed8a86156627264f2546f32c000538bd" - integrity sha512-R7oAH4hi8EASn3Vetl+ZYIZkYQ6Cq2zVEE5zb1Iy6ELtwEL63lcb2oXEkvnTTYrS/XkQA7o4bs/HUAM+ojWECA== +"@material/tab-scroller@8.0.0-canary.a78ceb112.0", "@material/tab-scroller@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/tab-scroller/-/tab-scroller-8.0.0-canary.a78ceb112.0.tgz#393b79ed32bb6ceda87be8d4a6f64506b35e009d" + integrity sha512-of9L0foIN+jec1QRDnygTJ2vbK6MLGcJV1kPAFxBehObXo7MMisP8jZtxLCLaV5sdPpVvfIPdGdvvemYWUsysw== dependencies: - "@material/feature-targeting" "7.0.0-canary.d92d8c93e.0" - "@material/theme" "7.0.0-canary.d92d8c93e.0" + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/dom" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/tab" "8.0.0-canary.a78ceb112.0" + tslib "^1.9.3" -"@mdi/js@4.9.95": - version "4.9.95" - resolved "https://registry.yarnpkg.com/@mdi/js/-/js-4.9.95.tgz#8984c2ac04c89913a3ff2bbe4d91f4ab51d8ef4f" - integrity sha512-6zKTCqZUCuDWJThdRcjdFTqp2BXfYwXI1UlYa68A1/kmCcy1ijpbpRbrJcUdZ+9WojencCh1DOGFqhj/x8I/eQ== +"@material/tab@8.0.0-canary.a78ceb112.0", "@material/tab@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/tab/-/tab-8.0.0-canary.a78ceb112.0.tgz#0591ce259891e2a6b121af40b9fb182da2911ad6" + integrity sha512-lExmfj6Hw2Q9rSVTmjc+ruipoFZIgta9CAATRgxbuhCapXO7BUDkBihQbcxwTqH6qe4G80hRnUcsqm2PzsAEVA== + dependencies: + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/tab-indicator" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" + tslib "^1.9.3" -"@mdi/svg@4.9.95": - version "4.9.95" - resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-4.9.95.tgz#4e9d2b26b12e22f751336b35ba3cb763817e4c45" - integrity sha512-4RBtbnPlILP5TIQJ2p3t3VD6D+HcCeQtrFTKoa5e+v3ZvRbylffttYovtcFKfgEJ+Tk0s9t2NgLcPUyQtD9Rxg== +"@material/theme@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/theme/-/theme-8.0.0-canary.a78ceb112.0.tgz#0a32294d806f16ebfab42025d35056a6954863a0" + integrity sha512-/hBvqcXYDuCG0nWEJ8uYsM/XxrCE4EHcel7N6WYwZDRHlPfKQis3qPEJCJicdHckVFdOUvGr9KO2h5BWUNA90Q== + dependencies: + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + +"@material/top-app-bar@=8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/top-app-bar/-/top-app-bar-8.0.0-canary.a78ceb112.0.tgz#d84baf4a91cbaaf83b4bc7e798cbae0adff1b1b9" + integrity sha512-27bm0xPxepKSVh04FK7m0zUSP9FveIXv/qa2vJI3XTZWkFiNPrF+MGwkMPo83Z5TMqMFDRhDcjzSJlo9H4IrOg== + dependencies: + "@material/animation" "8.0.0-canary.a78ceb112.0" + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/elevation" "8.0.0-canary.a78ceb112.0" + "@material/ripple" "8.0.0-canary.a78ceb112.0" + "@material/rtl" "8.0.0-canary.a78ceb112.0" + "@material/shape" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + "@material/typography" "8.0.0-canary.a78ceb112.0" + tslib "^1.9.3" + +"@material/touch-target@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/touch-target/-/touch-target-8.0.0-canary.a78ceb112.0.tgz#dcacd182c99e3eae5547ffe26bc758fca252cfae" + integrity sha512-ZnwbC6Cd5Z5Fep1GGQozL5GQXbSSwNehdIbyOs5nDJCFikJIX5DYlYHVFvwhzB/rexhTzGQPaKLjUPUhYXGpoA== + dependencies: + "@material/base" "8.0.0-canary.a78ceb112.0" + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + +"@material/typography@8.0.0-canary.a78ceb112.0": + version "8.0.0-canary.a78ceb112.0" + resolved "https://registry.yarnpkg.com/@material/typography/-/typography-8.0.0-canary.a78ceb112.0.tgz#15b17f1c2a7c86406221317ff8f7f0f455fe2410" + integrity sha512-8OaNJzeVeYAxwWUjHR1QSxc6n68gL+xBQ2MYncStyyoHnaAL184OCGbPob2+11wuAmkE3XRnl7WdmVt2TtPu4Q== + dependencies: + "@material/feature-targeting" "8.0.0-canary.a78ceb112.0" + "@material/theme" "8.0.0-canary.a78ceb112.0" + +"@mdi/js@5.3.45": + version "5.3.45" + resolved "https://registry.yarnpkg.com/@mdi/js/-/js-5.3.45.tgz#c6f523311bf77e339051e24aaa3eddabf565a027" + integrity sha512-r05JoeUhokSERwW6yYi3WcKCBePHHqBvIikOD0X/dWyaZb6gIRth5Lya7VVTItvGo1qlpp8LpMJKmE6o49+G+Q== + +"@mdi/svg@5.3.45": + version "5.3.45" + resolved "https://registry.yarnpkg.com/@mdi/svg/-/svg-5.3.45.tgz#27456a94ffa16b71c0a6581b584f24ed9d4f6b2e" + integrity sha512-MHUZBDSRDG6uWcRlQs4nALliPRT8u4gg5E+knk7FuFBUb3NjFgjT0PjdnTyEN0f3mwVLzLvggs7v7G/NVO+gaw== "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" @@ -11235,6 +11305,11 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" +svg-gauge@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/svg-gauge/-/svg-gauge-1.0.6.tgz#1e84a366b1cce5b95dab3e33f41fdde867692d28" + integrity sha512-gRkznVhtS18eOM/GMPDXAvrLZOpqzNVDg4bFAPAEjiDKd1tZHFIe8Bwt3G6TFg/H+pFboetPPI+zoV+bOL26QQ== + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"