diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle index 3fc2d1ce6..c0b90fac0 100644 --- a/android/sdk/build.gradle +++ b/android/sdk/build.gradle @@ -124,6 +124,7 @@ android.libraryVariants.all { def variant -> // Bundle sounds // copy { + from("${projectDir}/../../sounds/incomingMessage.wav") from("${projectDir}/../../sounds/joined.wav") from("${projectDir}/../../sounds/left.wav") from("${projectDir}/../../sounds/outgoingRinging.wav") diff --git a/css/_font.scss b/css/_font.scss index 794d78acc..c3b0283a2 100644 --- a/css/_font.scss +++ b/css/_font.scss @@ -25,6 +25,9 @@ -moz-osx-font-smoothing: grayscale; } +.icon-chat-unread:before { + content: "\e0b7"; +} .icon-arrow_back:before { content: "\e5c4"; } diff --git a/fonts/jitsi.eot b/fonts/jitsi.eot index 3e5e995ed..a99abba14 100755 Binary files a/fonts/jitsi.eot and b/fonts/jitsi.eot differ diff --git a/fonts/jitsi.svg b/fonts/jitsi.svg index aeec48760..b6412e528 100755 --- a/fonts/jitsi.svg +++ b/fonts/jitsi.svg @@ -7,6 +7,7 @@ + diff --git a/fonts/jitsi.ttf b/fonts/jitsi.ttf index 36a98c788..a624768c8 100755 Binary files a/fonts/jitsi.ttf and b/fonts/jitsi.ttf differ diff --git a/fonts/jitsi.woff b/fonts/jitsi.woff index 97a3469bd..4f7e7fd74 100755 Binary files a/fonts/jitsi.woff and b/fonts/jitsi.woff differ diff --git a/fonts/selection.json b/fonts/selection.json index 14e4e8c88..03c9d53c9 100755 --- a/fonts/selection.json +++ b/fonts/selection.json @@ -1 +1 @@ -{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M790.857 529.714l-758.857 421.714c-17.714 9.714-32 1.143-32-18.857v-841.143c0-20 14.286-28.571 32-18.857l758.857 421.714c17.714 9.714 17.714 25.714 0 35.429z"],"width":808.5942857142857,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play"],"defaultCode":61515,"grid":14},"attrs":[],"properties":{"name":"play","id":75,"order":1380,"prevSize":28,"code":61515},"setIdx":0,"setId":2,"iconIdx":75},{"icon":{"paths":["M877.714 109.714v804.571c0 20-16.571 36.571-36.571 36.571h-804.571c-20 0-36.571-16.571-36.571-36.571v-804.571c0-20 16.571-36.571 36.571-36.571h804.571c20 0 36.571 16.571 36.571 36.571z"],"width":877.7142857142857,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["stop"],"defaultCode":61517,"grid":14},"attrs":[],"properties":{"name":"stop","id":77,"order":1381,"prevSize":28,"code":61517},"setIdx":0,"setId":2,"iconIdx":77},{"icon":{"paths":["M950.857 365.714c40.571 0 73.143 32.571 73.143 73.143s-32.571 73.143-73.143 73.143v219.429c0 40-33.143 73.143-73.143 73.143-101.714-84.571-265.714-200.571-464-217.143-68 22.857-91.429 102.286-46.857 148-40 65.714 11.429 112 72 159.429-35.429 69.714-182.857 70.857-235.429 22.286-33.143-101.714-82.286-203.429-42.286-332h-69.714c-50.286 0-91.429-41.143-91.429-91.429v-109.714c0-50.286 41.143-91.429 91.429-91.429h274.286c219.429 0 402.286-128 512-219.429 40 0 73.143 33.143 73.143 73.143v219.429zM877.714 710.857v-545.143c-149.143 114.286-293.714 180-438.857 196v154.286c145.143 16 289.714 80.571 438.857 194.857z"],"width":1024,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bullhorn"],"defaultCode":61601,"grid":14},"attrs":[],"properties":{"name":"dominant-speaker","id":152,"order":1379,"prevSize":28,"code":61601},"setIdx":0,"setId":2,"iconIdx":152},{"icon":{"paths":["M768 470v-44c0-24-18-42-42-42h-128c-24 0-44 18-44 42v172c0 24 20 42 44 42h128c24 0 42-18 42-42v-44h-64v22h-86v-128h86v22h64zM470 470v-44c0-24-20-42-44-42h-128c-24 0-42 18-42 42v172c0 24 18 42 42 42h128c24 0 44-18 44-42v-44h-64v22h-86v-128h86v22h64zM810 170c46 0 86 40 86 86v512c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-512c0-46 38-86 86-86h596z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["closed_caption"],"grid":24},"attrs":[{}],"properties":{"order":1,"id":0,"prevSize":24,"code":59696,"name":"closed_caption"},"setIdx":1,"setId":1,"iconIdx":0},{"icon":{"paths":["M113.778 0h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM170.667 113.778c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM113.778 568.889h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM170.667 682.667c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM682.667 0h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM739.556 113.778c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM682.667 568.889h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM739.556 682.667c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":24,"tags":["tiles-many"]},"attrs":[{}],"properties":{"order":1377,"id":1065,"name":"tiles-many","prevSize":24,"code":59694},"setIdx":1,"setId":1,"iconIdx":1},{"icon":{"paths":["M170.667 213.333h682.667c47.128 0 85.333 38.205 85.333 85.333v426.667c0 47.128-38.205 85.333-85.333 85.333h-682.667c-47.128 0-85.333-38.205-85.333-85.333v-426.667c-0-47.128 38.205-85.333 85.333-85.333zM213.333 298.667c-23.564 0-42.667 19.103-42.667 42.667v341.333c0 23.564 19.103 42.667 42.667 42.667h597.333c23.564 0 42.667-19.103 42.667-42.667v-341.333c0-23.564-19.103-42.667-42.667-42.667h-597.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":24,"tags":["tiles-one"]},"attrs":[{}],"properties":{"order":1378,"id":1064,"name":"tiles-one","prevSize":24,"code":59695},"setIdx":1,"setId":1,"iconIdx":2},{"icon":{"paths":["M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["close"],"defaultCode":58829,"grid":24},"attrs":[],"properties":{"ligatures":"clear, close","id":157,"order":1313,"prevSize":24,"code":58829,"name":"close"},"setIdx":1,"setId":1,"iconIdx":3},{"icon":{"paths":["M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["open_in_new"],"defaultCode":59550,"grid":24},"attrs":[],"properties":{"ligatures":"launch, open_in_new","id":1047,"order":1314,"prevSize":24,"name":"open_in_new","code":59550},"setIdx":1,"setId":1,"iconIdx":4},{"icon":{"paths":["M512 342h64v180l150 90-32 52-182-110v-212zM554 128c212 0 384 172 384 384s-172 384-384 384c-106 0-200-42-270-112l60-62c54 54 128 88 210 88 166 0 300-132 300-298s-134-298-300-298-298 132-298 298h128l-172 172-4-6-166-166h128c0-212 172-384 384-384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["restore"],"defaultCode":59571,"grid":24},"attrs":[],"properties":{"ligatures":"history, restore","id":1048,"order":1315,"prevSize":24,"code":59571,"name":"restore"},"setIdx":1,"setId":1,"iconIdx":5},{"icon":{"paths":["M426 256l256 256-256 256-60-60 196-196-196-196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate_next"],"defaultCode":58377,"grid":24},"attrs":[],"properties":{"ligatures":"chevron_right, navigate_next","id":1049,"order":1316,"prevSize":24,"code":58377,"name":"navigate_next"},"setIdx":1,"setId":1,"iconIdx":6},{"icon":{"paths":["M128 256h768v86h-768v-86zM128 554v-84h768v84h-768zM128 768v-86h768v86h-768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["menu"],"defaultCode":58834,"grid":24},"attrs":[],"properties":{"ligatures":"menu","id":1050,"order":1317,"prevSize":24,"code":58834,"name":"menu"},"setIdx":1,"setId":1,"iconIdx":7},{"icon":{"paths":["M854 470v84h-520l238 240-60 60-342-342 342-342 60 60-238 240h520z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_back"],"defaultCode":58820,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_back","id":1051,"order":1318,"prevSize":24,"code":58820,"name":"arrow_back"},"setIdx":1,"setId":1,"iconIdx":8},{"icon":{"paths":["M658 316l-196 196 196 196-60 60-256-256 256-256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate_before"],"defaultCode":58376,"grid":24},"attrs":[],"properties":{"ligatures":"chevron_left, navigate_before","id":1052,"order":1319,"prevSize":24,"code":58376,"name":"navigate_before"},"setIdx":1,"setId":1,"iconIdx":9},{"icon":{"paths":["M764 742c56-60 90-142 90-230 0-142-88-266-214-316v18c0 46-40 84-86 84h-84v86c0 24-20 42-44 42h-84v86h256c24 0 42 18 42 42v128h42c38 0 70 26 82 60zM470 850v-82c-46 0-86-40-86-86v-42l-204-204c-6 24-10 50-10 76 0 174 132 318 300 338zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["public"],"defaultCode":59403,"grid":24},"attrs":[],"properties":{"ligatures":"public","id":1053,"order":1320,"prevSize":24,"code":59403,"name":"public"},"setIdx":1,"setId":1,"iconIdx":10},{"icon":{"paths":["M598 598v84h-300v-84h300zM810 810v-468h-596v468h596zM810 128c46 0 86 40 86 86v596c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h42v-86h86v86h340v-86h86v86h42zM726 426v86h-428v-86h428z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["event_note"],"defaultCode":58902,"grid":24},"attrs":[],"properties":{"ligatures":"event_note","id":1054,"order":1321,"prevSize":24,"code":58902,"name":"event_note"},"setIdx":1,"setId":1,"iconIdx":11},{"icon":{"paths":["M512 854c166 0 298-134 298-300s-132-298-298-298-298 132-298 298 132 300 298 300zM812 316c52 66 84 148 84 238 0 212-172 384-384 384s-384-172-384-384 172-384 384-384c90 0 174 34 240 86l60-62c22 18 42 38 60 60zM470 598v-256h84v256h-84zM640 42v86h-256v-86h256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["timer"],"defaultCode":58405,"grid":24},"attrs":[],"properties":{"ligatures":"timer","id":1055,"order":1322,"prevSize":24,"code":58405,"name":"timer"},"setIdx":1,"setId":1,"iconIdx":12},{"icon":{"paths":["M550 696l-80-82v162zM470 248v162l80-82zM670 328l-184 184 184 184-244 242h-42v-324l-196 196-60-60 238-238-238-238 60-60 196 196v-324h42zM834 286c40 64 62 142 62 222 0 84-24 160-66 226l-50-50c26-52 42-110 42-172s-16-120-42-172zM608 512l98-98c12 30 20 64 20 98s-8 70-20 100z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bluetooth_searching"],"defaultCode":57770,"grid":24},"attrs":[],"properties":{"ligatures":"bluetooth_audio, bluetooth_searching","id":1056,"order":1323,"prevSize":24,"code":57770,"name":"bluetooth"},"setIdx":1,"setId":1,"iconIdx":13},{"icon":{"paths":["M512 42c212 0 384 172 384 384v300c0 70-58 128-128 128h-128v-342h170v-86c0-166-132-298-298-298s-298 132-298 298v86h170v342h-128c-70 0-128-58-128-128v-300c0-212 172-384 384-384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["headset"],"defaultCode":58128,"grid":24},"attrs":[],"properties":{"ligatures":"headset","id":1057,"order":1324,"prevSize":24,"code":58128,"name":"headset"},"setIdx":1,"setId":1,"iconIdx":14},{"icon":{"paths":["M640 512c0-70-58-128-128-128v-86c118 0 214 96 214 214h-86zM810 512c0-166-132-298-298-298v-86c212 0 384 172 384 384h-86zM854 662c24 0 42 18 42 42v150c0 24-18 42-42 42-400 0-726-326-726-726 0-24 18-42 42-42h150c24 0 42 18 42 42 0 54 8 104 24 152 4 14 2 32-10 44l-94 94c62 122 162 220 282 282l94-94c12-12 30-14 44-10 48 16 98 24 152 24z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["phone_in_talk"],"defaultCode":58909,"grid":24},"attrs":[],"properties":{"ligatures":"phone_in_talk","id":1058,"order":1325,"prevSize":24,"code":58909,"name":"phone-talk"},"setIdx":1,"setId":1,"iconIdx":15},{"icon":{"paths":["M512 682c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 342c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["more_vert"],"defaultCode":58836,"grid":24},"attrs":[],"properties":{"ligatures":"more_vert","id":1059,"order":1326,"prevSize":24,"code":58836,"name":"thumb-menu"},"setIdx":1,"setId":1,"iconIdx":16},{"icon":{"paths":["M330.667 554.667c-0.427-14.933 6.4-29.44 17.92-39.253 32 6.827 61.867 20.053 88.747 39.253 0 29.013-23.893 52.907-53.333 52.907s-52.907-23.467-53.333-52.907zM586.667 554.667c26.88-18.773 56.747-32 88.747-38.827 11.52 9.813 18.347 24.32 17.92 38.827 0 29.867-23.893 53.76-53.333 53.76s-53.333-23.893-53.333-53.76v0zM512 384c-118.187-1.707-234.667 27.733-338.347 85.333l-2.987 42.667c0 52.48 12.373 104.107 35.84 151.040 101.12-15.36 203.093-23.040 305.493-23.040s204.373 7.68 305.493 23.040c23.467-46.933 35.84-98.56 35.84-151.040l-2.987-42.667c-103.68-57.6-220.16-87.040-338.347-85.333zM512 85.333c235.641 0 426.667 191.025 426.667 426.667s-191.025 426.667-426.667 426.667c-235.641 0-426.667-191.025-426.667-426.667s191.025-426.667 426.667-426.667z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ninja"],"grid":24},"attrs":[{}],"properties":{"order":1327,"id":1060,"name":"ninja","prevSize":24,"code":59657},"setIdx":1,"setId":1,"iconIdx":17},{"icon":{"paths":["M282 460c62 120 162 220 282 282l94-94c12-12 30-16 44-10 48 16 100 24 152 24 24 0 42 18 42 42v150c0 24-18 42-42 42-400 0-726-326-726-726 0-24 18-42 42-42h150c24 0 42 18 42 42 0 54 8 104 24 152 4 14 2 32-10 44z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["phone"],"defaultCode":57549,"grid":24},"attrs":[],"properties":{"ligatures":"call, local_phone, phone","id":1061,"order":1328,"prevSize":24,"code":57549,"name":"phone"},"setIdx":1,"setId":1,"iconIdx":18},{"icon":{"paths":["M810 554h-256v256h-84v-256h-256v-84h256v-256h84v256h256v84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["add"],"defaultCode":57669,"grid":24},"attrs":[],"properties":{"ligatures":"add","id":1062,"order":1329,"prevSize":24,"code":57669,"name":"add"},"setIdx":1,"setId":1,"iconIdx":19},{"icon":{"paths":["M0 512c0 282.795 229.205 512 512 512s512-229.205 512-512c0-282.795-229.205-512-512-512s-512 229.205-512 512zM525.005 264.638c-20.475-24.944-16.326-61.342 9.268-81.297s62.94-15.911 83.416 9.033c16.036 19.536 38.593 52.97 60.894 97.797 81.621 164.065 89.461 340.992-26.857 506.352-8.384 11.919-17.386 23.69-27.012 35.307-20.593 24.851-57.959 28.727-83.458 8.657s-29.476-56.487-8.882-81.338c7.686-9.275 14.833-18.621 21.455-28.035 88.66-126.041 82.71-260.306 17.953-390.475-10.599-21.305-21.94-40.51-33.198-57.196-6.515-9.657-11.322-16.057-13.578-18.805zM353.479 376.54c-19.353-24.679-15.129-60.448 9.434-79.893s60.164-15.2 79.517 9.479c9.635 12.287 22.577 32.644 35.209 60.034 50.35 109.176 50.35 231.689-33.639 349.612-18.198 25.551-53.566 31.441-78.997 13.157s-31.294-53.819-13.096-79.37c57.564-80.822 57.564-160.581 22.983-235.565-8.601-18.65-16.892-31.691-21.412-37.455z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["speaker"]},"attrs":[{}],"properties":{"order":1312,"id":1063,"name":"speaker","prevSize":32,"code":59693},"setIdx":1,"setId":1,"iconIdx":20},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM298.225 593.975h-112.35v-206.5h-52.85v252.525h165.2v-46.025zM399.025 640v-252.525h-52.85v252.525h52.85zM591.525 640l84.175-252.525h-56.875l-56.35 193.025h-3.15l-57.4-193.025h-59.675l85.4 252.525h63.875zM886.050 594.85h-114.45v-61.425h107.975v-41.825h-107.975v-58.975h114.45v-45.15h-167.3v252.525h167.3v-45.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["live"]},"attrs":[{}],"properties":{"order":1330,"id":1000,"name":"live","prevSize":32,"code":59692},"setIdx":1,"setId":1,"iconIdx":21},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM581.333 590.218h-110.595v-59.233h104.338v-40.332h-104.338v-56.87h110.595v-43.539h-161.665v243.512h161.665v-43.539zM738.771 640c58.849 0 101.802-36.282 106.029-88.933h-49.717c-4.904 26.832-26.888 44.045-56.143 44.045-38.556 0-62.4-31.895-62.4-83.196s23.844-83.027 62.231-83.027c29.086 0 51.239 18.394 56.143 46.407h49.717c-3.72-52.989-48.026-91.296-105.86-91.296-70.855 0-114.485 48.77-114.485 127.916 0 79.314 43.798 128.084 114.485 128.084zM230.27 545.498h41.769l45.489 88.258h57.834l-51.408-96.19c28.072-11.138 44.306-38.138 44.306-69.189 0-48.432-32.976-78.133-86.582-78.133h-102.478v243.512h51.070v-88.258zM230.27 431.42v74.927h44.813c25.704 0 40.754-13.838 40.754-37.295 0-23.119-15.896-37.632-41.262-37.632h-44.306z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["rec"]},"attrs":[{}],"properties":{"order":1331,"id":1001,"name":"rec","prevSize":32,"code":59691},"setIdx":1,"setId":1,"iconIdx":22},{"icon":{"paths":["M725.333 512c0 117.821-95.513 213.333-213.333 213.333s-213.333-95.513-213.333-213.333c0-117.821 95.513-213.333 213.333-213.333s213.333 95.513 213.333 213.333z","M512 768c141.385 0 256-114.615 256-256s-114.615-256-256-256v0c-141.385 0-256 114.615-256 256s114.615 256 256 256v0zM512 810.667c-164.949 0-298.667-133.718-298.667-298.667s133.718-298.667 298.667-298.667v0c164.949 0 298.667 133.718 298.667 298.667s-133.718 298.667-298.667 298.667v0z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["camera-take-picture"]},"attrs":[{},{}],"properties":{"order":1332,"id":1002,"name":"camera-take-picture","prevSize":32,"code":59690},"setIdx":1,"setId":1,"iconIdx":23},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM308.25 636.7h57.225l-87.675-252.525h-62.125l-87.675 252.525h53.025l19.425-60.2h88.725l19.075 60.2zM461.9 384.175h-52.85v165.375c0 56 41.125 93.625 105.7 93.625 64.75 0 105.875-37.625 105.875-93.625v-165.375h-52.85v159.95c0 31.85-19.075 52.15-53.025 52.15-33.775 0-52.85-20.3-52.85-52.15v-159.95zM682.225 384v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM735.075 429.15v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15zM243.5 436.675l-31.675 99.050h66.15l-31.325-99.050h-3.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["AUD"]},"attrs":[{}],"properties":{"order":1333,"id":1003,"name":"AUD","prevSize":32,"code":59648},"setIdx":1,"setId":1,"iconIdx":24},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM481.359 640v-255.823h-54.273v103.18h-116.813v-103.18h-54.273v255.823h54.273v-106.903h116.813v106.903h54.273zM544.258 384v256h102.077c77.636 0 121.665-46.626 121.665-129.773 0-80.133-44.569-126.227-121.665-126.227h-102.077zM598.531 429.74v164.521h39.177c47.983 0 74.94-29.075 74.94-83.147 0-51.767-27.855-81.374-74.94-81.374h-39.177z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["HD"]},"attrs":[{}],"properties":{"order":1334,"id":1004,"name":"HD","prevSize":32,"code":59687},"setIdx":1,"setId":1,"iconIdx":25},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM472.4 590.675h-112.35v-206.5h-52.85v252.525h165.2v-46.025zM520.35 384v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM573.2 429.15v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["LD"]},"attrs":[{}],"properties":{"order":1335,"id":1005,"name":"LD","prevSize":32,"code":59688},"setIdx":1,"setId":1,"iconIdx":26},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM281.6 572.825c1.925 47.075 40.95 76.65 101.15 76.65 63.35 0 102.375-31.15 102.375-82.075 0-39.2-21.875-61.075-72.625-71.75l-30.45-6.475c-29.575-6.3-41.65-15.225-41.65-30.8 0-19.25 17.5-31.5 43.925-31.5 25.55 0 44.1 13.3 46.55 33.25h49.7c-1.575-44.975-40.95-76.125-96.6-76.125-58.275 0-96.6 31.325-96.6 78.925 0 38.5 22.575 62.475 68.6 72.1l32.9 7c30.975 6.65 43.575 15.925 43.575 32.025 0 19.075-19.425 32.375-46.9 32.375-29.75 0-50.4-13.125-52.85-33.6h-51.1zM535 390.3v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM587.85 435.45v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["SD"]},"attrs":[{}],"properties":{"order":1336,"id":1006,"name":"SD","prevSize":32,"code":59689},"setIdx":1,"setId":1,"iconIdx":27},{"icon":{"paths":["M896 0c70.692 0 128 57.308 128 128v768c0 70.692-57.308 128-128 128s-128-57.308-128-128v-768c0-70.692 57.308-128 128-128zM512 256c70.692 0 128 57.308 128 128v512c0 70.692-57.308 128-128 128s-128-57.308-128-128v-512c0-70.692 57.308-128 128-128zM128 640v0c70.692 0 128 57.308 128 128v128c0 70.692-57.308 128-128 128s-128-57.308-128-128v-128c0-70.692 57.308-128 128-128v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["gsm-bars-black"]},"attrs":[{}],"properties":{"order":1337,"id":1007,"name":"gsm-bars-black","prevSize":32,"code":59686},"setIdx":1,"setId":1,"iconIdx":28},{"icon":{"paths":["M512 85.333c-235.52 0-426.667 191.147-426.667 426.667s191.147 426.667 426.667 426.667 426.667-191.147 426.667-426.667-191.147-426.667-426.667-426.667zM554.667 725.333h-85.333v-256h85.333v256zM554.667 384h-85.333v-85.333h85.333v85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["ic_info_black_24px"]},"attrs":[{}],"properties":{"order":1338,"id":1008,"name":"info","prevSize":32,"code":59682},"setIdx":1,"setId":1,"iconIdx":29},{"icon":{"paths":["M756.704 395.862l267.296-202.213v635.075l-267.296-202.213v191.923c0 12.085-11.296 21.863-25.216 21.863h-706.272c-13.92 0-25.216-9.777-25.216-21.863v-612.25c0-12.085 11.296-21.863 25.216-21.863h706.272c13.92 0 25.216 9.777 25.216 21.863v189.679zM371.338 647.772c47.817 0 86.529-40.232 86.529-89.811v-184.835c0-49.651-38.713-89.883-86.529-89.883-47.788 0-86.515 40.232-86.515 89.883v184.835c0 49.579 38.756 89.811 86.515 89.811v0zM356.754 709.93v32.78h33.718v-33.412c73.858-9.606 131.235-73.73 131.235-151.351v-88.232h-30.636v88.232c0 67.57-53.696 122.534-119.734 122.534-66.024 0-119.691-54.964-119.691-122.534v-88.232h-30.636v88.232c0 79.215 59.674 144.502 135.744 151.969v0.014z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["Combined Shape"],"grid":0},"attrs":[{}],"properties":{"order":1339,"id":1009,"name":"mic-camera-combined","prevSize":32,"code":59651},"setIdx":1,"setId":1,"iconIdx":30},{"icon":{"paths":["M42.667 896h170.667v-512h-170.667v512zM981.333 426.667c0-46.933-38.4-85.333-85.333-85.333h-269.227l40.533-194.987 1.28-13.653c0-17.493-7.253-33.707-18.773-45.227l-45.227-44.8-280.747 281.173c-15.787 15.36-25.173 36.693-25.173 60.16v426.667c0 46.933 38.4 85.333 85.333 85.333h384c35.413 0 65.707-21.333 78.507-52.053l128.853-300.8c3.84-9.813 5.973-20.053 5.973-31.147v-81.493l-0.427-0.427 0.427-3.413z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ic_thumb_up_black_24px"],"grid":0},"attrs":[{}],"properties":{"order":1340,"id":1010,"name":"feedback","prevSize":32,"code":59677},"setIdx":1,"setId":1,"iconIdx":31},{"icon":{"paths":["M896 128h-768c-46.933 0-85.333 38.4-85.333 85.333v597.333c0 46.933 38.4 85.333 85.333 85.333h768c46.933 0 85.333-38.4 85.333-85.333v-597.333c0-46.933-38.4-85.333-85.333-85.333zM896 810.667h-768v-128h768v128z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ic_call_to_action_black_24px"],"grid":0},"attrs":[{}],"properties":{"order":1341,"id":1011,"name":"toggle-filmstrip","prevSize":32,"code":59676},"setIdx":1,"setId":1,"iconIdx":32},{"icon":{"paths":["M512 820c106 0 200-56 256-138-2-84-172-132-256-132-86 0-254 48-256 132 56 82 150 138 256 138zM512 214c-70 0-128 58-128 128s58 128 128 128 128-58 128-128-58-128-128-128zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["account_circle"],"grid":0},"attrs":[],"properties":{"id":1012,"order":1342,"ligatures":"account_circle","prevSize":32,"code":59649,"name":"avatar"},"setIdx":1,"setId":1,"iconIdx":33},{"icon":{"paths":["M512 384c-68 0-134 10-196 30v132c0 16-10 34-24 40-42 20-80 46-114 78-8 8-18 12-30 12s-22-4-30-12l-106-106c-8-8-12-18-12-30s4-22 12-30c130-124 306-200 500-200s370 76 500 200c8 8 12 18 12 30s-4 22-12 30l-106 106c-8 8-18 12-30 12s-22-4-30-12c-34-32-72-58-114-78-14-6-24-20-24-38v-132c-62-20-128-32-196-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["call_end"],"grid":0},"attrs":[],"properties":{"id":1013,"order":1343,"ligatures":"call_end","prevSize":32,"code":59653,"name":"hangup"},"setIdx":1,"setId":1,"iconIdx":34},{"icon":{"paths":["M854 682v-512h-684v598l86-86h598zM854 86c46 0 84 38 84 84v512c0 46-38 86-84 86h-598l-170 170v-768c0-46 38-84 84-84h684z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chat_bubble_outline"],"grid":0},"attrs":[],"properties":{"id":1014,"order":1344,"ligatures":"chat_bubble_outline","prevSize":32,"code":59654,"name":"chat"},"setIdx":1,"setId":1,"iconIdx":35},{"icon":{"paths":["M726 554h-128v-170h-172v170h-128l214 214zM826 428c110 8 198 100 198 212 0 118-96 214-214 214h-554c-142 0-256-114-256-256 0-132 100-240 228-254 54-102 160-174 284-174 156 0 284 110 314 258z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cloud_download"],"grid":0},"attrs":[],"properties":{"id":1015,"order":1345,"ligatures":"cloud_download","prevSize":32,"code":59650,"name":"download"},"setIdx":1,"setId":1,"iconIdx":36},{"icon":{"paths":["M884 300l-78 78-160-160 78-78c16-16 44-16 60 0l100 100c16 16 16 44 0 60zM128 736l472-472 160 160-472 472h-160v-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mode_edit"],"grid":0},"attrs":[],"properties":{"id":1016,"order":1346,"ligatures":"create, edit, mode_edit","prevSize":32,"code":59655,"name":"edit"},"setIdx":1,"setId":1,"iconIdx":37},{"icon":{"paths":["M554 384h236l-236-234v234zM682 598v-86h-340v86h340zM682 768v-86h-340v86h340zM598 86l256 256v512c0 46-40 84-86 84h-512c-46 0-86-38-86-84l2-684c0-46 38-84 84-84h342z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["description"],"grid":0},"attrs":[],"properties":{"id":1017,"order":1347,"ligatures":"description","prevSize":32,"code":59656,"name":"share-doc"},"setIdx":1,"setId":1,"iconIdx":38},{"icon":{"paths":["M512 214l284 426h-568zM214 726h596v84h-596v-84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["eject"],"grid":0},"attrs":[],"properties":{"id":1018,"order":1348,"ligatures":"eject","prevSize":32,"code":59652,"name":"kick"},"setIdx":1,"setId":1,"iconIdx":39},{"icon":{"paths":["M512 342l256 256-60 60-196-196-196 196-60-60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["expand_less"],"grid":0},"attrs":[],"properties":{"id":1019,"order":1349,"ligatures":"expand_less","prevSize":32,"code":59679,"name":"menu-up"},"setIdx":1,"setId":1,"iconIdx":40},{"icon":{"paths":["M708 366l60 60-256 256-256-256 60-60 196 196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["expand_more"],"grid":0},"attrs":[],"properties":{"id":1020,"order":1350,"ligatures":"expand_more","prevSize":32,"code":59680,"name":"menu-down"},"setIdx":1,"setId":1,"iconIdx":41},{"icon":{"paths":["M598 214h212v212h-84v-128h-128v-84zM726 726v-128h84v212h-212v-84h128zM214 426v-212h212v84h-128v128h-84zM298 598v128h128v84h-212v-212h84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fullscreen"],"grid":0},"attrs":[],"properties":{"id":1021,"order":1351,"ligatures":"fullscreen","prevSize":32,"code":59659,"name":"full-screen"},"setIdx":1,"setId":1,"iconIdx":42},{"icon":{"paths":["M682 342h128v84h-212v-212h84v128zM598 810v-212h212v84h-128v128h-84zM342 342v-128h84v212h-212v-84h128zM214 682v-84h212v212h-84v-128h-128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fullscreen_exit"],"grid":0},"attrs":[],"properties":{"id":1022,"order":1352,"ligatures":"fullscreen_exit","prevSize":32,"code":59660,"name":"exit-full-screen"},"setIdx":1,"setId":1,"iconIdx":43},{"icon":{"paths":["M512 736l-264 160 70-300-232-202 306-26 120-282 120 282 306 26-232 202 70 300z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["star"],"grid":0},"attrs":[],"properties":{"id":1023,"order":1353,"ligatures":"grade, star","prevSize":32,"code":59658,"name":"star-full"},"setIdx":1,"setId":1,"iconIdx":44},{"icon":{"paths":["M768 854v-428h-512v428h512zM768 342c46 0 86 38 86 84v428c0 46-40 84-86 84h-512c-46 0-86-38-86-84v-428c0-46 40-84 86-84h388v-86c0-72-60-132-132-132s-132 60-132 132h-82c0-118 96-214 214-214s214 96 214 214v86h42zM512 726c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lock_open"],"grid":0},"attrs":[],"properties":{"id":1024,"order":1354,"ligatures":"lock_open","prevSize":32,"code":59661,"name":"security"},"setIdx":1,"setId":1,"iconIdx":45},{"icon":{"paths":["M768 854v-428h-512v428h512zM380 256v86h264v-86c0-72-60-132-132-132s-132 60-132 132zM768 342c46 0 86 38 86 84v428c0 46-40 84-86 84h-512c-46 0-86-38-86-84v-428c0-46 40-84 86-84h42v-86c0-118 96-214 214-214s214 96 214 214v86h42zM512 726c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lock_outline"],"grid":0},"attrs":[],"properties":{"id":1025,"order":1355,"ligatures":"lock_outline","prevSize":32,"code":59662,"name":"security-locked"},"setIdx":1,"setId":1,"iconIdx":46},{"icon":{"paths":["M512 768v-128l170 170-170 172v-128c-188 0-342-154-342-342 0-66 20-130 54-182l62 62c-20 36-30 76-30 120 0 142 114 256 256 256zM512 170c188 0 342 154 342 342 0 66-20 130-54 182l-62-62c20-36 30-76 30-120 0-142-114-256-256-256v128l-170-170 170-172v128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sync"],"grid":0},"attrs":[],"properties":{"id":1026,"order":1356,"ligatures":"loop, sync","prevSize":32,"code":59663,"name":"reload"},"setIdx":1,"setId":1,"iconIdx":47},{"icon":{"paths":["M738 470h72c0 146-116 266-256 286v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216s226-88 226-216zM512 598c-70 0-128-58-128-128v-256c0-70 58-128 128-128s128 58 128 128v256c0 70-58 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic"],"grid":0},"attrs":[],"properties":{"id":1027,"order":1357,"ligatures":"mic","prevSize":32,"code":59664,"name":"microphone"},"setIdx":1,"setId":1,"iconIdx":48},{"icon":{"paths":["M738 470h72c0 146-116 266-256 286v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216s226-88 226-216zM460 210v264c0 28 24 50 52 50s50-22 50-50l2-264c0-28-24-52-52-52s-52 24-52 52zM512 598c-70 0-128-58-128-128v-256c0-70 58-128 128-128s128 58 128 128v256c0 70-58 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic_none"],"grid":0},"attrs":[],"properties":{"id":1028,"order":1358,"ligatures":"mic_none","prevSize":32,"code":59665,"name":"mic-empty"},"setIdx":1,"setId":1,"iconIdx":49},{"icon":{"paths":["M182 128l714 714-54 54-178-178c-32 20-72 32-110 38v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216 34 0 68-8 98-22l-70-70c-8 2-18 4-28 4-70 0-128-58-128-128v-32l-256-256zM640 476l-256-254v-8c0-70 58-128 128-128s128 58 128 128v262zM810 470c0 50-14 98-38 140l-52-54c12-26 18-54 18-86h72z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic_off"],"grid":0},"attrs":[],"properties":{"id":1029,"order":1359,"ligatures":"mic_off","prevSize":32,"code":59666,"name":"mic-disabled"},"setIdx":1,"setId":1,"iconIdx":50},{"icon":{"paths":["M982 234v620c0 94-78 170-172 170h-310c-46 0-90-18-122-50l-336-342s54-52 56-52c10-8 22-12 34-12 10 0 18 2 26 6 2 0 184 104 184 104v-508c0-36 28-64 64-64s64 28 64 64v300h42v-406c0-36 28-64 64-64s64 28 64 64v406h42v-364c0-36 28-64 64-64s64 28 64 64v364h44v-236c0-36 28-64 64-64s64 28 64 64z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pan_tool"],"grid":0},"attrs":[],"properties":{"id":1030,"order":1360,"ligatures":"pan_tool","prevSize":32,"code":59678,"name":"raised-hand"},"setIdx":1,"setId":1,"iconIdx":51},{"icon":{"paths":["M704 278c-46 0-86 38-86 84s40 86 86 86 86-40 86-86-40-84-86-84zM704 512c-82 0-150-68-150-150s68-148 150-148 150 66 150 148-68 150-150 150zM320 278c-46 0-86 38-86 84s40 86 86 86 86-40 86-86-40-84-86-84zM320 512c-82 0-150-68-150-150s68-148 150-148 150 66 150 148-68 150-150 150zM918 746v-52c0-24-110-76-214-76-46 0-90 12-128 24 14 16 22 32 22 52v52h320zM534 746v-52c0-24-110-76-214-76s-214 52-214 76v52h428zM704 554c92 0 278 48 278 140v116h-940v-116c0-92 186-140 278-140 52 0 130 16 192 44 62-28 140-44 192-44z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["people_outline"],"grid":0},"attrs":[],"properties":{"id":1031,"order":1361,"ligatures":"people_outline","prevSize":32,"code":59675,"name":"contactList"},"setIdx":1,"setId":1,"iconIdx":52},{"icon":{"paths":["M640 598c114 0 342 56 342 170v86h-684v-86c0-114 228-170 342-170zM256 426h128v86h-128v128h-86v-128h-128v-86h128v-128h86v128zM640 512c-94 0-170-76-170-170s76-172 170-172 170 78 170 172-76 170-170 170z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["person_add"],"grid":0},"attrs":[],"properties":{"id":1032,"order":1362,"ligatures":"person_add","prevSize":32,"code":59667,"name":"link"},"setIdx":1,"setId":1,"iconIdx":53},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426zM426 704v-384l256 192z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play_circle_outline"],"grid":0},"attrs":[],"properties":{"id":1033,"order":1363,"ligatures":"play_circle_outline","prevSize":32,"code":59668,"name":"shared-video"},"setIdx":1,"setId":1,"iconIdx":54},{"icon":{"paths":["M512 662c82 0 150-68 150-150s-68-150-150-150-150 68-150 150 68 150 150 150zM830 554l90 70c8 6 10 18 4 28l-86 148c-6 10-16 12-26 8l-106-42c-22 16-46 32-72 42l-16 112c-2 10-10 18-20 18h-172c-10 0-18-8-20-18l-16-112c-26-10-50-24-72-42l-106 42c-10 4-20 2-26-8l-86-148c-6-10-4-22 4-28l90-70c-2-14-2-28-2-42s0-28 2-42l-90-70c-8-6-10-18-4-28l86-148c6-10 16-12 26-8l106 42c22-16 46-32 72-42l16-112c2-10 10-18 20-18h172c10 0 18 8 20 18l16 112c26 10 50 24 72 42l106-42c10-4 20-2 26 8l86 148c6 10 4 22-4 28l-90 70c2 14 2 28 2 42s0 28-2 42z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["settings"],"grid":0},"attrs":[],"properties":{"id":1034,"order":1364,"ligatures":"settings","prevSize":32,"code":59669,"name":"settings"},"setIdx":1,"setId":1,"iconIdx":55},{"icon":{"paths":["M512 658l160 96-42-182 142-124-188-16-72-172-72 172-188 16 142 124-42 182zM938 394l-232 202 70 300-264-160-264 160 70-300-232-202 306-26 120-282 120 282z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["star_border"],"grid":0},"attrs":[],"properties":{"id":1035,"order":1365,"ligatures":"star_border","prevSize":32,"code":59670,"name":"star"},"setIdx":1,"setId":1,"iconIdx":56},{"icon":{"paths":["M640 662l150-150-150-150v108h-256v-108l-150 150 150 150v-108h256v108zM854 170c46 0 84 40 84 86v512c0 46-38 86-84 86h-684c-46 0-84-40-84-86v-512c0-46 38-86 84-86h136l78-84h256l78 84h136z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["switch_camera"],"grid":0},"attrs":[],"properties":{"id":1036,"order":1366,"ligatures":"switch_camera","prevSize":32,"code":59681,"name":"switch-camera"},"setIdx":1,"setId":1,"iconIdx":57},{"icon":{"paths":["M896 726v-512h-768v512h768zM896 128c46 0 86 40 86 86l-2 512c0 46-38 84-84 84h-214v86h-340v-86h-214c-46 0-86-38-86-84v-512c0-46 40-86 86-86h768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tv"],"grid":0},"attrs":[],"properties":{"id":1037,"order":1367,"ligatures":"tv","prevSize":32,"code":59671,"name":"share-desktop"},"setIdx":1,"setId":1,"iconIdx":58},{"icon":{"paths":["M726 448l170-170v468l-170-170v150c0 24-20 42-44 42h-512c-24 0-42-18-42-42v-428c0-24 18-42 42-42h512c24 0 44 18 44 42v150z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["videocam"],"grid":0},"attrs":[],"properties":{"id":1038,"order":1368,"ligatures":"videocam","prevSize":32,"code":59672,"name":"camera"},"setIdx":1,"setId":1,"iconIdx":59},{"icon":{"paths":["M140 86l756 756-54 54-136-136c-6 4-16 8-24 8h-512c-24 0-42-18-42-42v-428c0-24 18-42 42-42h32l-116-116zM896 278v456l-478-478h264c24 0 44 18 44 42v150z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["videocam_off"],"grid":0},"attrs":[],"properties":{"id":1039,"order":1369,"ligatures":"videocam_off","prevSize":32,"code":59673,"name":"camera-disabled"},"setIdx":1,"setId":1,"iconIdx":60},{"icon":{"paths":["M598 138c172 38 298 192 298 374s-126 336-298 374v-88c124-36 212-150 212-286s-88-250-212-286v-88zM704 512c0 76-42 140-106 172v-344c64 32 106 96 106 172zM128 384h170l214-214v684l-214-214h-170v-256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume_up"],"grid":0},"attrs":[],"properties":{"id":1040,"order":1370,"ligatures":"volume_up","prevSize":32,"code":59674,"name":"volume"},"setIdx":1,"setId":1,"iconIdx":61},{"icon":{"paths":["M1123.444 20.985c-23.593-26.481-64.131-28.989-90.74-5.395l-1008.269 893.436c-26.609 23.468-28.991 64.131-5.46 90.676 12.674 14.306 30.308 21.649 48.126 21.649 15.123 0 30.372-5.401 42.544-16.195l130.045-115.22c90.743 81.844 210.569 132.165 342.473 132.101 282.816-0.061 510.913-227.969 511.287-510.972 0.126-109.934-34.682-211.367-93.499-294.72l118.088-104.625c26.483-23.526 28.997-64.129 5.404-90.735zM944.422 510.182c0.128 200.922-161.896 363.201-362.509 362.952-87.56-0.123-167.573-31.151-230.061-82.569l331.277-293.509v73.176c1.071 60.993 32.696 92.18 94.944 93.692 61.997-1.512 93.686-32.763 95.131-93.756v-41.096h-72.227v47.499c0.251 4.642-0.564 10.607-2.511 17.949-1.25 3.261-3.448 6.020-6.525 8.093-3.197 2.572-7.845 3.828-13.868 3.828-10.543-0.31-17.132-4.268-19.827-11.921-1.068-3.512-1.947-6.905-2.508-10.163-0.254-2.887-0.377-5.532-0.377-7.786v-143.511l42.477-37.634c0.215 0.432 0.452 0.851 0.63 1.303 1.947 6.467 2.762 12.799 2.511 19.076v36.772h72.227v-30.121c-0.246-31.245-9.086-54.699-26.363-70.447l40.711-36.069c35.787 56.055 56.803 122.585 56.867 194.244z","M239.795 628.53c-12.613-37.023-19.827-76.557-19.827-117.913-0.19-200.236 161.584-362.009 361.945-362.135 56.853 0 110.313 13.302 158.133 36.398l117.846-104.421c-79.444-50.952-173.758-80.817-275.292-80.948-283.377-0.181-511.354 227.729-511.789 511.675-0.126 79.567 18.636 154.679 51.137 221.882l117.848-104.538z","M388.576 333.98h-97.514v249.057l72.23-64.070v-0.689h0.815l117.72-104.418c0-0.564 0.123-0.94 0.123-1.509 0.753-53.898-30.369-80.069-93.374-78.37zM405.959 398.483c1.942 2.767 3.074 6.469 3.323 11.112 0.312 4.452 0.438 9.6 0.438 15.246 0.251 10.916-0.689 19.83-2.949 26.985-2.952 7.594-10.983 11.357-24.159 11.357h-19.325v-74.043h15.31c7.842 0 13.865 0.683 18.072 2.19 4.397 1.573 7.468 3.953 9.29 7.153z"],"width":1140,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["recDisable"],"grid":0},"attrs":[],"properties":{"order":1371,"id":1041,"prevSize":32,"code":58899,"name":"recDisable","ligatures":""},"setIdx":1,"setId":1,"iconIdx":62},{"icon":{"paths":["M581.278-1.708c284.857 0.19 514.807 230.517 514.427 514.997-0.378 285.047-230.073 514.553-514.869 514.615-284.541 0.062-515.311-230.517-514.933-514.422 0.439-285.936 230.009-515.439 515.375-515.19zM580.579 148.244c-201.764 0.123-364.666 163.032-364.478 364.663 0 202.018 162.524 364.735 364.478 364.984 202.018 0.316 365.174-163.030 365.048-365.423-0.252-201.767-163.156-364.35-365.048-364.224z","M287.698 335.093h98.196c63.442-1.767 94.785 24.518 94.027 78.863 0.254 19.081-2.211 34.882-7.456 47.521-6.005 12.508-18.706 21.988-38.167 28.181v0.819c28.373 6.259 43.031 23.573 43.981 51.946v57.689c0 11.247 0.254 22.813 0.758 34.756 0.819 12.005 3.033 20.979 6.696 27.043h-71.846c-3.727-6.064-6.128-15.038-7.14-27.043-1.012-11.943-1.454-23.509-1.138-34.756v-52.321c0-9.603-2.214-16.553-6.573-20.979-4.675-4.107-12.701-6.19-24.012-6.19h-14.599v141.291h-72.73v-326.82zM360.428 465.139h19.463c13.271 0 21.359-3.794 24.331-11.375 2.276-7.204 3.221-16.304 2.969-27.171 0-5.815-0.126-10.867-0.442-15.418-0.252-4.675-1.392-8.404-3.352-11.247-1.831-3.157-4.926-5.561-9.352-7.14-4.233-1.454-10.299-2.211-18.2-2.211h-15.418v74.564z","M498.372 335.093h162.082v62.687h-89.35v65.587h78.103v62.685h-78.103v73.11h92.822v62.749h-165.557v-326.818z","M682.507 424.001c0.316-31.782 9.416-55.542 27.425-71.407 17.44-15.29 40.185-22.936 68.181-22.936 28.247 0 51.119 7.646 68.623 23 17.82 15.798 26.92 39.623 27.171 71.407v30.333h-72.73v-37.031c0.254-6.192-0.57-12.639-2.527-19.209-1.264-3.157-3.475-5.938-6.573-8.214-3.221-1.515-7.898-2.404-13.964-2.404-10.615 0.316-17.249 3.855-19.967 10.618-2.211 6.573-3.223 13.017-2.907 19.209v161.956c0 2.273 0.126 4.865 0.38 7.772 0.568 3.411 1.454 6.824 2.527 10.233 2.717 7.775 9.352 11.756 19.967 12.007 6.067 0 10.744-1.261 13.964-3.791 3.098-2.15 5.309-4.867 6.573-8.216 1.96-7.33 2.782-13.33 2.527-18.007v-47.837h72.73v41.328c-1.451 61.547-33.364 93.015-95.794 94.469-62.685-1.454-94.53-32.922-95.607-94.343v-148.937z"],"width":1142,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["recEnable"],"grid":0},"attrs":[],"properties":{"order":1372,"id":1042,"prevSize":32,"code":58900,"name":"recEnable","ligatures":""},"setIdx":1,"setId":1,"iconIdx":63},{"icon":{"paths":["M952.495 4.935h-818.689c-72.81 0-132.183 60.63-132.183 135.162v750.719c0 74.473 59.372 135.101 132.183 135.101h818.686c72.936 0 132.314-60.625 132.314-135.101v-750.722c0.003-74.532-59.378-135.159-132.311-135.159zM946.346 884.349h-806.14v-737.822h806.015l0.126 737.822z","M685.753 285.456h216.911v566.758h-216.911v-566.758z","M428.672 413.998h216.911v438.216h-216.911v-438.216z","M172.339 542.54h216.161v309.677h-216.161v-309.677z"],"width":1088,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["presentation"],"grid":0},"attrs":[],"properties":{"order":1373,"id":1043,"prevSize":32,"code":58883,"name":"presentation","ligatures":""},"setIdx":1,"setId":1,"iconIdx":64},{"icon":{"paths":["M512 42c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 298c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 298c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 554c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 554c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 214c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86zM256 554c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM256 298c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM256 42c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 810c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["dialpad"],"grid":0},"attrs":[],"properties":{"order":1374,"ligatures":"dialpad","id":1044,"prevSize":32,"code":59685,"name":"dialpad"},"setIdx":1,"setId":1,"iconIdx":65},{"icon":{"paths":["M512 384c70 0 128 58 128 128s-58 128-128 128-128-58-128-128 58-128 128-128zM512 726c118 0 214-96 214-214s-96-214-214-214-214 96-214 214 96 214 214 214zM512 192c214 0 396 132 470 320-74 188-256 320-470 320s-396-132-470-320c74-188 256-320 470-320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["visibility"],"grid":0},"attrs":[],"properties":{"order":1375,"ligatures":"remove_red_eye, visibility","id":1045,"prevSize":32,"code":59683,"name":"visibility"},"setIdx":1,"setId":1,"iconIdx":66},{"icon":{"paths":["M506 384h6c70 0 128 58 128 128v8zM322 418c-14 28-24 60-24 94 0 118 96 214 214 214 34 0 66-10 94-24l-66-66c-8 2-18 4-28 4-70 0-128-58-128-128 0-10 2-20 4-28zM86 182l54-54 756 756-54 54c-47.968-47.365-96.266-94.401-144-142-58 24-120 36-186 36-214 0-396-132-470-320 34-84 90-156 160-212-39.017-38.983-77.307-78.693-116-118zM512 298c-28 0-54 6-78 16l-92-92c52-20 110-30 170-30 214 0 394 132 468 320-32 80-82 148-146 202l-124-124c10-24 16-50 16-78 0-118-96-214-214-214z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["visibility_off"],"grid":0},"attrs":[],"properties":{"order":1376,"ligatures":"visibility_off","id":1046,"prevSize":32,"code":59684,"name":"visibility-off"},"setIdx":1,"setId":1,"iconIdx":67}],"height":1024,"metadata":{"name":"jitsi"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"jitsi","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":0},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"classSelector":".icon"},"historySize":100,"showCodes":false,"search":"","showLiga":false,"gridSize":16}} \ No newline at end of file +{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M768 342v-86h-512v86h512zM598 598v-86h-342v86h342zM256 384v86h512v-86h-512zM854 86c46 0 84 38 84 84v512c0 46-38 86-84 86h-598l-170 170v-768c0-46 38-84 84-84h684z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chat"],"defaultCode":57527,"grid":24},"attrs":[],"properties":{"ligatures":"chat","id":145,"order":1382,"prevSize":24,"code":57527,"name":"chat-unread"},"setIdx":0,"setId":2,"iconIdx":145},{"icon":{"paths":["M768 470v-44c0-24-18-42-42-42h-128c-24 0-44 18-44 42v172c0 24 20 42 44 42h128c24 0 42-18 42-42v-44h-64v22h-86v-128h86v22h64zM470 470v-44c0-24-20-42-44-42h-128c-24 0-42 18-42 42v172c0 24 18 42 42 42h128c24 0 44-18 44-42v-44h-64v22h-86v-128h86v22h64zM810 170c46 0 86 40 86 86v512c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-512c0-46 38-86 86-86h596z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["closed_caption"],"grid":24},"attrs":[{}],"properties":{"order":1,"id":0,"prevSize":24,"code":59696,"name":"closed_caption"},"setIdx":1,"setId":1,"iconIdx":3},{"icon":{"paths":["M113.778 0h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM170.667 113.778c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM113.778 568.889h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM170.667 682.667c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM682.667 0h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM739.556 113.778c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM682.667 568.889h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM739.556 682.667c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":24,"tags":["tiles-many"]},"attrs":[{}],"properties":{"order":1377,"id":1065,"name":"tiles-many","prevSize":24,"code":59694},"setIdx":1,"setId":1,"iconIdx":4},{"icon":{"paths":["M170.667 213.333h682.667c47.128 0 85.333 38.205 85.333 85.333v426.667c0 47.128-38.205 85.333-85.333 85.333h-682.667c-47.128 0-85.333-38.205-85.333-85.333v-426.667c-0-47.128 38.205-85.333 85.333-85.333zM213.333 298.667c-23.564 0-42.667 19.103-42.667 42.667v341.333c0 23.564 19.103 42.667 42.667 42.667h597.333c23.564 0 42.667-19.103 42.667-42.667v-341.333c0-23.564-19.103-42.667-42.667-42.667h-597.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":24,"tags":["tiles-one"]},"attrs":[{}],"properties":{"order":1378,"id":1064,"name":"tiles-one","prevSize":24,"code":59695},"setIdx":1,"setId":1,"iconIdx":5},{"icon":{"paths":["M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["close"],"defaultCode":58829,"grid":24},"attrs":[],"properties":{"ligatures":"clear, close","id":157,"order":1313,"prevSize":24,"code":58829,"name":"close"},"setIdx":1,"setId":1,"iconIdx":6},{"icon":{"paths":["M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["open_in_new"],"defaultCode":59550,"grid":24},"attrs":[],"properties":{"ligatures":"launch, open_in_new","id":1047,"order":1314,"prevSize":24,"name":"open_in_new","code":59550},"setIdx":1,"setId":1,"iconIdx":7},{"icon":{"paths":["M512 342h64v180l150 90-32 52-182-110v-212zM554 128c212 0 384 172 384 384s-172 384-384 384c-106 0-200-42-270-112l60-62c54 54 128 88 210 88 166 0 300-132 300-298s-134-298-300-298-298 132-298 298h128l-172 172-4-6-166-166h128c0-212 172-384 384-384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["restore"],"defaultCode":59571,"grid":24},"attrs":[],"properties":{"ligatures":"history, restore","id":1048,"order":1315,"prevSize":24,"code":59571,"name":"restore"},"setIdx":1,"setId":1,"iconIdx":8},{"icon":{"paths":["M426 256l256 256-256 256-60-60 196-196-196-196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate_next"],"defaultCode":58377,"grid":24},"attrs":[],"properties":{"ligatures":"chevron_right, navigate_next","id":1049,"order":1316,"prevSize":24,"code":58377,"name":"navigate_next"},"setIdx":1,"setId":1,"iconIdx":9},{"icon":{"paths":["M128 256h768v86h-768v-86zM128 554v-84h768v84h-768zM128 768v-86h768v86h-768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["menu"],"defaultCode":58834,"grid":24},"attrs":[],"properties":{"ligatures":"menu","id":1050,"order":1317,"prevSize":24,"code":58834,"name":"menu"},"setIdx":1,"setId":1,"iconIdx":10},{"icon":{"paths":["M854 470v84h-520l238 240-60 60-342-342 342-342 60 60-238 240h520z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_back"],"defaultCode":58820,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_back","id":1051,"order":1318,"prevSize":24,"code":58820,"name":"arrow_back"},"setIdx":1,"setId":1,"iconIdx":11},{"icon":{"paths":["M658 316l-196 196 196 196-60 60-256-256 256-256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate_before"],"defaultCode":58376,"grid":24},"attrs":[],"properties":{"ligatures":"chevron_left, navigate_before","id":1052,"order":1319,"prevSize":24,"code":58376,"name":"navigate_before"},"setIdx":1,"setId":1,"iconIdx":12},{"icon":{"paths":["M764 742c56-60 90-142 90-230 0-142-88-266-214-316v18c0 46-40 84-86 84h-84v86c0 24-20 42-44 42h-84v86h256c24 0 42 18 42 42v128h42c38 0 70 26 82 60zM470 850v-82c-46 0-86-40-86-86v-42l-204-204c-6 24-10 50-10 76 0 174 132 318 300 338zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["public"],"defaultCode":59403,"grid":24},"attrs":[],"properties":{"ligatures":"public","id":1053,"order":1320,"prevSize":24,"code":59403,"name":"public"},"setIdx":1,"setId":1,"iconIdx":13},{"icon":{"paths":["M598 598v84h-300v-84h300zM810 810v-468h-596v468h596zM810 128c46 0 86 40 86 86v596c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h42v-86h86v86h340v-86h86v86h42zM726 426v86h-428v-86h428z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["event_note"],"defaultCode":58902,"grid":24},"attrs":[],"properties":{"ligatures":"event_note","id":1054,"order":1321,"prevSize":24,"code":58902,"name":"event_note"},"setIdx":1,"setId":1,"iconIdx":14},{"icon":{"paths":["M512 854c166 0 298-134 298-300s-132-298-298-298-298 132-298 298 132 300 298 300zM812 316c52 66 84 148 84 238 0 212-172 384-384 384s-384-172-384-384 172-384 384-384c90 0 174 34 240 86l60-62c22 18 42 38 60 60zM470 598v-256h84v256h-84zM640 42v86h-256v-86h256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["timer"],"defaultCode":58405,"grid":24},"attrs":[],"properties":{"ligatures":"timer","id":1055,"order":1322,"prevSize":24,"code":58405,"name":"timer"},"setIdx":1,"setId":1,"iconIdx":15},{"icon":{"paths":["M550 696l-80-82v162zM470 248v162l80-82zM670 328l-184 184 184 184-244 242h-42v-324l-196 196-60-60 238-238-238-238 60-60 196 196v-324h42zM834 286c40 64 62 142 62 222 0 84-24 160-66 226l-50-50c26-52 42-110 42-172s-16-120-42-172zM608 512l98-98c12 30 20 64 20 98s-8 70-20 100z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bluetooth_searching"],"defaultCode":57770,"grid":24},"attrs":[],"properties":{"ligatures":"bluetooth_audio, bluetooth_searching","id":1056,"order":1323,"prevSize":24,"code":57770,"name":"bluetooth"},"setIdx":1,"setId":1,"iconIdx":16},{"icon":{"paths":["M512 42c212 0 384 172 384 384v300c0 70-58 128-128 128h-128v-342h170v-86c0-166-132-298-298-298s-298 132-298 298v86h170v342h-128c-70 0-128-58-128-128v-300c0-212 172-384 384-384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["headset"],"defaultCode":58128,"grid":24},"attrs":[],"properties":{"ligatures":"headset","id":1057,"order":1324,"prevSize":24,"code":58128,"name":"headset"},"setIdx":1,"setId":1,"iconIdx":17},{"icon":{"paths":["M640 512c0-70-58-128-128-128v-86c118 0 214 96 214 214h-86zM810 512c0-166-132-298-298-298v-86c212 0 384 172 384 384h-86zM854 662c24 0 42 18 42 42v150c0 24-18 42-42 42-400 0-726-326-726-726 0-24 18-42 42-42h150c24 0 42 18 42 42 0 54 8 104 24 152 4 14 2 32-10 44l-94 94c62 122 162 220 282 282l94-94c12-12 30-14 44-10 48 16 98 24 152 24z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["phone_in_talk"],"defaultCode":58909,"grid":24},"attrs":[],"properties":{"ligatures":"phone_in_talk","id":1058,"order":1325,"prevSize":24,"code":58909,"name":"phone-talk"},"setIdx":1,"setId":1,"iconIdx":18},{"icon":{"paths":["M512 682c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 342c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["more_vert"],"defaultCode":58836,"grid":24},"attrs":[],"properties":{"ligatures":"more_vert","id":1059,"order":1326,"prevSize":24,"code":58836,"name":"thumb-menu"},"setIdx":1,"setId":1,"iconIdx":19},{"icon":{"paths":["M330.667 554.667c-0.427-14.933 6.4-29.44 17.92-39.253 32 6.827 61.867 20.053 88.747 39.253 0 29.013-23.893 52.907-53.333 52.907s-52.907-23.467-53.333-52.907zM586.667 554.667c26.88-18.773 56.747-32 88.747-38.827 11.52 9.813 18.347 24.32 17.92 38.827 0 29.867-23.893 53.76-53.333 53.76s-53.333-23.893-53.333-53.76v0zM512 384c-118.187-1.707-234.667 27.733-338.347 85.333l-2.987 42.667c0 52.48 12.373 104.107 35.84 151.040 101.12-15.36 203.093-23.040 305.493-23.040s204.373 7.68 305.493 23.040c23.467-46.933 35.84-98.56 35.84-151.040l-2.987-42.667c-103.68-57.6-220.16-87.040-338.347-85.333zM512 85.333c235.641 0 426.667 191.025 426.667 426.667s-191.025 426.667-426.667 426.667c-235.641 0-426.667-191.025-426.667-426.667s191.025-426.667 426.667-426.667z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ninja"],"grid":24},"attrs":[{}],"properties":{"order":1327,"id":1060,"name":"ninja","prevSize":24,"code":59657},"setIdx":1,"setId":1,"iconIdx":20},{"icon":{"paths":["M282 460c62 120 162 220 282 282l94-94c12-12 30-16 44-10 48 16 100 24 152 24 24 0 42 18 42 42v150c0 24-18 42-42 42-400 0-726-326-726-726 0-24 18-42 42-42h150c24 0 42 18 42 42 0 54 8 104 24 152 4 14 2 32-10 44z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["phone"],"defaultCode":57549,"grid":24},"attrs":[],"properties":{"ligatures":"call, local_phone, phone","id":1061,"order":1328,"prevSize":24,"code":57549,"name":"phone"},"setIdx":1,"setId":1,"iconIdx":21},{"icon":{"paths":["M810 554h-256v256h-84v-256h-256v-84h256v-256h84v256h256v84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["add"],"defaultCode":57669,"grid":24},"attrs":[],"properties":{"ligatures":"add","id":1062,"order":1329,"prevSize":24,"code":57669,"name":"add"},"setIdx":1,"setId":1,"iconIdx":22},{"icon":{"paths":["M790.857 529.714l-758.857 421.714c-17.714 9.714-32 1.143-32-18.857v-841.143c0-20 14.286-28.571 32-18.857l758.857 421.714c17.714 9.714 17.714 25.714 0 35.429z"],"width":808.5942857142857,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play"],"defaultCode":61515,"grid":14},"attrs":[],"properties":{"name":"play","id":75,"order":1380,"prevSize":28,"code":61515},"setIdx":1,"setId":1,"iconIdx":0},{"icon":{"paths":["M877.714 109.714v804.571c0 20-16.571 36.571-36.571 36.571h-804.571c-20 0-36.571-16.571-36.571-36.571v-804.571c0-20 16.571-36.571 36.571-36.571h804.571c20 0 36.571 16.571 36.571 36.571z"],"width":877.7142857142857,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["stop"],"defaultCode":61517,"grid":14},"attrs":[],"properties":{"name":"stop","id":77,"order":1381,"prevSize":28,"code":61517},"setIdx":1,"setId":1,"iconIdx":1},{"icon":{"paths":["M950.857 365.714c40.571 0 73.143 32.571 73.143 73.143s-32.571 73.143-73.143 73.143v219.429c0 40-33.143 73.143-73.143 73.143-101.714-84.571-265.714-200.571-464-217.143-68 22.857-91.429 102.286-46.857 148-40 65.714 11.429 112 72 159.429-35.429 69.714-182.857 70.857-235.429 22.286-33.143-101.714-82.286-203.429-42.286-332h-69.714c-50.286 0-91.429-41.143-91.429-91.429v-109.714c0-50.286 41.143-91.429 91.429-91.429h274.286c219.429 0 402.286-128 512-219.429 40 0 73.143 33.143 73.143 73.143v219.429zM877.714 710.857v-545.143c-149.143 114.286-293.714 180-438.857 196v154.286c145.143 16 289.714 80.571 438.857 194.857z"],"width":1024,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bullhorn"],"defaultCode":61601,"grid":14},"attrs":[],"properties":{"name":"dominant-speaker","id":152,"order":1379,"prevSize":28,"code":61601},"setIdx":1,"setId":1,"iconIdx":2},{"icon":{"paths":["M0 512c0 282.795 229.205 512 512 512s512-229.205 512-512c0-282.795-229.205-512-512-512s-512 229.205-512 512zM525.005 264.638c-20.475-24.944-16.326-61.342 9.268-81.297s62.94-15.911 83.416 9.033c16.036 19.536 38.593 52.97 60.894 97.797 81.621 164.065 89.461 340.992-26.857 506.352-8.384 11.919-17.386 23.69-27.012 35.307-20.593 24.851-57.959 28.727-83.458 8.657s-29.476-56.487-8.882-81.338c7.686-9.275 14.833-18.621 21.455-28.035 88.66-126.041 82.71-260.306 17.953-390.475-10.599-21.305-21.94-40.51-33.198-57.196-6.515-9.657-11.322-16.057-13.578-18.805zM353.479 376.54c-19.353-24.679-15.129-60.448 9.434-79.893s60.164-15.2 79.517 9.479c9.635 12.287 22.577 32.644 35.209 60.034 50.35 109.176 50.35 231.689-33.639 349.612-18.198 25.551-53.566 31.441-78.997 13.157s-31.294-53.819-13.096-79.37c57.564-80.822 57.564-160.581 22.983-235.565-8.601-18.65-16.892-31.691-21.412-37.455z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["speaker"]},"attrs":[{}],"properties":{"order":1312,"id":1063,"name":"speaker","prevSize":32,"code":59693},"setIdx":1,"setId":1,"iconIdx":23},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM298.225 593.975h-112.35v-206.5h-52.85v252.525h165.2v-46.025zM399.025 640v-252.525h-52.85v252.525h52.85zM591.525 640l84.175-252.525h-56.875l-56.35 193.025h-3.15l-57.4-193.025h-59.675l85.4 252.525h63.875zM886.050 594.85h-114.45v-61.425h107.975v-41.825h-107.975v-58.975h114.45v-45.15h-167.3v252.525h167.3v-45.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["live"]},"attrs":[{}],"properties":{"order":1330,"id":1000,"name":"live","prevSize":32,"code":59692},"setIdx":1,"setId":1,"iconIdx":24},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM581.333 590.218h-110.595v-59.233h104.338v-40.332h-104.338v-56.87h110.595v-43.539h-161.665v243.512h161.665v-43.539zM738.771 640c58.849 0 101.802-36.282 106.029-88.933h-49.717c-4.904 26.832-26.888 44.045-56.143 44.045-38.556 0-62.4-31.895-62.4-83.196s23.844-83.027 62.231-83.027c29.086 0 51.239 18.394 56.143 46.407h49.717c-3.72-52.989-48.026-91.296-105.86-91.296-70.855 0-114.485 48.77-114.485 127.916 0 79.314 43.798 128.084 114.485 128.084zM230.27 545.498h41.769l45.489 88.258h57.834l-51.408-96.19c28.072-11.138 44.306-38.138 44.306-69.189 0-48.432-32.976-78.133-86.582-78.133h-102.478v243.512h51.070v-88.258zM230.27 431.42v74.927h44.813c25.704 0 40.754-13.838 40.754-37.295 0-23.119-15.896-37.632-41.262-37.632h-44.306z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["rec"]},"attrs":[{}],"properties":{"order":1331,"id":1001,"name":"rec","prevSize":32,"code":59691},"setIdx":1,"setId":1,"iconIdx":25},{"icon":{"paths":["M725.333 512c0 117.821-95.513 213.333-213.333 213.333s-213.333-95.513-213.333-213.333c0-117.821 95.513-213.333 213.333-213.333s213.333 95.513 213.333 213.333z","M512 768c141.385 0 256-114.615 256-256s-114.615-256-256-256v0c-141.385 0-256 114.615-256 256s114.615 256 256 256v0zM512 810.667c-164.949 0-298.667-133.718-298.667-298.667s133.718-298.667 298.667-298.667v0c164.949 0 298.667 133.718 298.667 298.667s-133.718 298.667-298.667 298.667v0z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["camera-take-picture"]},"attrs":[{},{}],"properties":{"order":1332,"id":1002,"name":"camera-take-picture","prevSize":32,"code":59690},"setIdx":1,"setId":1,"iconIdx":26},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM308.25 636.7h57.225l-87.675-252.525h-62.125l-87.675 252.525h53.025l19.425-60.2h88.725l19.075 60.2zM461.9 384.175h-52.85v165.375c0 56 41.125 93.625 105.7 93.625 64.75 0 105.875-37.625 105.875-93.625v-165.375h-52.85v159.95c0 31.85-19.075 52.15-53.025 52.15-33.775 0-52.85-20.3-52.85-52.15v-159.95zM682.225 384v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM735.075 429.15v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15zM243.5 436.675l-31.675 99.050h66.15l-31.325-99.050h-3.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["AUD"]},"attrs":[{}],"properties":{"order":1333,"id":1003,"name":"AUD","prevSize":32,"code":59648},"setIdx":1,"setId":1,"iconIdx":27},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM481.359 640v-255.823h-54.273v103.18h-116.813v-103.18h-54.273v255.823h54.273v-106.903h116.813v106.903h54.273zM544.258 384v256h102.077c77.636 0 121.665-46.626 121.665-129.773 0-80.133-44.569-126.227-121.665-126.227h-102.077zM598.531 429.74v164.521h39.177c47.983 0 74.94-29.075 74.94-83.147 0-51.767-27.855-81.374-74.94-81.374h-39.177z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["HD"]},"attrs":[{}],"properties":{"order":1334,"id":1004,"name":"HD","prevSize":32,"code":59687},"setIdx":1,"setId":1,"iconIdx":28},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM472.4 590.675h-112.35v-206.5h-52.85v252.525h165.2v-46.025zM520.35 384v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM573.2 429.15v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["LD"]},"attrs":[{}],"properties":{"order":1335,"id":1005,"name":"LD","prevSize":32,"code":59688},"setIdx":1,"setId":1,"iconIdx":29},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM281.6 572.825c1.925 47.075 40.95 76.65 101.15 76.65 63.35 0 102.375-31.15 102.375-82.075 0-39.2-21.875-61.075-72.625-71.75l-30.45-6.475c-29.575-6.3-41.65-15.225-41.65-30.8 0-19.25 17.5-31.5 43.925-31.5 25.55 0 44.1 13.3 46.55 33.25h49.7c-1.575-44.975-40.95-76.125-96.6-76.125-58.275 0-96.6 31.325-96.6 78.925 0 38.5 22.575 62.475 68.6 72.1l32.9 7c30.975 6.65 43.575 15.925 43.575 32.025 0 19.075-19.425 32.375-46.9 32.375-29.75 0-50.4-13.125-52.85-33.6h-51.1zM535 390.3v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM587.85 435.45v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["SD"]},"attrs":[{}],"properties":{"order":1336,"id":1006,"name":"SD","prevSize":32,"code":59689},"setIdx":1,"setId":1,"iconIdx":30},{"icon":{"paths":["M896 0c70.692 0 128 57.308 128 128v768c0 70.692-57.308 128-128 128s-128-57.308-128-128v-768c0-70.692 57.308-128 128-128zM512 256c70.692 0 128 57.308 128 128v512c0 70.692-57.308 128-128 128s-128-57.308-128-128v-512c0-70.692 57.308-128 128-128zM128 640v0c70.692 0 128 57.308 128 128v128c0 70.692-57.308 128-128 128s-128-57.308-128-128v-128c0-70.692 57.308-128 128-128v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["gsm-bars-black"]},"attrs":[{}],"properties":{"order":1337,"id":1007,"name":"gsm-bars-black","prevSize":32,"code":59686},"setIdx":1,"setId":1,"iconIdx":31},{"icon":{"paths":["M512 85.333c-235.52 0-426.667 191.147-426.667 426.667s191.147 426.667 426.667 426.667 426.667-191.147 426.667-426.667-191.147-426.667-426.667-426.667zM554.667 725.333h-85.333v-256h85.333v256zM554.667 384h-85.333v-85.333h85.333v85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["ic_info_black_24px"]},"attrs":[{}],"properties":{"order":1338,"id":1008,"name":"info","prevSize":32,"code":59682},"setIdx":1,"setId":1,"iconIdx":32},{"icon":{"paths":["M756.704 395.862l267.296-202.213v635.075l-267.296-202.213v191.923c0 12.085-11.296 21.863-25.216 21.863h-706.272c-13.92 0-25.216-9.777-25.216-21.863v-612.25c0-12.085 11.296-21.863 25.216-21.863h706.272c13.92 0 25.216 9.777 25.216 21.863v189.679zM371.338 647.772c47.817 0 86.529-40.232 86.529-89.811v-184.835c0-49.651-38.713-89.883-86.529-89.883-47.788 0-86.515 40.232-86.515 89.883v184.835c0 49.579 38.756 89.811 86.515 89.811v0zM356.754 709.93v32.78h33.718v-33.412c73.858-9.606 131.235-73.73 131.235-151.351v-88.232h-30.636v88.232c0 67.57-53.696 122.534-119.734 122.534-66.024 0-119.691-54.964-119.691-122.534v-88.232h-30.636v88.232c0 79.215 59.674 144.502 135.744 151.969v0.014z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["Combined Shape"],"grid":0},"attrs":[{}],"properties":{"order":1339,"id":1009,"name":"mic-camera-combined","prevSize":32,"code":59651},"setIdx":1,"setId":1,"iconIdx":33},{"icon":{"paths":["M42.667 896h170.667v-512h-170.667v512zM981.333 426.667c0-46.933-38.4-85.333-85.333-85.333h-269.227l40.533-194.987 1.28-13.653c0-17.493-7.253-33.707-18.773-45.227l-45.227-44.8-280.747 281.173c-15.787 15.36-25.173 36.693-25.173 60.16v426.667c0 46.933 38.4 85.333 85.333 85.333h384c35.413 0 65.707-21.333 78.507-52.053l128.853-300.8c3.84-9.813 5.973-20.053 5.973-31.147v-81.493l-0.427-0.427 0.427-3.413z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ic_thumb_up_black_24px"],"grid":0},"attrs":[{}],"properties":{"order":1340,"id":1010,"name":"feedback","prevSize":32,"code":59677},"setIdx":1,"setId":1,"iconIdx":34},{"icon":{"paths":["M896 128h-768c-46.933 0-85.333 38.4-85.333 85.333v597.333c0 46.933 38.4 85.333 85.333 85.333h768c46.933 0 85.333-38.4 85.333-85.333v-597.333c0-46.933-38.4-85.333-85.333-85.333zM896 810.667h-768v-128h768v128z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ic_call_to_action_black_24px"],"grid":0},"attrs":[{}],"properties":{"order":1341,"id":1011,"name":"toggle-filmstrip","prevSize":32,"code":59676},"setIdx":1,"setId":1,"iconIdx":35},{"icon":{"paths":["M512 820c106 0 200-56 256-138-2-84-172-132-256-132-86 0-254 48-256 132 56 82 150 138 256 138zM512 214c-70 0-128 58-128 128s58 128 128 128 128-58 128-128-58-128-128-128zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["account_circle"],"grid":0},"attrs":[],"properties":{"id":1012,"order":1342,"ligatures":"account_circle","prevSize":32,"code":59649,"name":"avatar"},"setIdx":1,"setId":1,"iconIdx":36},{"icon":{"paths":["M512 384c-68 0-134 10-196 30v132c0 16-10 34-24 40-42 20-80 46-114 78-8 8-18 12-30 12s-22-4-30-12l-106-106c-8-8-12-18-12-30s4-22 12-30c130-124 306-200 500-200s370 76 500 200c8 8 12 18 12 30s-4 22-12 30l-106 106c-8 8-18 12-30 12s-22-4-30-12c-34-32-72-58-114-78-14-6-24-20-24-38v-132c-62-20-128-32-196-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["call_end"],"grid":0},"attrs":[],"properties":{"id":1013,"order":1343,"ligatures":"call_end","prevSize":32,"code":59653,"name":"hangup"},"setIdx":1,"setId":1,"iconIdx":37},{"icon":{"paths":["M854 682v-512h-684v598l86-86h598zM854 86c46 0 84 38 84 84v512c0 46-38 86-84 86h-598l-170 170v-768c0-46 38-84 84-84h684z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chat_bubble_outline"],"grid":0},"attrs":[],"properties":{"id":1014,"order":1344,"ligatures":"chat_bubble_outline","prevSize":32,"code":59654,"name":"chat"},"setIdx":1,"setId":1,"iconIdx":38},{"icon":{"paths":["M726 554h-128v-170h-172v170h-128l214 214zM826 428c110 8 198 100 198 212 0 118-96 214-214 214h-554c-142 0-256-114-256-256 0-132 100-240 228-254 54-102 160-174 284-174 156 0 284 110 314 258z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cloud_download"],"grid":0},"attrs":[],"properties":{"id":1015,"order":1345,"ligatures":"cloud_download","prevSize":32,"code":59650,"name":"download"},"setIdx":1,"setId":1,"iconIdx":39},{"icon":{"paths":["M884 300l-78 78-160-160 78-78c16-16 44-16 60 0l100 100c16 16 16 44 0 60zM128 736l472-472 160 160-472 472h-160v-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mode_edit"],"grid":0},"attrs":[],"properties":{"id":1016,"order":1346,"ligatures":"create, edit, mode_edit","prevSize":32,"code":59655,"name":"edit"},"setIdx":1,"setId":1,"iconIdx":40},{"icon":{"paths":["M554 384h236l-236-234v234zM682 598v-86h-340v86h340zM682 768v-86h-340v86h340zM598 86l256 256v512c0 46-40 84-86 84h-512c-46 0-86-38-86-84l2-684c0-46 38-84 84-84h342z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["description"],"grid":0},"attrs":[],"properties":{"id":1017,"order":1347,"ligatures":"description","prevSize":32,"code":59656,"name":"share-doc"},"setIdx":1,"setId":1,"iconIdx":41},{"icon":{"paths":["M512 214l284 426h-568zM214 726h596v84h-596v-84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["eject"],"grid":0},"attrs":[],"properties":{"id":1018,"order":1348,"ligatures":"eject","prevSize":32,"code":59652,"name":"kick"},"setIdx":1,"setId":1,"iconIdx":42},{"icon":{"paths":["M512 342l256 256-60 60-196-196-196 196-60-60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["expand_less"],"grid":0},"attrs":[],"properties":{"id":1019,"order":1349,"ligatures":"expand_less","prevSize":32,"code":59679,"name":"menu-up"},"setIdx":1,"setId":1,"iconIdx":43},{"icon":{"paths":["M708 366l60 60-256 256-256-256 60-60 196 196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["expand_more"],"grid":0},"attrs":[],"properties":{"id":1020,"order":1350,"ligatures":"expand_more","prevSize":32,"code":59680,"name":"menu-down"},"setIdx":1,"setId":1,"iconIdx":44},{"icon":{"paths":["M598 214h212v212h-84v-128h-128v-84zM726 726v-128h84v212h-212v-84h128zM214 426v-212h212v84h-128v128h-84zM298 598v128h128v84h-212v-212h84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fullscreen"],"grid":0},"attrs":[],"properties":{"id":1021,"order":1351,"ligatures":"fullscreen","prevSize":32,"code":59659,"name":"full-screen"},"setIdx":1,"setId":1,"iconIdx":45},{"icon":{"paths":["M682 342h128v84h-212v-212h84v128zM598 810v-212h212v84h-128v128h-84zM342 342v-128h84v212h-212v-84h128zM214 682v-84h212v212h-84v-128h-128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fullscreen_exit"],"grid":0},"attrs":[],"properties":{"id":1022,"order":1352,"ligatures":"fullscreen_exit","prevSize":32,"code":59660,"name":"exit-full-screen"},"setIdx":1,"setId":1,"iconIdx":46},{"icon":{"paths":["M512 736l-264 160 70-300-232-202 306-26 120-282 120 282 306 26-232 202 70 300z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["star"],"grid":0},"attrs":[],"properties":{"id":1023,"order":1353,"ligatures":"grade, star","prevSize":32,"code":59658,"name":"star-full"},"setIdx":1,"setId":1,"iconIdx":47},{"icon":{"paths":["M768 854v-428h-512v428h512zM768 342c46 0 86 38 86 84v428c0 46-40 84-86 84h-512c-46 0-86-38-86-84v-428c0-46 40-84 86-84h388v-86c0-72-60-132-132-132s-132 60-132 132h-82c0-118 96-214 214-214s214 96 214 214v86h42zM512 726c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lock_open"],"grid":0},"attrs":[],"properties":{"id":1024,"order":1354,"ligatures":"lock_open","prevSize":32,"code":59661,"name":"security"},"setIdx":1,"setId":1,"iconIdx":48},{"icon":{"paths":["M768 854v-428h-512v428h512zM380 256v86h264v-86c0-72-60-132-132-132s-132 60-132 132zM768 342c46 0 86 38 86 84v428c0 46-40 84-86 84h-512c-46 0-86-38-86-84v-428c0-46 40-84 86-84h42v-86c0-118 96-214 214-214s214 96 214 214v86h42zM512 726c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lock_outline"],"grid":0},"attrs":[],"properties":{"id":1025,"order":1355,"ligatures":"lock_outline","prevSize":32,"code":59662,"name":"security-locked"},"setIdx":1,"setId":1,"iconIdx":49},{"icon":{"paths":["M512 768v-128l170 170-170 172v-128c-188 0-342-154-342-342 0-66 20-130 54-182l62 62c-20 36-30 76-30 120 0 142 114 256 256 256zM512 170c188 0 342 154 342 342 0 66-20 130-54 182l-62-62c20-36 30-76 30-120 0-142-114-256-256-256v128l-170-170 170-172v128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sync"],"grid":0},"attrs":[],"properties":{"id":1026,"order":1356,"ligatures":"loop, sync","prevSize":32,"code":59663,"name":"reload"},"setIdx":1,"setId":1,"iconIdx":50},{"icon":{"paths":["M738 470h72c0 146-116 266-256 286v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216s226-88 226-216zM512 598c-70 0-128-58-128-128v-256c0-70 58-128 128-128s128 58 128 128v256c0 70-58 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic"],"grid":0},"attrs":[],"properties":{"id":1027,"order":1357,"ligatures":"mic","prevSize":32,"code":59664,"name":"microphone"},"setIdx":1,"setId":1,"iconIdx":51},{"icon":{"paths":["M738 470h72c0 146-116 266-256 286v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216s226-88 226-216zM460 210v264c0 28 24 50 52 50s50-22 50-50l2-264c0-28-24-52-52-52s-52 24-52 52zM512 598c-70 0-128-58-128-128v-256c0-70 58-128 128-128s128 58 128 128v256c0 70-58 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic_none"],"grid":0},"attrs":[],"properties":{"id":1028,"order":1358,"ligatures":"mic_none","prevSize":32,"code":59665,"name":"mic-empty"},"setIdx":1,"setId":1,"iconIdx":52},{"icon":{"paths":["M182 128l714 714-54 54-178-178c-32 20-72 32-110 38v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216 34 0 68-8 98-22l-70-70c-8 2-18 4-28 4-70 0-128-58-128-128v-32l-256-256zM640 476l-256-254v-8c0-70 58-128 128-128s128 58 128 128v262zM810 470c0 50-14 98-38 140l-52-54c12-26 18-54 18-86h72z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic_off"],"grid":0},"attrs":[],"properties":{"id":1029,"order":1359,"ligatures":"mic_off","prevSize":32,"code":59666,"name":"mic-disabled"},"setIdx":1,"setId":1,"iconIdx":53},{"icon":{"paths":["M982 234v620c0 94-78 170-172 170h-310c-46 0-90-18-122-50l-336-342s54-52 56-52c10-8 22-12 34-12 10 0 18 2 26 6 2 0 184 104 184 104v-508c0-36 28-64 64-64s64 28 64 64v300h42v-406c0-36 28-64 64-64s64 28 64 64v406h42v-364c0-36 28-64 64-64s64 28 64 64v364h44v-236c0-36 28-64 64-64s64 28 64 64z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pan_tool"],"grid":0},"attrs":[],"properties":{"id":1030,"order":1360,"ligatures":"pan_tool","prevSize":32,"code":59678,"name":"raised-hand"},"setIdx":1,"setId":1,"iconIdx":54},{"icon":{"paths":["M704 278c-46 0-86 38-86 84s40 86 86 86 86-40 86-86-40-84-86-84zM704 512c-82 0-150-68-150-150s68-148 150-148 150 66 150 148-68 150-150 150zM320 278c-46 0-86 38-86 84s40 86 86 86 86-40 86-86-40-84-86-84zM320 512c-82 0-150-68-150-150s68-148 150-148 150 66 150 148-68 150-150 150zM918 746v-52c0-24-110-76-214-76-46 0-90 12-128 24 14 16 22 32 22 52v52h320zM534 746v-52c0-24-110-76-214-76s-214 52-214 76v52h428zM704 554c92 0 278 48 278 140v116h-940v-116c0-92 186-140 278-140 52 0 130 16 192 44 62-28 140-44 192-44z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["people_outline"],"grid":0},"attrs":[],"properties":{"id":1031,"order":1361,"ligatures":"people_outline","prevSize":32,"code":59675,"name":"contactList"},"setIdx":1,"setId":1,"iconIdx":55},{"icon":{"paths":["M640 598c114 0 342 56 342 170v86h-684v-86c0-114 228-170 342-170zM256 426h128v86h-128v128h-86v-128h-128v-86h128v-128h86v128zM640 512c-94 0-170-76-170-170s76-172 170-172 170 78 170 172-76 170-170 170z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["person_add"],"grid":0},"attrs":[],"properties":{"id":1032,"order":1362,"ligatures":"person_add","prevSize":32,"code":59667,"name":"link"},"setIdx":1,"setId":1,"iconIdx":56},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426zM426 704v-384l256 192z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play_circle_outline"],"grid":0},"attrs":[],"properties":{"id":1033,"order":1363,"ligatures":"play_circle_outline","prevSize":32,"code":59668,"name":"shared-video"},"setIdx":1,"setId":1,"iconIdx":57},{"icon":{"paths":["M512 662c82 0 150-68 150-150s-68-150-150-150-150 68-150 150 68 150 150 150zM830 554l90 70c8 6 10 18 4 28l-86 148c-6 10-16 12-26 8l-106-42c-22 16-46 32-72 42l-16 112c-2 10-10 18-20 18h-172c-10 0-18-8-20-18l-16-112c-26-10-50-24-72-42l-106 42c-10 4-20 2-26-8l-86-148c-6-10-4-22 4-28l90-70c-2-14-2-28-2-42s0-28 2-42l-90-70c-8-6-10-18-4-28l86-148c6-10 16-12 26-8l106 42c22-16 46-32 72-42l16-112c2-10 10-18 20-18h172c10 0 18 8 20 18l16 112c26 10 50 24 72 42l106-42c10-4 20-2 26 8l86 148c6 10 4 22-4 28l-90 70c2 14 2 28 2 42s0 28-2 42z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["settings"],"grid":0},"attrs":[],"properties":{"id":1034,"order":1364,"ligatures":"settings","prevSize":32,"code":59669,"name":"settings"},"setIdx":1,"setId":1,"iconIdx":58},{"icon":{"paths":["M512 658l160 96-42-182 142-124-188-16-72-172-72 172-188 16 142 124-42 182zM938 394l-232 202 70 300-264-160-264 160 70-300-232-202 306-26 120-282 120 282z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["star_border"],"grid":0},"attrs":[],"properties":{"id":1035,"order":1365,"ligatures":"star_border","prevSize":32,"code":59670,"name":"star"},"setIdx":1,"setId":1,"iconIdx":59},{"icon":{"paths":["M640 662l150-150-150-150v108h-256v-108l-150 150 150 150v-108h256v108zM854 170c46 0 84 40 84 86v512c0 46-38 86-84 86h-684c-46 0-84-40-84-86v-512c0-46 38-86 84-86h136l78-84h256l78 84h136z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["switch_camera"],"grid":0},"attrs":[],"properties":{"id":1036,"order":1366,"ligatures":"switch_camera","prevSize":32,"code":59681,"name":"switch-camera"},"setIdx":1,"setId":1,"iconIdx":60},{"icon":{"paths":["M896 726v-512h-768v512h768zM896 128c46 0 86 40 86 86l-2 512c0 46-38 84-84 84h-214v86h-340v-86h-214c-46 0-86-38-86-84v-512c0-46 40-86 86-86h768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tv"],"grid":0},"attrs":[],"properties":{"id":1037,"order":1367,"ligatures":"tv","prevSize":32,"code":59671,"name":"share-desktop"},"setIdx":1,"setId":1,"iconIdx":61},{"icon":{"paths":["M726 448l170-170v468l-170-170v150c0 24-20 42-44 42h-512c-24 0-42-18-42-42v-428c0-24 18-42 42-42h512c24 0 44 18 44 42v150z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["videocam"],"grid":0},"attrs":[],"properties":{"id":1038,"order":1368,"ligatures":"videocam","prevSize":32,"code":59672,"name":"camera"},"setIdx":1,"setId":1,"iconIdx":62},{"icon":{"paths":["M140 86l756 756-54 54-136-136c-6 4-16 8-24 8h-512c-24 0-42-18-42-42v-428c0-24 18-42 42-42h32l-116-116zM896 278v456l-478-478h264c24 0 44 18 44 42v150z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["videocam_off"],"grid":0},"attrs":[],"properties":{"id":1039,"order":1369,"ligatures":"videocam_off","prevSize":32,"code":59673,"name":"camera-disabled"},"setIdx":1,"setId":1,"iconIdx":63},{"icon":{"paths":["M598 138c172 38 298 192 298 374s-126 336-298 374v-88c124-36 212-150 212-286s-88-250-212-286v-88zM704 512c0 76-42 140-106 172v-344c64 32 106 96 106 172zM128 384h170l214-214v684l-214-214h-170v-256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume_up"],"grid":0},"attrs":[],"properties":{"id":1040,"order":1370,"ligatures":"volume_up","prevSize":32,"code":59674,"name":"volume"},"setIdx":1,"setId":1,"iconIdx":64},{"icon":{"paths":["M1123.444 20.985c-23.593-26.481-64.131-28.989-90.74-5.395l-1008.269 893.436c-26.609 23.468-28.991 64.131-5.46 90.676 12.674 14.306 30.308 21.649 48.126 21.649 15.123 0 30.372-5.401 42.544-16.195l130.045-115.22c90.743 81.844 210.569 132.165 342.473 132.101 282.816-0.061 510.913-227.969 511.287-510.972 0.126-109.934-34.682-211.367-93.499-294.72l118.088-104.625c26.483-23.526 28.997-64.129 5.404-90.735zM944.422 510.182c0.128 200.922-161.896 363.201-362.509 362.952-87.56-0.123-167.573-31.151-230.061-82.569l331.277-293.509v73.176c1.071 60.993 32.696 92.18 94.944 93.692 61.997-1.512 93.686-32.763 95.131-93.756v-41.096h-72.227v47.499c0.251 4.642-0.564 10.607-2.511 17.949-1.25 3.261-3.448 6.020-6.525 8.093-3.197 2.572-7.845 3.828-13.868 3.828-10.543-0.31-17.132-4.268-19.827-11.921-1.068-3.512-1.947-6.905-2.508-10.163-0.254-2.887-0.377-5.532-0.377-7.786v-143.511l42.477-37.634c0.215 0.432 0.452 0.851 0.63 1.303 1.947 6.467 2.762 12.799 2.511 19.076v36.772h72.227v-30.121c-0.246-31.245-9.086-54.699-26.363-70.447l40.711-36.069c35.787 56.055 56.803 122.585 56.867 194.244z","M239.795 628.53c-12.613-37.023-19.827-76.557-19.827-117.913-0.19-200.236 161.584-362.009 361.945-362.135 56.853 0 110.313 13.302 158.133 36.398l117.846-104.421c-79.444-50.952-173.758-80.817-275.292-80.948-283.377-0.181-511.354 227.729-511.789 511.675-0.126 79.567 18.636 154.679 51.137 221.882l117.848-104.538z","M388.576 333.98h-97.514v249.057l72.23-64.070v-0.689h0.815l117.72-104.418c0-0.564 0.123-0.94 0.123-1.509 0.753-53.898-30.369-80.069-93.374-78.37zM405.959 398.483c1.942 2.767 3.074 6.469 3.323 11.112 0.312 4.452 0.438 9.6 0.438 15.246 0.251 10.916-0.689 19.83-2.949 26.985-2.952 7.594-10.983 11.357-24.159 11.357h-19.325v-74.043h15.31c7.842 0 13.865 0.683 18.072 2.19 4.397 1.573 7.468 3.953 9.29 7.153z"],"width":1140,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["recDisable"],"grid":0},"attrs":[],"properties":{"order":1371,"id":1041,"prevSize":32,"code":58899,"name":"recDisable","ligatures":""},"setIdx":1,"setId":1,"iconIdx":65},{"icon":{"paths":["M581.278-1.708c284.857 0.19 514.807 230.517 514.427 514.997-0.378 285.047-230.073 514.553-514.869 514.615-284.541 0.062-515.311-230.517-514.933-514.422 0.439-285.936 230.009-515.439 515.375-515.19zM580.579 148.244c-201.764 0.123-364.666 163.032-364.478 364.663 0 202.018 162.524 364.735 364.478 364.984 202.018 0.316 365.174-163.030 365.048-365.423-0.252-201.767-163.156-364.35-365.048-364.224z","M287.698 335.093h98.196c63.442-1.767 94.785 24.518 94.027 78.863 0.254 19.081-2.211 34.882-7.456 47.521-6.005 12.508-18.706 21.988-38.167 28.181v0.819c28.373 6.259 43.031 23.573 43.981 51.946v57.689c0 11.247 0.254 22.813 0.758 34.756 0.819 12.005 3.033 20.979 6.696 27.043h-71.846c-3.727-6.064-6.128-15.038-7.14-27.043-1.012-11.943-1.454-23.509-1.138-34.756v-52.321c0-9.603-2.214-16.553-6.573-20.979-4.675-4.107-12.701-6.19-24.012-6.19h-14.599v141.291h-72.73v-326.82zM360.428 465.139h19.463c13.271 0 21.359-3.794 24.331-11.375 2.276-7.204 3.221-16.304 2.969-27.171 0-5.815-0.126-10.867-0.442-15.418-0.252-4.675-1.392-8.404-3.352-11.247-1.831-3.157-4.926-5.561-9.352-7.14-4.233-1.454-10.299-2.211-18.2-2.211h-15.418v74.564z","M498.372 335.093h162.082v62.687h-89.35v65.587h78.103v62.685h-78.103v73.11h92.822v62.749h-165.557v-326.818z","M682.507 424.001c0.316-31.782 9.416-55.542 27.425-71.407 17.44-15.29 40.185-22.936 68.181-22.936 28.247 0 51.119 7.646 68.623 23 17.82 15.798 26.92 39.623 27.171 71.407v30.333h-72.73v-37.031c0.254-6.192-0.57-12.639-2.527-19.209-1.264-3.157-3.475-5.938-6.573-8.214-3.221-1.515-7.898-2.404-13.964-2.404-10.615 0.316-17.249 3.855-19.967 10.618-2.211 6.573-3.223 13.017-2.907 19.209v161.956c0 2.273 0.126 4.865 0.38 7.772 0.568 3.411 1.454 6.824 2.527 10.233 2.717 7.775 9.352 11.756 19.967 12.007 6.067 0 10.744-1.261 13.964-3.791 3.098-2.15 5.309-4.867 6.573-8.216 1.96-7.33 2.782-13.33 2.527-18.007v-47.837h72.73v41.328c-1.451 61.547-33.364 93.015-95.794 94.469-62.685-1.454-94.53-32.922-95.607-94.343v-148.937z"],"width":1142,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["recEnable"],"grid":0},"attrs":[],"properties":{"order":1372,"id":1042,"prevSize":32,"code":58900,"name":"recEnable","ligatures":""},"setIdx":1,"setId":1,"iconIdx":66},{"icon":{"paths":["M952.495 4.935h-818.689c-72.81 0-132.183 60.63-132.183 135.162v750.719c0 74.473 59.372 135.101 132.183 135.101h818.686c72.936 0 132.314-60.625 132.314-135.101v-750.722c0.003-74.532-59.378-135.159-132.311-135.159zM946.346 884.349h-806.14v-737.822h806.015l0.126 737.822z","M685.753 285.456h216.911v566.758h-216.911v-566.758z","M428.672 413.998h216.911v438.216h-216.911v-438.216z","M172.339 542.54h216.161v309.677h-216.161v-309.677z"],"width":1088,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["presentation"],"grid":0},"attrs":[],"properties":{"order":1373,"id":1043,"prevSize":32,"code":58883,"name":"presentation","ligatures":""},"setIdx":1,"setId":1,"iconIdx":67},{"icon":{"paths":["M512 42c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 298c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 298c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 554c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 554c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 214c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86zM256 554c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM256 298c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM256 42c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 810c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["dialpad"],"grid":0},"attrs":[],"properties":{"order":1374,"ligatures":"dialpad","id":1044,"prevSize":32,"code":59685,"name":"dialpad"},"setIdx":1,"setId":1,"iconIdx":68},{"icon":{"paths":["M512 384c70 0 128 58 128 128s-58 128-128 128-128-58-128-128 58-128 128-128zM512 726c118 0 214-96 214-214s-96-214-214-214-214 96-214 214 96 214 214 214zM512 192c214 0 396 132 470 320-74 188-256 320-470 320s-396-132-470-320c74-188 256-320 470-320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["visibility"],"grid":0},"attrs":[],"properties":{"order":1375,"ligatures":"remove_red_eye, visibility","id":1045,"prevSize":32,"code":59683,"name":"visibility"},"setIdx":1,"setId":1,"iconIdx":69},{"icon":{"paths":["M506 384h6c70 0 128 58 128 128v8zM322 418c-14 28-24 60-24 94 0 118 96 214 214 214 34 0 66-10 94-24l-66-66c-8 2-18 4-28 4-70 0-128-58-128-128 0-10 2-20 4-28zM86 182l54-54 756 756-54 54c-47.968-47.365-96.266-94.401-144-142-58 24-120 36-186 36-214 0-396-132-470-320 34-84 90-156 160-212-39.017-38.983-77.307-78.693-116-118zM512 298c-28 0-54 6-78 16l-92-92c52-20 110-30 170-30 214 0 394 132 468 320-32 80-82 148-146 202l-124-124c10-24 16-50 16-78 0-118-96-214-214-214z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["visibility_off"],"grid":0},"attrs":[],"properties":{"order":1376,"ligatures":"visibility_off","id":1046,"prevSize":32,"code":59684,"name":"visibility-off"},"setIdx":1,"setId":1,"iconIdx":70}],"height":1024,"metadata":{"name":"jitsi"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"jitsi","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":0},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"classSelector":".icon"},"historySize":100,"showCodes":false,"search":"","showLiga":false,"gridSize":16}} \ No newline at end of file diff --git a/ios/sdk/sdk.xcodeproj/project.pbxproj b/ios/sdk/sdk.xcodeproj/project.pbxproj index efc750a23..a10eceba3 100644 --- a/ios/sdk/sdk.xcodeproj/project.pbxproj +++ b/ios/sdk/sdk.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ 6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC920C06D530089C899 /* recordingOff.mp3 */; }; 75635B0A20751D6D00F29C9F /* joined.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0820751D6D00F29C9F /* joined.wav */; }; 75635B0B20751D6D00F29C9F /* left.wav in Resources */ = {isa = PBXBuildFile; fileRef = 75635B0920751D6D00F29C9F /* left.wav */; }; + 87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */ = {isa = PBXBuildFile; fileRef = 87FE6F3221E52437004A5DC7 /* incomingMessage.wav */; }; A4414AE020B37F1A003546E6 /* rejected.wav in Resources */ = {isa = PBXBuildFile; fileRef = A4414ADF20B37F1A003546E6 /* rejected.wav */; }; A4A934E9212F3ADB001E9388 /* Dropbox.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A934E8212F3ADB001E9388 /* Dropbox.m */; }; B386B85720981A75000DEF7A /* InviteController.m in Sources */ = {isa = PBXBuildFile; fileRef = B386B85020981A74000DEF7A /* InviteController.m */; }; @@ -85,6 +86,7 @@ 6C31EDC920C06D530089C899 /* recordingOff.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; name = recordingOff.mp3; path = ../../sounds/recordingOff.mp3; sourceTree = ""; }; 75635B0820751D6D00F29C9F /* joined.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = joined.wav; path = ../../sounds/joined.wav; sourceTree = ""; }; 75635B0920751D6D00F29C9F /* left.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = left.wav; path = ../../sounds/left.wav; sourceTree = ""; }; + 87FE6F3221E52437004A5DC7 /* incomingMessage.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = incomingMessage.wav; path = ../../sounds/incomingMessage.wav; sourceTree = ""; }; 98E09B5C73D9036B4ED252FC /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = ""; }; 9C77CA3CC919B081F1A52982 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "../Pods/Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = ""; }; A4414ADF20B37F1A003546E6 /* rejected.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = rejected.wav; path = ../../sounds/rejected.wav; sourceTree = ""; }; @@ -125,6 +127,7 @@ 0BCA49681EC4BBE500B793EE /* Resources */ = { isa = PBXGroup; children = ( + 87FE6F3221E52437004A5DC7 /* incomingMessage.wav */, 0BC4B8681F8C01E100CE8B21 /* CallKitIcon.png */, C6245F5B2053091D0040BE68 /* image-resize@2x.png */, C6245F5C2053091D0040BE68 /* image-resize@3x.png */, @@ -335,6 +338,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 87FE6F3321E52437004A5DC7 /* incomingMessage.wav in Resources */, 0B49424520AD8DBD00BD2DE0 /* outgoingStart.wav in Resources */, 6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */, A4414AE020B37F1A003546E6 /* rejected.wav in Resources */, diff --git a/lang/main.json b/lang/main.json index 611c17727..7fb3b8b7e 100644 --- a/lang/main.json +++ b/lang/main.json @@ -53,8 +53,9 @@ "messagebox": "Enter text...", "nickname": { "popover": "Choose a nickname", - "title": "Enter a nickname in the box below" - } + "title": "Enter a nickname to use chat" + }, + "title": "Chat" }, "connection": { "ATTACHED": "Attached", @@ -642,7 +643,7 @@ "Settings": "Settings", "sharedvideo": "Share a YouTube video", "sharedVideoMutedPopup": "Your shared video has been muted so that you can talk to the other members.", - "shareRoom": "Share room", + "shareRoom": "Invite someone", "shortcuts": "View shortcuts", "sip": "Call SIP number", "speakerStats": "Speaker stats", diff --git a/package-lock.json b/package-lock.json index 06707a055..a9a9ae317 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2166,6 +2166,15 @@ } } }, + "@expo/react-native-action-sheet": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@expo/react-native-action-sheet/-/react-native-action-sheet-1.1.2.tgz", + "integrity": "sha512-//2EvHVBFVGSAzuJvG0I1UoQVzGJBo2f1CkO+RMnEWdR0FeWYmV7+pCThIroL1czRm/oOtoMxiGS6FgXt6QgVA==", + "requires": { + "hoist-non-react-statics": "^2.2.2", + "prop-types": "^15.5.10" + } + }, "@jitsi/sdp-interop": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/@jitsi/sdp-interop/-/sdp-interop-0.1.13.tgz", @@ -2193,7 +2202,7 @@ }, "@segment/top-domain": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/@segment/top-domain/-/top-domain-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/@segment/top-domain/-/top-domain-3.0.0.tgz", "integrity": "sha1-AuWlpP1CqfbPiGsF6C8QQBKjw6c=", "requires": { "component-cookie": "^1.1.2", @@ -3142,6 +3151,14 @@ "util.promisify": "^1.0.0" } }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-plugin-syntax-trailing-function-commas": { "version": "7.0.0-beta.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", @@ -4112,7 +4129,7 @@ "dependencies": { "debug": { "version": "2.2.0", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "requires": { "ms": "0.7.1" @@ -4120,7 +4137,7 @@ }, "ms": { "version": "0.7.1", - "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" } } @@ -8368,6 +8385,11 @@ "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz", "integrity": "sha1-lkojxU5IiUBbSGGlyfBIDUUUHfo=" }, + "keymirror": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/keymirror/-/keymirror-0.1.1.tgz", + "integrity": "sha1-kYiJ6hP40KQufFVyUO7nE63JXDU=" + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -11444,11 +11466,37 @@ "jssha": "^2.2.0" } }, + "react-native-communications": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-native-communications/-/react-native-communications-2.2.1.tgz", + "integrity": "sha1-eIO1ayCgAu63kMET+GFuqGksp5U=" + }, "react-native-fast-image": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-5.1.1.tgz", "integrity": "sha512-kEzgZxbbXYhy27u5GnhrKitn+XDBFAHSDUJdYC6llMi5cDPjgcqhOAQABj0K+ga5pn+/xPZLmD882rrUGiwVVA==" }, + "react-native-gifted-chat": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-native-gifted-chat/-/react-native-gifted-chat-0.6.0.tgz", + "integrity": "sha512-KYI/okKUZmjcJM3I6BP10KG1WNkCKBZhY8N47wk407dr+KqLS4+LR13UKo7j3f++5SrX2Ex+7vYvIQ2pBdzCiA==", + "requires": { + "@expo/react-native-action-sheet": "^1.0.1", + "moment": "^2.19.0", + "react-native-communications": "2.2.1", + "react-native-lightbox": "^0.7.0", + "react-native-parsed-text": "^0.0.20", + "react-native-video": "^3.2.1", + "uuid": "3.3.0" + }, + "dependencies": { + "uuid": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.0.tgz", + "integrity": "sha512-ijO9N2xY/YaOqQ5yz5c4sy2ZjWmA6AR6zASb/gdpeKZ8+948CxwfMW9RrKVk5may6ev8c0/Xguu32e2Llelpqw==" + } + } + }, "react-native-google-signin": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/react-native-google-signin/-/react-native-google-signin-1.0.2.tgz", @@ -11464,11 +11512,28 @@ "resolved": "https://registry.npmjs.org/react-native-keep-awake/-/react-native-keep-awake-4.0.0.tgz", "integrity": "sha512-0Fotox+eLXQooeibVs3P60yASYUWjtRw9MZNmbuHt5UZQrgUrAKsE4jm7gTr4tPU1m1RkwGzcgUFpcOkh/ec7g==" }, + "react-native-lightbox": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/react-native-lightbox/-/react-native-lightbox-0.7.0.tgz", + "integrity": "sha512-HS3T4WlCd0Gb3us2d6Jse5m6KjNhngnKm35Wapq30WtQa9s+/VMmtuktbGPGaWtswcDyOj6qByeJBw9W80iPCA==", + "requires": { + "prop-types": "^15.5.10" + } + }, "react-native-linear-gradient": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.5.3.tgz", "integrity": "sha512-XdusrOXXlkI+yQpUW7YLeiq9cZiBwkvQX4XEkHPVrJ9H47gsKmdgBwObkZBzBQUP0dKK/Sg6aVpETEis4w43bQ==" }, + "react-native-parsed-text": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/react-native-parsed-text/-/react-native-parsed-text-0.0.20.tgz", + "integrity": "sha512-n77hYu64Tr3oclzIXBXXaiLh1WbMKdA2Y0x6bX/yqwxAM4afcObENY5VrNB+EsTBJBEDqrypA9D1p2cLEIHkuQ==", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "prop-types": "^15.5.10" + } + }, "react-native-sound": { "version": "github:jitsi/react-native-sound#e4260ed7f641eeb0377d76eac7987aba72e1cf08", "from": "github:jitsi/react-native-sound#e4260ed7f641eeb0377d76eac7987aba72e1cf08" @@ -11524,6 +11589,15 @@ } } }, + "react-native-video": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-native-video/-/react-native-video-3.2.1.tgz", + "integrity": "sha512-Xansfoo/to80FwhM1HKlf7pCxDZ5RtV+kG3piCVvsNAhPY4GGwiOGUH9y3Y+mFQIDEWcY8I9j16lsFYAbnue3g==", + "requires": { + "keymirror": "0.1.1", + "prop-types": "^15.5.10" + } + }, "react-native-webrtc": { "version": "github:jitsi/react-native-webrtc#c1be0cb1c6e8a83dfd406e478082a5ff205a97ec", "from": "github:jitsi/react-native-webrtc#c1be0cb1c6e8a83dfd406e478082a5ff205a97ec", diff --git a/package.json b/package.json index ba316927c..7bac4f973 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "react-native-calendar-events": "1.6.4", "react-native-callstats": "3.53.4", "react-native-fast-image": "5.1.1", + "react-native-gifted-chat": "0.6.0", "react-native-google-signin": "1.0.2", "react-native-immersive": "2.0.0", "react-native-keep-awake": "4.0.0", diff --git a/react/features/chat/actionTypes.js b/react/features/chat/actionTypes.js index ce699ae92..91ae0ba91 100644 --- a/react/features/chat/actionTypes.js +++ b/react/features/chat/actionTypes.js @@ -1,3 +1,5 @@ +// @flow + /** * The type of the action which signals to add a new chat message. * @@ -14,7 +16,7 @@ export const ADD_MESSAGE = Symbol('ADD_MESSAGE'); /** - * The type of the action which signals to remove all saved chat messages. + * The type of the action which signals to clear messages in Redux. * * { * type: CLEAR_MESSAGES diff --git a/react/features/chat/actions.js b/react/features/chat/actions.js index 8f2ba9c5c..bff2c953f 100644 --- a/react/features/chat/actions.js +++ b/react/features/chat/actions.js @@ -1,3 +1,5 @@ +// @flow + import { ADD_MESSAGE, CLEAR_MESSAGES, @@ -27,7 +29,7 @@ import { * timestamp: string, * }} */ -export function addMessage(messageDetails) { +export function addMessage(messageDetails: Object) { return { type: ADD_MESSAGE, ...messageDetails @@ -35,7 +37,7 @@ export function addMessage(messageDetails) { } /** - * Removes all stored chat messages. + * Clears the chat messages in Redux. * * @returns {{ * type: CLEAR_MESSAGES @@ -56,7 +58,7 @@ export function clearMessages() { * message: string * }} */ -export function sendMessage(message) { +export function sendMessage(message: string) { return { type: SEND_MESSAGE, message diff --git a/react/features/chat/components/AbstractChat.js b/react/features/chat/components/AbstractChat.js new file mode 100644 index 000000000..bdcd5c845 --- /dev/null +++ b/react/features/chat/components/AbstractChat.js @@ -0,0 +1,113 @@ +// @flow + +import { Component } from 'react'; + +import { getLocalParticipant } from '../../base/participants'; + +import { sendMessage, toggleChat } from '../actions'; + +/** + * The type of the React {@code Component} props of {@code AbstractChat}. + */ +export type Props = { + + /** + * True if the chat window should be rendered. + */ + _isOpen: boolean, + + /** + * All the chat messages in the conference. + */ + _messages: Array, + + /** + * Function to send a text message. + * + * @protected + */ + _onSendMessage: Function, + + /** + * Function to toggle the chat window. + */ + _onToggleChat: Function, + + /** + * Whether or not to block chat access with a nickname input form. + */ + _showNamePrompt: boolean, + + /** + * The Redux dispatch function. + */ + dispatch: Dispatch<*>, + + /** + * Function to be used to translate i18n labels. + */ + t: Function +}; + +/** + * Implements an abstract chat panel. + */ +export default class AbstractChat extends Component

{} + +/** + * Maps redux actions to the props of the component. + * + * @param {Function} dispatch - The redux action {@code dispatch} function. + * @returns {{ + * _onSendMessage: Function, + * _onToggleChat: Function + * }} + * @private + */ +export function _mapDispatchToProps(dispatch: Dispatch<*>) { + return { + /** + * Toggles the chat window. + * + * @returns {Function} + */ + _onToggleChat() { + dispatch(toggleChat()); + }, + + /** + * Sends a text message. + * + * @private + * @param {string} text - The text message to be sent. + * @returns {void} + * @type {Function} + */ + _onSendMessage(text: string) { + dispatch(sendMessage(text)); + } + }; +} + +/** + * Maps (parts of) the redux state to {@link Chat} React {@code Component} + * props. + * + * @param {Object} state - The redux store/state. + * @private + * @returns {{ + * _isOpen: boolean, + * _messages: Array, + * _showNamePrompt: boolean + * }} + */ +export function _mapStateToProps(state: Object) { + const { isOpen, messages } = state['features/chat']; + const _localParticipant = getLocalParticipant(state); + + return { + _isOpen: isOpen, + _messages: messages, + _showNamePrompt: !_localParticipant.name + }; +} diff --git a/react/features/chat/components/AbstractChatMessage.js b/react/features/chat/components/AbstractChatMessage.js new file mode 100644 index 000000000..33fbc70c1 --- /dev/null +++ b/react/features/chat/components/AbstractChatMessage.js @@ -0,0 +1,48 @@ +// @flow + +import { PureComponent } from 'react'; + +import { getAvatarURLByParticipantId } from '../../base/participants'; + +/** + * The type of the React {@code Component} props of {@code AbstractChatMessage}. + */ +export type Props = { + + /** + * The URL of the avatar of the participant. + */ + _avatarURL: string, + + /** + * The representation of a chat message. + */ + message: Object, + + /** + * Invoked to receive translated strings. + */ + t: Function +}; + +/** + * Abstract component to display a chat message. + */ +export default class AbstractChatMessage extends PureComponent

{} + +/** + * Maps part of the Redux state to the props of this component. + * + * @param {Object} state - The Redux state. + * @param {Props} ownProps - The own props of the component. + * @returns {{ + * _avatarURL: string + * }} + */ +export function _mapStateToProps(state: Object, ownProps: Props) { + const { message } = ownProps; + + return { + _avatarURL: getAvatarURLByParticipantId(state, message.user._id) + }; +} diff --git a/react/features/chat/components/Chat.native.js b/react/features/chat/components/Chat.native.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/react/features/chat/components/ChatCounter.native.js b/react/features/chat/components/ChatCounter.native.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/react/features/chat/components/ChatInput.native.js b/react/features/chat/components/ChatInput.native.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/react/features/chat/components/ChatMessage.native.js b/react/features/chat/components/ChatMessage.native.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/react/features/chat/components/DisplayNameForm.native.js b/react/features/chat/components/DisplayNameForm.native.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/react/features/chat/components/SmileysPanel.native.js b/react/features/chat/components/SmileysPanel.native.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/react/features/chat/components/index.js b/react/features/chat/components/index.js deleted file mode 100644 index c8f9441e1..000000000 --- a/react/features/chat/components/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export Chat from './Chat'; -export ChatCounter from './ChatCounter'; diff --git a/react/features/chat/components/index.native.js b/react/features/chat/components/index.native.js new file mode 100644 index 000000000..a32ec6061 --- /dev/null +++ b/react/features/chat/components/index.native.js @@ -0,0 +1,3 @@ +// @flow + +export * from './native'; diff --git a/react/features/chat/components/index.web.js b/react/features/chat/components/index.web.js new file mode 100644 index 000000000..40d5f4652 --- /dev/null +++ b/react/features/chat/components/index.web.js @@ -0,0 +1,3 @@ +// @flow + +export * from './web'; diff --git a/react/features/chat/components/native/Chat.js b/react/features/chat/components/native/Chat.js new file mode 100644 index 000000000..4484f5a14 --- /dev/null +++ b/react/features/chat/components/native/Chat.js @@ -0,0 +1,168 @@ +// @flow + +import React from 'react'; +import { SafeAreaView } from 'react-native'; +import { GiftedChat } from 'react-native-gifted-chat'; +import { connect } from 'react-redux'; + +import { translate } from '../../../base/i18n'; +import { BackButton, Header, HeaderLabel, Modal } from '../../../base/react'; + +import AbstractChat, { + _mapDispatchToProps, + _mapStateToProps as _abstractMapStateToProps, + type Props as AbstractProps +} from '../AbstractChat'; + +import ChatMessage from './ChatMessage'; +import styles from './styles'; + +type Props = AbstractProps & { + + /** + * True if the chat window should have a solid BG render. + */ + _solidBackground: boolean +} + + +/** + * Implements a React native component that renders the chat window (modal) of + * the mobile client. + */ +class Chat extends AbstractChat { + + /** + * Initializes a new instance. + * + * @inheritdoc + */ + constructor(props: Props) { + super(props); + + this._onSend = this._onSend.bind(this); + this._renderMessage = this._renderMessage.bind(this); + this._transformMessage = this._transformMessage.bind(this); + } + + /** + * Implements React's {@link Component#render()}. + * + * @inheritdoc + */ + render() { + const messages = this.props._messages.map(this._transformMessage); + const modalStyle = [ + styles.modalBackdrop + ]; + + if (this.props._solidBackground) { + // We only use a transparent background, when we are in a video + // meeting to give a user a glympse of what's happening. Otherwise + // we use a non-transparent background. + modalStyle.push(styles.solidModalBackdrop); + } + + return ( + +

+ + +
+ + + + + ); + } + + _onSend: (Array) => void; + + /** + * Callback to trigger a message send action. + * + * @param {string} message - The chat message to display. + * @returns {void} + */ + _onSend([ message ]) { + this.props._onSendMessage(message.text); + } + + _renderMessage: Object => React$Element<*> + + /** + * Renders a single message. + * + * @param {Object} messageProps - The message props object to be rendered. + * @returns {React$Element<*>} + */ + _renderMessage(messageProps) { + const { currentMessage } = messageProps; + + return ( + + ); + } + + _transformMessage: (Object, number) => Object; + + /** + * Transforms a Jitsi message object to a format that gifted-chat can + * handle. + * + * @param {Object} message - The chat message in our internal format. + * @param {number} index - The index of the message in the array. + * @returns {Object} + */ + _transformMessage(message, index) { + const system = message.messageType === 'error'; + + return ( + { + _id: index, + createdAt: new Date(message.timestamp), + messageType: message.messageType, + system, + text: system + ? this.props.t('chat.error', { + error: message.error, + originalText: message.message + }) + : message.message, + user: { + _id: message.id, + name: message.displayName + } + } + ); + } +} + +/** + * Maps part of the Redux state to the props of this component. + * + * @param {Object} state - The Redux state. + * @returns {{ + * _solidBackground: boolean + * }} + */ +function _mapStateToProps(state) { + const abstractReduxProps = _abstractMapStateToProps(state); + + return { + ...abstractReduxProps, + + // Gifted chat requires the messages to be reverse ordered. + _messages: [ + ...abstractReduxProps._messages + ].reverse(), + _solidBackground: state['features/base/conference'].audioOnly + }; +} + +export default translate(connect(_mapStateToProps, _mapDispatchToProps)(Chat)); diff --git a/react/features/chat/components/native/ChatButton.js b/react/features/chat/components/native/ChatButton.js new file mode 100644 index 000000000..38c3e9058 --- /dev/null +++ b/react/features/chat/components/native/ChatButton.js @@ -0,0 +1,129 @@ +// @flow + +import { connect } from 'react-redux'; + +import { getLocalParticipant } from '../../../base/participants'; +import { + AbstractButton, + type AbstractButtonProps +} from '../../../base/toolbox'; +import { openDisplayNamePrompt } from '../../../display-name'; + +import { toggleChat } from '../../actions'; +import { getUnreadCount } from '../../functions'; + +type Props = AbstractButtonProps & { + + /** + * Function to display chat. + * + * @protected + */ + _displayChat: Function, + + /** + * Function to diaply the name prompt before displaying the chat + * window, if the user has no display name set. + */ + _displayNameInputDialog: Function, + + /** + * Whether or not to block chat access with a nickname input form. + */ + _showNamePrompt: boolean, + + /** + * The unread message count. + */ + _unreadMessageCount: number +}; + +/** + * Implements an {@link AbstractButton} to open the chat screen on mobile. + */ +class ChatButton extends AbstractButton { + accessibilityLabel = 'toolbar.accessibilityLabel.chat'; + iconName = 'chat'; + label = 'toolbar.chat'; + toggledIconName = 'chat-unread'; + + /** + * Handles clicking / pressing the button, and opens the appropriate dialog. + * + * @private + * @returns {void} + */ + _handleClick() { + if (this.props._showNamePrompt) { + this.props._displayNameInputDialog(() => { + this.props._displayChat(); + }); + } else { + this.props._displayChat(); + } + } + + /** + * Renders the button toggled when there are unread messages. + * + * @protected + * @returns {boolean} + */ + _isToggled() { + return Boolean(this.props._unreadMessageCount); + } +} + +/** + * Maps redux actions to the props of the component. + * + * @param {Function} dispatch - The redux action {@code dispatch} function. + * @returns {{ + * _displayChat, + * _displayNameInputDialog + * }} + * @private + */ +function _mapDispatchToProps(dispatch: Function) { + return { + /** + * Launches native invite dialog. + * + * @private + * @returns {void} + */ + _displayChat() { + dispatch(toggleChat()); + }, + + /** + * Displays a diaply name prompt. + * + * @param {Function} onPostSubmit - The function to invoke after a + * succesfulsetting of the display name. + * @returns {void} + */ + _displayNameInputDialog(onPostSubmit) { + dispatch(openDisplayNamePrompt(onPostSubmit)); + } + }; +} + +/** + * Maps part of the redux state to the component's props. + * + * @param {Object} state - The Redux state. + * @returns {{ + * _unreadMessageCount + * }} + */ +function _mapStateToProps(state) { + const localParticipant = getLocalParticipant(state); + + return { + _showNamePrompt: !localParticipant.name, + _unreadMessageCount: getUnreadCount(state) + }; +} + +export default connect(_mapStateToProps, _mapDispatchToProps)(ChatButton); diff --git a/react/features/chat/components/native/ChatMessage.js b/react/features/chat/components/native/ChatMessage.js new file mode 100644 index 000000000..e8f3aa617 --- /dev/null +++ b/react/features/chat/components/native/ChatMessage.js @@ -0,0 +1,152 @@ +// @flow + +import React from 'react'; +import { Text, View } from 'react-native'; +import { connect } from 'react-redux'; + +import { getLocalizedDateFormatter, translate } from '../../../base/i18n'; +import { Avatar } from '../../../base/participants'; + +import AbstractChatMessage, { + _mapStateToProps as _abstractMapStateToProps, + type Props as AbstractProps +} from '../AbstractChatMessage'; +import styles from './styles'; + +/** + * Size of the rendered avatar in the message. + */ +const AVATAR_SIZE = 32; + +/** + * Formatter string to display the message timestamp. + */ +const TIMESTAMP_FORMAT = 'H:mm'; + +type Props = AbstractProps & { + + /** + * True if the chat window has a solid BG so then we have to adopt in style. + */ + _solidBackground: boolean +} + +/** + * Renders a single chat message. + */ +class ChatMessage extends AbstractChatMessage { + /** + * Implements {@code Component#render}. + * + * @inheritdoc + */ + render() { + const { message } = this.props; + const timeStamp = getLocalizedDateFormatter( + message.createdAt).format(TIMESTAMP_FORMAT); + const localMessage = message.messageType === 'local'; + + // Style arrays that need to be updated in various scenarios, such as + // error messages or others. + const detailsWrapperStyle = [ + styles.detailsWrapper + ]; + const textWrapperStyle = [ + styles.textWrapper + ]; + const timeTextStyles = [ + styles.timeText + ]; + + if (localMessage) { + // The wrapper needs to be aligned to the right. + detailsWrapperStyle.push(styles.ownMessageDetailsWrapper); + + // The bubble needs to be differently styled. + textWrapperStyle.push(styles.ownTextWrapper); + } else if (message.system) { + // The bubble needs to be differently styled. + textWrapperStyle.push(styles.systemTextWrapper); + } + + if (this.props._solidBackground) { + timeTextStyles.push(styles.solidBGTimeText); + } + + return ( + + { + + // Avatar is only rendered for remote messages. + !localMessage && this._renderAvatar() + } + + + { + + // Display name is only rendered for remote + // messages. + !localMessage && this._renderDisplayName() + } + + { message.text } + + + + { timeStamp } + + + + ); + } + + /** + * Renders the avatar of the sender. + * + * @returns {React$Element<*>} + */ + _renderAvatar() { + const { _avatarURL } = this.props; + + return ( + + + + ); + } + + /** + * Renders the display name of the sender. + * + * @returns {React$Element<*>} + */ + _renderDisplayName() { + const { message } = this.props; + + return ( + + { message.user.name } + + ); + } +} + +/** + * Maps part of the Redux state to the props of this component. + * + * @param {Object} state - The Redux state. + * @param {Props} ownProps - The own props of the component. + * @returns {{ + * _solidBackground: boolean + * }} + */ +function _mapStateToProps(state, ownProps) { + return { + ..._abstractMapStateToProps(state, ownProps), + _solidBackground: state['features/base/conference'].audioOnly + }; +} + +export default translate(connect(_mapStateToProps)(ChatMessage)); diff --git a/react/features/chat/components/native/index.js b/react/features/chat/components/native/index.js new file mode 100644 index 000000000..2d8300bd0 --- /dev/null +++ b/react/features/chat/components/native/index.js @@ -0,0 +1,4 @@ +// @flow + +export { default as Chat } from './Chat'; +export { default as ChatButton } from './ChatButton'; diff --git a/react/features/chat/components/native/styles.js b/react/features/chat/components/native/styles.js new file mode 100644 index 000000000..ee3e2b09b --- /dev/null +++ b/react/features/chat/components/native/styles.js @@ -0,0 +1,124 @@ +// @flow + +import { + ColorPalette, + createStyleSheet +} from '../../../base/styles'; + +/** + * The styles of the feature chat. + * + * NOTE: Sizes and colors come from the 8x8 guidelines. This is the first + * component to receive this treating, if others happen to have similar, we + * need to extract the brand colors and sizes into a branding feature (planned + * for the future). + */ +export default createStyleSheet({ + + /** + * Wrapper View for the avatar. + */ + avatarWrapper: { + marginRight: 8 + }, + + /** + * Wrapper for the details together, such as name, message and time. + */ + detailsWrapper: { + alignItems: 'flex-start', + flex: 1, + flexDirection: 'column' + }, + + /** + * The text node for the display name. + */ + displayName: { + color: 'rgb(118, 136, 152)', + fontSize: 13 + }, + + /** + * The message text itself. + */ + messageText: { + color: 'rgb(28, 32, 37)', + fontSize: 15 + }, + + /** + * Wrapper View for the entire block. + */ + messageWrapper: { + alignItems: 'flex-start', + flex: 1, + flexDirection: 'row', + marginHorizontal: 17, + marginVertical: 4 + }, + + /** + * Background of the chat screen. Currently it's set to a transparent value + * as the idea is that the participant would still want to see at least a + * part of the video when he/she is in the chat window. + */ + modalBackdrop: { + backgroundColor: 'rgba(127, 127, 127, 0.8)', + flex: 1 + }, + + /** + * Style modifier for the {@code detailsWrapper} for own messages. + */ + ownMessageDetailsWrapper: { + alignItems: 'flex-end' + }, + + /** + * Style modifier for the {@code textWrapper} for own messages. + */ + ownTextWrapper: { + backgroundColor: 'rgb(210, 231, 249)', + borderTopLeftRadius: 8, + borderTopRightRadius: 0 + }, + + solidBGTimeText: { + color: 'rgb(164, 184, 209)' + }, + + /** + * Style modifier for the chat window when we're in audio only mode. + */ + solidModalBackdrop: { + backgroundColor: ColorPalette.white + }, + + /** + * Style modifier for system (error) messages. + */ + systemTextWrapper: { + backgroundColor: 'rgb(247, 215, 215)' + }, + + /** + * Wrapper for the name and the message text. + */ + textWrapper: { + alignItems: 'flex-start', + backgroundColor: 'rgb(240, 243, 247)', + borderRadius: 8, + borderTopLeftRadius: 0, + flexDirection: 'column', + padding: 9 + }, + + /** + * Text node for the timestamp. + */ + timeText: { + color: ColorPalette.white, + fontSize: 13 + } +}); diff --git a/react/features/chat/components/Chat.web.js b/react/features/chat/components/web/Chat.js similarity index 63% rename from react/features/chat/components/Chat.web.js rename to react/features/chat/components/web/Chat.js index 2b7418ba3..509c387bf 100644 --- a/react/features/chat/components/Chat.web.js +++ b/react/features/chat/components/web/Chat.js @@ -1,79 +1,25 @@ // @flow -import React, { Component } from 'react'; +import React from 'react'; import { connect } from 'react-redux'; import Transition from 'react-transition-group/Transition'; -import { translate } from '../../base/i18n'; -import { getLocalParticipant } from '../../base/participants'; - -import { toggleChat } from '../actions'; +import { translate } from '../../../base/i18n'; +import AbstractChat, { + _mapDispatchToProps, + _mapStateToProps, + type Props +} from '../AbstractChat'; import ChatInput from './ChatInput'; import ChatMessage from './ChatMessage'; import DisplayNameForm from './DisplayNameForm'; -/** - * The type of the React {@code Component} props of {@link Chat}. - */ -type Props = { - - /** - * The JitsiConference instance to send messages to. - */ - _conference: Object, - - /** - * Whether or not chat is displayed. - */ - _isOpen: Boolean, - - /** - * The local participant's ID. - */ - _localUserId: String, - - /** - * All the chat messages in the conference. - */ - _messages: Array, - - /** - * Whether or not to block chat access with a nickname input form. - */ - _showNamePrompt: boolean, - - /** - * Invoked to change the chat panel status. - */ - dispatch: Dispatch<*> -}; - -/** - * The type of the React {@code Component} state of {@Chat}. - */ -type State = { - - /** - * User provided nickname when the input text is provided in the view. - * - * @type {String} - */ - message: string -}; - /** * React Component for holding the chat feature in a side panel that slides in * and out of view. - * - * @extends Component */ -class Chat extends Component { - - /** - * Reference to the HTML element used for typing in a chat message. - */ - _chatInput: ?HTMLElement; +class Chat extends AbstractChat { /** * Whether or not the {@code Chat} component is off-screen, having finished @@ -96,15 +42,12 @@ class Chat extends Component { constructor(props: Props) { super(props); - this._chatInput = null; this._isExited = true; this._messagesListEnd = null; // Bind event handlers so they are only bound once for every instance. - this._onCloseClick = this._onCloseClick.bind(this); this._renderMessage = this._renderMessage.bind(this); this._renderPanelContent = this._renderPanelContent.bind(this); - this._setChatInputRef = this._setChatInputRef.bind(this); this._setMessageListEndRef = this._setMessageListEndRef.bind(this); } @@ -145,17 +88,6 @@ class Chat extends Component { ); } - _onCloseClick: () => void; - - /** - * Callback invoked to hide {@code Chat}. - * - * @returns {void} - */ - _onCloseClick() { - this.props.dispatch(toggleChat()); - } - /** * Returns a React Element for showing chat messages and a form to send new * chat messages. @@ -177,7 +109,7 @@ class Chat extends Component {
{ messages }
- + ); } @@ -213,14 +145,14 @@ class Chat extends Component { _renderPanelContent(state) { this._isExited = state === 'exited'; - const { _isOpen, _showNamePrompt } = this.props; + const { _isOpen, _onToggleChat, _showNamePrompt } = this.props; const ComponentToRender = !_isOpen && state === 'exited' ? null : (
X
+ onClick = { _onToggleChat }>X
{ _showNamePrompt ? : this._renderChat() } @@ -256,20 +188,6 @@ class Chat extends Component { } } - _setChatInputRef: (?HTMLElement) => void; - - /** - * Sets a reference to the HTML text input element used for typing in chat - * messages. - * - * @param {Object} chatInput - The input for typing chat messages. - * @private - * @returns {void} - */ - _setChatInputRef(chatInput: ?HTMLElement) { - this._chatInput = chatInput; - } - _setMessageListEndRef: (?HTMLElement) => void; /** @@ -284,29 +202,4 @@ class Chat extends Component { } } -/** - * Maps (parts of) the redux state to {@link Chat} React {@code Component} - * props. - * - * @param {Object} state - The redux store/state. - * @private - * @returns {{ - * _conference: Object, - * _isOpen: boolean, - * _messages: Array, - * _showNamePrompt: boolean - * }} - */ -function _mapStateToProps(state) { - const { isOpen, messages } = state['features/chat']; - const localParticipant = getLocalParticipant(state); - - return { - _conference: state['features/base/conference'].conference, - _isOpen: isOpen, - _messages: messages, - _showNamePrompt: !localParticipant.name - }; -} - -export default translate(connect(_mapStateToProps)(Chat)); +export default translate(connect(_mapStateToProps, _mapDispatchToProps)(Chat)); diff --git a/react/features/chat/components/ChatCounter.web.js b/react/features/chat/components/web/ChatCounter.js similarity index 95% rename from react/features/chat/components/ChatCounter.web.js rename to react/features/chat/components/web/ChatCounter.js index b5e1caadb..a267373dc 100644 --- a/react/features/chat/components/ChatCounter.web.js +++ b/react/features/chat/components/web/ChatCounter.js @@ -3,7 +3,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; -import { getUnreadCount } from '../functions'; +import { getUnreadCount } from '../../functions'; /** * The type of the React {@code Component} props of {@link ChatCounter}. diff --git a/react/features/chat/components/ChatInput.web.js b/react/features/chat/components/web/ChatInput.js similarity index 99% rename from react/features/chat/components/ChatInput.web.js rename to react/features/chat/components/web/ChatInput.js index 779617448..f5085d098 100644 --- a/react/features/chat/components/ChatInput.web.js +++ b/react/features/chat/components/web/ChatInput.js @@ -4,7 +4,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import Emoji from 'react-emoji-render'; -import { sendMessage } from '../actions'; +import { sendMessage } from '../../actions'; import SmileysPanel from './SmileysPanel'; diff --git a/react/features/chat/components/ChatMessage.web.js b/react/features/chat/components/web/ChatMessage.js similarity index 87% rename from react/features/chat/components/ChatMessage.web.js rename to react/features/chat/components/web/ChatMessage.js index 9ed51ff45..33f91fb8e 100644 --- a/react/features/chat/components/ChatMessage.web.js +++ b/react/features/chat/components/web/ChatMessage.js @@ -1,34 +1,20 @@ // @flow -import React, { PureComponent } from 'react'; +import React from 'react'; import { toArray } from 'react-emoji-render'; import Linkify from 'react-linkify'; -import { translate } from '../../base/i18n'; +import { translate } from '../../../base/i18n'; + +import AbstractChatMessage, { + type Props +} from '../AbstractChatMessage'; /** - * The type of the React {@code Component} props of {@link Chat}. + * Renders a single chat message. */ -type Props = { - - /** - * The redux representation of a chat message. - */ - message: Object, - - /** - * Invoked to receive translated strings. - */ - t: Function -}; - -/** - * Displays as passed in chat message. - * - * @extends Component - */ -class ChatMessage extends PureComponent { +class ChatMessage extends AbstractChatMessage { /** * Implements React's {@link Component#render()}. * diff --git a/react/features/chat/components/DisplayNameForm.web.js b/react/features/chat/components/web/DisplayNameForm.js similarity index 96% rename from react/features/chat/components/DisplayNameForm.web.js rename to react/features/chat/components/web/DisplayNameForm.js index 1e2098ad5..05824d3a0 100644 --- a/react/features/chat/components/DisplayNameForm.web.js +++ b/react/features/chat/components/web/DisplayNameForm.js @@ -4,8 +4,8 @@ import { FieldTextStateless } from '@atlaskit/field-text'; import React, { Component } from 'react'; import { connect } from 'react-redux'; -import { translate } from '../../base/i18n'; -import { updateSettings } from '../../base/settings'; +import { translate } from '../../../base/i18n'; +import { updateSettings } from '../../../base/settings'; /** * The type of the React {@code Component} props of {@DisplayNameForm}. diff --git a/react/features/chat/components/SmileysPanel.web.js b/react/features/chat/components/web/SmileysPanel.js similarity index 97% rename from react/features/chat/components/SmileysPanel.web.js rename to react/features/chat/components/web/SmileysPanel.js index 8ebcc089b..17ff86b6e 100644 --- a/react/features/chat/components/SmileysPanel.web.js +++ b/react/features/chat/components/web/SmileysPanel.js @@ -2,7 +2,7 @@ import React, { PureComponent } from 'react'; import Emoji from 'react-emoji-render'; -import { smileys } from '../smileys'; +import { smileys } from '../../smileys'; /** * The type of the React {@code Component} props of {@link SmileysPanel}. diff --git a/react/features/chat/components/web/index.js b/react/features/chat/components/web/index.js new file mode 100644 index 000000000..f48310329 --- /dev/null +++ b/react/features/chat/components/web/index.js @@ -0,0 +1,4 @@ +// @flow + +export { default as Chat } from './Chat'; +export { default as ChatCounter } from './ChatCounter'; diff --git a/react/features/chat/middleware.js b/react/features/chat/middleware.js index 65249959d..11b7a46f5 100644 --- a/react/features/chat/middleware.js +++ b/react/features/chat/middleware.js @@ -3,15 +3,21 @@ import UIUtil from '../../../modules/UI/util/UIUtil'; import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../base/app'; -import { CONFERENCE_JOINED, CONFERENCE_WILL_LEAVE } from '../base/conference'; +import { + CONFERENCE_JOINED, + getCurrentConference +} from '../base/conference'; import { JitsiConferenceEvents } from '../base/lib-jitsi-meet'; -import { getParticipantById } from '../base/participants'; -import { MiddlewareRegistry } from '../base/redux'; +import { + getParticipantById, + getParticipantDisplayName +} from '../base/participants'; +import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux'; import { playSound, registerSound, unregisterSound } from '../base/sounds'; import { isButtonEnabled, showToolbox } from '../toolbox'; import { SEND_MESSAGE } from './actionTypes'; -import { addMessage, clearMessages } from './actions'; +import { addMessage, clearMessages, toggleChat } from './actions'; import { INCOMING_MSG_SOUND_ID } from './constants'; import { INCOMING_MSG_SOUND_FILE } from './sounds'; @@ -27,49 +33,60 @@ declare var interfaceConfig : Object; MiddlewareRegistry.register(store => next => action => { switch (action.type) { case APP_WILL_MOUNT: - // Register the chat message sound on Web only because there's no chat - // on mobile. - typeof APP === 'undefined' - || store.dispatch( + store.dispatch( registerSound(INCOMING_MSG_SOUND_ID, INCOMING_MSG_SOUND_FILE)); break; case APP_WILL_UNMOUNT: - // Unregister the chat message sound on Web because it's registered - // there only. - typeof APP === 'undefined' - || store.dispatch(unregisterSound(INCOMING_MSG_SOUND_ID)); + store.dispatch(unregisterSound(INCOMING_MSG_SOUND_ID)); break; case CONFERENCE_JOINED: - typeof APP === 'undefined' - || _addChatMsgListener(action.conference, store); + _addChatMsgListener(action.conference, store); break; - case CONFERENCE_WILL_LEAVE: - store.dispatch(clearMessages()); - break; + case SEND_MESSAGE: { + const { conference } = store.getState()['features/base/conference']; - case SEND_MESSAGE: - if (typeof APP !== 'undefined') { - const { conference } = store.getState()['features/base/conference']; - - if (conference) { - const escapedMessage = UIUtil.escapeHtml(action.message); + if (conference) { + const escapedMessage = UIUtil.escapeHtml(action.message); + if (typeof APP !== 'undefined') { APP.API.notifySendingChatMessage(escapedMessage); - conference.sendTextMessage(escapedMessage); } + conference.sendTextMessage(escapedMessage); } break; } + } return next(action); }); /** - * Registers listener for {@link JitsiConferenceEvents.MESSAGE_RECEIVED} which - * will play a sound on the event, given that the chat is not currently visible. + * Set up state change listener to perform maintenance tasks when the conference + * is left or failed, e.g. clear messages or close the chat modal if it's left + * open. + */ +StateListenerRegistry.register( + state => getCurrentConference(state), + (conference, { dispatch, getState }, previousConference) => { + if (conference !== previousConference) { + // conference changed, left or failed... + + if (getState()['features/chat'].isOpen) { + // Closes the chat if it's left open. + dispatch(toggleChat()); + } + + // Clear chat messages. + dispatch(clearMessages()); + } + }); + +/** + * Registers listener for {@link JitsiConferenceEvents.MESSAGE_RECEIVED} that + * will perform various chat related activities. * * @param {JitsiConference} conference - The conference instance on which the * new event listener will be registered. @@ -79,35 +96,28 @@ MiddlewareRegistry.register(store => next => action => { */ function _addChatMsgListener(conference, { dispatch, getState }) { if ((typeof interfaceConfig === 'object' && interfaceConfig.filmStripOnly) - || !isButtonEnabled('chat')) { + || (typeof APP !== 'undefined' && !isButtonEnabled('chat'))) { + // We don't register anything on web if we're in filmStripOnly mode, or + // the chat button is not enabled in interfaceConfig. return; } conference.on( JitsiConferenceEvents.MESSAGE_RECEIVED, (id, message, timestamp) => { + // Logic for all platforms: const state = getState(); const { isOpen: isChatOpen } = state['features/chat']; if (!isChatOpen) { dispatch(playSound(INCOMING_MSG_SOUND_ID)); - dispatch(showToolbox(4000)); } // Provide a default for for the case when a message is being // backfilled for a participant that has left the conference. const participant = getParticipantById(state, id) || {}; - const displayName = participant.name - || `${interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME} (${id})`; + const displayName = getParticipantDisplayName(getState, id); const hasRead = participant.local || isChatOpen; - - APP.API.notifyReceivedChatMessage({ - body: message, - id, - nick: displayName, - ts: timestamp - }); - const timestampToDate = timestamp ? new Date(timestamp) : new Date(); const millisecondsTimestamp = timestampToDate.getTime(); @@ -120,6 +130,19 @@ function _addChatMsgListener(conference, { dispatch, getState }) { message, timestamp: millisecondsTimestamp })); + + if (typeof APP !== 'undefined') { + // Logic for web only: + + APP.API.notifyReceivedChatMessage({ + body: message, + id, + nick: displayName, + ts: timestamp + }); + + dispatch(showToolbox(4000)); + } } ); } diff --git a/react/features/chat/sounds.web.js b/react/features/chat/sounds.js similarity index 100% rename from react/features/chat/sounds.web.js rename to react/features/chat/sounds.js diff --git a/react/features/conference/components/Conference.native.js b/react/features/conference/components/Conference.native.js index 8fd750c27..652385e63 100644 --- a/react/features/conference/components/Conference.native.js +++ b/react/features/conference/components/Conference.native.js @@ -15,6 +15,7 @@ import { import { TestConnectionInfo } from '../../base/testing'; import { createDesiredLocalTracks } from '../../base/tracks'; import { ConferenceNotification } from '../../calendar-sync'; +import { Chat } from '../../chat'; import { Filmstrip, isFilmstripVisible, @@ -250,6 +251,8 @@ class Conference extends Component { hidden = { true } translucent = { true } /> + + {/* * The LargeVideo is the lowermost stacking layer. */ diff --git a/react/features/display-name/components/DisplayNamePrompt.native.js b/react/features/display-name/components/DisplayNamePrompt.native.js index e69de29bb..2f514529a 100644 --- a/react/features/display-name/components/DisplayNamePrompt.native.js +++ b/react/features/display-name/components/DisplayNamePrompt.native.js @@ -0,0 +1,30 @@ +// @flow + +import React from 'react'; +import { connect } from 'react-redux'; + +import { InputDialog } from '../../base/dialog'; + +import AbstractDisplayNamePrompt from './AbstractDisplayNamePrompt'; + +/** + * Implements a component to render a display name prompt. + */ +class DisplayNamePrompt extends AbstractDisplayNamePrompt<*> { + /** + * Implements React's {@link Component#render()}. + * + * @inheritdoc + */ + render() { + return ( + + ); + } + + _onSetDisplayName: string => boolean; +} + +export default connect()(DisplayNamePrompt); diff --git a/react/features/toolbox/components/native/OverflowMenu.js b/react/features/toolbox/components/native/OverflowMenu.js index 6ee82c614..427e1de27 100644 --- a/react/features/toolbox/components/native/OverflowMenu.js +++ b/react/features/toolbox/components/native/OverflowMenu.js @@ -9,6 +9,7 @@ import { bottomSheetItemStylesCombined, hideDialog } from '../../../base/dialog'; +import { InviteButton } from '../../../invite'; import { AudioRouteButton } from '../../../mobile/audio-mode'; import { PictureInPictureButton } from '../../../mobile/picture-in-picture'; import { LiveStreamButton, RecordButton } from '../../../recording'; @@ -86,6 +87,7 @@ class OverflowMenu extends Component { } + ); diff --git a/react/features/toolbox/components/native/Toolbox.js b/react/features/toolbox/components/native/Toolbox.js index 55478a5f3..8fc0560ed 100644 --- a/react/features/toolbox/components/native/Toolbox.js +++ b/react/features/toolbox/components/native/Toolbox.js @@ -5,12 +5,13 @@ import { View } from 'react-native'; import { connect } from 'react-redux'; import { Container } from '../../../base/react'; -import { InviteButton } from '../../../invite'; +import { ChatButton } from '../../../chat'; import AudioMuteButton from '../AudioMuteButton'; import HangupButton from '../HangupButton'; import OverflowMenuButton from './OverflowMenuButton'; import styles, { + chatButtonOverride, hangupButtonStyles, toolbarButtonStyles, toolbarToggledButtonStyles @@ -141,6 +142,35 @@ class Toolbox extends Component { return 2 * Math.round(buttonSize / 2); } + /** + * Constructs the toggled style of the chat button. This cannot be done by + * simple style inheritance due to the size calculation done in this + * component. + * + * @param {Object} baseStyle - The base style that was originally + * calculated. + * @returns {Object | Array} + */ + _getChatButtonToggledStyle(baseStyle) { + if (Array.isArray(baseStyle.style)) { + return { + ...baseStyle, + style: [ + ...baseStyle.style, + chatButtonOverride.toggled + ] + }; + } + + return { + ...baseStyle, + style: [ + baseStyle.style, + chatButtonOverride.toggled + ] + }; + } + _onLayout: (Object) => void; /** @@ -200,7 +230,11 @@ class Toolbox extends Component { - + diff --git a/react/features/toolbox/components/native/styles.js b/react/features/toolbox/components/native/styles.js index 60861e303..7483ced23 100644 --- a/react/features/toolbox/components/native/styles.js +++ b/react/features/toolbox/components/native/styles.js @@ -130,3 +130,13 @@ export const toolbarToggledButtonStyles = { iconStyle: styles.whiteToolbarButtonIcon, style: styles.whiteToolbarButton }; + +/** + * Overrides to the standard styles that we apply to the chat button, as that + * behaves slightly differently to other buttons. + */ +export const chatButtonOverride = createStyleSheet({ + toggled: { + backgroundColor: ColorPalette.blue + } +});