diff --git a/.github/scripts/run-maestro.sh b/.github/scripts/run-maestro.sh new file mode 100755 index 00000000000..fdbb27cbf39 --- /dev/null +++ b/.github/scripts/run-maestro.sh @@ -0,0 +1,200 @@ +#!/usr/bin/env bash +set -euo pipefail + +PLATFORM="${1:-${PLATFORM:-android}}" +SHARD="${2:-${SHARD:-default}}" +FLOWS_DIR=".maestro/tests" +MAIN_REPORT="maestro-report.xml" +MAX_RERUN_ROUNDS="${MAX_RERUN_ROUNDS:-3}" +RERUN_REPORT_PREFIX="maestro-rerun" +export MAESTRO_DRIVER_STARTUP_TIMEOUT="${MAESTRO_DRIVER_STARTUP_TIMEOUT:-120000}" + +if ! command -v maestro >/dev/null 2>&1; then + echo "ERROR: maestro not found in PATH" + exit 2 +fi + +if [ "$PLATFORM" = "android" ]; then + if ! command -v adb >/dev/null 2>&1; then + echo "ERROR: adb not found" + exit 2 + fi +else + if ! command -v xcrun >/dev/null 2>&1; then + echo "ERROR: xcrun not found" + exit 2 + fi +fi + +MAPFILE="$(mktemp)" +trap 'rm -f "$MAPFILE"' EXIT + +while IFS= read -r -d '' file; do + if grep -qE "^[[:space:]]*-[[:space:]]*['\"]?test-${SHARD}['\"]?([[:space:]]*$|[[:space:]]*,|[[:space:]]*\\])" "$file"; then + raw_name="$(grep -m1 -E '^[[:space:]]*name:' "$file" || true)" + if [ -n "$raw_name" ]; then + name_val="$(echo "$raw_name" | sed -E 's/^[[:space:]]*name:[[:space:]]*//; s/^["'\'']//; s/["'\'']$//; s/[[:space:]]*$//')" + name_val="$(echo "$name_val" | sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//')" + if [ -n "$name_val" ]; then + printf '%s\t%s\n' "$name_val" "$file" >> "$MAPFILE" + fi + fi + fi +done < <(find "$FLOWS_DIR" -type f \( -iname '*.yml' -o -iname '*.yaml' \) -print0) + +if [ ! -s "$MAPFILE" ]; then + echo "No flows for test-${SHARD}" + exit 1 +fi + +echo "Mapped flows for tag test-${SHARD}:" +awk -F'\t' '{ printf " %s -> %s\n", $1, $2 }' "$MAPFILE" + +FLOW_FILES=() +SEEN_PATHS="" + +while IFS=$'\t' read -r name path; do + if ! printf '%s\n' "$SEEN_PATHS" | grep -Fqx "$path"; then + FLOW_FILES+=("$path") + SEEN_PATHS="${SEEN_PATHS}"$'\n'"$path" + fi +done < "$MAPFILE" + +echo "Main run will execute:" +printf ' %s\n' "${FLOW_FILES[@]}" + +if [ "$PLATFORM" = "android" ]; then + adb shell settings put system show_touches 1 || true + adb install -r "app-experimental-release.apk" || true + adb shell monkey -p "chat.rocket.reactnative" -c android.intent.category.LAUNCHER 1 || true + sleep 6 + adb shell am force-stop "chat.rocket.reactnative" || true + + maestro test "${FLOW_FILES[@]}" \ + --exclude-tags=util \ + --include-tags="test-${SHARD}" \ + --format junit \ + --output "$MAIN_REPORT" || true + +else + maestro test "${FLOW_FILES[@]}" \ + --exclude-tags=util \ + --include-tags="test-${SHARD}" \ + --exclude-tags=android-only \ + --format junit \ + --output "$MAIN_REPORT" || true +fi + +if [ ! -f "$MAIN_REPORT" ]; then + echo "Main report not found" + exit 1 +fi + +FAILED_NAMES="$(python3 - < run-maestro.sh - #!/bin/bash - SHARD=${{ inputs.shard }} - echo "Running shard: $SHARD" - - adb shell settings put system show_touches 1 - adb install app-experimental-release.apk - adb shell monkey -p chat.rocket.reactnative -c android.intent.category.LAUNCHER 1 - sleep 10 - adb shell am force-stop chat.rocket.reactnative - export MAESTRO_DRIVER_STARTUP_TIMEOUT=120000 - - MAX_RETRIES=3 - ATTEMPT=1 - FINAL_EXIT_CODE=1 - - while [ $ATTEMPT -le $MAX_RETRIES ]; do - echo "Attempt $ATTEMPT of $MAX_RETRIES" - - echo "Starting screen recording..." - adb shell screenrecord /sdcard/test_run.mp4 > /dev/null 2>&1 & - RECORD_PID=$! - - maestro test .maestro --exclude-tags=util --include-tags=test-$SHARD --format junit --output maestro-report.xml - TEST_EXIT_CODE=$? - - echo "Stopping screen recording..." - kill -INT $RECORD_PID || true - sleep 2 - - echo "Pulling video from device..." - adb pull /sdcard/test_run.mp4 test_run_${SHARD}_attempt_${ATTEMPT}.mp4 || true - adb shell rm /sdcard/test_run.mp4 || true - - if [ $TEST_EXIT_CODE -eq 0 ]; then - echo "Maestro passed on attempt $ATTEMPT" - FINAL_EXIT_CODE=0 - break - else - echo "Maestro failed on attempt $ATTEMPT" - fi - - ATTEMPT=$((ATTEMPT+1)) - done - - exit $FINAL_EXIT_CODE - EOF - - chmod +x run-maestro.sh - env: - SHARD: ${{ inputs.shard }} + - name: Make Maestro script executable + run: chmod +x .github/scripts/run-maestro.sh - name: Start Android Emulator and Run Maestro Tests uses: reactivecircus/android-emulator-runner@v2 - timeout-minutes: 60 + timeout-minutes: 120 with: api-level: 34 disk-size: 4096M @@ -111,20 +60,12 @@ jobs: force-avd-creation: false emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none disable-animations: true - script: ./run-maestro.sh + script: ./.github/scripts/run-maestro.sh android ${{ inputs.shard }} - - name: Upload Test Report + - name: Android Maestro Logs if: always() uses: actions/upload-artifact@v4 with: - name: Android Test Report - Shard ${{ inputs.shard }} - path: maestro-report.xml + name: Android Maestro Logs - Shard ${{ inputs.shard }} + path: ~/.maestro/tests/**/*.png retention-days: 7 - - - name: Upload Screen Recording - if: always() - uses: actions/upload-artifact@v4 - with: - name: maestro-video-${{ inputs.shard }} - path: test_run_${{ inputs.shard }}_attempt_*.mp4 - retention-days: 7 \ No newline at end of file diff --git a/.github/workflows/maestro-ios.yml b/.github/workflows/maestro-ios.yml index 51eb55f5c1d..4fc43f2ff0b 100644 --- a/.github/workflows/maestro-ios.yml +++ b/.github/workflows/maestro-ios.yml @@ -84,40 +84,21 @@ jobs: echo "UDID=$UDID" echo "UDID=$UDID" >> $GITHUB_ENV + - name: Make Maestro script executable + run: chmod +x .github/scripts/run-maestro.sh + - name: Install App run: | xcrun simctl install $UDID "ios-simulator-app" - name: Run Tests - id: maestro-tests - uses: nick-fields/retry@v3 - with: - max_attempts: 3 - timeout_minutes: 60 - command: | - SHARD=${{ inputs.shard }} - echo "Running shard: $SHARD" - export MAESTRO_DRIVER_STARTUP_TIMEOUT=120000 - - maestro test .maestro \ - --exclude-tags=util \ - --include-tags=test-$SHARD \ - --exclude-tags=android-only \ - --format junit \ - --output maestro-report.xml - - - name: Maestro Test Report - if: always() - uses: actions/upload-artifact@v4 - with: - name: Test Report - Shard ${{ inputs.shard }} - path: maestro-report.xml - retention-days: 28 + timeout-minutes: 120 + run: ./.github/scripts/run-maestro.sh ios ${{ inputs.shard }} - name: iOS Maestro Logs if: always() uses: actions/upload-artifact@v4 with: name: iOS Maestro Logs - Shard ${{ inputs.shard }} - path: ~/.maestro/tests/ - retention-days: 28 \ No newline at end of file + path: ~/.maestro/tests/**/*.png + retention-days: 7 diff --git a/.maestro/README.md b/.maestro/README.md index 45f48fa016f..e89d511e2ee 100644 --- a/.maestro/README.md +++ b/.maestro/README.md @@ -39,7 +39,7 @@ Contains the scripts that are going to be executed by the flows before running t #### `data.js` - Contains seeds to common test data, like server url, public channels, etc -- Currently we point to https://mobile.rocket.chat as main server +- Currently we point to https://mobile.qa.rocket.chat as main server - Pointing to a local server is not recommended yet, as you would need to create a few public channels and change some permissions - Ideally we should point to a docker or even a mocked server, but that's tbd - Try not to add new data there. Use random values instead. diff --git a/.maestro/scripts/data.js b/.maestro/scripts/data.js index 5e7d6c97edb..04fd65795bd 100644 --- a/.maestro/scripts/data.js +++ b/.maestro/scripts/data.js @@ -1,5 +1,5 @@ const data = { - server: 'https://mobile.rocket.chat', + server: 'https://mobile.qa.rocket.chat', alternateServer: 'https://stable.rocket.chat', ...output.account, accounts: [], @@ -15,4 +15,4 @@ const data = { e2eePassword: 'Password1@abcdefghijklmnopqrst' }; -output.data = data; \ No newline at end of file +output.data = data; diff --git a/.maestro/scripts/random.js b/.maestro/scripts/random.js index f1ff4d4d824..8e0e2bef22d 100644 --- a/.maestro/scripts/random.js +++ b/.maestro/scripts/random.js @@ -7,12 +7,37 @@ function random(length = 10) { return text; } +function generatePassword(length = 10) { + const lower = 'abcdefghijklmnopqrstuvwxyz' + const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + const nums = '0123456789' + const all = lower + upper + nums + + let password = '' + password += lower[Math.floor(Math.random() * lower.length)] + password += upper[Math.floor(Math.random() * upper.length)] + password += nums[Math.floor(Math.random() * nums.length)] + + while (password.length < length) { + const char = all[Math.floor(Math.random() * all.length)] + const last = password[password.length - 1] + const secondLast = password[password.length - 2] + const thirdLast = password[password.length - 3] + + if (char === last && char === secondLast && char === thirdLast) continue + password += char + } + + return password +} + + const randomUser = () => { const randomVal = random(); return { username: 'user' + randomVal, name: 'user' + randomVal, - password: 'Password1@' + randomVal, + password: generatePassword(), email: 'mobile+' + randomVal + '@rocket.chat' }; } diff --git a/.maestro/tests/assorted/accessibility-and-appearance.yaml b/.maestro/tests/assorted/accessibility-and-appearance.yaml index 7c91cdc792b..c3df95a495f 100644 --- a/.maestro/tests/assorted/accessibility-and-appearance.yaml +++ b/.maestro/tests/assorted/accessibility-and-appearance.yaml @@ -87,11 +87,11 @@ tags: - extendedWaitUntil: visible: - text: '.*@all - all mention.*' + text: '@all - all mention' timeout: 60000 - extendedWaitUntil: visible: - text: '.*@rocket.cat - user mention.*' + text: '@rocket.cat - user mention' timeout: 60000 # should disable mentions with @ symbol @@ -126,19 +126,11 @@ tags: - extendedWaitUntil: visible: - text: '.*all - all mention.*' - timeout: 60000 -- extendedWaitUntil: - notVisible: - text: '.*@all - all mention.*' + text: 'all - all mention' timeout: 60000 - extendedWaitUntil: visible: - text: '.*rocket.cat - user mention.*' - timeout: 60000 -- extendedWaitUntil: - notVisible: - text: '.*@rocket.cat - user mention.*' + text: 'rocket.cat - user mention' timeout: 60000 # should enable rooms with # symbol @@ -173,7 +165,7 @@ tags: - extendedWaitUntil: visible: - text: '.*#general - channel mention.*' + text: '#general - channel mention' timeout: 60000 # should disable mentions with # symbol @@ -205,12 +197,7 @@ tags: file: '../../helpers/search-and-navigate-room.yaml' env: ROOM: 'maestro-accessibility-test' - - extendedWaitUntil: visible: - text: '.*general - channel mention.*' - timeout: 60000 -- extendedWaitUntil: - notVisible: - text: '.*#general - channel mention.*' + text: 'general - channel mention' timeout: 60000 diff --git a/.maestro/tests/assorted/changeserver.yaml b/.maestro/tests/assorted/changeserver.yaml index 287bbeacdc1..c87fcfc4dd0 100644 --- a/.maestro/tests/assorted/changeserver.yaml +++ b/.maestro/tests/assorted/changeserver.yaml @@ -180,8 +180,20 @@ tags: visible: text: '.*Delete.*' timeout: 60000 -- tapOn: - text: 'Delete' +- runFlow: + when: + platform: iOS + commands: + - tapOn: + point: 65%,55% + retryTapIfNoChange: true +- runFlow: + when: + platform: Android + commands: + - tapOn: + text: 'Delete' + retryTapIfNoChange: true # verify alternate server is deleted - waitForAnimationToEnd: diff --git a/.maestro/tests/assorted/delete-server.yaml b/.maestro/tests/assorted/delete-server.yaml index 1802d8b2428..3e930bc7746 100644 --- a/.maestro/tests/assorted/delete-server.yaml +++ b/.maestro/tests/assorted/delete-server.yaml @@ -93,8 +93,20 @@ tags: visible: text: '.*Delete.*' timeout: 60000 -- tapOn: - text: 'Delete' +- runFlow: + when: + platform: iOS + commands: + - tapOn: + point: 65%,55% + retryTapIfNoChange: true +- runFlow: + when: + platform: Android + commands: + - tapOn: + text: 'Delete' + retryTapIfNoChange: true - waitForAnimationToEnd: timeout: 300 - extendedWaitUntil: diff --git a/.maestro/tests/assorted/join-from-directory.yaml b/.maestro/tests/assorted/join-from-directory.yaml index df84972bf49..5e8de558c70 100644 --- a/.maestro/tests/assorted/join-from-directory.yaml +++ b/.maestro/tests/assorted/join-from-directory.yaml @@ -26,6 +26,8 @@ tags: visible: id: 'rooms-list-view-directory' timeout: 60000 +- waitForAnimationToEnd: + timeout: 10000 - tapOn: id: 'rooms-list-view-directory' - extendedWaitUntil: @@ -41,7 +43,6 @@ tags: - tapOn: id: 'directory-view-search' - inputText: join-from-directory -- pressKey: Enter - extendedWaitUntil: visible: id: 'directory-view-item-join-from-directory' @@ -96,14 +97,18 @@ tags: id: 'directory-view-filter' - extendedWaitUntil: visible: - text: 'Users' + text: 'Users unselected' timeout: 60000 - tapOn: - text: 'Users' + text: 'Users unselected' - tapOn: id: 'directory-view-search' - inputText: ${output.otherUser.username} -- pressKey: Enter +- runFlow: + when: + platform: iOS + commands: + - pressKey: enter - extendedWaitUntil: visible: id: 'directory-view-item-${output.otherUser.username}' @@ -140,14 +145,13 @@ tags: id: 'directory-view-filter' - extendedWaitUntil: visible: - text: 'Teams' + text: 'Teams unselected' timeout: 60000 - tapOn: - text: 'Teams' + text: 'Teams unselected' - tapOn: id: 'directory-view-search' - inputText: ${output.team} -- pressKey: Enter - extendedWaitUntil: visible: id: 'directory-view-item-${output.team}' diff --git a/.maestro/tests/assorted/setting.yaml b/.maestro/tests/assorted/setting.yaml index e159d44a579..e5991253235 100644 --- a/.maestro/tests/assorted/setting.yaml +++ b/.maestro/tests/assorted/setting.yaml @@ -104,8 +104,12 @@ tags: visible: id: 'settings-view' timeout: 60000 -- assertVisible: - id: 'settings-view-clear-cache' +- waitForAnimationToEnd: + timeout: 60000 +- extendedWaitUntil: + visible: + id: 'settings-view-clear-cache' + timeout: 60000 - tapOn: id: 'settings-view-clear-cache' retryTapIfNoChange: true diff --git a/.maestro/tests/assorted/user-preferences.yaml b/.maestro/tests/assorted/user-preferences.yaml index 8e791fbcf89..eebe67757c8 100644 --- a/.maestro/tests/assorted/user-preferences.yaml +++ b/.maestro/tests/assorted/user-preferences.yaml @@ -83,6 +83,7 @@ tags: visible: text: ':(' timeout: 60000 + - extendedWaitUntil: notVisible: text: '😞' @@ -140,7 +141,3 @@ tags: visible: text: '😞' timeout: 60000 - - extendedWaitUntil: - notVisible: - text: ':(' - timeout: 60000 diff --git a/.maestro/tests/e2ee/utils/navigate-to-e2ee-security.yaml b/.maestro/tests/e2ee/utils/navigate-to-e2ee-security.yaml index ad02e3fad17..33a13e9b05a 100644 --- a/.maestro/tests/e2ee/utils/navigate-to-e2ee-security.yaml +++ b/.maestro/tests/e2ee/utils/navigate-to-e2ee-security.yaml @@ -50,5 +50,3 @@ tags: visible: id: e2e-encryption-security-view timeout: 60000 -- assertVisible: - id: e2e-encryption-security-view-reset-password-button diff --git a/.maestro/tests/e2ee/utils/reset-e2ee-key.yaml b/.maestro/tests/e2ee/utils/reset-e2ee-key.yaml index ac38e1c9808..8c9cd91df71 100644 --- a/.maestro/tests/e2ee/utils/reset-e2ee-key.yaml +++ b/.maestro/tests/e2ee/utils/reset-e2ee-key.yaml @@ -11,10 +11,10 @@ tags: timeout: 30000 - extendedWaitUntil: visible: - id: e2e-encryption-security-view-reset-password-button + id: e2e-encryption-security-view-reset-key timeout: 60000 - tapOn: - id: e2e-encryption-security-view-reset-password-button + id: e2e-encryption-security-view-reset-key - extendedWaitUntil: visible: text: .*Are you sure.* diff --git a/.maestro/tests/onboarding/server-history.yaml b/.maestro/tests/onboarding/server-history.yaml index d05d5567904..28dc94b701b 100644 --- a/.maestro/tests/onboarding/server-history.yaml +++ b/.maestro/tests/onboarding/server-history.yaml @@ -23,11 +23,11 @@ tags: - assertVisible: id: 'action-sheet' - assertVisible: - id: 'servers-history-https://mobile.rocket.chat' + id: 'servers-history-https://mobile.qa.rocket.chat' # should tap on a server history and navigate to login - tapOn: - id: 'servers-history-https://mobile.rocket.chat' + id: 'servers-history-https://mobile.qa.rocket.chat' - assertVisible: id: 'login-view-submit' - assertVisible: ${output.user.username} @@ -43,17 +43,17 @@ tags: - tapOn: id: 'servers-history-button' - assertVisible: - id: 'servers-history-https://mobile.rocket.chat' + id: 'servers-history-https://mobile.qa.rocket.chat' # swipe left to reveal delete button and delete the server history - swipe: direction: LEFT from: - id: 'servers-history-https://mobile.rocket.chat' + id: 'servers-history-https://mobile.qa.rocket.chat' - waitForAnimationToEnd: timeout: 500 - tapOn: - id: 'servers-history-https://mobile.rocket.chat-delete' + id: 'servers-history-https://mobile.qa.rocket.chat-delete' - extendedWaitUntil: notVisible: id: 'servers-history-button' diff --git a/.maestro/tests/room/discussion.yaml b/.maestro/tests/room/discussion.yaml index dcfe68b6789..3221343b4bb 100644 --- a/.maestro/tests/room/discussion.yaml +++ b/.maestro/tests/room/discussion.yaml @@ -41,66 +41,48 @@ tags: id: 'new-message-view-create-discussion' - extendedWaitUntil: visible: - id: 'create-discussion-view' - timeout: 60000 -- tapOn: - id: 'create-discussion-select-channel' -- extendedWaitUntil: - visible: - id: 'action-sheet' + id: 'select-users-view' timeout: 60000 +# Select users in SelectedUsersView - extendedWaitUntil: visible: - id: 'multi-select-item-${output.room.name}' + id: 'select-users-view-search' timeout: 60000 - tapOn: - id: 'multi-select-item-${output.room.name}' -- tapOn: - id: 'multi-select-discussion-name' -- inputText: ${output.discussionFromNewMessage} -- tapOn: - id: 'create-discussion-select-users' + id: 'select-users-view-search' +- inputText: ${output.selectUser} - extendedWaitUntil: visible: - id: 'action-sheet' + id: 'select-users-view-item-${output.selectUser}' timeout: 60000 - tapOn: - id: 'multi-select-search' -- inputText: ${output.selectUser} + id: 'select-users-view-item-${output.selectUser}' - extendedWaitUntil: visible: - id: 'multi-select-item-${output.selectUser}' + id: 'selected-user-${output.selectUser}' timeout: 60000 - tapOn: - id: 'multi-select-item-${output.selectUser}' -- pressKey: Enter + id: 'selected-users-view-submit' - extendedWaitUntil: visible: - id: 'multi-select-chip-${output.selectUser}' + id: 'create-discussion-view' timeout: 60000 - +# Select channel and enter discussion name - tapOn: - id: 'create-discussion-select-users' + id: 'create-discussion-select-channel' - extendedWaitUntil: visible: id: 'action-sheet' timeout: 60000 -- tapOn: - id: 'multi-select-search' -- eraseText -- inputText: 'user' -- pressKey: Enter - - extendedWaitUntil: visible: - id: 'multi-select-chip-${output.selectUser}' + id: 'multi-select-item-${output.room.name}' timeout: 60000 - tapOn: - id: 'multi-select-chip-${output.selectUser}' -- extendedWaitUntil: - notVisible: - id: 'multi-select-chip-${output.selectUser}' - timeout: 60000 + id: 'multi-select-item-${output.room.name}' +- tapOn: + id: 'multi-select-discussion-name' +- inputText: ${output.discussionFromNewMessage} - tapOn: id: 'create-discussion-submit' - extendedWaitUntil: diff --git a/.maestro/tests/room/jump-to-message.yaml b/.maestro/tests/room/jump-to-message.yaml index bfe651f52ca..2d330c4217b 100644 --- a/.maestro/tests/room/jump-to-message.yaml +++ b/.maestro/tests/room/jump-to-message.yaml @@ -108,8 +108,7 @@ tags: id: 'message-content-30' timeout: 60000 - tapOn: - text: '30' - index: 1 + id: 'message-content-30' - extendedWaitUntil: visible: id: 'message-content-29' diff --git a/.maestro/tests/room/mark-as-unread.yaml b/.maestro/tests/room/mark-as-unread.yaml index 7507549c2fc..dbceb3d4c66 100644 --- a/.maestro/tests/room/mark-as-unread.yaml +++ b/.maestro/tests/room/mark-as-unread.yaml @@ -53,7 +53,7 @@ tags: timeout: 60000 - extendedWaitUntil: visible: - text: '.*1.*' + id: 'unread-badge-1' childOf: id: 'rooms-list-view-item-${output.otherUser.username}' timeout: 60000 diff --git a/.maestro/tests/room/room.yaml b/.maestro/tests/room/room.yaml index c45bf5822a3..fa6c6f983b8 100644 --- a/.maestro/tests/room/room.yaml +++ b/.maestro/tests/room/room.yaml @@ -256,7 +256,7 @@ tags: - swipe: from: id: action-sheet-handle - direction: down + direction: DOWN - extendedWaitUntil: notVisible: id: 'reactionsList' @@ -269,6 +269,7 @@ tags: timeout: 60000 - tapOn: id: 'username-header-${output.user.username}' + retryTapIfNoChange: true - extendedWaitUntil: visible: id: room-info-view-username @@ -289,10 +290,11 @@ tags: - extendedWaitUntil: visible: - text: .*${output.otherUser.username}.* + id: 'username-header-${output.otherUser.username}' timeout: 60000 - tapOn: - text: .*${output.otherUser.username}.* + id: 'username-header-${output.otherUser.username}' + retryTapIfNoChange: true - extendedWaitUntil: visible: id: room-info-view-username diff --git a/.maestro/tests/room/search.yaml b/.maestro/tests/room/search.yaml new file mode 100644 index 00000000000..07b94cc03d3 --- /dev/null +++ b/.maestro/tests/room/search.yaml @@ -0,0 +1,41 @@ +appId: chat.rocket.reactnative +name: Search +onFlowStart: + - runFlow: '../../helpers/setup.yaml' +tags: + - test-13 + - android-only + +--- +- evalScript: ${output.user = output.utils.createUser()} + +- runFlow: + file: '../../helpers/login-with-deeplink.yaml' + env: + USERNAME: ${output.user.username} + PASSWORD: ${output.user.password} + +- extendedWaitUntil: + visible: + id: 'rooms-list-view-search' + timeout: 60000 +- tapOn: + id: rooms-list-view-search +- extendedWaitUntil: + visible: + id: 'rooms-list-view' + timeout: 60000 +- extendedWaitUntil: + visible: + id: 'rooms-list-view-search-input' + timeout: 60000 +- pressKey: Back +- pressKey: Back +- extendedWaitUntil: + visible: + id: 'rooms-list-view' + timeout: 60000 +- extendedWaitUntil: + notVisible: + id: 'rooms-list-view-search-input' + timeout: 60000 diff --git a/.maestro/tests/room/unread-badge.yaml b/.maestro/tests/room/unread-badge.yaml new file mode 100644 index 00000000000..e60fcfc3fda --- /dev/null +++ b/.maestro/tests/room/unread-badge.yaml @@ -0,0 +1,131 @@ +appId: chat.rocket.reactnative +name: Unread badge +onFlowStart: + - runFlow: '../../helpers/setup.yaml' +tags: + - test-13 + - android-only + +--- +- evalScript: ${output.user = output.utils.createUser()} +- evalScript: ${output.otherUser = output.utils.createUser()} + +- runFlow: + file: '../../helpers/login-with-deeplink.yaml' + env: + USERNAME: ${output.user.username} + PASSWORD: ${output.user.password} + +# Should have normal unread indicator on normal message +- evalScript: ${output.message = output.utils.sendMessage(output.otherUser.username, output.otherUser.password, '@' + output.user.username, 'message-mark-as-unread')} +- extendedWaitUntil: + visible: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- waitForAnimationToEnd: + timeout: 10000 +- extendedWaitUntil: + visible: + id: 'unread-badge-1' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- tapOn: + id: 'rooms-list-view-item-${output.otherUser.username}' +- tapOn: + id: header-back + retryTapIfNoChange: true +- waitForAnimationToEnd: + timeout: 5000 +- extendedWaitUntil: + notVisible: + id: 'unread-badge-1' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 + +# Should have mention unread indicator on mentioned message +- evalScript: ${output.message = output.utils.sendMessage(output.otherUser.username, output.otherUser.password, '@' + output.user.username, '@' + output.user.username)} +- extendedWaitUntil: + visible: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- waitForAnimationToEnd: + timeout: 10000 +- extendedWaitUntil: + visible: + id: 'mention-badge-1' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- tapOn: + id: 'rooms-list-view-item-${output.otherUser.username}' +- tapOn: + id: header-back + retryTapIfNoChange: true +- waitForAnimationToEnd: + timeout: 5000 +- extendedWaitUntil: + notVisible: + id: 'mention-badge-1' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 + +# send normal message first and mention in next message and it should show mentioned unread indicator +- evalScript: ${output.message = output.utils.sendMessage(output.otherUser.username, output.otherUser.password, '@' + output.user.username, 'message-mark-as-unread')} +- evalScript: ${output.message = output.utils.sendMessage(output.otherUser.username, output.otherUser.password, '@' + output.user.username, '@' + output.user.username)} +- extendedWaitUntil: + visible: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- waitForAnimationToEnd: + timeout: 10000 +- extendedWaitUntil: + visible: + id: 'mention-badge-2' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- tapOn: + id: 'rooms-list-view-item-${output.otherUser.username}' +- tapOn: + id: header-back + retryTapIfNoChange: true +- waitForAnimationToEnd: + timeout: 5000 +- extendedWaitUntil: + notVisible: + id: 'mention-badge-2' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 + +# send mention message first and normal message in next message and it should show mentioned unread indicator +- evalScript: ${output.message = output.utils.sendMessage(output.otherUser.username, output.otherUser.password, '@' + output.user.username, '@' + output.user.username)} +- evalScript: ${output.message = output.utils.sendMessage(output.otherUser.username, output.otherUser.password, '@' + output.user.username, 'message-mark-as-unread')} +- extendedWaitUntil: + visible: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- waitForAnimationToEnd: + timeout: 10000 +- extendedWaitUntil: + visible: + id: 'mention-badge-2' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 +- tapOn: + id: 'rooms-list-view-item-${output.otherUser.username}' +- tapOn: + id: header-back + retryTapIfNoChange: true +- waitForAnimationToEnd: + timeout: 5000 +- extendedWaitUntil: + notVisible: + id: 'mention-badge-2' + childOf: + id: 'rooms-list-view-item-${output.otherUser.username}' + timeout: 60000 diff --git a/.maestro/tests/teams/utils/close-action-sheet.yaml b/.maestro/tests/teams/utils/close-action-sheet.yaml index 2a554404973..bd6d32cf6a8 100644 --- a/.maestro/tests/teams/utils/close-action-sheet.yaml +++ b/.maestro/tests/teams/utils/close-action-sheet.yaml @@ -6,7 +6,7 @@ tags: - swipe: from: id: action-sheet-handle - direction: down + direction: DOWN - extendedWaitUntil: notVisible: id: action-sheet-handle diff --git a/Gemfile b/Gemfile index 19644df3127..068416d70de 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' ruby '2.7.7' # Exclude problematic versions of cocoapods and activesupport that causes build failures. -gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' +gem 'cocoapods', '>= 1.13', '!= 1.15.1', '!= 1.15.0' gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' gem 'xcodeproj', '< 1.26.0' gem 'concurrent-ruby', '< 1.3.4' diff --git a/Gemfile.lock b/Gemfile.lock index 435b453c726..a85e179d53b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -308,7 +308,7 @@ DEPENDENCIES activesupport (>= 6.1.7.5, != 7.1.0) benchmark bigdecimal - cocoapods (>= 1.13, != 1.15.0, != 1.15.1) + cocoapods (>= 1.13, != 1.15.1, != 1.15.0) concurrent-ruby (< 1.3.4) fastlane fastlane-plugin-bugsnag diff --git a/__mocks__/react-native-mmkv-storage.js b/__mocks__/react-native-mmkv-storage.js deleted file mode 100644 index 29b28d2892d..00000000000 --- a/__mocks__/react-native-mmkv-storage.js +++ /dev/null @@ -1,25 +0,0 @@ -export class MMKVLoader { - // eslint-disable-next-line no-useless-constructor - constructor() { - // console.log('MMKVLoader constructor mock'); - } - - setProcessingMode = jest.fn().mockImplementation(() => ({ - setAccessibleIOS: jest.fn().mockImplementation(() => ({ - withEncryption: jest.fn().mockImplementation(() => ({ - initialize: jest.fn().mockImplementation(() => {}) - })) - })) - })); -} - -export const ProcessingModes = { - MULTI_PROCESS: '' -}; - -export const IOSAccessibleStates = { - AFTER_FIRST_UNLOCK_THIS_DEVICE_ONLY: '' -}; - -// fix the useUserPreference hook -export const create = jest.fn().mockImplementation(() => jest.fn().mockImplementation(() => [0, jest.fn()])); diff --git a/__mocks__/react-native-mmkv.js b/__mocks__/react-native-mmkv.js new file mode 100644 index 00000000000..3288748482c --- /dev/null +++ b/__mocks__/react-native-mmkv.js @@ -0,0 +1,199 @@ +// Mock for react-native-mmkv +const { useState, useEffect } = require('react'); + +// Shared storage between instances with the same id +const storageInstances = new Map(); + +export const Mode = { + SINGLE_PROCESS: 1, + MULTI_PROCESS: 2 +}; + +export class MMKV { + constructor(config = {}) { + const { id = 'default', mode, path } = config; + this.id = id; + this.mode = mode; + this.path = path; + + // Share storage between instances with the same id + if (!storageInstances.has(this.id)) { + storageInstances.set(this.id, { + storage: new Map(), + listeners: [] + }); + } + + const instance = storageInstances.get(this.id); + this.storage = instance.storage; + this.listeners = instance.listeners; + } + + set(key, value) { + this.storage.set(key, value); + this.notifyListeners(key); + } + + getString(key) { + const value = this.storage.get(key); + return typeof value === 'string' ? value : undefined; + } + + getNumber(key) { + const value = this.storage.get(key); + return typeof value === 'number' ? value : undefined; + } + + getBoolean(key) { + const value = this.storage.get(key); + return typeof value === 'boolean' ? value : undefined; + } + + contains(key) { + return this.storage.has(key); + } + + delete(key) { + const deleted = this.storage.delete(key); + if (deleted) { + this.notifyListeners(key); + } + return deleted; + } + + getAllKeys() { + return Array.from(this.storage.keys()); + } + + clearAll() { + this.storage.clear(); + // Notify about clear (pass undefined to indicate clear all) + this.notifyListeners(undefined); + } + + addOnValueChangedListener(callback) { + this.listeners.push(callback); + return { + remove: () => { + const index = this.listeners.indexOf(callback); + if (index > -1) { + this.listeners.splice(index, 1); + } + } + }; + } + + notifyListeners(key) { + this.listeners.forEach((listener) => { + try { + listener(key); + } catch (error) { + console.error('Error in MMKV listener:', error); + } + }); + } +} + +// Export Configuration type for TypeScript +export const Configuration = {}; + +// React hooks for MMKV +export function useMMKVString(key, mmkvInstance) { + const [value, setValue] = useState(() => mmkvInstance.getString(key)); + + useEffect(() => { + const listener = mmkvInstance.addOnValueChangedListener((changedKey) => { + if (changedKey === key || changedKey === undefined) { + setValue(mmkvInstance.getString(key)); + } + }); + return () => listener.remove(); + }, [key, mmkvInstance]); + + const setStoredValue = (newValue) => { + if (newValue === undefined) { + mmkvInstance.delete(key); + } else { + mmkvInstance.set(key, newValue); + } + setValue(newValue); + }; + + return [value, setStoredValue]; +} + +export function useMMKVNumber(key, mmkvInstance) { + const [value, setValue] = useState(() => mmkvInstance.getNumber(key)); + + useEffect(() => { + const listener = mmkvInstance.addOnValueChangedListener((changedKey) => { + if (changedKey === key || changedKey === undefined) { + setValue(mmkvInstance.getNumber(key)); + } + }); + return () => listener.remove(); + }, [key, mmkvInstance]); + + const setStoredValue = (newValue) => { + if (newValue === undefined) { + mmkvInstance.delete(key); + } else { + mmkvInstance.set(key, newValue); + } + setValue(newValue); + }; + + return [value, setStoredValue]; +} + +export function useMMKVBoolean(key, mmkvInstance) { + const [value, setValue] = useState(() => mmkvInstance.getBoolean(key)); + + useEffect(() => { + const listener = mmkvInstance.addOnValueChangedListener((changedKey) => { + if (changedKey === key || changedKey === undefined) { + setValue(mmkvInstance.getBoolean(key)); + } + }); + return () => listener.remove(); + }, [key, mmkvInstance]); + + const setStoredValue = (newValue) => { + if (newValue === undefined) { + mmkvInstance.delete(key); + } else { + mmkvInstance.set(key, newValue); + } + setValue(newValue); + }; + + return [value, setStoredValue]; +} + +export function useMMKVObject(key, mmkvInstance) { + const [value, setValue] = useState(() => { + const stored = mmkvInstance.getString(key); + return stored ? JSON.parse(stored) : undefined; + }); + + useEffect(() => { + const listener = mmkvInstance.addOnValueChangedListener((changedKey) => { + if (changedKey === key || changedKey === undefined) { + const stored = mmkvInstance.getString(key); + setValue(stored ? JSON.parse(stored) : undefined); + } + }); + return () => listener.remove(); + }, [key, mmkvInstance]); + + const setStoredValue = (newValue) => { + if (newValue === undefined) { + mmkvInstance.delete(key); + } else { + mmkvInstance.set(key, JSON.stringify(newValue)); + } + setValue(newValue); + }; + + return [value, setStoredValue]; +} diff --git a/android/app/build.gradle b/android/app/build.gradle index 9ec188c7d98..b002fd81eb5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -93,7 +93,6 @@ android { versionName "4.68.0" vectorDrawables.useSupportLibrary = true manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] - missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60" // See note below! resValue "string", "rn_config_reader_custom_package", "chat.rocket.reactnative" } @@ -144,13 +143,15 @@ dependencies { implementation jscFlavor } - implementation project(':react-native-notifications') implementation "com.google.firebase:firebase-messaging:23.3.1" implementation project(':watermelondb-jsi') implementation "com.google.code.gson:gson:2.8.9" implementation "com.tencent:mmkv-static:1.2.10" implementation 'com.facebook.soloader:soloader:0.10.4' + + // For SecureKeystore (EncryptedSharedPreferences) + implementation 'androidx.security:security-crypto:1.1.0' } apply plugin: 'com.google.gms.google-services' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 552191d1316..4fb70ab1a89 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -75,6 +75,14 @@ + + + + + + + + + + + + diff --git a/android/app/src/main/assets/fonts/custom.ttf b/android/app/src/main/assets/fonts/custom.ttf index 410ec49c029..b0758f2fa60 100644 Binary files a/android/app/src/main/assets/fonts/custom.ttf and b/android/app/src/main/assets/fonts/custom.ttf differ diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainActivity.kt b/android/app/src/main/java/chat/rocket/reactnative/MainActivity.kt index e2ed12f7eab..502ae26784f 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/MainActivity.kt +++ b/android/app/src/main/java/chat/rocket/reactnative/MainActivity.kt @@ -7,8 +7,11 @@ import com.facebook.react.defaults.DefaultReactActivityDelegate import android.os.Bundle import com.zoontek.rnbootsplash.RNBootSplash -import android.content.Intent; -import android.content.res.Configuration; +import android.content.Intent +import android.content.res.Configuration +import chat.rocket.reactnative.notification.VideoConfModule +import chat.rocket.reactnative.notification.VideoConfNotification +import com.google.gson.GsonBuilder class MainActivity : ReactActivity() { @@ -25,9 +28,60 @@ class MainActivity : ReactActivity() { override fun createReactActivityDelegate(): ReactActivityDelegate = DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) - override fun onCreate(savedInstanceState: Bundle?) { + override fun onCreate(savedInstanceState: Bundle?) { RNBootSplash.init(this, R.style.BootTheme) super.onCreate(null) + + // Handle video conf action from notification + intent?.let { handleVideoConfIntent(it) } + } + + public override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + // Handle video conf action when activity is already running + handleVideoConfIntent(intent) + } + + private fun handleVideoConfIntent(intent: Intent) { + if (intent.getBooleanExtra("videoConfAction", false)) { + val notificationId = intent.getIntExtra("notificationId", 0) + val event = intent.getStringExtra("event") ?: return + val rid = intent.getStringExtra("rid") ?: "" + val callerId = intent.getStringExtra("callerId") ?: "" + val callerName = intent.getStringExtra("callerName") ?: "" + val host = intent.getStringExtra("host") ?: "" + val callId = intent.getStringExtra("callId") ?: "" + + android.util.Log.d("RocketChat.MainActivity", "Handling video conf intent - event: $event, rid: $rid, host: $host, callId: $callId") + + // Cancel the notification + if (notificationId != 0) { + VideoConfNotification.cancelById(this, notificationId) + } + + // Store action for JS to pick up - include all required fields + val data = mapOf( + "notificationType" to "videoconf", + "rid" to rid, + "event" to event, + "host" to host, + "callId" to callId, + "caller" to mapOf( + "_id" to callerId, + "name" to callerName + ) + ) + + val gson = GsonBuilder().create() + val jsonData = gson.toJson(data) + + android.util.Log.d("RocketChat.MainActivity", "Storing video conf action: $jsonData") + + VideoConfModule.storePendingAction(this, jsonData) + + // Clear the video conf flag to prevent re-processing + intent.removeExtra("videoConfAction") + } } override fun invokeDefaultOnBackPressed() { diff --git a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt index 0d07364246b..89622d5d0a4 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt +++ b/android/app/src/main/java/chat/rocket/reactnative/MainApplication.kt @@ -1,9 +1,7 @@ package chat.rocket.reactnative import android.app.Application -import android.content.Context import android.content.res.Configuration -import android.os.Bundle import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost @@ -18,17 +16,27 @@ import com.facebook.react.defaults.DefaultReactNativeHost import com.facebook.react.soloader.OpenSourceMergedSoMapping import com.facebook.soloader.SoLoader import com.nozbe.watermelondb.jsi.WatermelonDBJSIPackage; -import com.wix.reactnativenotifications.core.AppLaunchHelper -import com.wix.reactnativenotifications.core.AppLifecycleFacade -import com.wix.reactnativenotifications.core.JsIOHelper -import com.wix.reactnativenotifications.core.notification.INotificationsApplication -import com.wix.reactnativenotifications.core.notification.IPushNotification import com.bugsnag.android.Bugsnag import expo.modules.ApplicationLifecycleDispatcher import chat.rocket.reactnative.networking.SSLPinningTurboPackage; +import chat.rocket.reactnative.storage.MMKVKeyManager; +import chat.rocket.reactnative.storage.SecureStoragePackage; import chat.rocket.reactnative.notification.CustomPushNotification; +import chat.rocket.reactnative.notification.VideoConfTurboPackage -open class MainApplication : Application(), ReactApplication, INotificationsApplication { +/** + * Main Application class. + * + * NOTIFICATION ARCHITECTURE: + * - JS layer uses expo-notifications for token registration and event handling + * - Native layer uses RCFirebaseMessagingService + CustomPushNotification for: + * - FCM message handling + * - Notification display with MessagingStyle + * - E2E encrypted message decryption + * - Direct reply functionality + * - Message-id-only notification loading + */ +open class MainApplication : Application(), ReactApplication { override val reactNativeHost: ReactNativeHost = object : DefaultReactNativeHost(this) { @@ -36,6 +44,8 @@ open class MainApplication : Application(), ReactApplication, INotificationsAppl PackageList(this).packages.apply { add(SSLPinningTurboPackage()) add(WatermelonDBJSIPackage()) + add(VideoConfTurboPackage()) + add(SecureStoragePackage()) } override fun getJSMainModuleName(): String = "index" @@ -53,6 +63,10 @@ open class MainApplication : Application(), ReactApplication, INotificationsAppl super.onCreate() SoLoader.init(this, OpenSourceMergedSoMapping) Bugsnag.start(this) + + // Initialize MMKV encryption - reads existing key or generates new one + // Must run before React Native starts to avoid race conditions + MMKVKeyManager.initialize(this) // Load the native entry point for the New Architecture load() @@ -71,19 +85,4 @@ open class MainApplication : Application(), ReactApplication, INotificationsAppl super.onConfigurationChanged(newConfig) ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) } - - override fun getPushNotification( - context: Context, - bundle: Bundle, - defaultFacade: AppLifecycleFacade, - defaultAppLaunchHelper: AppLaunchHelper - ): IPushNotification { - return CustomPushNotification( - context, - bundle, - defaultFacade, - defaultAppLaunchHelper, - JsIOHelper() - ) - } } diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java index 18f89fb0ca4..cad28734ea4 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/CustomPushNotification.java @@ -1,7 +1,5 @@ package chat.rocket.reactnative.notification; -import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME; - import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -25,10 +23,6 @@ import com.bumptech.glide.request.RequestOptions; import com.facebook.react.bridge.ReactApplicationContext; import com.google.gson.Gson; -import com.wix.reactnativenotifications.core.AppLaunchHelper; -import com.wix.reactnativenotifications.core.AppLifecycleFacade; -import com.wix.reactnativenotifications.core.JsIOHelper; -import com.wix.reactnativenotifications.core.notification.PushNotification; import java.util.ArrayList; import java.util.Date; @@ -37,17 +31,20 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import chat.rocket.reactnative.BuildConfig; +import chat.rocket.reactnative.MainActivity; import chat.rocket.reactnative.R; /** * Custom push notification handler for Rocket.Chat. * * Handles standard push notifications and End-to-End encrypted (E2E) notifications. - * For E2E notifications, waits for React Native initialization before decrypting and displaying. + * Provides MessagingStyle notifications, direct reply, and advanced processing. */ -public class CustomPushNotification extends PushNotification { +public class CustomPushNotification { private static final String TAG = "RocketChat.CustomPush"; private static final boolean ENABLE_VERBOSE_LOGS = BuildConfig.DEBUG; @@ -59,14 +56,21 @@ public class CustomPushNotification extends PushNotification { // Constants public static final String KEY_REPLY = "KEY_REPLY"; public static final String NOTIFICATION_ID = "NOTIFICATION_ID"; + private static final String CHANNEL_ID = "rocketchatrn_channel_01"; + private static final String CHANNEL_NAME = "All"; // Instance fields - final NotificationManager notificationManager; + private final Context mContext; + private Bundle mBundle; + private final NotificationManager notificationManager; - public CustomPushNotification(Context context, Bundle bundle, AppLifecycleFacade appLifecycleFacade, - AppLaunchHelper appLaunchHelper, JsIOHelper jsIoHelper) { - super(context, bundle, appLifecycleFacade, appLaunchHelper, jsIoHelper); - notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + public CustomPushNotification(Context context, Bundle bundle) { + this.mContext = context; + this.mBundle = bundle; + this.notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + + // Ensure notification channel exists + createNotificationChannel(); } /** @@ -80,59 +84,66 @@ public static void setReactContext(ReactApplicationContext context) { public static void clearMessages(int notId) { notificationMessages.remove(Integer.toString(notId)); } + + /** + * Check if React Native is initialized + */ + private boolean isReactInitialized() { + return reactApplicationContext != null; + } - @Override - public void onReceived() throws InvalidNotificationException { - Bundle bundle = mNotificationProps.asBundle(); - String notId = bundle.getString("notId"); + public void onReceived() { + String notId = mBundle.getString("notId"); if (notId == null || notId.isEmpty()) { - throw new InvalidNotificationException("Missing notification ID"); + Log.w(TAG, "Missing notification ID, ignoring notification"); + return; } try { Integer.parseInt(notId); } catch (NumberFormatException e) { - throw new InvalidNotificationException("Invalid notification ID format: " + notId); + Log.w(TAG, "Invalid notification ID format: " + notId); + return; } // Check if React is ready - needed for MMKV access (avatars, encryption, message-id-only) - if (!mAppLifecycleFacade.isReactInitialized()) { - android.util.Log.w(TAG, "React not initialized yet, waiting before processing notification..."); + if (!isReactInitialized()) { + Log.w(TAG, "React not initialized yet, waiting before processing notification..."); // Wait for React to initialize with timeout new Thread(() -> { int attempts = 0; int maxAttempts = 50; // 5 seconds total (50 * 100ms) - while (!mAppLifecycleFacade.isReactInitialized() && attempts < maxAttempts) { + while (!isReactInitialized() && attempts < maxAttempts) { try { Thread.sleep(100); // Wait 100ms attempts++; if (attempts % 10 == 0 && ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "Still waiting for React initialization... (" + (attempts * 100) + "ms elapsed)"); + Log.d(TAG, "Still waiting for React initialization... (" + (attempts * 100) + "ms elapsed)"); } } catch (InterruptedException e) { - android.util.Log.e(TAG, "Wait interrupted", e); + Log.e(TAG, "Wait interrupted", e); Thread.currentThread().interrupt(); return; } } - if (mAppLifecycleFacade.isReactInitialized()) { - android.util.Log.i(TAG, "React initialized after " + (attempts * 100) + "ms, proceeding with notification"); + if (isReactInitialized()) { + Log.i(TAG, "React initialized after " + (attempts * 100) + "ms, proceeding with notification"); try { handleNotification(); } catch (Exception e) { - android.util.Log.e(TAG, "Failed to process notification after React initialization", e); + Log.e(TAG, "Failed to process notification after React initialization", e); } } else { - android.util.Log.e(TAG, "Timeout waiting for React initialization after " + (maxAttempts * 100) + "ms, processing without MMKV"); + Log.e(TAG, "Timeout waiting for React initialization after " + (maxAttempts * 100) + "ms, processing without MMKV"); try { handleNotification(); } catch (Exception e) { - android.util.Log.e(TAG, "Failed to process notification without React context", e); + Log.e(TAG, "Failed to process notification without React context", e); } } }).start(); @@ -141,23 +152,21 @@ public void onReceived() throws InvalidNotificationException { } if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "React already initialized, proceeding with notification"); + Log.d(TAG, "React already initialized, proceeding with notification"); } try { handleNotification(); } catch (Exception e) { - android.util.Log.e(TAG, "Failed to process notification on main thread", e); - throw new InvalidNotificationException("Notification processing failed: " + e.getMessage()); + Log.e(TAG, "Failed to process notification on main thread", e); } } private void handleNotification() { - Bundle received = mNotificationProps.asBundle(); - Ejson receivedEjson = safeFromJson(received.getString("ejson", "{}"), Ejson.class); + Ejson receivedEjson = safeFromJson(mBundle.getString("ejson", "{}"), Ejson.class); if (receivedEjson != null && receivedEjson.notificationType != null && receivedEjson.notificationType.equals("message-id-only")) { - android.util.Log.d(TAG, "Detected message-id-only notification, will fetch full content from server"); + Log.d(TAG, "Detected message-id-only notification, will fetch full content from server"); loadNotificationAndProcess(receivedEjson); return; // Exit early, notification will be processed in callback } @@ -171,30 +180,19 @@ private void loadNotificationAndProcess(Ejson ejson) { @Override public void call(@Nullable Bundle bundle) { if (bundle != null) { - android.util.Log.d(TAG, "Successfully loaded notification content from server, updating notification props"); + Log.d(TAG, "Successfully loaded notification content from server, updating notification props"); if (ENABLE_VERBOSE_LOGS) { - // BEFORE createProps - android.util.Log.d(TAG, "[BEFORE createProps] bundle.notificationLoaded=" + bundle.getBoolean("notificationLoaded", false)); - android.util.Log.d(TAG, "[BEFORE createProps] bundle.title=" + (bundle.getString("title") != null ? "[present]" : "[null]")); - android.util.Log.d(TAG, "[BEFORE createProps] bundle.message length=" + (bundle.getString("message") != null ? bundle.getString("message").length() : 0)); - android.util.Log.d(TAG, "[BEFORE createProps] bundle has ejson=" + (bundle.getString("ejson") != null)); + Log.d(TAG, "[BEFORE update] bundle.notificationLoaded=" + bundle.getBoolean("notificationLoaded", false)); + Log.d(TAG, "[BEFORE update] bundle.title=" + (bundle.getString("title") != null ? "[present]" : "[null]")); + Log.d(TAG, "[BEFORE update] bundle.message length=" + (bundle.getString("message") != null ? bundle.getString("message").length() : 0)); } synchronized(CustomPushNotification.this) { - mNotificationProps = createProps(bundle); - } - - if (ENABLE_VERBOSE_LOGS) { - // AFTER createProps - verify it worked - Bundle verifyBundle = mNotificationProps.asBundle(); - android.util.Log.d(TAG, "[AFTER createProps] mNotificationProps.notificationLoaded=" + verifyBundle.getBoolean("notificationLoaded", false)); - android.util.Log.d(TAG, "[AFTER createProps] mNotificationProps.title=" + (verifyBundle.getString("title") != null ? "[present]" : "[null]")); - android.util.Log.d(TAG, "[AFTER createProps] mNotificationProps.message length=" + (verifyBundle.getString("message") != null ? verifyBundle.getString("message").length() : 0)); - android.util.Log.d(TAG, "[AFTER createProps] mNotificationProps has ejson=" + (verifyBundle.getString("ejson") != null)); + mBundle = bundle; } } else { - android.util.Log.w(TAG, "Failed to load notification content from server, will display placeholder notification"); + Log.w(TAG, "Failed to load notification content from server, will display placeholder notification"); } processNotification(); @@ -203,28 +201,26 @@ public void call(@Nullable Bundle bundle) { } private void processNotification() { - // We should re-read these values since that can be changed by notificationLoad - Bundle bundle = mNotificationProps.asBundle(); - Ejson loadedEjson = safeFromJson(bundle.getString("ejson", "{}"), Ejson.class); - String notId = bundle.getString("notId", "1"); + Ejson loadedEjson = safeFromJson(mBundle.getString("ejson", "{}"), Ejson.class); + String notId = mBundle.getString("notId", "1"); if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "[processNotification] notId=" + notId); - android.util.Log.d(TAG, "[processNotification] bundle.notificationLoaded=" + bundle.getBoolean("notificationLoaded", false)); - android.util.Log.d(TAG, "[processNotification] bundle.title=" + (bundle.getString("title") != null ? "[present]" : "[null]")); - android.util.Log.d(TAG, "[processNotification] bundle.message length=" + (bundle.getString("message") != null ? bundle.getString("message").length() : 0)); - android.util.Log.d(TAG, "[processNotification] loadedEjson.notificationType=" + (loadedEjson != null ? loadedEjson.notificationType : "null")); - android.util.Log.d(TAG, "[processNotification] loadedEjson.sender=" + (loadedEjson != null && loadedEjson.sender != null ? loadedEjson.sender.username : "null")); + Log.d(TAG, "[processNotification] notId=" + notId); + Log.d(TAG, "[processNotification] bundle.notificationLoaded=" + mBundle.getBoolean("notificationLoaded", false)); + Log.d(TAG, "[processNotification] bundle.title=" + (mBundle.getString("title") != null ? "[present]" : "[null]")); + Log.d(TAG, "[processNotification] bundle.message length=" + (mBundle.getString("message") != null ? mBundle.getString("message").length() : 0)); + Log.d(TAG, "[processNotification] loadedEjson.notificationType=" + (loadedEjson != null ? loadedEjson.notificationType : "null")); + Log.d(TAG, "[processNotification] loadedEjson.sender=" + (loadedEjson != null && loadedEjson.sender != null ? loadedEjson.sender.username : "null")); } // Handle E2E encrypted notifications if (isE2ENotification(loadedEjson)) { - handleE2ENotification(bundle, loadedEjson, notId); + handleE2ENotification(mBundle, loadedEjson, notId); return; // E2E processor will handle showing the notification } // Handle regular (non-E2E) notifications - showNotification(bundle, loadedEjson, notId); + showNotification(mBundle, loadedEjson, notId); } /** @@ -245,8 +241,7 @@ private void handleE2ENotification(Bundle bundle, Ejson ejson, String notId) { if (decrypted != null) { bundle.putString("message", decrypted); - mNotificationProps = createProps(bundle); - bundle = mNotificationProps.asBundle(); + mBundle = bundle; ejson = safeFromJson(bundle.getString("ejson", "{}"), Ejson.class); showNotification(bundle, ejson, notId); } else { @@ -266,11 +261,9 @@ private void handleE2ENotification(Bundle bundle, Ejson ejson, String notId) { new E2ENotificationProcessor.NotificationCallback() { @Override public void onDecryptionComplete(Bundle decryptedBundle, Ejson decryptedEjson, String notificationId) { - // Update props and show notification - mNotificationProps = createProps(decryptedBundle); - Bundle finalBundle = mNotificationProps.asBundle(); - Ejson finalEjson = safeFromJson(finalBundle.getString("ejson", "{}"), Ejson.class); - showNotification(finalBundle, finalEjson, notificationId); + mBundle = decryptedBundle; + Ejson finalEjson = safeFromJson(decryptedBundle.getString("ejson", "{}"), Ejson.class); + showNotification(decryptedBundle, finalEjson, notificationId); } @Override @@ -308,154 +301,189 @@ private void showNotification(Bundle bundle, Ejson ejson, String notId) { String avatarUri = ejson != null ? ejson.getAvatarUri() : null; if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "[showNotification] avatarUri=" + (avatarUri != null ? "[present]" : "[null]")); + Log.d(TAG, "[showNotification] avatarUri=" + (avatarUri != null ? "[present]" : "[null]")); } bundle.putString("avatarUri", avatarUri); // Handle special notification types - if (ejson != null && ejson.notificationType instanceof String && - ejson.notificationType.equals("videoconf")) { - notifyReceivedToJS(); + if (ejson != null && "videoconf".equals(ejson.notificationType)) { + handleVideoConfNotification(bundle, ejson); + return; } else { // Show regular notification if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "[Before add to notificationMessages] notId=" + notId + ", bundle.message length=" + (bundle.getString("message") != null ? bundle.getString("message").length() : 0) + ", bundle.notificationLoaded=" + bundle.getBoolean("notificationLoaded", false)); + Log.d(TAG, "[Before add to notificationMessages] notId=" + notId + ", bundle.message length=" + (bundle.getString("message") != null ? bundle.getString("message").length() : 0) + ", bundle.notificationLoaded=" + bundle.getBoolean("notificationLoaded", false)); } notificationMessages.get(notId).add(bundle); if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "[After add] notificationMessages[" + notId + "].size=" + notificationMessages.get(notId).size()); + Log.d(TAG, "[After add] notificationMessages[" + notId + "].size=" + notificationMessages.get(notId).size()); } postNotification(Integer.parseInt(notId)); - notifyReceivedToJS(); } } - @Override - public void onOpened() { - Bundle bundle = mNotificationProps.asBundle(); - final String notId = bundle.getString("notId", "1"); - notificationMessages.remove(notId); - digestNotification(); + /** + * Handles video conference notifications. + * Shows incoming call notification or cancels existing one based on status. + */ + private void handleVideoConfNotification(Bundle bundle, Ejson ejson) { + VideoConfNotification videoConf = new VideoConfNotification(mContext); + + Integer status = ejson.status; + String rid = ejson.rid; + // Video conf uses 'caller' field, regular messages use 'sender' + String callerId = ""; + if (ejson.caller != null && ejson.caller._id != null) { + callerId = ejson.caller._id; + } else if (ejson.sender != null && ejson.sender._id != null) { + callerId = ejson.sender._id; + } + + Log.d(TAG, "Video conf notification - status: " + status + ", rid: " + rid); + + if (status == null || status == 0) { + // Incoming call - show notification + videoConf.showIncomingCall(bundle, ejson); + } else if (status == 4) { + // Call cancelled/ended - dismiss notification + videoConf.cancelCall(rid, callerId); + } else { + Log.d(TAG, "Unknown video conf status: " + status); + } } - @Override - protected Notification.Builder getNotificationBuilder(PendingIntent intent) { - final Notification.Builder notification = new Notification.Builder(mContext); + private void postNotification(int notificationId) { + Notification.Builder notification = buildNotification(notificationId); + if (notification != null && notificationManager != null) { + notificationManager.notify(notificationId, notification.build()); + } + } + + private void createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel( + CHANNEL_ID, + CHANNEL_NAME, + NotificationManager.IMPORTANCE_HIGH + ); + if (notificationManager != null) { + notificationManager.createNotificationChannel(channel); + } + } + } - Bundle bundle = mNotificationProps.asBundle(); - String notId = bundle.getString("notId", "1"); - String title = bundle.getString("title"); - String message = bundle.getString("message"); - Boolean notificationLoaded = bundle.getBoolean("notificationLoaded", false); - Ejson ejson = safeFromJson(bundle.getString("ejson", "{}"), Ejson.class); + private Notification.Builder buildNotification(int notificationId) { + String notId = Integer.toString(notificationId); + String title = mBundle.getString("title"); + String message = mBundle.getString("message"); + Boolean notificationLoaded = mBundle.getBoolean("notificationLoaded", false); + Ejson ejson = safeFromJson(mBundle.getString("ejson", "{}"), Ejson.class); if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "[getNotificationBuilder] notId=" + notId); - android.util.Log.d(TAG, "[getNotificationBuilder] notificationLoaded=" + notificationLoaded); - android.util.Log.d(TAG, "[getNotificationBuilder] title=" + (title != null ? "[present]" : "[null]")); - android.util.Log.d(TAG, "[getNotificationBuilder] message length=" + (message != null ? message.length() : 0)); - android.util.Log.d(TAG, "[getNotificationBuilder] ejson=" + (ejson != null ? "present" : "null")); - android.util.Log.d(TAG, "[getNotificationBuilder] ejson.notificationType=" + (ejson != null ? ejson.notificationType : "null")); - android.util.Log.d(TAG, "[getNotificationBuilder] ejson.sender=" + (ejson != null && ejson.sender != null ? ejson.sender.username : "null")); + Log.d(TAG, "[buildNotification] notId=" + notId); + Log.d(TAG, "[buildNotification] notificationLoaded=" + notificationLoaded); + Log.d(TAG, "[buildNotification] title=" + (title != null ? "[present]" : "[null]")); + Log.d(TAG, "[buildNotification] message length=" + (message != null ? message.length() : 0)); + } + + // Create pending intent to open the app + Intent intent = new Intent(mContext, MainActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtras(mBundle); + + PendingIntent pendingIntent; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + pendingIntent = PendingIntent.getActivity(mContext, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } else { + pendingIntent = PendingIntent.getActivity(mContext, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT); + } + + Notification.Builder notification; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + notification = new Notification.Builder(mContext, CHANNEL_ID); + } else { + notification = new Notification.Builder(mContext); } notification .setContentTitle(title) .setContentText(message) - .setContentIntent(intent) + .setContentIntent(pendingIntent) .setPriority(Notification.PRIORITY_HIGH) .setDefaults(Notification.DEFAULT_ALL) .setAutoCancel(true); - Integer notificationId = Integer.parseInt(notId); notificationColor(notification); - notificationChannel(notification); - notificationIcons(notification, bundle); + notificationIcons(notification, mBundle); notificationDismiss(notification, notificationId); // if notificationType is null (RC < 3.5) or notificationType is different of message-id-only or notification was loaded successfully if (ejson == null || ejson.notificationType == null || !ejson.notificationType.equals("message-id-only") || notificationLoaded) { - android.util.Log.i(TAG, "[getNotificationBuilder] ✅ Rendering FULL notification style (ejson=" + (ejson != null) + ", notificationType=" + (ejson != null ? ejson.notificationType : "null") + ", notificationLoaded=" + notificationLoaded + ")"); - notificationStyle(notification, notificationId, bundle); - notificationReply(notification, notificationId, bundle); - - // message couldn't be loaded from server (Fallback notification) + Log.i(TAG, "[buildNotification] ✅ Rendering FULL notification style"); + notificationStyle(notification, notificationId, mBundle); + notificationReply(notification, notificationId, mBundle); } else { - android.util.Log.w(TAG, "[getNotificationBuilder] ⚠️ Rendering FALLBACK notification (ejson=" + (ejson != null) + ", notificationType=" + (ejson != null ? ejson.notificationType : "null") + ", notificationLoaded=" + notificationLoaded + ")"); - // iterate over the current notification ids to dismiss fallback notifications from same server - for (Map.Entry> bundleList : notificationMessages.entrySet()) { - // iterate over the notifications with this id (same host + rid) - Iterator iterator = bundleList.getValue().iterator(); - while (iterator.hasNext()) { - Bundle not = (Bundle) iterator.next(); - // get the notification info - Ejson notEjson = safeFromJson(not.getString("ejson", "{}"), Ejson.class); - // if already has a notification from same server - if (ejson != null && notEjson != null && ejson.serverURL().equals(notEjson.serverURL())) { - String id = not.getString("notId"); - // cancel this notification - if (notificationManager != null) { - try { - notificationManager.cancel(Integer.parseInt(id)); - if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "Cancelled previous fallback notification from same server"); - } - } catch (NumberFormatException e) { - android.util.Log.e(TAG, "Invalid notification ID for cancel: " + id, e); + Log.w(TAG, "[buildNotification] ⚠️ Rendering FALLBACK notification"); + // Cancel previous fallback notifications from same server + cancelPreviousFallbackNotifications(ejson); + } + + return notification; + } + + private void cancelPreviousFallbackNotifications(Ejson ejson) { + for (Map.Entry> bundleList : notificationMessages.entrySet()) { + Iterator iterator = bundleList.getValue().iterator(); + while (iterator.hasNext()) { + Bundle not = iterator.next(); + Ejson notEjson = safeFromJson(not.getString("ejson", "{}"), Ejson.class); + if (ejson != null && notEjson != null && ejson.serverURL().equals(notEjson.serverURL())) { + String id = not.getString("notId"); + if (notificationManager != null && id != null) { + try { + notificationManager.cancel(Integer.parseInt(id)); + if (ENABLE_VERBOSE_LOGS) { + Log.d(TAG, "Cancelled previous fallback notification from same server"); } + } catch (NumberFormatException e) { + Log.e(TAG, "Invalid notification ID for cancel: " + id, e); } } } } } - - return notification; - } - - private void notifyReceivedToJS() { - boolean isReactInitialized = mAppLifecycleFacade.isReactInitialized(); - if (isReactInitialized) { - mJsIOHelper.sendEventToJS(NOTIFICATION_RECEIVED_EVENT_NAME, mNotificationProps.asBundle(), mAppLifecycleFacade.getRunningReactContext()); - } } private Bitmap getAvatar(String uri) { if (uri == null || uri.isEmpty()) { if (ENABLE_VERBOSE_LOGS) { - android.util.Log.w(TAG, "getAvatar called with null/empty URI"); + Log.w(TAG, "getAvatar called with null/empty URI"); } return largeIcon(); } - // Sanitize URL for logging (remove query params with tokens) - String sanitizedUri = uri; - int queryStart = uri.indexOf("?"); - if (queryStart != -1) { - sanitizedUri = uri.substring(0, queryStart) + "?[auth_params]"; - } - if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "Fetching avatar from: " + sanitizedUri); + String sanitizedUri = uri; + int queryStart = uri.indexOf("?"); + if (queryStart != -1) { + sanitizedUri = uri.substring(0, queryStart) + "?[auth_params]"; + } + Log.d(TAG, "Fetching avatar from: " + sanitizedUri); } try { + // Use a 3-second timeout to avoid blocking the FCM service for too long + // FCM has a 10-second limit, so we need to fail fast and use fallback icon Bitmap avatar = Glide.with(mContext) .asBitmap() .apply(RequestOptions.bitmapTransform(new RoundedCorners(10))) .load(uri) .submit(100, 100) - .get(); + .get(3, TimeUnit.SECONDS); - if (avatar != null) { - if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "Successfully loaded avatar"); - } - } else { - android.util.Log.w(TAG, "Avatar loaded but is null"); - } return avatar != null ? avatar : largeIcon(); - } catch (final ExecutionException | InterruptedException e) { - android.util.Log.e(TAG, "Failed to fetch avatar: " + e.getMessage(), e); + } catch (final ExecutionException | InterruptedException | TimeoutException e) { + Log.e(TAG, "Failed to fetch avatar: " + e.getMessage(), e); return largeIcon(); } } @@ -464,16 +492,13 @@ private Bitmap largeIcon() { final Resources res = mContext.getResources(); String packageName = mContext.getPackageName(); int largeIconResId = res.getIdentifier("ic_notification", "drawable", packageName); - Bitmap largeIconBitmap = BitmapFactory.decodeResource(res, largeIconResId); - return largeIconBitmap; + return BitmapFactory.decodeResource(res, largeIconResId); } private void notificationIcons(Notification.Builder notification, Bundle bundle) { final Resources res = mContext.getResources(); String packageName = mContext.getPackageName(); - int smallIconResId = res.getIdentifier("ic_notification", "drawable", packageName); - Ejson ejson = safeFromJson(bundle.getString("ejson", "{}"), Ejson.class); notification.setSmallIcon(smallIconResId); @@ -486,28 +511,6 @@ private void notificationIcons(Notification.Builder notification, Bundle bundle) } } - private void notificationChannel(Notification.Builder notification) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - String CHANNEL_ID = "rocketchatrn_channel_01"; - String CHANNEL_NAME = "All"; - - // User-visible importance level: Urgent - Makes a sound and appears as a heads-up notification - // https://developer.android.com/training/notify-user/channels#importance - NotificationChannel channel = new NotificationChannel(CHANNEL_ID, - CHANNEL_NAME, - NotificationManager.IMPORTANCE_HIGH); - - final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - if (notificationManager != null) { - notificationManager.createNotificationChannel(channel); - } else { - android.util.Log.e(TAG, "NotificationManager is null, cannot create notification channel"); - } - - notification.setChannelId(CHANNEL_ID); - } - } - private String extractMessage(String message, Ejson ejson) { if (message == null) { return ""; @@ -515,7 +518,7 @@ private String extractMessage(String message, Ejson ejson) { if (ejson != null && ejson.type != null && !ejson.type.equals("d")) { int pos = message.indexOf(":"); int start = pos == -1 ? 0 : pos + 2; - return message.substring(start, message.length()); + return message.substring(start); } return message; } @@ -530,25 +533,17 @@ private void notificationStyle(Notification.Builder notification, int notId, Bun List bundles = notificationMessages.get(Integer.toString(notId)); if (ENABLE_VERBOSE_LOGS) { - android.util.Log.d(TAG, "[notificationStyle] notId=" + notId + ", bundles=" + (bundles != null ? bundles.size() : "null")); - if (bundles != null && bundles.size() > 0) { - Bundle firstBundle = bundles.get(0); - android.util.Log.d(TAG, "[notificationStyle] first bundle.message length=" + (firstBundle.getString("message") != null ? firstBundle.getString("message").length() : 0)); - android.util.Log.d(TAG, "[notificationStyle] first bundle.notificationLoaded=" + firstBundle.getBoolean("notificationLoaded", false)); - } + Log.d(TAG, "[notificationStyle] notId=" + notId + ", bundles=" + (bundles != null ? bundles.size() : "null")); } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { Notification.InboxStyle messageStyle = new Notification.InboxStyle(); if (bundles != null) { - for (int i = 0; i < bundles.size(); i++) { - Bundle data = bundles.get(i); + for (Bundle data : bundles) { String message = data.getString("message"); - messageStyle.addLine(message); } } - notification.setStyle(messageStyle); } else { Notification.MessagingStyle messageStyle; @@ -567,9 +562,7 @@ private void notificationStyle(Notification.Builder notification, int notId, Bun messageStyle.setConversationTitle(title); if (bundles != null) { - for (int i = 0; i < bundles.size(); i++) { - Bundle data = bundles.get(i); - + for (Bundle data : bundles) { long timestamp = data.getLong("time"); String message = data.getString("message"); String senderId = data.getString("senderId"); @@ -582,18 +575,16 @@ private void notificationStyle(Notification.Builder notification, int notId, Bun messageStyle.addMessage(m, timestamp, senderName); } else { Bitmap avatar = getAvatar(avatarUri); - String senderName = ejson != null ? ejson.senderName : "Unknown"; - Person.Builder sender = new Person.Builder() + Person.Builder senderBuilder = new Person.Builder() .setKey(senderId) .setName(senderName); if (avatar != null) { - sender.setIcon(Icon.createWithBitmap(avatar)); + senderBuilder.setIcon(Icon.createWithBitmap(avatar)); } - Person person = sender.build(); - + Person person = senderBuilder.build(); messageStyle.addMessage(m, timestamp, person); } } @@ -630,8 +621,7 @@ private void notificationReply(Notification.Builder notification, int notificati .setLabel(label) .build(); - CharSequence title = label; - Notification.Action replyAction = new Notification.Action.Builder(smallIconResId, title, replyPendingIntent) + Notification.Action replyAction = new Notification.Action.Builder(smallIconResId, label, replyPendingIntent) .addRemoteInput(remoteInput) .setAllowGeneratedReplies(true) .build(); @@ -652,16 +642,11 @@ private void notificationDismiss(Notification.Builder notification, int notifica private void notificationLoad(Ejson ejson, Callback callback) { LoadNotification loadNotification = new LoadNotification(); - loadNotification.load(reactApplicationContext, ejson, callback); + loadNotification.load(ejson, callback); } /** * Safely parses JSON string to object with error handling. - * - * @param json JSON string to parse - * @param classOfT Target class type - * @param Type parameter - * @return Parsed object, or null if parsing fails */ private static T safeFromJson(String json, Class classOfT) { if (json == null || json.trim().isEmpty() || json.equals("{}")) { diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java index c12017dd0bc..036d03f24f6 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/Ejson.java @@ -2,17 +2,13 @@ import android.util.Log; -import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.Callback; - -import com.ammarahmed.mmkv.SecureKeystore; import com.tencent.mmkv.MMKV; -import com.wix.reactnativenotifications.core.AppLifecycleFacade; -import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder; import java.math.BigInteger; import chat.rocket.reactnative.BuildConfig; +import chat.rocket.reactnative.storage.MMKVKeyManager; class RNCallback implements Callback { public void invoke(Object... args) { @@ -32,78 +28,33 @@ static public String toHex(String arg) { public class Ejson { private static final String TAG = "RocketChat.Ejson"; + private static final String TOKEN_KEY = "reactnativemeteor_usertoken-"; String host; String rid; String type; Sender sender; + Caller caller; // For video conf notifications String messageId; + String callId; // For video conf notifications String notificationType; String messageType; String senderName; String msg; + Integer status; // For video conf: 0=incoming, 4=cancelled String tmid; - Content content; - private ReactApplicationContext reactContext; - - private MMKV mmkv; - - private boolean initializationAttempted = false; - - private String TOKEN_KEY = "reactnativemeteor_usertoken-"; - - public Ejson() { - // Don't initialize MMKV in constructor - use lazy initialization instead - } - - /** - * Lazily initialize MMKV when first needed. - * - * NOTE: MMKV requires ReactApplicationContext (not regular Context) because SecureKeystore - * needs access to React-specific keystore resources. This means MMKV cannot be initialized - * before React Native starts. - */ - private synchronized void ensureMMKVInitialized() { - if (initializationAttempted) { - return; - } - - initializationAttempted = true; - - // Try to get ReactApplicationContext from available sources - if (this.reactContext == null) { - AppLifecycleFacade facade = AppLifecycleFacadeHolder.get(); - if (facade != null) { - Object runningContext = facade.getRunningReactContext(); - if (runningContext instanceof ReactApplicationContext) { - this.reactContext = (ReactApplicationContext) runningContext; - } - } - - if (this.reactContext == null) { - this.reactContext = CustomPushNotification.reactApplicationContext; - } - } - - // Initialize MMKV if context is available - if (this.reactContext != null && mmkv == null) { - try { - MMKV.initialize(this.reactContext); - SecureKeystore secureKeystore = new SecureKeystore(this.reactContext); - // Alias format from react-native-mmkv-storage - String alias = Utils.toHex("com.MMKV.default"); - String password = secureKeystore.getSecureKey(alias); - mmkv = MMKV.mmkvWithID("default", MMKV.SINGLE_PROCESS_MODE, password); - } catch (Exception e) { - Log.e(TAG, "Failed to initialize MMKV", e); - mmkv = null; - } - } else if (this.reactContext == null) { - Log.w(TAG, "Cannot initialize MMKV: ReactApplicationContext not available"); + private MMKV getMMKV() { + String encryptionKey = MMKVKeyManager.getEncryptionKey(); + if (encryptionKey != null && !encryptionKey.isEmpty()) { + return MMKV.mmkvWithID("default", MMKV.SINGLE_PROCESS_MODE, encryptionKey); } + // Fallback to no encryption if key is not available + // This can happen if Keystore is unavailable (e.g., device locked/Direct Boot) + Log.w(TAG, "MMKV encryption key not available, opening without encryption"); + return MMKV.mmkvWithID("default", MMKV.SINGLE_PROCESS_MODE); } public String getAvatarUri() { @@ -136,8 +87,8 @@ public String getAvatarUri() { } public String token() { - ensureMMKVInitialized(); String userId = userId(); + MMKV mmkv = getMMKV(); if (mmkv == null) { Log.e(TAG, "token() called but MMKV is null"); @@ -166,20 +117,22 @@ public String token() { } public String userId() { - ensureMMKVInitialized(); String serverURL = serverURL(); - String key = TOKEN_KEY.concat(serverURL); - if (mmkv == null) { - Log.e(TAG, "userId() called but MMKV is null"); + if (serverURL == null) { + Log.e(TAG, "userId() called but serverURL is null"); return ""; } - if (serverURL == null) { - Log.e(TAG, "userId() called but serverURL is null"); + MMKV mmkv = getMMKV(); + + if (mmkv == null) { + Log.e(TAG, "userId() called but MMKV is null"); return ""; } + String key = TOKEN_KEY.concat(serverURL); + if (BuildConfig.DEBUG) { Log.d(TAG, "Looking up userId with key: " + key); } @@ -216,8 +169,8 @@ public String userId() { } public String privateKey() { - ensureMMKVInitialized(); String serverURL = serverURL(); + MMKV mmkv = getMMKV(); if (mmkv != null && serverURL != null) { return mmkv.decodeString(serverURL.concat("-RC_E2E_PRIVATE_KEY")); } @@ -238,10 +191,15 @@ static class Sender { String name; } + static class Caller { + String _id; + String name; + } + static class Content { String algorithm; String ciphertext; String kid; String iv; } -} \ No newline at end of file +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java b/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java index b9fffc4bba7..8eafd8d1fff 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/Encryption.java @@ -6,10 +6,7 @@ import android.util.Log; import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableMap; -import com.wix.reactnativenotifications.core.AppLifecycleFacade; -import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder; import com.google.gson.Gson; import com.google.gson.JsonObject; import chat.rocket.mobilecrypto.algorithms.AESCrypto; @@ -134,7 +131,6 @@ static class EncryptionContent { private static final String TAG = "RocketChat.E2E"; public static Encryption shared = new Encryption(); - private ReactApplicationContext reactContext; private PrefixedData decodePrefixedBase64(String input) { // A 256-byte array always encodes to 344 characters in Base64. @@ -315,22 +311,12 @@ private String decryptContent(Ejson.Content content, String e2eKey) throws Excep public String decryptMessage(final Ejson ejson, final Context context) { try { - // Get ReactApplicationContext for MMKV access - if (context instanceof ReactApplicationContext) { - this.reactContext = (ReactApplicationContext) context; - } else { - AppLifecycleFacade facade = AppLifecycleFacadeHolder.get(); - if (facade != null && facade.getRunningReactContext() instanceof ReactApplicationContext) { - this.reactContext = (ReactApplicationContext) facade.getRunningReactContext(); - } - } - - if (this.reactContext == null) { - Log.e(TAG, "Cannot decrypt: ReactApplicationContext not available"); + if (context == null) { + Log.e(TAG, "Cannot decrypt: context is null"); return null; } - Room room = readRoom(ejson, this.reactContext); + Room room = readRoom(ejson, context); if (room == null || room.e2eKey == null) { Log.w(TAG, "Cannot decrypt: room or e2eKey not found"); return null; @@ -368,18 +354,14 @@ public String decryptMessage(final Ejson ejson, final Context context) { } } - public EncryptionContent encryptMessageContent(final String message, final String id, final Ejson ejson) { + public EncryptionContent encryptMessageContent(final String message, final String id, final Ejson ejson, final Context context) { try { - AppLifecycleFacade facade = AppLifecycleFacadeHolder.get(); - if (facade != null && facade.getRunningReactContext() instanceof ReactApplicationContext) { - this.reactContext = (ReactApplicationContext) facade.getRunningReactContext(); - } - - // Use reactContext for database access - if (this.reactContext == null) { + if (context == null) { + Log.e(TAG, "Cannot encrypt: context is null"); return null; } - Room room = readRoom(ejson, this.reactContext); + + Room room = readRoom(ejson, context); if (room == null || !room.encrypted || room.e2eKey == null) { return null; } diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java b/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java index 6b6158393fc..9d443630cc9 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/LoadNotification.java @@ -3,7 +3,6 @@ import android.os.Bundle; import android.util.Log; -import com.facebook.react.bridge.ReactApplicationContext; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; @@ -65,7 +64,7 @@ public class LoadNotification { private int[] TIMEOUT = new int[]{0, 1, 3, 5, 10}; private String TOKEN_KEY = "reactnativemeteor_usertoken-"; - public void load(ReactApplicationContext reactApplicationContext, final Ejson ejson, Callback callback) { + public void load(final Ejson ejson, Callback callback) { Log.i(TAG, "Starting notification load for message-id-only notification"); // Validate ejson object @@ -127,6 +126,7 @@ public void load(ReactApplicationContext reactApplicationContext, final Ejson ej Request request = new Request.Builder() .header("x-user-id", userId) .header("x-auth-token", userToken) + .header("User-Agent", NotificationHelper.getUserAgent()) .url(urlBuilder.addQueryParameter("id", messageId).build()) .build(); diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/NativeVideoConfSpec.kt b/android/app/src/main/java/chat/rocket/reactnative/notification/NativeVideoConfSpec.kt new file mode 100644 index 00000000000..8eaea08cfd4 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/NativeVideoConfSpec.kt @@ -0,0 +1,23 @@ +package chat.rocket.reactnative.notification + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.turbomodule.core.interfaces.TurboModule + +abstract class NativeVideoConfSpec(reactContext: ReactApplicationContext) : + ReactContextBaseJavaModule(reactContext), TurboModule { + + companion object { + const val NAME = "VideoConfModule" + } + + override fun getName(): String = NAME + + @ReactMethod + abstract fun getPendingAction(promise: Promise) + + @ReactMethod + abstract fun clearPendingAction() +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/NotificationHelper.java b/android/app/src/main/java/chat/rocket/reactnative/notification/NotificationHelper.java index ac2f1256301..3b53a0be419 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/NotificationHelper.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/NotificationHelper.java @@ -1,5 +1,7 @@ package chat.rocket.reactnative.notification; +import android.os.Build; + import chat.rocket.reactnative.BuildConfig; /** @@ -23,5 +25,17 @@ public static String sanitizeUrl(String url) { } return "[workspace]"; } + + /** + * Get the User-Agent string for API requests + * Format: RC Mobile; android {systemVersion}; v{appVersion} ({buildNumber}) + * @return User-Agent string + */ + public static String getUserAgent() { + String systemVersion = Build.VERSION.RELEASE; + String appVersion = BuildConfig.VERSION_NAME; + int buildNumber = BuildConfig.VERSION_CODE; + return String.format("RC Mobile; android %s; v%s (%d)", systemVersion, appVersion, buildNumber); + } } diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/RCFirebaseMessagingService.kt b/android/app/src/main/java/chat/rocket/reactnative/notification/RCFirebaseMessagingService.kt new file mode 100644 index 00000000000..c8aba96e6b9 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/RCFirebaseMessagingService.kt @@ -0,0 +1,51 @@ +package chat.rocket.reactnative.notification + +import android.os.Bundle +import android.util.Log +import com.google.firebase.messaging.FirebaseMessagingService +import com.google.firebase.messaging.RemoteMessage + +/** + * Custom Firebase Messaging Service for Rocket.Chat. + * + * Handles incoming FCM messages and routes them to CustomPushNotification + * for advanced processing (E2E decryption, MessagingStyle, direct reply, etc.) + */ +class RCFirebaseMessagingService : FirebaseMessagingService() { + + companion object { + private const val TAG = "RocketChat.FCM" + } + + override fun onMessageReceived(remoteMessage: RemoteMessage) { + Log.d(TAG, "FCM message received from: ${remoteMessage.from}") + + val data = remoteMessage.data + if (data.isEmpty()) { + Log.w(TAG, "FCM message has no data payload, ignoring") + return + } + + // Convert FCM data to Bundle for processing + val bundle = Bundle().apply { + data.forEach { (key, value) -> + putString(key, value) + } + } + + // Process the notification + try { + val notification = CustomPushNotification(this, bundle) + notification.onReceived() + } catch (e: Exception) { + Log.e(TAG, "Error processing FCM message", e) + } + } + + override fun onNewToken(token: String) { + Log.d(TAG, "FCM token refreshed") + // Token handling is done by expo-notifications JS layer + // which uses getDevicePushTokenAsync() + super.onNewToken(token) + } +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java b/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java index 428332c3bf3..68568ac24bd 100644 --- a/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/ReplyBroadcast.java @@ -27,8 +27,6 @@ import okhttp3.RequestBody; import okhttp3.Response; -import com.wix.reactnativenotifications.core.NotificationIntentAdapter; - public class ReplyBroadcast extends BroadcastReceiver { private Context mContext; private Bundle bundle; @@ -43,7 +41,14 @@ public void onReceive(Context context, Intent intent) { } mContext = context; - bundle = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent); + // Extract bundle directly from intent extras + bundle = intent.getBundleExtra("pushNotification"); + if (bundle == null) { + bundle = intent.getExtras(); + } + if (bundle == null) { + return; + } notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); String notId = bundle.getString("notId"); @@ -79,6 +84,7 @@ protected void replyToMessage(final Ejson ejson, final int notId, final CharSequ Request request = new Request.Builder() .header("x-auth-token", ejson.token()) .header("x-user-id", ejson.userId()) + .header("User-Agent", NotificationHelper.getUserAgent()) .url(String.format("%s/api/v1/chat.sendMessage", serverURL)) .post(body) .build(); @@ -120,7 +126,7 @@ protected String buildMessage(String rid, String message, Ejson ejson) { String id = getMessageId(); // Use the new content structure approach - Encryption.EncryptionContent content = Encryption.shared.encryptMessageContent(message, id, ejson); + Encryption.EncryptionContent content = Encryption.shared.encryptMessageContent(message, id, ejson, mContext); Map msgMap = new HashMap(); msgMap.put("_id", id); diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfBroadcast.kt b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfBroadcast.kt new file mode 100644 index 00000000000..d5aa014fe8c --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfBroadcast.kt @@ -0,0 +1,73 @@ +package chat.rocket.reactnative.notification + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.util.Log +import chat.rocket.reactnative.MainActivity +import com.google.gson.GsonBuilder + +/** + * Handles video conference notification actions (accept/decline). + * Stores the action for the JS layer to process when the app opens. + */ +class VideoConfBroadcast : BroadcastReceiver() { + + companion object { + private const val TAG = "RocketChat.VideoConf" + } + + override fun onReceive(context: Context, intent: Intent) { + val action = intent.action + val extras = intent.extras + + if (action == null || extras == null) { + Log.w(TAG, "Received broadcast with null action or extras") + return + } + + Log.d(TAG, "Received video conf action: $action") + + val event = when (action) { + VideoConfNotification.ACTION_ACCEPT -> "accept" + VideoConfNotification.ACTION_DECLINE -> "decline" + else -> { + Log.w(TAG, "Unknown action: $action") + return + } + } + + // Cancel the notification + val notificationId = extras.getInt("notificationId", 0) + if (notificationId != 0) { + VideoConfNotification.cancelById(context, notificationId) + } + + // Build data for JS layer + val data = mapOf( + "notificationType" to (extras.getString("notificationType") ?: "videoconf"), + "rid" to (extras.getString("rid") ?: ""), + "event" to event, + "caller" to mapOf( + "_id" to (extras.getString("callerId") ?: ""), + "name" to (extras.getString("callerName") ?: "") + ) + ) + + // Store action for the JS layer to pick up + val gson = GsonBuilder().create() + val jsonData = gson.toJson(data) + + VideoConfModule.storePendingAction(context, jsonData) + + Log.d(TAG, "Stored video conf action: $event for rid: ${extras.getString("rid")}") + + // Launch the app + val launchIntent = Intent(context, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + putExtras(extras) + putExtra("event", event) + } + context.startActivity(launchIntent) + } +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfModule.kt b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfModule.kt new file mode 100644 index 00000000000..d527a686434 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfModule.kt @@ -0,0 +1,104 @@ +package chat.rocket.reactnative.notification + +import android.content.Context +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.modules.core.DeviceEventManagerModule +import java.lang.ref.WeakReference + +/** + * Native module to expose video conference notification actions to JavaScript. + * Used to retrieve pending video conf actions when the app opens. + */ +class VideoConfModule(reactContext: ReactApplicationContext) : NativeVideoConfSpec(reactContext) { + + companion object { + private const val PREFS_NAME = "RocketChatPrefs" + private const val KEY_VIDEO_CONF_ACTION = "videoConfAction" + private const val EVENT_VIDEO_CONF_ACTION = "VideoConfAction" + + private var reactContextRef: WeakReference? = null + + /** + * Sets the React context reference for event emission. + */ + @JvmStatic + fun setReactContext(context: ReactApplicationContext) { + reactContextRef = WeakReference(context) + } + + /** + * Stores a video conference action and emits event to JS if app is running. + * Called from native code when user interacts with video conf notification. + */ + @JvmStatic + fun storePendingAction(context: Context, actionJson: String) { + context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + .edit() + .putString(KEY_VIDEO_CONF_ACTION, actionJson) + .apply() + + // Emit event to JS if React context is available (app is running) + emitVideoConfActionEvent(actionJson) + } + + /** + * Emits a video conf action event to JavaScript. + */ + private fun emitVideoConfActionEvent(actionJson: String) { + try { + reactContextRef?.get()?.let { context -> + if (context.hasActiveReactInstance()) { + context + .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) + .emit(EVENT_VIDEO_CONF_ACTION, actionJson) + } + } + } catch (e: Exception) { + // Ignore - React context not available + } + } + } + + init { + // Store reference for event emission + setReactContext(reactApplicationContext) + } + + /** + * Gets any pending video conference action. + * Returns null if no pending action. + */ + @ReactMethod + override fun getPendingAction(promise: Promise) { + try { + val prefs = reactApplicationContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + val action = prefs.getString(KEY_VIDEO_CONF_ACTION, null) + + // Clear the action after reading + action?.let { + prefs.edit().remove(KEY_VIDEO_CONF_ACTION).apply() + } + + promise.resolve(action) + } catch (e: Exception) { + promise.reject("ERROR", e.message) + } + } + + /** + * Clears any pending video conference action. + */ + @ReactMethod + override fun clearPendingAction() { + try { + reactApplicationContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + .edit() + .remove(KEY_VIDEO_CONF_ACTION) + .apply() + } catch (e: Exception) { + // Ignore errors + } + } +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfNotification.kt b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfNotification.kt new file mode 100644 index 00000000000..b783e33e1b0 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfNotification.kt @@ -0,0 +1,210 @@ +package chat.rocket.reactnative.notification + +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.media.AudioAttributes +import android.media.RingtoneManager +import android.os.Build +import android.os.Bundle +import android.util.Log +import androidx.core.app.NotificationCompat +import chat.rocket.reactnative.MainActivity + +/** + * Handles video conference call notifications with call-style UI. + * Displays incoming call notifications with Accept/Decline actions. + */ +class VideoConfNotification(private val context: Context) { + + companion object { + private const val TAG = "RocketChat.VideoConf" + + const val CHANNEL_ID = "video-conf-call" + const val CHANNEL_NAME = "Video Calls" + + const val ACTION_ACCEPT = "chat.rocket.reactnative.ACTION_VIDEO_CONF_ACCEPT" + const val ACTION_DECLINE = "chat.rocket.reactnative.ACTION_VIDEO_CONF_DECLINE" + const val EXTRA_NOTIFICATION_DATA = "notification_data" + + /** + * Cancels a video call notification by notification ID. + */ + @JvmStatic + fun cancelById(context: Context, notificationId: Int) { + val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager + manager?.cancel(notificationId) + Log.d(TAG, "Video call notification cancelled with ID: $notificationId") + } + } + + private val notificationManager: NotificationManager? = + context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager + + init { + createNotificationChannel() + } + + /** + * Creates the notification channel for video calls with high importance and ringtone sound. + */ + private fun createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel( + CHANNEL_ID, + CHANNEL_NAME, + NotificationManager.IMPORTANCE_HIGH + ).apply { + description = "Incoming video conference calls" + enableLights(true) + enableVibration(true) + lockscreenVisibility = Notification.VISIBILITY_PUBLIC + + // Set ringtone sound + val ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE) + val audioAttributes = AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) + .build() + setSound(ringtoneUri, audioAttributes) + } + + notificationManager?.createNotificationChannel(channel) + } + } + + /** + * Displays an incoming video call notification. + * + * @param bundle The notification data bundle + * @param ejson The parsed notification payload + */ + fun showIncomingCall(bundle: Bundle, ejson: Ejson) { + val rid = ejson.rid + // Video conf uses 'caller' field, regular messages use 'sender' + val callerId: String + val callerName: String + + if (ejson.caller != null) { + callerId = ejson.caller._id ?: "" + callerName = ejson.caller.name ?: "Unknown" + } else if (ejson.sender != null) { + // Fallback to sender if caller is not present + callerId = ejson.sender._id ?: "" + callerName = ejson.sender.name ?: ejson.senderName ?: "Unknown" + } else { + callerId = "" + callerName = "Unknown" + } + + // Generate unique notification ID from rid + callerId + val notificationIdStr = (rid + callerId).replace(Regex("[^A-Za-z0-9]"), "") + val notificationId = notificationIdStr.hashCode() + + Log.d(TAG, "Showing incoming call notification from: $callerName") + + // Create intent data for actions - include all required fields for JS + val intentData = Bundle().apply { + putString("rid", rid ?: "") + putString("notificationType", "videoconf") + putString("callerId", callerId) + putString("callerName", callerName) + putString("host", ejson.host ?: "") + putString("callId", ejson.callId ?: "") + putString("ejson", bundle.getString("ejson", "{}")) + putInt("notificationId", notificationId) + } + + Log.d(TAG, "Intent data - rid: $rid, callerId: $callerId, host: ${ejson.host}, callId: ${ejson.callId}") + + // Full screen intent - opens app when notification is tapped + val fullScreenIntent = Intent(context, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + putExtras(intentData) + putExtra("event", "default") + } + + val fullScreenPendingIntent = createPendingIntent(notificationId, fullScreenIntent) + + // Accept action - directly opens MainActivity (Android 12+ blocks trampoline pattern) + val acceptIntent = Intent(context, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + putExtras(intentData) + putExtra("event", "accept") + putExtra("videoConfAction", true) + action = "${ACTION_ACCEPT}_$notificationId" // Unique action to differentiate intents + } + + val acceptPendingIntent = createPendingIntent(notificationId + 1, acceptIntent) + + // Decline action - directly opens MainActivity + val declineIntent = Intent(context, MainActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP + putExtras(intentData) + putExtra("event", "decline") + putExtra("videoConfAction", true) + action = "${ACTION_DECLINE}_$notificationId" // Unique action to differentiate intents + } + + val declinePendingIntent = createPendingIntent(notificationId + 2, declineIntent) + + // Get icons + val packageName = context.packageName + val smallIconResId = context.resources.getIdentifier("ic_notification", "drawable", packageName) + + // Build notification + val builder = NotificationCompat.Builder(context, CHANNEL_ID).apply { + setSmallIcon(smallIconResId) + setContentTitle("Incoming call") + setContentText("Video call from $callerName") + priority = NotificationCompat.PRIORITY_HIGH + setCategory(NotificationCompat.CATEGORY_CALL) + setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + setAutoCancel(false) + setOngoing(true) + setFullScreenIntent(fullScreenPendingIntent, true) + setContentIntent(fullScreenPendingIntent) + addAction(0, "Decline", declinePendingIntent) + addAction(0, "Accept", acceptPendingIntent) + } + + // Set sound for pre-O devices + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + val ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE) + builder.setSound(ringtoneUri) + } + + // Show notification + notificationManager?.notify(notificationId, builder.build()) + Log.d(TAG, "Video call notification displayed with ID: $notificationId") + } + + /** + * Creates a PendingIntent with appropriate flags for the Android version. + */ + private fun createPendingIntent(requestCode: Int, intent: Intent): PendingIntent { + val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + } else { + PendingIntent.FLAG_UPDATE_CURRENT + } + return PendingIntent.getActivity(context, requestCode, intent, flags) + } + + /** + * Cancels a video call notification. + * + * @param rid The room ID + * @param callerId The caller's user ID + */ + fun cancelCall(rid: String, callerId: String) { + val notificationIdStr = (rid + callerId).replace(Regex("[^A-Za-z0-9]"), "") + val notificationId = notificationIdStr.hashCode() + + notificationManager?.cancel(notificationId) + Log.d(TAG, "Video call notification cancelled with ID: $notificationId") + } +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfTurboPackage.kt b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfTurboPackage.kt new file mode 100644 index 00000000000..42e3f3eb211 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/notification/VideoConfTurboPackage.kt @@ -0,0 +1,37 @@ +package chat.rocket.reactnative.notification + +import com.facebook.react.TurboReactPackage +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfoProvider + +/** + * React Native TurboModule package for video conference notification module. + */ +class VideoConfTurboPackage : TurboReactPackage() { + + override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { + return if (name == NativeVideoConfSpec.NAME) { + VideoConfModule(reactContext) + } else { + null + } + } + + override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { + return ReactModuleInfoProvider { + mapOf( + NativeVideoConfSpec.NAME to ReactModuleInfo( + NativeVideoConfSpec.NAME, + NativeVideoConfSpec.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit + false, // hasConstants + false, // isCxxModule + true // isTurboModule + ) + ) + } + } +} diff --git a/android/app/src/main/java/chat/rocket/reactnative/storage/Constants.java b/android/app/src/main/java/chat/rocket/reactnative/storage/Constants.java new file mode 100644 index 00000000000..6ae7d75f341 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/storage/Constants.java @@ -0,0 +1,30 @@ +package chat.rocket.reactnative.storage; + +/** + * Constants for SecureKeystore + * Copied from react-native-mmkv-storage to avoid dependency + * Original source: https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/android/src/main/java/com/ammarahmed/mmkv/Constants.java + */ +public class Constants { + + // Key Store + public static final String KEYSTORE_PROVIDER_1 = "AndroidKeyStore"; + public static final String KEYSTORE_PROVIDER_2 = "AndroidKeyStoreBCWorkaround"; + public static final String KEYSTORE_PROVIDER_3 = "AndroidOpenSSL"; + + public static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding"; + public static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding"; + + public static final String TAG = "SecureKeystore"; + + // Internal storage file + public static final String SKS_KEY_FILENAME = "SKS_KEY_FILE"; + public static final String SKS_DATA_FILENAME = "SKS_DATA_FILE"; + + public static final int DATA_TYPE_STRING = 1; + public static final int DATA_TYPE_INT = 2; + public static final int DATA_TYPE_BOOL = 3; + public static final int DATA_TYPE_MAP = 4; + public static final int DATA_TYPE_ARRAY = 5; +} + diff --git a/android/app/src/main/java/chat/rocket/reactnative/storage/MMKVKeyManager.java b/android/app/src/main/java/chat/rocket/reactnative/storage/MMKVKeyManager.java new file mode 100644 index 00000000000..8113c245758 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/storage/MMKVKeyManager.java @@ -0,0 +1,111 @@ +package chat.rocket.reactnative.storage; + +import android.content.Context; +import android.util.Log; + +import com.tencent.mmkv.MMKV; + +import java.util.UUID; + +/** + * MMKV Key Manager - Ensures encryption key exists for MMKV storage + * + * The old library (react-native-mmkv-storage) used encryption by default. + * The new library (react-native-mmkv) requires manually passing the encryption key. + * + * This class: + * - Reads existing encryption keys from SecureKeystore (for existing users) + * - Generates new encryption keys for fresh installs + * - Provides the encryption key to other native code via static getter + * + * Runs synchronously at app startup before React Native initializes. + */ +public class MMKVKeyManager { + private static final String TAG = "MMKVKeyManager"; + private static final String DEFAULT_INSTANCE_ID = "default"; + + // Static field to hold the encryption key for other native code + private static String encryptionKey = null; + private static Context appContext = null; + + /** + * Get the MMKV encryption key. + * Returns null if initialize() hasn't been called yet. + * + * @return The encryption key or null + */ + public static String getEncryptionKey() { + return encryptionKey; + } + + /** + * Ensures MMKV encryption key exists and caches it for other native code. + * - For existing users: reads the key from SecureKeystore + * - For fresh installs: generates a new key and stores it in SecureKeystore + * + * @param context Application context + */ + public static void initialize(Context context) { + appContext = context.getApplicationContext(); + + try { + Log.i(TAG, "Initializing MMKV encryption..."); + + // Initialize MMKV + MMKV.initialize(context); + + // Get or create the encryption key + SecureKeystore secureKeystore = new SecureKeystore(context); + String alias = toHex("com.MMKV." + DEFAULT_INSTANCE_ID); + String password = secureKeystore.getSecureKey(alias); + + if (password == null || password.isEmpty()) { + // Fresh install - generate a new encryption key + Log.i(TAG, "No existing encryption key found, generating new one..."); + password = UUID.randomUUID().toString(); + secureKeystore.setSecureKey(alias, password); + Log.i(TAG, "New encryption key generated and stored"); + } else { + Log.i(TAG, "Existing encryption key found"); + } + + // Cache the encryption key for other native code + encryptionKey = password; + + // Verify MMKV can be opened with this key + MMKV mmkv = MMKV.mmkvWithID(DEFAULT_INSTANCE_ID, MMKV.SINGLE_PROCESS_MODE, password); + if (mmkv != null) { + long keyCount = mmkv.count(); + Log.i(TAG, "MMKV initialized with encryption, " + keyCount + " keys found"); + } else { + Log.w(TAG, "MMKV instance is null after initialization"); + } + + } catch (Exception e) { + Log.e(TAG, "MMKV encryption initialization failed", e); + // Clear the key on failure to avoid partial state + encryptionKey = null; + } + } + + /** + * Convert string to hexadecimal (same as react-native-mmkv-storage) + * + * @param arg String to convert + * @return Hexadecimal representation + */ + private static String toHex(String arg) { + try { + byte[] bytes = arg.getBytes("UTF-8"); + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b & 0xff)); + } + return sb.toString(); + } catch (Exception e) { + Log.e(TAG, "Error converting string to hex", e); + return ""; + } + } +} + diff --git a/android/app/src/main/java/chat/rocket/reactnative/storage/SecureKeystore.java b/android/app/src/main/java/chat/rocket/reactnative/storage/SecureKeystore.java new file mode 100644 index 00000000000..5c861b305e0 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/storage/SecureKeystore.java @@ -0,0 +1,311 @@ +package chat.rocket.reactnative.storage; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Build; +import android.security.KeyPairGeneratorSpec; +import android.util.Log; + +import androidx.security.crypto.EncryptedSharedPreferences; +import androidx.security.crypto.MasterKey; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.IllegalViewOperationException; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.math.BigInteger; +import java.security.GeneralSecurityException; +import java.security.KeyPairGenerator; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Locale; + +import javax.crypto.Cipher; +import javax.crypto.CipherInputStream; +import javax.crypto.CipherOutputStream; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import javax.security.auth.x500.X500Principal; + +/** + * SecureKeystore implementation + * Copied from react-native-mmkv-storage to avoid dependency + * Original source: https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/android/src/main/java/com/ammarahmed/mmkv/SecureKeystore.java + * This manages encryption keys using Android Keystore System + */ +public class SecureKeystore { + + private SharedPreferences prefs; + private Context context; + private final String SharedPrefFileName = "rnmmkv.shareprefs"; + + private boolean useKeystore() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M; + } + + public SecureKeystore(ReactApplicationContext reactApplicationContext) { + context = reactApplicationContext; + if (!useKeystore()) { + try { + MasterKey key = new MasterKey.Builder(context) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .build(); + + // Filename for EncryptedSharedPreferences - must match react-native-mmkv-storage + // to maintain compatibility with existing encrypted preference files + // This hash was used by the original library and cannot be changed + prefs = EncryptedSharedPreferences.create( + context, + "e4b001df9a082298dd090bb7455c45d92fbd5dda.xml", + key, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM); + } catch (GeneralSecurityException | IOException | RuntimeException e) { + Log.e("SecureKeystore", "Failed to create encrypted shared preferences! Falling back to standard SharedPreferences", e); + prefs = context.getSharedPreferences(SharedPrefFileName, Context.MODE_PRIVATE); + } + } + } + + public SecureKeystore(Context context) { + this.context = context; + if (!useKeystore()) { + try { + MasterKey key = new MasterKey.Builder(context) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .build(); + + // Filename for EncryptedSharedPreferences - must match react-native-mmkv-storage + // to maintain compatibility with existing encrypted preference files + // This hash was used by the original library and cannot be changed + prefs = EncryptedSharedPreferences.create( + context, + "e4b001df9a082298dd090bb7455c45d92fbd5dda.xml", + key, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM); + } catch (GeneralSecurityException | IOException | RuntimeException e) { + Log.e("SecureKeystore", "Failed to create encrypted shared preferences! Falling back to standard SharedPreferences", e); + prefs = context.getSharedPreferences(SharedPrefFileName, Context.MODE_PRIVATE); + } + } + } + + public static boolean isRTL(Locale locale) { + final int directionality = Character.getDirectionality(locale.getDisplayName().charAt(0)); + return directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT || + directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC; + } + + public void setSecureKey(String key, String value) { + if (useKeystore()) { + try { + Locale initialLocale = Locale.getDefault(); + if (isRTL(initialLocale)) { + Locale.setDefault(Locale.ENGLISH); + setCipherText(context, key, value); + Locale.setDefault(initialLocale); + } else { + setCipherText(context, key, value); + } + } catch (Exception e) { + Log.e(Constants.TAG, "Error setting secure key", e); + } + } else { + try { + SharedPreferences.Editor editor = prefs.edit(); + editor.putString(key, value); + editor.apply(); + } catch (Exception e) { + Log.e(Constants.TAG, "Error setting key in prefs", e); + } + } + } + + public String getSecureKey(String key) { + if (useKeystore()) { + try { + String value = getPlainText(context, key); + return value; + } catch (FileNotFoundException fnfe) { + return null; + } catch (Exception e) { + Log.e(Constants.TAG, "Error getting secure key", e); + return null; + } + } else { + try { + String value = prefs.getString(key, null); + return value; + } catch (IllegalViewOperationException e) { + return null; + } + } + } + + public boolean removeSecureKey(String key) { + if (useKeystore()) { + try { + // Delete the cipher text file + String filename = Constants.SKS_DATA_FILENAME + key; + boolean deleted = context.deleteFile(filename); + Log.i(Constants.TAG, "Removed secure key file: " + deleted); + return deleted; + } catch (Exception e) { + Log.e(Constants.TAG, "Error removing secure key", e); + return false; + } + } else { + try { + SharedPreferences.Editor editor = prefs.edit(); + editor.remove(key); + editor.apply(); + Log.i(Constants.TAG, "Removed secure key from prefs"); + return true; + } catch (Exception e) { + Log.e(Constants.TAG, "Error removing key from prefs", e); + return false; + } + } + } + + private PublicKey getOrCreatePublicKey(Context context, String alias) throws GeneralSecurityException, IOException { + KeyStore keyStore = KeyStore.getInstance(getKeyStore()); + keyStore.load(null); + + if (!keyStore.containsAlias(alias) || keyStore.getCertificate(alias) == null) { + Log.i(Constants.TAG, "no existing asymmetric keys for alias"); + + Calendar start = Calendar.getInstance(); + Calendar end = Calendar.getInstance(); + end.add(Calendar.YEAR, 50); + KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context) + .setAlias(alias) + .setSubject(new X500Principal("CN=" + alias)) + .setSerialNumber(BigInteger.ONE) + .setStartDate(start.getTime()) + .setEndDate(end.getTime()) + .build(); + + KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", getKeyStore()); + generator.initialize(spec); + generator.generateKeyPair(); + + Log.i(Constants.TAG, "created new asymmetric keys for alias"); + } + + return keyStore.getCertificate(alias).getPublicKey(); + } + + private byte[] encryptRsaPlainText(PublicKey publicKey, byte[] plainTextBytes) throws GeneralSecurityException, IOException { + Cipher cipher = Cipher.getInstance(Constants.RSA_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return encryptCipherText(cipher, plainTextBytes); + } + + private byte[] encryptAesPlainText(SecretKey secretKey, String plainText) throws GeneralSecurityException, IOException { + Cipher cipher = Cipher.getInstance(Constants.AES_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + return encryptCipherText(cipher, plainText); + } + + private byte[] encryptCipherText(Cipher cipher, String plainText) throws GeneralSecurityException, IOException { + return encryptCipherText(cipher, plainText.getBytes("UTF-8")); + } + + private byte[] encryptCipherText(Cipher cipher, byte[] plainTextBytes) throws GeneralSecurityException, IOException { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher); + cipherOutputStream.write(plainTextBytes); + cipherOutputStream.close(); + return outputStream.toByteArray(); + } + + private SecretKey getOrCreateSecretKey(Context context, String alias) throws GeneralSecurityException, IOException { + try { + return getSymmetricKey(context, alias); + } catch (FileNotFoundException fnfe) { + Log.i(Constants.TAG, "no existing symmetric key for alias"); + + KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); + //32bytes / 256bits AES key + keyGenerator.init(256); + SecretKey secretKey = keyGenerator.generateKey(); + PublicKey publicKey = getOrCreatePublicKey(context, alias); + Storage.writeValues(context, Constants.SKS_KEY_FILENAME + alias, + encryptRsaPlainText(publicKey, secretKey.getEncoded())); + + Log.i(Constants.TAG, "created new symmetric keys for alias"); + return secretKey; + } + } + + public void setCipherText(Context context, String alias, String input) throws GeneralSecurityException, IOException { + Storage.writeValues(context, Constants.SKS_DATA_FILENAME + alias, + encryptAesPlainText(getOrCreateSecretKey(context, alias), input)); + } + + private PrivateKey getPrivateKey(String alias) throws GeneralSecurityException, IOException { + KeyStore keyStore = KeyStore.getInstance(getKeyStore()); + keyStore.load(null); + return (PrivateKey) keyStore.getKey(alias, null); + } + + private byte[] decryptRsaCipherText(PrivateKey privateKey, byte[] cipherTextBytes) throws GeneralSecurityException, IOException { + Cipher cipher = Cipher.getInstance(Constants.RSA_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + return decryptCipherText(cipher, cipherTextBytes); + } + + private byte[] decryptAesCipherText(SecretKey secretKey, byte[] cipherTextBytes) throws GeneralSecurityException, IOException { + Cipher cipher = Cipher.getInstance(Constants.AES_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + return decryptCipherText(cipher, cipherTextBytes); + } + + private byte[] decryptCipherText(Cipher cipher, byte[] cipherTextBytes) throws IOException { + ByteArrayInputStream bais = new ByteArrayInputStream(cipherTextBytes); + CipherInputStream cipherInputStream = new CipherInputStream(bais, cipher); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[256]; + int bytesRead = cipherInputStream.read(buffer); + while (bytesRead != -1) { + baos.write(buffer, 0, bytesRead); + bytesRead = cipherInputStream.read(buffer); + } + return baos.toByteArray(); + } + + private SecretKey getSymmetricKey(Context context, String alias) throws GeneralSecurityException, IOException { + byte[] cipherTextBytes = Storage.readValues(context, Constants.SKS_KEY_FILENAME + alias); + return new SecretKeySpec(decryptRsaCipherText(getPrivateKey(alias), cipherTextBytes), Constants.AES_ALGORITHM); + } + + public String getPlainText(Context context, String alias) throws GeneralSecurityException, IOException { + SecretKey secretKey = getSymmetricKey(context, alias); + byte[] cipherTextBytes = Storage.readValues(context, Constants.SKS_DATA_FILENAME + alias); + return new String(decryptAesCipherText(secretKey, cipherTextBytes), "UTF-8"); + } + + private String getKeyStore() { + try { + KeyStore.getInstance(Constants.KEYSTORE_PROVIDER_1); + return Constants.KEYSTORE_PROVIDER_1; + } catch (Exception err) { + try { + KeyStore.getInstance(Constants.KEYSTORE_PROVIDER_2); + return Constants.KEYSTORE_PROVIDER_2; + } catch (Exception e) { + return Constants.KEYSTORE_PROVIDER_3; + } + } + } +} + diff --git a/android/app/src/main/java/chat/rocket/reactnative/storage/SecureStorage.java b/android/app/src/main/java/chat/rocket/reactnative/storage/SecureStorage.java new file mode 100644 index 00000000000..ed48822a579 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/storage/SecureStorage.java @@ -0,0 +1,177 @@ +package chat.rocket.reactnative.storage; + +import android.content.Context; +import android.content.SharedPreferences; +import android.security.keystore.KeyGenParameterSpec; +import android.security.keystore.KeyProperties; +import android.util.Base64; +import android.util.Log; + +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; + +import java.nio.charset.StandardCharsets; +import java.security.KeyStore; +import java.util.UUID; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; + +public class SecureStorage extends ReactContextBaseJavaModule { + private static final String TAG = "SecureStorage"; + private static final String KEYSTORE_PROVIDER = "AndroidKeyStore"; + private static final String PREFS_NAME = "SecureStoragePrefs"; + private static final String TRANSFORMATION = "AES/GCM/NoPadding"; + private static final int GCM_TAG_LENGTH = 128; + + private final ReactApplicationContext reactContext; + + public SecureStorage(ReactApplicationContext reactContext) { + super(reactContext); + this.reactContext = reactContext; + } + + @Override + public String getName() { + return "SecureStorage"; + } + + @ReactMethod + public void getSecureKey(String alias, Promise promise) { + try { + String value = getSecureKeyInternal(alias); + promise.resolve(value); + } catch (Exception e) { + Log.e(TAG, "Error getting secure key: " + alias, e); + promise.resolve(null); + } + } + + @ReactMethod + public void setSecureKey(String alias, String value, Promise promise) { + try { + setSecureKeyInternal(alias, value); + promise.resolve(true); + } catch (Exception e) { + Log.e(TAG, "Error setting secure key: " + alias, e); + promise.reject("SET_SECURE_KEY_ERROR", e); + } + } + + // Internal methods (can be called from Java) + public String getSecureKeyInternal(String alias) { + try { + SharedPreferences prefs = reactContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + String encryptedValue = prefs.getString(alias, null); + + if (encryptedValue == null) { + return null; + } + + // Decrypt the value + KeyStore keyStore = KeyStore.getInstance(KEYSTORE_PROVIDER); + keyStore.load(null); + + if (!keyStore.containsAlias(alias)) { + return null; + } + + SecretKey secretKey = (SecretKey) keyStore.getKey(alias, null); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + + // Split IV and encrypted data + byte[] combined = Base64.decode(encryptedValue, Base64.DEFAULT); + byte[] iv = new byte[12]; + byte[] encrypted = new byte[combined.length - 12]; + System.arraycopy(combined, 0, iv, 0, 12); + System.arraycopy(combined, 12, encrypted, 0, encrypted.length); + + GCMParameterSpec spec = new GCMParameterSpec(GCM_TAG_LENGTH, iv); + cipher.init(Cipher.DECRYPT_MODE, secretKey, spec); + + byte[] decrypted = cipher.doFinal(encrypted); + return new String(decrypted, StandardCharsets.UTF_8); + } catch (Exception e) { + Log.e(TAG, "Error retrieving secure key", e); + return null; + } + } + + public void setSecureKeyInternal(String alias, String value) throws Exception { + KeyStore keyStore = KeyStore.getInstance(KEYSTORE_PROVIDER); + keyStore.load(null); + + // Create key if it doesn't exist + if (!keyStore.containsAlias(alias)) { + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, + KEYSTORE_PROVIDER + ); + keyGenerator.init( + new KeyGenParameterSpec.Builder( + alias, + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT + ) + .setBlockModes(KeyProperties.BLOCK_MODE_GCM) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) + .setRandomizedEncryptionRequired(true) + .build() + ); + keyGenerator.generateKey(); + } + + // Encrypt the value + SecretKey secretKey = (SecretKey) keyStore.getKey(alias, null); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(Cipher.ENCRYPT_MODE, secretKey); + + byte[] iv = cipher.getIV(); + byte[] encrypted = cipher.doFinal(value.getBytes(StandardCharsets.UTF_8)); + + // Combine IV and encrypted data + byte[] combined = new byte[iv.length + encrypted.length]; + System.arraycopy(iv, 0, combined, 0, iv.length); + System.arraycopy(encrypted, 0, combined, iv.length, encrypted.length); + + String encryptedValue = Base64.encodeToString(combined, Base64.DEFAULT); + + // Store in SharedPreferences + SharedPreferences prefs = reactContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); + prefs.edit().putString(alias, encryptedValue).apply(); + } + + // Generate a secure key if it doesn't exist + public String getOrCreateSecureKey(String alias) { + String key = getSecureKeyInternal(alias); + if (key == null) { + // Generate a new random key + key = UUID.randomUUID().toString(); + try { + setSecureKeyInternal(alias, key); + } catch (Exception e) { + Log.e(TAG, "Error creating secure key", e); + return null; + } + } + return key; + } + + /** + * Synchronous method to get the MMKV encryption key. + * Returns the key cached by MMKVKeyManager at app startup. + * Used by JavaScript to initialize MMKV with the same encryption key as native code. + */ + @ReactMethod(isBlockingSynchronousMethod = true) + public String getMMKVEncryptionKey() { + String key = MMKVKeyManager.getEncryptionKey(); + if (key == null) { + Log.w(TAG, "getMMKVEncryptionKey called but encryption key is null"); + } + return key; + } +} + diff --git a/android/app/src/main/java/chat/rocket/reactnative/storage/SecureStoragePackage.java b/android/app/src/main/java/chat/rocket/reactnative/storage/SecureStoragePackage.java new file mode 100644 index 00000000000..57f468e6929 --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/storage/SecureStoragePackage.java @@ -0,0 +1,25 @@ +package chat.rocket.reactnative.storage; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class SecureStoragePackage implements ReactPackage { + @Override + public List createNativeModules(ReactApplicationContext reactContext) { + List modules = new ArrayList<>(); + modules.add(new SecureStorage(reactContext)); + return modules; + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } +} + diff --git a/android/app/src/main/java/chat/rocket/reactnative/storage/Storage.java b/android/app/src/main/java/chat/rocket/reactnative/storage/Storage.java new file mode 100644 index 00000000000..b086242b65b --- /dev/null +++ b/android/app/src/main/java/chat/rocket/reactnative/storage/Storage.java @@ -0,0 +1,36 @@ +package chat.rocket.reactnative.storage; + +import android.content.Context; + +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * Storage helper for SecureKeystore + * Copied from react-native-mmkv-storage to avoid dependency + * Original source: https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/android/src/main/java/com/ammarahmed/mmkv/Storage.java + */ +public final class Storage { + + public static void writeValues(Context context, String filename, byte[] bytes) throws IOException { + FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE); + fos.write(bytes); + fos.close(); + } + + public static byte[] readValues(Context context, String filename) throws IOException { + FileInputStream fis = context.openFileInput(filename); + ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); + byte[] buffer = new byte[1024]; + int bytesRead = fis.read(buffer); + while(bytesRead != -1) { + baos.write(buffer, 0, bytesRead); + bytesRead = fis.read(buffer); + } + return baos.toByteArray(); + } + +} + diff --git a/app/containers/ActionSheet/Item.tsx b/app/containers/ActionSheet/Item.tsx index 33e2d3bb476..0716b430eea 100644 --- a/app/containers/ActionSheet/Item.tsx +++ b/app/containers/ActionSheet/Item.tsx @@ -26,7 +26,7 @@ export const Item = React.memo(({ item, hide }: IActionSheetItem) => { hide(); item?.onPress(); } else { - EventEmitter.emit(LISTENER, { message: I18n.t('You_dont_have_permission_to_perform_this_action') }); + EventEmitter.emit(LISTENER, { message: item?.disabledReason || I18n.t('You_dont_have_permission_to_perform_this_action') }); } }; diff --git a/app/containers/ActionSheet/Provider.tsx b/app/containers/ActionSheet/Provider.tsx index 833dde87fd3..d74043234e3 100644 --- a/app/containers/ActionSheet/Provider.tsx +++ b/app/containers/ActionSheet/Provider.tsx @@ -1,5 +1,6 @@ import hoistNonReactStatics from 'hoist-non-react-statics'; import React, { createRef, type ForwardedRef, forwardRef, useContext } from 'react'; +import { type AccessibilityRole } from 'react-native'; import { type TIconsName } from '../CustomIcon'; import ActionSheet from './ActionSheet'; @@ -14,6 +15,8 @@ export type TActionSheetOptionsItem = { onPress: () => void; right?: () => React.ReactElement; enabled?: boolean; + accessibilityRole?: AccessibilityRole; + disabledReason?: string; }; export type TActionSheetOptions = { diff --git a/app/containers/AudioPlayer/PlaybackSpeed.tsx b/app/containers/AudioPlayer/PlaybackSpeed.tsx index 779d53db72a..68fcc886bcb 100644 --- a/app/containers/AudioPlayer/PlaybackSpeed.tsx +++ b/app/containers/AudioPlayer/PlaybackSpeed.tsx @@ -13,7 +13,7 @@ const PlaybackSpeed = () => { const { colors } = useTheme(); const onPress = () => { - const speedIndex = AVAILABLE_SPEEDS.indexOf(playbackSpeed); + const speedIndex = AVAILABLE_SPEEDS.indexOf(playbackSpeed as number); const nextSpeedIndex = speedIndex + 1 >= AVAILABLE_SPEEDS.length ? 0 : speedIndex + 1; setPlaybackSpeed(AVAILABLE_SPEEDS[nextSpeedIndex]); }; diff --git a/app/containers/Avatar/Avatar.tsx b/app/containers/Avatar/Avatar.tsx index 0e8f2476f27..b203f290413 100644 --- a/app/containers/Avatar/Avatar.tsx +++ b/app/containers/Avatar/Avatar.tsx @@ -34,7 +34,8 @@ const Avatar = React.memo( avatarExternalProviderUrl, roomAvatarExternalProviderUrl, cdnPrefix, - accessibilityLabel + accessibilityLabel, + accessible = true }: IAvatar) => { if ((!text && !avatar && !emoji && !rid) || !server) { return null; @@ -96,7 +97,7 @@ const Avatar = React.memo( if (onPress) { image = ( - + {image} ); @@ -104,7 +105,7 @@ const Avatar = React.memo( return ( diff --git a/app/containers/Avatar/AvatarContainer.tsx b/app/containers/Avatar/AvatarContainer.tsx index f7b390ca6eb..d9e610eda7b 100644 --- a/app/containers/Avatar/AvatarContainer.tsx +++ b/app/containers/Avatar/AvatarContainer.tsx @@ -20,7 +20,8 @@ const AvatarContainer = ({ getCustomEmoji, isStatic, rid, - accessibilityLabel + accessibilityLabel, + accessible }: IAvatar): React.ReactElement => { const server = useAppSelector(state => state.server.server); const serverVersion = useAppSelector(state => state.server.version); @@ -71,6 +72,7 @@ const AvatarContainer = ({ serverVersion={serverVersion} cdnPrefix={cdnPrefix} accessibilityLabel={accessibilityLabel} + accessible={accessible} /> ); }; diff --git a/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap b/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap index 5135b155127..97d9de5ea35 100644 --- a/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap +++ b/app/containers/Avatar/__snapshots__/Avatar.test.tsx.snap @@ -608,40 +608,54 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` } testID="avatar" > - + + height={56} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/troll.jpg", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 56, + "width": 56, + } + } + transition={null} + width={56} + /> + `; diff --git a/app/containers/Avatar/interfaces.ts b/app/containers/Avatar/interfaces.ts index 7dcbe27c748..ff01b143473 100644 --- a/app/containers/Avatar/interfaces.ts +++ b/app/containers/Avatar/interfaces.ts @@ -26,4 +26,5 @@ export interface IAvatar { roomAvatarExternalProviderUrl?: string; cdnPrefix?: string; accessibilityLabel?: string; + accessible?: boolean; } diff --git a/app/containers/Chip/Chip.stories.tsx b/app/containers/Chip/Chip.stories.tsx index d81eaf0ed24..eb2563fa02b 100644 --- a/app/containers/Chip/Chip.stories.tsx +++ b/app/containers/Chip/Chip.stories.tsx @@ -15,9 +15,9 @@ export default { title: 'Chip' }; -const ChipWrapped = ({ avatar, text, onPress, testID, style }: IChip) => ( +const ChipWrapped = ({ avatar, text, onPress, testID, style, fullWidth }: IChip) => ( - + ); @@ -30,3 +30,5 @@ export const ChipWithoutAvatar = () => ; export const ChipWithoutAvatarAndIcon = () => ; + +export const ChipFullWidth = () => ; diff --git a/app/containers/Chip/__snapshots__/Chip.test.tsx.snap b/app/containers/Chip/__snapshots__/Chip.test.tsx.snap index 97e0d22a80b..58de1a6452d 100644 --- a/app/containers/Chip/__snapshots__/Chip.test.tsx.snap +++ b/app/containers/Chip/__snapshots__/Chip.test.tsx.snap @@ -1,5 +1,108 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Story Snapshots: ChipFullWidth should match snapshot 1`] = ` + + + + + + Full Width Text With Long Text That Should Be Wrapped + + + + + +`; + exports[`Story Snapshots: ChipText should match snapshot 1`] = ` ; + fullWidth?: boolean; } -const Chip = ({ avatar, text, onPress, testID, style }: IChip) => { +const Chip = ({ avatar, text, onPress, testID, style, fullWidth }: IChip) => { const { colors } = useTheme(); return ( @@ -49,7 +50,8 @@ const Chip = ({ avatar, text, onPress, testID, style }: IChip) => { style={({ pressed }) => [ styles.pressable, { - backgroundColor: pressed ? colors.surfaceNeutral : colors.surfaceHover + backgroundColor: pressed ? colors.surfaceNeutral : colors.buttonBackgroundSecondaryDefault, + maxWidth: fullWidth ? undefined : styles.pressable.maxWidth }, style ]} @@ -60,7 +62,7 @@ const Chip = ({ avatar, text, onPress, testID, style }: IChip) => { }}> {avatar ? : null} - + {text} diff --git a/app/containers/CustomIcon/index.tsx b/app/containers/CustomIcon/index.tsx index 4c92ec859e5..3a20c8c5a5d 100644 --- a/app/containers/CustomIcon/index.tsx +++ b/app/containers/CustomIcon/index.tsx @@ -1,21 +1,30 @@ import React, { memo } from 'react'; -import { createIconSetFromIcoMoon } from 'react-native-vector-icons'; -import type { IconProps } from 'react-native-vector-icons/Icon'; +import { createIconSetFromIcoMoon } from '@expo/vector-icons'; +import type { StyleProp, TextStyle } from 'react-native'; import { type mappedIcons } from './mappedIcons'; import { useTheme } from '../../theme'; import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; - -const icoMoonConfig = require('./selection.json'); +import icoMoonConfig from './selection.json'; export const IconSet = createIconSetFromIcoMoon(icoMoonConfig, 'custom', 'custom.ttf'); +const glyphMap = IconSet.getRawGlyphMap + ? IconSet.getRawGlyphMap() + : icoMoonConfig.icons?.reduce((map: Record, glyph: any) => { + map[glyph.icon.name] = glyph.icon.code; + return map; + }, {}) || {}; + +export const hasIcon = (name: string) => Object.prototype.hasOwnProperty.call(glyphMap, name); + export type TIconsName = keyof typeof mappedIcons; -export interface ICustomIcon extends IconProps { +export interface ICustomIcon extends React.ComponentProps { name: TIconsName; size: number; color?: string; + style?: StyleProp; } const CustomIcon = memo(({ name, size, color, style, ...props }: ICustomIcon): React.ReactElement => { diff --git a/app/containers/CustomIcon/mappedIcons.js b/app/containers/CustomIcon/mappedIcons.js index b55ae922ff4..1bf3d4d5429 100644 --- a/app/containers/CustomIcon/mappedIcons.js +++ b/app/containers/CustomIcon/mappedIcons.js @@ -106,6 +106,7 @@ export const mappedIcons = { 'google-monochromatic': 59657, 'group-by-type': 59757, 'hamburguer': 59758, + 'hash-shield': 59878, 'history': 59759, 'home': 59760, 'ignore': 59740, @@ -202,6 +203,7 @@ export const mappedIcons = { 'sun': 59847, 'support': 59848, 'team': 59849, + 'team-shield': 59877, 'teams': 59751, 'teams-private': 59750, 'text-format': 59839, diff --git a/app/containers/CustomIcon/selection.json b/app/containers/CustomIcon/selection.json index 4537cb4a805..ee13b9c0d91 100644 --- a/app/containers/CustomIcon/selection.json +++ b/app/containers/CustomIcon/selection.json @@ -1 +1 @@ -{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M727.050 406.195c12.259-12.73 11.878-32.986-0.854-45.245-12.73-12.259-32.986-11.878-45.245 0.854l-254.285 264.061-115.615-120.061c-12.259-12.733-32.516-13.114-45.247-0.854s-13.113 32.515-0.854 45.245l138.666 144c6.032 6.266 14.355 9.805 23.050 9.805 8.698 0 17.021-3.539 23.053-9.805l277.331-288z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["check-single"],"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]}},"attrs":[{}],"properties":{"order":1151,"id":226,"name":"check-single","prevSize":32,"code":59876},"setIdx":0,"setId":2,"iconIdx":0},{"icon":{"paths":["M599.050 406.195c12.259-12.73 11.878-32.986-0.854-45.245-12.73-12.259-32.986-11.878-45.245 0.854l-254.284 264.061-115.616-120.061c-12.259-12.733-32.516-13.114-45.247-0.854s-13.113 32.515-0.854 45.245l138.667 144c6.032 6.266 14.354 9.805 23.050 9.805s17.018-3.539 23.052-9.805l277.331-288z","M887.021 406.227c12.275-12.714 11.92-32.973-0.794-45.248s-32.973-11.92-45.248 0.794l-255.040 264.157-50.918-52.739c-12.275-12.714-32.534-13.069-45.248-0.794s-13.069 32.534-0.794 45.248l73.939 76.582c6.029 6.246 14.339 9.773 23.021 9.773s16.992-3.526 23.021-9.773l278.061-288z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["check-double"],"grid":0},"attrs":[{},{}],"properties":{"order":1150,"id":0,"name":"check-double","prevSize":32,"code":59875},"setIdx":0,"setId":2,"iconIdx":1},{"icon":{"paths":["M511.997 256c35.347 0 64-28.654 64-64s-28.653-64-64-64c-35.344 0-64 28.654-64 64s28.656 64 64 64zM639.997 192c0 70.692-57.306 128-128 128-70.691 0-128-57.308-128-128s57.309-128 128-128c70.694 0 128 57.308 128 128z","M192.859 431.645c0.669 1.446 2.097 3.488 5.957 5.232 18.33 8.272 67.426 22.054 115.377 34.39 23.244 5.981 45.187 11.366 61.327 15.261 8.067 1.946 14.672 3.517 19.258 4.598l7.078 1.664c0 0 0.026 0.003-0.218 1.046l0.218-1.046c8.33 1.933 15.562 7.123 20.042 14.406 4.48 7.28 5.859 16.054 3.834 24.358l-83.856 343.437c-0.483 1.984-1.155 3.914-2.006 5.77-1.155 2.509-1.242 5.302-0.272 7.853 0.982 2.573 3.053 4.893 6.006 6.237 2.976 1.357 6.438 1.523 9.568 0.435 3.114-1.082 5.44-3.238 6.688-5.754 0.362-0.73 0.749-1.443 1.165-2.144l121.434-204.461c5.766-9.706 16.224-15.658 27.514-15.658 11.293 0 21.747 5.952 27.514 15.658l121.437 204.461c0.413 0.701 0.803 1.414 1.165 2.144 1.245 2.515 3.571 4.672 6.685 5.754 3.13 1.088 6.592 0.922 9.568-0.435 2.957-1.344 5.027-3.664 6.006-6.237 0.97-2.55 0.883-5.344-0.269-7.853-0.854-1.856-1.526-3.786-2.010-5.77l-83.853-343.437c-2.029-8.304-0.65-17.075 3.83-24.358 4.48-7.28 11.686-12.467 20.013-14.4l0.266 1.139c-0.262-1.139-0.266-1.139-0.266-1.139l1.821-0.426 5.283-1.245c4.582-1.082 11.184-2.653 19.248-4.598 16.138-3.894 38.074-9.28 61.312-15.261 47.936-12.333 97.046-26.118 115.424-34.4 3.888-1.75 5.322-3.802 5.994-5.248 0.813-1.763 1.155-4.179 0.557-6.861-0.602-2.678-1.974-4.858-3.629-6.259-1.402-1.187-3.76-2.499-8.109-2.499h-615.975c-4.316 0-6.656 1.302-8.052 2.486-1.647 1.402-3.026 3.581-3.628 6.272s-0.26 5.12 0.556 6.886zM172.486 495.21c-75.805-34.218-48.392-143.21 31.498-143.21h615.975c79.907 0 107.44 108.989 31.478 143.216-24.554 11.066-79.939 26.24-125.766 38.032-21.494 5.533-41.85 10.554-57.651 14.384l75.597 309.616c6.986 17.306 7.216 36.614 0.538 54.147-7.085 18.598-21.283 33.501-39.283 41.699-17.978 8.189-38.474 9.126-57.123 2.64-18.234-6.342-33.469-19.36-42.39-36.566l-93.386-157.232-93.386 157.232c-8.918 17.206-24.157 30.224-42.387 36.566-18.653 6.486-39.146 5.549-57.126-2.64-18-8.198-32.198-23.101-39.282-41.699-6.678-17.533-6.449-36.842 0.539-54.147l75.595-309.613c-15.808-3.83-36.172-8.854-57.676-14.387-45.829-11.789-101.229-26.966-125.761-38.038z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["accessibility"],"grid":0},"attrs":[{},{}],"properties":{"order":1147,"id":1,"name":"accessibility","prevSize":32,"code":59874},"setIdx":0,"setId":2,"iconIdx":2},{"icon":{"paths":["M512 928c-229.75 0-416-186.246-416-416 0-229.75 186.25-416 416-416 229.754 0 416 186.25 416 416 0 229.754-186.246 416-416 416zM678.176 433.884c12.742-12.247 13.139-32.504 0.896-45.246-12.25-12.742-32.506-13.143-45.247-0.896l-207.030 198.991-68.644-65.834c-12.755-12.232-33.012-11.809-45.245 0.946s-11.809 33.012 0.946 45.245l90.819 87.1c12.39 11.885 31.948 11.872 44.324-0.026l229.183-220.28z"],"attrs":[{"fill":"rgb(20, 134, 96)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":0}]},"tags":["success-circle"],"grid":0},"attrs":[{"fill":"rgb(20, 134, 96)"}],"properties":{"order":1143,"id":2,"name":"success-circle","prevSize":32,"code":59869},"setIdx":0,"setId":2,"iconIdx":3},{"icon":{"paths":["M928 512c0-229.75-186.246-416-416-416-229.75 0-416 186.25-416 416 0 229.754 186.25 416 416 416 229.754 0 416-186.246 416-416zM662.63 361.373c12.493 12.497 12.493 32.758 0 45.254l-105.375 105.373 105.375 105.373c12.493 12.497 12.493 32.758 0 45.258-12.499 12.493-32.761 12.493-45.258 0l-105.373-105.375-105.373 105.375c-12.497 12.493-32.758 12.493-45.254 0-12.497-12.499-12.497-32.761 0-45.258l105.372-105.373-105.372-105.373c-12.497-12.497-12.497-32.758 0-45.254s32.758-12.497 45.254 0l105.373 105.372 105.373-105.372c12.497-12.497 32.758-12.497 45.258 0z"],"attrs":[{"fill":"rgb(212, 12, 38)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":1}]},"tags":["error-circle"],"grid":0},"attrs":[{"fill":"rgb(212, 12, 38)"}],"properties":{"order":1144,"id":3,"name":"error-circle","prevSize":32,"code":59873},"setIdx":0,"setId":2,"iconIdx":4},{"icon":{"paths":["M512 819.2c169.661 0 307.2-137.539 307.2-307.2s-137.539-307.2-307.2-307.2c-169.662 0-307.2 137.538-307.2 307.2s137.538 307.2 307.2 307.2z","M1024 512c0-282.77-229.228-512-512-512-282.77 0-512 229.23-512 512 0 282.772 229.23 512 512 512 282.772 0 512-229.228 512-512zM921.6 512c0 226.217-183.383 409.6-409.6 409.6-226.216 0-409.6-183.383-409.6-409.6 0-226.215 183.384-409.6 409.6-409.6 226.217 0 409.6 183.385 409.6 409.6z"],"attrs":[{"fill":"rgb(21, 111, 245)"},{"fill":"rgb(21, 111, 245)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912111124512431405712431908124569921291162451452241651":[{"f":2},{"f":2}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":4},{"f":4}]},"tags":["radio-checked"],"grid":0},"attrs":[{"fill":"rgb(21, 111, 245)"},{"fill":"rgb(21, 111, 245)"}],"properties":{"order":5,"id":4,"name":"radio-checked","prevSize":32,"code":59855},"setIdx":0,"setId":2,"iconIdx":5},{"icon":{"paths":["M512 0c282.767 0 512 229.23 512 512 0 282.767-229.233 512-512 512-282.77 0-512-229.233-512-512 0-282.77 229.23-512 512-512zM512 921.6c226.217 0 409.6-183.383 409.6-409.6 0-226.216-183.383-409.6-409.6-409.6-226.216 0-409.6 183.384-409.6 409.6 0 226.217 183.384 409.6 409.6 409.6z"],"attrs":[{"fill":"rgb(158, 162, 168)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912111124512431405712431908124569921291162451452241651":[{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":9}]},"tags":["radio-unchecked"],"grid":0},"attrs":[{"fill":"rgb(158, 162, 168)"}],"properties":{"order":4,"id":5,"name":"radio-unchecked","prevSize":32,"code":59867},"setIdx":0,"setId":2,"iconIdx":6},{"icon":{"paths":["M678.736 135.922c7.414-5.157 16.23-7.922 25.264-7.922s17.85 2.764 25.264 7.922c7.414 5.157 13.075 12.46 16.218 20.928l0.074 0.2 32.371 89.024 89.226 32.445c8.467 3.143 15.77 8.803 20.928 16.219 5.155 7.415 7.92 16.231 7.92 25.264 0 9.034-2.765 17.85-7.92 25.264-5.158 7.414-12.461 13.075-20.931 16.218l-0.198 0.074-89.024 32.371-32.445 89.226c-3.142 8.467-8.803 15.77-16.218 20.928-7.414 5.155-16.23 7.92-25.264 7.92s-17.85-2.765-25.264-7.92c-7.414-5.158-13.075-12.461-16.218-20.931l-0.074-0.198-32.371-89.024-89.226-32.445c-8.467-3.142-15.77-8.803-20.928-16.218-5.155-7.414-7.92-16.23-7.92-25.264 0-9.032 2.765-17.848 7.92-25.264 5.158-7.415 12.461-13.075 20.931-16.218l0.198-0.074 89.024-32.372 32.445-89.224c3.142-8.468 8.803-15.771 16.218-20.928zM713.437 384l7.533-20.717c2.224-6.029 5.725-11.504 10.269-16.045 4.541-4.544 10.016-8.045 16.045-10.269l0.128-0.045 46.541-16.925-46.669-16.971c-6.029-2.221-11.504-5.724-16.045-10.267-4.544-4.542-8.045-10.017-10.269-16.044l-0.045-0.128-16.925-46.541-16.97 46.669c-2.221 6.028-5.725 11.502-10.269 16.044-4.541 4.543-10.016 8.045-16.045 10.267l-0.128 0.047-46.541 16.924 46.669 16.97c6.029 2.221 11.504 5.725 16.045 10.269 4.544 4.541 8.045 10.016 10.269 16.045l0.045 0.128 16.925 46.541 9.437-25.952z","M323.091 265.629c8.256-6.153 18.346-9.629 28.909-9.629s20.653 3.477 28.909 9.629c8.224 6.127 14.17 14.542 17.402 23.873l0.067 0.191 47.674 140.467 130.595 50.883c9.696 3.856 17.67 10.64 23.126 19.046 5.44 8.381 8.227 18.118 8.227 27.91s-2.787 19.53-8.227 27.91c-5.456 8.406-13.434 15.19-23.126 19.046l-0.208 0.083-130.387 50.8-47.741 140.659c-3.232 9.328-9.178 17.744-17.402 23.872-8.256 6.15-18.346 9.629-28.909 9.629s-20.653-3.478-28.909-9.629c-8.223-6.128-14.17-14.544-17.402-23.875l-0.066-0.189-47.673-140.467-130.596-50.883c-9.694-3.856-17.669-10.64-23.125-19.046-5.442-8.381-8.228-18.118-8.228-27.91s2.787-19.53 8.228-27.91c5.456-8.406 13.431-15.19 23.125-19.046l0.208-0.083 130.388-50.8 47.739-140.658c3.233-9.331 9.18-17.746 17.403-23.873zM381.222 617.712l6.314-18.602c2.291-6.659 5.958-12.874 10.88-18.147 4.928-5.28 11.014-9.507 17.917-12.23l0.134-0.054 104.41-40.678-104.544-40.733c-6.902-2.723-12.989-6.95-17.917-12.23-4.922-5.274-8.589-11.488-10.88-18.147l-0.042-0.125-35.494-104.579-35.536 104.704c-2.291 6.659-5.959 12.874-10.881 18.147-4.929 5.28-11.015 9.507-17.916 12.23l-0.133 0.054-104.411 40.678 104.544 40.733c6.901 2.723 12.988 6.95 17.916 12.23 4.923 5.274 8.59 11.488 10.881 18.147l0.042 0.125 35.494 104.579 29.222-86.102z","M704 544c-9.034 0-17.85 2.765-25.264 7.92-7.414 5.158-13.075 12.461-16.218 20.928l-32.445 89.226-89.222 32.445c-8.47 3.142-15.773 8.803-20.931 16.218-5.155 7.414-7.92 16.23-7.92 25.264s2.765 17.85 7.92 25.264c5.158 7.414 12.461 13.075 20.928 16.218l89.226 32.445 32.445 89.222c3.142 8.47 8.803 15.773 16.218 20.931 7.414 5.155 16.23 7.92 25.264 7.92s17.85-2.765 25.264-7.92c7.414-5.158 13.075-12.461 16.218-20.928l32.445-89.226 89.222-32.445c8.47-3.142 15.773-8.803 20.931-16.218 5.155-7.414 7.92-16.23 7.92-25.264s-2.765-17.85-7.92-25.264c-5.158-7.414-12.461-13.075-20.928-16.218l-89.226-32.445-32.445-89.222c-3.142-8.47-8.803-15.773-16.218-20.931-7.414-5.155-16.23-7.92-25.264-7.92zM720.97 779.283l-6.829 18.784-10.141 27.885-16.97-46.669c-2.224-6.029-5.725-11.504-10.269-16.045-4.541-4.544-10.016-8.048-16.045-10.269l-46.669-16.97 46.669-16.97c6.029-2.221 11.504-5.725 16.045-10.269 4.544-4.541 8.048-10.016 10.269-16.045l16.97-46.669 16.97 46.669c2.224 6.029 5.725 11.504 10.269 16.045 4.541 4.544 10.016 8.048 16.045 10.269l46.669 16.97-46.669 16.97c-6.029 2.224-11.504 5.725-16.045 10.269-4.544 4.541-8.045 10.016-10.269 16.045z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{},{}]},"tags":["stars"],"grid":0},"attrs":[{},{},{}],"properties":{"order":1139,"id":6,"name":"stars","prevSize":32,"code":59845},"setIdx":0,"setId":2,"iconIdx":7},{"icon":{"paths":["M810.666 512c0.022 8.358-2.173 16.579-6.371 23.862-4.195 7.283-10.253 13.382-17.581 17.706l-454.067 271.187c-7.658 4.576-16.425 7.075-25.4 7.235-8.975 0.163-17.832-2.016-25.656-6.314-7.749-4.23-14.205-10.397-18.702-17.872-4.498-7.472-6.875-15.981-6.888-24.65v-542.311c0.013-8.668 2.39-17.176 6.888-24.649s10.953-13.642 18.702-17.872c7.824-4.297 16.681-6.477 25.656-6.315s17.743 2.661 25.4 7.237l454.067 271.186c7.328 4.323 13.386 10.422 17.581 17.706 4.198 7.283 6.394 15.504 6.371 23.862z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["play-shape-filled"],"grid":0},"attrs":[{}],"properties":{"order":4,"id":7,"name":"play-shape-filled","prevSize":32,"code":59842},"setIdx":0,"setId":2,"iconIdx":8},{"icon":{"paths":["M832 245.333v533.332c0 14.147-5.693 27.712-15.824 37.712-10.131 10.003-23.872 15.622-38.202 15.622h-135.066c-14.33 0-28.070-5.619-38.202-15.622-10.131-10-15.824-23.565-15.824-37.712v-533.332c0-14.145 5.693-27.71 15.824-37.712s23.872-15.621 38.202-15.621h135.066c14.33 0 28.070 5.619 38.202 15.621s15.824 23.567 15.824 37.712zM381.091 192h-135.065c-14.329 0-28.070 5.619-38.202 15.621s-15.824 23.567-15.824 37.712v533.332c0 14.147 5.692 27.712 15.824 37.712 10.132 10.003 23.874 15.622 38.202 15.622h135.065c14.33 0 28.070-5.619 38.202-15.622 10.131-10 15.824-23.565 15.824-37.712v-533.332c0-14.145-5.693-27.71-15.824-37.712s-23.872-15.621-38.202-15.621z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["pause-shape-filled"],"grid":0},"attrs":[{}],"properties":{"order":3,"id":8,"name":"pause-shape-filled","prevSize":32,"code":59843},"setIdx":0,"setId":2,"iconIdx":9},{"icon":{"paths":["M593.158 920.006c-80.698 16.051-164.342 7.814-240.355-23.674-76.014-31.485-140.984-84.806-186.695-153.216s-70.108-148.842-70.108-231.117h64c0 69.619 20.644 137.674 59.323 195.562 38.678 57.885 93.653 103.002 157.973 129.645 64.32 26.64 135.094 33.613 203.376 20.029 68.282-13.581 131.002-47.107 180.23-96.333 49.226-49.229 82.752-111.949 96.333-180.23 13.584-68.282 6.611-139.056-20.029-203.376-26.643-64.32-71.76-119.295-129.645-157.973-57.888-38.678-125.942-59.323-195.562-59.323v-64c82.278 0 162.707 24.398 231.117 70.109s121.731 110.681 153.216 186.695v0c31.488 76.013 39.725 159.658 23.674 240.355-16.051 80.694-55.67 154.819-113.85 212.998s-132.304 97.798-212.998 113.85z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["loading"],"grid":0},"attrs":[{}],"properties":{"order":2,"id":9,"name":"loading","prevSize":32,"code":59844},"setIdx":0,"setId":2,"iconIdx":10},{"icon":{"paths":["M544 208c0-17.673-14.326-32-32-32s-32 14.327-32 32v271.997h-271.998c-17.673 0-32 14.326-32 32s14.327 32 32 32h271.998v272.003c0 17.674 14.326 32 32 32s32-14.326 32-32v-272.003l272-0.003c17.674 0 32-14.326 32-32s-14.326-32-32-32l-272 0.003v-271.997z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["add"],"defaultCode":59872,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":923,"name":"add","prevSize":32,"id":10,"code":59872},"setIdx":0,"setId":2,"iconIdx":11},{"icon":{"paths":["M512 928c-14.218 0-28.275-0.714-42.144-2.112-16.694-1.68-30.557-12.528-36.688-27.395l-40.538-98.304-98.162 40.838c-14.837 6.173-32.3 4.048-45.292-6.554-21.838-17.818-41.831-37.811-59.65-59.648-10.601-12.992-12.726-30.454-6.553-45.293l40.839-98.16-98.307-40.541c-14.864-6.131-25.714-19.994-27.395-36.688-1.396-13.869-2.111-27.926-2.111-42.144 0-14.214 0.714-28.275 2.11-42.141 1.681-16.694 12.531-30.557 27.395-36.688l98.308-40.541-40.84-98.163c-6.173-14.837-4.047-32.3 6.553-45.292 17.818-21.838 37.81-41.83 59.648-59.648 12.992-10.6 30.455-12.726 45.292-6.553l98.165 40.84 40.541-98.309c6.128-14.865 19.994-25.714 36.688-27.395 13.866-1.396 27.926-2.11 42.141-2.11s28.275 0.714 42.141 2.11c16.694 1.681 30.56 12.531 36.688 27.395l40.541 98.309 98.163-40.84c14.838-6.173 32.301-4.047 45.293 6.553 21.837 17.818 41.83 37.81 59.648 59.648 10.602 12.992 12.726 30.455 6.554 45.292l-40.842 98.163 98.31 40.541c14.864 6.131 25.712 19.994 27.392 36.688 1.398 13.866 2.112 27.926 2.112 42.141 0 14.218-0.714 28.275-2.112 42.144-1.68 16.694-12.528 30.557-27.395 36.688l-98.307 40.541 40.842 98.16c6.173 14.838 4.045 32.301-6.554 45.293-17.821 21.837-37.811 41.83-59.651 59.648-12.992 10.602-30.454 12.726-45.29 6.554l-98.163-40.838-40.538 98.304c-6.131 14.867-19.994 25.715-36.688 27.395-13.869 1.398-27.93 2.112-42.144 2.112zM444.451 757.984l43.386 105.2c7.981 0.541 16.038 0.816 24.163 0.816s16.182-0.275 24.163-0.816l43.382-105.2c9.456-22.925 35.731-33.808 58.627-24.285l105.056 43.709c12.157-10.602 23.578-22.022 34.179-34.179l-43.709-105.056c-9.526-22.893 1.36-49.171 24.282-58.624l105.203-43.386c0.541-7.978 0.816-16.038 0.816-24.163s-0.275-16.182-0.816-24.16l-105.203-43.386c-22.922-9.453-33.808-35.731-24.282-58.624l43.709-105.060c-10.602-12.156-22.022-23.577-34.176-34.177l-105.059 43.708c-22.896 9.525-49.171-1.359-58.627-24.283l-43.382-105.204c-7.981-0.54-16.038-0.815-24.163-0.815s-16.182 0.275-24.163 0.815l-43.386 105.204c-9.453 22.924-35.728 33.808-58.624 24.283l-105.058-43.708c-12.156 10.6-23.577 22.021-34.177 34.177l43.708 105.059c9.525 22.893-1.359 49.171-24.284 58.624l-105.203 43.386c-0.54 7.978-0.815 16.035-0.815 24.16 0 8.128 0.275 16.186 0.815 24.163l105.203 43.386c22.924 9.453 33.809 35.731 24.284 58.624l-43.708 105.056c10.601 12.157 22.022 23.578 34.178 34.179l105.056-43.709c22.896-9.523 49.171 1.36 58.624 24.285zM416 512c0-53.021 42.979-96 96-96s96 42.979 96 96c0 53.021-42.979 96-96 96s-96-42.979-96-96zM512 352c-88.365 0-160 71.635-160 160s71.635 160 160 160c88.365 0 160-71.635 160-160s-71.635-160-160-160z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["administration"],"defaultCode":59662,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":924,"name":"administration","prevSize":32,"id":11,"code":59662},"setIdx":0,"setId":2,"iconIdx":12},{"icon":{"paths":["M878.739 567.622c-41.853-41.136-161.235-29.824-220.925-22.282-59.005-35.997-98.458-85.706-126.243-158.73 13.379-55.194 34.646-139.185 18.525-191.98-14.41-89.82-129.674-80.907-146.141-20.227-15.094 55.195-1.373 131.988 24.013 230.034-34.304 81.936-85.421 191.984-121.441 255.062-68.611 35.312-161.235 89.821-174.957 158.384-11.321 54.166 89.194 189.238 261.063-106.96 76.845-25.37 160.547-56.566 234.65-68.909 64.835 34.97 140.65 58.282 191.421 58.282 87.478 0 96.054-96.678 60.035-132.675zM199.152 834.342c17.496-46.97 84.048-101.133 104.288-119.99-65.18 103.875-104.288 122.39-104.288 119.99zM479.082 180.918c25.386 0 22.986 110.047 6.176 139.873-15.094-47.653-14.752-139.873-6.176-139.873zM395.379 649.216c33.274-57.936 61.747-126.845 84.733-187.526 28.474 51.766 64.838 93.251 103.258 121.706-71.354 14.739-133.446 44.909-187.99 65.821zM846.835 632.074c0 0-17.152 20.57-127.958-26.739 120.413-8.912 140.307 18.512 127.958 26.739z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["adobe-reader-monochromatic"],"defaultCode":59663,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":925,"name":"adobe-reader-monochromatic","prevSize":32,"id":12,"code":59663},"setIdx":0,"setId":2,"iconIdx":13},{"icon":{"paths":["M512 192c-13.056 0-25.578 5.187-34.813 14.419-9.232 9.233-14.419 21.755-14.419 34.812v162.462c0 12.122-6.848 23.2-17.686 28.621l-253.082 126.541v49.498l232.493-46.499c9.402-1.882 19.149 0.554 26.563 6.63 7.414 6.080 11.712 15.162 11.712 24.749v108.307c0 8.486-3.37 16.624-9.373 22.627l-44.781 44.781v47.789l91.501-36.602c7.629-3.050 16.141-3.050 23.77 0l91.501 36.602v-47.789l-44.781-44.781c-6.003-6.003-9.373-14.141-9.373-22.627v-108.307c0-9.587 4.298-18.669 11.712-24.749 7.414-6.077 17.162-8.512 26.563-6.63l232.493 46.499v-49.498l-253.082-126.541c-10.838-5.421-17.686-16.499-17.686-28.621v-162.462c0-13.057-5.187-25.579-14.419-34.812-9.235-9.232-21.757-14.419-34.813-14.419zM431.933 161.164c21.235-21.235 50.035-33.164 80.067-33.164s58.832 11.93 80.067 33.164c21.235 21.235 33.165 50.036 33.165 80.066v142.686l253.078 126.538c10.842 5.421 17.69 16.502 17.69 28.624v108.307c0 9.587-4.298 18.669-11.712 24.746s-17.162 8.512-26.563 6.63l-232.493-46.496v56.019l44.781 44.781c6 6 9.373 14.141 9.373 22.627v108.307c0 10.618-5.267 20.544-14.061 26.499-8.794 5.952-19.965 7.155-29.824 3.213l-123.501-49.402-123.501 49.402c-9.859 3.942-21.030 2.739-29.824-3.213-8.794-5.955-14.061-15.882-14.061-26.499v-108.307c0-8.486 3.373-16.627 9.373-22.627l44.781-44.781v-56.019l-232.492 46.496c-9.401 1.882-19.149-0.554-26.564-6.63s-11.712-15.158-11.712-24.746v-108.307c0-12.122 6.848-23.203 17.689-28.624l253.079-126.538v-142.686c0-30.031 11.93-58.831 33.165-80.066z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["airplane"],"defaultCode":59815,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":926,"id":13,"name":"airplane","prevSize":32,"code":59815},"setIdx":0,"setId":2,"iconIdx":14},{"icon":{"paths":["M448 188.865c0 33.615 27.251 60.865 60.864 60.865 33.616 0 60.867-27.25 60.867-60.865s-27.251-60.865-60.867-60.865c-33.613 0-60.864 27.25-60.864 60.865zM384 188.865c0 59.026 40.957 108.485 96 121.512v77.745c-44.314 11.69-78.986 47.13-89.578 91.878h-80.045c-13.027-55.043-62.486-96-121.512-96-68.961 0-124.865 55.904-124.865 124.864 0 68.963 55.904 124.867 124.865 124.867 56.762 0 104.678-37.875 119.854-89.731h83.361c12.227 41.773 45.696 74.47 87.92 85.61v77.744c-55.043 13.027-96 62.486-96 121.51 0 68.963 55.904 124.867 124.864 124.867 68.963 0 124.867-55.904 124.867-124.867 0-56.762-37.875-104.675-89.731-119.853v-79.437c42.163-11.171 75.578-43.846 87.789-85.574h77.222c15.178 51.856 63.091 89.731 119.853 89.731 68.963 0 124.867-55.904 124.867-124.867 0-68.96-55.904-124.864-124.867-124.864-59.024 0-108.483 40.957-121.51 96h-73.907c-10.579-44.707-45.194-80.122-89.446-91.843v-79.438c51.856-15.176 89.731-63.092 89.731-119.854 0-68.961-55.904-124.865-124.867-124.865-68.96 0-124.864 55.904-124.864 124.865zM828.864 569.731c-33.613 0-60.864-27.251-60.864-60.867 0-33.613 27.251-60.864 60.864-60.864 33.616 0 60.867 27.251 60.867 60.864 0 33.616-27.251 60.867-60.867 60.867zM188.865 569.731c-33.615 0-60.865-27.251-60.865-60.867 0-33.613 27.25-60.864 60.865-60.864s60.865 27.251 60.865 60.864c0 33.616-27.25 60.867-60.865 60.867zM451.069 508.864c0 33.616 27.251 60.867 60.867 60.867 33.613 0 60.864-27.251 60.864-60.867 0-33.613-27.251-60.864-60.864-60.864-33.616 0-60.867 27.251-60.867 60.864zM508.864 889.731c-33.613 0-60.864-27.251-60.864-60.867 0-33.613 27.251-60.864 60.864-60.864 33.616 0 60.867 27.251 60.867 60.864 0 33.616-27.251 60.867-60.867 60.867z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["all-contacts-in-channels"],"defaultCode":59664,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":927,"name":"all-contacts-in-channels","prevSize":32,"id":14,"code":59664},"setIdx":0,"setId":2,"iconIdx":15},{"icon":{"paths":["M861.437 160c17.67 0 32 14.327 32 32s-14.33 32-32 32h-384c-17.674 0-32-14.327-32-32s14.326-32 32-32h384zM334.717 442.397c-24.962 0-45.197-20.237-45.197-45.2 0-24.96 20.236-45.197 45.197-45.197 24.963 0 45.2 20.237 45.2 45.197 0 24.963-20.237 45.2-45.2 45.2zM334.717 506.397c-60.308 0-109.197-48.89-109.197-109.2 0-60.307 48.89-109.197 109.197-109.197 60.31 0 109.2 48.89 109.2 109.197 0 60.31-48.89 109.2-109.2 109.2zM456.278 535.504c-18.288-4.899-37.504-5.2-55.939-0.88l-45.005 10.547c-13.194 3.091-26.947 2.877-40.036-0.63l-31.676-8.483c-19.669-5.27-40.384-5.562-60.154-0.928-55.68 13.050-95.468 62.781-95.468 120.179v34.752c0 42.906 34.783 77.686 77.689 77.686h258.057c42.906 0 77.69-34.781 77.69-77.686v-43.587c0-52-34.928-97.514-85.158-110.97zM414.944 596.934c8.166-1.914 16.675-1.779 24.774 0.39 22.246 5.958 37.718 26.118 37.718 49.149v43.587c0 7.558-6.131 13.686-13.69 13.686h-258.057c-7.56 0-13.689-6.128-13.689-13.686v-34.752c0-27.469 19.123-51.552 46.072-57.869 9.556-2.24 19.564-2.086 28.99 0.438l31.676 8.483c23.277 6.237 47.738 6.621 71.2 1.12l45.005-10.547zM893.437 512c0-17.674-14.33-32-32-32h-224c-17.674 0-32 14.326-32 32s14.326 32 32 32h224c17.67 0 32-14.326 32-32zM861.437 640c17.67 0 32 14.326 32 32s-14.33 32-32 32h-192c-17.674 0-32-14.326-32-32s14.326-32 32-32h192zM893.437 352c0-17.674-14.33-32-32-32h-288c-17.674 0-32 14.326-32 32s14.326 32 32 32h288c17.67 0 32-14.326 32-32zM861.437 800c17.67 0 32 14.326 32 32s-14.33 32-32 32h-256c-17.674 0-32-14.326-32-32s14.326-32 32-32h256z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["all-contacts-in-queue"],"defaultCode":59665,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":928,"name":"all-contacts-in-queue","prevSize":32,"id":15,"code":59665},"setIdx":0,"setId":2,"iconIdx":16},{"icon":{"paths":["M523.571 295.385c33.133 0 74.669-22.133 99.402-51.645 22.4-26.745 38.733-64.095 38.733-101.445 0-5.072-0.467-10.144-1.402-14.294-36.864 1.383-81.2 24.439-107.798 55.334-21.002 23.517-40.134 60.406-40.134 98.218 0 5.533 0.934 11.067 1.402 12.911 2.333 0.461 6.067 0.922 9.798 0.922zM406.906 853.334c45.267 0 65.334-29.974 121.798-29.974 57.402 0 70 29.050 120.4 29.050 49.469 0 82.602-45.187 113.869-89.456 34.998-50.72 49.466-100.522 50.4-102.829-3.267-0.922-98-39.194-98-146.634 0-93.146 74.666-135.107 78.867-138.333-49.469-70.090-124.602-71.935-145.136-71.935-55.533 0-100.8 33.199-129.264 33.199-30.8 0-71.402-31.354-119.469-31.354-91.466 0-184.333 74.701-184.333 215.802 0 87.61 34.533 180.294 77 240.24 36.402 50.723 68.133 92.224 113.867 92.224z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["apple-monochromatic"],"defaultCode":59666,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":929,"name":"apple-monochromatic","prevSize":32,"id":16,"code":59666},"setIdx":0,"setId":2,"iconIdx":17},{"icon":{"paths":["M498.694 141.561l-298.666 136.533c-11.39 5.207-18.696 16.58-18.696 29.103v386.844c0 11.818 6.513 22.675 16.941 28.237l298.667 159.286c9.411 5.021 20.707 5.021 30.118 0l298.666-159.286c10.429-5.562 16.941-16.419 16.941-28.237v-386.844c0-12.524-7.306-23.896-18.694-29.103l-298.666-136.533c-8.451-3.862-18.16-3.862-26.611 0zM245.333 357.011l234.667 107.277v335.709l-234.667-125.155v-317.83zM544 799.997l234.666-125.155v-317.83l-234.666 107.277v335.709zM512 408.544l-221.7-101.347 221.7-101.348 221.699 101.348-221.699 101.347z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["apps"],"defaultCode":59667,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":930,"name":"apps","prevSize":32,"id":17,"code":59667},"setIdx":0,"setId":2,"iconIdx":18},{"icon":{"paths":["M374.627 297.372c-12.496-12.497-32.758-12.497-45.254 0l-192 192c-12.497 12.496-12.497 32.758 0 45.254l192 192c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-137.372-137.373h578.745v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-160c0-17.674-14.326-32-32-32h-610.745l137.372-137.373c12.496-12.496 12.496-32.758 0-45.255z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-back"],"defaultCode":59668,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":931,"name":"arrow-back","prevSize":32,"id":18,"code":59668},"setIdx":0,"setId":2,"iconIdx":19},{"icon":{"paths":["M551.392 242.502c0.189-17.672 14.669-31.845 32.339-31.656 17.674 0.189 31.846 14.668 31.658 32.34l-1.318 123.489 193.44-193.439c12.496-12.497 32.755-12.497 45.254 0 12.496 12.497 12.496 32.758 0 45.255l-193.44 193.439 123.488-1.318c17.674-0.189 32.154 13.984 32.339 31.654 0.189 17.674-13.984 32.154-31.654 32.342l-201.92 2.154c-8.605 0.093-16.886-3.283-22.97-9.37-6.086-6.083-9.462-14.365-9.373-22.97l2.157-201.92zM475.981 782.147c-0.189 17.674-14.669 31.846-32.339 31.658-17.674-0.189-31.846-14.669-31.658-32.342l1.318-123.488-193.438 193.44c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l193.438-193.44-123.488 1.318c-17.672 0.189-32.151-13.984-32.34-31.654-0.189-17.674 13.984-32.154 31.656-32.342l201.922-2.154c8.605-0.093 16.883 3.283 22.966 9.37 6.086 6.083 9.462 14.365 9.373 22.97l-2.157 201.92z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-collapse"],"defaultCode":59669,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":932,"name":"arrow-collapse","prevSize":32,"id":19,"code":59669},"setIdx":0,"setId":2,"iconIdx":20},{"icon":{"paths":["M576 672c-17.674 0-32 14.326-32 32s14.326 32 32 32h224c17.674 0 32-14.326 32-32v-208c0-17.674-14.326-32-32-32s-32 14.326-32 32v130.746l-233.373-233.373c-12.496-12.496-32.758-12.496-45.254 0l-73.373 73.373-169.372-169.373c-12.497-12.497-32.758-12.497-45.255 0s-12.497 32.759 0 45.255l192 192c12.496 12.496 32.758 12.496 45.254 0l73.373-73.373 210.746 210.746h-146.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-decrease"],"defaultCode":59670,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":933,"name":"arrow-decrease","prevSize":32,"id":20,"code":59670},"setIdx":0,"setId":2,"iconIdx":21},{"icon":{"paths":["M726.88 526.064c12.355 12.637 12.128 32.896-0.509 45.254l-191.968 187.715c-12.438 12.163-32.31 12.163-44.746 0l-191.97-187.715c-12.636-12.358-12.863-32.618-0.507-45.254 12.356-12.634 32.615-12.861 45.252-0.506l137.597 134.55v-372.109c0-17.673 14.33-32 32-32 17.674 0 32 14.327 32 32v372.109l137.6-134.55c12.634-12.355 32.896-12.128 45.251 0.506z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-down"],"defaultCode":59673,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":934,"name":"arrow-down","prevSize":32,"id":21,"code":59673},"setIdx":0,"setId":2,"iconIdx":22},{"icon":{"paths":["M329.373 550.627c-12.497-12.496-12.497-32.758 0-45.254s32.758-12.496 45.254 0l105.373 105.373v-418.746c0-17.673 14.326-32 32-32s32 14.327 32 32v418.746l105.373-105.373c12.496-12.496 32.758-12.496 45.254 0s12.496 32.758 0 45.254l-160 160c-12.496 12.496-32.758 12.496-45.254 0l-160-160zM112 864c0 17.674 14.327 32 32 32h768c17.674 0 32-14.326 32-32v-512c0-17.674-14.326-32-32-32h-96c-17.674 0-32 14.326-32 32s14.326 32 32 32h64v448h-704v-448h64c17.673 0 32-14.326 32-32s-14.327-32-32-32h-96c-17.673 0-32 14.326-32 32v512z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-down-box"],"defaultCode":59671,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":935,"name":"arrow-down-box","prevSize":32,"id":22,"code":59671},"setIdx":0,"setId":2,"iconIdx":23},{"icon":{"paths":["M866.49 512c0-194.404-157.802-352-352.464-352-194.661 0-352.465 157.596-352.465 352s157.804 352 352.465 352c194.662 0 352.464-157.597 352.464-352zM930.576 512c0 229.75-186.496 416-416.55 416s-416.549-186.25-416.549-416c0-229.75 186.495-416 416.549-416s416.55 186.25 416.55 416zM696.525 571.37c12.682-12.33 12.957-32.589 0.611-45.251-12.342-12.666-32.63-12.938-45.309-0.611l-105.789 102.842v-276.349c0-17.674-14.346-32-32.045-32-17.696 0-32.042 14.326-32.042 32v276.349l-105.789-102.842c-12.678-12.326-32.966-12.054-45.309 0.611-12.344 12.662-12.071 32.922 0.608 45.251l160.182 155.715c12.438 12.093 32.259 12.093 44.701 0l160.179-155.715z"],"width":1056,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["arrow-down-circle"],"defaultCode":59672,"grid":0},"attrs":[{}],"properties":{"order":936,"name":"arrow-down-circle","prevSize":32,"id":23,"code":59672},"setIdx":0,"setId":2,"iconIdx":24},{"icon":{"paths":["M859.978 398.15c-0.189 17.67-14.666 31.843-32.339 31.654-17.67-0.189-31.846-14.666-31.658-32.339l1.318-123.488-193.437 193.437c-12.496 12.499-32.758 12.499-45.254 0-12.496-12.496-12.496-32.755 0-45.254l193.437-193.437-123.488 1.318c-17.67 0.189-32.15-13.984-32.339-31.656s13.984-32.151 31.658-32.34l201.92-2.156c8.605-0.092 16.883 3.286 22.97 9.371 6.083 6.085 9.462 14.364 9.37 22.969l-2.157 201.922zM167.394 626.522c0.189-17.674 14.668-31.846 32.34-31.658s31.845 14.669 31.657 32.339l-1.319 123.488 193.438-193.437c12.496-12.499 32.758-12.499 45.254 0 12.496 12.496 12.496 32.758 0 45.254l-193.438 193.437 123.489-1.318c17.67-0.189 32.15 13.984 32.339 31.658 0.189 17.67-13.984 32.15-31.658 32.339l-201.92 2.157c-8.605 0.093-16.884-3.286-22.969-9.37-6.085-6.086-9.463-14.365-9.371-22.97l2.156-201.92z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-expand"],"defaultCode":59674,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":937,"name":"arrow-expand","prevSize":32,"id":24,"code":59674},"setIdx":0,"setId":2,"iconIdx":25},{"icon":{"paths":["M623.488 420.944h-129.030c-146.778 0-279.962 128.675-298.822 309.533 98.511-81.834 219.072-127.946 345.446-127.946h82.406v123.408l188.595-214.202-188.595-214.2v123.406zM888.045 501.165c5.322 6.045 5.325 15.104 0 21.149l-300.547 341.354c-9.747 11.069-28.010 4.176-28.010-10.573v-186.563h-18.406c-15.286 0-30.496 0.774-45.594 2.298-112.397 11.35-218.514 64.397-302.132 150.954-2.078 2.15-4.142 4.32-6.191 6.512-7.238 7.741-14.299 15.738-21.173 23.984-2.611 3.133-5.195 6.301-7.751 9.504l-0.376 0.474c-9.438 11.834-28.508 5.158-28.508-9.978v-75.606c0-230.707 163.46-417.728 365.102-417.728h65.030v-186.56c0-14.749 18.262-21.643 28.010-10.573l300.547 341.354z"],"width":1056,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["arrow-forward"],"defaultCode":59841,"grid":0},"attrs":[{}],"properties":{"order":938,"id":25,"name":"arrow-forward","prevSize":32,"code":59841},"setIdx":0,"setId":2,"iconIdx":26},{"icon":{"paths":["M576 352c-17.674 0-32-14.326-32-32s14.326-32 32-32h224c17.674 0 32 14.327 32 32v208c0 17.674-14.326 32-32 32s-32-14.326-32-32v-130.746l-233.373 233.373c-12.496 12.496-32.758 12.496-45.254 0l-73.373-73.373-169.372 169.373c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l192-192c12.496-12.496 32.758-12.496 45.254 0l73.373 73.373 210.746-210.746h-146.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-increase"],"defaultCode":59675,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":939,"name":"arrow-increase","prevSize":32,"id":26,"code":59675},"setIdx":0,"setId":2,"iconIdx":27},{"icon":{"paths":["M297.766 105.372c12.513-12.497 32.801-12.497 45.316 0 12.512 12.497 12.512 32.758 0 45.255l-105.513 105.372h611.551c17.699 0 32.045 14.327 32.045 32v112c0 17.674-14.346 32-32.045 32-17.696 0-32.042-14.326-32.042-32v-80h-579.51l105.513 105.373c12.512 12.496 12.512 32.758 0 45.254-12.515 12.496-32.803 12.496-45.316 0l-160.212-160c-12.513-12.497-12.513-32.758 0-45.255l160.212-160zM711.568 918.627c-12.515 12.496-32.803 12.496-45.315 0-12.515-12.496-12.515-32.758 0-45.254l105.51-105.373h-611.552c-17.696 0-32.042-14.326-32.042-32v-112c0-17.674 14.346-32 32.042-32s32.042 14.326 32.042 32v80h579.509l-105.51-105.373c-12.515-12.496-12.515-32.758 0-45.254 12.512-12.496 32.8-12.496 45.315 0l160.211 160c12.512 12.496 12.512 32.758 0 45.254l-160.211 160z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-looping"],"defaultCode":59677,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":940,"name":"arrow-looping","prevSize":32,"id":27,"code":59677},"setIdx":0,"setId":2,"iconIdx":28},{"icon":{"paths":["M374.627 769.296c-12.496 12.496-32.758 12.496-45.254 0l-192-192c-12.497-12.496-12.497-32.758 0-45.254l192-192c12.496-12.499 32.758-12.499 45.254 0 12.496 12.496 12.496 32.758 0 45.254l-137.372 137.373h578.745v-192h-192c-17.674 0-32-14.328-32-32.001s14.326-32 32-32h224c17.674 0 32 14.327 32 32v256.001c0 17.674-14.326 32-32 32h-610.745l137.372 137.373c12.496 12.496 12.496 32.758 0 45.254z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-return"],"defaultCode":59678,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":941,"name":"arrow-return","prevSize":32,"id":28,"code":59678},"setIdx":0,"setId":2,"iconIdx":29},{"icon":{"paths":["M526.064 297.121c12.637-12.356 32.896-12.129 45.254 0.507l187.715 191.969c12.163 12.438 12.163 32.31 0 44.746l-187.715 191.971c-12.358 12.634-32.618 12.861-45.254 0.506-12.634-12.355-12.861-32.614-0.506-45.251l134.55-137.597h-372.109c-17.673 0-32-14.33-32-32 0-17.674 14.327-32 32-32h372.109l-134.55-137.6c-12.355-12.634-12.128-32.894 0.506-45.251z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["arrow-right"],"defaultCode":59838,"grid":0},"attrs":[{}],"properties":{"order":942,"id":29,"name":"arrow-right","prevSize":32,"code":59838},"setIdx":0,"setId":2,"iconIdx":30},{"icon":{"paths":["M297.181 498.090c-12.356-12.634-12.129-32.896 0.507-45.251l191.97-187.717c12.435-12.161 32.307-12.161 44.746 0l191.968 187.717c12.637 12.355 12.864 32.618 0.509 45.251-12.355 12.637-32.618 12.864-45.251 0.509l-137.6-134.55v372.109c0 17.674-14.326 32-32 32-17.67 0-32-14.326-32-32v-372.109l-137.597 134.55c-12.637 12.355-32.895 12.128-45.251-0.509z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-up"],"defaultCode":59680,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":943,"name":"arrow-up","prevSize":32,"id":30,"code":59680},"setIdx":0,"setId":2,"iconIdx":31},{"icon":{"paths":["M694.627 473.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-105.373-105.373v418.746c0 17.674-14.326 32-32 32s-32-14.326-32-32v-418.746l-105.373 105.373c-12.496 12.496-32.758 12.496-45.254 0s-12.497-32.758 0-45.254l160-160c12.496-12.497 32.758-12.497 45.254 0l160 160zM912 160c0-17.673-14.326-32-32-32h-768c-17.673 0-32 14.327-32 32v512c0 17.674 14.327 32 32 32h96c17.673 0 32-14.326 32-32s-14.327-32-32-32h-64v-448h704v448h-64c-17.674 0-32 14.326-32 32s14.326 32 32 32h96c17.674 0 32-14.326 32-32v-512z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-up-box"],"defaultCode":59679,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":944,"name":"arrow-up-box","prevSize":32,"id":31,"code":59679},"setIdx":0,"setId":2,"iconIdx":32},{"icon":{"paths":["M649.427 192c-26.454 0-52.016 10.804-71.005 30.343l-305.1 313.906c-31.48 32.387-49.322 76.506-49.322 122.694 0 46.186 17.842 90.304 49.322 122.694 31.451 32.355 73.91 50.362 117.984 50.362s86.531-18.006 117.981-50.362l305.101-313.907c12.317-12.672 32.576-12.96 45.248-0.643 12.675 12.317 12.963 32.576 0.646 45.251l-305.101 313.904c-43.302 44.554-102.23 69.757-163.875 69.757s-120.574-25.203-163.877-69.757c-43.273-44.522-67.428-104.717-67.428-167.299s24.155-122.781 67.428-167.302l305.1-313.905c30.845-31.735 72.874-49.737 116.899-49.737s86.054 18.002 116.899 49.737c30.816 31.704 47.971 74.514 47.971 118.968s-17.155 87.263-47.971 118.969l-305.43 313.904c-0.003 0.006 0.003-0.003 0 0-18.384 18.909-43.523 29.718-69.923 29.718-26.406 0-51.539-10.8-69.923-29.718-18.356-18.883-28.512-44.31-28.512-70.634 0-26.326 10.156-51.754 28.512-70.637l281.872-289.668c12.326-12.666 32.586-12.942 45.251-0.617s12.941 32.585 0.618 45.251l-281.846 289.638c-6.557 6.752-10.406 16.106-10.406 26.032 0 9.93 3.843 19.277 10.406 26.029 6.531 6.72 15.194 10.323 24.029 10.323s17.498-3.603 24.029-10.323l305.43-313.907c19.024-19.568 29.866-46.301 29.866-74.361 0-28.059-10.842-54.791-29.866-74.362-18.989-19.54-44.55-30.343-71.005-30.343z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["attach"],"defaultCode":59676,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":945,"name":"attach","prevSize":32,"id":32,"code":59676},"setIdx":0,"setId":2,"iconIdx":33},{"icon":{"paths":["M300.1 631.12h-113.433v-280.89h113.433l12.366-48.048c11.054-42.953 50.123-74.619 96.423-74.619h58.666v526.223h-58.666c-46.301 0-85.37-31.667-96.423-74.621l-12.366-48.045zM163.556 695.12h86.931c18.156 70.541 82.192 122.666 158.403 122.666h81.776c22.582 0 40.89-18.307 40.89-40.89v-572.444c0-22.582-18.307-40.889-40.89-40.889h-81.776c-76.211 0-140.247 52.124-158.403 122.667h-86.931c-22.582 0-40.889 18.306-40.889 40.89v327.11c0 22.582 18.307 40.89 40.889 40.89zM646.461 316.515c17.146-4.286 34.518 6.138 38.806 23.284l11.136 44.55c20.81 83.229 20.81 170.301 0 253.533l-11.136 44.55c-4.288 17.146-21.661 27.568-38.806 23.283-17.146-4.288-27.571-21.661-23.283-38.806l11.136-44.55c18.262-73.040 18.262-149.45 0.003-222.486l-11.139-44.55c-4.288-17.146 6.138-34.522 23.283-38.807zM807.472 235.936c-5.197-16.892-23.104-26.372-39.994-21.174-16.893 5.197-26.371 23.104-21.174 39.996l35.536 115.489c28.112 91.37 26.976 189.242-3.254 279.933l-32.054 96.16c-5.59 16.765 3.472 34.886 20.237 40.477 16.768 5.587 34.89-3.472 40.48-20.24l32.051-96.16c34.448-103.344 35.747-214.87 3.709-318.989l-35.536-115.491z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["audio"],"defaultCode":59683,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":946,"name":"audio","prevSize":32,"id":33,"code":59683},"setIdx":0,"setId":2,"iconIdx":34},{"icon":{"paths":["M866.128 153.127c-12.496-12.497-32.758-12.497-45.254 0l-668.246 668.245c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l668.246-668.245c12.496-12.497 12.496-32.758 0-45.255zM674.643 480.358l55.92-55.923c16.259 79.565 14.515 161.866-5.229 240.842l-11.622 46.49c-4.288 17.146-21.661 27.571-38.806 23.283-17.146-4.285-27.568-21.661-23.283-38.806l11.622-46.486c13.875-55.507 17.677-112.874 11.398-169.398zM817.162 385.923l-11.312-36.771 51.203-51.206 21.28 69.155c33.344 108.368 31.994 224.445-3.859 332.010l-33.45 100.342c-5.587 16.765-23.709 25.827-40.477 20.24-16.765-5.59-25.827-23.712-20.237-40.48l33.446-100.339c31.635-94.912 32.826-197.334 3.405-292.95zM490.666 664.333l64-64v210.346c0 23.562-19.101 42.666-42.666 42.666h-85.334c-35.459 0-68.394-10.816-95.683-29.325l46.611-46.611c14.701 7.629 31.395 11.936 49.072 11.936h64v-125.011zM128 682.678c0 19.738 13.403 36.346 31.604 41.216l62.552-62.55h-30.156v-298.666h118.99l12.367-48.049c11.843-46.020 53.696-79.953 103.309-79.953h64v158.155l64-64v-115.488c0-23.564-19.101-42.667-42.666-42.667h-85.334c-79.523 0-146.343 54.39-165.289 128h-90.71c-23.564 0-42.667 19.102-42.667 42.667v341.334z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["audio-disabled"],"defaultCode":59681,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":947,"name":"audio-disabled","prevSize":32,"id":34,"code":59681},"setIdx":0,"setId":2,"iconIdx":35},{"icon":{"paths":["M310.99 661.344h-118.99v-298.666h118.99l12.367-48.049c11.843-46.020 53.696-79.953 103.309-79.953h64v554.667h-64c-49.613 0-91.466-33.933-103.309-79.952l-12.367-48.048zM170.667 725.344h90.71c18.946 73.61 85.766 128 165.289 128h85.334c23.565 0 42.666-19.104 42.666-42.666v-597.335c0-23.564-19.101-42.667-42.666-42.667h-85.334c-79.523 0-146.343 54.39-165.289 128h-90.71c-23.564 0-42.667 19.102-42.667 42.667v341.334c0 23.562 19.103 42.666 42.667 42.666zM886.627 393.373c12.496 12.496 12.496 32.758 0 45.254l-73.373 73.373 73.373 73.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-73.373-73.373-73.373 73.373c-12.496 12.496-32.758 12.496-45.254 0s-12.496-32.758 0-45.254l73.373-73.373-73.373-73.373c-12.496-12.496-12.496-32.758 0-45.254s32.758-12.496 45.254 0l73.373 73.373 73.373-73.373c12.496-12.496 32.758-12.496 45.254 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["audio-unavailable"],"defaultCode":59682,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":948,"name":"audio-unavailable","prevSize":32,"id":35,"code":59682},"setIdx":0,"setId":2,"iconIdx":36},{"icon":{"paths":["M418.704 128c-35.344 0-64 28.654-64 64v226.637c20.774-2.822 42.134-3.456 64-1.526v-225.11h176v180.707c0 35.344 28.656 64 64 64h176v331.293h-120.554c-17.155 22.179-36.323 43.869-57.312 64h177.866c35.347 0 64-28.653 64-64v-363.293c0-6.413-1.923-12.675-5.526-17.978l-156.63-230.681c-11.914-17.544-31.741-28.049-52.947-28.049h-264.896zM658.704 372.707v-180.707h24.896l122.698 180.707h-147.594zM167.939 668.547c120.524 156.138 218.24 174.586 285.133 158.739 73.293-17.36 139.232-81.648 183.466-151.763-115.155-155.869-211.581-174.589-279.149-158.915-74.362 17.251-142.707 81.683-189.45 151.939zM104.428 649.037c100.621-162.8 337.62-357.19 593.252 1.789 9.072 12.739 10.32 29.818 2.422 43.315-95.27 162.854-326.394 358.346-593.234-0.224-9.745-13.094-11.022-30.995-2.44-44.88zM401.664 735.994c31.514 0 60.269-26.858 60.269-64 0-37.146-28.755-64-60.269-64-31.51 0-60.266 26.854-60.266 64 0 37.142 28.755 64 60.266 64zM401.664 799.994c68.634 0 124.269-57.309 124.269-128 0-70.694-55.635-128-124.269-128-68.63 0-124.267 57.306-124.267 128 0 70.691 55.636 128 124.267 128z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["auditing"],"defaultCode":59684,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":949,"name":"auditing","prevSize":32,"id":36,"code":59684},"setIdx":0,"setId":2,"iconIdx":37},{"icon":{"paths":["M224 224c-17.673 0-32 14.327-32 32v544c0 17.674 14.327 32 32 32h544c17.674 0 32-14.326 32-32v-544c0-17.673-14.326-32-32-32h-544zM128 256c0-53.019 42.981-96 96-96h544c53.021 0 96 42.981 96 96v544c0 53.021-42.979 96-96 96h-544c-53.019 0-96-42.979-96-96v-544zM608 460.813c0 41.798-26.714 77.357-64 90.538v133.462h-64v-133.462c-37.286-13.181-64-48.739-64-90.538 0-53.021 42.979-96 96-96s96 42.979 96 96zM608 588.826c38.861-29.19 64-75.667 64-128.013 0-88.365-71.635-160-160-160s-160 71.636-160 160c0 52.346 25.139 98.822 64 128.013v127.987c0 17.674 14.326 32 32 32h128c17.674 0 32-14.326 32-32v-127.987z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["auth"],"defaultCode":59685,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":950,"name":"auth","prevSize":32,"id":37,"code":59685},"setIdx":0,"setId":2,"iconIdx":38},{"icon":{"paths":["M513.35 554.019c66.467 0 120.349-52.493 120.349-117.242 0-64.752-53.882-117.243-120.349-117.243-66.464 0-120.346 52.491-120.346 117.243 0 64.749 53.882 117.242 120.346 117.242zM513.35 490.019c-32.704 0-56.346-25.405-56.346-53.242 0-27.84 23.642-53.242 56.346-53.242 32.707 0 56.349 25.402 56.349 53.242 0 27.837-23.642 53.242-56.349 53.242z","M365.478 894.144h-172.126c-17.673 0-32-14.33-32-32v-702.144c0-17.673 14.327-32 32-32h640.001c17.674 0 32 14.327 32 32v702.144c0 17.67-14.326 32-32 32h-172.128c-6.24 1.274-12.701 1.942-19.318 1.942h-257.11c-6.618 0-13.078-0.669-19.318-1.942zM225.353 830.144h68.244c-3.114-9.456-4.799-19.558-4.799-30.058v-93.446c0-56.109 37.881-105.142 92.172-119.309 19.171-5.002 39.264-5.312 58.579-0.902l42.778 9.766c20.051 4.579 40.909 4.259 60.81-0.934l28.070-7.325c20.694-5.398 42.384-5.734 63.232-0.973 60.534 13.821 103.469 67.664 103.469 129.754v83.37c0 10.499-1.686 20.602-4.8 30.058h68.246v-638.144h-576.001v638.144zM652.918 830.144c12.246-4.49 20.989-16.253 20.989-30.058v-83.37c0-32.234-22.288-60.186-53.715-67.36-10.822-2.47-22.083-2.298-32.826 0.506l-28.070 7.325c-29.853 7.789-61.139 8.272-91.216 1.405l-42.774-9.766c-9.293-2.122-18.957-1.974-28.176 0.432-26.112 6.813-44.333 30.397-44.333 57.382v93.446c0 13.805 8.742 25.568 20.989 30.058h279.133z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["avatar"],"defaultCode":59686,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":951,"name":"avatar","prevSize":32,"id":38,"code":59686},"setIdx":0,"setId":2,"iconIdx":39},{"icon":{"paths":["M737.779 361.376c12.499 12.496 12.499 32.758 0 45.254l-110.947 110.95 110.947 110.947c12.499 12.496 12.499 32.758 0 45.254-12.496 12.499-32.758 12.499-45.254 0l-110.947-110.947-110.95 110.947c-12.496 12.499-32.758 12.499-45.254 0-12.496-12.496-12.496-32.758 0-45.254l110.95-110.947-110.95-110.95c-12.496-12.496-12.496-32.758 0-45.254s32.758-12.496 45.254 0l110.95 110.95 110.947-110.95c12.496-12.496 32.758-12.496 45.254 0z","M312.246 218.073c12.061-16.393 31.2-26.073 51.552-26.073h468.202c35.347 0 64 28.654 64 64v512c0 35.347-28.653 64-64 64h-468.202c-20.352 0-39.491-9.68-51.552-26.074l-188.343-256c-16.598-22.56-16.598-53.293 0-75.853l188.343-256.001zM363.798 256l-188.343 256 188.343 256h468.202v-512h-468.202z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["backspace"],"defaultCode":59687,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":952,"name":"backspace","prevSize":32,"id":39,"code":59687},"setIdx":0,"setId":2,"iconIdx":40},{"icon":{"paths":["M896 512c0-212.077-171.923-384-384-384s-384 171.923-384 384c0 212.077 171.923 384 384 384s384-171.923 384-384zM480 544v286.419c-56.483-5.606-108.646-25.904-152.618-57.011 46.403-78.992 67.251-156.97 71.734-229.408h80.883zM334.8 544c-4.282 58.995-21.005 122.198-56.631 186.458-46.616-49.875-77.462-114.678-84.589-186.458h141.22zM398.954 480c-6.192-93.13-37.366-173.574-70.627-230.072 43.773-30.733 95.594-50.78 151.674-56.348v286.42h-81.046zM279.095 292.556c26.251 47.457 50.118 112.532 55.644 187.444h-141.159c7.174-72.253 38.381-137.437 85.515-187.444zM544 544h80.883c4.483 72.438 25.331 150.416 71.734 229.408-43.971 31.107-96.134 51.405-152.618 57.011v-286.419zM830.419 544c-7.126 71.779-37.971 136.582-84.589 186.458-35.626-64.259-52.349-127.462-56.63-186.458h141.219zM830.419 480h-141.158c5.526-74.912 29.395-139.987 55.645-187.444 47.133 50.008 78.339 115.192 85.514 187.444zM544 193.58c56.080 5.568 107.901 25.614 151.674 56.348-33.261 56.499-64.435 136.943-70.627 230.072h-81.046v-286.42z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["basketball"],"defaultCode":59776,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":953,"id":40,"name":"basketball","prevSize":32,"code":59776},"setIdx":0,"setId":2,"iconIdx":41},{"icon":{"paths":["M233.358 169.364c6.002-6.001 14.141-9.372 22.629-9.372l304.020 0.020c0 0 0.003 0 0 0 46.678 0 91.446 18.543 124.451 51.549 33.008 33.006 51.549 77.772 51.549 124.452s-18.541 91.443-51.549 124.451c-0.803 0.803-1.616 1.6-2.435 2.387 22.867 9.552 43.888 23.533 61.75 41.395 36.006 36.006 56.234 84.845 56.234 135.766s-20.227 99.757-56.234 135.763c-36.006 36.006-84.845 56.237-135.766 56.237l-352.024-0.019c-17.673-0.003-31.998-14.33-31.998-32v-608.001c0-8.487 3.372-16.627 9.373-22.628zM560.006 448.013c29.706 0 58.192-11.802 79.197-32.806 21.005-21.002 32.803-49.491 32.803-79.194 0-29.705-11.798-58.193-32.803-79.197s-49.491-32.804-79.197-32.804l-272.022-0.018v224.019h272.022zM287.984 512.013v255.981l320.022 0.019c0 0 0.003 0 0 0 33.949 0 66.506-13.488 90.512-37.491 24.003-24.006 37.488-56.563 37.488-90.509 0-33.949-13.485-66.506-37.488-90.512-24.006-24.003-56.563-37.488-90.512-37.488h-320.022z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["bold"],"defaultCode":59688,"grid":0},"attrs":[{}],"properties":{"order":954,"name":"bold","prevSize":32,"id":41,"code":59688},"setIdx":0,"setId":2,"iconIdx":42},{"icon":{"paths":["M352 445.437c0-17.67 14.326-32 32-32h256c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M352 322.557c0-17.672 14.326-31.999 32-31.999h256c17.674 0 32 14.327 32 31.999 0 17.674-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M864 679.68c0 17.674-14.326 32-32 32h-18.509c-8.218 40.547-8.218 82.333 0 122.88h19.789c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72h-545.28c-70.692 0-128-55.014-128-122.88v-453.12c0-106.038 85.961-192 192-192h480c17.674 0 32 14.327 32 32v519.68zM748.419 834.56c-6.787-40.678-6.787-82.202 0-122.88h-460.419c-35.346 0-64 27.507-64 61.44s28.654 61.44 64 61.44h460.419zM224 647.68h576v-455.68h-448c-70.692 0-128 57.308-128 128v327.68z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["book"],"defaultCode":59689,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":955,"name":"book","prevSize":32,"id":42,"code":59689},"setIdx":0,"setId":2,"iconIdx":43},{"icon":{"paths":["M193.603 416h-33.603c-17.673 0-32 14.326-32 32s14.327 32 32 32h704c17.674 0 32-14.326 32-32s-14.326-32-32-32h-33.603c-7.347-73.117-39.702-141.853-92.122-194.274-60.013-60.012-141.405-93.726-226.275-93.726s-166.262 33.714-226.274 93.726c-52.421 52.421-84.777 121.157-92.123 194.274zM330.979 266.981c48.010-48.010 113.126-74.981 181.021-74.981s133.011 26.971 181.021 74.981c40.403 40.404 65.907 92.923 72.973 149.019h-507.987c7.066-56.096 32.57-108.615 72.972-149.019z","M877.242 605.133c16.090-7.315 23.203-26.285 15.891-42.374-7.315-16.090-26.285-23.203-42.374-15.891l-127.558 57.981-127.558-57.981c-8.413-3.824-18.070-3.824-26.483 0l-127.558 57.981-127.558-57.981c-8.413-3.824-18.070-3.824-26.483 0l-140.8 64c-16.089 7.315-23.203 26.285-15.89 42.374s26.284 23.203 42.373 15.891l18.758-8.528v29.68c0 38.102 15.908 74.31 43.672 100.752 27.712 26.394 64.978 40.963 103.528 40.963h345.6c38.55 0 75.814-14.57 103.526-40.963 27.766-26.442 43.674-62.65 43.674-100.752v-64.589l45.242-20.563zM736.442 669.133l31.558-14.346v35.498c0 20.093-8.368 39.699-23.811 54.41-15.494 14.758-36.832 23.306-59.389 23.306h-345.6c-22.556 0-43.893-8.547-59.39-23.306-15.444-14.71-23.81-34.317-23.81-54.41v-58.771l44.8-20.362 127.558 57.981c8.413 3.824 18.070 3.824 26.483 0l127.558-57.981 127.558 57.981c8.413 3.824 18.070 3.824 26.483 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["burger"],"defaultCode":59813,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":956,"id":43,"name":"burger","prevSize":32,"code":59813},"setIdx":0,"setId":2,"iconIdx":44},{"icon":{"paths":["M224 224h320v576h-96v-112c0-8.835-7.165-16-16-16h-96c-8.835 0-16 7.165-16 16v112h-96v-576zM608 448h192v352h-192v-352zM832 384h-224v-192c0-17.673-14.326-32-32-32h-384c-17.673 0-32 14.327-32 32v640c0 17.674 14.327 32 32 32h640c17.674 0 32-14.326 32-32v-416c0-17.674-14.326-32-32-32zM304 288c-8.836 0-16 7.164-16 16v32c0 8.835 7.164 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.836-7.165-16-16-16h-32zM288 432c0-8.835 7.164-16 16-16h32c8.835 0 16 7.165 16 16v32c0 8.835-7.165 16-16 16h-32c-8.836 0-16-7.165-16-16v-32zM304 544c-8.836 0-16 7.165-16 16v32c0 8.835 7.164 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.835-7.165-16-16-16h-32zM416 304c0-8.836 7.165-16 16-16h32c8.835 0 16 7.164 16 16v32c0 8.835-7.165 16-16 16h-32c-8.835 0-16-7.165-16-16v-32zM432 416c-8.835 0-16 7.165-16 16v32c0 8.835 7.165 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.835-7.165-16-16-16h-32zM416 560c0-8.835 7.165-16 16-16h32c8.835 0 16 7.165 16 16v32c0 8.835-7.165 16-16 16h-32c-8.835 0-16-7.165-16-16v-32zM688 512c-8.835 0-16 7.165-16 16v32c0 8.835 7.165 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.835-7.165-16-16-16h-32zM672 656c0-8.835 7.165-16 16-16h32c8.835 0 16 7.165 16 16v32c0 8.835-7.165 16-16 16h-32c-8.835 0-16-7.165-16-16v-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["business"],"defaultCode":59690,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":957,"name":"business","prevSize":32,"id":44,"code":59690},"setIdx":0,"setId":2,"iconIdx":45},{"icon":{"paths":["M277.831 157.44c0-16.259 13.181-29.44 29.44-29.44s29.439 13.181 29.439 29.44v58.876h353.28v-58.876c0-16.259 13.181-29.44 29.44-29.44s29.44 13.181 29.44 29.44v58.876h85.76c17.674 0 32 14.327 32 32v583.68c0 17.674-14.326 32-32 32h-642.559c-17.673 0-32-14.326-32-32v-583.68c0-1.105 0.056-2.196 0.165-3.272 1.639-16.136 15.266-28.728 31.835-28.728h85.76v-58.876zM802.63 392.957h-578.559v407.040h578.559v-407.040zM425.034 644.474c0-8.835 7.162-16 16-16h26.88c8.835 0 16 7.165 16 16v26.88c0 8.838-7.165 16-16 16h-26.88c-8.838 0-16-7.162-16-16v-26.88zM323.27 510.72c-8.836 0-15.999 7.162-15.999 16v26.88c0 8.835 7.163 16 15.999 16h26.88c8.838 0 16-7.165 16-16v-26.88c0-8.838-7.162-16-16-16h-26.88zM542.79 526.72c0-8.835 7.165-16 16-16h26.88c8.838 0 16 7.165 16 16v26.88c0 8.835-7.162 16-16 16h-26.88c-8.835 0-16-7.165-16-16v-26.88zM323.27 628.474c-8.835 0-15.999 7.165-15.999 16v26.88c0 8.838 7.164 16 15.999 16h26.88c8.838 0 16-7.162 16-16v-26.88c0-8.835-7.162-16-16-16h-26.88zM542.79 644.474c0-8.835 7.165-16 16-16h26.88c8.838 0 16 7.165 16 16v26.88c0 8.838-7.162 16-16 16h-26.88c-8.835 0-16-7.162-16-16v-26.88zM441.030 510.72c-8.835 0-16 7.165-16 16v26.88c0 8.835 7.165 16 16 16h26.88c8.838 0 16-7.165 16-16v-26.88c0-8.835-7.162-16-16-16h-26.88zM660.55 526.72c0-8.835 7.165-16 16-16h26.88c8.838 0 16 7.165 16 16v26.88c0 8.835-7.162 16-16 16h-26.88c-8.835 0-16-7.165-16-16v-26.88zM676.55 628.474c-8.835 0-16 7.165-16 16v26.88c0 8.838 7.165 16 16 16h26.88c8.838 0 16-7.162 16-16v-26.88c0-8.835-7.162-16-16-16h-26.88z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["calendar"],"defaultCode":59691,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":958,"name":"calendar","prevSize":32,"id":45,"code":59691},"setIdx":0,"setId":2,"iconIdx":46},{"icon":{"paths":["M256 202.672c0-17.673 19.102-32 42.667-32h255.999c23.565 0 42.669 14.327 42.669 32s-19.104 32-42.669 32h-255.999c-23.564 0-42.667-14.327-42.667-32zM160 383.994c0-5.891 4.776-10.666 10.667-10.666h511.999c5.891 0 10.669 4.774 10.669 10.666v85.334c0 11.376 6.038 21.894 15.859 27.632s21.949 5.83 31.856 0.243l97.83-55.165c2.531-1.427 4.858-3.19 6.912-5.248 6.72-6.717 18.208-1.958 18.208 7.546v263.318c0 9.504-11.488 14.262-18.208 7.542-2.054-2.054-4.381-3.818-6.912-5.245l-97.83-55.165c-9.907-5.587-22.035-5.494-31.856 0.243s-15.859 16.256-15.859 27.632v85.331c0 5.891-4.778 10.669-10.669 10.669h-511.999c-5.891 0-10.667-4.778-10.667-10.669v-384zM170.667 309.328c-41.237 0-74.667 33.43-74.667 74.666v384c0 41.238 33.429 74.669 74.667 74.669h511.999c41.238 0 74.669-33.43 74.669-74.669v-30.55l46.778 26.374c47.418 41.99 123.888 8.701 123.888-56.163v-263.318c0-64.864-76.47-98.157-123.888-56.166l-46.778 26.378v-30.554c0-41.235-33.43-74.666-74.669-74.666h-511.999z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["camera"],"defaultCode":59696,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":959,"name":"camera","prevSize":32,"id":46,"code":59696},"setIdx":0,"setId":2,"iconIdx":47},{"icon":{"paths":["M866.128 153.126c-12.496-12.497-32.758-12.497-45.254 0l-668.246 668.246c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l668.246-668.246c12.496-12.497 12.496-32.758 0-45.255zM298.667 170.671c-23.564 0-42.667 14.327-42.667 32s19.102 32 42.667 32h255.999c23.565 0 42.669-14.327 42.669-32s-19.104-32-42.669-32h-255.999zM574.173 309.327h-403.506c-41.237 0-74.667 33.428-74.667 74.667v384c0 6.010 0.71 11.856 2.051 17.453l61.949-61.949v-339.504c0-5.891 4.776-10.666 10.667-10.666h339.506l64-64.001zM376.339 778.659h306.326c5.891 0 10.669-4.774 10.669-10.666v-85.334c0-11.373 6.038-21.891 15.859-27.629s21.949-5.83 31.856-0.243l97.83 55.162c2.531 1.427 4.858 3.194 6.912 5.248 6.72 6.72 18.208 1.962 18.208-7.542v-263.322c0-9.501-11.488-14.262-18.208-7.542-2.054 2.054-4.381 3.821-6.912 5.248l-97.83 55.162c-9.907 5.587-22.035 5.494-31.856-0.243-9.821-5.734-15.859-16.256-15.859-27.629v-7.661l110.778-73.498c47.418-41.99 123.888-8.701 123.888 56.163v263.322c0 64.864-76.47 98.154-123.888 56.163l-46.778-26.378v30.554c0 41.238-33.43 74.666-74.669 74.666h-370.327l64.001-64z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["camera-disabled"],"defaultCode":59692,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":960,"name":"camera-disabled","prevSize":32,"id":47,"code":59692},"setIdx":0,"setId":2,"iconIdx":48},{"icon":{"paths":["M288 224c-17.673 0-32 14.327-32 32s14.327 32 32 32h256c17.674 0 32-14.327 32-32s-14.326-32-32-32h-256z","M170.667 341.328c-23.564 0-42.667 19.104-42.667 42.666v384c0 23.565 19.102 42.669 42.667 42.669h511.999c23.565 0 42.669-19.104 42.669-42.669v-128l97.83 97.83c26.877 26.88 72.835 7.843 72.835-30.17v-263.318c0-38.013-45.958-57.050-72.835-30.173l-97.83 97.83v-128c0-23.562-19.104-42.666-42.669-42.666h-511.999z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["camera-filled"],"defaultCode":59693,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":961,"name":"camera-filled","prevSize":32,"id":48,"code":59693},"setIdx":0,"setId":2,"iconIdx":49},{"icon":{"paths":["M196.731 191.997c0-15.807 12.814-28.622 28.622-28.622h128.001c15.805 0 28.621 12.814 28.621 28.622s-12.816 28.621-28.621 28.621h-128.001c-15.807 0-28.622-12.814-28.622-28.621z","M737.354 559.997c0 97.203-78.8 176-176 176-97.203 0-176-78.797-176-176s78.797-176 176-176c97.2 0 176 78.797 176 176zM673.354 559.997c0-61.856-50.144-112-112-112s-112 50.144-112 112c0 61.856 50.144 112 112 112s112-50.144 112-112z","M193.353 255.997c-35.346 0-64 28.654-64 64v448c0 35.347 28.654 64 64 64h640.001c35.344 0 64-28.653 64-64v-448c0-35.346-28.656-64-64-64h-640.001zM833.354 319.997v448h-640.001v-448h640.001z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["camera-photo"],"defaultCode":59694,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":962,"name":"camera-photo","prevSize":32,"id":49,"code":59694},"setIdx":0,"setId":2,"iconIdx":50},{"icon":{"paths":["M298.667 170.672c-23.564 0-42.667 14.327-42.667 32s19.102 32 42.667 32h255.999c23.565 0 42.669-14.327 42.669-32s-19.104-32-42.669-32h-255.999z","M545.712 503.453c11.267-11.267 11.19-29.61-0.17-40.97s-29.706-11.437-40.973-0.17l-71.402 71.402-71.994-71.997c-11.363-11.36-29.706-11.437-40.973-0.17s-11.19 29.61 0.17 40.97l71.997 71.997-71.402 71.402c-11.266 11.267-11.19 29.61 0.17 40.97 11.363 11.36 29.706 11.437 40.973 0.17l71.402-71.402 71.997 71.997c11.36 11.36 29.702 11.437 40.97 0.17s11.19-29.61-0.17-40.97l-71.997-71.997 71.402-71.402z","M96 383.994c0-41.235 33.429-74.666 74.667-74.666h511.999c41.238 0 74.669 33.43 74.669 74.666v30.554l46.778-26.378c47.418-41.99 123.888-8.698 123.888 56.166v263.318c0 64.864-76.47 98.154-123.888 56.163l-46.778-26.374v30.55c0 41.238-33.43 74.669-74.669 74.669h-511.999c-41.237 0-74.667-33.43-74.667-74.669v-384zM170.667 373.328c-5.891 0-10.667 4.774-10.667 10.666v384c0 5.891 4.776 10.669 10.667 10.669h511.999c5.891 0 10.669-4.778 10.669-10.669v-85.331c0-11.376 6.038-21.894 15.859-27.632s21.949-5.83 31.856-0.243l97.83 55.165c2.531 1.427 4.858 3.19 6.912 5.245 6.72 6.72 18.208 1.962 18.208-7.542v-263.318c0-9.504-11.488-14.262-18.208-7.546-2.054 2.058-4.381 3.821-6.912 5.248l-97.83 55.165c-9.907 5.587-22.035 5.494-31.856-0.243s-15.859-16.256-15.859-27.632v-85.334c0-5.891-4.778-10.666-10.669-10.666h-511.999z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["camera-unavailable"],"defaultCode":59695,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":963,"name":"camera-unavailable","prevSize":32,"id":50,"code":59695},"setIdx":0,"setId":2,"iconIdx":51},{"icon":{"paths":["M224.248 304.026c-49.642 68.947-66.502 152.646-66.502 207.968v1.453l-0.132 1.446c-9.702 106.717 28.59 181.93 90.135 234.006 62.938 53.254 152.152 83.731 244.197 93.958 91.965 10.218 193.27 1.446 273.306-15.482 40.022-8.461 73.616-18.733 97.443-29.075 9.245-4.013 16.438-7.786 21.734-11.126-2.464-1.565-5.446-3.306-9.002-5.197-9.222-4.912-19.779-9.578-30.733-14.368l-1.914-0.835c-9.667-4.221-20.47-8.941-28.656-13.517-14.835-8.298-29.389-17.734-40.006-27.776-5.222-4.941-11.165-11.571-15.146-19.827-4.208-8.742-7.226-21.792-1.306-35.597 31.978-74.621 47.178-115.494 54.538-142.483 6.874-25.2 6.874-37.888 6.874-58.064v-0.182c0-16.035-9.318-89.517-55.811-158.032-45.018-66.338-125.99-129.968-274.854-129.968-134.637 0-215.698 55.382-264.165 122.698zM172.309 266.63c60.333-83.796 160.606-149.302 316.103-149.302 171.136 0 271.494 75.037 327.811 158.032 54.842 80.819 66.854 167.338 66.854 193.968 0 22.384-0.022 41.696-9.126 75.088-8.131 29.805-23.485 70.928-51.946 137.923 5.261 4.166 13.072 9.306 23.36 15.062 5.315 2.97 13.485 6.55 24.963 11.568 10.653 4.659 23.437 10.266 35.174 16.515 11.258 5.994 24.416 14.029 34.202 24.538 10.234 10.992 20.973 29.846 13.299 52.864-5.056 15.168-16.794 25.939-26.576 33.094-10.63 7.776-23.818 14.762-38.253 21.030-29.008 12.589-67.030 23.962-109.683 32.982-85.309 18.038-193.581 27.587-293.616 16.474-99.955-11.107-202.74-44.634-278.468-108.71-76.833-65.011-123.811-159.994-112.66-287.222 0.286-65.549 19.841-162.349 78.561-243.904zM493.744 320c17.674 0 32 14.326 32 32v224c0 17.674-14.326 32-32 32s-32-14.326-32-32v-224c0-17.674 14.326-32 32-32zM525.744 672c0-17.674-14.326-32-32-32s-32 14.326-32 32c0 17.674 14.326 32 32 32s32-14.326 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["canned-response"],"defaultCode":59697,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":964,"name":"canned-response","prevSize":32,"id":51,"code":59697},"setIdx":0,"setId":2,"iconIdx":52},{"icon":{"paths":["M193.352 181.331c-53.020 0-96 42.981-96 96v469.335c0 53.018 42.98 96 96 96h639.999c53.021 0 96-42.982 96-96v-469.335c0-53.019-42.979-96-96-96h-639.999zM161.352 277.331c0-17.673 14.327-32 32-32h639.999c17.674 0 32 14.327 32 32v202.673h-703.999v-202.673zM161.352 544.003h703.999v202.662c0 17.67-14.326 32-32 32h-639.999c-17.673 0-32-14.33-32-32v-202.662zM812.016 661.331c0-35.347-28.653-64-64-64-35.344 0-64 28.653-64 64s28.656 64 64 64c35.347 0 64-28.653 64-64z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["card"],"defaultCode":59698,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":965,"name":"card","prevSize":32,"id":52,"code":59698},"setIdx":0,"setId":2,"iconIdx":53},{"icon":{"paths":["M368 182.4c0-17.673-14.326-32-32-32s-32 14.327-32 32v144h-144c-17.673 0-32 14.326-32 32s14.327 32 32 32h144v288h-144c-17.673 0-32 14.326-32 32s14.327 32 32 32h144v144c0 17.674 14.327 32 32 32s32-14.326 32-32v-144h288v144c0 17.674 14.326 32 32 32s32-14.326 32-32v-144h144c17.674 0 32-14.326 32-32s-14.326-32-32-32h-144v-80h-64v80h-288v-288h80v-64h-80v-144z","M640.515 327.283c-15.328-3.59-31.306-3.338-46.512 0.733-41.763 11.187-70.803 49.030-70.803 92.269v35.539c0 36.003 29.187 65.194 65.194 65.194h210.413c36.006 0 65.194-29.19 65.194-65.194v-28.336c0-47.667-33.040-88.957-79.27-99.792-16.413-3.846-33.613-3.603-49.946 0.771l-25.827 6.918c-10.381 2.781-21.286 2.95-31.747 0.499l-36.694-8.602z","M782.637 217.037c0 49.174-39.862 89.037-89.037 89.037s-89.037-39.863-89.037-89.037c0-49.174 39.862-89.037 89.037-89.037s89.037 39.863 89.037 89.037z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["channel-auto-join"],"defaultCode":59746,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":966,"name":"channel-auto-join","prevSize":32,"id":53,"code":59746},"setIdx":0,"setId":2,"iconIdx":54},{"icon":{"paths":["M236.709 162.578c11.779-5.037 25.426-2.564 34.688 6.286l150.709 144c6.32 6.037 9.894 14.396 9.894 23.136s-3.574 17.101-9.894 23.136l-150.709 144c-9.262 8.851-22.909 11.325-34.688 6.288s-19.419-16.614-19.419-29.424v-112h-73.29c-17.673 0-32-14.326-32-32 0-17.672 14.327-31.999 32-31.999h73.29v-112c0-12.81 7.64-24.386 19.419-29.423zM320 368.179v-0.179h0.189l-0.189 0.179zM320.189 304.001h-0.189v-0.179l0.189 0.179z","M492.899 303.258c8.762-9.388 21.245-15.258 35.101-15.258 26.509 0 48 21.49 48 48s-21.491 48-48 48c-16.582 0-31.203-8.41-39.824-21.197l-43.098 48.483c20.49 22.554 50.051 36.714 82.922 36.714 61.856 0 112-50.144 112-112s-50.144-112-112-112c-25.549 0-49.098 8.554-67.942 22.955l32.842 56.303z","M145.615 483.229l32.174 64.349c-0.861 3.040-1.318 6.23-1.318 9.501v44.688c0 17.674 14.327 32 32 32h79.53v64h-79.53c-53.019 0-96-42.979-96-96v-44.688c0-28.848 12.515-55.488 33.144-73.85z","M625.267 640h-0.797c0.259 0.598 0.525 1.194 0.797 1.786v-1.786z","M424.714 640h-0.797v1.786c0.272-0.592 0.538-1.187 0.797-1.786z","M477.901 494.515c-28.56-10.957-60.291-10.211-88.307 2.067-42.282 18.534-69.594 60.326-69.594 106.49v132.928c0 53.021 42.979 96 96 96h224c53.021 0 96-42.979 96-96v-125.062c0-51.162-31.536-97.034-79.306-115.354-30.352-11.642-64.067-10.851-93.84 2.198l-2.070 0.909c-21.523 9.434-45.901 10.006-67.843 1.59l-15.040-5.766zM415.286 555.2c12.595-5.52 26.858-5.856 39.699-0.931l15.040 5.77c37.664 14.445 79.504 13.462 116.451-2.73l2.070-0.909c14.349-6.288 30.602-6.669 45.229-1.059 23.024 8.829 38.224 30.938 38.224 55.597v125.062c0 17.674-14.326 32-32 32h-224c-17.674 0-32-14.326-32-32v-132.928c0-20.752 12.278-39.539 31.286-47.872z","M864 320c0-53.019-42.979-96-96-96s-96 42.981-96 96c0 53.021 42.979 96 96 96s96-42.979 96-96zM800 320c0 17.674-14.326 32-32 32s-32-14.326-32-32c0-17.673 14.326-32 32-32s32 14.327 32 32z","M840.714 697.766h-72.714v-64h72.714c17.674 0 32-14.326 32-32v-44.688c0-15.050-9.664-28.394-23.958-33.091-7.536-2.474-15.69-2.304-23.114 0.483l-4.554 1.709c-19.77 7.421-40.89 9.978-61.619 7.632-12.438-31.683-37.722-57.549-70.774-70.227-1.754-0.672-3.52-1.302-5.296-1.894 18.058-5.312 37.36-5.040 55.344 0.867l14.182 4.659c14.886 4.893 30.998 4.554 45.667-0.954l4.554-1.709c21.069-7.91 44.205-8.394 65.581-1.37 40.566 13.325 67.987 51.197 67.987 93.894v44.688c0 53.021-42.982 96-96 96z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["channel-move-to-team"],"defaultCode":59747,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":967,"name":"channel-move-to-team","prevSize":32,"id":54,"code":59747},"setIdx":0,"setId":2,"iconIdx":55},{"icon":{"paths":["M368 160c0-17.673-14.326-32-32-32s-32 14.327-32 32v144h-144c-17.673 0-32 14.327-32 32s14.327 32 32 32h144v288h-144c-17.673 0-32 14.326-32 32s14.327 32 32 32h144v144c0 17.674 14.327 32 32 32s32-14.326 32-32v-144h288v144c0 17.674 14.326 32 32 32s32-14.326 32-32v-144h144c17.674 0 32-14.326 32-32s-14.326-32-32-32h-144v-80h-58.666c-1.786 0-3.565-0.042-5.334-0.118v80.118h-288v-288h168.79c-0.522-5.264-0.79-10.602-0.79-16v-48h-168v-144z","M760 96c-57.437 0-104 46.562-104 104v56h-24c-17.674 0-32 14.327-32 32v192c0 17.674 14.326 32 32 32h256c17.674 0 32-14.326 32-32v-192c0-17.673-14.326-32-32-32h-24v-56c0-57.438-46.563-104-104-104zM800 255.238h-80v-55.238c0-22.092 17.907-40 40-40s40 17.908 40 40v55.238z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["channel-private"],"defaultCode":59699,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":968,"name":"channel-private","prevSize":32,"id":55,"code":59699},"setIdx":0,"setId":2,"iconIdx":56},{"icon":{"paths":["M336 128c17.674 0 32 14.327 32 32v144h288v-144c0-17.673 14.326-32 32-32s32 14.327 32 32v144h144c17.674 0 32 14.327 32 32s-14.326 32-32 32h-144v288h144c17.674 0 32 14.326 32 32s-14.326 32-32 32h-144v144c0 17.674-14.326 32-32 32s-32-14.326-32-32v-144h-288v144c0 17.674-14.326 32-32 32s-32-14.326-32-32v-144h-144c-17.673 0-32-14.326-32-32s14.327-32 32-32h144v-288h-144c-17.673 0-32-14.326-32-32s14.327-32 32-32h144v-144c0-17.673 14.327-32 32-32zM368 368v288h288v-288h-288z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["channel-public"],"defaultCode":59700,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":969,"name":"channel-public","prevSize":32,"id":56,"code":59700},"setIdx":0,"setId":2,"iconIdx":57},{"icon":{"paths":["M886.627 105.372c12.496 12.497 12.496 32.758 0 45.255l-89.373 89.372 89.373 89.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-89.373-89.372-89.373 89.372c-12.496 12.496-32.758 12.496-45.254 0s-12.496-32.758 0-45.254l89.373-89.373-89.373-89.372c-12.496-12.497-12.496-32.758 0-45.255s32.758-12.497 45.254 0l89.373 89.373 89.373-89.373c12.496-12.497 32.758-12.497 45.254 0zM226.501 304.042c-49.642 68.947-66.502 152.646-66.502 207.968v1.453l-0.132 1.446c-9.701 106.717 28.59 181.93 90.135 234.006 62.938 53.254 152.151 83.731 244.196 93.958 91.968 10.218 193.27 1.446 273.309-15.482 40.019-8.461 73.613-18.733 97.44-29.075 9.245-4.013 16.438-7.786 21.738-11.126-2.467-1.565-5.446-3.306-9.005-5.2-9.222-4.909-19.776-9.574-30.733-14.365l-1.917-0.838c-9.667-4.221-20.47-8.938-28.653-13.517-14.835-8.294-29.389-17.731-40.003-27.773-5.226-4.941-11.168-11.571-15.146-19.827-4.211-8.742-7.226-21.792-1.309-35.6 42.086-98.205 54.957-137.722 59.219-163.318 2.906-17.434 19.392-29.21 36.822-26.307 17.434 2.906 29.213 19.389 26.307 36.822-5.453 32.749-20.333 76.41-58.006 165.088 5.261 4.166 13.069 9.306 23.357 15.059 5.315 2.973 13.485 6.554 24.963 11.571 10.656 4.656 23.437 10.266 35.174 16.515 11.261 5.994 24.419 14.029 34.202 24.538 10.234 10.992 20.973 29.846 13.299 52.864-5.053 15.168-16.794 25.939-26.576 33.094-10.627 7.776-23.814 14.762-38.253 21.027-29.005 12.592-67.027 23.965-109.68 32.986-85.312 18.038-193.584 27.587-293.616 16.47-99.955-11.104-202.742-44.63-278.471-108.707-76.833-65.014-123.811-159.997-112.66-287.222 0.286-65.549 19.841-162.349 78.561-243.904 60.333-83.796 160.605-149.302 316.103-149.302 17.674 0 32 14.327 32 32s-14.326 32-32 32c-134.637 0-215.697 55.382-264.164 122.698z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chat-close"],"defaultCode":59701,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":970,"name":"chat-close","prevSize":32,"id":57,"code":59701},"setIdx":0,"setId":2,"iconIdx":58},{"icon":{"paths":["M778 93.833c-11.795-13.162-32.026-14.271-45.187-2.477s-14.272 32.025-2.477 45.187l81.222 90.645h-216.358c-17.674 0-32 14.327-32 32s14.326 32 32 32h216.358l-81.222 90.646c-11.795 13.162-10.685 33.392 2.477 45.187 13.162 11.792 33.392 10.685 45.187-2.477l129.030-144.001c10.893-12.154 10.893-30.556 0-42.71l-129.030-144zM159.999 512.010c0-55.322 16.86-139.021 66.502-207.968 48.467-67.316 129.527-122.698 264.164-122.698 17.674 0 32-14.327 32-32s-14.326-32-32-32c-155.498 0-255.77 65.507-316.102 149.302-58.72 81.555-78.275 178.355-78.561 243.904-11.151 127.229 35.827 222.211 112.66 287.222 75.729 64.077 178.516 97.603 278.471 108.707 100.032 11.117 208.304 1.568 293.616-16.47 42.653-9.021 80.675-20.394 109.68-32.982 14.438-6.269 27.626-13.254 38.253-21.030 9.782-7.155 21.523-17.926 26.579-33.094 7.67-23.018-3.069-41.872-13.302-52.864-9.782-10.509-22.941-18.544-34.202-24.538-11.738-6.25-24.518-11.859-35.171-16.515-11.482-5.018-19.651-8.598-24.966-11.571-10.288-5.754-18.096-10.89-23.357-15.059 37.674-88.678 52.554-132.339 58.010-165.088 2.902-17.43-8.877-33.917-26.31-36.822-17.43-2.902-33.917 8.877-36.822 26.307-4.262 25.597-17.133 65.114-59.219 163.318-5.917 13.808-2.902 26.858 1.309 35.6 3.978 8.256 9.92 14.886 15.146 19.827 10.614 10.042 25.171 19.478 40.003 27.776 8.186 4.576 18.989 9.296 28.656 13.517v0l1.914 0.835c10.957 4.79 21.51 9.456 30.733 14.368 3.558 1.891 6.541 3.632 9.005 5.197-5.299 3.341-12.493 7.114-21.738 11.126-23.827 10.342-57.421 20.614-97.44 29.075-80.038 16.928-181.341 25.699-273.309 15.482-92.045-10.227-181.258-40.704-244.196-93.958-61.545-52.077-99.836-127.29-90.135-234.006l0.132-1.446v-1.453z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chat-forward"],"defaultCode":59702,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":971,"name":"chat-forward","prevSize":32,"id":58,"code":59702},"setIdx":0,"setId":2,"iconIdx":59},{"icon":{"paths":["M854.506 233.252c12.563 12.429 12.672 32.691 0.243 45.254l-474.877 480c-6.013 6.077-14.208 9.498-22.755 9.494-8.55-0.003-16.742-3.427-22.752-9.507l-165.126-167.088c-12.423-12.57-12.303-32.832 0.268-45.254s32.831-12.304 45.254 0.269l142.375 144.067 452.115-456.992c12.429-12.564 32.691-12.672 45.254-0.243z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["check"],"defaultCode":59703,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":972,"name":"check","prevSize":32,"id":59,"code":59703},"setIdx":0,"setId":2,"iconIdx":60},{"icon":{"paths":["M204.8 128h614.4c42.416 0 76.8 34.385 76.8 76.8v614.4c0 42.416-34.384 76.8-76.8 76.8h-614.4c-42.415 0-76.8-34.384-76.8-76.8v-614.4c0-42.415 34.385-76.8 76.8-76.8zM769.062 336.88c9.322-9.424 9.238-24.619-0.182-33.941-9.424-9.322-24.621-9.241-33.942 0.182l-339.085 342.745-106.782-108.051c-9.317-9.43-24.513-9.52-33.94-0.202s-9.518 24.512-0.201 33.939l123.842 125.318c4.509 4.56 10.653 7.126 17.066 7.13s12.557-2.563 17.069-7.12l356.157-360z"],"attrs":[{"fill":"rgb(29, 116, 245)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":5}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":4}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":6}]},"tags":["checkbox-checked"],"defaultCode":59654,"grid":0},"attrs":[{"fill":"rgb(29, 116, 245)"}],"properties":{"order":973,"name":"checkbox-checked","prevSize":32,"id":60,"code":59654},"setIdx":0,"setId":2,"iconIdx":61},{"icon":{"paths":["M819.2 204.8v614.4h-614.4v-614.4h614.4zM204.8 128c-42.415 0-76.8 34.385-76.8 76.8v614.4c0 42.416 34.385 76.8 76.8 76.8h614.4c42.416 0 76.8-34.384 76.8-76.8v-614.4c0-42.415-34.384-76.8-76.8-76.8h-614.4z"],"attrs":[{"fill":"rgb(203, 206, 209)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":8}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":8}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":10}]},"tags":["checkbox-unchecked"],"defaultCode":59653,"grid":0},"attrs":[{"fill":"rgb(203, 206, 209)"}],"properties":{"order":974,"name":"checkbox-unchecked","prevSize":32,"id":61,"code":59653},"setIdx":0,"setId":2,"iconIdx":62},{"icon":{"paths":["M281.372 436.042c12.497-12.499 32.758-12.499 45.255 0l185.373 185.373 185.373-185.373c12.496-12.499 32.758-12.499 45.254 0 12.496 12.496 12.496 32.758 0 45.254l-208 208c-12.496 12.496-32.758 12.496-45.254 0l-208-208c-12.497-12.496-12.497-32.758 0-45.254z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-down"],"defaultCode":59704,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":975,"name":"chevron-down","prevSize":32,"id":62,"code":59704},"setIdx":0,"setId":2,"iconIdx":63},{"icon":{"paths":["M587.962 281.372c12.496 12.497 12.496 32.758 0 45.255l-185.373 185.373 185.373 185.373c12.496 12.496 12.496 32.758 0 45.254-12.499 12.496-32.758 12.496-45.258 0l-208-208c-12.496-12.496-12.496-32.758 0-45.254l208-208c12.499-12.497 32.758-12.497 45.258 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-left"],"defaultCode":59706,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":976,"name":"chevron-left","prevSize":32,"id":63,"code":59706},"setIdx":0,"setId":2,"iconIdx":64},{"icon":{"paths":["M670.17 183.165c16.662 16.662 16.662 43.677 0 60.34l-268.496 268.495 268.496 268.499c16.662 16.662 16.662 43.677 0 60.339s-43.677 16.662-60.339 0l-298.668-298.669c-8.002-8-12.497-18.851-12.497-30.17 0-11.315 4.495-22.166 12.497-30.17l298.668-298.666c16.662-16.662 43.677-16.662 60.339 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-left-big"],"defaultCode":59705,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":977,"name":"chevron-left-big","prevSize":32,"id":64,"code":59705},"setIdx":0,"setId":2,"iconIdx":65},{"icon":{"paths":["M436.038 742.627c-12.496-12.496-12.496-32.758 0-45.254l185.373-185.373-185.373-185.373c-12.496-12.497-12.496-32.758 0-45.254 12.499-12.497 32.758-12.497 45.254 0l208 208c12.499 12.496 12.499 32.758 0 45.254l-207.997 208c-12.499 12.496-32.758 12.496-45.258 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-right"],"defaultCode":59707,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":978,"name":"chevron-right","prevSize":32,"id":65,"code":59707},"setIdx":0,"setId":2,"iconIdx":66},{"icon":{"paths":["M742.627 587.958c-12.496 12.499-32.758 12.499-45.254 0l-185.373-185.373-185.373 185.373c-12.496 12.499-32.758 12.499-45.254 0-12.497-12.496-12.497-32.758 0-45.254l208-208c12.496-12.496 32.758-12.496 45.254 0l208 208c12.496 12.496 12.496 32.758 0 45.254z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-up"],"defaultCode":59708,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":979,"name":"chevron-up","prevSize":32,"id":66,"code":59708},"setIdx":0,"setId":2,"iconIdx":67},{"icon":{"paths":["M512 864c194.403 0 352-157.597 352-352 0-46.522-9.024-90.931-25.418-131.581l48.518-48.518c26.211 54.496 40.899 115.581 40.899 180.099 0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416 95.376 0 183.254 32.096 253.424 86.076l-45.712 45.712c-58.221-42.623-130.029-67.788-207.712-67.788-194.404 0-352 157.596-352 352s157.596 352 352 352zM902.63 230.623c12.496-12.499 12.493-32.76-0.006-45.255s-32.762-12.491-45.254 0.008l-345.386 345.503-105.341-105.491c-12.486-12.506-32.749-12.522-45.254-0.032-12.506 12.486-12.522 32.749-0.032 45.254l127.971 128.157c6 6.006 14.144 9.386 22.634 9.389 8.493 0 16.637-3.373 22.64-9.376l368.029-368.157z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["circle-check"],"defaultCode":59709,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":980,"name":"circle-check","prevSize":32,"id":67,"code":59709},"setIdx":0,"setId":2,"iconIdx":68},{"icon":{"paths":["M608 192c0-53.019-42.979-96-96-96s-96 42.981-96 96h-192c-17.673 0-32 14.327-32 32v672c0 17.674 14.327 32 32 32h576c17.674 0 32-14.326 32-32v-672c0-17.673-14.326-32-32-32h-192zM256 864v-608h96v64c0 17.674 14.326 32 32 32h256c17.674 0 32-14.326 32-32v-64h96v608h-512zM512 224c17.674 0 32-14.327 32-32s-14.326-32-32-32c-17.674 0-32 14.327-32 32s14.326 32 32 32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["clipboard"],"defaultCode":59710,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":981,"name":"clipboard","prevSize":32,"id":68,"code":59710},"setIdx":0,"setId":2,"iconIdx":69},{"icon":{"paths":["M864 512c0 194.403-157.597 352-352 352s-352-157.597-352-352c0-194.404 157.596-352 352-352s352 157.596 352 352zM928 512c0-229.75-186.25-416-416-416s-416 186.25-416 416c0 229.75 186.25 416 416 416s416-186.25 416-416zM544 288c0-17.673-14.326-32-32-32s-32 14.327-32 32v224c0 8.486 3.373 16.627 9.373 22.627l96 96c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-86.627-86.627v-210.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["clock"],"defaultCode":59711,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":982,"name":"clock","prevSize":32,"id":69,"code":59711},"setIdx":0,"setId":2,"iconIdx":70},{"icon":{"paths":["M806.627 262.628c12.496-12.497 12.496-32.758 0-45.255s-32.758-12.497-45.254 0l-249.373 249.373-249.372-249.373c-12.497-12.497-32.758-12.497-45.255 0s-12.497 32.758 0 45.255l249.373 249.372-249.373 249.373c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l249.372-249.373 249.373 249.373c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-249.373-249.373 249.373-249.372z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["close"],"defaultCode":59712,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":983,"name":"close","prevSize":32,"id":70,"code":59712},"setIdx":0,"setId":2,"iconIdx":71},{"icon":{"paths":["M273.129 356.678c6.747-28.298 25.696-52.004 51.21-67.152 25.6-15.2 56.323-20.858 84.698-14.53 27.642 6.163 55.117 24.12 74.874 60.339l22.541 41.325 30.134-36.16c27.238-32.689 85.126-39.713 134.714-14.064 23.562 12.186 42.208 30.618 52.064 53.488 9.654 22.406 12.112 51.898-1.434 89.149l-15.616 42.938h45.686c53.606 0 82.419 15.882 97.642 33.75 15.651 18.374 21.898 44.646 18.557 74.714-3.344 30.083-16.054 60.518-33.456 82.89-17.939 23.066-36.646 32.646-50.742 32.646h-543.998c-18.791 0-37.068-10.362-52.195-31.578-15.217-21.344-24.978-51.050-25.818-81.312-0.84-30.227 7.237-57.914 23.733-77.491 15.796-18.746 42.268-33.619 86.279-33.619h59.791l-33.165-49.75c-27.882-41.824-32.118-77.814-25.498-105.581zM518.218 272.084c-26.339-32.073-59.667-51.619-95.251-59.554-45.626-10.174-92.902-0.833-131.301 21.965-38.487 22.85-69.538 60.142-80.791 107.342-8.278 34.72-5.369 72.758 10.731 111.77-35.67 8.464-64.099 26.186-84.825 50.784-29.004 34.422-39.927 78.733-38.766 120.506 1.159 41.738 14.399 84.032 37.682 116.688 23.373 32.784 59.097 58.426 104.306 58.426h543.999c41.907 0 77.2-26.419 101.261-57.354 24.598-31.629 41.888-73.197 46.544-115.114 4.659-41.933-3.094-87.658-33.443-123.283-24.106-28.301-59.504-46.774-105.616-53.456 5.83-35.194 1.686-67.674-10.605-96.205-16.646-38.628-46.998-67.197-81.437-85.010-54.902-28.397-128.733-32.652-182.486 2.495zM512 437.331c17.674 0 32 14.33 32 32v53.328h53.334c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-53.334v53.341c0 17.674-14.326 32-32 32s-32-14.326-32-32v-53.341h-53.331c-17.674 0-32-14.326-32-32 0-17.67 14.326-32 32-32h53.331v-53.328c0-17.67 14.326-32 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["cloud-connectivity"],"defaultCode":59713,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":984,"name":"cloud-connectivity","prevSize":32,"id":71,"code":59713},"setIdx":0,"setId":2,"iconIdx":72},{"icon":{"paths":["M630.157 204.798c16.493 6.344 24.723 24.859 18.378 41.355l-213.331 554.667c-6.346 16.496-24.861 24.723-41.357 18.381-16.493-6.346-24.723-24.861-18.378-41.357l213.331-554.666c6.346-16.495 24.861-24.724 41.357-18.38zM321.296 361.37c12.496 12.499 12.496 32.758 0 45.258l-105.373 105.37 105.373 105.373c12.496 12.499 12.496 32.758 0 45.258-12.497 12.496-32.759 12.496-45.255 0l-128-128c-12.497-12.499-12.497-32.758 0-45.258l128-128c12.497-12.496 32.758-12.496 45.255 0zM702.707 361.37c12.496-12.496 32.758-12.496 45.254 0l128 128c12.496 12.499 12.496 32.758 0 45.258l-128 128c-12.496 12.496-32.758 12.496-45.254 0-12.496-12.499-12.496-32.758 0-45.258l105.373-105.373-105.373-105.37c-12.496-12.499-12.496-32.758 0-45.258z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["code"],"defaultCode":59714,"grid":0},"attrs":[{}],"properties":{"order":985,"name":"code","prevSize":32,"id":72,"code":59714},"setIdx":0,"setId":2,"iconIdx":73},{"icon":{"paths":["M507.488 130.134c16.496 6.344 24.723 24.859 18.378 41.354l-160 416c-6.342 16.496-24.858 24.723-41.354 18.381-16.494-6.346-24.723-24.861-18.379-41.357l160.002-415.998c6.342-16.495 24.858-24.724 41.354-18.38z","M278.628 249.373c12.497 12.497 12.497 32.758 0 45.255l-73.373 73.372 73.373 73.373c12.497 12.496 12.497 32.758 0 45.254-12.497 12.499-32.758 12.499-45.255 0l-96-96c-6.001-6-9.372-14.141-9.372-22.627s3.372-16.624 9.372-22.627l96-95.999c12.497-12.497 32.758-12.497 45.255 0z","M553.373 249.373c12.496-12.497 32.758-12.497 45.254 0l96 95.999c6 6.003 9.373 14.141 9.373 22.627s-3.373 16.627-9.373 22.627l-96 96c-12.496 12.499-32.758 12.499-45.254 0-12.496-12.496-12.496-32.758 0-45.254l73.373-73.373-73.373-73.372c-12.496-12.497-12.496-32.758 0-45.255z","M672 160c0-17.673 14.326-32 32-32h96c53.021 0 96 42.981 96 96v576c0 53.021-42.979 96-96 96h-576c-53.020 0-96-42.979-96-96v-160c0-17.674 14.327-32 32-32s32 14.326 32 32v192h640v-640h-128c-17.674 0-32-14.327-32-32z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124319081245699212911624514522416519902101":[{},{},{},{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{},{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{},{},{}]},"tags":["code-block"],"defaultCode":59840,"grid":0},"attrs":[{},{},{},{}],"properties":{"order":986,"id":73,"name":"code-block","prevSize":32,"code":59840},"setIdx":0,"setId":2,"iconIdx":74},{"icon":{"paths":["M770.704 224c17.674 0 32 14.327 32 32v544c0 17.674-14.326 32-32 32h-543.999c-17.673 0-32-14.326-32-32v-128c17.673 0 32-14.326 32-32s-14.327-32-32-32v-192c17.673 0 32-14.326 32-32s-14.327-32-32-32v-96c0-17.673 14.327-32 32-32h543.999zM130.705 608c-17.673 0-32 14.326-32 32s14.327 32 32 32v128c0 53.021 42.981 96 96 96h543.999c53.021 0 96-42.979 96-96v-544c0-53.019-42.979-96-96-96h-543.999c-53.019 0-96 42.981-96 96v96c-17.673 0-32 14.326-32 32s14.327 32 32 32v192zM427.91 514.266c13.315-3.568 27.309-3.789 40.73-0.643l31.52 7.389c8.73 2.045 17.83 1.904 26.49-0.416l22.186-5.942c14.285-3.827 29.328-4.042 43.683-0.675 40.429 9.475 69.325 45.584 69.325 87.277v24.336c0 31.811-25.789 57.6-57.6 57.6h-180.739c-31.811 0-57.6-25.789-57.6-57.6v-30.525c0-37.862 25.434-71.005 62.006-80.8zM456.957 563.472c-5.206-1.219-10.634-1.133-15.798 0.25-14.189 3.798-24.054 16.656-24.054 31.344v30.525c0 3.536 2.867 6.4 6.4 6.4h180.739c3.533 0 6.4-2.864 6.4-6.4v-24.336c0-17.75-12.365-33.341-29.808-37.427-6.186-1.45-12.662-1.35-18.752 0.282l-22.186 5.942c-16.813 4.502-34.474 4.781-51.421 0.81l-31.52-7.389zM539.155 420.48c0-13.962-11.318-25.28-25.28-25.28s-25.283 11.318-25.283 25.28c0 13.962 11.322 25.28 25.283 25.28s25.28-11.318 25.28-25.28zM590.355 420.48c0 42.24-34.243 76.48-76.48 76.48-42.24 0-76.483-34.24-76.483-76.48s34.243-76.48 76.483-76.48c42.237 0 76.48 34.24 76.48 76.48z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["contacts"],"defaultCode":59715,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":987,"name":"contacts","prevSize":32,"id":74,"code":59715},"setIdx":0,"setId":2,"iconIdx":75},{"icon":{"paths":["M464 272c-35.347 0-64 28.654-64 64v480c0 35.347 28.653 64 64 64h352c35.347 0 64-28.653 64-64v-304c0-6.509-1.984-12.864-5.69-18.214l-134.458-194.215c-11.952-17.267-31.619-27.571-52.621-27.571h-223.232zM464 336h144v144c0 35.347 28.653 64 64 64h144v272h-352v-480zM672 480v-144h15.232l99.693 144h-114.925zM144 208c0-35.346 28.654-64 64-64h241.844c18.032 0 35.229 7.607 47.357 20.949l39.136 43.051h-328.336v480h128v64h-128c-35.346 0-64-28.653-64-64v-480z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["copy"],"defaultCode":59716,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":988,"name":"copy","prevSize":32,"id":75,"code":59716},"setIdx":0,"setId":2,"iconIdx":76},{"icon":{"paths":["M824.682 183.521c-37.19-37.986-98.202-38.583-136.131-1.333l-348.48 342.237c-12.739 12.512-21.733 28.32-25.976 45.654l-23.681 96.749c-6.94 28.355 16.754 54.845 45.747 51.142l90.691-11.578c20.224-2.582 39.104-11.52 53.907-25.52l360.486-340.922c38.986-36.868 40.173-98.482 2.637-136.82l-19.2-19.61zM733.485 227.821c12.643-12.417 32.979-12.218 45.376 0.444l19.2 19.61c12.512 12.78 12.115 33.317-0.88 45.607l-69.965 66.169-63.446-63.364 69.715-68.466zM618.074 341.162l62.592 62.512-243.971 230.73c-4.934 4.666-11.229 7.645-17.968 8.506l-58.307 7.443 15.926-65.075c1.414-5.779 4.413-11.046 8.659-15.219l233.069-228.896zM193.608 265.602c0-17.673 14.346-32 32.042-32h281.332c17.696 0 32.042-14.327 32.042-32s-14.346-32-32.042-32h-281.332c-53.089 0-96.127 42.981-96.127 96v534.402c0 53.018 43.037 95.997 96.127 95.997h529.764c53.091 0 96.128-42.979 96.128-96v-279.414c0-17.67-14.346-32-32.042-32s-32.042 14.33-32.042 32v279.414c0 17.674-14.346 32-32.045 32h-529.764c-17.696 0-32.042-14.326-32.042-31.997v-534.402z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["create"],"defaultCode":59717,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":989,"name":"create","prevSize":32,"id":76,"code":59717},"setIdx":0,"setId":2,"iconIdx":77},{"icon":{"paths":["M717.373 298.663c0-17.673-14.326-32-32-32s-32 14.327-32 32v426.665c0 17.674 14.326 32 32 32s32-14.326 32-32v-426.665z","M514.704 394.672c17.674 0 32 14.326 32 32v298.666c0 17.674-14.326 32-32 32s-32-14.326-32-32v-298.666c0-17.674 14.326-32 32-32z","M376.038 554.672c0-17.674-14.326-32-32-32s-32 14.326-32 32v170.669c0 17.67 14.327 32 32 32s32-14.33 32-32v-170.669z","M130.705 199.556v624.889c0 39.52 32.036 71.555 71.556 71.555h624.888c39.52 0 71.555-32.035 71.555-71.555v-624.889c0-39.519-32.035-71.556-71.555-71.556h-624.888c-39.519 0-71.556 32.036-71.556 71.556zM202.26 192h624.888c4.173 0 7.555 3.383 7.555 7.556v624.889c0 4.173-3.382 7.555-7.555 7.555h-624.888c-4.173 0-7.556-3.382-7.556-7.555v-624.889c0-4.173 3.383-7.556 7.556-7.556z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["dashboard"],"defaultCode":59718,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":990,"name":"dashboard","prevSize":32,"id":77,"code":59718},"setIdx":0,"setId":2,"iconIdx":78},{"icon":{"paths":["M739.68 864v-448h-448.593v448h448.593zM227.003 864v-448c-35.393 0-64.084-28.653-64.084-64v-128c0-35.346 28.692-64 64.084-64h224.297c0-35.346 28.691-64 64.083-64 35.395 0 64.086 28.654 64.086 64h224.294c35.395 0 64.086 28.654 64.086 64v128c0 35.347-28.691 64-64.086 64v448c0 35.347-28.691 64-64.083 64h-448.593c-35.393 0-64.085-28.653-64.085-64zM803.763 224h-576.761v128h576.761v-128zM419.258 544v192c0 17.674 14.346 32 32.042 32s32.042-14.326 32.042-32v-192c0-17.674-14.346-32-32.042-32s-32.042 14.326-32.042 32zM579.469 512c17.696 0 32.042 14.326 32.042 32v192c0 17.674-14.346 32-32.042 32s-32.042-14.326-32.042-32v-192c0-17.674 14.346-32 32.042-32z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["delete"],"defaultCode":59719,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":991,"name":"delete","prevSize":32,"id":78,"code":59719},"setIdx":0,"setId":2,"iconIdx":79},{"icon":{"paths":["M341.334 778.672c-17.674 0-32 14.326-32 32s14.327 32 32 32h341.334c17.67 0 32-14.326 32-32s-14.33-32-32-32h-341.334z","M85.334 298.672c0-70.692 57.308-128 128-128h597.335c70.691 0 128 57.308 128 128v298.666c0 70.694-57.309 128-128 128h-597.335c-70.692 0-128-57.306-128-128v-298.666zM213.334 234.672c-35.346 0-64 28.654-64 64v298.666c0 35.347 28.654 64 64 64h597.335c35.344 0 64-28.653 64-64v-298.666c0-35.347-28.656-64-64-64h-597.335z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["desktop"],"defaultCode":59720,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":992,"name":"desktop","prevSize":32,"id":79,"code":59720},"setIdx":0,"setId":2,"iconIdx":80},{"icon":{"paths":["M325.837 160c0-17.673-14.347-32-32.043-32h-64.085c-17.696 0-32.042 14.327-32.042 32v64c0 17.673 14.346 32 32.042 32h64.085c17.696 0 32.043-14.327 32.043-32v-64zM325.837 586.666c0-17.674-14.347-32-32.043-32h-64.085c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.085c17.696 0 32.043-14.326 32.043-32v-64zM454.006 160c0-17.673 14.346-32 32.042-32h64.083c17.696 0 32.042 14.327 32.042 32v64c0 17.673-14.346 32-32.042 32h-64.083c-17.696 0-32.042-14.327-32.042-32v-64zM582.173 373.334c0-17.674-14.346-32-32.042-32h-64.083c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.083c17.696 0 32.042-14.326 32.042-32v-64zM454.006 586.666c0-17.674 14.346-32 32.042-32h64.083c17.696 0 32.042 14.326 32.042 32v64c0 17.674-14.346 32-32.042 32h-64.083c-17.696 0-32.042-14.326-32.042-32v-64zM582.173 800c0-17.674-14.346-32-32.042-32h-64.083c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.083c17.696 0 32.042-14.326 32.042-32v-64zM710.342 160c0-17.673 14.346-32 32.045-32h64.083c17.696 0 32.042 14.327 32.042 32v64c0 17.673-14.346 32-32.042 32h-64.083c-17.699 0-32.045-14.327-32.045-32v-64zM838.512 373.334c0-17.674-14.346-32-32.042-32h-64.083c-17.699 0-32.045 14.326-32.045 32v64c0 17.674 14.346 32 32.045 32h64.083c17.696 0 32.042-14.326 32.042-32v-64zM710.342 586.666c0-17.674 14.346-32 32.045-32h64.083c17.696 0 32.042 14.326 32.042 32v64c0 17.674-14.346 32-32.042 32h-64.083c-17.699 0-32.045-14.326-32.045-32v-64zM325.837 373.334c0-17.674-14.347-32-32.043-32h-64.085c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.085c17.696 0 32.043-14.326 32.043-32v-64z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["dialpad"],"defaultCode":59721,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":993,"name":"dialpad","prevSize":32,"id":80,"code":59721},"setIdx":0,"setId":2,"iconIdx":81},{"icon":{"paths":["M478.65 672c-17.674 0-32-14.326-32-32v-32h-32c-17.674 0-32-14.326-32-32s14.326-32 32-32h32v-58.88h-32c-17.674 0-32-14.326-32-32s14.326-32 32-32h32v-37.12c0-17.674 14.326-32 32-32 17.67 0 32 14.326 32 32v37.12h58.88v-37.12c0-17.674 14.326-32 32-32s32 14.326 32 32v37.12h37.12c17.67 0 32 14.326 32 32s-14.33 32-32 32h-37.12v58.88h37.12c17.67 0 32 14.326 32 32s-14.33 32-32 32h-37.12v32c0 17.674-14.326 32-32 32s-32-14.326-32-32v-32h-58.88v32c0 17.674-14.33 32-32 32zM510.65 544h58.88v-58.88h-58.88v58.88z","M158.648 672h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-192h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-160c0-35.346 28.654-64 64-64h608.001c35.344 0 64 28.654 64 64v640c0 35.347-28.656 64-64 64h-608.001c-35.346 0-64-28.653-64-64v-160zM830.65 192h-608.001v160h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v192h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v160h608.001v-640z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["directory"],"defaultCode":59648,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":994,"id":81,"name":"directory","prevSize":32,"code":59648},"setIdx":0,"setId":2,"iconIdx":82},{"icon":{"paths":["M833.35 128c10.285 0 20 2.425 28.611 6.735-11.834 4.684-22.922 11.812-32.493 21.383l-35.882 35.882h-568.236v160h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v192h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v88.237l-64 64v-152.237h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-192h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-160c0-35.346 28.654-64 64-64h607.999z","M361.117 896l64-64h408.234v-408.237l64-64v472.237c0 35.347-28.653 64-64 64h-472.234z","M604.23 352c8.166 0 15.616 3.056 21.267 8.090l-53.267 53.267v-29.357c0-17.674 14.33-32 32-32z","M513.35 421.12h51.117l-115.117 115.117v-51.117h-32c-17.67 0-32-14.326-32-32s14.33-32 32-32h32v-37.12c0-17.674 14.33-32 32-32 17.674 0 32 14.326 32 32v37.12z","M391.174 594.413l50.413-50.413h-24.237c-17.67 0-32 14.326-32 32 0 6.854 2.157 13.203 5.824 18.413z","M919.978 201.372c-12.496-12.497-32.755-12.497-45.254 0l-671.999 672c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l671.999-672c12.499-12.497 12.499-32.758 0-45.255z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["directory-disabled"],"defaultCode":59649,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":995,"id":82,"name":"directory-disabled","prevSize":32,"code":59649},"setIdx":0,"setId":2,"iconIdx":83},{"icon":{"paths":["M919.978 105.372c12.499 12.497 12.499 32.758 0 45.255l-89.373 89.372 89.373 89.373c12.499 12.496 12.499 32.758 0 45.254-12.496 12.496-32.755 12.496-45.254 0l-89.373-89.372-89.373 89.372c-12.496 12.496-32.755 12.496-45.254 0-12.496-12.496-12.496-32.758 0-45.254l89.373-89.373-89.373-89.372c-12.496-12.497-12.496-32.758 0-45.255 12.499-12.497 32.758-12.497 45.254 0l89.373 89.373 89.373-89.373c12.499-12.497 32.758-12.497 45.254 0z","M512.419 126.678c1.491 17.61-11.578 33.094-29.187 34.585-180.289 15.259-321.88 166.478-321.88 350.731 0 194.406 157.596 352 351.999 352 194.406 0 352-157.594 352-352 0-17.674 14.33-32 32-32 17.674 0 32 14.326 32 32 0 229.75-186.25 416-416 416s-415.999-186.25-415.999-416c0-217.79 167.341-396.462 380.482-414.503 17.61-1.491 33.094 11.577 34.586 29.187z","M119.219 432.47c0-17.674 14.327-32 32-32h329.037c17.67 0 32 14.326 32 32 0 17.67-14.33 32-32 32h-329.037c-17.673 0-32-14.33-32-32z","M119.233 640c0-17.674 14.327-32 32-32h724.255c17.674 0 32 14.326 32 32s-14.326 32-32 32h-724.255c-17.673 0-32-14.326-32-32z","M504.81 121.090c11.117 13.739 8.992 33.888-4.749 45.005-8.666 7.012-18.886 20.139-29.238 40.961-10.179 20.471-19.61 46.603-27.635 77.587-16.042 61.955-25.837 140.879-25.837 227.356 0 103.555 14.038 195.981 35.85 261.411 10.96 32.88 23.306 57.181 35.462 72.605 12.438 15.786 21.024 17.978 24.688 17.978 3.667 0 12.253-2.192 24.691-17.978 12.157-15.424 24.502-39.725 35.462-72.605 21.808-65.43 35.846-157.856 35.846-261.411 0-17.674 14.33-32 32-32 17.674 0 32 14.326 32 32 0 108.522-14.614 208.096-39.133 281.648-12.202 36.608-27.437 68.544-45.91 91.984-18.186 23.078-43.274 42.362-74.957 42.362-31.68 0-56.768-19.283-74.957-42.362-18.47-23.44-33.706-55.376-45.91-91.984-24.515-73.552-39.133-173.126-39.133-281.648 0-90.915 10.256-175.338 27.882-243.4 8.81-34.025 19.619-64.572 32.282-90.038 12.49-25.115 27.712-47.185 46.288-62.217 13.741-11.117 33.888-8.992 45.008 4.746z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["directory-error"],"defaultCode":59650,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":996,"id":83,"name":"directory-error","prevSize":32,"code":59650},"setIdx":0,"setId":2,"iconIdx":84},{"icon":{"paths":["M561.667 127.992c-121.696 0-200.973 50.509-248.813 115.801-46.216 63.073-61.638 137.752-61.933 188.616-8.705 98.746 28.601 172.896 89.422 223.469 59.686 49.626 140.202 75.258 217.85 83.738 77.75 8.486 161.715 1.197 227.856-12.547 33.066-6.87 62.774-15.581 85.642-25.331 11.366-4.848 22.029-10.368 30.797-16.669 7.875-5.661 18.541-14.976 23.242-28.835 7.286-21.475-3.133-38.784-11.965-48.102-8.41-8.877-19.427-15.405-28.24-20.016-9.306-4.867-19.379-9.206-27.533-12.707-8.973-3.856-14.858-6.4-18.56-8.432-4.845-2.662-8.842-5.088-12.026-7.203 20.256-47.142 31.549-77.043 37.696-99.19 7.293-26.272 7.315-41.725 7.315-58.909 0-21.523-9.603-88.542-52.81-151.108-44.701-64.73-124.074-122.573-257.939-122.573zM314.916 433.898c0-40.416 12.607-101.84 49.564-152.277 35.782-48.836 95.882-89.628 197.187-89.628 112.086 0 172.090 46.886 205.277 94.94 34.678 50.219 41.472 104.040 41.472 114.741v0.198c0 14.918 0 23.638-4.982 41.594-5.491 19.779-16.963 50.189-41.539 106.538-5.802 13.296-2.762 25.77 1.155 33.754 3.664 7.478 9.005 13.242 13.331 17.261 8.835 8.211 20.653 15.686 32.224 22.045 6.618 3.638 15.238 7.334 22.563 10.477l1.562 0.672c5.904 2.534 11.52 4.97 16.688 7.418-0.909 0.406-1.856 0.819-2.835 1.238-17.741 7.568-43.078 15.206-73.555 21.539-60.947 12.666-138.064 19.21-207.888 11.587-69.926-7.635-136.982-30.336-183.878-69.328-45.459-37.798-73.674-92.064-66.481-169.821l0.136-1.469v-1.478zM819.162 553.354l-0.074-0.086c0 0.003 0.010 0.013 0.029 0.035 0.010 0.013 0.026 0.029 0.045 0.051z","M178.552 502.474c7.496-11.258 16.26-22.259 26.436-32.592 0.876 31.747 6.169 61.226 15.216 88.358-15.094 30.877-18.374 59.315-18.374 65.357v0.186c0 11.382 0 17.536 3.524 30.701 3.993 14.918 12.441 38.211 30.867 82.022 5.256 12.496 2.48 24.099-0.985 31.43-3.249 6.874-7.925 12.058-11.512 15.514-7.319 7.053-16.852 13.254-25.75 18.326-5.008 2.854-11.333 5.706-16.546 8.029 11.182 3.939 24.98 7.814 40.802 11.226 44.977 9.693 101.833 14.669 153.062 8.87 51.28-5.808 99.776-23.014 133.35-51.965l0.608-0.528c14.794 2.784 29.53 4.938 44.051 6.525 10.886 1.187 21.862 2.086 32.877 2.72-10.122 14.797-22.163 28.045-35.741 39.754-46.362 39.974-108.547 60.362-167.946 67.088-59.45 6.73-123.405 0.947-173.744-9.901-25.17-5.424-48.056-12.352-65.901-20.243-8.86-3.92-17.458-8.502-24.686-13.891-6.431-4.794-15.831-13.171-20.001-25.92-6.422-19.632 2.792-35.443 10.458-43.834 7.193-7.872 16.405-13.462 23.248-17.174 7.309-3.965 15.158-7.466 21.235-10.173 6.907-3.078 10.854-4.858 13.183-6.186 1.349-0.768 2.591-1.501 3.727-2.195-13.937-33.885-21.976-56.118-26.48-72.947-5.68-21.222-5.7-33.875-5.7-47.434 0-17.712 7.436-71.139 40.721-121.123zM155.337 797.248c-0.012 0 0.084 0.102 0.317 0.301-0.19-0.202-0.306-0.301-0.317-0.301zM179.587 737.085c-0.004 0-0.052 0.051-0.137 0.15l0.112-0.118c0.019-0.022 0.027-0.032 0.025-0.032z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["discussions"],"defaultCode":59722,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":997,"name":"discussions","prevSize":32,"id":84,"code":59722},"setIdx":0,"setId":2,"iconIdx":85},{"icon":{"paths":["M160 256c0-17.673 14.327-32 32-32h640c17.674 0 32 14.327 32 32s-14.326 32-32 32h-640c-17.673 0-32-14.327-32-32zM160 421.162c0-17.674 14.327-32 32-32h640c17.674 0 32 14.326 32 32s-14.326 32-32 32h-640c-17.673 0-32-14.326-32-32zM160 602.838c0-17.674 14.327-32 32-32h640c17.674 0 32 14.326 32 32s-14.326 32-32 32h-640c-17.673 0-32-14.326-32-32zM160 768c0-17.674 14.327-32 32-32h344.614c17.674 0 32 14.326 32 32s-14.326 32-32 32h-344.614c-17.673 0-32-14.326-32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["document"],"defaultCode":59723,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":998,"name":"document","prevSize":32,"id":85,"code":59723},"setIdx":0,"setId":2,"iconIdx":86},{"icon":{"paths":["M128.169 352c0-17.674 14.346-32 32.042-32h704.928c17.696 0 32.045 14.326 32.045 32s-14.349 32-32.045 32h-704.928c-17.696 0-32.042-14.326-32.042-32zM213.615 522.669c0-17.674 14.346-32 32.042-32h534.036c17.699 0 32.045 14.326 32.045 32s-14.346 32-32.045 32h-534.036c-17.697 0-32.042-14.326-32.042-32zM331.104 661.331c-17.698 0-32.043 14.326-32.043 32s14.346 32 32.043 32h363.146c17.696 0 32.042-14.326 32.042-32s-14.346-32-32.042-32h-363.146z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["donner"],"defaultCode":59724,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":999,"name":"donner","prevSize":32,"id":86,"code":59724},"setIdx":0,"setId":2,"iconIdx":87},{"icon":{"paths":["M273.128 356.678c-6.62 27.766-2.384 63.757 25.498 105.581l21.374 32.061v17.69h-48c-44.011 0-70.483 14.874-86.278 33.619-16.496 19.578-24.573 47.264-23.734 77.491 0.841 30.262 10.601 59.968 25.818 81.312 15.127 21.216 33.404 31.578 52.195 31.578h79.999v64h-80c-45.209 0-80.932-25.642-104.306-58.426-23.283-32.656-36.522-74.95-37.682-116.688-1.16-41.773 9.763-86.083 38.766-120.506 20.726-24.598 49.155-42.32 84.825-50.784-16.1-39.011-19.009-77.050-10.731-111.77 11.253-47.2 42.304-84.492 80.791-107.342 38.4-22.798 85.677-32.139 131.303-21.965 35.584 7.935 68.909 27.48 95.251 59.554 53.75-35.147 127.584-30.892 182.483-2.495 34.438 17.812 64.794 46.382 81.437 85.010 12.294 28.531 16.438 61.011 10.608 96.205 46.112 6.682 81.507 25.155 105.613 53.456 30.349 35.626 38.106 81.35 33.446 123.283-4.659 41.917-21.946 83.485-46.544 115.114-24.061 30.934-59.354 57.354-101.261 57.354h-80v-64h80c14.093 0 32.8-9.581 50.742-32.646 17.398-22.371 30.112-52.806 33.453-82.89 3.341-30.067-2.902-56.339-18.554-74.714-15.222-17.869-44.035-33.75-97.642-33.75h-45.686l15.613-42.938c13.546-37.251 11.091-66.742 1.437-89.149-9.856-22.87-28.502-41.302-52.064-53.488-49.587-25.649-107.475-18.625-134.717 14.064l-30.134 36.16-22.541-41.325c-19.757-36.219-47.232-54.175-74.87-60.339-28.378-6.327-59.098-0.669-84.701 14.53-25.512 15.148-44.461 38.855-51.208 67.152zM630.979 787.222c12.298-12.691 11.981-32.95-0.707-45.251-12.691-12.298-32.95-11.981-45.251 0.707l-41.021 42.326v-273.005c0-17.674-14.326-32-32-32s-32 14.326-32 32v273.005l-41.021-42.326c-12.301-12.688-32.56-13.005-45.251-0.707-12.688 12.301-13.005 32.56-0.707 45.251l96 99.050c6.029 6.218 14.32 9.728 22.979 9.728s16.95-3.51 22.979-9.728l96-99.050z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["download"],"defaultCode":59725,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1000,"name":"download","prevSize":32,"id":87,"code":59725},"setIdx":0,"setId":2,"iconIdx":88},{"icon":{"paths":["M795.648 132.004c-25.027-25.027-65.603-25.027-90.63-0l-530.467 530.469c-9.577 9.574-15.873 21.939-17.985 35.318l-19.611 124.186c-1.386 8.771-0.942 17.299 1.006 25.261 7.597 31.037 38.083 53.44 72.291 48.038l124.184-19.613c13.379-2.112 25.744-8.41 35.322-17.984l530.467-530.47c12.512-12.513 18.768-28.914 18.768-45.316 0-10.379-2.506-20.757-7.517-30.15-2.906-5.451-6.656-10.57-11.251-15.164l-104.576-104.575zM630.675 296.979l119.658-119.658 104.576 104.574-119.658 119.657-104.576-104.573zM200.255 831.974l19.611-124.186 365.494-365.494 104.576 104.573-365.494 365.494-124.187 19.613z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["edit"],"defaultCode":59726,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1001,"name":"edit","prevSize":32,"id":88,"code":59726},"setIdx":0,"setId":2,"iconIdx":89},{"icon":{"paths":["M330.074 644.886c-21.572-19.619-6.010-52.886 23.152-52.886 8.963 0 17.526 3.53 24.272 9.437 21.603 18.918 42.64 31.958 62.701 40.509 36.563 15.59 71.805 17.107 104.794 9.939 37.632-8.176 72.659-27.808 102.109-51.341 6.726-5.376 14.995-8.544 23.606-8.544 30.218 0 45.616 34.256 22.397 53.594-36.912 30.742-82.79 57.59-134.522 68.832-44.794 9.734-93.67 7.632-143.485-13.606-28.79-12.275-57.232-30.653-85.024-55.933z","M400.17 480c35.344 0 64-28.653 64-64s-28.656-64-64-64c-35.347 0-64 28.653-64 64s28.653 64 64 64z","M624.17 480c35.344 0 64-28.653 64-64s-28.656-64-64-64c-35.347 0-64 28.653-64 64s28.653 64 64 64z","M928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["emoji"],"defaultCode":59729,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1002,"name":"emoji","prevSize":32,"id":89,"code":59729},"setIdx":0,"setId":2,"iconIdx":90},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM400.166 480c-35.347 0-64-28.653-64-64s28.653-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64zM688.166 416c0-35.347-28.653-64-64-64s-64 28.653-64 64c0 35.347 28.653 64 64 64s64-28.653 64-64zM353.226 720c8.963 0 17.526-3.53 24.272-9.437 21.603-18.918 42.64-31.958 62.701-40.509 36.563-15.59 71.805-17.107 104.794-9.939 37.632 8.176 72.659 27.808 102.109 51.341 6.726 5.376 14.995 8.544 23.606 8.544 30.218 0 45.616-34.256 22.397-53.594-36.912-30.742-82.79-57.59-134.522-68.832-44.794-9.734-93.67-7.632-143.485 13.606-28.79 12.275-57.232 30.653-85.024 55.933-21.572 19.619-6.010 52.886 23.152 52.886z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["emoji-bad-mood"],"defaultCode":59727,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1003,"name":"emoji-bad-mood","prevSize":32,"id":90,"code":59727},"setIdx":0,"setId":2,"iconIdx":91},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM400.166 480c-35.347 0-64-28.653-64-64s28.653-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64zM688.166 416c0-35.347-28.653-64-64-64s-64 28.653-64 64c0 35.347 28.653 64 64 64s64-28.653 64-64zM384 640h256c17.674 0 32 14.326 32 32s-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32s14.326-32 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["emoji-neutral-mood"],"defaultCode":59728,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1004,"name":"emoji-neutral-mood","prevSize":32,"id":91,"code":59728},"setIdx":0,"setId":2,"iconIdx":92},{"icon":{"paths":["M655.744 512c88.365 0 160-71.635 160-160s-71.635-160-160-160c-88.368 0-160 71.635-160 160 0 26.934 6.653 52.314 18.41 74.582l-11.914 11.914 0.128 0.131-299.135 299.136c-3.533 9.926-6.41 20.976-7.738 31.606-1.652 13.219-0.563 22.966 1.874 28.938 1.768 4.333 4.22 7.232 10.772 9.014 8.316 2.262 24.518 2.794 52.822-5.501 8.524-3.808 27.721-16.285 45.132-35.382 18.18-19.939 29.648-41.856 29.648-62.438 0-15.642 11.309-28.992 26.736-31.565l91.75-15.293c3.766-2.656 18.768-15.693 10.134-58.867-2.099-10.49 1.184-21.338 8.749-28.902l88.198-88.195c26.467 19.379 59.114 30.822 94.432 30.822zM439.571 410.915c-5.104-18.771-7.827-38.525-7.827-58.915 0-123.712 100.288-224 224-224 123.709 0 224 100.288 224 224s-100.291 224-224 224c-29.29 0-57.264-5.619-82.906-15.843l-43.008 43.008c7.158 65.494-23.99 104.534-55.968 115.194l-2.384 0.794-74.854 12.477c-7.085 31.405-25.174 58.122-43.235 77.933-23.123 25.357-50.958 44.627-69.762 52.15l-1.324 0.528-1.365 0.41c-34.714 10.416-64.73 13.19-89.594 6.429-26.782-7.286-44.33-24.784-53.228-46.586-8.23-20.163-8.473-42.282-6.126-61.062 2.402-19.216 7.899-37.958 14.042-53.315 1.61-4.022 4.020-7.677 7.084-10.742l286.456-286.458zM623.744 336c0 26.509 21.488 48 48 48 26.509 0 48-21.491 48-48s-21.491-48-48-48c-26.512 0-48 21.49-48 48z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["encrypted"],"defaultCode":59730,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1005,"name":"encrypted","prevSize":32,"id":92,"code":59730},"setIdx":0,"setId":2,"iconIdx":93},{"icon":{"paths":["M536.89 64c233.677 0 423.11 189.433 423.11 423.11h-423.11v-423.11z","M64 536.89c0-233.678 189.433-423.112 423.11-423.112v423.112h423.11c0 233.677-189.43 423.11-423.11 423.11-233.677 0-423.11-189.434-423.11-423.11z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["engagement-dashboard"],"defaultCode":59731,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1006,"name":"engagement-dashboard","prevSize":32,"id":93,"code":59731},"setIdx":0,"setId":2,"iconIdx":94},{"icon":{"paths":["M416 586.445v177.232l75.514-62.928c11.869-9.888 29.104-9.888 40.973 0l75.514 62.928v-177.232c-29.098 13.821-61.645 21.555-96 21.555s-66.902-7.734-96-21.555zM352 540.768v291.232c0 12.416 7.184 23.712 18.426 28.979 11.245 5.267 24.522 3.552 34.061-4.397l107.514-89.594 107.514 89.594c9.539 7.949 22.816 9.664 34.061 4.397 11.242-5.267 18.426-16.563 18.426-28.979v-291.232c39.59-40.403 64-95.734 64-156.768 0-123.712-100.288-224.001-224-224.001s-224 100.288-224 224.001c0 61.034 24.41 116.365 64 156.768zM416 512.013l-0.016-0.013c-38.854-29.19-63.984-75.661-63.984-128 0-88.366 71.635-160.001 160-160.001s160 71.635 160 160.001c0 52.339-25.13 98.81-63.984 128l-0.016 0.013c-26.742 20.083-59.981 31.987-96 31.987s-69.258-11.904-96-31.987z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["enterprise-feature"],"defaultCode":59732,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1007,"name":"enterprise-feature","prevSize":32,"id":94,"code":59732},"setIdx":0,"setId":2,"iconIdx":95},{"icon":{"paths":["M500.64 128c213.35 0 386.336 172.985 386.336 386.336 0 192.87-141.254 352.707-325.974 381.664v-269.958h90.022l17.114-111.706h-107.136v-72.47c0-11.462 2.102-22.822 7.274-32.544 2.474-4.656 5.651-8.934 9.635-12.666 9.866-9.245 24.688-15.152 46.058-15.152h48.733v-95.080c0 0-44.224-7.552-86.493-7.552-84.698 0-141.258 49.313-145.651 138.907-0.182 3.738-0.275 7.546-0.275 11.424v85.133h-98.122v111.706h98.122v269.958c-184.721-29.011-325.978-188.848-325.978-381.664 0-213.351 172.985-386.336 386.336-386.336z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["facebook-monochromatic"],"defaultCode":59733,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1008,"name":"facebook-monochromatic","prevSize":32,"id":95,"code":59733},"setIdx":0,"setId":2,"iconIdx":96},{"icon":{"paths":["M865.139 512c0 33.28-4.624 65.485-13.267 96h-183.274c2.803-30.816 4.288-62.957 4.288-96 0-16.234-0.358-32.25-1.056-48h190.061c2.141 15.696 3.248 31.718 3.248 48zM607.68 464c0.739 15.67 1.123 31.686 1.123 48 0 33.398-1.61 65.555-4.57 96h-183.117c-2.963-30.445-4.57-62.602-4.57-96 0-16.314 0.384-32.33 1.123-48h190.010zM667.014 400c-10.016-93.226-32.221-173.252-61.875-227.763 113.702 30.788 204.579 116.981 241.782 227.763h-179.907zM420.211 172.237c-29.654 54.51-51.862 134.537-61.875 227.763h-179.91c37.204-110.782 128.083-196.975 241.785-227.763zM422.816 400c7.171-62.314 20.064-116.804 36.384-159.18 12.842-33.339 26.56-55.927 38.528-69.070 8.406-9.235 13.446-11.291 14.947-11.698 1.501 0.407 6.541 2.463 14.947 11.698 11.968 13.143 25.686 35.731 38.525 69.070 16.32 42.377 29.216 96.867 36.387 159.18h-179.718zM353.52 464c-0.698 15.75-1.056 31.766-1.056 48 0 33.043 1.482 65.184 4.288 96h-183.275c-8.643-30.515-13.268-62.72-13.268-96 0-16.282 1.107-32.304 3.249-48h190.061zM364.742 672c11.667 72.646 31.040 134.861 55.466 179.763-96.678-26.179-176.854-92.413-221.565-179.763h166.1zM513.152 928c229.834-0.259 416.070-186.41 416.070-416 0-229.75-186.493-416-416.547-416s-416.55 186.25-416.55 416c0 229.59 186.237 415.741 416.070 416 0.16 0 0.32 0 0.48 0s0.32 0 0.477 0zM605.142 851.763c24.426-44.902 43.798-107.117 55.466-179.763h166.099c-44.71 87.35-124.89 153.584-221.565 179.763zM595.638 672c-7.379 42.458-17.514 80.083-29.491 111.184-12.838 33.338-26.557 55.926-38.525 69.069-8.406 9.235-13.446 11.29-14.947 11.699-1.501-0.41-6.541-2.464-14.947-11.699-11.968-13.142-25.686-35.731-38.528-69.069-11.978-31.101-22.109-68.726-29.488-111.184h165.926z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["federation"],"defaultCode":59652,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1009,"id":96,"name":"federation","prevSize":32,"code":59652},"setIdx":0,"setId":2,"iconIdx":97},{"icon":{"paths":["M542.65 96c80.093 0 154.902 22.636 218.374 61.859l-46.746 46.746c-24.739-13.843-51.322-24.785-79.286-32.368 12.166 22.395 23.078 49.095 32.406 79.249l-52 51.999c-5.654-22.994-12.17-44.005-19.347-62.666-12.822-33.339-26.522-55.927-38.474-69.070-8.397-9.235-13.43-11.291-14.928-11.698-1.498 0.407-6.531 2.463-14.928 11.698-11.952 13.143-25.654 35.731-38.477 69.070-16.298 42.377-29.174 96.867-36.336 159.18h65.974l-64 64h-7.114c-0.118 2.47-0.224 4.95-0.323 7.437l-64.538 64.538c-0.173-7.933-0.259-15.926-0.259-23.974 0-16.234 0.358-32.25 1.053-48h-189.809c-2.14 15.696-3.245 31.718-3.245 48 0 33.28 4.619 65.485 13.251 96h106.984l-64 64h-17.852c2.004 3.92 4.078 7.798 6.223 11.629l-46.746 46.749c-39.223-63.475-61.859-138.282-61.859-218.378 0-229.75 186.25-416 416.001-416zM896.79 293.623l-46.746 46.748c10.56 18.87 19.43 38.816 26.413 59.629h-86.045l-64 64h164.992c2.138 15.696 3.245 31.718 3.245 48 0 33.28-4.621 65.485-13.251 96h-183.030c2.8-30.816 4.282-62.957 4.282-96 0-8.045-0.090-16.042-0.262-23.974l-64.534 64.534c-0.752 19.008-2.026 37.523-3.766 55.44h-51.674l-64 64h107.088c-7.37 42.458-17.488 80.083-29.45 111.184-12.822 33.338-26.522 55.926-38.474 69.069-8.397 9.235-13.43 11.29-14.928 11.699-1.498-0.41-6.531-2.464-14.928-11.699-11.952-13.142-25.654-35.731-38.477-69.069-7.178-18.662-13.69-39.677-19.344-62.669l-52 51.997c9.325 30.154 20.237 56.854 32.403 79.251-27.965-7.584-54.547-18.525-79.286-32.368l-46.746 46.746c63.347 39.146 137.984 61.77 217.901 61.859h0.954c229.53-0.259 415.523-186.41 415.523-416 0-80.096-22.637-154.902-61.859-218.377zM450.307 172.237c-113.552 30.788-204.312 116.98-241.467 227.763h179.675c10-93.226 32.176-173.252 61.792-227.763zM634.995 851.763c24.394-44.902 43.741-107.117 55.392-179.763h165.878c-44.653 87.35-124.723 153.584-221.27 179.763zM856.022 153.372c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-672.001 672c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l672.001-672z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["federation-disabled"],"defaultCode":59651,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1010,"id":97,"name":"federation-disabled","prevSize":32,"code":59651},"setIdx":0,"setId":2,"iconIdx":98},{"icon":{"paths":["M373.334 448c0-17.674 14.326-32 32-32h213.331c17.674 0 32 14.326 32 32s-14.326 32-32 32h-213.331c-17.674 0-32-14.326-32-32z","M405.334 544c-17.674 0-32 14.326-32 32s14.326 32 32 32h213.331c17.674 0 32-14.326 32-32s-14.326-32-32-32h-213.331z","M256 128c-17.673 0-32 14.327-32 32v704c0 17.674 14.327 32 32 32h512c17.674 0 32-14.326 32-32v-501.744c0-6.672-2.083-13.174-5.962-18.602l-144.467-202.254c-6.006-8.409-15.706-13.4-26.038-13.4h-367.533zM736 372.509v459.491h-448v-640h319.066l128.934 180.509z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["file-document"],"defaultCode":59734,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1011,"name":"file-document","prevSize":32,"id":98,"code":59734},"setIdx":0,"setId":2,"iconIdx":99},{"icon":{"paths":["M128 192c-17.673 0-32 14.327-32 32v576.019c0 17.674 14.327 32 32 32h768c17.674 0 32-14.326 32-32v-576.019c0-17.673-14.326-32-32-32h-768zM160 378.301v-122.301h149.333v122.301h-149.333zM160 442.301h149.333v141.722h-149.333v-141.722zM160 648.022h149.333v119.997h-149.333v-119.997zM373.334 768.019v-119.997h490.666v119.997h-490.666zM864 584.022h-490.666v-141.722h490.666v141.722zM864 378.301h-490.666v-122.301h490.666v122.301z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["file-sheet"],"defaultCode":59735,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1012,"name":"file-sheet","prevSize":32,"id":99,"code":59735},"setIdx":0,"setId":2,"iconIdx":100},{"icon":{"paths":["M206.667 293.692c-30.421-42.402-0.116-101.442 52.070-101.442h518.572c51.174 0 81.706 57.026 53.334 99.615l-180.678 271.207v220.762c0 46.352-47.693 77.373-90.067 58.582l-121.424-53.85c-23.168-10.275-38.102-33.238-38.102-58.582v-166.304l-193.704-269.988zM777.309 256.334h-518.572l193.705 269.989c7.811 10.89 12.013 23.955 12.013 37.357v166.304l121.424 53.85v-220.762c0-12.646 3.741-25.008 10.752-35.533l180.678-271.205z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["filter"],"defaultCode":59736,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1013,"name":"filter","prevSize":32,"id":100,"code":59736},"setIdx":0,"setId":2,"iconIdx":101},{"icon":{"paths":["M623.091 896c-2.806 0-5.296-0.624-7.168-0.938-62-16.858-102.816-39.648-145.811-80.858-55.149-54.010-85.37-125.814-85.37-202.301 0-65.875 56.704-119.571 126.496-119.571s126.496 53.696 126.496 119.571c0 34.963 31.469 63.373 69.792 63.373s69.789-28.41 69.789-63.373c0-135.808-119.642-246.637-266.701-246.637-104.998 0-200.338 57.133-243.334 145.795-14.332 29.347-21.498 63.066-21.498 100.842 0 28.72 2.492 73.363 24.925 131.744 2.804 7.181 2.492 14.675-0.623 21.856-3.116 6.867-9.035 11.862-16.201 14.358-2.804 1.251-6.231 1.562-9.659 1.562-11.84 0-22.433-7.181-26.484-18.106-19.005-50.266-28.353-99.904-28.353-151.728 0-46.205 9.036-88.352 26.795-125.504 52.343-108.019 167.936-177.638 294.432-177.638 178.528 0 323.718 135.804 323.718 302.828 0 65.875-56.704 119.571-126.806 119.571s-126.81-53.696-126.81-119.571c0-34.963-31.469-63.373-69.792-63.373-38.634 0-69.789 28.41-69.789 63.373 0 61.504 24.301 119.261 68.544 162.342 35.206 34.029 68.858 53.072 120.576 67.123 7.168 1.872 13.398 6.557 17.136 13.11 3.741 6.557 4.675 14.362 2.806 21.229-2.806 11.866-14.022 20.918-27.107 20.918zM426.803 888.195c-7.789 0-15.267-3.123-20.253-8.742-33.338-32.781-51.718-54.010-77.891-100.525-26.795-47.142-41.127-105.21-41.127-167.338 0-116.448 100.948-211.357 224.951-211.357s224.954 94.909 224.954 211.357c0 15.61-12.464 28.096-28.352 28.096-15.891 0-28.666-12.173-28.666-28.096 0-85.542-75.398-155.162-168.246-155.162s-168.246 69.619-168.246 155.162c0 52.448 11.84 100.528 34.272 139.552 23.366 41.52 38.947 59.005 68.858 88.662 10.902 11.238 10.902 28.723 0 39.648-5.92 5.933-13.088 8.742-20.253 8.742zM699.738 818.886c-47.36 0-88.797-11.862-123.382-34.963-59.197-39.651-94.717-103.962-94.717-172.333 0-15.61 12.464-28.099 28.352-28.099 15.891 0 28.355 12.49 28.355 28.099 0 49.638 26.17 96.781 69.789 125.501 25.238 16.861 55.149 24.976 91.603 24.976 7.789 0 22.432-0.934 38.010-3.744 1.558-0.314 3.427-0.314 4.986-0.314 13.709 0 25.238 9.99 27.728 23.414 1.248 7.181-0.31 14.672-4.362 20.605-4.362 6.243-10.902 10.614-18.694 11.862-23.366 4.685-43.93 4.995-47.667 4.995zM188.765 435.824c-5.608 0-11.217-1.562-16.202-4.995-6.543-4.058-10.593-10.614-12.151-18.106-1.246-7.494 0.311-14.986 4.985-21.232 38.635-53.696 87.862-95.843 146.125-125.501 60.132-30.595 129.613-46.829 200.961-46.829 71.037 0 140.205 15.922 200.029 46.205 58.573 29.659 107.802 71.492 146.125 124.567 4.362 5.93 6.23 13.424 4.986 20.915-1.248 7.494-5.61 14.048-11.84 18.419-4.986 3.437-10.595 4.995-16.515 4.995-9.034 0-17.757-4.371-23.056-11.862-33.338-45.891-75.709-82.109-125.562-107.083-52.342-26.224-112.787-40.273-174.477-40.273-62.314 0-122.758 14.049-175.101 40.585-49.852 25.913-92.537 62.128-126.186 108.643-3.739 6.87-12.463 11.552-22.121 11.552zM733.696 239.141c-4.672 0-9.347-1.249-13.395-3.434-71.35-35.902-133.354-51.512-207.504-51.512-74.467 0-144.256 17.483-207.817 51.824-4.050 2.185-8.724 3.122-13.397 3.122-10.282 0-19.629-5.62-24.925-14.361-3.739-6.556-4.673-14.361-2.492-21.541s7.166-13.424 13.709-16.859c72.594-38.712 151.733-58.38 234.924-58.38 82.563 0 154.848 17.795 233.987 58.068 6.854 3.434 11.84 9.366 14.33 16.859 2.182 7.18 1.248 14.673-2.179 21.229-4.986 9.054-14.643 14.985-25.238 14.985z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["fingerprint"],"defaultCode":59737,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1014,"name":"fingerprint","prevSize":32,"id":101,"code":59737},"setIdx":0,"setId":2,"iconIdx":102},{"icon":{"paths":["M266.667 170.664c0-17.673 14.327-32 32-32h500.623c12.122 0 23.2 6.848 28.621 17.689s4.253 23.814-3.021 33.511l-122.134 162.843 122.134 162.845c7.274 9.696 8.442 22.672 3.021 33.51-5.421 10.842-16.499 17.69-28.621 17.69h-468.624v286.579c0 17.674-14.325 32-31.999 32s-32-14.326-32-32v-682.667zM330.666 502.752h404.624l-98.134-130.845c-8.531-11.376-8.531-27.021 0-38.4l98.134-130.843h-404.624v300.088z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["flag"],"defaultCode":59738,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1015,"name":"flag","prevSize":32,"id":102,"code":59738},"setIdx":0,"setId":2,"iconIdx":103},{"icon":{"paths":["M140.020 213.336c0-17.673 14.327-32 32-32h234.057c7.181 0 14.157 2.416 19.798 6.86l88.813 69.94h339.997c17.674 0 32 14.327 32 32v520.533c0 17.674-14.326 32-32 32h-682.665c-17.673 0-32-14.326-32-32v-597.333zM204.020 245.336v533.333h618.665v-456.534h-319.085c-7.181 0-14.154-2.415-19.798-6.858l-88.813-69.94h-190.969z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["folder"],"defaultCode":59739,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1016,"name":"folder","prevSize":32,"id":103,"code":59739},"setIdx":0,"setId":2,"iconIdx":104},{"icon":{"paths":["M370.704 544c0-17.674-14.326-32-32-32s-31.999 14.326-31.999 32v32h-32c-17.673 0-32 14.326-32 32s14.327 32 32 32h32v32c0 17.674 14.325 32 31.999 32s32-14.326 32-32v-32h32c17.674 0 32-14.326 32-32s-14.326-32-32-32h-32v-32z","M746.704 624c30.928 0 56-25.072 56-56s-25.072-56-56-56c-30.928 0-56 25.072-56 56s25.072 56 56 56z","M674.704 664c0 30.928-25.072 56-56 56s-56-25.072-56-56c0-30.928 25.072-56 56-56s56 25.072 56 56z","M706.704 128c0-17.673-14.326-32-32-32s-32 14.327-32 32v96h-128c-17.674 0-32 14.327-32 32v96h-191.999c-106.038 0-192 85.962-192 192v128c0 106.038 85.961 192 192 192h447.999c106.038 0 192-85.962 192-192v-128c0-106.038-85.962-192-192-192h-192v-64h128c17.674 0 32-14.327 32-32v-128zM866.704 544v128c0 70.691-57.306 128-128 128h-447.999c-70.692 0-128-57.309-128-128v-128c0-70.691 57.308-128 128-128h447.999c70.694 0 128 57.309 128 128z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["game"],"defaultCode":59753,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1017,"name":"game","prevSize":32,"id":104,"code":59753},"setIdx":0,"setId":2,"iconIdx":105},{"icon":{"paths":["M494.31 170.648l23.037 24.005 23.629-24.005 74.669 0.041v75.854h74.669v75.856h74.666v26.518h0.003v504.419h-522.678v-682.689h252.006zM540.976 246.503h-224.004v530.979h373.341v-379.229h-149.338v-151.75z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["giphy-monochromatic"],"defaultCode":59754,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1018,"name":"giphy-monochromatic","prevSize":32,"id":105,"code":59754},"setIdx":0,"setId":2,"iconIdx":106},{"icon":{"paths":["M862.454 324.045c-35.2-60.31-82.944-108.057-143.248-143.253-60.314-35.198-126.16-52.792-197.581-52.792-71.414 0-137.28 17.6-197.581 52.792-60.31 35.194-108.053 82.943-143.253 143.253-35.194 60.307-52.792 126.166-52.792 197.571 0 85.77 25.024 162.899 75.086 231.405 50.056 68.509 114.721 115.917 193.989 142.224 9.229 1.712 16.058 0.509 20.499-3.584 4.442-4.096 6.662-9.226 6.662-15.37 0-1.024-0.090-10.246-0.259-27.674-0.176-17.43-0.259-32.637-0.259-45.61l-11.789 2.038c-7.517 1.379-16.998 1.962-28.445 1.795-11.443-0.16-23.322-1.357-35.619-3.587-12.304-2.211-23.747-7.334-34.342-15.366-10.588-8.029-18.104-18.538-22.547-31.514l-5.125-11.795c-3.416-7.853-8.795-16.573-16.142-26.134-7.348-9.571-14.778-16.058-22.294-19.475l-3.588-2.57c-2.391-1.706-4.61-3.766-6.662-6.154-2.050-2.39-3.585-4.781-4.61-7.174-1.027-2.397-0.176-4.365 2.562-5.907 2.738-1.539 7.685-2.288 14.864-2.288l10.247 1.53c6.834 1.37 15.287 5.462 25.371 12.298 10.078 6.835 18.363 15.715 24.856 26.646 7.863 14.013 17.335 24.688 28.445 32.038 11.101 7.347 22.294 11.014 33.568 11.014s21.011-0.854 29.216-2.557c8.192-1.709 15.882-4.275 23.062-7.69 3.075-22.902 11.446-40.499 25.11-52.797-19.475-2.045-36.982-5.13-52.534-9.226-15.542-4.106-31.603-10.765-48.173-20-16.579-9.222-30.331-20.672-41.262-34.333-10.932-13.67-19.905-31.613-26.904-53.818-7.003-22.214-10.505-47.837-10.505-76.88 0-41.35 13.5-76.541 40.493-105.584-12.645-31.088-11.451-65.939 3.585-104.55 9.908-3.079 24.606-0.768 44.078 6.916 19.478 7.689 33.738 14.275 42.797 19.736 9.059 5.46 16.317 10.087 21.786 13.837 31.782-8.88 64.582-13.322 98.406-13.322s66.63 4.442 98.416 13.322l19.475-12.295c13.318-8.204 29.046-15.722 47.142-22.556 18.112-6.83 31.958-8.712 41.53-5.633 15.37 38.612 16.739 73.46 4.093 104.548 26.992 29.046 40.496 64.243 40.496 105.587 0 29.043-3.514 54.746-10.506 77.13-7.002 22.387-16.051 40.314-27.152 53.818-11.114 13.501-24.957 24.864-41.526 34.083-16.573 9.226-32.637 15.888-48.179 19.99-15.552 4.102-33.059 7.187-52.534 9.238 17.763 15.37 26.646 39.632 26.646 72.774v108.134c0 6.141 2.134 11.27 6.41 15.37 4.272 4.090 11.018 5.296 20.243 3.581 79.28-26.304 143.946-73.712 194-142.224 50.048-68.502 75.082-145.632 75.082-231.405-0.019-71.395-17.626-137.248-52.803-197.555z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["github-monochromatic"],"defaultCode":59655,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1019,"name":"github-monochromatic","prevSize":32,"id":106,"code":59655},"setIdx":0,"setId":2,"iconIdx":107},{"icon":{"paths":["M133.618 423.61h215.092l-92.537-284.607c-4.74-14.67-25.504-14.67-30.244 0l-92.311 284.607zM86.899 567.171l46.72-143.546h737.133l46.72 143.546c4.288 13.088-0.451 27.533-11.51 35.434l-403.776 293.408-403.776-293.408c-11.060-7.901-15.799-22.346-11.511-35.434zM655.661 423.61h215.091l-92.31-284.607c-4.739-14.67-25.504-14.67-30.243 0l-92.538 284.607z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["gitlab-monochromatic"],"defaultCode":59656,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1020,"name":"gitlab-monochromatic","prevSize":32,"id":107,"code":59656},"setIdx":0,"setId":2,"iconIdx":108},{"icon":{"paths":["M226.9 260.289c6.691-2.875 13.811-4.319 20.961-4.288 17.673 0.077 32.062-14.187 32.14-31.86s-14.187-32.062-31.86-32.14c-15.989-0.070-31.8 3.167-46.506 9.485-14.702 6.317-27.969 15.571-39.071 27.156-11.1 11.582-19.822 25.269-25.729 40.238-5.898 14.946-8.889 30.916-8.834 47.005l-0.001 15.941 0.001-11.899v255.848c-0 0.074-0.001 0.15-0.001 0.224v89.6c0 43.642 16.497 85.792 46.318 117.104 29.872 31.366 70.73 49.296 113.682 49.296 42.954 0 83.811-17.93 113.683-49.296 29.821-31.312 46.317-73.462 46.317-117.104v-57.6h128v57.6c0 43.642 16.496 85.792 46.317 117.104 29.872 31.366 70.73 49.296 113.683 49.296s83.811-17.93 113.683-49.296c29.821-31.312 46.317-73.462 46.317-117.104v-89.6c0-0.077 0-0.15 0-0.227v-259.883c0.054-16.090-2.938-32.062-8.835-47.010-5.907-14.969-14.627-28.656-25.728-40.238-11.104-11.585-24.368-20.839-39.072-27.156-14.704-6.318-30.515-9.555-46.506-9.485-17.674 0.077-31.936 14.467-31.859 32.14s14.467 31.937 32.141 31.86c7.149-0.031 14.269 1.413 20.96 4.288 6.694 2.876 12.867 7.147 18.128 12.636 5.264 5.492 9.501 12.090 12.403 19.448 2.906 7.36 4.4 15.292 4.368 23.326v228.302h-639.999l0-228.173-0-0.128c-0.032-8.034 1.462-15.965 4.366-23.326 2.904-7.358 7.141-13.957 12.404-19.448 5.26-5.489 11.434-9.759 18.129-12.636zM269.255 608l104.214 104.214c6.826-14.237 10.531-30.173 10.531-46.614v-57.6h-114.745zM717.254 608l104.214 104.214c6.826-14.237 10.531-30.173 10.531-46.614v-57.6h-114.746zM896 315.89v0zM128.001 319.928l0-3.973-0-0.069v4.043zM328.954 758.208l-136.954-136.954v44.346c0 27.648 10.475 53.869 28.663 72.966 18.137 19.043 42.394 29.434 67.337 29.434 14.208 0 28.194-3.37 40.954-9.792zM640 665.6v-44.346l136.954 136.954c-12.758 6.422-26.746 9.792-40.954 9.792-24.944 0-49.2-10.39-67.338-29.434-18.189-19.098-28.662-45.318-28.662-72.966z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["glasses"],"defaultCode":59812,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1021,"id":108,"name":"glasses","prevSize":32,"code":59812},"setIdx":0,"setId":2,"iconIdx":109},{"icon":{"paths":["M634.803 170.664h-256.112l-264.387 460.802 124.984 221.866h534.916l124.982-221.866-264.384-460.802zM367.814 631.466l138.931-239.789 138.934 239.789h-277.866z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["google-drive-monochromatic"],"defaultCode":59756,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1022,"name":"google-drive-monochromatic","prevSize":32,"id":109,"code":59756},"setIdx":0,"setId":2,"iconIdx":110},{"icon":{"paths":["M658.794 338.154c-39.798-38.052-90.416-57.426-146.794-57.426-100.016 0-184.669 67.548-214.865 158.313l-0.002-0.003c-7.679 23.040-12.042 47.648-12.042 72.957s4.364 49.92 12.044 72.96l0 0.003c30.196 90.765 114.849 158.314 214.865 158.314 51.664 0 95.651-13.613 130.035-36.653v-0.016c40.669-27.229 67.725-67.898 76.627-115.898h-206.662v-148.538h361.658c4.538 25.136 6.982 51.315 6.982 78.547 0 116.944-41.891 215.389-114.502 282.24v0.013c-63.533 58.646-150.458 93.030-254.138 93.030-150.109 0-279.971-86.048-343.156-211.549l-0-0.003c-26.007-51.84-40.844-110.49-40.844-172.451 0-61.965 14.836-120.611 40.844-172.451h0.004c63.187-125.495 193.047-211.542 343.153-211.542 103.504 0 190.429 38.051 256.931 100.014l-110.138 110.139z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["google-monochromatic"],"defaultCode":59657,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1023,"name":"google-monochromatic","prevSize":32,"id":110,"code":59657},"setIdx":0,"setId":2,"iconIdx":111},{"icon":{"paths":["M129.354 272c0-17.673 14.327-32 32-32h704c17.674 0 32 14.327 32 32s-14.326 32-32 32h-704c-17.673 0-32-14.327-32-32zM289.354 432c0 17.674-14.327 32-32 32s-32-14.326-32-32c0-17.674 14.327-32 32-32s32 14.326 32 32zM289.354 752c0 17.674-14.327 32-32 32s-32-14.326-32-32c0-17.674 14.327-32 32-32s32 14.326 32 32zM449.354 624c17.674 0 32-14.326 32-32s-14.326-32-32-32c-17.674 0-32 14.326-32 32s14.326 32 32 32zM385.354 400c-17.674 0-32 14.326-32 32s14.326 32 32 32h480c17.674 0 32-14.326 32-32s-14.326-32-32-32h-480zM353.354 752c0-17.674 14.326-32 32-32h480c17.674 0 32 14.326 32 32s-14.326 32-32 32h-480c-17.674 0-32-14.326-32-32zM577.354 560c-17.674 0-32 14.326-32 32s14.326 32 32 32h288c17.674 0 32-14.326 32-32s-14.326-32-32-32h-288z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["group-by-type"],"defaultCode":59757,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1024,"name":"group-by-type","prevSize":32,"id":111,"code":59757},"setIdx":0,"setId":2,"iconIdx":112},{"icon":{"paths":["M170.668 245.336c0-17.673 14.327-32 32-32h640.846c17.674 0 32 14.327 32 32s-14.326 32-32 32h-640.846c-17.673 0-32-14.327-32-32zM170.668 501.334c0-17.67 14.327-32 32-32h640.846c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-640.846c-17.673 0-32-14.326-32-32zM170.668 757.334c0-17.67 14.327-32 32-32h640.846c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-640.846c-17.673 0-32-14.326-32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["hamburguer"],"defaultCode":59758,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1025,"name":"hamburguer","prevSize":32,"id":112,"code":59758},"setIdx":0,"setId":2,"iconIdx":113},{"icon":{"paths":["M832 512c0 176.73-143.27 320-320 320s-320-143.27-320-320h-64c0 212.077 171.923 384 384 384s384-171.923 384-384c0-212.077-171.923-384-384-384-123.718 0-233.772 58.508-304 149.364v-101.364c0-17.673-14.327-32-32-32s-32 14.327-32 32v192c0 17.674 14.327 32 32 32h176c17.674 0 32-14.326 32-32s-14.326-32-32-32h-107.295c57.24-86.756 155.583-144 267.295-144 176.73 0 320 143.27 320 320z","M544 320c0-17.673-14.326-32-32-32s-32 14.327-32 32v224c0 8.486 3.373 16.627 9.373 22.627l96 96c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-86.627-86.627v-210.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["history"],"defaultCode":59759,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1026,"name":"history","prevSize":32,"id":113,"code":59759},"setIdx":0,"setId":2,"iconIdx":114},{"icon":{"paths":["M522.042 195.354l224.464 260.044v366.234c0 5.856-4.752 10.605-10.614 10.605h-136.416v-149.821c0-23.424-19.014-42.413-42.47-42.413h-85.955c-23.453 0-42.467 18.989-42.467 42.413v149.821h-136.41c-5.864 0-10.617-4.749-10.617-10.605v-366.307l224.403-259.971c4.237-4.907 11.85-4.907 16.083 0zM560.57 895.856h175.322c41.043 0 74.32-33.232 74.32-74.224v-244.205h56.227c12.454 0 23.766-7.251 28.954-18.557 5.19-11.309 3.302-24.602-4.829-34.022l-320.272-371.033c-29.648-34.347-82.934-34.347-112.582 0l-320.27 371.033c-8.132 9.421-10.020 22.714-4.831 34.022 5.188 11.306 16.501 18.557 28.956 18.557h56.288v244.205c0 40.992 33.274 74.224 74.32 74.224h175.316c1.174 0.096 2.362 0.147 3.562 0.147h85.955c1.2 0 2.39-0.051 3.565-0.147z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["home"],"defaultCode":59760,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1027,"name":"home","prevSize":32,"id":114,"code":59760},"setIdx":0,"setId":2,"iconIdx":115},{"icon":{"paths":["M864 512c0-86.89-31.482-166.429-83.664-227.826l-496.162 496.162c61.397 52.182 140.937 83.664 227.826 83.664 194.403 0 352-157.597 352-352zM239.349 734.65l495.3-495.3c-60.662-49.597-138.182-79.349-222.65-79.349-194.404 0-352 157.596-352 352 0 84.467 29.753 161.987 79.349 222.65zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["ignore"],"defaultCode":59740,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1028,"name":"ignore","prevSize":32,"id":115,"code":59740},"setIdx":0,"setId":2,"iconIdx":116},{"icon":{"paths":["M406.685 405.334c0 47.126-38.205 85.331-85.334 85.331-47.127 0-85.332-38.205-85.332-85.331 0-47.13 38.205-85.334 85.332-85.334 47.13 0 85.334 38.205 85.334 85.334z","M97.352 192c0-17.673 14.327-32 32-32h767.999c17.674 0 32 14.327 32 32v640c0 17.674-14.326 32-32 32h-767.999c-17.673 0-32-14.326-32-32v-640zM161.352 764.163l151.704-176.989c9.271-10.813 24.57-14.202 37.536-8.307l153.123 69.603 160.474-204.24c6.010-7.651 15.174-12.15 24.902-12.23s18.963 4.272 25.098 11.821l151.162 186.048v-405.869h-703.999v540.163zM214.927 800h650.423v-68.64l-175.581-216.099-166.781 212.269-176.989-80.448-131.073 152.918z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["image"],"defaultCode":59761,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1029,"name":"image","prevSize":32,"id":116,"code":59761},"setIdx":0,"setId":2,"iconIdx":117},{"icon":{"paths":["M512 873.027c-199.389 0-361.026-161.635-361.026-361.024s161.636-361.026 361.026-361.026c199.389 0 361.024 161.637 361.024 361.026s-161.635 361.024-361.024 361.024zM512 938.669c235.642 0 426.666-191.024 426.666-426.666s-191.024-426.667-426.666-426.667c-235.642 0-426.667 191.025-426.667 426.667s191.025 426.666 426.667 426.666zM544.819 347.901c0 18.125-14.694 32.819-32.819 32.819-18.128 0-32.822-14.694-32.822-32.819 0-18.128 14.694-32.821 32.822-32.821 18.125 0 32.819 14.693 32.819 32.821zM512 413.542c-18.128 0-32.822 14.694-32.822 32.819v229.744c0 18.125 14.694 32.819 32.822 32.819 18.125 0 32.819-14.694 32.819-32.819v-229.744c0-18.125-14.694-32.819-32.819-32.819z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["info"],"defaultCode":59762,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1030,"name":"info","prevSize":32,"id":117,"code":59762},"setIdx":0,"setId":2,"iconIdx":118},{"icon":{"paths":["M512 864c-194.404 0-352-157.597-352-352s157.596-352 352-352c194.403 0 352 157.596 352 352s-157.597 352-352 352zM512 928c229.75 0 416-186.25 416-416s-186.25-416-416-416c-229.75 0-416 186.25-416 416s186.25 416 416 416zM662.627 361.373c12.496 12.496 12.496 32.758 0 45.254l-105.373 105.373 105.373 105.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-105.373-105.373-105.373 105.373c-12.496 12.496-32.758 12.496-45.254 0s-12.496-32.758 0-45.254l105.373-105.373-105.373-105.373c-12.496-12.496-12.496-32.758 0-45.254s32.758-12.496 45.254 0l105.373 105.373 105.373-105.373c12.496-12.496 32.758-12.496 45.254 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["input-clear"],"defaultCode":59763,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1031,"name":"input-clear","prevSize":32,"id":118,"code":59763},"setIdx":0,"setId":2,"iconIdx":119},{"icon":{"paths":["M384 288c-17.674 0-32 14.327-32 32s14.326 32 32 32h256c17.674 0 32-14.326 32-32s-14.326-32-32-32h-256z","M352 448c0-17.674 14.326-32 32-32h256c17.674 0 32 14.326 32 32s-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M512 640c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M224 224v576c0 35.347 28.654 64 64 64h448c35.347 0 64-28.653 64-64v-576c0-35.346-28.653-64-64-64h-448c-35.346 0-64 28.654-64 64zM288 800v-576h448v576h-448z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["instance"],"defaultCode":59764,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1032,"name":"instance","prevSize":32,"id":119,"code":59764},"setIdx":0,"setId":2,"iconIdx":120},{"icon":{"paths":["M563.59 255.992l-170.669 512.001h-136.941c-17.673 0-32 14.326-32 32 0 17.67 14.327 32 32 32h320c17.674 0 32-14.33 32-32 0-17.674-14.326-32-32-32h-115.597l170.669-512.001h136.928c17.674 0 32-14.327 32-32s-14.326-32-32-32h-159.002c-0.666-0.021-1.328-0.021-1.99 0h-159.008c-17.674 0-32 14.327-32 32s14.326 32 32 32h115.61z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["italic"],"defaultCode":59765,"grid":0},"attrs":[{}],"properties":{"order":1033,"name":"italic","prevSize":32,"id":120,"code":59765},"setIdx":0,"setId":2,"iconIdx":121},{"icon":{"paths":["M497.136 169.372c12.499 12.497 12.499 32.758 0 45.255l-35.958 35.96c1.078-0.016 2.163-0.025 3.245-0.025h191.152c115.11 0 208.426 93.316 208.426 208.426 0 115.107-93.315 208.422-208.426 208.422h-15.574v-64h15.574c79.763 0 144.426-64.659 144.426-144.422 0-79.766-64.662-144.426-144.426-144.426h-191.152c-1.030 0-2.058 0.011-3.082 0.032l35.795 35.796c12.499 12.499 12.499 32.758 0 45.258-12.496 12.496-32.758 12.496-45.254 0l-90.509-90.511c-12.496-12.497-12.496-32.758 0-45.255l90.509-90.51c12.496-12.497 32.758-12.497 45.254 0zM201.318 500.746h56.159v325.818h-59.023v-268.387h-1.909l-76.204 48.682v-54.090l80.977-52.022zM570.41 719.494c0 64.749-48.045 111.523-116.931 111.523-63.638 0-110.886-38.979-112.48-93.069h57.274c2.070 26.726 25.773 45.341 55.206 45.341 34.838 0 59.978-25.933 59.818-62.365 0.16-36.909-25.613-63.318-61.411-63.475-19.568-0.16-40.25 7.955-51.226 20.045l-53.296-8.749 17.024-168h188.998v49.318h-140.16l-9.386 86.384h1.91c12.090-14.317 35.475-24.816 61.885-24.816 59.184 0 102.774 45.181 102.774 107.862z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["jump-backward"],"defaultCode":59766,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1034,"name":"jump-backward","prevSize":32,"id":121,"code":59766},"setIdx":0,"setId":2,"iconIdx":122},{"icon":{"paths":["M494.861 169.372c-12.496 12.497-12.496 32.758 0 45.255l35.962 35.96c-1.082-0.016-2.163-0.025-3.248-0.025h-191.149c-115.111 0-208.426 93.316-208.426 208.426 0 115.107 93.315 208.422 208.426 208.422h15.574v-64h-15.574c-79.764 0-144.426-64.659-144.426-144.422 0-79.766 64.661-144.426 144.426-144.426h191.149c1.030 0 2.061 0.011 3.085 0.032l-35.798 35.796c-12.496 12.499-12.496 32.758 0 45.258 12.499 12.496 32.758 12.496 45.258 0l90.509-90.511c12.496-12.497 12.496-32.758 0-45.255l-90.509-90.51c-12.499-12.497-32.758-12.497-45.258 0zM521.318 500.746h56.157v325.818h-59.021v-268.387h-1.91l-76.205 48.682v-54.090l80.979-52.022zM890.41 719.494c0 64.749-48.048 111.523-116.934 111.523-63.635 0-110.886-38.979-112.477-93.069h57.274c2.067 26.726 25.773 45.341 55.203 45.341 34.842 0 59.978-25.933 59.821-62.365 0.157-36.909-25.616-63.318-61.411-63.475-19.568-0.16-40.25 7.955-51.226 20.045l-53.296-8.749 17.021-168h189.002v49.318h-140.16l-9.386 86.384h1.91c12.090-14.317 35.475-24.816 61.885-24.816 59.181 0 102.774 45.181 102.774 107.862z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["jump-forward"],"defaultCode":59767,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1035,"name":"jump-forward","prevSize":32,"id":122,"code":59767},"setIdx":0,"setId":2,"iconIdx":123},{"icon":{"paths":["M769.296 649.373c12.496 12.496 12.496 32.758 0 45.254l-192 192c-12.499 12.496-32.758 12.496-45.258 0l-192-192c-12.496-12.496-12.496-32.758 0-45.254 12.499-12.496 32.758-12.496 45.258 0l137.37 137.373v-578.746h-192v192c0 17.674-14.325 32-31.999 32s-32-14.326-32-32v-224c0-17.673 14.327-32 32-32h255.999c17.674 0 32 14.327 32 32v610.746l137.373-137.373c12.499-12.496 32.758-12.496 45.258 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["jump-to-message"],"defaultCode":59768,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1036,"name":"jump-to-message","prevSize":32,"id":123,"code":59768},"setIdx":0,"setId":2,"iconIdx":124},{"icon":{"paths":["M576 256c0 35.346-28.653 64-64 64s-64-28.654-64-64c0-35.346 28.653-64 64-64s64 28.654 64 64z","M576 512c0 35.347-28.653 64-64 64s-64-28.653-64-64c0-35.347 28.653-64 64-64s64 28.653 64 64z","M576 768c0 35.347-28.653 64-64 64s-64-28.653-64-64c0-35.347 28.653-64 64-64s64 28.653 64 64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["kebab"],"defaultCode":59769,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1037,"name":"kebab","prevSize":32,"id":124,"code":59769},"setIdx":0,"setId":2,"iconIdx":125},{"icon":{"paths":["M160 224c-35.346 0-64 28.654-64 64v448c0 35.347 28.654 64 64 64h704c35.347 0 64-28.653 64-64v-448c0-35.346-28.653-64-64-64h-704zM160 288h704v448h-704v-448zM256 352c-17.673 0-32 14.326-32 32s14.327 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64zM256 512c0-17.674 14.327-32 32-32h64c17.674 0 32 14.326 32 32s-14.326 32-32 32h-64c-17.673 0-32-14.326-32-32zM480 480c-17.674 0-32 14.326-32 32s14.326 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64zM640 512c0-17.674 14.326-32 32-32h64c17.674 0 32 14.326 32 32s-14.326 32-32 32h-64c-17.674 0-32-14.326-32-32zM480 352c-17.674 0-32 14.326-32 32s14.326 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64zM320 640c0-17.674 14.326-32 32-32h320c17.674 0 32 14.326 32 32s-14.326 32-32 32h-320c-17.674 0-32-14.326-32-32zM704 352c-17.674 0-32 14.326-32 32s14.326 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["keyboard"],"defaultCode":59770,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1038,"name":"keyboard","prevSize":32,"id":125,"code":59770},"setIdx":0,"setId":2,"iconIdx":126},{"icon":{"paths":["M505.133 128.078c60.819-1.376 120.422 15.569 170.346 48.251 49.904 32.67 87.501 79.327 107.75 133.159 20.24 53.808 22.205 112.266 5.648 167.165-16.554 54.89-50.864 103.683-98.368 139.309-15.501 11.462-28.189 26.246-36.989 43.309-8.822 17.107-13.469 36-13.507 55.216v21.514h-96.013v-148.774l120.989-151.235c11.040-13.802 8.803-33.939-4.998-44.979s-33.939-8.803-44.979 4.998l-103.011 128.765-103.011-128.765c-11.040-13.802-31.178-16.038-44.979-4.998s-16.038 31.178-4.998 44.979l120.989 151.235v148.774h-95.994v-21.677c-0.138-19.030-4.762-37.728-13.462-54.691-8.694-16.954-21.21-31.69-36.509-43.194l-19.229 25.578 19.069-25.696c-34.247-25.418-61.857-57.84-80.845-94.736-18.985-36.89-28.886-77.331-29.027-118.285v-0.045c-0.71-146.981 123.709-271.715 281.13-275.177zM640.013 800c16.506 0 32.618-6.243 44.72-17.795 12.157-11.603 19.28-27.664 19.28-44.746v-22.842c0.022-8.947 2.182-17.856 6.39-26.016 4.214-8.176 10.406-15.459 18.208-21.216l0.192-0.144c58.173-43.59 100.733-103.75 121.35-172.109 20.621-68.378 18.154-141.245-7.021-208.177-25.168-66.908-71.664-124.28-132.602-164.174-60.915-39.878-133.274-60.348-206.826-58.689-189.76 4.184-344.567 155.060-343.702 339.427l0 0.045 32-0.154-32 0.109c0.176 51.165 12.553 101.558 36.121 147.35 23.547 45.754 57.616 85.658 99.521 116.774 7.682 5.792 13.781 13.062 17.952 21.194 4.164 8.122 6.33 16.944 6.409 25.84v22.781c0 17.082 7.123 33.142 19.28 44.746 12.106 11.552 28.218 17.795 44.72 17.795h256.006zM352 864c-17.674 0-32 14.326-32 32s14.326 32 32 32h320c17.674 0 32-14.326 32-32s-14.326-32-32-32h-320z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["lamp-bulb"],"defaultCode":59836,"grid":0},"attrs":[{}],"properties":{"order":1039,"id":126,"name":"lamp-bulb","prevSize":32,"code":59836},"setIdx":0,"setId":2,"iconIdx":127},{"icon":{"paths":["M681.904 256c0-17.673-14.326-32-32-32s-32 14.327-32 32v56.875l-80.346 13.998c-17.411 3.034-29.069 19.61-26.035 37.021 3.034 17.408 19.61 29.066 37.021 26.032l69.36-12.086v69.373c-30.384 6.851-60.461 20.074-84.154 43.139-27.923 27.184-44.070 65.238-44.070 113.808 0 25.741 6.262 48.262 18.451 66.621 12.186 18.349 29.062 30.682 47.251 38 35.357 14.221 76.72 10.173 108.128-4.579l1.206-0.566c31.126-14.621 62.493-29.354 90.723-57.818 21.325-21.507 39.709-49.539 56.848-88.678 5.654 9.498 9.594 20.966 10.285 34.339 1.632 31.526-14.275 82.813-87.955 153.418-12.758 12.227-13.19 32.483-0.963 45.245 12.227 12.758 32.486 13.19 45.245 0.963 80.192-76.851 110.586-145.034 107.59-202.934-2.986-57.658-38.586-96.022-70.675-113.955-20.774-13.014-50.214-22.826-81.216-28.288-16.624-2.931-34.47-4.749-52.694-4.995v-74.243l101.718-17.722c17.411-3.034 29.066-19.61 26.032-37.019-3.034-17.411-19.606-29.066-37.018-26.032l-90.733 15.809v-45.724zM578.394 536.208c10.163-9.891 23.565-17.475 39.51-22.704v138.653c-13.443 2.547-27.485 1.731-38.634-2.752-7.712-3.104-13.658-7.757-17.824-14.029-4.157-6.262-7.766-15.997-7.766-31.216 0-33.35 10.563-54.176 24.714-67.952zM709.994 600.752c-8.682 8.755-17.782 15.706-28.090 22.074v-117.888c14.125 0.24 28.224 1.661 41.587 4.016 13.587 2.397 25.683 5.622 35.763 9.165-16.88 42.038-33.069 66.304-49.261 82.634zM247.704 565.334h98.386l-49.193-184.883-49.193 184.883zM390.851 733.562l-27.734-104.227h-132.442l-27.732 104.227c-4.544 17.078-22.073 27.242-39.152 22.694-17.079-4.544-27.24-22.070-22.696-39.152l106.323-399.598c13.494-50.714 85.462-50.713 98.956 0l106.323 399.598c4.544 17.082-5.616 34.608-22.694 39.152-17.078 4.547-34.608-5.616-39.152-22.694z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["language"],"defaultCode":59771,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1040,"name":"language","prevSize":32,"id":127,"code":59771},"setIdx":0,"setId":2,"iconIdx":128},{"icon":{"paths":["M234.831 743.917c-75.198-141.606-58.197-285.718 40.507-391.734 101.776-109.314 284.915-172.318 524.636-158.217 16.192 0.953 29.114 13.872 30.064 30.066 14.102 239.723-48.902 422.859-158.218 524.635-106.016 98.707-250.128 115.706-391.737 40.506l-65.457 65.456c-12.497 12.499-32.758 12.499-45.255 0-12.497-12.496-12.497-32.758 0-45.254l65.458-65.456zM282.51 696.237l300.107-300.109c12.496-12.496 32.758-12.496 45.254 0 12.496 12.499 12.496 32.758 0 45.258l-300.109 300.106c113.565 53.238 220.73 34.554 300.448-39.664 86.579-80.611 146.157-231.866 139.251-445.286-213.418-6.905-364.675 52.673-445.283 139.254-74.219 79.715-92.904 186.877-39.669 300.442z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["leaf"],"defaultCode":59814,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1041,"id":128,"name":"leaf","prevSize":32,"code":59814},"setIdx":0,"setId":2,"iconIdx":129},{"icon":{"paths":["M254.841 275.612l-13.972 14.271c-37.092 37.883-36.449 98.664 1.435 135.758l145.619 142.573c37.885 37.091 98.666 36.448 135.76-1.437l13.971-14.269c0.723-0.739 1.43-1.488 2.128-2.243l0.099 0.099c5.805-5.904 13.888-9.568 22.822-9.568 17.674 0 32 14.326 32 32 0 9.6-4.227 18.211-10.922 24.077l-0.397 0.41-13.974 14.269c-61.818 63.142-163.12 64.214-226.259 2.394l-145.622-142.576c-63.141-61.818-64.212-163.119-2.392-226.26l13.972-14.27c61.82-63.141 163.12-64.212 226.263-2.392l74.691 73.131c0.976 0.847 1.901 1.752 2.768 2.71l0.374 0.366-0.026 0.026c4.934 5.63 7.923 13.005 7.923 21.078 0 17.674-14.326 32-32 32-7.83 0-15.005-2.813-20.566-7.482l-0.106 0.109-77.834-76.206c-37.885-37.092-98.666-36.45-135.757 1.435zM790.566 768.003l13.971-14.269c37.091-37.885 36.448-98.666-1.437-135.757l-145.619-142.576c-37.885-37.091-98.666-36.448-135.757 1.437l-13.971 14.269c-0.723 0.739-1.434 1.488-2.128 2.243l-0.102-0.099c-5.805 5.907-13.885 9.568-22.822 9.568-17.67 0-32-14.326-32-32 0-9.6 4.227-18.211 10.922-24.077l0.4-0.406 13.971-14.272c61.821-63.142 163.12-64.211 226.262-2.39l145.619 142.573c63.142 61.821 64.211 163.12 2.394 226.262l-13.971 14.269c-61.821 63.142-163.123 64.211-226.262 2.394l-74.694-73.133c-0.976-0.845-1.901-1.75-2.768-2.71l-0.374-0.365 0.026-0.026c-4.931-5.629-7.923-13.005-7.923-21.078 0-17.674 14.326-32 32-32 7.83 0 15.005 2.813 20.566 7.482l0.106-0.109 77.837 76.208c37.885 37.091 98.662 36.448 135.757-1.437z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["link"],"defaultCode":59752,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1042,"name":"link","prevSize":32,"id":129,"code":59752},"setIdx":0,"setId":2,"iconIdx":130},{"icon":{"paths":["M840.541 128c31.318 0 56.813 24.79 56.813 55.383v657.212c0 30.592-25.494 55.427-56.813 55.427h-654.546c-31.254 0-56.642-24.835-56.642-55.427v-657.212c0-30.593 25.387-55.383 56.642-55.383h654.546zM300.196 233.75c-36.588 0-66.093 29.59-66.093 66.050 0 36.482 29.505 66.072 66.093 66.072 36.437 0 66.005-29.59 66.005-66.072 0-36.46-29.568-66.050-66.005-66.050zM243.148 782.461h114.029v-366.515h-114.029v366.515zM537.814 415.923h-109.187v366.515h113.773v-181.274c0-47.83 9.046-94.147 68.333-94.147 58.454 0 59.181 54.678 59.181 97.174v178.246h113.901v-201.008c0-98.714-21.312-174.598-136.666-174.598-55.402 0-92.566 30.381-107.757 59.203h-1.578v-50.112z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["linkedin-monochromatic"],"defaultCode":59658,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1043,"name":"linkedin-monochromatic","prevSize":32,"id":130,"code":59658},"setIdx":0,"setId":2,"iconIdx":131},{"icon":{"paths":["M700.144 361.891c4.685-24.973 34.704-34.093 49.13-13.171 31.994 46.403 50.726 102.653 50.726 163.28s-18.733 116.88-50.726 163.283c-14.426 20.922-44.445 11.802-49.13-13.174l-1.706-9.101c-1.581-8.429 0.384-17.082 4.858-24.403 20.749-33.965 32.704-73.888 32.704-116.605 0-42.714-11.955-82.637-32.704-116.605-4.474-7.318-6.438-15.971-4.858-24.4l1.706-9.104z","M320.704 395.395c-20.748 33.968-32.704 73.891-32.704 116.605 0 42.717 11.956 82.64 32.704 116.605 4.474 7.322 6.438 15.974 4.858 24.403l-1.706 9.101c-4.684 24.976-34.705 34.096-49.128 13.174-31.994-46.403-50.728-102.656-50.728-163.283s18.733-116.877 50.728-163.28c14.424-20.922 44.444-11.802 49.128 13.171l1.706 9.104c1.581 8.429-0.384 17.082-4.858 24.4z","M728.765 209.256l-0.515 2.747c-2.234 11.911 2.534 23.967 11.763 31.821 75.866 64.565 123.987 160.751 123.987 268.175 0 107.427-48.122 203.613-123.987 268.176-9.229 7.856-13.997 19.914-11.763 31.824l0.515 2.746c4.192 22.362 29.69 33.194 47.261 18.746 92.794-76.294 151.974-191.981 151.974-321.491 0-129.507-59.181-245.193-151.974-321.489-17.571-14.448-43.069-3.615-47.261 18.745z","M283.986 243.825c9.228-7.854 13.998-19.911 11.764-31.821l-0.515-2.747c-4.192-22.359-29.69-33.193-47.262-18.745-92.793 76.296-151.973 191.981-151.973 321.489 0 129.51 59.18 245.197 151.973 321.491 17.572 14.448 43.070 3.616 47.262-18.746l0.515-2.746c2.233-11.91-2.536-23.968-11.764-31.824-75.864-64.563-123.986-160.749-123.986-268.176 0-107.424 48.122-203.61 123.986-268.175z","M608 512c0 53.021-42.979 96-96 96s-96-42.979-96-96c0-53.018 42.979-96 96-96s96 42.982 96 96z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["live"],"defaultCode":59774,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1044,"name":"live","prevSize":32,"id":131,"code":59774},"setIdx":0,"setId":2,"iconIdx":132},{"icon":{"paths":["M439.274 704.374c0-33.645 26.278-47.677 72.726-47.677s72.73 14.032 72.73 47.677c0 32.96-13.19 111.069-23.914 149.76-4.963 17.808-22.080 25.171-48.816 25.171s-43.85-7.363-48.813-25.174c-10.717-38.666-23.914-116.688-23.914-149.757zM616.778 870.374l0.026-0.090c6.176-22.291 12.566-53.869 17.386-83.453 4.688-28.787 8.72-60.707 8.72-82.458 0-35.891-15.811-67.802-46.797-87.114-26.035-16.227-57.152-19.926-84.112-19.926-26.957 0-58.077 3.699-84.112 19.926-30.982 19.312-46.797 51.222-46.797 87.114 0 21.805 4.035 53.728 8.726 82.515 4.819 29.578 11.21 61.123 17.379 83.392l0.026 0.086c7.402 26.557 24.982 45.664 46.87 56.467 19.472 9.61 40.426 11.834 57.907 11.834 17.485 0 38.435-2.224 57.907-11.83 21.888-10.8 39.469-29.907 46.87-56.464zM459.635 460.8c0-28.275 23.446-51.2 52.365-51.2s52.365 22.925 52.365 51.2c0 28.278-23.446 51.2-52.365 51.2s-52.365-22.922-52.365-51.2zM512 341.334c-67.478 0-122.182 53.488-122.182 119.466 0 65.981 54.704 119.469 122.182 119.469s122.182-53.488 122.182-119.469c0-65.978-54.704-119.466-122.182-119.466zM677.802 537.254c-6.662 13.792-3.882 31.11 6.278 42.573 14.086 15.894 39.85 17.939 50.205-0.602 19.642-35.174 30.806-75.526 30.806-118.426 0-136.672-113.315-247.465-253.091-247.465-139.779 0-253.092 110.793-253.092 247.465 0 42.899 11.164 83.251 30.806 118.426 10.354 18.541 36.119 16.496 50.205 0.602 10.16-11.462 12.938-28.781 6.275-42.573-11.203-23.187-17.469-49.104-17.469-76.454 0-98.97 82.054-179.199 183.274-179.199s183.27 80.229 183.27 179.199c0 27.35-6.262 53.267-17.469 76.454zM730.16 699.795c-0.304-10.659 3.542-21.072 10.928-28.762 52.771-54.957 85.094-128.902 85.094-210.234 0-169.661-140.666-307.199-314.182-307.199s-314.182 137.538-314.182 307.199c0 81.331 32.323 155.28 85.093 210.234 7.386 7.69 11.234 18.102 10.928 28.762-0.833 29.018-31.273 47.917-52.121 27.715-70.223-68.042-113.718-162.41-113.718-266.71 0-207.363 171.923-375.465 384-375.465s384 168.102 384 375.465c0 104.304-43.498 198.672-113.722 266.714-20.848 20.202-51.286 1.302-52.118-27.718z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["live-streaming"],"defaultCode":59773,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1045,"name":"live-streaming","prevSize":32,"id":132,"code":59773},"setIdx":0,"setId":2,"iconIdx":133},{"icon":{"paths":["M397.011 527.334c26.576 0 48.122-21.587 48.122-48.214s-21.546-48.214-48.122-48.214c-26.576 0-48.118 21.587-48.118 48.214s21.542 48.214 48.118 48.214z","M589.491 479.12c0 26.627-21.542 48.214-48.118 48.214s-48.122-21.587-48.122-48.214c0-26.627 21.546-48.214 48.122-48.214s48.118 21.587 48.118 48.214z","M733.853 479.12c0 26.627-21.542 48.214-48.118 48.214s-48.122-21.587-48.122-48.214c0-26.627 21.546-48.214 48.122-48.214s48.118 21.587 48.118 48.214z","M88.039 813.683l119.625 31.283c85.312 22.307 173.45-16.256 238.691-79.709 29.501 4.794 59.875 7.242 90.678 7.242 218.294 0 404.339-122.864 404.339-294.518 0-171.664-186.042-294.52-404.339-294.52-218.314 0-404.351 122.852-404.34 294.523 0 65.072 27.642 125.014 75.655 173.587-2.847 24.835-14.596 44.73-36.049 68.55l-84.261 93.562zM537.034 258.997c183.13 0 331.6 98.043 331.6 218.984 0 120.931-148.47 218.982-331.6 218.982-40.781 0-79.834-4.877-115.91-13.763-36.669 45.6-117.335 109.008-195.697 88.518 25.489-28.304 63.251-76.131 55.168-154.909-46.968-37.779-75.162-86.134-75.162-138.829-0.008-120.95 148.461-218.984 331.6-218.984z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["livechat-monochromatic"],"defaultCode":59775,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1046,"name":"livechat-monochromatic","prevSize":32,"id":133,"code":59775},"setIdx":0,"setId":2,"iconIdx":134},{"icon":{"paths":["M512 128c-97.203 0-176 78.798-176 176v142.477h-16c-53.020 0-96 42.979-96 96v257.523c0 53.021 42.981 96 96 96h384c53.021 0 96-42.979 96-96v-257.523c0-53.021-42.979-96-96-96h-16v-142.477c0-97.202-78.797-176-176-176zM624 304v142.477h-224v-142.477c0-61.856 50.144-112 112-112s112 50.144 112 112z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["lock-filled"],"defaultCode":59748,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1047,"name":"lock-filled","prevSize":32,"id":134,"code":59748},"setIdx":0,"setId":2,"iconIdx":135},{"icon":{"paths":["M336 304c0-97.202 78.797-176 176-176s176 78.798 176 176v142.477h16c53.021 0 96 42.979 96 96v257.523c0 53.021-42.979 96-96 96h-384c-53.019 0-96-42.979-96-96v-257.523c0-53.021 42.981-96 96-96h16v-142.477zM400 446.477h224v-142.477c0-61.856-50.144-112-112-112s-112 50.144-112 112v142.477zM320 510.477c-17.673 0-32 14.326-32 32v257.523c0 17.674 14.327 32 32 32h384c17.674 0 32-14.326 32-32v-257.523c0-17.674-14.326-32-32-32h-384z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["locker"],"defaultCode":59749,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1048,"name":"locker","prevSize":32,"id":135,"code":59749},"setIdx":0,"setId":2,"iconIdx":136},{"icon":{"paths":["M341.334 778.672c-17.674 0-32 14.326-32 32s14.326 32 32 32h341.334c17.674 0 32-14.326 32-32s-14.326-32-32-32h-341.334zM85.335 298.672c0-70.692 57.308-128 128-128h597.334c70.691 0 128 57.308 128 128v298.666c0 70.694-57.309 128-128 128h-597.334c-70.692 0-128-57.306-128-128v-298.666zM213.335 234.672c-35.346 0-64 28.654-64 64v298.666c0 35.347 28.654 64 64 64h597.334c35.344 0 64-28.653 64-64v-298.666c0-35.347-28.656-64-64-64h-597.334zM256 320c0-11.782 9.551-21.333 21.333-21.333h170.667c11.782 0 21.334 9.551 21.334 21.333s-9.552 21.334-21.334 21.334h-170.667c-11.782 0-21.333-9.552-21.333-21.334zM277.333 554.666c-11.782 0-21.333 9.552-21.333 21.334s9.551 21.334 21.333 21.334h85.332c11.782 0 21.334-9.552 21.334-21.334s-9.552-21.334-21.334-21.334h-85.332zM554.666 320c0-11.782 9.552-21.333 21.334-21.333h170.666c11.782 0 21.334 9.551 21.334 21.333s-9.552 21.334-21.334 21.334h-170.666c-11.782 0-21.334-9.552-21.334-21.334zM448 554.666c-11.782 0-21.334 9.552-21.334 21.334s9.552 21.334 21.334 21.334h298.666c11.782 0 21.334-9.552 21.334-21.334s-9.552-21.334-21.334-21.334h-298.666zM256 448c0-11.782 9.551-21.334 21.333-21.334h213.332c11.782 0 21.334 9.552 21.334 21.334s-9.552 21.334-21.334 21.334h-213.332c-11.782 0-21.333-9.552-21.333-21.334zM618.666 426.666c-11.782 0-21.331 9.552-21.331 21.334s9.549 21.334 21.331 21.334h128c11.782 0 21.334-9.552 21.334-21.334s-9.552-21.334-21.334-21.334h-128z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["log-view"],"defaultCode":59778,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1049,"name":"log-view","prevSize":32,"id":136,"code":59778},"setIdx":0,"setId":2,"iconIdx":137},{"icon":{"paths":["M176 96c-17.673 0-32 14.327-32 32v768c0 17.674 14.327 32 32 32h512c17.674 0 32-14.326 32-32v-96c0-17.674-14.326-32-32-32s-32 14.326-32 32v64h-448v-704h448v64c0 17.673 14.326 32 32 32s32-14.327 32-32v-96c0-17.673-14.326-32-32-32h-512zM521.373 329.373c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.254l-105.373 105.373h418.746c17.674 0 32 14.326 32 32s-14.326 32-32 32h-418.746l105.373 105.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-160-160c-12.496-12.496-12.496-32.758 0-45.254l160-160z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["login"],"defaultCode":59779,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1050,"name":"login","prevSize":32,"id":137,"code":59779},"setIdx":0,"setId":2,"iconIdx":138},{"icon":{"paths":["M268.099 96c-17.673 0-32 14.327-32 32v768c0 17.674 14.327 32 32 32h512c17.674 0 32-14.326 32-32v-96c0-17.674-14.326-32-32-32s-32 14.326-32 32v64h-448v-704h448v64c0 17.673 14.326 32 32 32s32-14.327 32-32v-96c0-17.673-14.326-32-32-32h-512zM994.726 489.373l-160-160c-12.496-12.497-32.758-12.497-45.254 0s-12.496 32.758 0 45.254l105.373 105.373h-418.746c-17.674 0-32 14.326-32 32s14.326 32 32 32h418.746l-105.373 105.373c-12.496 12.496-12.496 32.758 0 45.254s32.758 12.496 45.254 0l160-160c12.496-12.496 12.496-32.758 0-45.254z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["logout"],"defaultCode":59780,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1051,"name":"logout","prevSize":32,"id":138,"code":59780},"setIdx":0,"setId":2,"iconIdx":139},{"icon":{"paths":["M192 736h640v-448h-640v448zM128 256c0-17.673 14.327-32 32-32h704c17.674 0 32 14.327 32 32v512c0 17.674-14.326 32-32 32h-704c-17.673 0-32-14.326-32-32v-512zM305.304 389.082c-14.866-9.555-34.665-5.251-44.222 9.613-9.557 14.867-5.253 34.666 9.613 44.224l241.304 155.123 241.306-155.123c14.864-9.558 19.168-29.357 9.613-44.224-9.558-14.864-29.357-19.168-44.224-9.613l-206.694 132.877-206.696-132.877z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["mail"],"defaultCode":59781,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1052,"name":"mail","prevSize":32,"id":139,"code":59781},"setIdx":0,"setId":2,"iconIdx":140},{"icon":{"paths":["M302.769 192h418.463l23.187 72.727h-0.211l23.792 63.999c0 41.27-31.306 69.818-64 69.818s-64-28.547-64-69.818c0-18.476-14.326-33.454-32-33.454s-32 14.978-32 33.454c0 41.27-31.306 69.818-64 69.818s-64-28.547-64-69.818c0-18.476-14.326-33.454-32-33.454s-32 14.978-32 33.454c0 41.27-31.306 69.818-64 69.818s-64-28.547-64-69.818l23.794-63.999h-0.213l23.188-72.727zM212.406 264.727l36.491-114.448c4.231-13.27 16.56-22.279 30.488-22.279h465.23c13.93 0 26.259 9.009 30.49 22.279l56.896 178.447c0 33.939-12.083 64.925-32 88.515v350.778c0 53.018-42.979 96-96 96h-384c-53.019 0-96-42.982-96-96v-350.778c-19.916-23.59-32-54.576-32-88.515l20.406-63.999zM288 458.33v309.69c0 17.67 14.327 32 32 32h128v-192.019h128v192.019h128c17.674 0 32-14.33 32-32v-309.69c-10.227 2.752-20.95 4.214-32 4.214-38.23 0-72.547-17.52-96-45.302-23.453 27.782-57.77 45.302-96 45.302s-72.547-17.52-96-45.302c-23.453 27.782-57.77 45.302-96 45.302-11.050 0-21.772-1.462-32-4.214z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["marketplace"],"defaultCode":59782,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1053,"name":"marketplace","prevSize":32,"id":140,"code":59782},"setIdx":0,"setId":2,"iconIdx":141},{"icon":{"paths":["M773.072 576c-35.344 0-64-28.653-64-64s28.656-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64z","M517.072 576c-35.344 0-64-28.653-64-64s28.656-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64z","M261.073 576c-35.346 0-64-28.653-64-64s28.654-64 64-64c35.346 0 63.999 28.653 63.999 64s-28.652 64-63.999 64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["meatballs"],"defaultCode":59783,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1054,"name":"meatballs","prevSize":32,"id":141,"code":59783},"setIdx":0,"setId":2,"iconIdx":142},{"icon":{"paths":["M651.36 116.071c-57.242-19.989-105.792-20.069-138.358-20.071v64l-1.002-64c-92.006 0.342-297.345 47.824-381.242 242.995-17.897 38.97-34.758 103.344-34.758 173.005 0 69.958 17.020 146.285 52.216 207.875 23.229 40.653 92.799 131.376 191.179 173.536 94.861 40.656 206.368 52.349 296.49 16.301 16.41-6.563 24.39-25.187 17.827-41.597s-25.187-24.39-41.597-17.827c-69.878 27.952-163.171 20.445-247.51-15.699-80.819-34.64-141.384-112.451-160.821-146.464-28.804-50.41-43.784-115.418-43.784-176.125 0-60.765 15.020-116.182 29.055-146.589l0.184-0.4 0.173-0.406c69.507-162.181 243.823-204.604 323.589-204.605 31.594 0.002 70.877 0.296 117.258 16.493 46.147 16.114 101.389 48.779 161.824 116.767 43.658 49.115 63.533 114.977 69.389 177.713 5.891 63.12-2.854 118.189-11.546 142.093-6.4 17.6-20.429 45.44-59.392 45.699-18.259-0.806-72.822-14.672-83.12-69.568v-235.062c0-17.674-3.414-34.134-29.014-34.134-19.338 0-26.454 16.461-26.454 34.134v34.131c-35.181-39.859-95.402-68.266-152.746-68.266-106.038 0-192 85.962-192 192s85.962 192 192 192c62.179 0 117.658-29.555 152.746-75.386 25.715 71.078 102.57 93.027 137.014 94.134l0.515 0.016h0.512c82.643 0 111.715-64.806 120.086-87.83 12.64-34.762 21.674-99.696 15.12-169.907-6.589-70.595-29.379-151.401-85.277-214.287-66.902-75.265-131.075-114.597-188.557-134.67zM627.2 512c0 70.691-57.309 128-128 128s-128-57.309-128-128c0-70.691 57.309-128 128-128s128 57.309 128 128z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["mention"],"defaultCode":59784,"grid":0},"attrs":[{}],"properties":{"order":1055,"name":"mention","prevSize":32,"id":142,"code":59784},"setIdx":0,"setId":2,"iconIdx":143},{"icon":{"paths":["M223.311 308.609c-47.832 66.7-64.077 147.667-64.077 201.187v1.405l-0.127 1.398c-9.348 103.235 27.547 175.997 86.848 226.374 60.643 51.52 146.602 80.998 235.29 90.893 88.614 9.885 186.224 1.398 263.341-14.973 38.56-8.189 70.928-18.125 93.888-28.128 8.906-3.882 15.837-7.536 20.944-10.765-2.378-1.514-5.248-3.197-8.675-5.030-8.886-4.749-19.059-9.261-29.613-13.894l-1.843-0.81c-9.315-4.083-19.725-8.65-27.613-13.078-14.291-8.026-28.317-17.155-38.544-26.867-5.034-4.781-10.762-11.194-14.595-19.184-4.054-8.454-6.96-21.078-1.261-34.435 30.816-72.186 45.459-111.725 52.554-137.834 6.621-24.378 6.621-36.653 6.621-56.17v-0.179c0-15.51-8.979-86.595-53.776-152.876-43.376-64.174-121.395-125.729-264.832-125.729-129.725 0-207.83 53.576-254.529 118.696zM173.267 272.433c58.132-81.063 154.749-144.433 304.573-144.433 164.896 0 261.594 72.589 315.859 152.878 52.838 78.181 64.416 161.881 64.416 187.641 0 21.654-0.022 40.336-8.797 72.64-7.83 28.835-22.627 68.614-50.048 133.424 5.069 4.032 12.592 9.005 22.506 14.57 5.123 2.877 12.995 6.339 24.054 11.194 10.266 4.506 22.582 9.93 33.891 15.978 10.848 5.798 23.526 13.571 32.954 23.738 9.859 10.63 20.208 28.87 12.816 51.139-4.87 14.672-16.182 25.091-25.61 32.016-10.24 7.52-22.947 14.278-36.858 20.342-27.946 12.176-64.582 23.181-105.68 31.907-82.198 17.453-186.522 26.688-282.909 15.936-96.31-10.746-195.346-43.178-268.313-105.165-74.031-62.893-119.295-154.778-108.551-277.856 0.276-63.411 19.117-157.053 75.696-235.948z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["message"],"defaultCode":59786,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1056,"name":"message","prevSize":32,"id":143,"code":59786},"setIdx":0,"setId":2,"iconIdx":144},{"icon":{"paths":["M477.84 128c104.256 0 181.251 29.018 237.494 70.652l-44.317 44.317c-45.52-31.22-107.747-53.057-193.178-53.057-129.725 0-207.83 53.576-254.529 118.696-47.832 66.7-64.077 147.667-64.077 201.187v1.405l-0.127 1.398c-7.328 80.928 13.761 143.126 51.784 190.499l-43.879 43.878c-50.179-59.901-78.131-139.043-69.441-238.595 0.276-63.411 19.117-157.053 75.696-235.948 58.132-81.063 154.749-144.433 304.573-144.433zM822.848 332.499l-47.008 47.008c16.502 42.634 20.608 78.525 20.608 89.011v0.179c0 19.517 0 31.792-6.621 56.17-7.094 26.109-21.738 65.648-52.554 137.834-5.699 13.357-2.794 25.981 1.261 34.435 3.834 7.99 9.562 14.403 14.595 19.184 10.227 9.712 24.253 18.842 38.544 26.867 7.888 4.429 18.298 8.995 27.613 13.078l1.843 0.81c10.554 4.634 20.726 9.146 29.613 13.894 3.427 1.834 6.298 3.517 8.672 5.030-5.104 3.229-12.035 6.883-20.941 10.765-22.96 10.003-55.328 19.939-93.888 28.128-77.12 16.371-174.73 24.858-263.341 14.973-43.744-4.88-86.826-14.525-126.534-29.229l-47.542 47.542c52.771 23.018 110.492 36.886 167.267 43.222 96.387 10.752 200.71 1.517 282.909-15.936 41.098-8.726 77.731-19.731 105.68-31.907 13.91-6.064 26.618-12.822 36.858-20.342 9.427-6.925 20.739-17.344 25.61-32.016 7.392-22.269-2.957-40.509-12.816-51.139-9.427-10.166-22.106-17.939-32.954-23.738-11.309-6.048-23.626-11.472-33.891-15.978-11.059-4.854-18.934-8.317-24.054-11.194-9.914-5.565-17.437-10.538-22.506-14.57 27.421-64.81 42.214-104.589 50.048-133.424 8.774-32.304 8.797-50.986 8.797-72.64 0-20.106-7.053-75.501-35.267-136.019zM836.038 153.372c12.499-12.497 32.758-12.497 45.254 0 12.499 12.497 12.499 32.758 0 45.255l-682.665 682.665c-12.497 12.499-32.758 12.499-45.255 0-12.497-12.496-12.497-32.755 0-45.254l682.666-682.666z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["message-disabled"],"defaultCode":59785,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1057,"name":"message-disabled","prevSize":32,"id":144,"code":59785},"setIdx":0,"setId":2,"iconIdx":145},{"icon":{"paths":["M86.686 85.336l730.792 774.088c0 0 24.899 17.558 43.936-2.928 19.040-20.486 4.394-40.973 4.394-40.973l-779.122-730.187zM318.080 158.503l556.516 599.955c0 0 24.896 17.558 43.936-2.928 19.037-20.486 4.394-40.973 4.394-40.973l-604.845-556.054zM712.035 915.030l-556.517-599.955 604.843 556.054c0 0 14.646 20.486-4.39 40.973-19.040 20.486-43.936 2.928-43.936 2.928zM513.693 221.419l388.803 419.15c0 0 17.395 12.269 30.694-2.042 13.302-14.314 3.069-28.627 3.069-28.627l-422.566-388.482zM597.878 915.677l-388.805-419.152 422.568 388.48c0 0 10.234 14.314-3.069 28.627-13.302 14.31-30.694 2.045-30.694 2.045zM713.498 312.143l176.221 190.551c0 0 8.605 5.747 15.184-0.96 6.579-6.704 1.517-13.411 1.517-13.411l-192.922-176.18zM482.582 880.23l-176.219-190.55 192.923 176.179c0 0 5.059 6.707-1.52 13.414-6.579 6.704-15.184 0.957-15.184 0.957z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["meteor-monochromatic"],"defaultCode":59659,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1058,"name":"meteor-monochromatic","prevSize":32,"id":145,"code":59659},"setIdx":0,"setId":2,"iconIdx":146},{"icon":{"paths":["M608 288c0-53.019-42.979-96-96-96s-96 42.981-96 96v128c0 53.021 42.979 96 96 96s96-42.979 96-96v-128zM352 288c0-88.365 71.635-160 160-160s160 71.635 160 160v128c0 88.365-71.635 160-160 160s-160-71.635-160-160v-128zM256 384c17.673 0 32 14.326 32 32 0 92.086 37.757 149.632 83.722 185.6 46.464 36.358 102.736 51.581 140.278 54.326 37.542-2.746 93.814-17.968 140.278-54.326 45.962-35.968 83.722-93.514 83.722-185.6 0-17.674 14.326-32 32-32s32 14.326 32 32c0 112.714-47.574 188.499-108.278 236-47.904 37.485-103.082 56.762-147.722 64.381v115.619h160c17.674 0 32 14.326 32 32s-14.326 32-32 32h-384c-17.673 0-32-14.326-32-32s14.327-32 32-32h160v-115.619c-44.64-7.619-99.818-26.896-147.722-64.381-60.703-47.501-108.278-123.286-108.278-236 0-17.674 14.327-32 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["microphone"],"defaultCode":59788,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1059,"name":"microphone","prevSize":32,"id":146,"code":59788},"setIdx":0,"setId":2,"iconIdx":147},{"icon":{"paths":["M512 128c75.546 0 138.861 52.356 155.645 122.762l-59.645 59.644v-22.405c0-53.019-42.979-96-96-96s-96 42.981-96 96v128c0 24.067 8.858 46.067 23.488 62.915l-45.322 45.325c-26.182-28.49-42.166-66.499-42.166-108.24v-128c0-88.365 71.635-160 160-160zM561.35 568.243l102.893-102.893c-15.763 48.672-54.221 87.13-102.893 102.893zM288 416c0 72.154 23.181 123.101 55.328 159.078l-45.304 45.302c-43.428-47.35-74.024-113.99-74.024-204.381 0-17.674 14.327-32 32-32s32 14.326 32 32zM478.659 650.938l-51.808 51.808c18.56 6.374 36.579 10.806 53.149 13.635v115.619h-160c-17.673 0-32 14.326-32 32s14.327 32 32 32h384c17.674 0 32-14.326 32-32s-14.326-32-32-32h-160v-115.619c44.64-7.619 99.818-26.896 147.722-64.381 60.704-47.501 108.278-123.286 108.278-236 0-17.674-14.326-32-32-32s-32 14.326-32 32c0 92.086-37.757 149.632-83.722 185.6-46.464 36.358-102.736 51.581-140.278 54.326-9.971-0.73-21.264-2.339-33.341-4.989zM825.373 153.372c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-672 672c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l672-672z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["microphone-disabled"],"defaultCode":59787,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1060,"name":"microphone-disabled","prevSize":32,"id":147,"code":59787},"setIdx":0,"setId":2,"iconIdx":148},{"icon":{"paths":["M234.666 170.661c0-47.128 38.205-85.333 85.333-85.333h384.001c47.126 0 85.331 38.205 85.331 85.333v682.667c0 47.13-38.205 85.334-85.331 85.334h-384.001c-47.128 0-85.333-38.205-85.333-85.334v-682.667zM298.666 170.661v682.667c0 11.782 9.551 21.334 21.333 21.334h384.001c11.782 0 21.331-9.552 21.331-21.334v-682.667c0-11.782-9.549-21.333-21.331-21.333h-96.291c-2.653 24.002-23.002 42.672-47.709 42.672h-96c-24.707 0-45.056-18.67-47.709-42.672h-96.292c-11.782 0-21.333 9.551-21.333 21.333z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["mobile"],"defaultCode":59789,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1061,"name":"mobile","prevSize":32,"id":148,"code":59789},"setIdx":0,"setId":2,"iconIdx":149},{"icon":{"paths":["M319.247 231.566c-62.882 49.504-135.086 136.549-141.94 266.127-5.762 108.922 37.404 187.184 89.915 241.51 53.258 55.098 115.702 84.925 144.25 94.438 41.859 13.955 114.269 29.536 234.643-15.603 34.858-13.072 73.165-42.096 108.304-78.426 14.272-14.755 27.616-30.294 39.6-45.773-28.778 9.293-61.699 17.754-96.589 23.594-56.192 9.405-119.29 12.32-179.411-0.237-2.49-0.518-4.96-1.030-7.408-1.536-22.195-4.576-42.733-8.816-62.589-17.648-23.091-10.275-43.805-25.891-69.299-51.386-42.096-42.096-89.142-107.222-89.371-213.843-1.569-34.080 4.622-81.878 13.764-129.216 4.624-23.946 10.142-48.465 16.132-72.003zM345.562 138.217c32.8-17.15 63.709 15.843 53.875 45.907-12.234 37.414-24.586 85.511-33.482 131.58-9.024 46.732-13.949 88.633-12.643 114.7l0.038 0.797v0.8c0 84.915 36.173 134.918 70.627 169.373 22.509 22.509 36.835 32.278 50.064 38.166 13.229 5.885 26.832 8.717 51.085 13.763 1.923 0.4 3.917 0.816 5.978 1.248 49.914 10.426 104.534 8.336 155.76-0.237 65.434-10.954 122.384-31.981 152.374-47.386 17.562-9.021 34.992-2.47 44.477 5.965 9.661 8.589 19.376 27.152 8.886 46.954-20.637 38.95-53.645 84.419-92.182 124.259-38.211 39.51-84.317 76.038-131.834 93.859-135.626 50.858-223.216 34.438-277.354 16.394-36.515-12.173-108.392-46.912-170.026-110.675-62.381-64.534-114.684-159.427-107.81-289.373 10.79-203.979 157.583-317.098 232.165-356.093z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["moon"],"defaultCode":59790,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1062,"name":"moon","prevSize":32,"id":149,"code":59790},"setIdx":0,"setId":2,"iconIdx":150},{"icon":{"paths":["M144 160c-17.673 0-32 14.327-32 32s14.327 32 32 32h192c17.674 0 32-14.327 32-32s-14.326-32-32-32h-192zM700.4 346.646c11.795-13.165 32.026-14.272 45.187-2.48 13.162 11.795 14.272 32.026 2.477 45.187l-81.222 90.646h216.358c17.674 0 32 14.326 32 32s-14.326 32-32 32h-216.358l81.222 90.646c11.795 13.162 10.685 33.392-2.477 45.187-13.162 11.792-33.392 10.685-45.187-2.48l-129.030-144c-10.893-12.154-10.893-30.554 0-42.707l129.030-144zM112 512c0-17.674 14.327-32 32-32h192c17.674 0 32 14.326 32 32s-14.326 32-32 32h-192c-17.673 0-32-14.326-32-32zM144 640c-17.673 0-32 14.326-32 32s14.327 32 32 32h192c17.674 0 32-14.326 32-32s-14.326-32-32-32h-192zM112 352c0-17.674 14.327-32 32-32h192c17.674 0 32 14.326 32 32s-14.326 32-32 32h-192c-17.673 0-32-14.326-32-32zM144 800c-17.673 0-32 14.326-32 32s14.327 32 32 32h192c17.674 0 32-14.326 32-32s-14.326-32-32-32h-192z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["move-to-the-queue"],"defaultCode":59791,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1063,"name":"move-to-the-queue","prevSize":32,"id":150,"code":59791},"setIdx":0,"setId":2,"iconIdx":151},{"icon":{"paths":["M809.002 166.758c7.782 6.063 12.333 15.377 12.333 25.242v448h-0.112c0.074 1.734 0.112 3.478 0.112 5.229 0 69.053-57.309 125.030-128 125.030-70.694 0-128-55.978-128-125.030s57.306-125.030 128-125.030c23.312 0 45.171 6.090 64 16.73v-303.86l-384 96.798v409.136c0 69.053-57.309 125.037-128.001 125.037s-128-55.978-128-125.030c0-69.050 57.308-125.027 128-125.027 23.314 0 45.173 6.086 64 16.726v-325.777c0-14.66 9.962-27.446 24.177-31.029l448-112.93c9.568-2.411 19.709-0.276 27.491 5.788z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["musical-note"],"defaultCode":59792,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1064,"name":"musical-note","prevSize":32,"id":151,"code":59792},"setIdx":0,"setId":2,"iconIdx":152},{"icon":{"paths":["M208 176c-35.346 0-64 28.654-64 64v576c0 35.347 28.654 64 64 64h576c35.347 0 64-28.653 64-64v-576c0-35.346-28.653-64-64-64h-576zM208 240h576v576h-576v-576zM698.627 558.15c-0.189 17.674-14.669 31.846-32.339 31.658-17.674-0.189-31.846-14.669-31.658-32.339l1.318-123.594-309.341 308.774c-12.51 12.483-32.771 12.464-45.256-0.042-12.485-12.509-12.467-32.771 0.042-45.258l309.195-308.624-123.382 1.315c-17.674 0.189-32.154-13.984-32.339-31.654-0.189-17.674 13.984-32.15 31.654-32.339l201.92-2.157c8.605-0.093 16.886 3.286 22.97 9.37 6.086 6.086 9.462 14.365 9.373 22.97l-2.157 201.92z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["new-window"],"defaultCode":59793,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1065,"name":"new-window","prevSize":32,"id":152,"code":59793},"setIdx":0,"setId":2,"iconIdx":153},{"icon":{"paths":["M601.331 808.928h-174.154c0.003 48.090 38.989 87.072 87.078 87.072s87.075-38.982 87.075-87.072zM815.597 731.677c7.274 9.696 8.442 22.669 3.021 33.51s-16.499 17.69-28.621 17.69h-565.996c-12.943 0-24.611-7.798-29.564-19.757-4.953-11.955-2.215-25.718 6.937-34.87l51.653-51.654v-274.032c0-144.272 116.957-261.228 261.229-261.228s261.229 116.956 261.229 261.228v275.629l40.112 53.485zM711.485 715.894v-313.331c0-108.926-88.304-197.228-197.229-197.228-108.928 0-197.229 88.302-197.229 197.228v313.331h394.458z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["notification"],"defaultCode":59795,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1066,"name":"notification","prevSize":32,"id":153,"code":59795},"setIdx":0,"setId":2,"iconIdx":154},{"icon":{"paths":["M781.837 402.634c0-5.245-0.154-10.454-0.461-15.622l-63.539 63.539v265.363h-265.363l-66.979 66.979h425.363c12.944 0 24.611-7.795 29.565-19.754 4.954-11.955 2.214-25.722-6.938-34.874l-51.648-51.648v-273.984zM704.765 217.373l-45.254 45.255c-35.638-35.351-84.704-57.189-138.867-57.189-108.909 0-197.194 88.287-197.194 197.195v196.054l-64.001 64v-260.054c0-144.254 116.941-261.195 261.194-261.195 71.837 0 136.899 29.001 184.122 75.934zM433.578 808.934c0 48.086 38.982 87.066 87.066 87.066s87.066-38.979 87.066-87.066h-174.131zM854.275 190.982c-11.334-11.334-29.709-11.334-41.043 0l-612.732 612.733c-11.333 11.331-11.333 29.709 0 41.040 11.334 11.334 29.709 11.334 41.043 0l612.732-612.731c11.334-11.333 11.334-29.709 0-41.043z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["notification-disabled"],"defaultCode":59794,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1067,"name":"notification-disabled","prevSize":32,"id":154,"code":59794},"setIdx":0,"setId":2,"iconIdx":155},{"icon":{"paths":["M712.051 512.675v54.89c-0.195 76.736-43.741 143.283-107.44 176.445-5.53-25.67-28.362-44.906-55.683-44.906h-72.502c-31.459 0-56.963 25.501-56.963 56.963v41.427c0 31.462 25.504 56.963 56.963 56.963h72.502c28.509 0 52.128-20.944 56.307-48.288 69.261-26.829 123.962-82.883 148.966-153.030 4.723 1.27 9.69 1.946 14.813 1.946h28.483c31.459 0 56.963-25.504 56.963-56.963v-85.446c0-31.459-25.504-56.963-56.963-56.963h-28.483v-28.483c0-141.572-114.765-256.338-256.336-256.338s-256.339 114.766-256.339 256.338v23.302h-28.483c-31.46 0-56.964 25.504-56.964 56.966v103.571c0 31.459 25.504 56.963 56.964 56.963h28.482c31.46 0 56.964-25.504 56.964-56.963v-36.253h0.149c-0.099-2.576-0.148-5.165-0.148-7.766v-139.821c0-110.111 89.263-199.374 199.375-199.374s199.373 89.263 199.373 199.374v85.446z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["omnichannel"],"defaultCode":59796,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1068,"name":"omnichannel","prevSize":32,"id":155,"code":59796},"setIdx":0,"setId":2,"iconIdx":156},{"icon":{"paths":["M705.578 633.158c9.507-9.235 24.701-9.018 33.939 0.486 9.238 9.507 9.021 24.701-0.486 33.939l-208.275 202.387c-9.312 9.050-24.138 9.050-33.45 0l-208.276-202.387c-9.506-9.238-9.724-24.432-0.487-33.939 9.237-9.504 24.432-9.722 33.937-0.486l191.549 186.134 191.549-186.134zM705.578 411.584c9.507 9.238 24.701 9.021 33.939-0.486s9.021-24.701-0.486-33.939l-208.275-202.385c-9.312-9.051-24.138-9.051-33.45 0l-208.276 202.385c-9.506 9.238-9.724 24.432-0.487 33.939 9.237 9.504 24.432 9.725 33.937 0.486l191.549-186.134 191.549 186.134z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["order"],"defaultCode":59797,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1069,"name":"order","prevSize":32,"id":156,"code":59797},"setIdx":0,"setId":2,"iconIdx":157},{"icon":{"paths":["M742.317 652.566c12.666-12.323 12.944-32.582 0.618-45.248-12.323-12.669-32.582-12.944-45.251-0.621l44.634 45.869zM512 832.019l-22.317 22.934c12.422 12.086 32.211 12.086 44.634 0l-22.317-22.934zM326.317 606.698c-12.667-12.323-32.927-12.048-45.252 0.621-12.324 12.666-12.047 32.925 0.619 45.248l44.632-45.869zM697.683 606.698l-208 202.387 44.634 45.869 208-202.387-44.634-45.869zM534.317 809.085l-208-202.387-44.632 45.869 207.999 202.387 44.634-45.869z","M742.317 371.456c12.666 12.323 12.944 32.582 0.618 45.251-12.323 12.666-32.582 12.944-45.251 0.618l44.634-45.869zM512 192.004l-22.317-22.935c12.422-12.087 32.211-12.087 44.634 0l-22.317 22.935zM326.317 417.325c-12.668 12.326-32.927 12.048-45.252-0.618-12.325-12.669-12.048-32.928 0.619-45.251l44.633 45.869zM697.683 417.325l-208-202.386 44.634-45.87 208 202.387-44.634 45.869zM534.317 214.939l-208 202.386-44.633-45.869 207.999-202.387 44.634 45.87z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"isMulticolor":true,"isMulticolor2":true,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":9}]},"tags":["ordering-ascending"],"defaultCode":59798,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"properties":{"order":1070,"name":"ordering-ascending","prevSize":32,"codes":[59798,59799],"id":157,"code":59798},"setIdx":0,"setId":2,"iconIdx":158},{"icon":{"paths":["M281.684 371.434c-12.667 12.323-12.944 32.582-0.619 45.248 12.324 12.669 32.584 12.944 45.252 0.621l-44.633-45.869zM512 191.981l22.317-22.935c-12.422-12.087-32.211-12.087-44.634 0l22.317 22.935zM697.683 417.302c12.669 12.323 32.928 12.048 45.251-0.621 12.326-12.666 12.048-32.925-0.618-45.248l-44.634 45.869zM326.317 417.302l208-202.387-44.634-45.869-207.999 202.387 44.633 45.869zM489.683 214.916l208 202.387 44.634-45.869-208-202.387-44.634 45.869z","M281.684 652.544c-12.667-12.323-12.944-32.582-0.619-45.251 12.324-12.666 32.584-12.944 45.252-0.618l-44.633 45.869zM512 831.997l22.317 22.934c-12.422 12.086-32.211 12.086-44.634 0l22.317-22.934zM697.683 606.675c12.669-12.326 32.928-12.048 45.251 0.618 12.326 12.669 12.048 32.928-0.618 45.251l-44.634-45.869zM326.317 606.675l208 202.384-44.634 45.872-207.999-202.387 44.633-45.869zM489.683 809.059l208-202.384 44.634 45.869-208 202.387-44.634-45.872z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"isMulticolor":true,"isMulticolor2":true,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":9}]},"tags":["ordering-descending"],"defaultCode":59800,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"properties":{"order":1071,"name":"ordering-descending","prevSize":32,"codes":[59800,59801],"id":158,"code":59800},"setIdx":0,"setId":2,"iconIdx":159},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352-194.405 0-352.001 157.596-352.001 352s157.596 352 352.001 352c194.403 0 352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416-229.752 0-416.001-186.25-416.001-416s186.25-416 416.001-416c229.75 0 416 186.25 416 416zM399.997 383.994v256c0 17.674 14.326 32 32 32s32-14.326 32-32v-256c0-17.67-14.326-32-32-32s-32 14.33-32 32zM559.997 383.994v256c0 17.674 14.326 32 32 32s32-14.326 32-32v-256c0-17.67-14.326-32-32-32s-32 14.33-32 32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pause"],"defaultCode":59803,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1072,"name":"pause","prevSize":32,"id":159,"code":59803},"setIdx":0,"setId":2,"iconIdx":160},{"icon":{"paths":["M512 928c229.75 0 416-186.25 416-416s-186.25-416-416-416c-229.752 0-416.001 186.25-416.001 416s186.25 416 416.001 416zM399.997 383.994c0-17.67 14.326-32 32-32s32 14.33 32 32v256c0 17.674-14.326 32-32 32s-32-14.326-32-32v-256zM559.997 383.994c0-17.67 14.326-32 32-32s32 14.33 32 32v256c0 17.674-14.326 32-32 32s-32-14.326-32-32v-256z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pause-filled"],"defaultCode":59802,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1073,"name":"pause-filled","prevSize":32,"id":160,"code":59802},"setIdx":0,"setId":2,"iconIdx":161},{"icon":{"paths":["M822.627 201.372c12.496 12.497 12.496 32.758 0 45.255l-576 576c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l576-576c12.496-12.497 32.758-12.497 45.254 0z","M192 320c0-70.692 57.308-128 128-128 70.691 0 128 57.308 128 128 0 70.691-57.309 128-128 128-70.692 0-128-57.309-128-128zM320 256c-35.346 0-64 28.654-64 64s28.654 64 64 64c35.347 0 64-28.653 64-64s-28.653-64-64-64z","M704 576c-70.691 0-128 57.309-128 128s57.309 128 128 128c70.691 0 128-57.309 128-128s-57.309-128-128-128zM640 704c0-35.347 28.653-64 64-64s64 28.653 64 64c0 35.347-28.653 64-64 64s-64-28.653-64-64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["percentage"],"defaultCode":59777,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1074,"id":161,"name":"percentage","prevSize":32,"code":59777},"setIdx":0,"setId":2,"iconIdx":162},{"icon":{"paths":["M410.502 204.616c-10.419-21.362-34.202-37.856-62.189-33.137-38.104 6.425-88.825 25.194-126.247 57.060-18.972 16.155-35.817 36.795-44.757 62.246-9.15 26.048-9.211 54.919 2.087 85.195 21.202 56.816 60.513 117.456 97.761 167.264 37.482 50.122 74.609 91.552 93.329 110.269l44.173-44.173c-16.406-16.403-51.6-55.536-87.472-103.51-36.11-48.285-71.192-103.264-89.264-151.69-6.437-17.248-5.748-31.056-1.675-42.651 4.283-12.192 13.134-24.16 26.319-35.388 25.849-22.012 63.292-36.814 92.623-42.392l59.075 121.097c0.019 0.074 0.045 0.285-0.013 0.688-0.112 0.749-0.502 1.827-1.344 2.883-7.117 8.95-14.899 20-20.941 31.741-5.674 11.024-11.715 26.246-10.976 42.47 0.643 14.138 7.76 27.773 13.222 36.973 6.275 10.576 14.416 21.741 22.79 32.291 16.806 21.171 36.541 42.326 49.68 55.466l44.173-44.173c-11.952-11.952-29.981-31.309-44.928-50.134-7.504-9.453-13.738-18.157-17.997-25.334-2.87-4.838-3.984-7.578-4.387-8.57l-0.038-0.093c0.266-1.382 1.139-4.736 4.006-10.31 3.552-6.902 8.717-14.438 14.291-21.443 14.611-18.374 20.518-45.424 8.611-69.837l-59.914-122.808zM819.386 613.504c21.36 10.419 37.856 34.202 33.136 62.189-6.426 38.106-25.194 88.826-57.059 126.246-16.157 18.973-36.797 35.818-62.246 44.758-26.048 9.149-54.922 9.21-85.197-2.086-56.813-21.203-117.453-60.515-167.261-97.763-50.122-37.482-91.555-74.608-110.272-93.328l44.173-44.173c16.403 16.406 55.539 51.6 103.51 87.472 48.285 36.109 103.267 71.194 151.69 89.264 17.248 6.435 31.056 5.747 42.653 1.674 12.192-4.282 24.16-13.133 35.386-26.317 22.013-25.85 36.816-63.293 42.394-92.624l-121.094-59.075c-0.077-0.019-0.288-0.048-0.688 0.013-0.752 0.112-1.83 0.502-2.886 1.344-8.95 7.117-20 14.899-31.741 20.941-11.024 5.674-26.246 11.715-42.47 10.976-14.134-0.643-27.773-7.76-36.973-13.222-10.576-6.275-21.741-14.416-32.288-22.79-21.174-16.806-42.33-36.541-55.469-49.68l44.173-44.173c11.952 11.952 31.309 29.981 50.134 44.928 9.453 7.504 18.16 13.738 25.334 17.997 4.838 2.87 7.578 3.984 8.57 4.387l0.093 0.038c1.382-0.266 4.739-1.139 10.314-4.006 6.899-3.552 14.435-8.717 21.44-14.291 18.374-14.611 45.427-20.518 69.837-8.611l122.81 59.914z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["phone"],"defaultCode":59806,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1075,"name":"phone","prevSize":32,"id":162,"code":59806},"setIdx":0,"setId":2,"iconIdx":163},{"icon":{"paths":["M825.373 153.372c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-672 672c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l672-672zM575.613 569.069l-44.707 44.707c7.846 5.904 15.846 11.453 23.533 16.016 9.2 5.459 22.838 12.579 36.973 13.222 16.224 0.736 31.446-5.302 42.47-10.976 11.741-6.042 22.79-13.824 31.744-20.944 1.053-0.838 2.134-1.232 2.883-1.341 0.403-0.061 0.611-0.032 0.688-0.013l121.094 59.075c-5.578 29.331-20.381 66.771-42.39 92.621-11.229 13.187-23.197 22.038-35.389 26.32-11.597 4.074-25.402 4.762-42.653-1.677-48.422-18.070-103.405-53.152-151.69-89.261-14.026-10.49-27.299-20.922-39.469-30.842l-44.387 44.39c14.186 11.683 29.84 24.061 46.445 36.48 49.808 37.248 110.448 76.56 167.261 97.76 30.275 11.299 59.149 11.238 85.197 2.086 25.45-8.938 46.090-25.786 62.246-44.755 31.866-37.424 50.634-88.144 57.059-126.246 4.72-27.987-11.776-51.77-33.136-62.192l-122.81-59.91c-24.41-11.907-51.462-6-69.834 8.611-7.008 5.571-14.544 10.739-21.443 14.291-5.574 2.867-8.931 3.741-10.314 4.003l-0.093-0.038c-0.992-0.4-3.731-1.514-8.57-4.387-3.277-1.942-6.87-4.301-10.71-7.002zM313.636 589.683l44.389-44.387c-9.92-12.17-20.349-25.44-30.838-39.466-36.109-48.285-71.192-103.267-89.263-151.69-6.437-17.251-5.748-31.056-1.675-42.652 4.283-12.192 13.134-24.16 26.319-35.388 25.849-22.012 63.291-36.814 92.622-42.392l59.075 121.095c0.019 0.077 0.048 0.285-0.013 0.688-0.109 0.752-0.502 1.83-1.341 2.883-7.12 8.954-14.902 20.003-20.944 31.744-5.674 11.024-11.715 26.246-10.976 42.47 0.643 14.134 7.763 27.773 13.222 36.973 4.563 7.686 10.109 15.683 16.013 23.53l44.707-44.707c-2.701-3.837-5.056-7.434-7.002-10.707-2.87-4.838-3.984-7.578-4.387-8.57l-0.038-0.093c0.266-1.382 1.139-4.739 4.006-10.314 3.552-6.899 8.72-14.435 14.291-21.443 14.611-18.371 20.518-45.424 8.611-69.834l-59.91-122.809c-10.422-21.362-34.205-37.856-62.192-33.137-38.103 6.425-88.824 25.194-126.246 57.060-18.972 16.155-35.817 36.795-44.757 62.246-9.15 26.048-9.211 54.921 2.087 85.196 21.202 56.813 60.513 117.453 97.761 167.261 12.417 16.605 24.795 32.256 36.478 46.442z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["phone-disabled"],"defaultCode":59804,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1076,"name":"phone-disabled","prevSize":32,"id":163,"code":59804},"setIdx":0,"setId":2,"iconIdx":164},{"icon":{"paths":["M801.123 657.59c22.474 7.734 50.954 2.582 67.408-20.544 22.4-31.488 44.992-80.624 48.922-129.619 1.99-24.838-0.691-51.344-12.368-75.661-11.949-24.89-32.32-45.35-61.718-58.768-55.165-25.181-125.84-40.262-187.398-49.146-61.946-8.936-117.494-11.98-143.965-11.98v62.469c23.2 0 75.757 2.787 135.043 11.341 59.677 8.611 123.36 22.682 170.381 44.144 16.749 7.645 26.022 17.894 31.344 28.973 5.59 11.651 7.795 26.371 6.413 43.635-2.717 33.843-18.723 70.784-35.52 95.469l-127.398-43.853c-0.067-0.042-0.237-0.17-0.48-0.496-0.451-0.608-0.934-1.651-1.088-2.989-1.296-11.363-3.606-24.678-7.635-37.254-3.786-11.808-10.278-26.842-22.272-37.792-10.451-9.539-25.126-14.15-35.494-16.794-11.914-3.040-25.568-5.181-38.944-6.717-26.858-3.088-55.773-4.093-74.352-4.093v62.47c16.902 0 43.338 0.938 67.219 3.683 11.99 1.379 22.554 3.123 30.64 5.187 5.45 1.389 8.173 2.541 9.162 2.957l0.093 0.038c0.79 1.165 2.544 4.154 4.458 10.125 2.368 7.392 4.045 16.374 5.059 25.267 2.659 23.325 17.61 46.63 43.29 55.469l129.203 44.477zM222.875 657.584c-22.474 7.738-50.954 2.586-67.407-20.544-22.4-31.485-44.993-80.621-48.922-129.616-1.992-24.838 0.691-51.344 12.366-75.664 11.949-24.886 32.321-45.347 61.719-58.765 55.165-25.181 125.841-40.262 187.4-49.146 61.946-8.937 117.494-11.98 143.965-11.98v62.47c-23.2 0-75.757 2.787-135.046 11.341-59.674 8.608-123.358 22.682-170.378 44.144-16.748 7.645-26.024 17.894-31.343 28.973-5.593 11.651-7.797 26.371-6.412 43.635 2.714 33.843 18.721 70.784 35.518 95.469l127.4-43.856c0.067-0.038 0.234-0.166 0.477-0.493 0.454-0.611 0.938-1.651 1.091-2.989 1.296-11.363 3.606-24.682 7.635-37.254 3.786-11.808 10.275-26.842 22.272-37.792 10.448-9.542 25.126-14.15 35.491-16.794 11.917-3.040 25.568-5.181 38.947-6.717 26.858-3.088 55.77-4.093 74.349-4.093v62.47c-16.899 0-43.338 0.938-67.216 3.683-11.99 1.376-22.554 3.123-30.64 5.187-5.453 1.389-8.176 2.541-9.162 2.957l-0.093 0.038c-0.79 1.162-2.547 4.154-4.458 10.125-2.371 7.389-4.045 16.371-5.059 25.267-2.659 23.322-17.61 46.627-43.293 55.469l-129.202 44.474z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["phone-end"],"defaultCode":59805,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1077,"name":"phone-end","prevSize":32,"id":164,"code":59805},"setIdx":0,"setId":2,"iconIdx":165},{"icon":{"paths":["M717.254 352l137.37-137.372c12.499-12.497 12.499-32.758 0-45.255-12.496-12.497-32.755-12.497-45.254 0l-137.373 137.373v-82.745c0-17.673-14.326-32-32-32-17.67 0-32 14.327-32 32v160c0 4.339 0.864 8.477 2.429 12.25 1.526 3.686 3.773 7.149 6.736 10.166 0.138 0.141 0.278 0.282 0.419 0.419 3.018 2.966 6.48 5.21 10.17 6.736 3.773 1.565 7.91 2.429 12.246 2.429h160c17.674 0 32-14.326 32-32s-14.326-32-32-32h-82.742z","M819.478 613.379l-122.88-59.84c-11.261-5.29-23.786-7.283-36.128-5.757-12.346 1.53-24.003 6.522-33.632 14.397-6.816 5.274-13.978 10.086-21.44 14.4-3.382 1.632-6.922 2.918-10.56 3.84-3.008-1.235-5.901-2.736-8.64-4.48-8.752-5.504-17.19-11.488-25.28-17.92-18.88-15.040-38.080-32-50.24-44.8s-29.76-32-44.8-50.24c-6.435-8.093-12.416-16.531-17.92-25.28-1.747-2.742-3.248-5.635-4.48-8.64 0.918-3.642 2.205-7.181 3.84-10.56 4.314-7.462 9.123-14.627 14.4-21.44 7.875-9.629 12.864-21.29 14.394-33.635 1.53-12.342-0.467-24.867-5.754-36.125l-59.84-122.881c-5.635-11.286-14.73-20.477-25.952-26.234-11.226-5.756-23.997-7.776-36.448-5.766-46.072 7.753-89.44 27.015-126.081 56-20.379 16.952-35.847 39.050-44.8 64-9.479 27.726-8.684 57.931 2.24 85.121 25.032 59.536 57.851 115.491 97.6 166.4 28.686 38.71 59.902 75.485 93.441 110.080 34.406 33.296 70.966 64.298 109.44 92.8 51.203 39.821 107.485 72.643 167.36 97.6 27.158 11.066 57.418 11.862 85.12 2.24 24.368-9.203 45.888-24.653 62.4-44.8 29.328-36.544 48.925-79.92 56.96-126.080 1.984-12.49-0.083-25.286-5.901-36.515-5.814-11.229-15.075-20.301-26.419-25.885zM747.798 761.219c-9.187 11.802-21.331 20.963-35.2 26.56-14.051 4.416-29.197 3.85-42.88-1.6-54.202-23.091-105.187-53.101-151.68-89.28-35.83-27.52-69.923-57.232-102.080-88.96-31.334-32.611-60.618-67.13-87.68-103.36-36.201-46.426-66.113-97.427-88.961-151.68-5.832-13.587-6.514-28.829-1.92-42.881 5.595-13.87 14.757-26.014 26.56-35.2 26.691-20.806 57.953-34.956 91.201-41.28l60.8 121.281c0.154 0.954 0.154 1.926 0 2.88-7.933 9.981-14.899 20.698-20.8 32-7.347 12.966-11.101 27.658-10.88 42.56 1.354 13.142 5.853 25.763 13.12 36.8 6.934 11.104 14.522 21.789 22.72 32 16.96 21.12 36.48 42.56 49.6 55.68s34.56 32 55.68 49.6c10.208 8.198 20.893 15.782 32 22.72 11.034 7.264 23.658 11.763 36.8 13.12 14.899 0.218 29.59-3.536 42.56-10.88 11.302-5.904 22.016-12.867 32-20.8 0.851-0.707 1.827-1.251 2.88-1.6l118.72 59.84c-6.509 33.811-21.11 65.542-42.56 92.48z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["phone-in"],"grid":0},"attrs":[{},{}],"properties":{"order":1078,"id":165,"name":"phone-in","prevSize":32,"code":59809},"setIdx":0,"setId":2,"iconIdx":166},{"icon":{"paths":["M649.373 137.372c12.496-12.497 32.758-12.497 45.254 0l73.373 73.373 73.373-73.373c12.499-12.497 32.758-12.497 45.254 0 12.499 12.497 12.499 32.758 0 45.255l-73.373 73.372 73.373 73.373c12.499 12.496 12.499 32.758 0 45.254-12.496 12.496-32.755 12.496-45.254 0l-73.373-73.372-73.373 73.372c-12.496 12.496-32.755 12.496-45.254 0-12.496-12.496-12.496-32.758 0-45.254l73.373-73.373-73.373-73.372c-12.496-12.497-12.496-32.758 0-45.255zM361.062 167.708c28.672-4.835 53.037 12.064 63.712 33.949l61.379 125.818c12.202 25.008 6.147 52.72-8.822 71.546-5.706 7.178-11.002 14.899-14.64 21.968-2.938 5.712-3.834 9.149-4.102 10.563 0.378 0.928 1.494 3.754 4.534 8.877 4.362 7.35 10.749 16.269 18.438 25.952 15.312 19.29 33.782 39.12 46.026 51.363s32.077 30.717 51.363 46.029c9.683 7.69 18.602 14.077 25.955 18.442 5.12 3.040 7.946 4.154 8.874 4.534 1.414-0.272 4.854-1.165 10.563-4.106 7.069-3.638 14.79-8.931 21.968-14.64 18.822-14.97 46.538-21.021 71.546-8.822l125.818 61.379c21.885 10.678 38.784 35.040 33.949 63.715-6.582 39.037-25.811 90.998-58.458 129.338-16.55 19.437-37.696 36.694-63.773 45.856-26.685 9.373-56.266 9.437-87.283-2.141-58.205-21.722-120.33-61.997-171.36-100.16-51.347-38.4-93.795-76.438-112.973-95.616s-57.213-61.622-95.613-112.973c-38.16-51.027-78.435-113.152-100.156-171.357-11.575-31.018-11.513-60.598-2.138-87.284 9.159-26.075 26.417-47.22 45.854-63.771 38.339-32.647 90.303-51.876 129.34-58.458zM368.106 231.463c-30.048 5.715-68.407 20.88-94.89 43.431-13.508 11.503-22.577 23.764-26.964 36.255-4.173 11.878-4.878 26.025 1.716 43.696 18.514 49.61 54.456 105.939 91.45 155.408 36.752 49.146 72.806 89.238 89.613 106.045 16.81 16.81 56.902 52.864 106.048 89.619 49.469 36.995 105.798 72.938 155.408 91.453 17.67 6.592 31.818 5.888 43.696 1.715 12.49-4.387 24.752-13.456 36.256-26.963 22.55-26.483 37.715-64.842 43.43-94.893l-124.064-60.522c-0.077-0.019-0.291-0.048-0.704 0.013-0.768 0.112-1.875 0.515-2.954 1.376-9.171 7.293-20.493 15.264-32.518 21.456-11.296 5.811-26.89 12-43.514 11.245-14.483-0.659-28.454-7.955-37.878-13.549-10.835-6.432-22.275-14.771-33.082-23.35-21.69-17.222-43.363-37.44-56.822-50.899s-33.677-35.133-50.896-56.826c-8.579-10.803-16.918-22.246-23.35-33.078-5.594-9.427-12.886-23.398-13.546-37.878-0.755-16.624 5.434-32.218 11.245-43.514 6.189-12.026 14.163-23.347 21.456-32.518 0.858-1.078 1.261-2.186 1.376-2.954 0.061-0.413 0.032-0.627 0.013-0.704l-60.525-124.063z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["phone-issue"],"grid":0},"attrs":[{}],"properties":{"order":1079,"id":166,"name":"phone-issue","prevSize":32,"code":59835},"setIdx":0,"setId":2,"iconIdx":167},{"icon":{"paths":["M428.346 199.399c17.542-17.543 45.984-17.543 63.53 0 17.542 17.543 17.542 45.986 0 63.53l-43.661 43.659 177.83 177.828 60.339-60.339c24.992-24.995 65.517-24.995 90.509 0l45.254 45.254-331.869 331.869-45.254-45.254c-24.992-24.995-24.992-65.517 0-90.509l60.339-60.339-177.827-177.83-43.661 43.661c-17.543 17.542-45.987 17.542-63.53 0s-17.543-45.987 0-63.53l208.001-207.999zM175.090 362.144c-42.537 42.538-42.537 111.501 0 154.038 42.001 42.003 109.771 42.531 152.42 1.587l87.334 87.334-15.075 15.075c-49.987 49.987-49.987 131.034 0 181.021l67.882 67.882c12.496 12.496 32.758 12.496 45.254 0l167.936-167.933 88.013 92.003c12.218 12.771 32.474 13.219 45.245 1.002 12.771-12.214 13.219-32.47 1.002-45.242l-88.995-93.030 163.923-163.923c12.499-12.496 12.499-32.758 0-45.254l-67.882-67.882c-49.987-49.987-131.030-49.987-181.018 0l-15.907 15.907-87.325-87.323c41.766-42.596 41.51-110.983-0.768-153.262-42.538-42.537-111.504-42.537-154.042 0l-207.998 208z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pin"],"defaultCode":59808,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1080,"name":"pin","prevSize":32,"id":167,"code":59808},"setIdx":0,"setId":2,"iconIdx":168},{"icon":{"paths":["M512.608 128.019c-72.378-1.376-144.906 25.78-199.307 80.524-54.654 54.999-89.301 136.056-89.301 239.464 0 80.234 44.5 174.87 97.546 252.806 53.066 77.965 120.829 148.157 176.141 175.821l15.194 7.6 14.81-8.326c217.158-122.154 272.31-333.882 272.31-427.898 0-101.731-27.923-181.776-80.179-236.932-52.346-55.248-125.296-81.503-207.213-83.060zM288 448.006c0-88.589 29.353-152.745 70.698-194.351 41.6-41.862 97.072-62.705 152.694-61.648 68.992 1.311 124.038 23.054 161.968 63.088 38.019 40.126 62.64 102.649 62.64 192.914 0 74.55-44.691 253.677-224.176 363.030-39.683-25.61-92.186-79.853-137.37-146.237-50.954-74.864-86.454-156.221-86.454-216.797zM544 416c0-17.674-14.326-32-32-32s-32 14.326-32 32c0 17.674 14.326 32 32 32s32-14.326 32-32zM608 416c0 53.021-42.979 96-96 96s-96-42.979-96-96c0-53.021 42.979-96 96-96s96 42.979 96 96z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pin-map"],"defaultCode":59807,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1081,"name":"pin-map","prevSize":32,"id":168,"code":59807},"setIdx":0,"setId":2,"iconIdx":169},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM451.85 357.187l195.254 136.768c14.208 9.949 18.496 30.87 9.581 46.726-2.432 4.326-5.706 7.981-9.581 10.694l-195.254 136.768c-14.208 9.952-32.954 5.165-41.869-10.694-3.037-5.398-4.646-11.642-4.646-18.016v-273.536c0-18.723 13.597-33.898 30.371-33.898 5.709 0 11.306 1.798 16.144 5.187z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["play"],"defaultCode":59811,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1082,"name":"play","prevSize":32,"id":169,"code":59811},"setIdx":0,"setId":2,"iconIdx":170},{"icon":{"paths":["M512 928.003c229.75 0 416-186.25 416-416s-186.25-415.999-416-415.999c-229.75 0-416 186.25-416 415.999s186.25 416 416 416zM451.846 357.19l195.258 136.768c14.205 9.952 18.496 30.874 9.578 46.73-2.429 4.323-5.706 7.978-9.578 10.691l-195.258 136.768c-14.205 9.952-32.95 5.165-41.866-10.691-3.037-5.398-4.646-11.645-4.646-18.019v-273.536c0-18.72 13.597-33.894 30.368-33.894 5.712 0 11.309 1.795 16.144 5.184z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["play-filled"],"defaultCode":59810,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1083,"name":"play-filled","prevSize":32,"id":170,"code":59810},"setIdx":0,"setId":2,"iconIdx":171},{"icon":{"paths":["M325.686 430.88l224.49 224.49-126.118 126.118-224.491-224.49 126.12-126.118zM370.941 385.626l192.115-192.117 224.49 224.491-192.115 192.115-224.49-224.49zM585.683 125.627c-12.496-12.497-32.758-12.497-45.254 0l-408.745 408.745c-12.497 12.496-12.497 32.758 0 45.254l269.746 269.747c5.229 5.229 11.818 8.269 18.63 9.123v0.067h0.57c2.278 0.243 4.576 0.243 6.851 0h440.579c17.674 0 32-14.33 32-32 0-17.674-14.326-32.003-32-32.003h-366.566l353.936-353.933c12.496-12.496 12.496-32.758 0-45.254l-269.747-269.746z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["prune"],"defaultCode":59817,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1084,"name":"prune","prevSize":32,"id":171,"code":59817},"setIdx":0,"setId":2,"iconIdx":172},{"icon":{"paths":["M230.486 636.688c-14.92-9.472-34.694-5.056-44.167 9.862-9.473 14.922-5.057 34.694 9.862 44.166l298.666 189.632c10.47 6.646 23.837 6.646 34.304 0l298.669-189.632c14.918-9.472 19.334-29.245 9.862-44.166-9.475-14.918-29.248-19.334-44.166-9.862l-281.517 178.739-281.514-178.739zM186.319 494.848c9.473-14.922 29.247-19.334 44.167-9.862l281.514 178.739 281.517-178.739c14.918-9.472 34.691-5.059 44.166 9.862 9.472 14.918 5.056 34.694-9.862 44.166l-298.669 189.632c-10.467 6.646-23.834 6.646-34.304 0l-298.666-189.632c-14.92-9.472-19.335-29.248-9.862-44.166zM529.152 143.657l298.669 189.629c9.245 5.872 14.848 16.064 14.848 27.014 0 10.954-5.603 21.146-14.848 27.014l-298.669 189.632c-10.467 6.646-23.834 6.646-34.304 0l-298.666-189.632c-9.246-5.869-14.848-16.061-14.848-27.014 0-10.95 5.602-21.142 14.848-27.014l298.666-189.629c10.47-6.647 23.837-6.647 34.304 0zM273.035 360.301l238.965 151.725 238.966-151.725-238.966-151.724-238.965 151.724z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["queue"],"defaultCode":59818,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1085,"name":"queue","prevSize":32,"id":172,"code":59818},"setIdx":0,"setId":2,"iconIdx":173},{"icon":{"paths":["M161.352 800c-11.706 0-22.477-6.39-28.087-16.666s-5.161-22.79 1.169-32.64l112.304-174.694h-69.387c-17.673 0-32-14.326-32-32v-288c0-17.673 14.327-32 32-32h255.999c17.674 0 32 14.327 32 32v288c0 6.138-1.763 12.144-5.082 17.306l-143.999 224c-5.888 9.158-16.029 14.694-26.918 14.694h-128zM332.269 561.306l-112.304 174.694h51.916l129.469-201.398v-246.602h-191.999v224h96c11.706 0 22.479 6.39 28.085 16.666 5.61 10.275 5.162 22.79-1.168 32.64zM577.35 800c-11.706 0-22.477-6.39-28.086-16.666s-5.162-22.79 1.171-32.64l112.304-174.694h-69.389c-17.67 0-32-14.326-32-32v-288c0-17.673 14.33-32 32-32h256c17.674 0 32 14.327 32 32v288c0 6.138-1.763 12.144-5.082 17.306l-144 224c-5.888 9.158-16.029 14.694-26.918 14.694h-128zM748.269 561.306l-112.304 174.694h51.917l129.469-201.398v-246.602h-192v224h96c11.706 0 22.48 6.39 28.086 16.666 5.61 10.275 5.162 22.79-1.168 32.64z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["quote"],"defaultCode":59819,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1086,"name":"quote","prevSize":32,"id":173,"code":59819},"setIdx":0,"setId":2,"iconIdx":174},{"icon":{"paths":["M800 560c0 176.73-143.27 320-320 320-176.731 0-320-143.27-320-320s143.269-320 320-320v-64c-212.077 0-384 171.923-384 384s171.923 384 384 384c212.077 0 384-171.923 384-384 0-10.778-0.445-21.45-1.315-32h-64.266c1.046 10.525 1.581 21.2 1.581 32zM800 128c0-17.673-14.326-32-32-32s-32 14.327-32 32v112h-112c-17.674 0-32 14.327-32 32s14.326 32 32 32h112v112c0 17.674 14.326 32 32 32s32-14.326 32-32v-112h112c17.674 0 32-14.327 32-32s-14.326-32-32-32h-112v-112zM384 528c35.347 0 64-28.653 64-64s-28.653-64-64-64c-35.347 0-64 28.653-64 64s28.653 64 64 64zM640 464c0 35.347-28.653 64-64 64s-64-28.653-64-64c0-35.347 28.653-64 64-64s64 28.653 64 64zM329.805 605.075c-10.451-14.25-30.477-17.331-44.728-6.88s-17.333 30.477-6.882 44.73c37.658 51.35 77.754 84.624 119.178 102.662 41.741 18.179 82.797 19.99 120.362 11.651 73.469-16.307 132.211-70.87 164.070-114.314 10.451-14.253 7.37-34.278-6.88-44.73-14.253-10.451-34.278-7.37-44.73 6.88-26.81 36.557-73.664 77.994-126.33 89.686-25.501 5.661-52.643 4.474-80.938-7.85-28.608-12.461-60.381-37.187-93.123-81.837z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["reaction-add"],"defaultCode":59820,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1087,"name":"reaction-add","prevSize":32,"id":174,"code":59820},"setIdx":0,"setId":2,"iconIdx":175},{"icon":{"paths":["M832 512c0-176.73-143.27-320-320-320s-320 143.27-320 320c0 176.73 143.27 320 320 320s320-143.27 320-320zM896 512c0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384s384 171.923 384 384zM512 704c-106.038 0-192-85.962-192-192s85.962-192 192-192c106.038 0 192 85.962 192 192s-85.962 192-192 192z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["record"],"defaultCode":59821,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1088,"name":"record","prevSize":32,"id":175,"code":59821},"setIdx":0,"setId":2,"iconIdx":176},{"icon":{"paths":["M896 512h-63.984c0-175.414-145.754-320-328.518-320-115.27 0-215.818 57.513-274.362 144h110.768c17.674 0 32 14.326 32 32s-14.326 32-32 32h-179.904c-17.673 0-32-14.326-32-32v-192c0-17.673 14.327-32 32-32s32 14.327 32 32v102.32c71.751-91.401 184.589-150.32 311.498-150.32 216.781 0 392.502 171.923 392.502 384 0 1.114 0.010 2.227 0 3.338v-3.338z","M127.997 512h63.986c0 175.414 145.751 320 328.519 320 115.27 0 215.818-57.514 274.358-144h-110.768c-17.67 0-32-14.326-32-32s14.33-32 32-32h179.907c17.67 0 32 14.326 32 32v192c0 17.674-14.33 32-32 32-17.674 0-32-14.326-32-32v-102.32c-71.754 91.402-184.592 150.32-311.498 150.32-216.782 0-392.505-171.923-392.505-384 0-1.082-0.009-2.166 0-3.245v3.245z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["refresh"],"defaultCode":59822,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1089,"name":"refresh","prevSize":32,"id":176,"code":59822},"setIdx":0,"setId":2,"iconIdx":177},{"icon":{"paths":["M565.802 233.862l-97.261 97.261h-187.521l-0.456 0.003c-14.696 0.208-28.717 6.186-39.042 16.637l-97.095 96.797-0.048 0.048c-7.165 7.174-12.248 16.157-14.707 25.994-2.459 9.834-2.202 20.154 0.745 29.856 2.946 9.699 8.471 18.419 15.984 25.226 7.506 6.8 16.746 11.443 26.678 13.424l125.65 25.19c5.103 1.024 10.166 0.771 14.859-0.538l162.866 162.867c1.987 1.987 4.17 3.654 6.483 5.011l22.88 114.128c1.981 9.936 6.618 19.146 13.418 26.653 6.81 7.514 15.526 13.037 25.229 15.984s20.019 3.203 29.856 0.746c9.837-2.461 18.819-7.542 25.994-14.707l96.842-97.146c10.451-10.323 16.432-24.346 16.64-39.040l0.003-0.454v-193.802c0-2.893-0.384-5.693-1.104-8.358l77.443-77.44c110.522-110.525 110.474-223.191 103.152-273.759-1.862-13.592-8.122-26.204-17.824-35.908s-22.317-15.962-35.907-17.823c-50.57-7.321-163.235-7.371-273.757 103.151zM611.056 279.117c92.138-92.138 182.144-90.373 218.947-85.121 5.254 36.804 7.018 126.811-85.12 218.948l-245.798 245.802-133.83-133.827 245.802-245.802zM404.541 395.123l-104.222 104.221-100.071-20.064 84.42-84.157h119.873zM542.89 705.446l106.909-106.906v135.61l-84.16 84.422-22.266-111.062c-0.138-0.698-0.301-1.386-0.483-2.064z","M286.325 699.699c15.297-8.851 20.524-28.426 11.674-43.725-8.85-15.296-28.426-20.522-43.723-11.674-49.486 28.63-72.438 77.786-83.25 115.523-5.52 19.267-8.252 36.813-9.619 49.539-0.687 6.397-1.037 11.661-1.217 15.424-0.090 1.885-0.137 3.402-0.162 4.499l-0.023 1.334-0.004 0.422-0.001 0.15v0.083c0 8.486 3.372 16.65 9.372 22.65 6.001 6.003 14.14 9.373 22.628 9.373v-32c0 32 0.037 32 0.048 32h0.208l0.424-0.003 1.333-0.022c1.099-0.026 2.614-0.074 4.498-0.163 3.764-0.179 9.029-0.528 15.425-1.216 12.727-1.366 30.272-4.099 49.54-9.619 37.739-10.813 86.892-33.763 115.523-83.251 8.851-15.296 3.622-34.87-11.674-43.722s-34.874-3.626-43.725 11.674c-16.669 28.813-47.164 45.011-77.751 53.776-6.095 1.744-12.005 3.139-17.55 4.25 1.111-5.546 2.505-11.456 4.251-17.549 8.763-30.589 24.961-61.085 53.775-77.754zM192 831.299l-32-0.022c0 0.013 0 0.022 32 0.022z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["rocket"],"defaultCode":59816,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1090,"id":177,"name":"rocket","prevSize":32,"code":59816},"setIdx":0,"setId":2,"iconIdx":178},{"icon":{"paths":["M713.718 450.362c0-142.689-115.824-258.362-258.701-258.362-142.878 0-258.704 115.673-258.704 258.362 0 142.691 115.826 258.365 258.704 258.365 142.877 0 258.701-115.674 258.701-258.365zM659.302 699.965c-55.645 45.475-126.774 72.762-204.285 72.762-178.271 0-322.788-144.326-322.788-322.365 0-178.035 144.517-322.362 322.788-322.362 178.269 0 322.787 144.327 322.787 322.362 0 77.408-27.318 148.442-72.854 204.013l186.838 186.592c12.608 12.589 12.608 33.002 0 45.59-12.605 12.589-33.043 12.589-45.648 0l-186.838-186.592z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["search"],"defaultCode":59823,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1091,"name":"search","prevSize":32,"id":178,"code":59823},"setIdx":0,"setId":2,"iconIdx":179},{"icon":{"paths":["M878.022 192.974c7.85 9.521 9.526 22.708 4.31 33.891l-298.669 640.002c-5.69 12.195-18.403 19.526-31.811 18.342-13.405-1.184-24.637-10.627-28.106-23.632l-81.619-306.070-285.772-142.886c-11.978-5.987-18.959-18.8-17.498-32.112s11.056-24.307 24.048-27.552l682.665-170.668c11.974-2.993 24.598 1.165 32.451 10.686zM505.821 545.968l57.082 214.051 233.027-499.35-533.58 133.395 203.606 101.802 69.51-52.131c14.141-10.605 34.198-7.741 44.8 6.4 10.605 14.138 7.741 34.195-6.4 44.8l-68.045 51.034z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["send"],"defaultCode":59825,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1092,"name":"send","prevSize":32,"id":179,"code":59825},"setIdx":0,"setId":2,"iconIdx":180},{"icon":{"paths":["M891.494 238.96l-297.475 637.446c-16.854 36.115-69.622 31.459-79.891-7.050l-66-247.498 151.248-189.059-219.994 109.997-226.833-113.418c-35.43-17.715-29.696-69.949 8.733-79.555l681.197-170.3c34.842-8.71 64.202 26.892 49.014 59.436z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["send-filled"],"defaultCode":59824,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1093,"name":"send-filled","prevSize":32,"id":180,"code":59824},"setIdx":0,"setId":2,"iconIdx":181},{"icon":{"paths":["M421.334 256c0-44.183-35.818-80-80-80s-80 35.817-80 80c0 44.183 35.817 80 80 80s80-35.817 80-80zM465.302 288c-14.211 55.206-64.326 96-123.968 96-59.643 0-109.758-40.794-123.968-96h-89.367c-17.673 0-32-14.327-32-32s14.327-32 32-32h89.367c14.209-55.207 64.324-96 123.968-96 59.642 0 109.757 40.793 123.968 96h430.698c17.674 0 32 14.327 32 32s-14.326 32-32 32h-430.698zM96 768c0-17.674 14.327-32 32-32h89.367c14.209-55.206 64.324-96 123.968-96 60.781 0 111.67 42.365 124.742 99.181 4.208-2.038 8.934-3.181 13.923-3.181h416c17.674 0 32 14.326 32 32s-14.326 32-32 32h-416c-4.989 0-9.715-1.142-13.923-3.181-13.072 56.816-63.962 99.181-124.742 99.181-59.643 0-109.758-40.794-123.968-96h-89.367c-17.673 0-32-14.326-32-32zM341.334 848c44.182 0 80-35.818 80-80s-35.818-80-80-80c-44.183 0-80 35.818-80 80s35.817 80 80 80zM796.029 543.757c-14.122 55.331-64.298 96.243-124.029 96.243s-109.904-40.912-124.029-96.243c-1.302 0.16-2.627 0.243-3.971 0.243h-416c-17.673 0-32-14.326-32-32s14.327-32 32-32h416c1.344 0 2.669 0.083 3.971 0.243 14.125-55.331 64.298-96.243 124.029-96.243s109.907 40.912 124.029 96.243c1.302-0.16 2.627-0.243 3.971-0.243h96c17.674 0 32 14.326 32 32s-14.326 32-32 32h-96c-1.344 0-2.669-0.083-3.971-0.243zM752 512c0-44.182-35.818-80-80-80s-80 35.818-80 80c0 44.182 35.818 80 80 80s80-35.818 80-80z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["settings"],"defaultCode":59826,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1094,"name":"settings","prevSize":32,"id":181,"code":59826},"setIdx":0,"setId":2,"iconIdx":182},{"icon":{"paths":["M690.176 301.708c11.645-11.977 11.645-31.396 0-43.374l-149.091-153.351c-11.645-11.977-30.525-11.977-42.17 0l-149.091 153.351c-11.645 11.977-11.645 31.397 0 43.374s30.525 11.978 42.17 0l98.189-100.993v401.343c0 16.938 13.35 30.669 29.818 30.669s29.818-13.731 29.818-30.669v-401.343l98.189 100.993c11.645 11.978 30.525 11.978 42.17 0z","M221.818 379.274h149.091v59.635h-119.272v387.635h536.728v-387.635h-119.274v-59.635h149.091c16.467 0 29.818 13.35 29.818 29.818v447.274c0 16.467-13.35 29.818-29.818 29.818h-596.364c-16.468 0-29.818-13.35-29.818-29.818v-447.274c0-16.467 13.35-29.818 29.818-29.818z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["share"],"defaultCode":59827,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1095,"name":"share","prevSize":32,"id":182,"code":59827},"setIdx":0,"setId":2,"iconIdx":183},{"icon":{"paths":["M502.627 142.69c12.915-3.408 26.509-3.289 39.363 0.345l245.194 69.317c29.165 8.245 51.254 33.818 53.504 65.14 24.506 341.145-184.394 520.422-272.611 580.214-33.053 22.403-75.28 22.474-108.416 0.259-88.758-59.504-300.1-238.589-276.51-579.794 2.205-31.89 24.96-57.772 54.753-65.633l264.724-69.849zM524.579 204.621c-1.837-0.519-3.779-0.536-5.622-0.049l-264.725 69.849c-4.4 1.161-6.999 4.775-7.233 8.165-21.305 308.166 168.214 468.531 248.301 522.218 11.507 7.715 25.434 7.677 36.87-0.077 79.379-53.798 266.835-214.288 244.685-522.649-0.243-3.358-2.787-6.925-7.082-8.139l-245.194-69.317z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["set-as-moderator"],"defaultCode":59661,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1096,"name":"shield","prevSize":32,"id":183,"code":59661},"setIdx":0,"setId":2,"iconIdx":184},{"icon":{"paths":["M513.302 142.705c12.915-3.408 26.509-3.289 39.36 0.345l245.197 69.318c29.165 8.245 51.254 33.818 53.504 65.14 24.506 341.142-184.397 520.422-272.611 580.214-33.053 22.403-75.28 22.47-108.416 0.259-88.762-59.504-300.101-238.589-276.511-579.794 2.205-31.89 24.96-57.772 54.753-65.633l264.725-69.849zM535.251 204.637c-1.834-0.519-3.776-0.536-5.622-0.050l-264.723 69.849c-4.4 1.161-6.999 4.775-7.234 8.164-21.305 308.164 168.216 468.532 248.299 522.218 11.507 7.715 25.434 7.677 36.874-0.077 79.379-53.798 266.832-214.288 244.682-522.65-0.24-3.358-2.784-6.925-7.078-8.139l-245.197-69.317z","M490.672 337.334c-19.76 4.672-47.245 12.31-81.149 24.554 20.81 108.771 53.219 187.014 81.149 238.832v-263.386zM492.867 271.316c33.77-6.898 61.805 19.742 61.805 51.125v360.963c0 17.024-10.333 31.747-25.642 37.52-15.67 5.91-33.779 1.331-44.861-12.675-32.656-41.267-106.323-152.95-141.19-354.563-3.242-18.746 7.066-37.695 25.328-44.726 56.186-21.63 99.094-32.442 124.56-37.644z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["shield"],"defaultCode":59829,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1097,"name":"shield-alt","prevSize":32,"id":184,"code":59829},"setIdx":0,"setId":2,"iconIdx":185},{"icon":{"paths":["M664.083 405.072c11.638-13.299 10.288-33.517-3.011-45.155s-33.517-10.288-45.155 3.011l-125.251 143.142-39.917-45.619c-11.638-13.299-31.853-14.646-45.155-3.011-13.299 11.638-14.646 31.856-3.008 45.155l64 73.142c6.077 6.944 14.854 10.928 24.080 10.928 9.229 0 18.006-3.984 24.083-10.928l149.334-170.666z","M541.99 143.050c-12.854-3.634-26.448-3.753-39.363-0.345l-264.724 69.849c-29.793 7.861-52.548 33.743-54.753 65.633-23.589 341.205 187.752 520.29 276.51 579.794 33.136 22.211 75.363 22.144 108.416-0.259 88.218-59.792 297.117-239.072 272.611-580.214-2.25-31.321-24.339-56.895-53.504-65.14l-245.194-69.318zM518.957 204.587c1.843-0.487 3.786-0.47 5.622 0.049l245.194 69.318c4.294 1.214 6.838 4.781 7.082 8.139 22.15 308.362-165.306 468.851-244.685 522.65-11.437 7.754-25.363 7.792-36.87 0.077-80.086-53.686-269.606-214.054-248.301-522.218 0.234-3.389 2.833-7.004 7.233-8.164l264.725-69.849z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["shield-check"],"defaultCode":59828,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1098,"name":"shield-check","prevSize":32,"id":185,"code":59828},"setIdx":0,"setId":2,"iconIdx":186},{"icon":{"paths":["M778.64 213.336c-17.674 0-32 14.327-32 32v533.333c0 17.674 14.326 32 32 32s32-14.326 32-32v-533.333c0-17.673-14.326-32-32-32z","M600.87 341.334c-17.674 0-32 14.33-32 32v405.334c0 17.674 14.326 32 32 32s32-14.326 32-32v-405.334c0-17.67-14.326-32-32-32z","M423.104 810.669c-17.674 0-32-14.326-32-32v-277.334c0-17.67 14.326-32 32-32 17.67 0 32 14.33 32 32v277.334c0 17.674-14.33 32-32 32z","M245.333 597.334c-17.673 0-32 14.33-32 32v149.334c0 17.674 14.327 32 32 32s32-14.326 32-32v-149.334c0-17.67-14.327-32-32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["signal"],"defaultCode":59830,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1099,"name":"signal","prevSize":32,"id":186,"code":59830},"setIdx":0,"setId":2,"iconIdx":187},{"icon":{"paths":["M772.986 470.432h-40.186c-1.104-12.381-10.090-19.757-26.454-19.757-16.278 0-24.416 6.867-24.502 16.365-0.339 10.342 9.667 15.6 25.437 18.992l14.922 3.389c34.253 7.546 52.989 24.502 53.158 52.227-0.17 32.982-25.773 52.566-69.014 52.566-43.661 0-71.894-19.414-72.403-60.026h40.186c0.934 16.701 13.142 25.35 31.709 25.35 16.874 0 26.794-7.376 26.963-17.974-0.17-9.75-8.733-14.922-27.811-19.331l-18.141-4.24c-30.016-6.867-48.496-21.706-48.413-48.070-0.253-32.304 28.317-53.923 67.997-53.923 40.355 0 66.214 21.958 66.554 54.432z","M354.858 470.432h40.186c-0.339-32.474-26.198-54.432-66.554-54.432-39.679 0-68.251 21.619-67.996 53.923-0.085 26.365 18.398 41.203 48.411 48.070l18.145 4.24c19.075 4.41 27.638 9.581 27.808 19.331-0.17 10.598-10.090 17.974-26.96 17.974-18.569 0-30.778-8.65-31.71-25.35h-40.187c0.509 40.611 28.741 60.026 72.403 60.026 43.242 0 68.845-19.584 69.014-52.566-0.17-27.725-18.906-44.682-53.158-52.227l-14.922-3.389c-15.77-3.392-25.774-8.65-25.435-18.992 0.085-9.498 8.224-16.365 24.501-16.365 16.365 0 25.35 7.376 26.454 19.757z","M418.614 418.374v173.635h40.864v-107.251h1.443l41.712 106.15h26.112l41.715-105.555h1.44v106.656h40.867v-173.635h-51.974l-44.086 107.504h-2.035l-44.086-107.504h-51.971z","M864 192c16.973 0 33.251 6.743 45.254 18.745s18.746 28.281 18.746 45.255v635.296c0 12.186-3.478 24.122-10.032 34.397-6.55 10.278-15.898 18.474-26.947 23.619-11.046 5.146-23.334 7.027-35.418 5.43-12.083-1.6-23.456-6.614-32.787-14.458l-128.81-108.285h-534.006c-16.974 0-33.252-6.742-45.255-18.746s-18.745-28.282-18.745-45.254v-512c0-16.974 6.743-33.252 18.745-45.255s28.281-18.745 45.255-18.745h704zM864 256h-704v512h534.006c15.066 0 29.648 5.315 41.181 15.011l128.813 108.285v-635.296z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["sms"],"defaultCode":59772,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1100,"name":"sms","prevSize":32,"id":187,"code":59772},"setIdx":0,"setId":2,"iconIdx":188},{"icon":{"paths":["M919.258 667.229c12.605-12.253 12.877-32.394 0.605-44.982-12.269-12.589-32.435-12.858-45.040-0.605l-106.112 103.155v-500.8c0-17.568-14.259-31.81-31.853-31.81-17.59 0-31.85 14.242-31.85 31.81v500.8l-106.115-103.155c-12.605-12.253-32.768-11.984-45.040 0.605-12.269 12.589-11.997 32.73 0.608 44.982l160.179 155.718c12.368 12.019 32.070 12.019 44.435 0l160.182-155.718zM560.659 333.667c17.59 0 31.85-14.243 31.85-31.811s-14.259-31.809-31.85-31.809h-432.49c-17.591 0-31.852 14.242-31.852 31.809s14.26 31.811 31.852 31.811h432.49zM464.55 536.099c17.59 0 31.85-14.243 31.85-31.811 0-17.565-14.259-31.808-31.85-31.808h-336.381c-17.591 0-31.852 14.24-31.852 31.808s14.26 31.811 31.852 31.811h336.381zM384.458 722.96c17.594 0 31.853-14.24 31.853-31.808s-14.259-31.811-31.853-31.811h-256.289c-17.591 0-31.852 14.243-31.852 31.811s14.26 31.808 31.852 31.808h256.289z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["sort"],"defaultCode":59832,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1101,"name":"sort","prevSize":32,"id":188,"code":59832},"setIdx":0,"setId":2,"iconIdx":189},{"icon":{"paths":["M289.362 192c13.364 0 25.321 8.305 29.987 20.829l96.001 257.699c6.17 16.56-2.256 34.986-18.816 41.155-16.563 6.17-34.989-2.253-41.158-18.816l-20.477-54.963h-91.074l-20.476 54.963c-6.17 16.563-24.597 24.986-41.158 18.816s-24.986-24.595-18.816-41.155l96-257.699c4.666-12.524 16.622-20.829 29.987-20.829zM311.058 373.904l-21.695-58.238-21.695 58.238h43.391z","M522.131 626.435c-12.154 12.829-11.606 33.082 1.222 45.238l160 151.587c12.342 11.693 31.674 11.693 44.016 0l160-151.587c12.832-12.157 13.376-32.41 1.222-45.238s-32.41-13.376-45.238-1.222l-105.99 100.419v-501.632c0-17.673-14.326-32-32-32s-32 14.327-32 32v501.632l-105.994-100.419c-12.829-12.154-33.082-11.606-45.238 1.222z","M193.362 570.947c-17.673 0-32 14.326-32 32 0 17.67 14.327 32 32 32h116.145l-139.065 142.73c-8.979 9.216-11.565 22.915-6.564 34.771 5.001 11.853 16.617 19.562 29.484 19.562h192.001c17.674 0 32-14.326 32-32s-14.326-32-32-32h-116.146l139.064-142.733c8.979-9.216 11.565-22.915 6.563-34.768-4.998-11.856-16.614-19.562-29.482-19.562h-192.001z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["sort-az"],"defaultCode":59831,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1102,"name":"sort-az","prevSize":32,"id":189,"code":59831},"setIdx":0,"setId":2,"iconIdx":190},{"icon":{"paths":["M472.618 173.508c18.166-58.554 100.454-60.461 121.322-2.812l69.821 192.91h195.44c57.872 0 86.026 70.611 43.994 110.336l-147.888 139.782 53.386 217.363c14.17 57.696-51.251 101.805-99.536 67.11l-177.741-127.709-177.741 127.709c-48.283 34.691-113.703-9.414-99.533-67.11l53.209-216.64-157.591-139.024c-44.179-38.973-16.577-111.818 42.37-111.818h221.513l58.976-190.098zM603.574 385.334l-69.824-192.91-58.976 190.098c-8.304 26.758-33.085 45.002-61.133 45.002h-221.513l157.59 139.021c17.837 15.731 25.456 40.048 19.789 63.13l-53.209 216.643 177.74-127.709c22.33-16.045 52.426-16.045 74.755 0l177.738 127.709-53.386-217.363c-5.478-22.317 1.456-45.856 18.166-61.648l147.888-139.782h-195.44c-26.957 0-51.024-16.87-60.186-42.189z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["star"],"defaultCode":59834,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1103,"name":"star","prevSize":32,"id":190,"code":59834},"setIdx":0,"setId":2,"iconIdx":191},{"icon":{"paths":["M593.939 170.244c-20.867-57.726-103.155-55.816-121.322 2.815l-58.976 190.348h-221.513c-58.947 0-86.549 72.944-42.37 111.968l157.591 139.206-53.209 216.928c-14.17 57.77 51.25 101.936 99.533 67.197l177.741-127.875 177.741 127.875c48.285 34.739 113.706-9.427 99.536-67.197l-53.386-217.651 147.888-139.968c42.032-39.779 13.878-110.483-43.99-110.483h-195.443l-69.821-193.164z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["star-filled"],"defaultCode":59833,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1104,"name":"star-filled","prevSize":32,"id":191,"code":59833},"setIdx":0,"setId":2,"iconIdx":192},{"icon":{"paths":["M512 896c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM565.334 288c0-29.455-23.878-53.333-53.334-53.333s-53.334 23.878-53.334 53.333v249.632l180.016 144.013c23.002 18.403 56.563 14.672 74.963-8.326 18.403-23.002 14.672-56.563-8.326-74.963l-139.984-111.987v-198.368z"],"attrs":[{"fill":"rgb(243, 190, 8)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":3}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":2}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":3}]},"tags":["status-away"],"defaultCode":59741,"grid":0},"attrs":[{"fill":"rgb(243, 190, 8)"}],"properties":{"order":1105,"name":"status-away","prevSize":32,"id":192,"code":59741},"setIdx":0,"setId":2,"iconIdx":193},{"icon":{"paths":["M512 896c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM384 458.666c-29.456 0-53.334 23.875-53.334 53.331s23.878 53.334 53.334 53.334h256c29.456 0 53.334-23.878 53.334-53.334s-23.878-53.331-53.334-53.331h-256z"],"attrs":[{"fill":"rgb(245, 69, 92)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":6}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":6}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":8}]},"tags":["status-busy"],"defaultCode":59742,"grid":0},"attrs":[{"fill":"rgb(245, 69, 92)"}],"properties":{"order":1106,"name":"status-busy","prevSize":32,"id":193,"code":59742},"setIdx":0,"setId":2,"iconIdx":194},{"icon":{"paths":["M512 896c212.077 0 384-171.923 384-384s-171.923-384-384-384c-212.077 0-384 171.923-384 384s171.923 384 384 384zM554.774 298.667v298.668c0 23.562-19.101 42.666-42.666 42.666s-42.669-19.104-42.669-42.666v-298.668c0-23.564 19.104-42.667 42.669-42.667s42.666 19.102 42.666 42.667zM554.774 725.334c0 23.562-19.101 42.666-42.666 42.666s-42.669-19.104-42.669-42.666c0-23.565 19.104-42.669 42.669-42.669s42.666 19.104 42.666 42.669z"],"attrs":[{"fill":"rgb(243, 140, 57)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":5}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":7}]},"tags":["status-disabled"],"defaultCode":59837,"grid":0},"attrs":[{"fill":"rgb(243, 140, 57)"}],"properties":{"order":1107,"id":194,"name":"status-disabled","prevSize":32,"code":59837},"setIdx":0,"setId":2,"iconIdx":195},{"icon":{"paths":["M888.691 586.941l-125.568-24.838c3.187-16.102 4.877-32.842 4.877-50.102s-1.69-34-4.877-50.102l125.568-24.838c4.794 24.237 7.309 49.296 7.309 74.941s-2.515 50.704-7.309 74.941zM831.322 298.644l-106.365 71.209c-18.726-27.971-42.838-52.083-70.81-70.81l71.21-106.364c41.875 28.035 77.93 64.089 105.965 105.965zM586.941 135.309l-24.838 125.566c-16.102-3.185-32.842-4.876-50.102-4.876s-34 1.69-50.102 4.876l-24.838-125.566c24.237-4.795 49.296-7.309 74.941-7.309s50.704 2.514 74.941 7.309zM298.644 192.679l71.209 106.364c-27.971 18.727-52.083 42.839-70.81 70.81l-106.364-71.209c28.035-41.876 64.089-77.93 105.965-105.964zM135.309 437.059c-4.795 24.237-7.309 49.296-7.309 74.941s2.514 50.704 7.309 74.941l125.566-24.838c-3.185-16.102-4.876-32.842-4.876-50.102s1.69-34 4.876-50.102l-125.566-24.838zM192.679 725.357l106.364-71.21c18.727 27.971 42.839 52.083 70.81 70.81l-71.209 106.365c-41.876-28.035-77.93-64.090-105.964-105.965zM437.059 888.691l24.838-125.568c16.102 3.187 32.842 4.877 50.102 4.877s34-1.69 50.102-4.877l24.838 125.568c-24.237 4.794-49.296 7.309-74.941 7.309s-50.704-2.515-74.941-7.309zM725.357 831.322l-71.21-106.365c27.971-18.726 52.083-42.838 70.81-70.81l106.365 71.21c-28.035 41.875-64.090 77.93-105.965 105.965z"],"attrs":[{"fill":"rgb(158, 162, 168)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":9}]},"tags":["status-loading"],"defaultCode":59743,"grid":0},"attrs":[{"fill":"rgb(158, 162, 168)"}],"properties":{"order":1108,"name":"status-loading","prevSize":32,"id":195,"code":59743},"setIdx":0,"setId":2,"iconIdx":196},{"icon":{"paths":["M512 789.334c-153.168 0-277.333-124.166-277.333-277.334s124.165-277.333 277.333-277.333c153.168 0 277.334 124.165 277.334 277.333s-124.166 277.334-277.334 277.334zM512 896c212.077 0 384-171.923 384-384s-171.923-384-384-384c-212.077 0-384 171.923-384 384s171.923 384 384 384z"],"attrs":[{"fill":"rgb(158, 162, 168)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":9}]},"tags":["status-offline"],"defaultCode":59744,"grid":0},"attrs":[{"fill":"rgb(158, 162, 168)"}],"properties":{"order":1109,"name":"status-offline","prevSize":32,"id":196,"code":59744},"setIdx":0,"setId":2,"iconIdx":197},{"icon":{"paths":["M896 512c0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384s384 171.923 384 384z"],"attrs":[{"fill":"rgb(45, 224, 165)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":4}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":3}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":5}]},"tags":["status-online"],"defaultCode":59745,"grid":0},"attrs":[{"fill":"rgb(45, 224, 165)"}],"properties":{"order":1110,"name":"status-online","prevSize":32,"id":197,"code":59745},"setIdx":0,"setId":2,"iconIdx":198},{"icon":{"paths":["M511.997 224c-114.163 0-179.555 64.46-179.555 128v0.253c-0.061 7.453 1.072 14.867 3.354 21.962 5.411 16.826-3.84 34.851-20.666 40.259-16.825 5.411-34.85-3.84-40.261-20.666-4.357-13.546-6.527-27.702-6.428-41.933 0.081-113.124 110.343-191.875 243.556-191.875 103.597 0 190.97 46.311 226.886 120.071 7.738 15.889 1.13 35.043-14.762 42.78-15.888 7.738-35.043 1.13-42.781-14.761-22.259-45.713-82.714-84.090-169.344-84.090z","M128 512c0-17.674 14.327-32 32-32h392.893c0.467-0.010 0.938-0.010 1.408 0h309.699c17.674 0 32 14.326 32 32s-14.326 32-32 32h-160.432c38.198 29.328 64.432 70.438 64.432 128.003 0 57.2-32.512 105.965-79.008 139.178-46.557 33.254-109.235 52.822-176.992 52.822s-130.435-19.568-176.992-52.822c-46.495-33.213-79.008-81.978-79.008-139.178 0-17.674 14.327-32 32-32s32 14.326 32 32c0 31.168 17.632 62.4 52.208 87.098 34.515 24.653 83.837 40.902 139.792 40.902s105.277-16.25 139.792-40.902c34.576-24.698 52.208-55.93 52.208-87.098 0-35.558-15.216-59.581-42.134-79.283-27.824-20.368-67.005-35.082-112.88-48.72h-388.986c-17.673 0-32-14.326-32-32z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{},{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["strike"],"defaultCode":59846,"grid":0},"attrs":[{},{}],"properties":{"order":1111,"name":"strike","prevSize":32,"id":198,"code":59846},"setIdx":0,"setId":2,"iconIdx":199},{"icon":{"paths":["M481.35 117.336c0-17.673 14.326-32 32-32s32 14.327 32 32v106.667c0 17.673-14.326 32-32 32s-32-14.327-32-32v-106.667zM771.392 214.631c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-75.411 75.413c-12.499 12.496-32.758 12.496-45.254 0-12.499-12.496-12.499-32.759 0-45.255l75.411-75.412zM336.73 694.63c-12.499-12.496-32.759-12.496-45.256 0l-75.495 75.498c-12.497 12.496-12.497 32.755 0 45.254 12.497 12.496 32.758 12.496 45.255 0l75.496-75.498c12.496-12.496 12.496-32.755 0-45.254zM481.35 800.003c0-17.674 14.326-32 32-32s32 14.326 32 32v106.669c0 17.67-14.326 32-32 32s-32-14.33-32-32v-106.669zM213.352 212.001c-12.497 12.497-12.497 32.758 0 45.255l75.349 75.348c12.497 12.496 32.758 12.496 45.254 0 12.499-12.496 12.496-32.757 0-45.254l-75.348-75.349c-12.497-12.497-32.758-12.497-45.255 0zM695.978 739.885c-12.496-12.496-12.496-32.758 0-45.254 12.499-12.496 32.758-12.496 45.254 0l75.331 75.328c12.496 12.496 12.496 32.758 0 45.254-12.499 12.496-32.758 12.496-45.258 0l-75.328-75.328zM87.751 512.003c0 17.674 14.327 32 32 32h106.667c17.673 0 32-14.326 32-32s-14.327-32-32-32h-106.667c-17.673 0-32 14.326-32 32zM801.35 544.003c-17.674 0-32-14.326-32-32s14.326-32 32-32h106.669c17.67 0 32 14.326 32 32s-14.33 32-32 32h-106.669zM668.17 512c0-85.504-69.315-154.816-154.819-154.816-85.507 0-154.819 69.312-154.819 154.816 0 85.507 69.312 154.819 154.819 154.819 85.504 0 154.819-69.312 154.819-154.819zM726.682 512c0 117.821-95.51 213.334-213.331 213.334s-213.335-95.514-213.335-213.334c0-117.821 95.514-213.332 213.335-213.332s213.331 95.511 213.331 213.332z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["sun"],"defaultCode":59847,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1112,"name":"sun","prevSize":32,"id":199,"code":59847},"setIdx":0,"setId":2,"iconIdx":200},{"icon":{"paths":["M930.704 512c0 229.75-186.25 416-416 416s-415.999-186.25-415.999-416c0-229.75 186.25-416 415.999-416s416 186.25 416 416zM570.49 859.603l-41.827-156.102c-4.611 0.33-9.264 0.499-13.958 0.499-4.57 0-9.101-0.16-13.594-0.474l-41.837 156.134c18.058 2.854 36.573 4.339 55.43 4.339 18.986 0 37.616-1.504 55.786-4.397zM438.893 688.451c-47.549-20.454-85.181-59.571-103.674-108.125l-155.029 41.539c33.968 103.485 114.617 185.805 217.045 222.058l41.658-155.472zM162.705 512c0 16.090 1.080 31.926 3.17 47.443l156.906-42.042c-0.051-1.795-0.077-3.594-0.077-5.402 0-4.909 0.186-9.776 0.547-14.595l-156.051-41.814c-2.958 18.368-4.496 37.21-4.496 56.41zM396.31 180.407c-99.16 35.408-177.786 114.033-213.196 213.19l155.535 41.677c19.357-44.352 54.982-79.978 99.334-99.331l-41.674-155.536zM514.704 160c-19.197 0-38.035 1.537-56.4 4.494l41.814 156.053c4.813-0.362 9.68-0.547 14.586-0.547 5.030 0 10.019 0.192 14.95 0.573l41.808-156.021c-18.477-2.995-37.437-4.552-56.758-4.552zM632.512 843.802c102.659-36.451 183.392-119.194 217.094-223.12l-154.973-41.526c-18.291 48.982-56.010 88.493-103.786 109.155l41.664 155.491zM863.699 558.198c1.984-15.117 3.005-30.538 3.005-46.198 0-18.771-1.469-37.197-4.298-55.171l-156.157 41.84c0.301 4.406 0.454 8.851 0.454 13.331 0 1.376-0.013 2.752-0.042 4.122l157.037 42.077zM846.714 394.774c-35.165-99.6-113.885-178.641-213.277-214.247l-41.68 155.559c44.582 19.555 80.314 55.565 99.504 100.342l155.453-41.654zM642.704 512c0-70.691-57.306-128-128-128-70.691 0-128 57.309-128 128s57.309 128 128 128c70.694 0 128-57.309 128-128z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["support"],"defaultCode":59848,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1113,"name":"support","prevSize":32,"id":200,"code":59848},"setIdx":0,"setId":2,"iconIdx":201},{"icon":{"paths":["M368 412.982c-53.592 0-96-42.877-96-94.491 0-51.616 42.408-94.491 96-94.491 53.594 0 96 42.876 96 94.491 0 51.614-42.406 94.491-96 94.491zM368 476.982c88.365 0 160-70.96 160-158.491s-71.635-158.491-160-158.491c-88.365 0-160 70.959-160 158.491s71.635 158.491 160 158.491zM713.6 397.133c-35.92 0-64-28.685-64-62.794s28.080-62.792 64-62.792c35.92 0 64 28.684 64 62.792s-28.080 62.794-64 62.794zM713.6 461.133c70.691 0 128-56.768 128-126.794s-57.309-126.792-128-126.792c-70.691 0-128 56.767-128 126.792s57.309 126.794 128 126.794zM197.459 527.267c27.344-8.707 56.67-9.242 84.319-1.539l48.491 13.51c24.205 6.742 49.882 6.275 73.824-1.347l30.099-9.584c29.475-9.386 61.085-9.962 90.89-1.658 67.962 18.934 114.918 80.333 114.918 150.269v91.987c0 52.518-42.979 95.094-96 95.094h-352c-53.019 0-96-42.576-96-95.094v-103.766c0-62.909 40.999-118.621 101.459-137.872zM264.451 586.758c-15.545-4.333-32.034-4.032-47.407 0.864-33.993 10.822-57.044 42.147-57.044 77.517v103.766c0 17.507 14.327 31.699 32 31.699h352c17.674 0 32-14.192 32-31.699v-91.987c0-41.533-27.885-77.997-68.246-89.242-17.699-4.931-36.474-4.589-53.978 0.986l-30.099 9.584c-35.91 11.434-74.426 12.138-110.737 2.019l-48.489-13.507zM691.2 778.717h140.8c53.021 0 96-42.979 96-96v-30.611c0-56.877-38.614-106.49-93.747-120.454-21.398-5.418-43.853-5.040-65.056 1.098l-16.4 4.746c-21.843 6.323-44.973 6.714-67.018 1.13l-29.805-7.549c-19.907-5.043-40.797-4.691-60.522 1.018-1.066 0.31-2.122 0.634-3.174 0.97 10.71 4.048 20.896 9.539 30.253 16.374l2.429 1.776 15.040 13.206c9.939 8.726 18.141 19.248 24.182 31.014l2.208 4.301 3.677 0.931c33.062 8.374 67.76 7.789 100.525-1.693l16.4-4.749c10.282-2.976 21.171-3.158 31.546-0.531 26.736 6.771 45.462 30.832 45.462 58.413v30.611c0 17.674-14.326 32-32 32h-140.8v64z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["team"],"defaultCode":59849,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1114,"name":"team","prevSize":32,"id":201,"code":59849},"setIdx":0,"setId":2,"iconIdx":202},{"icon":{"paths":["M281.184 336c17.673 0 32-14.326 32-32s-14.327-32-32-32c-17.673 0-32 14.327-32 32s14.327 32 32 32zM281.184 400c-53.020 0-96-42.979-96-96 0-53.019 42.98-96 96-96 53.018 0 96 42.981 96 96 0 53.021-42.982 96-96 96zM576 320c0-26.51-21.491-48-48-48s-48 21.49-48 48c0 26.509 21.491 48 48 48s48-21.491 48-48zM640 320c0 61.856-50.144 112-112 112s-112-50.144-112-112c0-61.856 50.144-112 112-112s112 50.144 112 112zM477.901 478.515c-28.56-10.957-60.291-10.211-88.307 2.067-42.282 18.534-69.594 60.326-69.594 106.49v132.928c0 53.021 42.979 96 96 96h224c53.021 0 96-42.979 96-96v-125.062c0-51.162-31.536-97.034-79.306-115.354-30.352-11.642-64.067-10.851-93.84 2.198l-2.070 0.909c-21.523 9.434-45.901 10.006-67.843 1.59l-15.040-5.766zM415.286 539.2c12.595-5.52 26.858-5.856 39.699-0.931l15.040 5.77c37.664 14.445 79.504 13.462 116.451-2.73l2.070-0.909c14.349-6.288 30.602-6.669 45.229-1.059 23.024 8.829 38.224 30.938 38.224 55.597v125.062c0 17.674-14.326 32-32 32h-224c-17.674 0-32-14.326-32-32v-132.928c0-20.752 12.278-39.539 31.286-47.872zM768 336c-17.674 0-32-14.326-32-32s14.326-32 32-32c17.674 0 32 14.327 32 32s-14.326 32-32 32zM768 400c53.021 0 96-42.979 96-96 0-53.019-42.979-96-96-96s-96 42.981-96 96c0 53.021 42.979 96 96 96zM840.714 681.766h-72.714v-64h72.714c17.674 0 32-14.326 32-32v-44.688c0-15.050-9.664-28.394-23.958-33.091-7.536-2.474-15.69-2.304-23.114 0.483l-4.554 1.709c-19.77 7.421-40.89 9.978-61.619 7.632-12.438-31.683-37.722-57.549-70.774-70.227-1.754-0.672-3.52-1.302-5.296-1.894 18.058-5.312 37.36-5.040 55.344 0.867l14.182 4.659c14.886 4.893 30.998 4.554 45.667-0.954l4.554-1.709c21.069-7.91 44.205-8.394 65.581-1.37 40.566 13.325 67.987 51.197 67.987 93.894v44.688c0 53.021-42.982 96-96 96zM625.267 624h-0.797c0.259 0.598 0.525 1.194 0.797 1.786v-1.786zM357.594 448.582c2.528-1.107 5.088-2.122 7.674-3.043-17.907-5.155-37.014-4.832-54.824 1.018l-14.183 4.659c-14.887 4.893-30.998 4.554-45.668-0.954l-4.554-1.709c-21.067-7.91-44.203-8.394-65.581-1.37-40.565 13.325-67.986 51.197-67.986 93.894v44.688c0 53.021 42.981 96 96 96h79.53v-64h-79.53c-17.673 0-32-14.326-32-32v-44.688c0-15.050 9.664-28.394 23.96-33.091 7.534-2.474 15.688-2.304 23.112 0.483l4.554 1.709c21.238 7.974 44.041 10.333 66.238 7.027 10.398-30.173 32.994-55.357 63.259-68.624zM423.917 624h0.797c-0.259 0.598-0.525 1.194-0.797 1.786v-1.786z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["teams"],"defaultCode":59751,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1115,"name":"teams","prevSize":32,"id":202,"code":59751},"setIdx":0,"setId":2,"iconIdx":203},{"icon":{"paths":["M631.997 256h24v-56c0-57.437 46.563-104 104-104 57.44 0 104 46.562 104 104v56h24c17.674 0 32 14.327 32 32v192c0 17.674-14.326 32-32 32h-256c-17.67 0-32-14.326-32-32v-192c0-17.673 14.33-32 32-32zM759.997 160c-22.090 0-40 17.908-40 40v55.238h80v-55.238c0-22.092-17.907-40-40-40z","M527.997 224c10.096 0 19.882 1.336 29.184 3.84-13.251 16.46-21.184 37.383-21.184 60.16v0.664c-2.602-0.436-5.274-0.664-8-0.664-26.509 0-48 21.49-48 48s21.491 48 48 48c2.726 0 5.398-0.227 8-0.662v64.381c-2.64 0.186-5.309 0.282-8 0.282-61.856 0-112-50.144-112-112s50.144-112 112-112z","M492.941 500.282c14.883 5.709 30.883 7.283 46.355 4.758 6.182 22.938 20.646 42.474 39.987 55.206-35.123 13.318-74.019 13.309-109.261-0.208l-15.040-5.77c-12.838-4.925-27.104-4.589-39.699 0.931-19.008 8.333-31.286 27.12-31.286 47.872v132.928c0 17.674 14.33 32 32 32h224c17.674 0 32-14.326 32-32v-125.062c0-12.842-4.122-24.995-11.325-34.938h70.291c3.29 11.162 5.034 22.902 5.034 34.938v125.062c0 53.021-42.979 96-96 96h-224c-53.018 0-95.999-42.979-95.999-96v-132.928c0-46.163 27.311-87.955 69.592-106.49 28.019-12.278 59.747-13.024 88.31-2.067l15.040 5.766z","M887.997 576h-15.286v25.766c0 17.674-14.326 32-32 32h-72.714v64h72.714c53.021 0 96-42.979 96-96v-39.027c-14.278 8.426-30.931 13.261-48.714 13.261z","M281.182 416c53.020 0 95.999-42.979 95.999-96 0-53.019-42.979-96-95.999-96s-96 42.981-96 96c0 53.021 42.98 96 96 96zM281.182 352c-17.673 0-32-14.326-32-32s14.327-32 32-32c17.673 0 32 14.327 32 32s-14.327 32-32 32z","M625.267 640h-0.8c0.262 0.598 0.528 1.194 0.8 1.786v-1.786z","M357.59 464.582c2.531-1.107 5.091-2.122 7.674-3.043-17.907-5.155-37.011-4.832-54.823 1.018l-14.183 4.659c-14.887 4.893-30.998 4.554-45.668-0.954l-4.554-1.709c-21.067-7.91-44.203-8.394-65.581-1.37-40.565 13.325-67.986 51.197-67.986 93.894v44.688c0 53.021 42.98 96 96 96h79.53v-64h-79.53c-17.673 0-32-14.326-32-32v-44.688c0-15.050 9.664-28.394 23.96-33.091 7.534-2.474 15.688-2.304 23.112 0.483l4.554 1.709c21.238 7.974 44.041 10.333 66.238 7.027 10.398-30.173 32.992-55.357 63.258-68.624z","M423.914 640h0.797c-0.259 0.598-0.525 1.194-0.797 1.786v-1.786z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["teams-private"],"defaultCode":59750,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1116,"name":"teams-private","prevSize":32,"id":203,"code":59750},"setIdx":0,"setId":2,"iconIdx":204},{"icon":{"paths":["M170.664 192c0-17.673 14.327-32 32-32h618.667c17.674 0 32 14.327 32 32v128c0 17.674-14.326 32-32 32s-32-14.326-32-32v-96h-245.334v576h96c17.674 0 32 14.326 32 32s-14.326 32-32 32h-256c-17.67 0-32-14.326-32-32s14.33-32 32-32h96v-576h-245.333v96c0 17.674-14.327 32-32 32s-32-14.326-32-32v-128z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["text-format"],"defaultCode":59839,"grid":0},"attrs":[{}],"properties":{"order":1117,"id":204,"name":"text-format","prevSize":32,"code":59839},"setIdx":0,"setId":2,"iconIdx":205},{"icon":{"paths":["M223.311 308.609c-47.832 66.7-64.077 147.667-64.077 201.187v1.405l-0.127 1.398c-9.348 103.235 27.547 175.997 86.848 226.374 60.642 51.52 146.602 80.998 235.29 90.893 88.611 9.885 186.221 1.398 263.341-14.973 38.56-8.189 70.928-18.125 93.888-28.128 8.906-3.882 15.837-7.536 20.941-10.765-2.374-1.514-5.245-3.197-8.672-5.030-8.886-4.749-19.059-9.261-29.613-13.894l-1.843-0.81c-9.315-4.083-19.725-8.65-27.613-13.078-14.291-8.026-28.317-17.155-38.544-26.867-5.034-4.781-10.762-11.194-14.595-19.184-4.054-8.454-6.96-21.078-1.261-34.435 30.816-72.186 45.459-111.725 52.554-137.834 6.621-24.378 6.621-36.653 6.621-56.17v-0.179c0-15.51-8.979-86.595-53.776-152.876-43.376-64.174-121.398-125.729-264.832-125.729-129.725 0-207.83 53.576-254.529 118.696zM173.267 272.433c58.132-81.063 154.749-144.433 304.573-144.433 164.896 0 261.594 72.589 315.859 152.878 52.838 78.181 64.416 161.881 64.416 187.641 0 21.654-0.022 40.336-8.797 72.64-7.834 28.835-22.627 68.614-50.048 133.424 5.069 4.032 12.592 9.005 22.506 14.57 5.12 2.877 12.995 6.339 24.054 11.194 10.266 4.506 22.582 9.93 33.891 15.978 10.848 5.798 23.526 13.571 32.954 23.738 9.859 10.63 20.208 28.87 12.816 51.139-4.87 14.672-16.182 25.091-25.61 32.016-10.24 7.52-22.947 14.278-36.858 20.342-27.949 12.176-64.582 23.181-105.68 31.907-82.198 17.453-186.522 26.688-282.909 15.936-96.31-10.746-195.346-43.178-268.313-105.165-74.031-62.893-119.295-154.778-108.551-277.856 0.276-63.411 19.117-157.053 75.696-235.948zM333.952 422.051c0-17.648 14.25-31.955 31.83-31.955h183.008c17.578 0 31.827 14.307 31.827 31.955s-14.25 31.955-31.827 31.955h-183.008c-17.581 0-31.83-14.307-31.83-31.955zM365.782 539.709c-17.581 0-31.83 14.307-31.83 31.955s14.25 31.955 31.83 31.955h224.118c17.578 0 31.827-14.307 31.827-31.955s-14.25-31.955-31.827-31.955h-224.118z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["threads"],"defaultCode":59850,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1118,"name":"threads","prevSize":32,"id":205,"code":59850},"setIdx":0,"setId":2,"iconIdx":206},{"icon":{"paths":["M353.354 320c0-17.673 14.326-32 32-32h256c17.674 0 32 14.327 32 32s-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M385.354 416c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M481.354 448c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M641.354 416c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M353.354 576c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M513.354 544c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M609.354 576c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M385.354 672c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M481.354 704c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M641.354 672c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M289.353 160h448.001c35.344 0 64 28.654 64 64v576c0 35.347-28.656 64-64 64h-448.001c-35.346 0-64-28.653-64-64v-576c0-35.346 28.654-64 64-64zM289.353 224v576h448.001v-576h-448.001z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["total"],"defaultCode":59851,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1119,"name":"total","prevSize":32,"id":206,"code":59851},"setIdx":0,"setId":2,"iconIdx":207},{"icon":{"paths":["M713.613 91.356c13.162-11.794 33.392-10.685 45.187 2.477l129.034 144c10.89 12.154 10.89 30.556 0 42.71l-129.034 144.001c-11.795 13.162-32.026 14.269-45.187 2.477-13.162-11.795-14.272-32.026-2.477-45.187l81.222-90.646h-216.358c-17.674 0-32-14.327-32-32s14.326-32 32-32h216.358l-81.222-90.645c-11.795-13.162-10.685-33.393 2.477-45.187zM340.026 464.461c8.586-15.45 28.067-21.018 43.514-12.432l128.461 71.366 128.461-71.366c15.446-8.586 34.928-3.018 43.514 12.432 8.582 15.45 3.014 34.931-12.435 43.514l-159.539 88.634-159.539-88.634c-15.45-8.582-21.018-28.064-12.435-43.514zM192 288v448h640v-192c0-17.674 14.326-32 32-32s32 14.326 32 32v224c0 17.674-14.326 32-32 32h-704c-17.673 0-32-14.326-32-32v-512c0-17.673 14.327-32 32-32h272c17.674 0 32 14.327 32 32s-14.326 32-32 32h-240z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["transcript"],"defaultCode":59852,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1120,"name":"transcript","prevSize":32,"id":207,"code":59852},"setIdx":0,"setId":2,"iconIdx":208},{"icon":{"paths":["M378.861 853.331c317.456 0 491.091-262.662 491.091-490.442 0-7.462 0-14.89-0.506-22.282 33.779-24.401 62.938-54.614 86.112-89.224-31.501 13.94-64.918 23.082-99.136 27.12 36.032-21.542 62.998-55.424 75.882-95.34-33.878 20.078-70.944 34.228-109.597 41.839-53.501-56.814-138.515-70.72-207.37-33.919-68.851 36.801-104.426 115.155-86.768 191.127-138.774-6.947-268.074-72.409-355.715-180.093-45.811 78.76-22.412 179.517 53.436 230.1-27.467-0.813-54.335-8.214-78.337-21.574 0 0.704 0 1.443 0 2.182 0.022 82.051 57.937 152.723 138.47 168.97-25.41 6.922-52.071 7.933-77.933 2.957 22.611 70.218 87.409 118.32 161.25 119.706-61.116 47.968-136.616 74.010-214.35 73.933-13.732-0.026-27.452-0.858-41.087-2.486 78.931 50.586 170.772 77.418 264.557 77.293z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["twitter-monochromatic"],"defaultCode":59660,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1121,"name":"twitter-monochromatic","prevSize":32,"id":208,"code":59660},"setIdx":0,"setId":2,"iconIdx":209},{"icon":{"paths":["M384 320c0-17.673-14.326-32-32-32s-32 14.327-32 32v256c0 106.038 85.962 192 192 192s192-85.962 192-192v-256c0-17.673-14.326-32-32-32s-32 14.327-32 32v256c0 70.691-57.309 128-128 128s-128-57.309-128-128v-256zM352 856c-13.254 0-24 10.746-24 24s10.746 24 24 24h320c13.254 0 24-10.746 24-24s-10.746-24-24-24h-320z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["underline"],"defaultCode":59853,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1122,"name":"underline","prevSize":32,"id":209,"code":59853},"setIdx":0,"setId":2,"iconIdx":210},{"icon":{"paths":["M512 832c176.73 0 320-143.27 320-320s-143.27-320-320-320c-111.712 0-210.056 57.244-267.295 144h107.295c17.674 0 32 14.326 32 32s-14.326 32-32 32h-176c-17.673 0-32-14.326-32-32v-192c0-17.673 14.327-32 32-32s32 14.327 32 32v101.364c70.228-90.856 180.282-149.364 304-149.364 212.077 0 384 171.923 384 384s-171.923 384-384 384c-212.077 0-384-171.923-384-384h64c0 176.73 143.27 320 320 320z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["undo"],"defaultCode":59854,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1123,"name":"undo","prevSize":32,"id":210,"code":59854},"setIdx":0,"setId":2,"iconIdx":211},{"icon":{"paths":["M589.36 729.43c-107.366 23.603-252.288-9.875-422.339-221.158 65.137-95.478 165.885-189.15 280.79-213.871 108.314-23.302 251.286 10.604 413.674 221.404-61.546 95.187-158.653 188.682-272.125 213.626zM916.819 482.714c-347.59-456.963-669.742-211.156-808.018-2.662-12.655 19.082-10.846 44.304 3.402 62.227 362.786 456.419 677.038 209.142 808.011 0.563 11.674-18.589 9.894-42.656-3.395-60.128zM619.462 512c0-53.709-45.517-100.57-105.834-100.57s-105.834 46.861-105.834 100.57c0 53.709 45.517 100.573 105.834 100.573s105.834-46.864 105.834-100.573zM683.546 512c0 90.893-76.074 164.573-169.917 164.573s-169.917-73.68-169.917-164.573c0-90.89 76.074-164.57 169.917-164.57s169.917 73.68 169.917 164.57z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["unread-on-top"],"defaultCode":59857,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1124,"name":"unread-on-top","prevSize":32,"id":211,"code":59857},"setIdx":0,"setId":2,"iconIdx":212},{"icon":{"paths":["M829.168 153.372c12.515-12.497 32.803-12.497 45.315 0 12.515 12.497 12.515 32.758 0 45.255l-672.887 672c-12.513 12.496-32.801 12.496-45.315 0s-12.513-32.758 0-45.254l672.887-672zM110.155 480.051c101.936-153.699 303.797-327.676 542.114-225.436l-49.578 49.512c-56.528-19.209-108.077-19.504-153.526-9.726-114.906 24.721-215.653 118.392-280.79 213.871 38.633 48 75.969 86.822 111.862 117.885l-45.363 45.302c-39.684-34.736-80.189-77.437-121.317-129.181-14.248-17.923-16.056-43.146-3.402-62.227zM797.981 350.454l-45.328 45.27c35.546 31.427 72.336 70.947 110.186 120.080-61.546 95.187-158.656 188.682-272.125 213.626-46.752 10.278-100.624 9.734-160.592-11.603l-49.331 49.267c244.662 107.334 443.389-69.158 540.778-224.253 11.674-18.589 9.894-42.656-3.395-60.128-40.493-53.235-80.64-96.931-120.192-132.259zM514.982 347.43c13.709 0 27.037 1.571 39.802 4.541l-203.738 203.469c-3.901-13.837-5.981-28.403-5.981-43.44 0-90.89 76.074-164.57 169.917-164.57zM679.091 469.184l-203.264 202.998c12.57 2.87 25.68 4.39 39.155 4.39 93.843 0 169.917-73.68 169.917-164.573 0-14.81-2.019-29.162-5.808-42.816z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["unread-on-top-disabled"],"defaultCode":59856,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1125,"name":"unread-on-top-disabled","prevSize":32,"id":212,"code":59856},"setIdx":0,"setId":2,"iconIdx":213},{"icon":{"paths":["M273.128 356.678c-6.62 27.766-2.384 63.757 25.498 105.581l33.166 49.75h-59.792c-44.011 0-70.484 14.874-86.279 33.619-16.496 19.578-24.573 47.264-23.734 77.491 0.841 30.262 10.601 59.968 25.818 81.312 15.127 21.216 33.404 31.578 52.195 31.578h143.999v64h-144c-45.209 0-80.932-25.642-104.306-58.426-23.283-32.656-36.522-74.95-37.682-116.688-1.16-41.773 9.763-86.083 38.766-120.506 20.726-24.598 49.155-42.32 84.825-50.784-16.1-39.011-19.009-77.050-10.731-111.77 11.253-47.2 42.305-84.492 80.791-107.342 38.4-22.798 85.677-32.139 131.303-21.965 35.584 7.935 68.909 27.48 95.251 59.554 53.75-35.147 127.584-30.892 182.483-2.495 34.438 17.812 64.794 46.382 81.437 85.010 12.294 28.531 16.438 61.011 10.608 96.205 46.112 6.682 81.507 25.155 105.616 53.456 30.346 35.626 38.102 81.35 33.443 123.283-4.659 41.917-21.946 83.485-46.544 115.114-24.061 30.934-59.354 57.354-101.261 57.354h-144v-64h144c14.093 0 32.8-9.581 50.742-32.646 17.398-22.371 30.112-52.806 33.453-82.89 3.341-30.067-2.902-56.339-18.554-74.714-15.222-17.869-44.035-33.75-97.642-33.75h-45.686l15.613-42.938c13.546-37.251 11.091-66.742 1.437-89.149-9.856-22.87-28.502-41.302-52.064-53.488-49.587-25.649-107.475-18.625-134.717 14.064l-30.134 36.16-22.541-41.325c-19.757-36.219-47.232-54.175-74.87-60.339-28.378-6.327-59.098-0.669-84.701 14.53-25.512 15.148-44.461 38.855-51.208 67.152zM630.979 588.778l-96-99.050c-6.029-6.218-14.32-9.728-22.979-9.728s-16.95 3.51-22.979 9.728l-96 99.050c-12.298 12.691-11.981 32.95 0.707 45.251 12.691 12.298 32.95 11.981 45.251-0.707l41.021-42.326v273.005c0 17.674 14.326 32 32 32s32-14.326 32-32v-273.005l41.021 42.326c12.301 12.688 32.56 13.005 45.251 0.707 12.691-12.301 13.005-32.56 0.707-45.251z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["upload"],"defaultCode":59858,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1126,"name":"upload","prevSize":32,"id":213,"code":59858},"setIdx":0,"setId":2,"iconIdx":214},{"icon":{"paths":["M609.354 336c0-53.019-42.979-96-96-96s-96 42.981-96 96c0 53.021 42.979 96 96 96s96-42.979 96-96zM673.354 336c0 88.365-71.635 160-160 160s-160-71.635-160-160c0-88.365 71.635-160 160-160s160 71.635 160 160zM413.805 551.802c-24.621-5.77-50.285-5.366-74.714 1.178-67.086 17.968-113.738 78.762-113.738 148.211v66.81c0 53.021 42.98 96 96 96h384c53.021 0 96-42.979 96-96v-58.531c0-74.301-51.149-138.826-123.488-155.779l-6.458-1.514c-25.674-6.016-52.435-5.594-77.907 1.229l-49.626 13.293c-20.378 5.456-41.789 5.795-62.326 0.979l-67.744-15.875zM355.651 614.8c14.237-3.814 29.197-4.051 43.549-0.688l67.744 15.878c30.806 7.219 62.925 6.714 93.488-1.472l49.629-13.293c15.283-4.096 31.341-4.349 46.742-0.736l6.458 1.51c43.402 10.173 74.093 48.89 74.093 93.469v58.531c0 17.674-14.326 32-32 32h-384c-17.673 0-32-14.326-32-32v-66.81c0-40.483 27.193-75.917 66.298-86.39z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["user"],"defaultCode":59861,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1127,"name":"user","prevSize":32,"id":214,"code":59861},"setIdx":0,"setId":2,"iconIdx":215},{"icon":{"paths":["M553.411 326.282c0 91.578-75.846 165.818-169.411 165.818-93.564 0-169.412-74.24-169.412-165.818 0-91.581 75.848-165.821 169.412-165.821 93.565 0 169.411 74.24 169.411 165.821zM485.648 326.282c0-54.949-45.51-99.493-101.648-99.493s-101.647 44.544-101.647 99.493c0 54.947 45.509 99.491 101.647 99.491s101.648-44.544 101.648-99.491z","M203.427 511.232c28.952-9.11 60.004-9.67 89.279-1.61l51.342 14.131c25.632 7.056 52.819 6.566 78.166-1.408l31.872-10.026c31.206-9.821 64.678-10.422 96.234-1.738 71.962 19.811 121.68 84.051 121.68 157.219v96.24c0 54.947-45.51 99.491-101.648 99.491h-372.705c-56.138 0-101.647-44.544-101.647-99.491v-108.566c0-65.814 43.411-124.106 107.427-144.243zM274.359 573.472c-16.46-4.531-33.918-4.218-50.196 0.906-35.992 11.322-60.399 44.093-60.399 81.098v108.566c0 18.317 15.17 33.165 33.882 33.165h372.705c18.714 0 33.882-14.848 33.882-33.165v-96.24c0-43.453-29.523-81.603-72.259-93.366-18.739-5.158-38.618-4.8-57.152 1.030l-31.872 10.026c-38.022 11.962-78.803 12.698-117.248 2.115l-51.343-14.134z","M797.091 189.321c0-15.913-13.024-28.812-29.091-28.812s-29.091 12.9-29.091 28.812v100.844h-101.818c-16.067 0-29.091 12.9-29.091 28.812s13.024 28.812 29.091 28.812h101.818v100.845c0 15.914 13.024 28.813 29.091 28.813s29.091-12.899 29.091-28.813v-100.845h101.818c16.067 0 29.091-12.899 29.091-28.812s-13.024-28.812-29.091-28.812h-101.818v-100.844z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["user-add"],"defaultCode":59859,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1128,"name":"user-add","prevSize":32,"id":215,"code":59859},"setIdx":0,"setId":2,"iconIdx":216},{"icon":{"paths":["M464 318.747c0-51.548-42.406-94.366-96-94.366-53.592 0-96 42.819-96 94.366s42.408 94.367 96 94.367c53.594 0 96-42.819 96-94.367zM528 318.747c0 87.416-71.635 158.284-160 158.284s-160-70.867-160-158.284c0-87.417 71.635-158.282 160-158.282s160 70.865 160 158.282zM281.778 525.712c-27.649-7.693-56.976-7.158-84.319 1.536-60.46 19.226-101.459 74.864-101.459 137.69v103.629c0 52.451 42.981 94.97 96 94.97h352c3.606 0 7.165-0.195 10.666-0.579v-64.534c-3.334 1.168-6.925 1.802-10.666 1.802h-352c-17.673 0-32-14.173-32-31.658v-103.629c0-35.325 23.051-66.605 57.044-77.414 15.373-4.89 31.862-5.187 47.407-0.864l48.489 13.491c36.311 10.102 74.827 9.402 110.737-2.016l30.099-9.571c17.504-5.568 36.278-5.91 53.978-0.986 18.899 5.261 35.066 16.042 46.912 30.282v-79.712c-9.309-4.749-19.203-8.627-29.584-11.517-29.805-8.291-61.414-7.715-90.89 1.654l-30.099 9.574c-23.942 7.61-49.619 8.080-73.824 1.344l-48.491-13.491zM763.366 489.709c-12.326-12.646-32.586-12.918-45.248-0.608-12.666 12.31-12.938 32.544-0.611 45.19l102.842 105.51h-324.349c-17.674 0-32 14.307-32 31.958 0 17.648 14.326 31.958 32 31.958h324.349l-102.842 105.507c-12.326 12.65-12.054 32.88 0.611 45.194 12.662 12.31 32.922 12.038 45.248-0.611l155.718-159.757c12.093-12.406 12.093-32.176 0-44.582l-155.718-159.76z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["user-forward"],"defaultCode":59860,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1129,"name":"user-forward","prevSize":32,"id":216,"code":59860},"setIdx":0,"setId":2,"iconIdx":217},{"icon":{"paths":["M201.583 672c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M329.584 576c-17.674 0-32.001 14.326-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z","M201.583 480c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M329.584 384c-17.674 0-32.001 14.326-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z","M201.583 288c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z","M329.584 192c-17.674 0-32.001 14.327-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.327 32-32s-14.326-32-32-32h-544z","M201.583 864c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M329.584 768c-17.674 0-32.001 14.326-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["view-condensed"],"defaultCode":59862,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1130,"name":"view-condensed","prevSize":32,"id":217,"code":59862},"setIdx":0,"setId":2,"iconIdx":218},{"icon":{"paths":["M288 192c0-17.673 14.327-32 32-32h544c17.674 0 32 14.327 32 32s-14.326 32-32 32h-544c-17.673 0-32-14.327-32-32zM288 288c0-17.673 14.327-32 32-32h448c17.674 0 32 14.327 32 32s-14.326 32-32 32h-448c-17.673 0-32-14.327-32-32zM192 304c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z","M288 464c0-17.674 14.327-32 32-32h544c17.674 0 32 14.326 32 32s-14.326 32-32 32h-544c-17.673 0-32-14.326-32-32zM288 560c0-17.674 14.327-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32h-448c-17.673 0-32-14.326-32-32zM192 576c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M288 736c0-17.674 14.327-32 32-32h544c17.674 0 32 14.326 32 32s-14.326 32-32 32h-544c-17.673 0-32-14.326-32-32zM288 832c0-17.674 14.327-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32h-448c-17.673 0-32-14.326-32-32zM192 848c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["view-extended"],"defaultCode":59863,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1131,"name":"view-extended","prevSize":32,"id":218,"code":59863},"setIdx":0,"setId":2,"iconIdx":219},{"icon":{"paths":["M192 320c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z","M320 224c-17.673 0-32 14.327-32 32s14.327 32 32 32h544c17.674 0 32-14.327 32-32s-14.326-32-32-32h-544z","M192 576c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M320 480c-17.673 0-32 14.326-32 32s14.327 32 32 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z","M192 832c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M320 736c-17.673 0-32 14.326-32 32s14.327 32 32 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["view-medium"],"defaultCode":59864,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1132,"name":"view-medium","prevSize":32,"id":219,"code":59864},"setIdx":0,"setId":2,"iconIdx":220},{"icon":{"paths":["M640.854 256c26.512 0 48-21.49 48-48s-21.488-48-48-48c-26.509 0-48 21.49-48 48s21.491 48 48 48zM640.854 320c61.856 0 112-50.144 112-112s-50.144-112-112-112c-61.856 0-112 50.144-112 112s50.144 112 112 112zM592.854 416v256h-160v128h32v-96h224v-288h-96zM528.854 768h160c35.347 0 64-28.653 64-64v-288c0-35.347-28.653-64-64-64h-96c-35.344 0-64 28.653-64 64v192h-96c-35.344 0-64 28.653-64 64v128c0 35.347 28.656 64 64 64h32c35.347 0 64-28.653 64-64v-32zM784.854 448c0-17.674 14.326-32 32-32s32 14.326 32 32v384c0 17.674-14.326 32-32 32h-224c-17.674 0-32-14.326-32-32s14.326-32 32-32h192v-352zM368.403 401.52c9.677-9.059 10.176-24.246 1.117-33.923l-48.272-51.558v-47.925c0-13.255-10.746-24-24-24s-24 10.745-24 24v57.406c0 6.093 2.316 11.955 6.48 16.403l54.752 58.48c9.059 9.677 24.246 10.176 33.923 1.117zM170.974 414.278c53.308 74.218 156.687 91.171 230.908 37.862 10.765-7.731 25.76-5.274 33.494 5.491 7.731 10.768 5.274 25.763-5.494 33.494-95.75 68.771-229.121 46.902-297.894-48.848s-46.902-229.123 48.848-297.895c75.545-54.26 174.453-52.073 246.597-1.796 10.874 7.578 13.546 22.538 5.968 33.412s-22.538 13.547-33.411 5.968c-55.971-39.005-132.65-40.618-191.153 1.402-74.219 53.308-91.171 156.688-37.864 230.909z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["waiting-on-me"],"defaultCode":59865,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1133,"name":"waiting-on-me","prevSize":32,"id":220,"code":59865},"setIdx":0,"setId":2,"iconIdx":221},{"icon":{"paths":["M512 352.003c17.674 0 32 14.33 32 32v224c0 17.674-14.326 32-32 32s-32-14.326-32-32v-224c0-17.67 14.326-32 32-32z","M512 672.003c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32s-32-14.326-32-32c0-17.67 14.326-32 32-32z","M567.101 158.348c-24.774-41.922-85.427-41.922-110.202 0l-359.92 609.099c-25.21 42.662 5.544 96.557 55.099 96.557h719.845c49.555 0 80.307-53.894 55.098-96.557l-359.92-609.099zM512 190.906l359.923 609.097h-719.845l359.922-609.097z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["warning"],"defaultCode":59866,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1134,"name":"warning","prevSize":32,"id":221,"code":59866},"setIdx":0,"setId":2,"iconIdx":222},{"icon":{"paths":["M784.131 240.143c-35.43-35.658-77.581-63.931-124.016-83.181s-96.227-29.094-146.493-28.961c-210.863 0-382.322 171.532-382.414 382.376-0.085 67.104 17.523 133.043 51.047 191.171l-54.256 198.154 202.72-53.174c56.064 30.531 118.883 46.531 182.717 46.538h0.166c210.752 0 382.32-171.552 382.394-382.394 0.16-50.25-9.645-100.029-28.848-146.464-19.2-46.436-47.418-88.604-83.018-124.065zM513.622 828.486h-0.186c-56.922 0.006-112.797-15.293-161.776-44.298l-11.606-6.896-120.302 31.555 32.124-117.347-7.573-12.029c-31.783-50.64-48.608-109.232-48.535-169.021 0-175.235 142.653-317.816 317.981-317.816 84.301 0.049 165.13 33.58 224.707 93.218 59.581 59.638 93.034 140.499 92.998 224.8-0.074 175.254-142.653 317.834-317.834 317.834zM687.958 590.451c-9.552-4.787-56.528-27.907-65.293-31.171s-15.126-4.768-21.491 4.784c-6.362 9.555-24.678 31.171-30.253 37.462-5.574 6.288-11.149 7.187-20.701 2.4-9.555-4.784-40.339-14.87-76.845-47.434-28.403-25.322-47.584-56.621-53.174-66.192-5.594-9.571-0.589-14.669 4.198-19.491 4.291-4.291 9.552-11.168 14.32-16.742s6.381-9.571 9.552-15.933c3.174-6.362 1.597-11.955-0.787-16.739-2.384-4.787-21.491-51.818-29.466-70.96-7.757-18.63-15.622-16.099-21.491-16.394-5.501-0.275-11.955-0.349-18.336-0.349-4.842 0.131-9.606 1.264-13.994 3.325-4.387 2.058-8.298 5.005-11.491 8.65-8.749 9.552-33.428 32.675-33.428 79.706s34.234 92.467 39.002 98.848c4.765 6.381 67.382 102.883 163.187 144.266 17.792 7.68 35.974 14.413 54.477 20.17 22.902 7.334 43.731 6.237 60.179 3.779 18.336-2.733 56.547-23.104 64.506-45.418 7.955-22.317 7.955-41.459 5.501-45.456-2.458-3.997-8.618-6.326-18.173-11.11z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["whatsapp-monochromatic"],"defaultCode":59868,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1135,"name":"whatsapp-monochromatic","prevSize":32,"id":222,"code":59868},"setIdx":0,"setId":2,"iconIdx":223},{"icon":{"paths":["M354.006 399.123l14.029 0.627-0.541-16.726-152.878 1.578c49.916-116.491 165.64-198.133 300.366-198.133 99.645 0 188.893 44.659 248.81 115.065-3.712 0.171-7.491 0.492-11.526 1.068 0 0-63.76 14.898-13.302 118.708 0 0 31.085 84.541-19.306 198.774l-28.403 73.306-99.101-264.723c0 0-5.984-28.154 23.61-28.154l23.76-1.472 0.339-16.035h-228.368v14.458c0 0 39.83-0.288 56.15 27.149l40.762 103.779-73.014 174.403-108.608-272.4c0 0-3.389-31.779 27.222-31.27z","M841.603 513.168c0-33.862-5.235-66.643-14.726-97.357l-145.949 378.755c96.134-56.88 160.675-161.571 160.675-281.398z","M411.478 823.011c32.49 10.912 67.267 16.778 103.488 16.778 37.85 0 74.102-6.406 107.898-18.256l-99.709-258.502-111.677 259.981z","M188.279 513.149c0-32.083 4.712-63.066 13.339-92.336l1 2.051 152.656 375.229c-99.606-55.882-166.994-162.538-166.994-284.944z","M130.705 512.093c0-211.775 172.316-384.093 384.076-384.093 211.725 0 383.923 172.318 383.923 384.093 0 211.776-172.198 384.010-383.923 384.010-211.757 0-384.076-172.234-384.076-384.010zM514.781 879.254c202.384 0 367.11-164.742 367.11-367.178 0-202.486-164.726-367.145-367.11-367.161-202.489 0-367.213 164.673-367.213 367.161 0 202.435 164.724 367.178 367.213 367.178z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["wordpress-monochromatic"],"defaultCode":59755,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1136,"name":"wordpress-monochromatic","prevSize":32,"id":223,"code":59755},"setIdx":0,"setId":2,"iconIdx":224},{"icon":{"paths":["M193.353 405.334h213.332v-213.334h-213.332v213.334zM129.353 170.667c0-23.564 19.102-42.667 42.667-42.667h256c23.565 0 42.666 19.102 42.666 42.667v255.999c0 23.565-19.101 42.669-42.666 42.669h-256c-23.564 0-42.667-19.104-42.667-42.669v-255.999zM620.019 405.334h213.334v-213.334h-213.334v213.334zM556.019 170.667c0-23.564 19.104-42.667 42.666-42.667h256c23.565 0 42.669 19.102 42.669 42.667v255.999c0 23.565-19.104 42.669-42.669 42.669h-256c-23.562 0-42.666-19.104-42.666-42.669v-255.999zM620.019 618.666h213.334v213.334h-213.334v-213.334zM598.685 554.666c-23.562 0-42.666 19.104-42.666 42.669v256c0 23.562 19.104 42.666 42.666 42.666h256c23.565 0 42.669-19.104 42.669-42.666v-256c0-23.565-19.104-42.669-42.669-42.669h-256zM193.353 832h213.332v-213.334h-213.332v213.334zM129.353 597.334c0-23.565 19.102-42.669 42.667-42.669h256c23.565 0 42.666 19.104 42.666 42.669v256c0 23.562-19.101 42.666-42.666 42.666h-256c-23.564 0-42.667-19.104-42.667-42.666v-256z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["workspaces"],"defaultCode":59870,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1137,"name":"workspaces","prevSize":32,"id":224,"code":59870},"setIdx":0,"setId":2,"iconIdx":225},{"icon":{"paths":["M384.509 149.333c0-11.782 9.562-21.333 21.36-21.333h85.446c11.798 0 21.363 9.551 21.363 21.333v106.667h-106.81c-11.798 0-21.36-9.551-21.36-21.333v-85.333z","M512.678 256h106.806c11.798 0 21.36 9.551 21.36 21.333v85.332c0 11.782-9.562 21.334-21.36 21.334h-106.806v-128z","M384.509 405.334c0-11.782 9.562-21.334 21.36-21.334h106.81v128h-106.81c-11.798 0-21.36-9.552-21.36-21.334v-85.331z","M512.678 512h106.806c11.798 0 21.36 9.552 21.36 21.334v106.666h-128.166v-128z","M427.232 640c-23.597 0-42.723 19.104-42.723 42.666v170.669c0 23.562 19.126 42.666 42.723 42.666h170.89c23.597 0 42.723-19.104 42.723-42.666v-213.334h-213.613zM491.315 725.334c-11.798 0-21.36 9.549-21.36 21.331v42.669c0 11.782 9.562 21.331 21.36 21.331h42.723c11.798 0 21.36-9.549 21.36-21.331v-42.669c0-11.782-9.562-21.331-21.36-21.331h-42.723z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["zip"],"defaultCode":59871,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1138,"name":"zip","prevSize":32,"id":225,"code":59871},"setIdx":0,"setId":2,"iconIdx":226}],"height":1024,"metadata":{"name":"custom"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"custom","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16}} \ No newline at end of file +{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M727.050 406.195c12.259-12.73 11.878-32.986-0.854-45.245-12.73-12.259-32.986-11.878-45.245 0.854l-254.285 264.061-115.615-120.061c-12.259-12.733-32.516-13.114-45.247-0.854s-13.113 32.515-0.854 45.245l138.666 144c6.032 6.266 14.355 9.805 23.050 9.805 8.698 0 17.021-3.539 23.053-9.805l277.331-288z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["check-single"],"grid":0},"attrs":[{}],"properties":{"order":1151,"id":0,"name":"check-single","prevSize":32,"code":59876},"setIdx":0,"setId":6,"iconIdx":0},{"icon":{"paths":["M599.050 406.195c12.259-12.73 11.878-32.986-0.854-45.245-12.73-12.259-32.986-11.878-45.245 0.854l-254.284 264.061-115.616-120.061c-12.259-12.733-32.516-13.114-45.247-0.854s-13.113 32.515-0.854 45.245l138.667 144c6.032 6.266 14.354 9.805 23.050 9.805s17.018-3.539 23.052-9.805l277.331-288z","M887.021 406.227c12.275-12.714 11.92-32.973-0.794-45.248s-32.973-11.92-45.248 0.794l-255.040 264.157-50.918-52.739c-12.275-12.714-32.534-13.069-45.248-0.794s-13.069 32.534-0.794 45.248l73.939 76.582c6.029 6.246 14.339 9.773 23.021 9.773s16.992-3.526 23.021-9.773l278.061-288z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["check-double"],"grid":0},"attrs":[{},{}],"properties":{"order":1150,"id":1,"name":"check-double","prevSize":32,"code":59875},"setIdx":0,"setId":6,"iconIdx":1},{"icon":{"paths":["M511.997 256c35.347 0 64-28.654 64-64s-28.653-64-64-64c-35.344 0-64 28.654-64 64s28.656 64 64 64zM639.997 192c0 70.692-57.306 128-128 128-70.691 0-128-57.308-128-128s57.309-128 128-128c70.694 0 128 57.308 128 128z","M192.859 431.645c0.669 1.446 2.097 3.488 5.957 5.232 18.33 8.272 67.426 22.054 115.377 34.39 23.244 5.981 45.187 11.366 61.327 15.261 8.067 1.946 14.672 3.517 19.258 4.598l7.078 1.664c0 0 0.026 0.003-0.218 1.046l0.218-1.046c8.33 1.933 15.562 7.123 20.042 14.406 4.48 7.28 5.859 16.054 3.834 24.358l-83.856 343.437c-0.483 1.984-1.155 3.914-2.006 5.77-1.155 2.509-1.242 5.302-0.272 7.853 0.982 2.573 3.053 4.893 6.006 6.237 2.976 1.357 6.438 1.523 9.568 0.435 3.114-1.082 5.44-3.238 6.688-5.754 0.362-0.73 0.749-1.443 1.165-2.144l121.434-204.461c5.766-9.706 16.224-15.658 27.514-15.658 11.293 0 21.747 5.952 27.514 15.658l121.437 204.461c0.413 0.701 0.803 1.414 1.165 2.144 1.245 2.515 3.571 4.672 6.685 5.754 3.13 1.088 6.592 0.922 9.568-0.435 2.957-1.344 5.027-3.664 6.006-6.237 0.97-2.55 0.883-5.344-0.269-7.853-0.854-1.856-1.526-3.786-2.010-5.77l-83.853-343.437c-2.029-8.304-0.65-17.075 3.83-24.358 4.48-7.28 11.686-12.467 20.013-14.4l0.266 1.139c-0.262-1.139-0.266-1.139-0.266-1.139l1.821-0.426 5.283-1.245c4.582-1.082 11.184-2.653 19.248-4.598 16.138-3.894 38.074-9.28 61.312-15.261 47.936-12.333 97.046-26.118 115.424-34.4 3.888-1.75 5.322-3.802 5.994-5.248 0.813-1.763 1.155-4.179 0.557-6.861-0.602-2.678-1.974-4.858-3.629-6.259-1.402-1.187-3.76-2.499-8.109-2.499h-615.975c-4.316 0-6.656 1.302-8.052 2.486-1.647 1.402-3.026 3.581-3.628 6.272s-0.26 5.12 0.556 6.886zM172.486 495.21c-75.805-34.218-48.392-143.21 31.498-143.21h615.975c79.907 0 107.44 108.989 31.478 143.216-24.554 11.066-79.939 26.24-125.766 38.032-21.494 5.533-41.85 10.554-57.651 14.384l75.597 309.616c6.986 17.306 7.216 36.614 0.538 54.147-7.085 18.598-21.283 33.501-39.283 41.699-17.978 8.189-38.474 9.126-57.123 2.64-18.234-6.342-33.469-19.36-42.39-36.566l-93.386-157.232-93.386 157.232c-8.918 17.206-24.157 30.224-42.387 36.566-18.653 6.486-39.146 5.549-57.126-2.64-18-8.198-32.198-23.101-39.282-41.699-6.678-17.533-6.449-36.842 0.539-54.147l75.595-309.613c-15.808-3.83-36.172-8.854-57.676-14.387-45.829-11.789-101.229-26.966-125.761-38.038z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["accessibility"],"grid":0},"attrs":[{},{}],"properties":{"order":1147,"id":2,"name":"accessibility","prevSize":32,"code":59874},"setIdx":0,"setId":6,"iconIdx":2},{"icon":{"paths":["M512 928c-229.75 0-416-186.246-416-416 0-229.75 186.25-416 416-416 229.754 0 416 186.25 416 416 0 229.754-186.246 416-416 416zM678.176 433.884c12.742-12.247 13.139-32.504 0.896-45.246-12.25-12.742-32.506-13.143-45.247-0.896l-207.030 198.991-68.644-65.834c-12.755-12.232-33.012-11.809-45.245 0.946s-11.809 33.012 0.946 45.245l90.819 87.1c12.39 11.885 31.948 11.872 44.324-0.026l229.183-220.28z"],"attrs":[{"fill":"rgb(20, 134, 96)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":0}]},"tags":["success-circle"],"grid":0},"attrs":[{"fill":"rgb(20, 134, 96)"}],"properties":{"order":1143,"id":3,"name":"success-circle","prevSize":32,"code":59869},"setIdx":0,"setId":6,"iconIdx":3},{"icon":{"paths":["M928 512c0-229.75-186.246-416-416-416-229.75 0-416 186.25-416 416 0 229.754 186.25 416 416 416 229.754 0 416-186.246 416-416zM662.63 361.373c12.493 12.497 12.493 32.758 0 45.254l-105.375 105.373 105.375 105.373c12.493 12.497 12.493 32.758 0 45.258-12.499 12.493-32.761 12.493-45.258 0l-105.373-105.375-105.373 105.375c-12.497 12.493-32.758 12.493-45.254 0-12.497-12.499-12.497-32.761 0-45.258l105.372-105.373-105.372-105.373c-12.497-12.497-12.497-32.758 0-45.254s32.758-12.497 45.254 0l105.373 105.372 105.373-105.372c12.497-12.497 32.758-12.497 45.258 0z"],"attrs":[{"fill":"rgb(212, 12, 38)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":1}]},"tags":["error-circle"],"grid":0},"attrs":[{"fill":"rgb(212, 12, 38)"}],"properties":{"order":1144,"id":4,"name":"error-circle","prevSize":32,"code":59873},"setIdx":0,"setId":6,"iconIdx":4},{"icon":{"paths":["M512 819.2c169.661 0 307.2-137.539 307.2-307.2s-137.539-307.2-307.2-307.2c-169.662 0-307.2 137.538-307.2 307.2s137.538 307.2 307.2 307.2z","M1024 512c0-282.77-229.228-512-512-512-282.77 0-512 229.23-512 512 0 282.772 229.23 512 512 512 282.772 0 512-229.228 512-512zM921.6 512c0 226.217-183.383 409.6-409.6 409.6-226.216 0-409.6-183.383-409.6-409.6 0-226.215 183.384-409.6 409.6-409.6 226.217 0 409.6 183.385 409.6 409.6z"],"attrs":[{"fill":"rgb(21, 111, 245)"},{"fill":"rgb(21, 111, 245)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912111124512431405712431908124569921291162451452241651":[{"f":2},{"f":2}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":4},{"f":4}]},"tags":["radio-checked"],"grid":0},"attrs":[{"fill":"rgb(21, 111, 245)"},{"fill":"rgb(21, 111, 245)"}],"properties":{"order":5,"id":5,"name":"radio-checked","prevSize":32,"code":59855},"setIdx":0,"setId":6,"iconIdx":5},{"icon":{"paths":["M512 0c282.767 0 512 229.23 512 512 0 282.767-229.233 512-512 512-282.77 0-512-229.233-512-512 0-282.77 229.23-512 512-512zM512 921.6c226.217 0 409.6-183.383 409.6-409.6 0-226.216-183.383-409.6-409.6-409.6-226.216 0-409.6 183.384-409.6 409.6 0 226.217 183.384 409.6 409.6 409.6z"],"attrs":[{"fill":"rgb(158, 162, 168)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912111124512431405712431908124569921291162451452241651":[{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":9}]},"tags":["radio-unchecked"],"grid":0},"attrs":[{"fill":"rgb(158, 162, 168)"}],"properties":{"order":4,"id":6,"name":"radio-unchecked","prevSize":32,"code":59867},"setIdx":0,"setId":6,"iconIdx":6},{"icon":{"paths":["M678.736 135.922c7.414-5.157 16.23-7.922 25.264-7.922s17.85 2.764 25.264 7.922c7.414 5.157 13.075 12.46 16.218 20.928l0.074 0.2 32.371 89.024 89.226 32.445c8.467 3.143 15.77 8.803 20.928 16.219 5.155 7.415 7.92 16.231 7.92 25.264 0 9.034-2.765 17.85-7.92 25.264-5.158 7.414-12.461 13.075-20.931 16.218l-0.198 0.074-89.024 32.371-32.445 89.226c-3.142 8.467-8.803 15.77-16.218 20.928-7.414 5.155-16.23 7.92-25.264 7.92s-17.85-2.765-25.264-7.92c-7.414-5.158-13.075-12.461-16.218-20.931l-0.074-0.198-32.371-89.024-89.226-32.445c-8.467-3.142-15.77-8.803-20.928-16.218-5.155-7.414-7.92-16.23-7.92-25.264 0-9.032 2.765-17.848 7.92-25.264 5.158-7.415 12.461-13.075 20.931-16.218l0.198-0.074 89.024-32.372 32.445-89.224c3.142-8.468 8.803-15.771 16.218-20.928zM713.437 384l7.533-20.717c2.224-6.029 5.725-11.504 10.269-16.045 4.541-4.544 10.016-8.045 16.045-10.269l0.128-0.045 46.541-16.925-46.669-16.971c-6.029-2.221-11.504-5.724-16.045-10.267-4.544-4.542-8.045-10.017-10.269-16.044l-0.045-0.128-16.925-46.541-16.97 46.669c-2.221 6.028-5.725 11.502-10.269 16.044-4.541 4.543-10.016 8.045-16.045 10.267l-0.128 0.047-46.541 16.924 46.669 16.97c6.029 2.221 11.504 5.725 16.045 10.269 4.544 4.541 8.045 10.016 10.269 16.045l0.045 0.128 16.925 46.541 9.437-25.952z","M323.091 265.629c8.256-6.153 18.346-9.629 28.909-9.629s20.653 3.477 28.909 9.629c8.224 6.127 14.17 14.542 17.402 23.873l0.067 0.191 47.674 140.467 130.595 50.883c9.696 3.856 17.67 10.64 23.126 19.046 5.44 8.381 8.227 18.118 8.227 27.91s-2.787 19.53-8.227 27.91c-5.456 8.406-13.434 15.19-23.126 19.046l-0.208 0.083-130.387 50.8-47.741 140.659c-3.232 9.328-9.178 17.744-17.402 23.872-8.256 6.15-18.346 9.629-28.909 9.629s-20.653-3.478-28.909-9.629c-8.223-6.128-14.17-14.544-17.402-23.875l-0.066-0.189-47.673-140.467-130.596-50.883c-9.694-3.856-17.669-10.64-23.125-19.046-5.442-8.381-8.228-18.118-8.228-27.91s2.787-19.53 8.228-27.91c5.456-8.406 13.431-15.19 23.125-19.046l0.208-0.083 130.388-50.8 47.739-140.658c3.233-9.331 9.18-17.746 17.403-23.873zM381.222 617.712l6.314-18.602c2.291-6.659 5.958-12.874 10.88-18.147 4.928-5.28 11.014-9.507 17.917-12.23l0.134-0.054 104.41-40.678-104.544-40.733c-6.902-2.723-12.989-6.95-17.917-12.23-4.922-5.274-8.589-11.488-10.88-18.147l-0.042-0.125-35.494-104.579-35.536 104.704c-2.291 6.659-5.959 12.874-10.881 18.147-4.929 5.28-11.015 9.507-17.916 12.23l-0.133 0.054-104.411 40.678 104.544 40.733c6.901 2.723 12.988 6.95 17.916 12.23 4.923 5.274 8.59 11.488 10.881 18.147l0.042 0.125 35.494 104.579 29.222-86.102z","M704 544c-9.034 0-17.85 2.765-25.264 7.92-7.414 5.158-13.075 12.461-16.218 20.928l-32.445 89.226-89.222 32.445c-8.47 3.142-15.773 8.803-20.931 16.218-5.155 7.414-7.92 16.23-7.92 25.264s2.765 17.85 7.92 25.264c5.158 7.414 12.461 13.075 20.928 16.218l89.226 32.445 32.445 89.222c3.142 8.47 8.803 15.773 16.218 20.931 7.414 5.155 16.23 7.92 25.264 7.92s17.85-2.765 25.264-7.92c7.414-5.158 13.075-12.461 16.218-20.928l32.445-89.226 89.222-32.445c8.47-3.142 15.773-8.803 20.931-16.218 5.155-7.414 7.92-16.23 7.92-25.264s-2.765-17.85-7.92-25.264c-5.158-7.414-12.461-13.075-20.928-16.218l-89.226-32.445-32.445-89.222c-3.142-8.47-8.803-15.773-16.218-20.931-7.414-5.155-16.23-7.92-25.264-7.92zM720.97 779.283l-6.829 18.784-10.141 27.885-16.97-46.669c-2.224-6.029-5.725-11.504-10.269-16.045-4.541-4.544-10.016-8.048-16.045-10.269l-46.669-16.97 46.669-16.97c6.029-2.221 11.504-5.725 16.045-10.269 4.544-4.541 8.048-10.016 10.269-16.045l16.97-46.669 16.97 46.669c2.224 6.029 5.725 11.504 10.269 16.045 4.541 4.544 10.016 8.048 16.045 10.269l46.669 16.97-46.669 16.97c-6.029 2.224-11.504 5.725-16.045 10.269-4.544 4.541-8.045 10.016-10.269 16.045z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{},{}]},"tags":["stars"],"grid":0},"attrs":[{},{},{}],"properties":{"order":1139,"id":7,"name":"stars","prevSize":32,"code":59845},"setIdx":0,"setId":6,"iconIdx":7},{"icon":{"paths":["M810.666 512c0.022 8.358-2.173 16.579-6.371 23.862-4.195 7.283-10.253 13.382-17.581 17.706l-454.067 271.187c-7.658 4.576-16.425 7.075-25.4 7.235-8.975 0.163-17.832-2.016-25.656-6.314-7.749-4.23-14.205-10.397-18.702-17.872-4.498-7.472-6.875-15.981-6.888-24.65v-542.311c0.013-8.668 2.39-17.176 6.888-24.649s10.953-13.642 18.702-17.872c7.824-4.297 16.681-6.477 25.656-6.315s17.743 2.661 25.4 7.237l454.067 271.186c7.328 4.323 13.386 10.422 17.581 17.706 4.198 7.283 6.394 15.504 6.371 23.862z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["play-shape-filled"],"grid":0},"attrs":[{}],"properties":{"order":4,"id":8,"name":"play-shape-filled","prevSize":32,"code":59842},"setIdx":0,"setId":6,"iconIdx":8},{"icon":{"paths":["M832 245.333v533.332c0 14.147-5.693 27.712-15.824 37.712-10.131 10.003-23.872 15.622-38.202 15.622h-135.066c-14.33 0-28.070-5.619-38.202-15.622-10.131-10-15.824-23.565-15.824-37.712v-533.332c0-14.145 5.693-27.71 15.824-37.712s23.872-15.621 38.202-15.621h135.066c14.33 0 28.070 5.619 38.202 15.621s15.824 23.567 15.824 37.712zM381.091 192h-135.065c-14.329 0-28.070 5.619-38.202 15.621s-15.824 23.567-15.824 37.712v533.332c0 14.147 5.692 27.712 15.824 37.712 10.132 10.003 23.874 15.622 38.202 15.622h135.065c14.33 0 28.070-5.619 38.202-15.622 10.131-10 15.824-23.565 15.824-37.712v-533.332c0-14.145-5.693-27.71-15.824-37.712s-23.872-15.621-38.202-15.621z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["pause-shape-filled"],"grid":0},"attrs":[{}],"properties":{"order":3,"id":9,"name":"pause-shape-filled","prevSize":32,"code":59843},"setIdx":0,"setId":6,"iconIdx":9},{"icon":{"paths":["M593.158 920.006c-80.698 16.051-164.342 7.814-240.355-23.674-76.014-31.485-140.984-84.806-186.695-153.216s-70.108-148.842-70.108-231.117h64c0 69.619 20.644 137.674 59.323 195.562 38.678 57.885 93.653 103.002 157.973 129.645 64.32 26.64 135.094 33.613 203.376 20.029 68.282-13.581 131.002-47.107 180.23-96.333 49.226-49.229 82.752-111.949 96.333-180.23 13.584-68.282 6.611-139.056-20.029-203.376-26.643-64.32-71.76-119.295-129.645-157.973-57.888-38.678-125.942-59.323-195.562-59.323v-64c82.278 0 162.707 24.398 231.117 70.109s121.731 110.681 153.216 186.695v0c31.488 76.013 39.725 159.658 23.674 240.355-16.051 80.694-55.67 154.819-113.85 212.998s-132.304 97.798-212.998 113.85z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["loading"],"grid":0},"attrs":[{}],"properties":{"order":2,"id":10,"name":"loading","prevSize":32,"code":59844},"setIdx":0,"setId":6,"iconIdx":10},{"icon":{"paths":["M544 208c0-17.673-14.326-32-32-32s-32 14.327-32 32v271.997h-271.998c-17.673 0-32 14.326-32 32s14.327 32 32 32h271.998v272.003c0 17.674 14.326 32 32 32s32-14.326 32-32v-272.003l272-0.003c17.674 0 32-14.326 32-32s-14.326-32-32-32l-272 0.003v-271.997z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["add"],"defaultCode":59872,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":923,"name":"add","prevSize":32,"id":11,"code":59872},"setIdx":0,"setId":6,"iconIdx":11},{"icon":{"paths":["M512 928c-14.218 0-28.275-0.714-42.144-2.112-16.694-1.68-30.557-12.528-36.688-27.395l-40.538-98.304-98.162 40.838c-14.837 6.173-32.3 4.048-45.292-6.554-21.838-17.818-41.831-37.811-59.65-59.648-10.601-12.992-12.726-30.454-6.553-45.293l40.839-98.16-98.307-40.541c-14.864-6.131-25.714-19.994-27.395-36.688-1.396-13.869-2.111-27.926-2.111-42.144 0-14.214 0.714-28.275 2.11-42.141 1.681-16.694 12.531-30.557 27.395-36.688l98.308-40.541-40.84-98.163c-6.173-14.837-4.047-32.3 6.553-45.292 17.818-21.838 37.81-41.83 59.648-59.648 12.992-10.6 30.455-12.726 45.292-6.553l98.165 40.84 40.541-98.309c6.128-14.865 19.994-25.714 36.688-27.395 13.866-1.396 27.926-2.11 42.141-2.11s28.275 0.714 42.141 2.11c16.694 1.681 30.56 12.531 36.688 27.395l40.541 98.309 98.163-40.84c14.838-6.173 32.301-4.047 45.293 6.553 21.837 17.818 41.83 37.81 59.648 59.648 10.602 12.992 12.726 30.455 6.554 45.292l-40.842 98.163 98.31 40.541c14.864 6.131 25.712 19.994 27.392 36.688 1.398 13.866 2.112 27.926 2.112 42.141 0 14.218-0.714 28.275-2.112 42.144-1.68 16.694-12.528 30.557-27.395 36.688l-98.307 40.541 40.842 98.16c6.173 14.838 4.045 32.301-6.554 45.293-17.821 21.837-37.811 41.83-59.651 59.648-12.992 10.602-30.454 12.726-45.29 6.554l-98.163-40.838-40.538 98.304c-6.131 14.867-19.994 25.715-36.688 27.395-13.869 1.398-27.93 2.112-42.144 2.112zM444.451 757.984l43.386 105.2c7.981 0.541 16.038 0.816 24.163 0.816s16.182-0.275 24.163-0.816l43.382-105.2c9.456-22.925 35.731-33.808 58.627-24.285l105.056 43.709c12.157-10.602 23.578-22.022 34.179-34.179l-43.709-105.056c-9.526-22.893 1.36-49.171 24.282-58.624l105.203-43.386c0.541-7.978 0.816-16.038 0.816-24.163s-0.275-16.182-0.816-24.16l-105.203-43.386c-22.922-9.453-33.808-35.731-24.282-58.624l43.709-105.060c-10.602-12.156-22.022-23.577-34.176-34.177l-105.059 43.708c-22.896 9.525-49.171-1.359-58.627-24.283l-43.382-105.204c-7.981-0.54-16.038-0.815-24.163-0.815s-16.182 0.275-24.163 0.815l-43.386 105.204c-9.453 22.924-35.728 33.808-58.624 24.283l-105.058-43.708c-12.156 10.6-23.577 22.021-34.177 34.177l43.708 105.059c9.525 22.893-1.359 49.171-24.284 58.624l-105.203 43.386c-0.54 7.978-0.815 16.035-0.815 24.16 0 8.128 0.275 16.186 0.815 24.163l105.203 43.386c22.924 9.453 33.809 35.731 24.284 58.624l-43.708 105.056c10.601 12.157 22.022 23.578 34.178 34.179l105.056-43.709c22.896-9.523 49.171 1.36 58.624 24.285zM416 512c0-53.021 42.979-96 96-96s96 42.979 96 96c0 53.021-42.979 96-96 96s-96-42.979-96-96zM512 352c-88.365 0-160 71.635-160 160s71.635 160 160 160c88.365 0 160-71.635 160-160s-71.635-160-160-160z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["administration"],"defaultCode":59662,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":924,"name":"administration","prevSize":32,"id":12,"code":59662},"setIdx":0,"setId":6,"iconIdx":12},{"icon":{"paths":["M878.739 567.622c-41.853-41.136-161.235-29.824-220.925-22.282-59.005-35.997-98.458-85.706-126.243-158.73 13.379-55.194 34.646-139.185 18.525-191.98-14.41-89.82-129.674-80.907-146.141-20.227-15.094 55.195-1.373 131.988 24.013 230.034-34.304 81.936-85.421 191.984-121.441 255.062-68.611 35.312-161.235 89.821-174.957 158.384-11.321 54.166 89.194 189.238 261.063-106.96 76.845-25.37 160.547-56.566 234.65-68.909 64.835 34.97 140.65 58.282 191.421 58.282 87.478 0 96.054-96.678 60.035-132.675zM199.152 834.342c17.496-46.97 84.048-101.133 104.288-119.99-65.18 103.875-104.288 122.39-104.288 119.99zM479.082 180.918c25.386 0 22.986 110.047 6.176 139.873-15.094-47.653-14.752-139.873-6.176-139.873zM395.379 649.216c33.274-57.936 61.747-126.845 84.733-187.526 28.474 51.766 64.838 93.251 103.258 121.706-71.354 14.739-133.446 44.909-187.99 65.821zM846.835 632.074c0 0-17.152 20.57-127.958-26.739 120.413-8.912 140.307 18.512 127.958 26.739z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["adobe-reader-monochromatic"],"defaultCode":59663,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":925,"name":"adobe-reader-monochromatic","prevSize":32,"id":13,"code":59663},"setIdx":0,"setId":6,"iconIdx":13},{"icon":{"paths":["M512 192c-13.056 0-25.578 5.187-34.813 14.419-9.232 9.233-14.419 21.755-14.419 34.812v162.462c0 12.122-6.848 23.2-17.686 28.621l-253.082 126.541v49.498l232.493-46.499c9.402-1.882 19.149 0.554 26.563 6.63 7.414 6.080 11.712 15.162 11.712 24.749v108.307c0 8.486-3.37 16.624-9.373 22.627l-44.781 44.781v47.789l91.501-36.602c7.629-3.050 16.141-3.050 23.77 0l91.501 36.602v-47.789l-44.781-44.781c-6.003-6.003-9.373-14.141-9.373-22.627v-108.307c0-9.587 4.298-18.669 11.712-24.749 7.414-6.077 17.162-8.512 26.563-6.63l232.493 46.499v-49.498l-253.082-126.541c-10.838-5.421-17.686-16.499-17.686-28.621v-162.462c0-13.057-5.187-25.579-14.419-34.812-9.235-9.232-21.757-14.419-34.813-14.419zM431.933 161.164c21.235-21.235 50.035-33.164 80.067-33.164s58.832 11.93 80.067 33.164c21.235 21.235 33.165 50.036 33.165 80.066v142.686l253.078 126.538c10.842 5.421 17.69 16.502 17.69 28.624v108.307c0 9.587-4.298 18.669-11.712 24.746s-17.162 8.512-26.563 6.63l-232.493-46.496v56.019l44.781 44.781c6 6 9.373 14.141 9.373 22.627v108.307c0 10.618-5.267 20.544-14.061 26.499-8.794 5.952-19.965 7.155-29.824 3.213l-123.501-49.402-123.501 49.402c-9.859 3.942-21.030 2.739-29.824-3.213-8.794-5.955-14.061-15.882-14.061-26.499v-108.307c0-8.486 3.373-16.627 9.373-22.627l44.781-44.781v-56.019l-232.492 46.496c-9.401 1.882-19.149-0.554-26.564-6.63s-11.712-15.158-11.712-24.746v-108.307c0-12.122 6.848-23.203 17.689-28.624l253.079-126.538v-142.686c0-30.031 11.93-58.831 33.165-80.066z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["airplane"],"defaultCode":59815,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":926,"id":14,"name":"airplane","prevSize":32,"code":59815},"setIdx":0,"setId":6,"iconIdx":14},{"icon":{"paths":["M448 188.865c0 33.615 27.251 60.865 60.864 60.865 33.616 0 60.867-27.25 60.867-60.865s-27.251-60.865-60.867-60.865c-33.613 0-60.864 27.25-60.864 60.865zM384 188.865c0 59.026 40.957 108.485 96 121.512v77.745c-44.314 11.69-78.986 47.13-89.578 91.878h-80.045c-13.027-55.043-62.486-96-121.512-96-68.961 0-124.865 55.904-124.865 124.864 0 68.963 55.904 124.867 124.865 124.867 56.762 0 104.678-37.875 119.854-89.731h83.361c12.227 41.773 45.696 74.47 87.92 85.61v77.744c-55.043 13.027-96 62.486-96 121.51 0 68.963 55.904 124.867 124.864 124.867 68.963 0 124.867-55.904 124.867-124.867 0-56.762-37.875-104.675-89.731-119.853v-79.437c42.163-11.171 75.578-43.846 87.789-85.574h77.222c15.178 51.856 63.091 89.731 119.853 89.731 68.963 0 124.867-55.904 124.867-124.867 0-68.96-55.904-124.864-124.867-124.864-59.024 0-108.483 40.957-121.51 96h-73.907c-10.579-44.707-45.194-80.122-89.446-91.843v-79.438c51.856-15.176 89.731-63.092 89.731-119.854 0-68.961-55.904-124.865-124.867-124.865-68.96 0-124.864 55.904-124.864 124.865zM828.864 569.731c-33.613 0-60.864-27.251-60.864-60.867 0-33.613 27.251-60.864 60.864-60.864 33.616 0 60.867 27.251 60.867 60.864 0 33.616-27.251 60.867-60.867 60.867zM188.865 569.731c-33.615 0-60.865-27.251-60.865-60.867 0-33.613 27.25-60.864 60.865-60.864s60.865 27.251 60.865 60.864c0 33.616-27.25 60.867-60.865 60.867zM451.069 508.864c0 33.616 27.251 60.867 60.867 60.867 33.613 0 60.864-27.251 60.864-60.867 0-33.613-27.251-60.864-60.864-60.864-33.616 0-60.867 27.251-60.867 60.864zM508.864 889.731c-33.613 0-60.864-27.251-60.864-60.867 0-33.613 27.251-60.864 60.864-60.864 33.616 0 60.867 27.251 60.867 60.864 0 33.616-27.251 60.867-60.867 60.867z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["all-contacts-in-channels"],"defaultCode":59664,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":927,"name":"all-contacts-in-channels","prevSize":32,"id":15,"code":59664},"setIdx":0,"setId":6,"iconIdx":15},{"icon":{"paths":["M861.437 160c17.67 0 32 14.327 32 32s-14.33 32-32 32h-384c-17.674 0-32-14.327-32-32s14.326-32 32-32h384zM334.717 442.397c-24.962 0-45.197-20.237-45.197-45.2 0-24.96 20.236-45.197 45.197-45.197 24.963 0 45.2 20.237 45.2 45.197 0 24.963-20.237 45.2-45.2 45.2zM334.717 506.397c-60.308 0-109.197-48.89-109.197-109.2 0-60.307 48.89-109.197 109.197-109.197 60.31 0 109.2 48.89 109.2 109.197 0 60.31-48.89 109.2-109.2 109.2zM456.278 535.504c-18.288-4.899-37.504-5.2-55.939-0.88l-45.005 10.547c-13.194 3.091-26.947 2.877-40.036-0.63l-31.676-8.483c-19.669-5.27-40.384-5.562-60.154-0.928-55.68 13.050-95.468 62.781-95.468 120.179v34.752c0 42.906 34.783 77.686 77.689 77.686h258.057c42.906 0 77.69-34.781 77.69-77.686v-43.587c0-52-34.928-97.514-85.158-110.97zM414.944 596.934c8.166-1.914 16.675-1.779 24.774 0.39 22.246 5.958 37.718 26.118 37.718 49.149v43.587c0 7.558-6.131 13.686-13.69 13.686h-258.057c-7.56 0-13.689-6.128-13.689-13.686v-34.752c0-27.469 19.123-51.552 46.072-57.869 9.556-2.24 19.564-2.086 28.99 0.438l31.676 8.483c23.277 6.237 47.738 6.621 71.2 1.12l45.005-10.547zM893.437 512c0-17.674-14.33-32-32-32h-224c-17.674 0-32 14.326-32 32s14.326 32 32 32h224c17.67 0 32-14.326 32-32zM861.437 640c17.67 0 32 14.326 32 32s-14.33 32-32 32h-192c-17.674 0-32-14.326-32-32s14.326-32 32-32h192zM893.437 352c0-17.674-14.33-32-32-32h-288c-17.674 0-32 14.326-32 32s14.326 32 32 32h288c17.67 0 32-14.326 32-32zM861.437 800c17.67 0 32 14.326 32 32s-14.33 32-32 32h-256c-17.674 0-32-14.326-32-32s14.326-32 32-32h256z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["all-contacts-in-queue"],"defaultCode":59665,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":928,"name":"all-contacts-in-queue","prevSize":32,"id":16,"code":59665},"setIdx":0,"setId":6,"iconIdx":16},{"icon":{"paths":["M523.571 295.385c33.133 0 74.669-22.133 99.402-51.645 22.4-26.745 38.733-64.095 38.733-101.445 0-5.072-0.467-10.144-1.402-14.294-36.864 1.383-81.2 24.439-107.798 55.334-21.002 23.517-40.134 60.406-40.134 98.218 0 5.533 0.934 11.067 1.402 12.911 2.333 0.461 6.067 0.922 9.798 0.922zM406.906 853.334c45.267 0 65.334-29.974 121.798-29.974 57.402 0 70 29.050 120.4 29.050 49.469 0 82.602-45.187 113.869-89.456 34.998-50.72 49.466-100.522 50.4-102.829-3.267-0.922-98-39.194-98-146.634 0-93.146 74.666-135.107 78.867-138.333-49.469-70.090-124.602-71.935-145.136-71.935-55.533 0-100.8 33.199-129.264 33.199-30.8 0-71.402-31.354-119.469-31.354-91.466 0-184.333 74.701-184.333 215.802 0 87.61 34.533 180.294 77 240.24 36.402 50.723 68.133 92.224 113.867 92.224z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["apple-monochromatic"],"defaultCode":59666,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":929,"name":"apple-monochromatic","prevSize":32,"id":17,"code":59666},"setIdx":0,"setId":6,"iconIdx":17},{"icon":{"paths":["M498.694 141.561l-298.666 136.533c-11.39 5.207-18.696 16.58-18.696 29.103v386.844c0 11.818 6.513 22.675 16.941 28.237l298.667 159.286c9.411 5.021 20.707 5.021 30.118 0l298.666-159.286c10.429-5.562 16.941-16.419 16.941-28.237v-386.844c0-12.524-7.306-23.896-18.694-29.103l-298.666-136.533c-8.451-3.862-18.16-3.862-26.611 0zM245.333 357.011l234.667 107.277v335.709l-234.667-125.155v-317.83zM544 799.997l234.666-125.155v-317.83l-234.666 107.277v335.709zM512 408.544l-221.7-101.347 221.7-101.348 221.699 101.348-221.699 101.347z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["apps"],"defaultCode":59667,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":930,"name":"apps","prevSize":32,"id":18,"code":59667},"setIdx":0,"setId":6,"iconIdx":18},{"icon":{"paths":["M374.627 297.372c-12.496-12.497-32.758-12.497-45.254 0l-192 192c-12.497 12.496-12.497 32.758 0 45.254l192 192c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-137.372-137.373h578.745v128c0 17.674 14.326 32 32 32s32-14.326 32-32v-160c0-17.674-14.326-32-32-32h-610.745l137.372-137.373c12.496-12.496 12.496-32.758 0-45.255z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-back"],"defaultCode":59668,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":931,"name":"arrow-back","prevSize":32,"id":19,"code":59668},"setIdx":0,"setId":6,"iconIdx":19},{"icon":{"paths":["M551.392 242.502c0.189-17.672 14.669-31.845 32.339-31.656 17.674 0.189 31.846 14.668 31.658 32.34l-1.318 123.489 193.44-193.439c12.496-12.497 32.755-12.497 45.254 0 12.496 12.497 12.496 32.758 0 45.255l-193.44 193.439 123.488-1.318c17.674-0.189 32.154 13.984 32.339 31.654 0.189 17.674-13.984 32.154-31.654 32.342l-201.92 2.154c-8.605 0.093-16.886-3.283-22.97-9.37-6.086-6.083-9.462-14.365-9.373-22.97l2.157-201.92zM475.981 782.147c-0.189 17.674-14.669 31.846-32.339 31.658-17.674-0.189-31.846-14.669-31.658-32.342l1.318-123.488-193.438 193.44c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l193.438-193.44-123.488 1.318c-17.672 0.189-32.151-13.984-32.34-31.654-0.189-17.674 13.984-32.154 31.656-32.342l201.922-2.154c8.605-0.093 16.883 3.283 22.966 9.37 6.086 6.083 9.462 14.365 9.373 22.97l-2.157 201.92z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-collapse"],"defaultCode":59669,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":932,"name":"arrow-collapse","prevSize":32,"id":20,"code":59669},"setIdx":0,"setId":6,"iconIdx":20},{"icon":{"paths":["M576 672c-17.674 0-32 14.326-32 32s14.326 32 32 32h224c17.674 0 32-14.326 32-32v-208c0-17.674-14.326-32-32-32s-32 14.326-32 32v130.746l-233.373-233.373c-12.496-12.496-32.758-12.496-45.254 0l-73.373 73.373-169.372-169.373c-12.497-12.497-32.758-12.497-45.255 0s-12.497 32.759 0 45.255l192 192c12.496 12.496 32.758 12.496 45.254 0l73.373-73.373 210.746 210.746h-146.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-decrease"],"defaultCode":59670,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":933,"name":"arrow-decrease","prevSize":32,"id":21,"code":59670},"setIdx":0,"setId":6,"iconIdx":21},{"icon":{"paths":["M726.88 526.064c12.355 12.637 12.128 32.896-0.509 45.254l-191.968 187.715c-12.438 12.163-32.31 12.163-44.746 0l-191.97-187.715c-12.636-12.358-12.863-32.618-0.507-45.254 12.356-12.634 32.615-12.861 45.252-0.506l137.597 134.55v-372.109c0-17.673 14.33-32 32-32 17.674 0 32 14.327 32 32v372.109l137.6-134.55c12.634-12.355 32.896-12.128 45.251 0.506z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-down"],"defaultCode":59673,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":934,"name":"arrow-down","prevSize":32,"id":22,"code":59673},"setIdx":0,"setId":6,"iconIdx":22},{"icon":{"paths":["M329.373 550.627c-12.497-12.496-12.497-32.758 0-45.254s32.758-12.496 45.254 0l105.373 105.373v-418.746c0-17.673 14.326-32 32-32s32 14.327 32 32v418.746l105.373-105.373c12.496-12.496 32.758-12.496 45.254 0s12.496 32.758 0 45.254l-160 160c-12.496 12.496-32.758 12.496-45.254 0l-160-160zM112 864c0 17.674 14.327 32 32 32h768c17.674 0 32-14.326 32-32v-512c0-17.674-14.326-32-32-32h-96c-17.674 0-32 14.326-32 32s14.326 32 32 32h64v448h-704v-448h64c17.673 0 32-14.326 32-32s-14.327-32-32-32h-96c-17.673 0-32 14.326-32 32v512z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-down-box"],"defaultCode":59671,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":935,"name":"arrow-down-box","prevSize":32,"id":23,"code":59671},"setIdx":0,"setId":6,"iconIdx":23},{"icon":{"paths":["M866.49 512c0-194.404-157.802-352-352.464-352-194.661 0-352.465 157.596-352.465 352s157.804 352 352.465 352c194.662 0 352.464-157.597 352.464-352zM930.576 512c0 229.75-186.496 416-416.55 416s-416.549-186.25-416.549-416c0-229.75 186.495-416 416.549-416s416.55 186.25 416.55 416zM696.525 571.37c12.682-12.33 12.957-32.589 0.611-45.251-12.342-12.666-32.63-12.938-45.309-0.611l-105.789 102.842v-276.349c0-17.674-14.346-32-32.045-32-17.696 0-32.042 14.326-32.042 32v276.349l-105.789-102.842c-12.678-12.326-32.966-12.054-45.309 0.611-12.344 12.662-12.071 32.922 0.608 45.251l160.182 155.715c12.438 12.093 32.259 12.093 44.701 0l160.179-155.715z"],"width":1056,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["arrow-down-circle"],"defaultCode":59672,"grid":0},"attrs":[{}],"properties":{"order":936,"name":"arrow-down-circle","prevSize":32,"id":24,"code":59672},"setIdx":0,"setId":6,"iconIdx":24},{"icon":{"paths":["M859.978 398.15c-0.189 17.67-14.666 31.843-32.339 31.654-17.67-0.189-31.846-14.666-31.658-32.339l1.318-123.488-193.437 193.437c-12.496 12.499-32.758 12.499-45.254 0-12.496-12.496-12.496-32.755 0-45.254l193.437-193.437-123.488 1.318c-17.67 0.189-32.15-13.984-32.339-31.656s13.984-32.151 31.658-32.34l201.92-2.156c8.605-0.092 16.883 3.286 22.97 9.371 6.083 6.085 9.462 14.364 9.37 22.969l-2.157 201.922zM167.394 626.522c0.189-17.674 14.668-31.846 32.34-31.658s31.845 14.669 31.657 32.339l-1.319 123.488 193.438-193.437c12.496-12.499 32.758-12.499 45.254 0 12.496 12.496 12.496 32.758 0 45.254l-193.438 193.437 123.489-1.318c17.67-0.189 32.15 13.984 32.339 31.658 0.189 17.67-13.984 32.15-31.658 32.339l-201.92 2.157c-8.605 0.093-16.884-3.286-22.969-9.37-6.085-6.086-9.463-14.365-9.371-22.97l2.156-201.92z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-expand"],"defaultCode":59674,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":937,"name":"arrow-expand","prevSize":32,"id":25,"code":59674},"setIdx":0,"setId":6,"iconIdx":25},{"icon":{"paths":["M623.488 420.944h-129.030c-146.778 0-279.962 128.675-298.822 309.533 98.511-81.834 219.072-127.946 345.446-127.946h82.406v123.408l188.595-214.202-188.595-214.2v123.406zM888.045 501.165c5.322 6.045 5.325 15.104 0 21.149l-300.547 341.354c-9.747 11.069-28.010 4.176-28.010-10.573v-186.563h-18.406c-15.286 0-30.496 0.774-45.594 2.298-112.397 11.35-218.514 64.397-302.132 150.954-2.078 2.15-4.142 4.32-6.191 6.512-7.238 7.741-14.299 15.738-21.173 23.984-2.611 3.133-5.195 6.301-7.751 9.504l-0.376 0.474c-9.438 11.834-28.508 5.158-28.508-9.978v-75.606c0-230.707 163.46-417.728 365.102-417.728h65.030v-186.56c0-14.749 18.262-21.643 28.010-10.573l300.547 341.354z"],"width":1056,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["arrow-forward"],"defaultCode":59841,"grid":0},"attrs":[{}],"properties":{"order":938,"id":26,"name":"arrow-forward","prevSize":32,"code":59841},"setIdx":0,"setId":6,"iconIdx":26},{"icon":{"paths":["M576 352c-17.674 0-32-14.326-32-32s14.326-32 32-32h224c17.674 0 32 14.327 32 32v208c0 17.674-14.326 32-32 32s-32-14.326-32-32v-130.746l-233.373 233.373c-12.496 12.496-32.758 12.496-45.254 0l-73.373-73.373-169.372 169.373c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l192-192c12.496-12.496 32.758-12.496 45.254 0l73.373 73.373 210.746-210.746h-146.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-increase"],"defaultCode":59675,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":939,"name":"arrow-increase","prevSize":32,"id":27,"code":59675},"setIdx":0,"setId":6,"iconIdx":27},{"icon":{"paths":["M297.766 105.372c12.513-12.497 32.801-12.497 45.316 0 12.512 12.497 12.512 32.758 0 45.255l-105.513 105.372h611.551c17.699 0 32.045 14.327 32.045 32v112c0 17.674-14.346 32-32.045 32-17.696 0-32.042-14.326-32.042-32v-80h-579.51l105.513 105.373c12.512 12.496 12.512 32.758 0 45.254-12.515 12.496-32.803 12.496-45.316 0l-160.212-160c-12.513-12.497-12.513-32.758 0-45.255l160.212-160zM711.568 918.627c-12.515 12.496-32.803 12.496-45.315 0-12.515-12.496-12.515-32.758 0-45.254l105.51-105.373h-611.552c-17.696 0-32.042-14.326-32.042-32v-112c0-17.674 14.346-32 32.042-32s32.042 14.326 32.042 32v80h579.509l-105.51-105.373c-12.515-12.496-12.515-32.758 0-45.254 12.512-12.496 32.8-12.496 45.315 0l160.211 160c12.512 12.496 12.512 32.758 0 45.254l-160.211 160z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-looping"],"defaultCode":59677,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":940,"name":"arrow-looping","prevSize":32,"id":28,"code":59677},"setIdx":0,"setId":6,"iconIdx":28},{"icon":{"paths":["M374.627 769.296c-12.496 12.496-32.758 12.496-45.254 0l-192-192c-12.497-12.496-12.497-32.758 0-45.254l192-192c12.496-12.499 32.758-12.499 45.254 0 12.496 12.496 12.496 32.758 0 45.254l-137.372 137.373h578.745v-192h-192c-17.674 0-32-14.328-32-32.001s14.326-32 32-32h224c17.674 0 32 14.327 32 32v256.001c0 17.674-14.326 32-32 32h-610.745l137.372 137.373c12.496 12.496 12.496 32.758 0 45.254z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-return"],"defaultCode":59678,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":941,"name":"arrow-return","prevSize":32,"id":29,"code":59678},"setIdx":0,"setId":6,"iconIdx":29},{"icon":{"paths":["M526.064 297.121c12.637-12.356 32.896-12.129 45.254 0.507l187.715 191.969c12.163 12.438 12.163 32.31 0 44.746l-187.715 191.971c-12.358 12.634-32.618 12.861-45.254 0.506-12.634-12.355-12.861-32.614-0.506-45.251l134.55-137.597h-372.109c-17.673 0-32-14.33-32-32 0-17.674 14.327-32 32-32h372.109l-134.55-137.6c-12.355-12.634-12.128-32.894 0.506-45.251z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["arrow-right"],"defaultCode":59838,"grid":0},"attrs":[{}],"properties":{"order":942,"id":30,"name":"arrow-right","prevSize":32,"code":59838},"setIdx":0,"setId":6,"iconIdx":30},{"icon":{"paths":["M297.181 498.090c-12.356-12.634-12.129-32.896 0.507-45.251l191.97-187.717c12.435-12.161 32.307-12.161 44.746 0l191.968 187.717c12.637 12.355 12.864 32.618 0.509 45.251-12.355 12.637-32.618 12.864-45.251 0.509l-137.6-134.55v372.109c0 17.674-14.326 32-32 32-17.67 0-32-14.326-32-32v-372.109l-137.597 134.55c-12.637 12.355-32.895 12.128-45.251-0.509z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-up"],"defaultCode":59680,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":943,"name":"arrow-up","prevSize":32,"id":31,"code":59680},"setIdx":0,"setId":6,"iconIdx":31},{"icon":{"paths":["M694.627 473.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-105.373-105.373v418.746c0 17.674-14.326 32-32 32s-32-14.326-32-32v-418.746l-105.373 105.373c-12.496 12.496-32.758 12.496-45.254 0s-12.497-32.758 0-45.254l160-160c12.496-12.497 32.758-12.497 45.254 0l160 160zM912 160c0-17.673-14.326-32-32-32h-768c-17.673 0-32 14.327-32 32v512c0 17.674 14.327 32 32 32h96c17.673 0 32-14.326 32-32s-14.327-32-32-32h-64v-448h704v448h-64c-17.674 0-32 14.326-32 32s14.326 32 32 32h96c17.674 0 32-14.326 32-32v-512z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["arrow-up-box"],"defaultCode":59679,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":944,"name":"arrow-up-box","prevSize":32,"id":32,"code":59679},"setIdx":0,"setId":6,"iconIdx":32},{"icon":{"paths":["M649.427 192c-26.454 0-52.016 10.804-71.005 30.343l-305.1 313.906c-31.48 32.387-49.322 76.506-49.322 122.694 0 46.186 17.842 90.304 49.322 122.694 31.451 32.355 73.91 50.362 117.984 50.362s86.531-18.006 117.981-50.362l305.101-313.907c12.317-12.672 32.576-12.96 45.248-0.643 12.675 12.317 12.963 32.576 0.646 45.251l-305.101 313.904c-43.302 44.554-102.23 69.757-163.875 69.757s-120.574-25.203-163.877-69.757c-43.273-44.522-67.428-104.717-67.428-167.299s24.155-122.781 67.428-167.302l305.1-313.905c30.845-31.735 72.874-49.737 116.899-49.737s86.054 18.002 116.899 49.737c30.816 31.704 47.971 74.514 47.971 118.968s-17.155 87.263-47.971 118.969l-305.43 313.904c-0.003 0.006 0.003-0.003 0 0-18.384 18.909-43.523 29.718-69.923 29.718-26.406 0-51.539-10.8-69.923-29.718-18.356-18.883-28.512-44.31-28.512-70.634 0-26.326 10.156-51.754 28.512-70.637l281.872-289.668c12.326-12.666 32.586-12.942 45.251-0.617s12.941 32.585 0.618 45.251l-281.846 289.638c-6.557 6.752-10.406 16.106-10.406 26.032 0 9.93 3.843 19.277 10.406 26.029 6.531 6.72 15.194 10.323 24.029 10.323s17.498-3.603 24.029-10.323l305.43-313.907c19.024-19.568 29.866-46.301 29.866-74.361 0-28.059-10.842-54.791-29.866-74.362-18.989-19.54-44.55-30.343-71.005-30.343z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["attach"],"defaultCode":59676,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":945,"name":"attach","prevSize":32,"id":33,"code":59676},"setIdx":0,"setId":6,"iconIdx":33},{"icon":{"paths":["M300.1 631.12h-113.433v-280.89h113.433l12.366-48.048c11.054-42.953 50.123-74.619 96.423-74.619h58.666v526.223h-58.666c-46.301 0-85.37-31.667-96.423-74.621l-12.366-48.045zM163.556 695.12h86.931c18.156 70.541 82.192 122.666 158.403 122.666h81.776c22.582 0 40.89-18.307 40.89-40.89v-572.444c0-22.582-18.307-40.889-40.89-40.889h-81.776c-76.211 0-140.247 52.124-158.403 122.667h-86.931c-22.582 0-40.889 18.306-40.889 40.89v327.11c0 22.582 18.307 40.89 40.889 40.89zM646.461 316.515c17.146-4.286 34.518 6.138 38.806 23.284l11.136 44.55c20.81 83.229 20.81 170.301 0 253.533l-11.136 44.55c-4.288 17.146-21.661 27.568-38.806 23.283-17.146-4.288-27.571-21.661-23.283-38.806l11.136-44.55c18.262-73.040 18.262-149.45 0.003-222.486l-11.139-44.55c-4.288-17.146 6.138-34.522 23.283-38.807zM807.472 235.936c-5.197-16.892-23.104-26.372-39.994-21.174-16.893 5.197-26.371 23.104-21.174 39.996l35.536 115.489c28.112 91.37 26.976 189.242-3.254 279.933l-32.054 96.16c-5.59 16.765 3.472 34.886 20.237 40.477 16.768 5.587 34.89-3.472 40.48-20.24l32.051-96.16c34.448-103.344 35.747-214.87 3.709-318.989l-35.536-115.491z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["audio"],"defaultCode":59683,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":946,"name":"audio","prevSize":32,"id":34,"code":59683},"setIdx":0,"setId":6,"iconIdx":34},{"icon":{"paths":["M866.128 153.127c-12.496-12.497-32.758-12.497-45.254 0l-668.246 668.245c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l668.246-668.245c12.496-12.497 12.496-32.758 0-45.255zM674.643 480.358l55.92-55.923c16.259 79.565 14.515 161.866-5.229 240.842l-11.622 46.49c-4.288 17.146-21.661 27.571-38.806 23.283-17.146-4.285-27.568-21.661-23.283-38.806l11.622-46.486c13.875-55.507 17.677-112.874 11.398-169.398zM817.162 385.923l-11.312-36.771 51.203-51.206 21.28 69.155c33.344 108.368 31.994 224.445-3.859 332.010l-33.45 100.342c-5.587 16.765-23.709 25.827-40.477 20.24-16.765-5.59-25.827-23.712-20.237-40.48l33.446-100.339c31.635-94.912 32.826-197.334 3.405-292.95zM490.666 664.333l64-64v210.346c0 23.562-19.101 42.666-42.666 42.666h-85.334c-35.459 0-68.394-10.816-95.683-29.325l46.611-46.611c14.701 7.629 31.395 11.936 49.072 11.936h64v-125.011zM128 682.678c0 19.738 13.403 36.346 31.604 41.216l62.552-62.55h-30.156v-298.666h118.99l12.367-48.049c11.843-46.020 53.696-79.953 103.309-79.953h64v158.155l64-64v-115.488c0-23.564-19.101-42.667-42.666-42.667h-85.334c-79.523 0-146.343 54.39-165.289 128h-90.71c-23.564 0-42.667 19.102-42.667 42.667v341.334z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["audio-disabled"],"defaultCode":59681,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":947,"name":"audio-disabled","prevSize":32,"id":35,"code":59681},"setIdx":0,"setId":6,"iconIdx":35},{"icon":{"paths":["M310.99 661.344h-118.99v-298.666h118.99l12.367-48.049c11.843-46.020 53.696-79.953 103.309-79.953h64v554.667h-64c-49.613 0-91.466-33.933-103.309-79.952l-12.367-48.048zM170.667 725.344h90.71c18.946 73.61 85.766 128 165.289 128h85.334c23.565 0 42.666-19.104 42.666-42.666v-597.335c0-23.564-19.101-42.667-42.666-42.667h-85.334c-79.523 0-146.343 54.39-165.289 128h-90.71c-23.564 0-42.667 19.102-42.667 42.667v341.334c0 23.562 19.103 42.666 42.667 42.666zM886.627 393.373c12.496 12.496 12.496 32.758 0 45.254l-73.373 73.373 73.373 73.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-73.373-73.373-73.373 73.373c-12.496 12.496-32.758 12.496-45.254 0s-12.496-32.758 0-45.254l73.373-73.373-73.373-73.373c-12.496-12.496-12.496-32.758 0-45.254s32.758-12.496 45.254 0l73.373 73.373 73.373-73.373c12.496-12.496 32.758-12.496 45.254 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["audio-unavailable"],"defaultCode":59682,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":948,"name":"audio-unavailable","prevSize":32,"id":36,"code":59682},"setIdx":0,"setId":6,"iconIdx":36},{"icon":{"paths":["M418.704 128c-35.344 0-64 28.654-64 64v226.637c20.774-2.822 42.134-3.456 64-1.526v-225.11h176v180.707c0 35.344 28.656 64 64 64h176v331.293h-120.554c-17.155 22.179-36.323 43.869-57.312 64h177.866c35.347 0 64-28.653 64-64v-363.293c0-6.413-1.923-12.675-5.526-17.978l-156.63-230.681c-11.914-17.544-31.741-28.049-52.947-28.049h-264.896zM658.704 372.707v-180.707h24.896l122.698 180.707h-147.594zM167.939 668.547c120.524 156.138 218.24 174.586 285.133 158.739 73.293-17.36 139.232-81.648 183.466-151.763-115.155-155.869-211.581-174.589-279.149-158.915-74.362 17.251-142.707 81.683-189.45 151.939zM104.428 649.037c100.621-162.8 337.62-357.19 593.252 1.789 9.072 12.739 10.32 29.818 2.422 43.315-95.27 162.854-326.394 358.346-593.234-0.224-9.745-13.094-11.022-30.995-2.44-44.88zM401.664 735.994c31.514 0 60.269-26.858 60.269-64 0-37.146-28.755-64-60.269-64-31.51 0-60.266 26.854-60.266 64 0 37.142 28.755 64 60.266 64zM401.664 799.994c68.634 0 124.269-57.309 124.269-128 0-70.694-55.635-128-124.269-128-68.63 0-124.267 57.306-124.267 128 0 70.691 55.636 128 124.267 128z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["auditing"],"defaultCode":59684,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":949,"name":"auditing","prevSize":32,"id":37,"code":59684},"setIdx":0,"setId":6,"iconIdx":37},{"icon":{"paths":["M224 224c-17.673 0-32 14.327-32 32v544c0 17.674 14.327 32 32 32h544c17.674 0 32-14.326 32-32v-544c0-17.673-14.326-32-32-32h-544zM128 256c0-53.019 42.981-96 96-96h544c53.021 0 96 42.981 96 96v544c0 53.021-42.979 96-96 96h-544c-53.019 0-96-42.979-96-96v-544zM608 460.813c0 41.798-26.714 77.357-64 90.538v133.462h-64v-133.462c-37.286-13.181-64-48.739-64-90.538 0-53.021 42.979-96 96-96s96 42.979 96 96zM608 588.826c38.861-29.19 64-75.667 64-128.013 0-88.365-71.635-160-160-160s-160 71.636-160 160c0 52.346 25.139 98.822 64 128.013v127.987c0 17.674 14.326 32 32 32h128c17.674 0 32-14.326 32-32v-127.987z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["auth"],"defaultCode":59685,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":950,"name":"auth","prevSize":32,"id":38,"code":59685},"setIdx":0,"setId":6,"iconIdx":38},{"icon":{"paths":["M513.35 554.019c66.467 0 120.349-52.493 120.349-117.242 0-64.752-53.882-117.243-120.349-117.243-66.464 0-120.346 52.491-120.346 117.243 0 64.749 53.882 117.242 120.346 117.242zM513.35 490.019c-32.704 0-56.346-25.405-56.346-53.242 0-27.84 23.642-53.242 56.346-53.242 32.707 0 56.349 25.402 56.349 53.242 0 27.837-23.642 53.242-56.349 53.242z","M365.478 894.144h-172.126c-17.673 0-32-14.33-32-32v-702.144c0-17.673 14.327-32 32-32h640.001c17.674 0 32 14.327 32 32v702.144c0 17.67-14.326 32-32 32h-172.128c-6.24 1.274-12.701 1.942-19.318 1.942h-257.11c-6.618 0-13.078-0.669-19.318-1.942zM225.353 830.144h68.244c-3.114-9.456-4.799-19.558-4.799-30.058v-93.446c0-56.109 37.881-105.142 92.172-119.309 19.171-5.002 39.264-5.312 58.579-0.902l42.778 9.766c20.051 4.579 40.909 4.259 60.81-0.934l28.070-7.325c20.694-5.398 42.384-5.734 63.232-0.973 60.534 13.821 103.469 67.664 103.469 129.754v83.37c0 10.499-1.686 20.602-4.8 30.058h68.246v-638.144h-576.001v638.144zM652.918 830.144c12.246-4.49 20.989-16.253 20.989-30.058v-83.37c0-32.234-22.288-60.186-53.715-67.36-10.822-2.47-22.083-2.298-32.826 0.506l-28.070 7.325c-29.853 7.789-61.139 8.272-91.216 1.405l-42.774-9.766c-9.293-2.122-18.957-1.974-28.176 0.432-26.112 6.813-44.333 30.397-44.333 57.382v93.446c0 13.805 8.742 25.568 20.989 30.058h279.133z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["avatar"],"defaultCode":59686,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":951,"name":"avatar","prevSize":32,"id":39,"code":59686},"setIdx":0,"setId":6,"iconIdx":39},{"icon":{"paths":["M737.779 361.376c12.499 12.496 12.499 32.758 0 45.254l-110.947 110.95 110.947 110.947c12.499 12.496 12.499 32.758 0 45.254-12.496 12.499-32.758 12.499-45.254 0l-110.947-110.947-110.95 110.947c-12.496 12.499-32.758 12.499-45.254 0-12.496-12.496-12.496-32.758 0-45.254l110.95-110.947-110.95-110.95c-12.496-12.496-12.496-32.758 0-45.254s32.758-12.496 45.254 0l110.95 110.95 110.947-110.95c12.496-12.496 32.758-12.496 45.254 0z","M312.246 218.073c12.061-16.393 31.2-26.073 51.552-26.073h468.202c35.347 0 64 28.654 64 64v512c0 35.347-28.653 64-64 64h-468.202c-20.352 0-39.491-9.68-51.552-26.074l-188.343-256c-16.598-22.56-16.598-53.293 0-75.853l188.343-256.001zM363.798 256l-188.343 256 188.343 256h468.202v-512h-468.202z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["backspace"],"defaultCode":59687,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":952,"name":"backspace","prevSize":32,"id":40,"code":59687},"setIdx":0,"setId":6,"iconIdx":40},{"icon":{"paths":["M896 512c0-212.077-171.923-384-384-384s-384 171.923-384 384c0 212.077 171.923 384 384 384s384-171.923 384-384zM480 544v286.419c-56.483-5.606-108.646-25.904-152.618-57.011 46.403-78.992 67.251-156.97 71.734-229.408h80.883zM334.8 544c-4.282 58.995-21.005 122.198-56.631 186.458-46.616-49.875-77.462-114.678-84.589-186.458h141.22zM398.954 480c-6.192-93.13-37.366-173.574-70.627-230.072 43.773-30.733 95.594-50.78 151.674-56.348v286.42h-81.046zM279.095 292.556c26.251 47.457 50.118 112.532 55.644 187.444h-141.159c7.174-72.253 38.381-137.437 85.515-187.444zM544 544h80.883c4.483 72.438 25.331 150.416 71.734 229.408-43.971 31.107-96.134 51.405-152.618 57.011v-286.419zM830.419 544c-7.126 71.779-37.971 136.582-84.589 186.458-35.626-64.259-52.349-127.462-56.63-186.458h141.219zM830.419 480h-141.158c5.526-74.912 29.395-139.987 55.645-187.444 47.133 50.008 78.339 115.192 85.514 187.444zM544 193.58c56.080 5.568 107.901 25.614 151.674 56.348-33.261 56.499-64.435 136.943-70.627 230.072h-81.046v-286.42z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["basketball"],"defaultCode":59776,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":953,"id":41,"name":"basketball","prevSize":32,"code":59776},"setIdx":0,"setId":6,"iconIdx":41},{"icon":{"paths":["M233.358 169.364c6.002-6.001 14.141-9.372 22.629-9.372l304.020 0.020c0 0 0.003 0 0 0 46.678 0 91.446 18.543 124.451 51.549 33.008 33.006 51.549 77.772 51.549 124.452s-18.541 91.443-51.549 124.451c-0.803 0.803-1.616 1.6-2.435 2.387 22.867 9.552 43.888 23.533 61.75 41.395 36.006 36.006 56.234 84.845 56.234 135.766s-20.227 99.757-56.234 135.763c-36.006 36.006-84.845 56.237-135.766 56.237l-352.024-0.019c-17.673-0.003-31.998-14.33-31.998-32v-608.001c0-8.487 3.372-16.627 9.373-22.628zM560.006 448.013c29.706 0 58.192-11.802 79.197-32.806 21.005-21.002 32.803-49.491 32.803-79.194 0-29.705-11.798-58.193-32.803-79.197s-49.491-32.804-79.197-32.804l-272.022-0.018v224.019h272.022zM287.984 512.013v255.981l320.022 0.019c0 0 0.003 0 0 0 33.949 0 66.506-13.488 90.512-37.491 24.003-24.006 37.488-56.563 37.488-90.509 0-33.949-13.485-66.506-37.488-90.512-24.006-24.003-56.563-37.488-90.512-37.488h-320.022z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["bold"],"defaultCode":59688,"grid":0},"attrs":[{}],"properties":{"order":954,"name":"bold","prevSize":32,"id":42,"code":59688},"setIdx":0,"setId":6,"iconIdx":42},{"icon":{"paths":["M352 445.437c0-17.67 14.326-32 32-32h256c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M352 322.557c0-17.672 14.326-31.999 32-31.999h256c17.674 0 32 14.327 32 31.999 0 17.674-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M864 679.68c0 17.674-14.326 32-32 32h-18.509c-8.218 40.547-8.218 82.333 0 122.88h19.789c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72h-545.28c-70.692 0-128-55.014-128-122.88v-453.12c0-106.038 85.961-192 192-192h480c17.674 0 32 14.327 32 32v519.68zM748.419 834.56c-6.787-40.678-6.787-82.202 0-122.88h-460.419c-35.346 0-64 27.507-64 61.44s28.654 61.44 64 61.44h460.419zM224 647.68h576v-455.68h-448c-70.692 0-128 57.308-128 128v327.68z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["book"],"defaultCode":59689,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":955,"name":"book","prevSize":32,"id":43,"code":59689},"setIdx":0,"setId":6,"iconIdx":43},{"icon":{"paths":["M193.603 416h-33.603c-17.673 0-32 14.326-32 32s14.327 32 32 32h704c17.674 0 32-14.326 32-32s-14.326-32-32-32h-33.603c-7.347-73.117-39.702-141.853-92.122-194.274-60.013-60.012-141.405-93.726-226.275-93.726s-166.262 33.714-226.274 93.726c-52.421 52.421-84.777 121.157-92.123 194.274zM330.979 266.981c48.010-48.010 113.126-74.981 181.021-74.981s133.011 26.971 181.021 74.981c40.403 40.404 65.907 92.923 72.973 149.019h-507.987c7.066-56.096 32.57-108.615 72.972-149.019z","M877.242 605.133c16.090-7.315 23.203-26.285 15.891-42.374-7.315-16.090-26.285-23.203-42.374-15.891l-127.558 57.981-127.558-57.981c-8.413-3.824-18.070-3.824-26.483 0l-127.558 57.981-127.558-57.981c-8.413-3.824-18.070-3.824-26.483 0l-140.8 64c-16.089 7.315-23.203 26.285-15.89 42.374s26.284 23.203 42.373 15.891l18.758-8.528v29.68c0 38.102 15.908 74.31 43.672 100.752 27.712 26.394 64.978 40.963 103.528 40.963h345.6c38.55 0 75.814-14.57 103.526-40.963 27.766-26.442 43.674-62.65 43.674-100.752v-64.589l45.242-20.563zM736.442 669.133l31.558-14.346v35.498c0 20.093-8.368 39.699-23.811 54.41-15.494 14.758-36.832 23.306-59.389 23.306h-345.6c-22.556 0-43.893-8.547-59.39-23.306-15.444-14.71-23.81-34.317-23.81-54.41v-58.771l44.8-20.362 127.558 57.981c8.413 3.824 18.070 3.824 26.483 0l127.558-57.981 127.558 57.981c8.413 3.824 18.070 3.824 26.483 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["burger"],"defaultCode":59813,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":956,"id":44,"name":"burger","prevSize":32,"code":59813},"setIdx":0,"setId":6,"iconIdx":44},{"icon":{"paths":["M224 224h320v576h-96v-112c0-8.835-7.165-16-16-16h-96c-8.835 0-16 7.165-16 16v112h-96v-576zM608 448h192v352h-192v-352zM832 384h-224v-192c0-17.673-14.326-32-32-32h-384c-17.673 0-32 14.327-32 32v640c0 17.674 14.327 32 32 32h640c17.674 0 32-14.326 32-32v-416c0-17.674-14.326-32-32-32zM304 288c-8.836 0-16 7.164-16 16v32c0 8.835 7.164 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.836-7.165-16-16-16h-32zM288 432c0-8.835 7.164-16 16-16h32c8.835 0 16 7.165 16 16v32c0 8.835-7.165 16-16 16h-32c-8.836 0-16-7.165-16-16v-32zM304 544c-8.836 0-16 7.165-16 16v32c0 8.835 7.164 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.835-7.165-16-16-16h-32zM416 304c0-8.836 7.165-16 16-16h32c8.835 0 16 7.164 16 16v32c0 8.835-7.165 16-16 16h-32c-8.835 0-16-7.165-16-16v-32zM432 416c-8.835 0-16 7.165-16 16v32c0 8.835 7.165 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.835-7.165-16-16-16h-32zM416 560c0-8.835 7.165-16 16-16h32c8.835 0 16 7.165 16 16v32c0 8.835-7.165 16-16 16h-32c-8.835 0-16-7.165-16-16v-32zM688 512c-8.835 0-16 7.165-16 16v32c0 8.835 7.165 16 16 16h32c8.835 0 16-7.165 16-16v-32c0-8.835-7.165-16-16-16h-32zM672 656c0-8.835 7.165-16 16-16h32c8.835 0 16 7.165 16 16v32c0 8.835-7.165 16-16 16h-32c-8.835 0-16-7.165-16-16v-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["business"],"defaultCode":59690,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":957,"name":"business","prevSize":32,"id":45,"code":59690},"setIdx":0,"setId":6,"iconIdx":45},{"icon":{"paths":["M277.831 157.44c0-16.259 13.181-29.44 29.44-29.44s29.439 13.181 29.439 29.44v58.876h353.28v-58.876c0-16.259 13.181-29.44 29.44-29.44s29.44 13.181 29.44 29.44v58.876h85.76c17.674 0 32 14.327 32 32v583.68c0 17.674-14.326 32-32 32h-642.559c-17.673 0-32-14.326-32-32v-583.68c0-1.105 0.056-2.196 0.165-3.272 1.639-16.136 15.266-28.728 31.835-28.728h85.76v-58.876zM802.63 392.957h-578.559v407.040h578.559v-407.040zM425.034 644.474c0-8.835 7.162-16 16-16h26.88c8.835 0 16 7.165 16 16v26.88c0 8.838-7.165 16-16 16h-26.88c-8.838 0-16-7.162-16-16v-26.88zM323.27 510.72c-8.836 0-15.999 7.162-15.999 16v26.88c0 8.835 7.163 16 15.999 16h26.88c8.838 0 16-7.165 16-16v-26.88c0-8.838-7.162-16-16-16h-26.88zM542.79 526.72c0-8.835 7.165-16 16-16h26.88c8.838 0 16 7.165 16 16v26.88c0 8.835-7.162 16-16 16h-26.88c-8.835 0-16-7.165-16-16v-26.88zM323.27 628.474c-8.835 0-15.999 7.165-15.999 16v26.88c0 8.838 7.164 16 15.999 16h26.88c8.838 0 16-7.162 16-16v-26.88c0-8.835-7.162-16-16-16h-26.88zM542.79 644.474c0-8.835 7.165-16 16-16h26.88c8.838 0 16 7.165 16 16v26.88c0 8.838-7.162 16-16 16h-26.88c-8.835 0-16-7.162-16-16v-26.88zM441.030 510.72c-8.835 0-16 7.165-16 16v26.88c0 8.835 7.165 16 16 16h26.88c8.838 0 16-7.165 16-16v-26.88c0-8.835-7.162-16-16-16h-26.88zM660.55 526.72c0-8.835 7.165-16 16-16h26.88c8.838 0 16 7.165 16 16v26.88c0 8.835-7.162 16-16 16h-26.88c-8.835 0-16-7.165-16-16v-26.88zM676.55 628.474c-8.835 0-16 7.165-16 16v26.88c0 8.838 7.165 16 16 16h26.88c8.838 0 16-7.162 16-16v-26.88c0-8.835-7.162-16-16-16h-26.88z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["calendar"],"defaultCode":59691,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":958,"name":"calendar","prevSize":32,"id":46,"code":59691},"setIdx":0,"setId":6,"iconIdx":46},{"icon":{"paths":["M256 202.672c0-17.673 19.102-32 42.667-32h255.999c23.565 0 42.669 14.327 42.669 32s-19.104 32-42.669 32h-255.999c-23.564 0-42.667-14.327-42.667-32zM160 383.994c0-5.891 4.776-10.666 10.667-10.666h511.999c5.891 0 10.669 4.774 10.669 10.666v85.334c0 11.376 6.038 21.894 15.859 27.632s21.949 5.83 31.856 0.243l97.83-55.165c2.531-1.427 4.858-3.19 6.912-5.248 6.72-6.717 18.208-1.958 18.208 7.546v263.318c0 9.504-11.488 14.262-18.208 7.542-2.054-2.054-4.381-3.818-6.912-5.245l-97.83-55.165c-9.907-5.587-22.035-5.494-31.856 0.243s-15.859 16.256-15.859 27.632v85.331c0 5.891-4.778 10.669-10.669 10.669h-511.999c-5.891 0-10.667-4.778-10.667-10.669v-384zM170.667 309.328c-41.237 0-74.667 33.43-74.667 74.666v384c0 41.238 33.429 74.669 74.667 74.669h511.999c41.238 0 74.669-33.43 74.669-74.669v-30.55l46.778 26.374c47.418 41.99 123.888 8.701 123.888-56.163v-263.318c0-64.864-76.47-98.157-123.888-56.166l-46.778 26.378v-30.554c0-41.235-33.43-74.666-74.669-74.666h-511.999z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["camera"],"defaultCode":59696,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":959,"name":"camera","prevSize":32,"id":47,"code":59696},"setIdx":0,"setId":6,"iconIdx":47},{"icon":{"paths":["M866.128 153.126c-12.496-12.497-32.758-12.497-45.254 0l-668.246 668.246c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l668.246-668.246c12.496-12.497 12.496-32.758 0-45.255zM298.667 170.671c-23.564 0-42.667 14.327-42.667 32s19.102 32 42.667 32h255.999c23.565 0 42.669-14.327 42.669-32s-19.104-32-42.669-32h-255.999zM574.173 309.327h-403.506c-41.237 0-74.667 33.428-74.667 74.667v384c0 6.010 0.71 11.856 2.051 17.453l61.949-61.949v-339.504c0-5.891 4.776-10.666 10.667-10.666h339.506l64-64.001zM376.339 778.659h306.326c5.891 0 10.669-4.774 10.669-10.666v-85.334c0-11.373 6.038-21.891 15.859-27.629s21.949-5.83 31.856-0.243l97.83 55.162c2.531 1.427 4.858 3.194 6.912 5.248 6.72 6.72 18.208 1.962 18.208-7.542v-263.322c0-9.501-11.488-14.262-18.208-7.542-2.054 2.054-4.381 3.821-6.912 5.248l-97.83 55.162c-9.907 5.587-22.035 5.494-31.856-0.243-9.821-5.734-15.859-16.256-15.859-27.629v-7.661l110.778-73.498c47.418-41.99 123.888-8.701 123.888 56.163v263.322c0 64.864-76.47 98.154-123.888 56.163l-46.778-26.378v30.554c0 41.238-33.43 74.666-74.669 74.666h-370.327l64.001-64z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["camera-disabled"],"defaultCode":59692,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":960,"name":"camera-disabled","prevSize":32,"id":48,"code":59692},"setIdx":0,"setId":6,"iconIdx":48},{"icon":{"paths":["M288 224c-17.673 0-32 14.327-32 32s14.327 32 32 32h256c17.674 0 32-14.327 32-32s-14.326-32-32-32h-256z","M170.667 341.328c-23.564 0-42.667 19.104-42.667 42.666v384c0 23.565 19.102 42.669 42.667 42.669h511.999c23.565 0 42.669-19.104 42.669-42.669v-128l97.83 97.83c26.877 26.88 72.835 7.843 72.835-30.17v-263.318c0-38.013-45.958-57.050-72.835-30.173l-97.83 97.83v-128c0-23.562-19.104-42.666-42.669-42.666h-511.999z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["camera-filled"],"defaultCode":59693,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":961,"name":"camera-filled","prevSize":32,"id":49,"code":59693},"setIdx":0,"setId":6,"iconIdx":49},{"icon":{"paths":["M196.731 191.997c0-15.807 12.814-28.622 28.622-28.622h128.001c15.805 0 28.621 12.814 28.621 28.622s-12.816 28.621-28.621 28.621h-128.001c-15.807 0-28.622-12.814-28.622-28.621z","M737.354 559.997c0 97.203-78.8 176-176 176-97.203 0-176-78.797-176-176s78.797-176 176-176c97.2 0 176 78.797 176 176zM673.354 559.997c0-61.856-50.144-112-112-112s-112 50.144-112 112c0 61.856 50.144 112 112 112s112-50.144 112-112z","M193.353 255.997c-35.346 0-64 28.654-64 64v448c0 35.347 28.654 64 64 64h640.001c35.344 0 64-28.653 64-64v-448c0-35.346-28.656-64-64-64h-640.001zM833.354 319.997v448h-640.001v-448h640.001z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["camera-photo"],"defaultCode":59694,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":962,"name":"camera-photo","prevSize":32,"id":50,"code":59694},"setIdx":0,"setId":6,"iconIdx":50},{"icon":{"paths":["M298.667 170.672c-23.564 0-42.667 14.327-42.667 32s19.102 32 42.667 32h255.999c23.565 0 42.669-14.327 42.669-32s-19.104-32-42.669-32h-255.999z","M545.712 503.453c11.267-11.267 11.19-29.61-0.17-40.97s-29.706-11.437-40.973-0.17l-71.402 71.402-71.994-71.997c-11.363-11.36-29.706-11.437-40.973-0.17s-11.19 29.61 0.17 40.97l71.997 71.997-71.402 71.402c-11.266 11.267-11.19 29.61 0.17 40.97 11.363 11.36 29.706 11.437 40.973 0.17l71.402-71.402 71.997 71.997c11.36 11.36 29.702 11.437 40.97 0.17s11.19-29.61-0.17-40.97l-71.997-71.997 71.402-71.402z","M96 383.994c0-41.235 33.429-74.666 74.667-74.666h511.999c41.238 0 74.669 33.43 74.669 74.666v30.554l46.778-26.378c47.418-41.99 123.888-8.698 123.888 56.166v263.318c0 64.864-76.47 98.154-123.888 56.163l-46.778-26.374v30.55c0 41.238-33.43 74.669-74.669 74.669h-511.999c-41.237 0-74.667-33.43-74.667-74.669v-384zM170.667 373.328c-5.891 0-10.667 4.774-10.667 10.666v384c0 5.891 4.776 10.669 10.667 10.669h511.999c5.891 0 10.669-4.778 10.669-10.669v-85.331c0-11.376 6.038-21.894 15.859-27.632s21.949-5.83 31.856-0.243l97.83 55.165c2.531 1.427 4.858 3.19 6.912 5.245 6.72 6.72 18.208 1.962 18.208-7.542v-263.318c0-9.504-11.488-14.262-18.208-7.546-2.054 2.058-4.381 3.821-6.912 5.248l-97.83 55.165c-9.907 5.587-22.035 5.494-31.856-0.243s-15.859-16.256-15.859-27.632v-85.334c0-5.891-4.778-10.666-10.669-10.666h-511.999z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["camera-unavailable"],"defaultCode":59695,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":963,"name":"camera-unavailable","prevSize":32,"id":51,"code":59695},"setIdx":0,"setId":6,"iconIdx":51},{"icon":{"paths":["M224.248 304.026c-49.642 68.947-66.502 152.646-66.502 207.968v1.453l-0.132 1.446c-9.702 106.717 28.59 181.93 90.135 234.006 62.938 53.254 152.152 83.731 244.197 93.958 91.965 10.218 193.27 1.446 273.306-15.482 40.022-8.461 73.616-18.733 97.443-29.075 9.245-4.013 16.438-7.786 21.734-11.126-2.464-1.565-5.446-3.306-9.002-5.197-9.222-4.912-19.779-9.578-30.733-14.368l-1.914-0.835c-9.667-4.221-20.47-8.941-28.656-13.517-14.835-8.298-29.389-17.734-40.006-27.776-5.222-4.941-11.165-11.571-15.146-19.827-4.208-8.742-7.226-21.792-1.306-35.597 31.978-74.621 47.178-115.494 54.538-142.483 6.874-25.2 6.874-37.888 6.874-58.064v-0.182c0-16.035-9.318-89.517-55.811-158.032-45.018-66.338-125.99-129.968-274.854-129.968-134.637 0-215.698 55.382-264.165 122.698zM172.309 266.63c60.333-83.796 160.606-149.302 316.103-149.302 171.136 0 271.494 75.037 327.811 158.032 54.842 80.819 66.854 167.338 66.854 193.968 0 22.384-0.022 41.696-9.126 75.088-8.131 29.805-23.485 70.928-51.946 137.923 5.261 4.166 13.072 9.306 23.36 15.062 5.315 2.97 13.485 6.55 24.963 11.568 10.653 4.659 23.437 10.266 35.174 16.515 11.258 5.994 24.416 14.029 34.202 24.538 10.234 10.992 20.973 29.846 13.299 52.864-5.056 15.168-16.794 25.939-26.576 33.094-10.63 7.776-23.818 14.762-38.253 21.030-29.008 12.589-67.030 23.962-109.683 32.982-85.309 18.038-193.581 27.587-293.616 16.474-99.955-11.107-202.74-44.634-278.468-108.71-76.833-65.011-123.811-159.994-112.66-287.222 0.286-65.549 19.841-162.349 78.561-243.904zM493.744 320c17.674 0 32 14.326 32 32v224c0 17.674-14.326 32-32 32s-32-14.326-32-32v-224c0-17.674 14.326-32 32-32zM525.744 672c0-17.674-14.326-32-32-32s-32 14.326-32 32c0 17.674 14.326 32 32 32s32-14.326 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["canned-response"],"defaultCode":59697,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":964,"name":"canned-response","prevSize":32,"id":52,"code":59697},"setIdx":0,"setId":6,"iconIdx":52},{"icon":{"paths":["M193.352 181.331c-53.020 0-96 42.981-96 96v469.335c0 53.018 42.98 96 96 96h639.999c53.021 0 96-42.982 96-96v-469.335c0-53.019-42.979-96-96-96h-639.999zM161.352 277.331c0-17.673 14.327-32 32-32h639.999c17.674 0 32 14.327 32 32v202.673h-703.999v-202.673zM161.352 544.003h703.999v202.662c0 17.67-14.326 32-32 32h-639.999c-17.673 0-32-14.33-32-32v-202.662zM812.016 661.331c0-35.347-28.653-64-64-64-35.344 0-64 28.653-64 64s28.656 64 64 64c35.347 0 64-28.653 64-64z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["card"],"defaultCode":59698,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":965,"name":"card","prevSize":32,"id":53,"code":59698},"setIdx":0,"setId":6,"iconIdx":53},{"icon":{"paths":["M368 182.4c0-17.673-14.326-32-32-32s-32 14.327-32 32v144h-144c-17.673 0-32 14.326-32 32s14.327 32 32 32h144v288h-144c-17.673 0-32 14.326-32 32s14.327 32 32 32h144v144c0 17.674 14.327 32 32 32s32-14.326 32-32v-144h288v144c0 17.674 14.326 32 32 32s32-14.326 32-32v-144h144c17.674 0 32-14.326 32-32s-14.326-32-32-32h-144v-80h-64v80h-288v-288h80v-64h-80v-144z","M640.515 327.283c-15.328-3.59-31.306-3.338-46.512 0.733-41.763 11.187-70.803 49.030-70.803 92.269v35.539c0 36.003 29.187 65.194 65.194 65.194h210.413c36.006 0 65.194-29.19 65.194-65.194v-28.336c0-47.667-33.040-88.957-79.27-99.792-16.413-3.846-33.613-3.603-49.946 0.771l-25.827 6.918c-10.381 2.781-21.286 2.95-31.747 0.499l-36.694-8.602z","M782.637 217.037c0 49.174-39.862 89.037-89.037 89.037s-89.037-39.863-89.037-89.037c0-49.174 39.862-89.037 89.037-89.037s89.037 39.863 89.037 89.037z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["channel-auto-join"],"defaultCode":59746,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":966,"name":"channel-auto-join","prevSize":32,"id":54,"code":59746},"setIdx":0,"setId":6,"iconIdx":54},{"icon":{"paths":["M236.709 162.578c11.779-5.037 25.426-2.564 34.688 6.286l150.709 144c6.32 6.037 9.894 14.396 9.894 23.136s-3.574 17.101-9.894 23.136l-150.709 144c-9.262 8.851-22.909 11.325-34.688 6.288s-19.419-16.614-19.419-29.424v-112h-73.29c-17.673 0-32-14.326-32-32 0-17.672 14.327-31.999 32-31.999h73.29v-112c0-12.81 7.64-24.386 19.419-29.423zM320 368.179v-0.179h0.189l-0.189 0.179zM320.189 304.001h-0.189v-0.179l0.189 0.179z","M492.899 303.258c8.762-9.388 21.245-15.258 35.101-15.258 26.509 0 48 21.49 48 48s-21.491 48-48 48c-16.582 0-31.203-8.41-39.824-21.197l-43.098 48.483c20.49 22.554 50.051 36.714 82.922 36.714 61.856 0 112-50.144 112-112s-50.144-112-112-112c-25.549 0-49.098 8.554-67.942 22.955l32.842 56.303z","M145.615 483.229l32.174 64.349c-0.861 3.040-1.318 6.23-1.318 9.501v44.688c0 17.674 14.327 32 32 32h79.53v64h-79.53c-53.019 0-96-42.979-96-96v-44.688c0-28.848 12.515-55.488 33.144-73.85z","M625.267 640h-0.797c0.259 0.598 0.525 1.194 0.797 1.786v-1.786z","M424.714 640h-0.797v1.786c0.272-0.592 0.538-1.187 0.797-1.786z","M477.901 494.515c-28.56-10.957-60.291-10.211-88.307 2.067-42.282 18.534-69.594 60.326-69.594 106.49v132.928c0 53.021 42.979 96 96 96h224c53.021 0 96-42.979 96-96v-125.062c0-51.162-31.536-97.034-79.306-115.354-30.352-11.642-64.067-10.851-93.84 2.198l-2.070 0.909c-21.523 9.434-45.901 10.006-67.843 1.59l-15.040-5.766zM415.286 555.2c12.595-5.52 26.858-5.856 39.699-0.931l15.040 5.77c37.664 14.445 79.504 13.462 116.451-2.73l2.070-0.909c14.349-6.288 30.602-6.669 45.229-1.059 23.024 8.829 38.224 30.938 38.224 55.597v125.062c0 17.674-14.326 32-32 32h-224c-17.674 0-32-14.326-32-32v-132.928c0-20.752 12.278-39.539 31.286-47.872z","M864 320c0-53.019-42.979-96-96-96s-96 42.981-96 96c0 53.021 42.979 96 96 96s96-42.979 96-96zM800 320c0 17.674-14.326 32-32 32s-32-14.326-32-32c0-17.673 14.326-32 32-32s32 14.327 32 32z","M840.714 697.766h-72.714v-64h72.714c17.674 0 32-14.326 32-32v-44.688c0-15.050-9.664-28.394-23.958-33.091-7.536-2.474-15.69-2.304-23.114 0.483l-4.554 1.709c-19.77 7.421-40.89 9.978-61.619 7.632-12.438-31.683-37.722-57.549-70.774-70.227-1.754-0.672-3.52-1.302-5.296-1.894 18.058-5.312 37.36-5.040 55.344 0.867l14.182 4.659c14.886 4.893 30.998 4.554 45.667-0.954l4.554-1.709c21.069-7.91 44.205-8.394 65.581-1.37 40.566 13.325 67.987 51.197 67.987 93.894v44.688c0 53.021-42.982 96-96 96z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["channel-move-to-team"],"defaultCode":59747,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":967,"name":"channel-move-to-team","prevSize":32,"id":55,"code":59747},"setIdx":0,"setId":6,"iconIdx":55},{"icon":{"paths":["M368 160c0-17.673-14.326-32-32-32s-32 14.327-32 32v144h-144c-17.673 0-32 14.327-32 32s14.327 32 32 32h144v288h-144c-17.673 0-32 14.326-32 32s14.327 32 32 32h144v144c0 17.674 14.327 32 32 32s32-14.326 32-32v-144h288v144c0 17.674 14.326 32 32 32s32-14.326 32-32v-144h144c17.674 0 32-14.326 32-32s-14.326-32-32-32h-144v-80h-58.666c-1.786 0-3.565-0.042-5.334-0.118v80.118h-288v-288h168.79c-0.522-5.264-0.79-10.602-0.79-16v-48h-168v-144z","M760 96c-57.437 0-104 46.562-104 104v56h-24c-17.674 0-32 14.327-32 32v192c0 17.674 14.326 32 32 32h256c17.674 0 32-14.326 32-32v-192c0-17.673-14.326-32-32-32h-24v-56c0-57.438-46.563-104-104-104zM800 255.238h-80v-55.238c0-22.092 17.907-40 40-40s40 17.908 40 40v55.238z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["channel-private"],"defaultCode":59699,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":968,"name":"channel-private","prevSize":32,"id":56,"code":59699},"setIdx":0,"setId":6,"iconIdx":56},{"icon":{"paths":["M336 128c17.674 0 32 14.327 32 32v144h288v-144c0-17.673 14.326-32 32-32s32 14.327 32 32v144h144c17.674 0 32 14.327 32 32s-14.326 32-32 32h-144v288h144c17.674 0 32 14.326 32 32s-14.326 32-32 32h-144v144c0 17.674-14.326 32-32 32s-32-14.326-32-32v-144h-288v144c0 17.674-14.326 32-32 32s-32-14.326-32-32v-144h-144c-17.673 0-32-14.326-32-32s14.327-32 32-32h144v-288h-144c-17.673 0-32-14.326-32-32s14.327-32 32-32h144v-144c0-17.673 14.327-32 32-32zM368 368v288h288v-288h-288z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["channel-public"],"defaultCode":59700,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":969,"name":"channel-public","prevSize":32,"id":57,"code":59700},"setIdx":0,"setId":6,"iconIdx":57},{"icon":{"paths":["M886.627 105.372c12.496 12.497 12.496 32.758 0 45.255l-89.373 89.372 89.373 89.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-89.373-89.372-89.373 89.372c-12.496 12.496-32.758 12.496-45.254 0s-12.496-32.758 0-45.254l89.373-89.373-89.373-89.372c-12.496-12.497-12.496-32.758 0-45.255s32.758-12.497 45.254 0l89.373 89.373 89.373-89.373c12.496-12.497 32.758-12.497 45.254 0zM226.501 304.042c-49.642 68.947-66.502 152.646-66.502 207.968v1.453l-0.132 1.446c-9.701 106.717 28.59 181.93 90.135 234.006 62.938 53.254 152.151 83.731 244.196 93.958 91.968 10.218 193.27 1.446 273.309-15.482 40.019-8.461 73.613-18.733 97.44-29.075 9.245-4.013 16.438-7.786 21.738-11.126-2.467-1.565-5.446-3.306-9.005-5.2-9.222-4.909-19.776-9.574-30.733-14.365l-1.917-0.838c-9.667-4.221-20.47-8.938-28.653-13.517-14.835-8.294-29.389-17.731-40.003-27.773-5.226-4.941-11.168-11.571-15.146-19.827-4.211-8.742-7.226-21.792-1.309-35.6 42.086-98.205 54.957-137.722 59.219-163.318 2.906-17.434 19.392-29.21 36.822-26.307 17.434 2.906 29.213 19.389 26.307 36.822-5.453 32.749-20.333 76.41-58.006 165.088 5.261 4.166 13.069 9.306 23.357 15.059 5.315 2.973 13.485 6.554 24.963 11.571 10.656 4.656 23.437 10.266 35.174 16.515 11.261 5.994 24.419 14.029 34.202 24.538 10.234 10.992 20.973 29.846 13.299 52.864-5.053 15.168-16.794 25.939-26.576 33.094-10.627 7.776-23.814 14.762-38.253 21.027-29.005 12.592-67.027 23.965-109.68 32.986-85.312 18.038-193.584 27.587-293.616 16.47-99.955-11.104-202.742-44.63-278.471-108.707-76.833-65.014-123.811-159.997-112.66-287.222 0.286-65.549 19.841-162.349 78.561-243.904 60.333-83.796 160.605-149.302 316.103-149.302 17.674 0 32 14.327 32 32s-14.326 32-32 32c-134.637 0-215.697 55.382-264.164 122.698z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chat-close"],"defaultCode":59701,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":970,"name":"chat-close","prevSize":32,"id":58,"code":59701},"setIdx":0,"setId":6,"iconIdx":58},{"icon":{"paths":["M778 93.833c-11.795-13.162-32.026-14.271-45.187-2.477s-14.272 32.025-2.477 45.187l81.222 90.645h-216.358c-17.674 0-32 14.327-32 32s14.326 32 32 32h216.358l-81.222 90.646c-11.795 13.162-10.685 33.392 2.477 45.187 13.162 11.792 33.392 10.685 45.187-2.477l129.030-144.001c10.893-12.154 10.893-30.556 0-42.71l-129.030-144zM159.999 512.010c0-55.322 16.86-139.021 66.502-207.968 48.467-67.316 129.527-122.698 264.164-122.698 17.674 0 32-14.327 32-32s-14.326-32-32-32c-155.498 0-255.77 65.507-316.102 149.302-58.72 81.555-78.275 178.355-78.561 243.904-11.151 127.229 35.827 222.211 112.66 287.222 75.729 64.077 178.516 97.603 278.471 108.707 100.032 11.117 208.304 1.568 293.616-16.47 42.653-9.021 80.675-20.394 109.68-32.982 14.438-6.269 27.626-13.254 38.253-21.030 9.782-7.155 21.523-17.926 26.579-33.094 7.67-23.018-3.069-41.872-13.302-52.864-9.782-10.509-22.941-18.544-34.202-24.538-11.738-6.25-24.518-11.859-35.171-16.515-11.482-5.018-19.651-8.598-24.966-11.571-10.288-5.754-18.096-10.89-23.357-15.059 37.674-88.678 52.554-132.339 58.010-165.088 2.902-17.43-8.877-33.917-26.31-36.822-17.43-2.902-33.917 8.877-36.822 26.307-4.262 25.597-17.133 65.114-59.219 163.318-5.917 13.808-2.902 26.858 1.309 35.6 3.978 8.256 9.92 14.886 15.146 19.827 10.614 10.042 25.171 19.478 40.003 27.776 8.186 4.576 18.989 9.296 28.656 13.517v0l1.914 0.835c10.957 4.79 21.51 9.456 30.733 14.368 3.558 1.891 6.541 3.632 9.005 5.197-5.299 3.341-12.493 7.114-21.738 11.126-23.827 10.342-57.421 20.614-97.44 29.075-80.038 16.928-181.341 25.699-273.309 15.482-92.045-10.227-181.258-40.704-244.196-93.958-61.545-52.077-99.836-127.29-90.135-234.006l0.132-1.446v-1.453z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chat-forward"],"defaultCode":59702,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":971,"name":"chat-forward","prevSize":32,"id":59,"code":59702},"setIdx":0,"setId":6,"iconIdx":59},{"icon":{"paths":["M854.506 233.252c12.563 12.429 12.672 32.691 0.243 45.254l-474.877 480c-6.013 6.077-14.208 9.498-22.755 9.494-8.55-0.003-16.742-3.427-22.752-9.507l-165.126-167.088c-12.423-12.57-12.303-32.832 0.268-45.254s32.831-12.304 45.254 0.269l142.375 144.067 452.115-456.992c12.429-12.564 32.691-12.672 45.254-0.243z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["check"],"defaultCode":59703,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":972,"name":"check","prevSize":32,"id":60,"code":59703},"setIdx":0,"setId":6,"iconIdx":60},{"icon":{"paths":["M204.8 128h614.4c42.416 0 76.8 34.385 76.8 76.8v614.4c0 42.416-34.384 76.8-76.8 76.8h-614.4c-42.415 0-76.8-34.384-76.8-76.8v-614.4c0-42.415 34.385-76.8 76.8-76.8zM769.062 336.88c9.322-9.424 9.238-24.619-0.182-33.941-9.424-9.322-24.621-9.241-33.942 0.182l-339.085 342.745-106.782-108.051c-9.317-9.43-24.513-9.52-33.94-0.202s-9.518 24.512-0.201 33.939l123.842 125.318c4.509 4.56 10.653 7.126 17.066 7.13s12.557-2.563 17.069-7.12l356.157-360z"],"attrs":[{"fill":"rgb(29, 116, 245)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":5}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":4}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":6}]},"tags":["checkbox-checked"],"defaultCode":59654,"grid":0},"attrs":[{"fill":"rgb(29, 116, 245)"}],"properties":{"order":973,"name":"checkbox-checked","prevSize":32,"id":61,"code":59654},"setIdx":0,"setId":6,"iconIdx":61},{"icon":{"paths":["M819.2 204.8v614.4h-614.4v-614.4h614.4zM204.8 128c-42.415 0-76.8 34.385-76.8 76.8v614.4c0 42.416 34.385 76.8 76.8 76.8h614.4c42.416 0 76.8-34.384 76.8-76.8v-614.4c0-42.415-34.384-76.8-76.8-76.8h-614.4z"],"attrs":[{"fill":"rgb(203, 206, 209)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":8}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":8}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":10}]},"tags":["checkbox-unchecked"],"defaultCode":59653,"grid":0},"attrs":[{"fill":"rgb(203, 206, 209)"}],"properties":{"order":974,"name":"checkbox-unchecked","prevSize":32,"id":62,"code":59653},"setIdx":0,"setId":6,"iconIdx":62},{"icon":{"paths":["M281.372 436.042c12.497-12.499 32.758-12.499 45.255 0l185.373 185.373 185.373-185.373c12.496-12.499 32.758-12.499 45.254 0 12.496 12.496 12.496 32.758 0 45.254l-208 208c-12.496 12.496-32.758 12.496-45.254 0l-208-208c-12.497-12.496-12.497-32.758 0-45.254z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-down"],"defaultCode":59704,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":975,"name":"chevron-down","prevSize":32,"id":63,"code":59704},"setIdx":0,"setId":6,"iconIdx":63},{"icon":{"paths":["M587.962 281.372c12.496 12.497 12.496 32.758 0 45.255l-185.373 185.373 185.373 185.373c12.496 12.496 12.496 32.758 0 45.254-12.499 12.496-32.758 12.496-45.258 0l-208-208c-12.496-12.496-12.496-32.758 0-45.254l208-208c12.499-12.497 32.758-12.497 45.258 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-left"],"defaultCode":59706,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":976,"name":"chevron-left","prevSize":32,"id":64,"code":59706},"setIdx":0,"setId":6,"iconIdx":64},{"icon":{"paths":["M670.17 183.165c16.662 16.662 16.662 43.677 0 60.34l-268.496 268.495 268.496 268.499c16.662 16.662 16.662 43.677 0 60.339s-43.677 16.662-60.339 0l-298.668-298.669c-8.002-8-12.497-18.851-12.497-30.17 0-11.315 4.495-22.166 12.497-30.17l298.668-298.666c16.662-16.662 43.677-16.662 60.339 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-left-big"],"defaultCode":59705,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":977,"name":"chevron-left-big","prevSize":32,"id":65,"code":59705},"setIdx":0,"setId":6,"iconIdx":65},{"icon":{"paths":["M436.038 742.627c-12.496-12.496-12.496-32.758 0-45.254l185.373-185.373-185.373-185.373c-12.496-12.497-12.496-32.758 0-45.254 12.499-12.497 32.758-12.497 45.254 0l208 208c12.499 12.496 12.499 32.758 0 45.254l-207.997 208c-12.499 12.496-32.758 12.496-45.258 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-right"],"defaultCode":59707,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":978,"name":"chevron-right","prevSize":32,"id":66,"code":59707},"setIdx":0,"setId":6,"iconIdx":66},{"icon":{"paths":["M742.627 587.958c-12.496 12.499-32.758 12.499-45.254 0l-185.373-185.373-185.373 185.373c-12.496 12.499-32.758 12.499-45.254 0-12.497-12.496-12.497-32.758 0-45.254l208-208c12.496-12.496 32.758-12.496 45.254 0l208 208c12.496 12.496 12.496 32.758 0 45.254z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["chevron-up"],"defaultCode":59708,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":979,"name":"chevron-up","prevSize":32,"id":67,"code":59708},"setIdx":0,"setId":6,"iconIdx":67},{"icon":{"paths":["M512 864c194.403 0 352-157.597 352-352 0-46.522-9.024-90.931-25.418-131.581l48.518-48.518c26.211 54.496 40.899 115.581 40.899 180.099 0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416 95.376 0 183.254 32.096 253.424 86.076l-45.712 45.712c-58.221-42.623-130.029-67.788-207.712-67.788-194.404 0-352 157.596-352 352s157.596 352 352 352zM902.63 230.623c12.496-12.499 12.493-32.76-0.006-45.255s-32.762-12.491-45.254 0.008l-345.386 345.503-105.341-105.491c-12.486-12.506-32.749-12.522-45.254-0.032-12.506 12.486-12.522 32.749-0.032 45.254l127.971 128.157c6 6.006 14.144 9.386 22.634 9.389 8.493 0 16.637-3.373 22.64-9.376l368.029-368.157z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["circle-check"],"defaultCode":59709,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":980,"name":"circle-check","prevSize":32,"id":68,"code":59709},"setIdx":0,"setId":6,"iconIdx":68},{"icon":{"paths":["M608 192c0-53.019-42.979-96-96-96s-96 42.981-96 96h-192c-17.673 0-32 14.327-32 32v672c0 17.674 14.327 32 32 32h576c17.674 0 32-14.326 32-32v-672c0-17.673-14.326-32-32-32h-192zM256 864v-608h96v64c0 17.674 14.326 32 32 32h256c17.674 0 32-14.326 32-32v-64h96v608h-512zM512 224c17.674 0 32-14.327 32-32s-14.326-32-32-32c-17.674 0-32 14.327-32 32s14.326 32 32 32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["clipboard"],"defaultCode":59710,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":981,"name":"clipboard","prevSize":32,"id":69,"code":59710},"setIdx":0,"setId":6,"iconIdx":69},{"icon":{"paths":["M864 512c0 194.403-157.597 352-352 352s-352-157.597-352-352c0-194.404 157.596-352 352-352s352 157.596 352 352zM928 512c0-229.75-186.25-416-416-416s-416 186.25-416 416c0 229.75 186.25 416 416 416s416-186.25 416-416zM544 288c0-17.673-14.326-32-32-32s-32 14.327-32 32v224c0 8.486 3.373 16.627 9.373 22.627l96 96c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-86.627-86.627v-210.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["clock"],"defaultCode":59711,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":982,"name":"clock","prevSize":32,"id":70,"code":59711},"setIdx":0,"setId":6,"iconIdx":70},{"icon":{"paths":["M806.627 262.628c12.496-12.497 12.496-32.758 0-45.255s-32.758-12.497-45.254 0l-249.373 249.373-249.372-249.373c-12.497-12.497-32.758-12.497-45.255 0s-12.497 32.758 0 45.255l249.373 249.372-249.373 249.373c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l249.372-249.373 249.373 249.373c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-249.373-249.373 249.373-249.372z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["close"],"defaultCode":59712,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":983,"name":"close","prevSize":32,"id":71,"code":59712},"setIdx":0,"setId":6,"iconIdx":71},{"icon":{"paths":["M273.129 356.678c6.747-28.298 25.696-52.004 51.21-67.152 25.6-15.2 56.323-20.858 84.698-14.53 27.642 6.163 55.117 24.12 74.874 60.339l22.541 41.325 30.134-36.16c27.238-32.689 85.126-39.713 134.714-14.064 23.562 12.186 42.208 30.618 52.064 53.488 9.654 22.406 12.112 51.898-1.434 89.149l-15.616 42.938h45.686c53.606 0 82.419 15.882 97.642 33.75 15.651 18.374 21.898 44.646 18.557 74.714-3.344 30.083-16.054 60.518-33.456 82.89-17.939 23.066-36.646 32.646-50.742 32.646h-543.998c-18.791 0-37.068-10.362-52.195-31.578-15.217-21.344-24.978-51.050-25.818-81.312-0.84-30.227 7.237-57.914 23.733-77.491 15.796-18.746 42.268-33.619 86.279-33.619h59.791l-33.165-49.75c-27.882-41.824-32.118-77.814-25.498-105.581zM518.218 272.084c-26.339-32.073-59.667-51.619-95.251-59.554-45.626-10.174-92.902-0.833-131.301 21.965-38.487 22.85-69.538 60.142-80.791 107.342-8.278 34.72-5.369 72.758 10.731 111.77-35.67 8.464-64.099 26.186-84.825 50.784-29.004 34.422-39.927 78.733-38.766 120.506 1.159 41.738 14.399 84.032 37.682 116.688 23.373 32.784 59.097 58.426 104.306 58.426h543.999c41.907 0 77.2-26.419 101.261-57.354 24.598-31.629 41.888-73.197 46.544-115.114 4.659-41.933-3.094-87.658-33.443-123.283-24.106-28.301-59.504-46.774-105.616-53.456 5.83-35.194 1.686-67.674-10.605-96.205-16.646-38.628-46.998-67.197-81.437-85.010-54.902-28.397-128.733-32.652-182.486 2.495zM512 437.331c17.674 0 32 14.33 32 32v53.328h53.334c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-53.334v53.341c0 17.674-14.326 32-32 32s-32-14.326-32-32v-53.341h-53.331c-17.674 0-32-14.326-32-32 0-17.67 14.326-32 32-32h53.331v-53.328c0-17.67 14.326-32 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["cloud-connectivity"],"defaultCode":59713,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":984,"name":"cloud-connectivity","prevSize":32,"id":72,"code":59713},"setIdx":0,"setId":6,"iconIdx":72},{"icon":{"paths":["M630.157 204.798c16.493 6.344 24.723 24.859 18.378 41.355l-213.331 554.667c-6.346 16.496-24.861 24.723-41.357 18.381-16.493-6.346-24.723-24.861-18.378-41.357l213.331-554.666c6.346-16.495 24.861-24.724 41.357-18.38zM321.296 361.37c12.496 12.499 12.496 32.758 0 45.258l-105.373 105.37 105.373 105.373c12.496 12.499 12.496 32.758 0 45.258-12.497 12.496-32.759 12.496-45.255 0l-128-128c-12.497-12.499-12.497-32.758 0-45.258l128-128c12.497-12.496 32.758-12.496 45.255 0zM702.707 361.37c12.496-12.496 32.758-12.496 45.254 0l128 128c12.496 12.499 12.496 32.758 0 45.258l-128 128c-12.496 12.496-32.758 12.496-45.254 0-12.496-12.499-12.496-32.758 0-45.258l105.373-105.373-105.373-105.37c-12.496-12.499-12.496-32.758 0-45.258z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["code"],"defaultCode":59714,"grid":0},"attrs":[{}],"properties":{"order":985,"name":"code","prevSize":32,"id":73,"code":59714},"setIdx":0,"setId":6,"iconIdx":73},{"icon":{"paths":["M507.488 130.134c16.496 6.344 24.723 24.859 18.378 41.354l-160 416c-6.342 16.496-24.858 24.723-41.354 18.381-16.494-6.346-24.723-24.861-18.379-41.357l160.002-415.998c6.342-16.495 24.858-24.724 41.354-18.38z","M278.628 249.373c12.497 12.497 12.497 32.758 0 45.255l-73.373 73.372 73.373 73.373c12.497 12.496 12.497 32.758 0 45.254-12.497 12.499-32.758 12.499-45.255 0l-96-96c-6.001-6-9.372-14.141-9.372-22.627s3.372-16.624 9.372-22.627l96-95.999c12.497-12.497 32.758-12.497 45.255 0z","M553.373 249.373c12.496-12.497 32.758-12.497 45.254 0l96 95.999c6 6.003 9.373 14.141 9.373 22.627s-3.373 16.627-9.373 22.627l-96 96c-12.496 12.499-32.758 12.499-45.254 0-12.496-12.496-12.496-32.758 0-45.254l73.373-73.373-73.373-73.372c-12.496-12.497-12.496-32.758 0-45.255z","M672 160c0-17.673 14.326-32 32-32h96c53.021 0 96 42.981 96 96v576c0 53.021-42.979 96-96 96h-576c-53.020 0-96-42.979-96-96v-160c0-17.674 14.327-32 32-32s32 14.326 32 32v192h640v-640h-128c-17.674 0-32-14.327-32-32z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124319081245699212911624514522416519902101":[{},{},{},{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{},{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{},{},{}]},"tags":["code-block"],"defaultCode":59840,"grid":0},"attrs":[{},{},{},{}],"properties":{"order":986,"id":74,"name":"code-block","prevSize":32,"code":59840},"setIdx":0,"setId":6,"iconIdx":74},{"icon":{"paths":["M770.704 224c17.674 0 32 14.327 32 32v544c0 17.674-14.326 32-32 32h-543.999c-17.673 0-32-14.326-32-32v-128c17.673 0 32-14.326 32-32s-14.327-32-32-32v-192c17.673 0 32-14.326 32-32s-14.327-32-32-32v-96c0-17.673 14.327-32 32-32h543.999zM130.705 608c-17.673 0-32 14.326-32 32s14.327 32 32 32v128c0 53.021 42.981 96 96 96h543.999c53.021 0 96-42.979 96-96v-544c0-53.019-42.979-96-96-96h-543.999c-53.019 0-96 42.981-96 96v96c-17.673 0-32 14.326-32 32s14.327 32 32 32v192zM427.91 514.266c13.315-3.568 27.309-3.789 40.73-0.643l31.52 7.389c8.73 2.045 17.83 1.904 26.49-0.416l22.186-5.942c14.285-3.827 29.328-4.042 43.683-0.675 40.429 9.475 69.325 45.584 69.325 87.277v24.336c0 31.811-25.789 57.6-57.6 57.6h-180.739c-31.811 0-57.6-25.789-57.6-57.6v-30.525c0-37.862 25.434-71.005 62.006-80.8zM456.957 563.472c-5.206-1.219-10.634-1.133-15.798 0.25-14.189 3.798-24.054 16.656-24.054 31.344v30.525c0 3.536 2.867 6.4 6.4 6.4h180.739c3.533 0 6.4-2.864 6.4-6.4v-24.336c0-17.75-12.365-33.341-29.808-37.427-6.186-1.45-12.662-1.35-18.752 0.282l-22.186 5.942c-16.813 4.502-34.474 4.781-51.421 0.81l-31.52-7.389zM539.155 420.48c0-13.962-11.318-25.28-25.28-25.28s-25.283 11.318-25.283 25.28c0 13.962 11.322 25.28 25.283 25.28s25.28-11.318 25.28-25.28zM590.355 420.48c0 42.24-34.243 76.48-76.48 76.48-42.24 0-76.483-34.24-76.483-76.48s34.243-76.48 76.483-76.48c42.237 0 76.48 34.24 76.48 76.48z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["contacts"],"defaultCode":59715,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":987,"name":"contacts","prevSize":32,"id":75,"code":59715},"setIdx":0,"setId":6,"iconIdx":75},{"icon":{"paths":["M464 272c-35.347 0-64 28.654-64 64v480c0 35.347 28.653 64 64 64h352c35.347 0 64-28.653 64-64v-304c0-6.509-1.984-12.864-5.69-18.214l-134.458-194.215c-11.952-17.267-31.619-27.571-52.621-27.571h-223.232zM464 336h144v144c0 35.347 28.653 64 64 64h144v272h-352v-480zM672 480v-144h15.232l99.693 144h-114.925zM144 208c0-35.346 28.654-64 64-64h241.844c18.032 0 35.229 7.607 47.357 20.949l39.136 43.051h-328.336v480h128v64h-128c-35.346 0-64-28.653-64-64v-480z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["copy"],"defaultCode":59716,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":988,"name":"copy","prevSize":32,"id":76,"code":59716},"setIdx":0,"setId":6,"iconIdx":76},{"icon":{"paths":["M824.682 183.521c-37.19-37.986-98.202-38.583-136.131-1.333l-348.48 342.237c-12.739 12.512-21.733 28.32-25.976 45.654l-23.681 96.749c-6.94 28.355 16.754 54.845 45.747 51.142l90.691-11.578c20.224-2.582 39.104-11.52 53.907-25.52l360.486-340.922c38.986-36.868 40.173-98.482 2.637-136.82l-19.2-19.61zM733.485 227.821c12.643-12.417 32.979-12.218 45.376 0.444l19.2 19.61c12.512 12.78 12.115 33.317-0.88 45.607l-69.965 66.169-63.446-63.364 69.715-68.466zM618.074 341.162l62.592 62.512-243.971 230.73c-4.934 4.666-11.229 7.645-17.968 8.506l-58.307 7.443 15.926-65.075c1.414-5.779 4.413-11.046 8.659-15.219l233.069-228.896zM193.608 265.602c0-17.673 14.346-32 32.042-32h281.332c17.696 0 32.042-14.327 32.042-32s-14.346-32-32.042-32h-281.332c-53.089 0-96.127 42.981-96.127 96v534.402c0 53.018 43.037 95.997 96.127 95.997h529.764c53.091 0 96.128-42.979 96.128-96v-279.414c0-17.67-14.346-32-32.042-32s-32.042 14.33-32.042 32v279.414c0 17.674-14.346 32-32.045 32h-529.764c-17.696 0-32.042-14.326-32.042-31.997v-534.402z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["create"],"defaultCode":59717,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":989,"name":"create","prevSize":32,"id":77,"code":59717},"setIdx":0,"setId":6,"iconIdx":77},{"icon":{"paths":["M717.373 298.663c0-17.673-14.326-32-32-32s-32 14.327-32 32v426.665c0 17.674 14.326 32 32 32s32-14.326 32-32v-426.665z","M514.704 394.672c17.674 0 32 14.326 32 32v298.666c0 17.674-14.326 32-32 32s-32-14.326-32-32v-298.666c0-17.674 14.326-32 32-32z","M376.038 554.672c0-17.674-14.326-32-32-32s-32 14.326-32 32v170.669c0 17.67 14.327 32 32 32s32-14.33 32-32v-170.669z","M130.705 199.556v624.889c0 39.52 32.036 71.555 71.556 71.555h624.888c39.52 0 71.555-32.035 71.555-71.555v-624.889c0-39.519-32.035-71.556-71.555-71.556h-624.888c-39.519 0-71.556 32.036-71.556 71.556zM202.26 192h624.888c4.173 0 7.555 3.383 7.555 7.556v624.889c0 4.173-3.382 7.555-7.555 7.555h-624.888c-4.173 0-7.556-3.382-7.556-7.555v-624.889c0-4.173 3.383-7.556 7.556-7.556z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["dashboard"],"defaultCode":59718,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":990,"name":"dashboard","prevSize":32,"id":78,"code":59718},"setIdx":0,"setId":6,"iconIdx":78},{"icon":{"paths":["M739.68 864v-448h-448.593v448h448.593zM227.003 864v-448c-35.393 0-64.084-28.653-64.084-64v-128c0-35.346 28.692-64 64.084-64h224.297c0-35.346 28.691-64 64.083-64 35.395 0 64.086 28.654 64.086 64h224.294c35.395 0 64.086 28.654 64.086 64v128c0 35.347-28.691 64-64.086 64v448c0 35.347-28.691 64-64.083 64h-448.593c-35.393 0-64.085-28.653-64.085-64zM803.763 224h-576.761v128h576.761v-128zM419.258 544v192c0 17.674 14.346 32 32.042 32s32.042-14.326 32.042-32v-192c0-17.674-14.346-32-32.042-32s-32.042 14.326-32.042 32zM579.469 512c17.696 0 32.042 14.326 32.042 32v192c0 17.674-14.346 32-32.042 32s-32.042-14.326-32.042-32v-192c0-17.674 14.346-32 32.042-32z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["delete"],"defaultCode":59719,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":991,"name":"delete","prevSize":32,"id":79,"code":59719},"setIdx":0,"setId":6,"iconIdx":79},{"icon":{"paths":["M341.334 778.672c-17.674 0-32 14.326-32 32s14.327 32 32 32h341.334c17.67 0 32-14.326 32-32s-14.33-32-32-32h-341.334z","M85.334 298.672c0-70.692 57.308-128 128-128h597.335c70.691 0 128 57.308 128 128v298.666c0 70.694-57.309 128-128 128h-597.335c-70.692 0-128-57.306-128-128v-298.666zM213.334 234.672c-35.346 0-64 28.654-64 64v298.666c0 35.347 28.654 64 64 64h597.335c35.344 0 64-28.653 64-64v-298.666c0-35.347-28.656-64-64-64h-597.335z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["desktop"],"defaultCode":59720,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":992,"name":"desktop","prevSize":32,"id":80,"code":59720},"setIdx":0,"setId":6,"iconIdx":80},{"icon":{"paths":["M325.837 160c0-17.673-14.347-32-32.043-32h-64.085c-17.696 0-32.042 14.327-32.042 32v64c0 17.673 14.346 32 32.042 32h64.085c17.696 0 32.043-14.327 32.043-32v-64zM325.837 586.666c0-17.674-14.347-32-32.043-32h-64.085c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.085c17.696 0 32.043-14.326 32.043-32v-64zM454.006 160c0-17.673 14.346-32 32.042-32h64.083c17.696 0 32.042 14.327 32.042 32v64c0 17.673-14.346 32-32.042 32h-64.083c-17.696 0-32.042-14.327-32.042-32v-64zM582.173 373.334c0-17.674-14.346-32-32.042-32h-64.083c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.083c17.696 0 32.042-14.326 32.042-32v-64zM454.006 586.666c0-17.674 14.346-32 32.042-32h64.083c17.696 0 32.042 14.326 32.042 32v64c0 17.674-14.346 32-32.042 32h-64.083c-17.696 0-32.042-14.326-32.042-32v-64zM582.173 800c0-17.674-14.346-32-32.042-32h-64.083c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.083c17.696 0 32.042-14.326 32.042-32v-64zM710.342 160c0-17.673 14.346-32 32.045-32h64.083c17.696 0 32.042 14.327 32.042 32v64c0 17.673-14.346 32-32.042 32h-64.083c-17.699 0-32.045-14.327-32.045-32v-64zM838.512 373.334c0-17.674-14.346-32-32.042-32h-64.083c-17.699 0-32.045 14.326-32.045 32v64c0 17.674 14.346 32 32.045 32h64.083c17.696 0 32.042-14.326 32.042-32v-64zM710.342 586.666c0-17.674 14.346-32 32.045-32h64.083c17.696 0 32.042 14.326 32.042 32v64c0 17.674-14.346 32-32.042 32h-64.083c-17.699 0-32.045-14.326-32.045-32v-64zM325.837 373.334c0-17.674-14.347-32-32.043-32h-64.085c-17.696 0-32.042 14.326-32.042 32v64c0 17.674 14.346 32 32.042 32h64.085c17.696 0 32.043-14.326 32.043-32v-64z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["dialpad"],"defaultCode":59721,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":993,"name":"dialpad","prevSize":32,"id":81,"code":59721},"setIdx":0,"setId":6,"iconIdx":81},{"icon":{"paths":["M478.65 672c-17.674 0-32-14.326-32-32v-32h-32c-17.674 0-32-14.326-32-32s14.326-32 32-32h32v-58.88h-32c-17.674 0-32-14.326-32-32s14.326-32 32-32h32v-37.12c0-17.674 14.326-32 32-32 17.67 0 32 14.326 32 32v37.12h58.88v-37.12c0-17.674 14.326-32 32-32s32 14.326 32 32v37.12h37.12c17.67 0 32 14.326 32 32s-14.33 32-32 32h-37.12v58.88h37.12c17.67 0 32 14.326 32 32s-14.33 32-32 32h-37.12v32c0 17.674-14.326 32-32 32s-32-14.326-32-32v-32h-58.88v32c0 17.674-14.33 32-32 32zM510.65 544h58.88v-58.88h-58.88v58.88z","M158.648 672h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-192h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-160c0-35.346 28.654-64 64-64h608.001c35.344 0 64 28.654 64 64v640c0 35.347-28.656 64-64 64h-608.001c-35.346 0-64-28.653-64-64v-160zM830.65 192h-608.001v160h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v192h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v160h608.001v-640z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["directory"],"defaultCode":59648,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":994,"id":82,"name":"directory","prevSize":32,"code":59648},"setIdx":0,"setId":6,"iconIdx":82},{"icon":{"paths":["M833.35 128c10.285 0 20 2.425 28.611 6.735-11.834 4.684-22.922 11.812-32.493 21.383l-35.882 35.882h-568.236v160h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v192h32c17.673 0 32 14.326 32 32s-14.327 32-32 32h-32v88.237l-64 64v-152.237h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-192h-32c-17.673 0-32-14.326-32-32s14.327-32 32-32h32v-160c0-35.346 28.654-64 64-64h607.999z","M361.117 896l64-64h408.234v-408.237l64-64v472.237c0 35.347-28.653 64-64 64h-472.234z","M604.23 352c8.166 0 15.616 3.056 21.267 8.090l-53.267 53.267v-29.357c0-17.674 14.33-32 32-32z","M513.35 421.12h51.117l-115.117 115.117v-51.117h-32c-17.67 0-32-14.326-32-32s14.33-32 32-32h32v-37.12c0-17.674 14.33-32 32-32 17.674 0 32 14.326 32 32v37.12z","M391.174 594.413l50.413-50.413h-24.237c-17.67 0-32 14.326-32 32 0 6.854 2.157 13.203 5.824 18.413z","M919.978 201.372c-12.496-12.497-32.755-12.497-45.254 0l-671.999 672c-12.497 12.496-12.497 32.758 0 45.254s32.758 12.496 45.255 0l671.999-672c12.499-12.497 12.499-32.758 0-45.255z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["directory-disabled"],"defaultCode":59649,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":995,"id":83,"name":"directory-disabled","prevSize":32,"code":59649},"setIdx":0,"setId":6,"iconIdx":83},{"icon":{"paths":["M919.978 105.372c12.499 12.497 12.499 32.758 0 45.255l-89.373 89.372 89.373 89.373c12.499 12.496 12.499 32.758 0 45.254-12.496 12.496-32.755 12.496-45.254 0l-89.373-89.372-89.373 89.372c-12.496 12.496-32.755 12.496-45.254 0-12.496-12.496-12.496-32.758 0-45.254l89.373-89.373-89.373-89.372c-12.496-12.497-12.496-32.758 0-45.255 12.499-12.497 32.758-12.497 45.254 0l89.373 89.373 89.373-89.373c12.499-12.497 32.758-12.497 45.254 0z","M512.419 126.678c1.491 17.61-11.578 33.094-29.187 34.585-180.289 15.259-321.88 166.478-321.88 350.731 0 194.406 157.596 352 351.999 352 194.406 0 352-157.594 352-352 0-17.674 14.33-32 32-32 17.674 0 32 14.326 32 32 0 229.75-186.25 416-416 416s-415.999-186.25-415.999-416c0-217.79 167.341-396.462 380.482-414.503 17.61-1.491 33.094 11.577 34.586 29.187z","M119.219 432.47c0-17.674 14.327-32 32-32h329.037c17.67 0 32 14.326 32 32 0 17.67-14.33 32-32 32h-329.037c-17.673 0-32-14.33-32-32z","M119.233 640c0-17.674 14.327-32 32-32h724.255c17.674 0 32 14.326 32 32s-14.326 32-32 32h-724.255c-17.673 0-32-14.326-32-32z","M504.81 121.090c11.117 13.739 8.992 33.888-4.749 45.005-8.666 7.012-18.886 20.139-29.238 40.961-10.179 20.471-19.61 46.603-27.635 77.587-16.042 61.955-25.837 140.879-25.837 227.356 0 103.555 14.038 195.981 35.85 261.411 10.96 32.88 23.306 57.181 35.462 72.605 12.438 15.786 21.024 17.978 24.688 17.978 3.667 0 12.253-2.192 24.691-17.978 12.157-15.424 24.502-39.725 35.462-72.605 21.808-65.43 35.846-157.856 35.846-261.411 0-17.674 14.33-32 32-32 17.674 0 32 14.326 32 32 0 108.522-14.614 208.096-39.133 281.648-12.202 36.608-27.437 68.544-45.91 91.984-18.186 23.078-43.274 42.362-74.957 42.362-31.68 0-56.768-19.283-74.957-42.362-18.47-23.44-33.706-55.376-45.91-91.984-24.515-73.552-39.133-173.126-39.133-281.648 0-90.915 10.256-175.338 27.882-243.4 8.81-34.025 19.619-64.572 32.282-90.038 12.49-25.115 27.712-47.185 46.288-62.217 13.741-11.117 33.888-8.992 45.008 4.746z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["directory-error"],"defaultCode":59650,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":996,"id":84,"name":"directory-error","prevSize":32,"code":59650},"setIdx":0,"setId":6,"iconIdx":84},{"icon":{"paths":["M561.667 127.992c-121.696 0-200.973 50.509-248.813 115.801-46.216 63.073-61.638 137.752-61.933 188.616-8.705 98.746 28.601 172.896 89.422 223.469 59.686 49.626 140.202 75.258 217.85 83.738 77.75 8.486 161.715 1.197 227.856-12.547 33.066-6.87 62.774-15.581 85.642-25.331 11.366-4.848 22.029-10.368 30.797-16.669 7.875-5.661 18.541-14.976 23.242-28.835 7.286-21.475-3.133-38.784-11.965-48.102-8.41-8.877-19.427-15.405-28.24-20.016-9.306-4.867-19.379-9.206-27.533-12.707-8.973-3.856-14.858-6.4-18.56-8.432-4.845-2.662-8.842-5.088-12.026-7.203 20.256-47.142 31.549-77.043 37.696-99.19 7.293-26.272 7.315-41.725 7.315-58.909 0-21.523-9.603-88.542-52.81-151.108-44.701-64.73-124.074-122.573-257.939-122.573zM314.916 433.898c0-40.416 12.607-101.84 49.564-152.277 35.782-48.836 95.882-89.628 197.187-89.628 112.086 0 172.090 46.886 205.277 94.94 34.678 50.219 41.472 104.040 41.472 114.741v0.198c0 14.918 0 23.638-4.982 41.594-5.491 19.779-16.963 50.189-41.539 106.538-5.802 13.296-2.762 25.77 1.155 33.754 3.664 7.478 9.005 13.242 13.331 17.261 8.835 8.211 20.653 15.686 32.224 22.045 6.618 3.638 15.238 7.334 22.563 10.477l1.562 0.672c5.904 2.534 11.52 4.97 16.688 7.418-0.909 0.406-1.856 0.819-2.835 1.238-17.741 7.568-43.078 15.206-73.555 21.539-60.947 12.666-138.064 19.21-207.888 11.587-69.926-7.635-136.982-30.336-183.878-69.328-45.459-37.798-73.674-92.064-66.481-169.821l0.136-1.469v-1.478zM819.162 553.354l-0.074-0.086c0 0.003 0.010 0.013 0.029 0.035 0.010 0.013 0.026 0.029 0.045 0.051z","M178.552 502.474c7.496-11.258 16.26-22.259 26.436-32.592 0.876 31.747 6.169 61.226 15.216 88.358-15.094 30.877-18.374 59.315-18.374 65.357v0.186c0 11.382 0 17.536 3.524 30.701 3.993 14.918 12.441 38.211 30.867 82.022 5.256 12.496 2.48 24.099-0.985 31.43-3.249 6.874-7.925 12.058-11.512 15.514-7.319 7.053-16.852 13.254-25.75 18.326-5.008 2.854-11.333 5.706-16.546 8.029 11.182 3.939 24.98 7.814 40.802 11.226 44.977 9.693 101.833 14.669 153.062 8.87 51.28-5.808 99.776-23.014 133.35-51.965l0.608-0.528c14.794 2.784 29.53 4.938 44.051 6.525 10.886 1.187 21.862 2.086 32.877 2.72-10.122 14.797-22.163 28.045-35.741 39.754-46.362 39.974-108.547 60.362-167.946 67.088-59.45 6.73-123.405 0.947-173.744-9.901-25.17-5.424-48.056-12.352-65.901-20.243-8.86-3.92-17.458-8.502-24.686-13.891-6.431-4.794-15.831-13.171-20.001-25.92-6.422-19.632 2.792-35.443 10.458-43.834 7.193-7.872 16.405-13.462 23.248-17.174 7.309-3.965 15.158-7.466 21.235-10.173 6.907-3.078 10.854-4.858 13.183-6.186 1.349-0.768 2.591-1.501 3.727-2.195-13.937-33.885-21.976-56.118-26.48-72.947-5.68-21.222-5.7-33.875-5.7-47.434 0-17.712 7.436-71.139 40.721-121.123zM155.337 797.248c-0.012 0 0.084 0.102 0.317 0.301-0.19-0.202-0.306-0.301-0.317-0.301zM179.587 737.085c-0.004 0-0.052 0.051-0.137 0.15l0.112-0.118c0.019-0.022 0.027-0.032 0.025-0.032z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["discussions"],"defaultCode":59722,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":997,"name":"discussions","prevSize":32,"id":85,"code":59722},"setIdx":0,"setId":6,"iconIdx":85},{"icon":{"paths":["M160 256c0-17.673 14.327-32 32-32h640c17.674 0 32 14.327 32 32s-14.326 32-32 32h-640c-17.673 0-32-14.327-32-32zM160 421.162c0-17.674 14.327-32 32-32h640c17.674 0 32 14.326 32 32s-14.326 32-32 32h-640c-17.673 0-32-14.326-32-32zM160 602.838c0-17.674 14.327-32 32-32h640c17.674 0 32 14.326 32 32s-14.326 32-32 32h-640c-17.673 0-32-14.326-32-32zM160 768c0-17.674 14.327-32 32-32h344.614c17.674 0 32 14.326 32 32s-14.326 32-32 32h-344.614c-17.673 0-32-14.326-32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["document"],"defaultCode":59723,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":998,"name":"document","prevSize":32,"id":86,"code":59723},"setIdx":0,"setId":6,"iconIdx":86},{"icon":{"paths":["M128.169 352c0-17.674 14.346-32 32.042-32h704.928c17.696 0 32.045 14.326 32.045 32s-14.349 32-32.045 32h-704.928c-17.696 0-32.042-14.326-32.042-32zM213.615 522.669c0-17.674 14.346-32 32.042-32h534.036c17.699 0 32.045 14.326 32.045 32s-14.346 32-32.045 32h-534.036c-17.697 0-32.042-14.326-32.042-32zM331.104 661.331c-17.698 0-32.043 14.326-32.043 32s14.346 32 32.043 32h363.146c17.696 0 32.042-14.326 32.042-32s-14.346-32-32.042-32h-363.146z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["donner"],"defaultCode":59724,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":999,"name":"donner","prevSize":32,"id":87,"code":59724},"setIdx":0,"setId":6,"iconIdx":87},{"icon":{"paths":["M273.128 356.678c-6.62 27.766-2.384 63.757 25.498 105.581l21.374 32.061v17.69h-48c-44.011 0-70.483 14.874-86.278 33.619-16.496 19.578-24.573 47.264-23.734 77.491 0.841 30.262 10.601 59.968 25.818 81.312 15.127 21.216 33.404 31.578 52.195 31.578h79.999v64h-80c-45.209 0-80.932-25.642-104.306-58.426-23.283-32.656-36.522-74.95-37.682-116.688-1.16-41.773 9.763-86.083 38.766-120.506 20.726-24.598 49.155-42.32 84.825-50.784-16.1-39.011-19.009-77.050-10.731-111.77 11.253-47.2 42.304-84.492 80.791-107.342 38.4-22.798 85.677-32.139 131.303-21.965 35.584 7.935 68.909 27.48 95.251 59.554 53.75-35.147 127.584-30.892 182.483-2.495 34.438 17.812 64.794 46.382 81.437 85.010 12.294 28.531 16.438 61.011 10.608 96.205 46.112 6.682 81.507 25.155 105.613 53.456 30.349 35.626 38.106 81.35 33.446 123.283-4.659 41.917-21.946 83.485-46.544 115.114-24.061 30.934-59.354 57.354-101.261 57.354h-80v-64h80c14.093 0 32.8-9.581 50.742-32.646 17.398-22.371 30.112-52.806 33.453-82.89 3.341-30.067-2.902-56.339-18.554-74.714-15.222-17.869-44.035-33.75-97.642-33.75h-45.686l15.613-42.938c13.546-37.251 11.091-66.742 1.437-89.149-9.856-22.87-28.502-41.302-52.064-53.488-49.587-25.649-107.475-18.625-134.717 14.064l-30.134 36.16-22.541-41.325c-19.757-36.219-47.232-54.175-74.87-60.339-28.378-6.327-59.098-0.669-84.701 14.53-25.512 15.148-44.461 38.855-51.208 67.152zM630.979 787.222c12.298-12.691 11.981-32.95-0.707-45.251-12.691-12.298-32.95-11.981-45.251 0.707l-41.021 42.326v-273.005c0-17.674-14.326-32-32-32s-32 14.326-32 32v273.005l-41.021-42.326c-12.301-12.688-32.56-13.005-45.251-0.707-12.688 12.301-13.005 32.56-0.707 45.251l96 99.050c6.029 6.218 14.32 9.728 22.979 9.728s16.95-3.51 22.979-9.728l96-99.050z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["download"],"defaultCode":59725,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1000,"name":"download","prevSize":32,"id":88,"code":59725},"setIdx":0,"setId":6,"iconIdx":88},{"icon":{"paths":["M795.648 132.004c-25.027-25.027-65.603-25.027-90.63-0l-530.467 530.469c-9.577 9.574-15.873 21.939-17.985 35.318l-19.611 124.186c-1.386 8.771-0.942 17.299 1.006 25.261 7.597 31.037 38.083 53.44 72.291 48.038l124.184-19.613c13.379-2.112 25.744-8.41 35.322-17.984l530.467-530.47c12.512-12.513 18.768-28.914 18.768-45.316 0-10.379-2.506-20.757-7.517-30.15-2.906-5.451-6.656-10.57-11.251-15.164l-104.576-104.575zM630.675 296.979l119.658-119.658 104.576 104.574-119.658 119.657-104.576-104.573zM200.255 831.974l19.611-124.186 365.494-365.494 104.576 104.573-365.494 365.494-124.187 19.613z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["edit"],"defaultCode":59726,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1001,"name":"edit","prevSize":32,"id":89,"code":59726},"setIdx":0,"setId":6,"iconIdx":89},{"icon":{"paths":["M330.074 644.886c-21.572-19.619-6.010-52.886 23.152-52.886 8.963 0 17.526 3.53 24.272 9.437 21.603 18.918 42.64 31.958 62.701 40.509 36.563 15.59 71.805 17.107 104.794 9.939 37.632-8.176 72.659-27.808 102.109-51.341 6.726-5.376 14.995-8.544 23.606-8.544 30.218 0 45.616 34.256 22.397 53.594-36.912 30.742-82.79 57.59-134.522 68.832-44.794 9.734-93.67 7.632-143.485-13.606-28.79-12.275-57.232-30.653-85.024-55.933z","M400.17 480c35.344 0 64-28.653 64-64s-28.656-64-64-64c-35.347 0-64 28.653-64 64s28.653 64 64 64z","M624.17 480c35.344 0 64-28.653 64-64s-28.656-64-64-64c-35.347 0-64 28.653-64 64s28.653 64 64 64z","M928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["emoji"],"defaultCode":59729,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1002,"name":"emoji","prevSize":32,"id":90,"code":59729},"setIdx":0,"setId":6,"iconIdx":90},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM400.166 480c-35.347 0-64-28.653-64-64s28.653-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64zM688.166 416c0-35.347-28.653-64-64-64s-64 28.653-64 64c0 35.347 28.653 64 64 64s64-28.653 64-64zM353.226 720c8.963 0 17.526-3.53 24.272-9.437 21.603-18.918 42.64-31.958 62.701-40.509 36.563-15.59 71.805-17.107 104.794-9.939 37.632 8.176 72.659 27.808 102.109 51.341 6.726 5.376 14.995 8.544 23.606 8.544 30.218 0 45.616-34.256 22.397-53.594-36.912-30.742-82.79-57.59-134.522-68.832-44.794-9.734-93.67-7.632-143.485 13.606-28.79 12.275-57.232 30.653-85.024 55.933-21.572 19.619-6.010 52.886 23.152 52.886z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["emoji-bad-mood"],"defaultCode":59727,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1003,"name":"emoji-bad-mood","prevSize":32,"id":91,"code":59727},"setIdx":0,"setId":6,"iconIdx":91},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM400.166 480c-35.347 0-64-28.653-64-64s28.653-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64zM688.166 416c0-35.347-28.653-64-64-64s-64 28.653-64 64c0 35.347 28.653 64 64 64s64-28.653 64-64zM384 640h256c17.674 0 32 14.326 32 32s-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32s14.326-32 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["emoji-neutral-mood"],"defaultCode":59728,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1004,"name":"emoji-neutral-mood","prevSize":32,"id":92,"code":59728},"setIdx":0,"setId":6,"iconIdx":92},{"icon":{"paths":["M655.744 512c88.365 0 160-71.635 160-160s-71.635-160-160-160c-88.368 0-160 71.635-160 160 0 26.934 6.653 52.314 18.41 74.582l-11.914 11.914 0.128 0.131-299.135 299.136c-3.533 9.926-6.41 20.976-7.738 31.606-1.652 13.219-0.563 22.966 1.874 28.938 1.768 4.333 4.22 7.232 10.772 9.014 8.316 2.262 24.518 2.794 52.822-5.501 8.524-3.808 27.721-16.285 45.132-35.382 18.18-19.939 29.648-41.856 29.648-62.438 0-15.642 11.309-28.992 26.736-31.565l91.75-15.293c3.766-2.656 18.768-15.693 10.134-58.867-2.099-10.49 1.184-21.338 8.749-28.902l88.198-88.195c26.467 19.379 59.114 30.822 94.432 30.822zM439.571 410.915c-5.104-18.771-7.827-38.525-7.827-58.915 0-123.712 100.288-224 224-224 123.709 0 224 100.288 224 224s-100.291 224-224 224c-29.29 0-57.264-5.619-82.906-15.843l-43.008 43.008c7.158 65.494-23.99 104.534-55.968 115.194l-2.384 0.794-74.854 12.477c-7.085 31.405-25.174 58.122-43.235 77.933-23.123 25.357-50.958 44.627-69.762 52.15l-1.324 0.528-1.365 0.41c-34.714 10.416-64.73 13.19-89.594 6.429-26.782-7.286-44.33-24.784-53.228-46.586-8.23-20.163-8.473-42.282-6.126-61.062 2.402-19.216 7.899-37.958 14.042-53.315 1.61-4.022 4.020-7.677 7.084-10.742l286.456-286.458zM623.744 336c0 26.509 21.488 48 48 48 26.509 0 48-21.491 48-48s-21.491-48-48-48c-26.512 0-48 21.49-48 48z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["encrypted"],"defaultCode":59730,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1005,"name":"encrypted","prevSize":32,"id":93,"code":59730},"setIdx":0,"setId":6,"iconIdx":93},{"icon":{"paths":["M536.89 64c233.677 0 423.11 189.433 423.11 423.11h-423.11v-423.11z","M64 536.89c0-233.678 189.433-423.112 423.11-423.112v423.112h423.11c0 233.677-189.43 423.11-423.11 423.11-233.677 0-423.11-189.434-423.11-423.11z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["engagement-dashboard"],"defaultCode":59731,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1006,"name":"engagement-dashboard","prevSize":32,"id":94,"code":59731},"setIdx":0,"setId":6,"iconIdx":94},{"icon":{"paths":["M416 586.445v177.232l75.514-62.928c11.869-9.888 29.104-9.888 40.973 0l75.514 62.928v-177.232c-29.098 13.821-61.645 21.555-96 21.555s-66.902-7.734-96-21.555zM352 540.768v291.232c0 12.416 7.184 23.712 18.426 28.979 11.245 5.267 24.522 3.552 34.061-4.397l107.514-89.594 107.514 89.594c9.539 7.949 22.816 9.664 34.061 4.397 11.242-5.267 18.426-16.563 18.426-28.979v-291.232c39.59-40.403 64-95.734 64-156.768 0-123.712-100.288-224.001-224-224.001s-224 100.288-224 224.001c0 61.034 24.41 116.365 64 156.768zM416 512.013l-0.016-0.013c-38.854-29.19-63.984-75.661-63.984-128 0-88.366 71.635-160.001 160-160.001s160 71.635 160 160.001c0 52.339-25.13 98.81-63.984 128l-0.016 0.013c-26.742 20.083-59.981 31.987-96 31.987s-69.258-11.904-96-31.987z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["enterprise-feature"],"defaultCode":59732,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1007,"name":"enterprise-feature","prevSize":32,"id":95,"code":59732},"setIdx":0,"setId":6,"iconIdx":95},{"icon":{"paths":["M500.64 128c213.35 0 386.336 172.985 386.336 386.336 0 192.87-141.254 352.707-325.974 381.664v-269.958h90.022l17.114-111.706h-107.136v-72.47c0-11.462 2.102-22.822 7.274-32.544 2.474-4.656 5.651-8.934 9.635-12.666 9.866-9.245 24.688-15.152 46.058-15.152h48.733v-95.080c0 0-44.224-7.552-86.493-7.552-84.698 0-141.258 49.313-145.651 138.907-0.182 3.738-0.275 7.546-0.275 11.424v85.133h-98.122v111.706h98.122v269.958c-184.721-29.011-325.978-188.848-325.978-381.664 0-213.351 172.985-386.336 386.336-386.336z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["facebook-monochromatic"],"defaultCode":59733,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1008,"name":"facebook-monochromatic","prevSize":32,"id":96,"code":59733},"setIdx":0,"setId":6,"iconIdx":96},{"icon":{"paths":["M865.139 512c0 33.28-4.624 65.485-13.267 96h-183.274c2.803-30.816 4.288-62.957 4.288-96 0-16.234-0.358-32.25-1.056-48h190.061c2.141 15.696 3.248 31.718 3.248 48zM607.68 464c0.739 15.67 1.123 31.686 1.123 48 0 33.398-1.61 65.555-4.57 96h-183.117c-2.963-30.445-4.57-62.602-4.57-96 0-16.314 0.384-32.33 1.123-48h190.010zM667.014 400c-10.016-93.226-32.221-173.252-61.875-227.763 113.702 30.788 204.579 116.981 241.782 227.763h-179.907zM420.211 172.237c-29.654 54.51-51.862 134.537-61.875 227.763h-179.91c37.204-110.782 128.083-196.975 241.785-227.763zM422.816 400c7.171-62.314 20.064-116.804 36.384-159.18 12.842-33.339 26.56-55.927 38.528-69.070 8.406-9.235 13.446-11.291 14.947-11.698 1.501 0.407 6.541 2.463 14.947 11.698 11.968 13.143 25.686 35.731 38.525 69.070 16.32 42.377 29.216 96.867 36.387 159.18h-179.718zM353.52 464c-0.698 15.75-1.056 31.766-1.056 48 0 33.043 1.482 65.184 4.288 96h-183.275c-8.643-30.515-13.268-62.72-13.268-96 0-16.282 1.107-32.304 3.249-48h190.061zM364.742 672c11.667 72.646 31.040 134.861 55.466 179.763-96.678-26.179-176.854-92.413-221.565-179.763h166.1zM513.152 928c229.834-0.259 416.070-186.41 416.070-416 0-229.75-186.493-416-416.547-416s-416.55 186.25-416.55 416c0 229.59 186.237 415.741 416.070 416 0.16 0 0.32 0 0.48 0s0.32 0 0.477 0zM605.142 851.763c24.426-44.902 43.798-107.117 55.466-179.763h166.099c-44.71 87.35-124.89 153.584-221.565 179.763zM595.638 672c-7.379 42.458-17.514 80.083-29.491 111.184-12.838 33.338-26.557 55.926-38.525 69.069-8.406 9.235-13.446 11.29-14.947 11.699-1.501-0.41-6.541-2.464-14.947-11.699-11.968-13.142-25.686-35.731-38.528-69.069-11.978-31.101-22.109-68.726-29.488-111.184h165.926z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["federation"],"defaultCode":59652,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1009,"id":97,"name":"federation","prevSize":32,"code":59652},"setIdx":0,"setId":6,"iconIdx":97},{"icon":{"paths":["M542.65 96c80.093 0 154.902 22.636 218.374 61.859l-46.746 46.746c-24.739-13.843-51.322-24.785-79.286-32.368 12.166 22.395 23.078 49.095 32.406 79.249l-52 51.999c-5.654-22.994-12.17-44.005-19.347-62.666-12.822-33.339-26.522-55.927-38.474-69.070-8.397-9.235-13.43-11.291-14.928-11.698-1.498 0.407-6.531 2.463-14.928 11.698-11.952 13.143-25.654 35.731-38.477 69.070-16.298 42.377-29.174 96.867-36.336 159.18h65.974l-64 64h-7.114c-0.118 2.47-0.224 4.95-0.323 7.437l-64.538 64.538c-0.173-7.933-0.259-15.926-0.259-23.974 0-16.234 0.358-32.25 1.053-48h-189.809c-2.14 15.696-3.245 31.718-3.245 48 0 33.28 4.619 65.485 13.251 96h106.984l-64 64h-17.852c2.004 3.92 4.078 7.798 6.223 11.629l-46.746 46.749c-39.223-63.475-61.859-138.282-61.859-218.378 0-229.75 186.25-416 416.001-416zM896.79 293.623l-46.746 46.748c10.56 18.87 19.43 38.816 26.413 59.629h-86.045l-64 64h164.992c2.138 15.696 3.245 31.718 3.245 48 0 33.28-4.621 65.485-13.251 96h-183.030c2.8-30.816 4.282-62.957 4.282-96 0-8.045-0.090-16.042-0.262-23.974l-64.534 64.534c-0.752 19.008-2.026 37.523-3.766 55.44h-51.674l-64 64h107.088c-7.37 42.458-17.488 80.083-29.45 111.184-12.822 33.338-26.522 55.926-38.474 69.069-8.397 9.235-13.43 11.29-14.928 11.699-1.498-0.41-6.531-2.464-14.928-11.699-11.952-13.142-25.654-35.731-38.477-69.069-7.178-18.662-13.69-39.677-19.344-62.669l-52 51.997c9.325 30.154 20.237 56.854 32.403 79.251-27.965-7.584-54.547-18.525-79.286-32.368l-46.746 46.746c63.347 39.146 137.984 61.77 217.901 61.859h0.954c229.53-0.259 415.523-186.41 415.523-416 0-80.096-22.637-154.902-61.859-218.377zM450.307 172.237c-113.552 30.788-204.312 116.98-241.467 227.763h179.675c10-93.226 32.176-173.252 61.792-227.763zM634.995 851.763c24.394-44.902 43.741-107.117 55.392-179.763h165.878c-44.653 87.35-124.723 153.584-221.27 179.763zM856.022 153.372c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-672.001 672c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l672.001-672z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["federation-disabled"],"defaultCode":59651,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1010,"id":98,"name":"federation-disabled","prevSize":32,"code":59651},"setIdx":0,"setId":6,"iconIdx":98},{"icon":{"paths":["M373.334 448c0-17.674 14.326-32 32-32h213.331c17.674 0 32 14.326 32 32s-14.326 32-32 32h-213.331c-17.674 0-32-14.326-32-32z","M405.334 544c-17.674 0-32 14.326-32 32s14.326 32 32 32h213.331c17.674 0 32-14.326 32-32s-14.326-32-32-32h-213.331z","M256 128c-17.673 0-32 14.327-32 32v704c0 17.674 14.327 32 32 32h512c17.674 0 32-14.326 32-32v-501.744c0-6.672-2.083-13.174-5.962-18.602l-144.467-202.254c-6.006-8.409-15.706-13.4-26.038-13.4h-367.533zM736 372.509v459.491h-448v-640h319.066l128.934 180.509z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["file-document"],"defaultCode":59734,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1011,"name":"file-document","prevSize":32,"id":99,"code":59734},"setIdx":0,"setId":6,"iconIdx":99},{"icon":{"paths":["M128 192c-17.673 0-32 14.327-32 32v576.019c0 17.674 14.327 32 32 32h768c17.674 0 32-14.326 32-32v-576.019c0-17.673-14.326-32-32-32h-768zM160 378.301v-122.301h149.333v122.301h-149.333zM160 442.301h149.333v141.722h-149.333v-141.722zM160 648.022h149.333v119.997h-149.333v-119.997zM373.334 768.019v-119.997h490.666v119.997h-490.666zM864 584.022h-490.666v-141.722h490.666v141.722zM864 378.301h-490.666v-122.301h490.666v122.301z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["file-sheet"],"defaultCode":59735,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1012,"name":"file-sheet","prevSize":32,"id":100,"code":59735},"setIdx":0,"setId":6,"iconIdx":100},{"icon":{"paths":["M206.667 293.692c-30.421-42.402-0.116-101.442 52.070-101.442h518.572c51.174 0 81.706 57.026 53.334 99.615l-180.678 271.207v220.762c0 46.352-47.693 77.373-90.067 58.582l-121.424-53.85c-23.168-10.275-38.102-33.238-38.102-58.582v-166.304l-193.704-269.988zM777.309 256.334h-518.572l193.705 269.989c7.811 10.89 12.013 23.955 12.013 37.357v166.304l121.424 53.85v-220.762c0-12.646 3.741-25.008 10.752-35.533l180.678-271.205z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["filter"],"defaultCode":59736,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1013,"name":"filter","prevSize":32,"id":101,"code":59736},"setIdx":0,"setId":6,"iconIdx":101},{"icon":{"paths":["M623.091 896c-2.806 0-5.296-0.624-7.168-0.938-62-16.858-102.816-39.648-145.811-80.858-55.149-54.010-85.37-125.814-85.37-202.301 0-65.875 56.704-119.571 126.496-119.571s126.496 53.696 126.496 119.571c0 34.963 31.469 63.373 69.792 63.373s69.789-28.41 69.789-63.373c0-135.808-119.642-246.637-266.701-246.637-104.998 0-200.338 57.133-243.334 145.795-14.332 29.347-21.498 63.066-21.498 100.842 0 28.72 2.492 73.363 24.925 131.744 2.804 7.181 2.492 14.675-0.623 21.856-3.116 6.867-9.035 11.862-16.201 14.358-2.804 1.251-6.231 1.562-9.659 1.562-11.84 0-22.433-7.181-26.484-18.106-19.005-50.266-28.353-99.904-28.353-151.728 0-46.205 9.036-88.352 26.795-125.504 52.343-108.019 167.936-177.638 294.432-177.638 178.528 0 323.718 135.804 323.718 302.828 0 65.875-56.704 119.571-126.806 119.571s-126.81-53.696-126.81-119.571c0-34.963-31.469-63.373-69.792-63.373-38.634 0-69.789 28.41-69.789 63.373 0 61.504 24.301 119.261 68.544 162.342 35.206 34.029 68.858 53.072 120.576 67.123 7.168 1.872 13.398 6.557 17.136 13.11 3.741 6.557 4.675 14.362 2.806 21.229-2.806 11.866-14.022 20.918-27.107 20.918zM426.803 888.195c-7.789 0-15.267-3.123-20.253-8.742-33.338-32.781-51.718-54.010-77.891-100.525-26.795-47.142-41.127-105.21-41.127-167.338 0-116.448 100.948-211.357 224.951-211.357s224.954 94.909 224.954 211.357c0 15.61-12.464 28.096-28.352 28.096-15.891 0-28.666-12.173-28.666-28.096 0-85.542-75.398-155.162-168.246-155.162s-168.246 69.619-168.246 155.162c0 52.448 11.84 100.528 34.272 139.552 23.366 41.52 38.947 59.005 68.858 88.662 10.902 11.238 10.902 28.723 0 39.648-5.92 5.933-13.088 8.742-20.253 8.742zM699.738 818.886c-47.36 0-88.797-11.862-123.382-34.963-59.197-39.651-94.717-103.962-94.717-172.333 0-15.61 12.464-28.099 28.352-28.099 15.891 0 28.355 12.49 28.355 28.099 0 49.638 26.17 96.781 69.789 125.501 25.238 16.861 55.149 24.976 91.603 24.976 7.789 0 22.432-0.934 38.010-3.744 1.558-0.314 3.427-0.314 4.986-0.314 13.709 0 25.238 9.99 27.728 23.414 1.248 7.181-0.31 14.672-4.362 20.605-4.362 6.243-10.902 10.614-18.694 11.862-23.366 4.685-43.93 4.995-47.667 4.995zM188.765 435.824c-5.608 0-11.217-1.562-16.202-4.995-6.543-4.058-10.593-10.614-12.151-18.106-1.246-7.494 0.311-14.986 4.985-21.232 38.635-53.696 87.862-95.843 146.125-125.501 60.132-30.595 129.613-46.829 200.961-46.829 71.037 0 140.205 15.922 200.029 46.205 58.573 29.659 107.802 71.492 146.125 124.567 4.362 5.93 6.23 13.424 4.986 20.915-1.248 7.494-5.61 14.048-11.84 18.419-4.986 3.437-10.595 4.995-16.515 4.995-9.034 0-17.757-4.371-23.056-11.862-33.338-45.891-75.709-82.109-125.562-107.083-52.342-26.224-112.787-40.273-174.477-40.273-62.314 0-122.758 14.049-175.101 40.585-49.852 25.913-92.537 62.128-126.186 108.643-3.739 6.87-12.463 11.552-22.121 11.552zM733.696 239.141c-4.672 0-9.347-1.249-13.395-3.434-71.35-35.902-133.354-51.512-207.504-51.512-74.467 0-144.256 17.483-207.817 51.824-4.050 2.185-8.724 3.122-13.397 3.122-10.282 0-19.629-5.62-24.925-14.361-3.739-6.556-4.673-14.361-2.492-21.541s7.166-13.424 13.709-16.859c72.594-38.712 151.733-58.38 234.924-58.38 82.563 0 154.848 17.795 233.987 58.068 6.854 3.434 11.84 9.366 14.33 16.859 2.182 7.18 1.248 14.673-2.179 21.229-4.986 9.054-14.643 14.985-25.238 14.985z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["fingerprint"],"defaultCode":59737,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1014,"name":"fingerprint","prevSize":32,"id":102,"code":59737},"setIdx":0,"setId":6,"iconIdx":102},{"icon":{"paths":["M266.667 170.664c0-17.673 14.327-32 32-32h500.623c12.122 0 23.2 6.848 28.621 17.689s4.253 23.814-3.021 33.511l-122.134 162.843 122.134 162.845c7.274 9.696 8.442 22.672 3.021 33.51-5.421 10.842-16.499 17.69-28.621 17.69h-468.624v286.579c0 17.674-14.325 32-31.999 32s-32-14.326-32-32v-682.667zM330.666 502.752h404.624l-98.134-130.845c-8.531-11.376-8.531-27.021 0-38.4l98.134-130.843h-404.624v300.088z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["flag"],"defaultCode":59738,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1015,"name":"flag","prevSize":32,"id":103,"code":59738},"setIdx":0,"setId":6,"iconIdx":103},{"icon":{"paths":["M140.020 213.336c0-17.673 14.327-32 32-32h234.057c7.181 0 14.157 2.416 19.798 6.86l88.813 69.94h339.997c17.674 0 32 14.327 32 32v520.533c0 17.674-14.326 32-32 32h-682.665c-17.673 0-32-14.326-32-32v-597.333zM204.020 245.336v533.333h618.665v-456.534h-319.085c-7.181 0-14.154-2.415-19.798-6.858l-88.813-69.94h-190.969z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["folder"],"defaultCode":59739,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1016,"name":"folder","prevSize":32,"id":104,"code":59739},"setIdx":0,"setId":6,"iconIdx":104},{"icon":{"paths":["M370.704 544c0-17.674-14.326-32-32-32s-31.999 14.326-31.999 32v32h-32c-17.673 0-32 14.326-32 32s14.327 32 32 32h32v32c0 17.674 14.325 32 31.999 32s32-14.326 32-32v-32h32c17.674 0 32-14.326 32-32s-14.326-32-32-32h-32v-32z","M746.704 624c30.928 0 56-25.072 56-56s-25.072-56-56-56c-30.928 0-56 25.072-56 56s25.072 56 56 56z","M674.704 664c0 30.928-25.072 56-56 56s-56-25.072-56-56c0-30.928 25.072-56 56-56s56 25.072 56 56z","M706.704 128c0-17.673-14.326-32-32-32s-32 14.327-32 32v96h-128c-17.674 0-32 14.327-32 32v96h-191.999c-106.038 0-192 85.962-192 192v128c0 106.038 85.961 192 192 192h447.999c106.038 0 192-85.962 192-192v-128c0-106.038-85.962-192-192-192h-192v-64h128c17.674 0 32-14.327 32-32v-128zM866.704 544v128c0 70.691-57.306 128-128 128h-447.999c-70.692 0-128-57.309-128-128v-128c0-70.691 57.308-128 128-128h447.999c70.694 0 128 57.309 128 128z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["game"],"defaultCode":59753,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1017,"name":"game","prevSize":32,"id":105,"code":59753},"setIdx":0,"setId":6,"iconIdx":105},{"icon":{"paths":["M494.31 170.648l23.037 24.005 23.629-24.005 74.669 0.041v75.854h74.669v75.856h74.666v26.518h0.003v504.419h-522.678v-682.689h252.006zM540.976 246.503h-224.004v530.979h373.341v-379.229h-149.338v-151.75z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["giphy-monochromatic"],"defaultCode":59754,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1018,"name":"giphy-monochromatic","prevSize":32,"id":106,"code":59754},"setIdx":0,"setId":6,"iconIdx":106},{"icon":{"paths":["M862.454 324.045c-35.2-60.31-82.944-108.057-143.248-143.253-60.314-35.198-126.16-52.792-197.581-52.792-71.414 0-137.28 17.6-197.581 52.792-60.31 35.194-108.053 82.943-143.253 143.253-35.194 60.307-52.792 126.166-52.792 197.571 0 85.77 25.024 162.899 75.086 231.405 50.056 68.509 114.721 115.917 193.989 142.224 9.229 1.712 16.058 0.509 20.499-3.584 4.442-4.096 6.662-9.226 6.662-15.37 0-1.024-0.090-10.246-0.259-27.674-0.176-17.43-0.259-32.637-0.259-45.61l-11.789 2.038c-7.517 1.379-16.998 1.962-28.445 1.795-11.443-0.16-23.322-1.357-35.619-3.587-12.304-2.211-23.747-7.334-34.342-15.366-10.588-8.029-18.104-18.538-22.547-31.514l-5.125-11.795c-3.416-7.853-8.795-16.573-16.142-26.134-7.348-9.571-14.778-16.058-22.294-19.475l-3.588-2.57c-2.391-1.706-4.61-3.766-6.662-6.154-2.050-2.39-3.585-4.781-4.61-7.174-1.027-2.397-0.176-4.365 2.562-5.907 2.738-1.539 7.685-2.288 14.864-2.288l10.247 1.53c6.834 1.37 15.287 5.462 25.371 12.298 10.078 6.835 18.363 15.715 24.856 26.646 7.863 14.013 17.335 24.688 28.445 32.038 11.101 7.347 22.294 11.014 33.568 11.014s21.011-0.854 29.216-2.557c8.192-1.709 15.882-4.275 23.062-7.69 3.075-22.902 11.446-40.499 25.11-52.797-19.475-2.045-36.982-5.13-52.534-9.226-15.542-4.106-31.603-10.765-48.173-20-16.579-9.222-30.331-20.672-41.262-34.333-10.932-13.67-19.905-31.613-26.904-53.818-7.003-22.214-10.505-47.837-10.505-76.88 0-41.35 13.5-76.541 40.493-105.584-12.645-31.088-11.451-65.939 3.585-104.55 9.908-3.079 24.606-0.768 44.078 6.916 19.478 7.689 33.738 14.275 42.797 19.736 9.059 5.46 16.317 10.087 21.786 13.837 31.782-8.88 64.582-13.322 98.406-13.322s66.63 4.442 98.416 13.322l19.475-12.295c13.318-8.204 29.046-15.722 47.142-22.556 18.112-6.83 31.958-8.712 41.53-5.633 15.37 38.612 16.739 73.46 4.093 104.548 26.992 29.046 40.496 64.243 40.496 105.587 0 29.043-3.514 54.746-10.506 77.13-7.002 22.387-16.051 40.314-27.152 53.818-11.114 13.501-24.957 24.864-41.526 34.083-16.573 9.226-32.637 15.888-48.179 19.99-15.552 4.102-33.059 7.187-52.534 9.238 17.763 15.37 26.646 39.632 26.646 72.774v108.134c0 6.141 2.134 11.27 6.41 15.37 4.272 4.090 11.018 5.296 20.243 3.581 79.28-26.304 143.946-73.712 194-142.224 50.048-68.502 75.082-145.632 75.082-231.405-0.019-71.395-17.626-137.248-52.803-197.555z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["github-monochromatic"],"defaultCode":59655,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1019,"name":"github-monochromatic","prevSize":32,"id":107,"code":59655},"setIdx":0,"setId":6,"iconIdx":107},{"icon":{"paths":["M133.618 423.61h215.092l-92.537-284.607c-4.74-14.67-25.504-14.67-30.244 0l-92.311 284.607zM86.899 567.171l46.72-143.546h737.133l46.72 143.546c4.288 13.088-0.451 27.533-11.51 35.434l-403.776 293.408-403.776-293.408c-11.060-7.901-15.799-22.346-11.511-35.434zM655.661 423.61h215.091l-92.31-284.607c-4.739-14.67-25.504-14.67-30.243 0l-92.538 284.607z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["gitlab-monochromatic"],"defaultCode":59656,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1020,"name":"gitlab-monochromatic","prevSize":32,"id":108,"code":59656},"setIdx":0,"setId":6,"iconIdx":108},{"icon":{"paths":["M226.9 260.289c6.691-2.875 13.811-4.319 20.961-4.288 17.673 0.077 32.062-14.187 32.14-31.86s-14.187-32.062-31.86-32.14c-15.989-0.070-31.8 3.167-46.506 9.485-14.702 6.317-27.969 15.571-39.071 27.156-11.1 11.582-19.822 25.269-25.729 40.238-5.898 14.946-8.889 30.916-8.834 47.005l-0.001 15.941 0.001-11.899v255.848c-0 0.074-0.001 0.15-0.001 0.224v89.6c0 43.642 16.497 85.792 46.318 117.104 29.872 31.366 70.73 49.296 113.682 49.296 42.954 0 83.811-17.93 113.683-49.296 29.821-31.312 46.317-73.462 46.317-117.104v-57.6h128v57.6c0 43.642 16.496 85.792 46.317 117.104 29.872 31.366 70.73 49.296 113.683 49.296s83.811-17.93 113.683-49.296c29.821-31.312 46.317-73.462 46.317-117.104v-89.6c0-0.077 0-0.15 0-0.227v-259.883c0.054-16.090-2.938-32.062-8.835-47.010-5.907-14.969-14.627-28.656-25.728-40.238-11.104-11.585-24.368-20.839-39.072-27.156-14.704-6.318-30.515-9.555-46.506-9.485-17.674 0.077-31.936 14.467-31.859 32.14s14.467 31.937 32.141 31.86c7.149-0.031 14.269 1.413 20.96 4.288 6.694 2.876 12.867 7.147 18.128 12.636 5.264 5.492 9.501 12.090 12.403 19.448 2.906 7.36 4.4 15.292 4.368 23.326v228.302h-639.999l0-228.173-0-0.128c-0.032-8.034 1.462-15.965 4.366-23.326 2.904-7.358 7.141-13.957 12.404-19.448 5.26-5.489 11.434-9.759 18.129-12.636zM269.255 608l104.214 104.214c6.826-14.237 10.531-30.173 10.531-46.614v-57.6h-114.745zM717.254 608l104.214 104.214c6.826-14.237 10.531-30.173 10.531-46.614v-57.6h-114.746zM896 315.89v0zM128.001 319.928l0-3.973-0-0.069v4.043zM328.954 758.208l-136.954-136.954v44.346c0 27.648 10.475 53.869 28.663 72.966 18.137 19.043 42.394 29.434 67.337 29.434 14.208 0 28.194-3.37 40.954-9.792zM640 665.6v-44.346l136.954 136.954c-12.758 6.422-26.746 9.792-40.954 9.792-24.944 0-49.2-10.39-67.338-29.434-18.189-19.098-28.662-45.318-28.662-72.966z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["glasses"],"defaultCode":59812,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1021,"id":109,"name":"glasses","prevSize":32,"code":59812},"setIdx":0,"setId":6,"iconIdx":109},{"icon":{"paths":["M634.803 170.664h-256.112l-264.387 460.802 124.984 221.866h534.916l124.982-221.866-264.384-460.802zM367.814 631.466l138.931-239.789 138.934 239.789h-277.866z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["google-drive-monochromatic"],"defaultCode":59756,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1022,"name":"google-drive-monochromatic","prevSize":32,"id":110,"code":59756},"setIdx":0,"setId":6,"iconIdx":110},{"icon":{"paths":["M658.794 338.154c-39.798-38.052-90.416-57.426-146.794-57.426-100.016 0-184.669 67.548-214.865 158.313l-0.002-0.003c-7.679 23.040-12.042 47.648-12.042 72.957s4.364 49.92 12.044 72.96l0 0.003c30.196 90.765 114.849 158.314 214.865 158.314 51.664 0 95.651-13.613 130.035-36.653v-0.016c40.669-27.229 67.725-67.898 76.627-115.898h-206.662v-148.538h361.658c4.538 25.136 6.982 51.315 6.982 78.547 0 116.944-41.891 215.389-114.502 282.24v0.013c-63.533 58.646-150.458 93.030-254.138 93.030-150.109 0-279.971-86.048-343.156-211.549l-0-0.003c-26.007-51.84-40.844-110.49-40.844-172.451 0-61.965 14.836-120.611 40.844-172.451h0.004c63.187-125.495 193.047-211.542 343.153-211.542 103.504 0 190.429 38.051 256.931 100.014l-110.138 110.139z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["google-monochromatic"],"defaultCode":59657,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1023,"name":"google-monochromatic","prevSize":32,"id":111,"code":59657},"setIdx":0,"setId":6,"iconIdx":111},{"icon":{"paths":["M129.354 272c0-17.673 14.327-32 32-32h704c17.674 0 32 14.327 32 32s-14.326 32-32 32h-704c-17.673 0-32-14.327-32-32zM289.354 432c0 17.674-14.327 32-32 32s-32-14.326-32-32c0-17.674 14.327-32 32-32s32 14.326 32 32zM289.354 752c0 17.674-14.327 32-32 32s-32-14.326-32-32c0-17.674 14.327-32 32-32s32 14.326 32 32zM449.354 624c17.674 0 32-14.326 32-32s-14.326-32-32-32c-17.674 0-32 14.326-32 32s14.326 32 32 32zM385.354 400c-17.674 0-32 14.326-32 32s14.326 32 32 32h480c17.674 0 32-14.326 32-32s-14.326-32-32-32h-480zM353.354 752c0-17.674 14.326-32 32-32h480c17.674 0 32 14.326 32 32s-14.326 32-32 32h-480c-17.674 0-32-14.326-32-32zM577.354 560c-17.674 0-32 14.326-32 32s14.326 32 32 32h288c17.674 0 32-14.326 32-32s-14.326-32-32-32h-288z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["group-by-type"],"defaultCode":59757,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1024,"name":"group-by-type","prevSize":32,"id":112,"code":59757},"setIdx":0,"setId":6,"iconIdx":112},{"icon":{"paths":["M170.668 245.336c0-17.673 14.327-32 32-32h640.846c17.674 0 32 14.327 32 32s-14.326 32-32 32h-640.846c-17.673 0-32-14.327-32-32zM170.668 501.334c0-17.67 14.327-32 32-32h640.846c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-640.846c-17.673 0-32-14.326-32-32zM170.668 757.334c0-17.67 14.327-32 32-32h640.846c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32h-640.846c-17.673 0-32-14.326-32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["hamburguer"],"defaultCode":59758,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1025,"name":"hamburguer","prevSize":32,"id":113,"code":59758},"setIdx":0,"setId":6,"iconIdx":113},{"icon":{"paths":["M832 512c0 176.73-143.27 320-320 320s-320-143.27-320-320h-64c0 212.077 171.923 384 384 384s384-171.923 384-384c0-212.077-171.923-384-384-384-123.718 0-233.772 58.508-304 149.364v-101.364c0-17.673-14.327-32-32-32s-32 14.327-32 32v192c0 17.674 14.327 32 32 32h176c17.674 0 32-14.326 32-32s-14.326-32-32-32h-107.295c57.24-86.756 155.583-144 267.295-144 176.73 0 320 143.27 320 320z","M544 320c0-17.673-14.326-32-32-32s-32 14.327-32 32v224c0 8.486 3.373 16.627 9.373 22.627l96 96c12.496 12.496 32.758 12.496 45.254 0s12.496-32.758 0-45.254l-86.627-86.627v-210.746z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["history"],"defaultCode":59759,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1026,"name":"history","prevSize":32,"id":114,"code":59759},"setIdx":0,"setId":6,"iconIdx":114},{"icon":{"paths":["M522.042 195.354l224.464 260.044v366.234c0 5.856-4.752 10.605-10.614 10.605h-136.416v-149.821c0-23.424-19.014-42.413-42.47-42.413h-85.955c-23.453 0-42.467 18.989-42.467 42.413v149.821h-136.41c-5.864 0-10.617-4.749-10.617-10.605v-366.307l224.403-259.971c4.237-4.907 11.85-4.907 16.083 0zM560.57 895.856h175.322c41.043 0 74.32-33.232 74.32-74.224v-244.205h56.227c12.454 0 23.766-7.251 28.954-18.557 5.19-11.309 3.302-24.602-4.829-34.022l-320.272-371.033c-29.648-34.347-82.934-34.347-112.582 0l-320.27 371.033c-8.132 9.421-10.020 22.714-4.831 34.022 5.188 11.306 16.501 18.557 28.956 18.557h56.288v244.205c0 40.992 33.274 74.224 74.32 74.224h175.316c1.174 0.096 2.362 0.147 3.562 0.147h85.955c1.2 0 2.39-0.051 3.565-0.147z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["home"],"defaultCode":59760,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1027,"name":"home","prevSize":32,"id":115,"code":59760},"setIdx":0,"setId":6,"iconIdx":115},{"icon":{"paths":["M864 512c0-86.89-31.482-166.429-83.664-227.826l-496.162 496.162c61.397 52.182 140.937 83.664 227.826 83.664 194.403 0 352-157.597 352-352zM239.349 734.65l495.3-495.3c-60.662-49.597-138.182-79.349-222.65-79.349-194.404 0-352 157.596-352 352 0 84.467 29.753 161.987 79.349 222.65zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["ignore"],"defaultCode":59740,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1028,"name":"ignore","prevSize":32,"id":116,"code":59740},"setIdx":0,"setId":6,"iconIdx":116},{"icon":{"paths":["M406.685 405.334c0 47.126-38.205 85.331-85.334 85.331-47.127 0-85.332-38.205-85.332-85.331 0-47.13 38.205-85.334 85.332-85.334 47.13 0 85.334 38.205 85.334 85.334z","M97.352 192c0-17.673 14.327-32 32-32h767.999c17.674 0 32 14.327 32 32v640c0 17.674-14.326 32-32 32h-767.999c-17.673 0-32-14.326-32-32v-640zM161.352 764.163l151.704-176.989c9.271-10.813 24.57-14.202 37.536-8.307l153.123 69.603 160.474-204.24c6.010-7.651 15.174-12.15 24.902-12.23s18.963 4.272 25.098 11.821l151.162 186.048v-405.869h-703.999v540.163zM214.927 800h650.423v-68.64l-175.581-216.099-166.781 212.269-176.989-80.448-131.073 152.918z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["image"],"defaultCode":59761,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1029,"name":"image","prevSize":32,"id":117,"code":59761},"setIdx":0,"setId":6,"iconIdx":117},{"icon":{"paths":["M512 873.027c-199.389 0-361.026-161.635-361.026-361.024s161.636-361.026 361.026-361.026c199.389 0 361.024 161.637 361.024 361.026s-161.635 361.024-361.024 361.024zM512 938.669c235.642 0 426.666-191.024 426.666-426.666s-191.024-426.667-426.666-426.667c-235.642 0-426.667 191.025-426.667 426.667s191.025 426.666 426.667 426.666zM544.819 347.901c0 18.125-14.694 32.819-32.819 32.819-18.128 0-32.822-14.694-32.822-32.819 0-18.128 14.694-32.821 32.822-32.821 18.125 0 32.819 14.693 32.819 32.821zM512 413.542c-18.128 0-32.822 14.694-32.822 32.819v229.744c0 18.125 14.694 32.819 32.822 32.819 18.125 0 32.819-14.694 32.819-32.819v-229.744c0-18.125-14.694-32.819-32.819-32.819z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["info"],"defaultCode":59762,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1030,"name":"info","prevSize":32,"id":118,"code":59762},"setIdx":0,"setId":6,"iconIdx":118},{"icon":{"paths":["M512 864c-194.404 0-352-157.597-352-352s157.596-352 352-352c194.403 0 352 157.596 352 352s-157.597 352-352 352zM512 928c229.75 0 416-186.25 416-416s-186.25-416-416-416c-229.75 0-416 186.25-416 416s186.25 416 416 416zM662.627 361.373c12.496 12.496 12.496 32.758 0 45.254l-105.373 105.373 105.373 105.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-105.373-105.373-105.373 105.373c-12.496 12.496-32.758 12.496-45.254 0s-12.496-32.758 0-45.254l105.373-105.373-105.373-105.373c-12.496-12.496-12.496-32.758 0-45.254s32.758-12.496 45.254 0l105.373 105.373 105.373-105.373c12.496-12.496 32.758-12.496 45.254 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["input-clear"],"defaultCode":59763,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1031,"name":"input-clear","prevSize":32,"id":119,"code":59763},"setIdx":0,"setId":6,"iconIdx":119},{"icon":{"paths":["M384 288c-17.674 0-32 14.327-32 32s14.326 32 32 32h256c17.674 0 32-14.326 32-32s-14.326-32-32-32h-256z","M352 448c0-17.674 14.326-32 32-32h256c17.674 0 32 14.326 32 32s-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M512 640c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M224 224v576c0 35.347 28.654 64 64 64h448c35.347 0 64-28.653 64-64v-576c0-35.346-28.653-64-64-64h-448c-35.346 0-64 28.654-64 64zM288 800v-576h448v576h-448z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["instance"],"defaultCode":59764,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1032,"name":"instance","prevSize":32,"id":120,"code":59764},"setIdx":0,"setId":6,"iconIdx":120},{"icon":{"paths":["M563.59 255.992l-170.669 512.001h-136.941c-17.673 0-32 14.326-32 32 0 17.67 14.327 32 32 32h320c17.674 0 32-14.33 32-32 0-17.674-14.326-32-32-32h-115.597l170.669-512.001h136.928c17.674 0 32-14.327 32-32s-14.326-32-32-32h-159.002c-0.666-0.021-1.328-0.021-1.99 0h-159.008c-17.674 0-32 14.327-32 32s14.326 32 32 32h115.61z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["italic"],"defaultCode":59765,"grid":0},"attrs":[{}],"properties":{"order":1033,"name":"italic","prevSize":32,"id":121,"code":59765},"setIdx":0,"setId":6,"iconIdx":121},{"icon":{"paths":["M497.136 169.372c12.499 12.497 12.499 32.758 0 45.255l-35.958 35.96c1.078-0.016 2.163-0.025 3.245-0.025h191.152c115.11 0 208.426 93.316 208.426 208.426 0 115.107-93.315 208.422-208.426 208.422h-15.574v-64h15.574c79.763 0 144.426-64.659 144.426-144.422 0-79.766-64.662-144.426-144.426-144.426h-191.152c-1.030 0-2.058 0.011-3.082 0.032l35.795 35.796c12.499 12.499 12.499 32.758 0 45.258-12.496 12.496-32.758 12.496-45.254 0l-90.509-90.511c-12.496-12.497-12.496-32.758 0-45.255l90.509-90.51c12.496-12.497 32.758-12.497 45.254 0zM201.318 500.746h56.159v325.818h-59.023v-268.387h-1.909l-76.204 48.682v-54.090l80.977-52.022zM570.41 719.494c0 64.749-48.045 111.523-116.931 111.523-63.638 0-110.886-38.979-112.48-93.069h57.274c2.070 26.726 25.773 45.341 55.206 45.341 34.838 0 59.978-25.933 59.818-62.365 0.16-36.909-25.613-63.318-61.411-63.475-19.568-0.16-40.25 7.955-51.226 20.045l-53.296-8.749 17.024-168h188.998v49.318h-140.16l-9.386 86.384h1.91c12.090-14.317 35.475-24.816 61.885-24.816 59.184 0 102.774 45.181 102.774 107.862z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["jump-backward"],"defaultCode":59766,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1034,"name":"jump-backward","prevSize":32,"id":122,"code":59766},"setIdx":0,"setId":6,"iconIdx":122},{"icon":{"paths":["M494.861 169.372c-12.496 12.497-12.496 32.758 0 45.255l35.962 35.96c-1.082-0.016-2.163-0.025-3.248-0.025h-191.149c-115.111 0-208.426 93.316-208.426 208.426 0 115.107 93.315 208.422 208.426 208.422h15.574v-64h-15.574c-79.764 0-144.426-64.659-144.426-144.422 0-79.766 64.661-144.426 144.426-144.426h191.149c1.030 0 2.061 0.011 3.085 0.032l-35.798 35.796c-12.496 12.499-12.496 32.758 0 45.258 12.499 12.496 32.758 12.496 45.258 0l90.509-90.511c12.496-12.497 12.496-32.758 0-45.255l-90.509-90.51c-12.499-12.497-32.758-12.497-45.258 0zM521.318 500.746h56.157v325.818h-59.021v-268.387h-1.91l-76.205 48.682v-54.090l80.979-52.022zM890.41 719.494c0 64.749-48.048 111.523-116.934 111.523-63.635 0-110.886-38.979-112.477-93.069h57.274c2.067 26.726 25.773 45.341 55.203 45.341 34.842 0 59.978-25.933 59.821-62.365 0.157-36.909-25.616-63.318-61.411-63.475-19.568-0.16-40.25 7.955-51.226 20.045l-53.296-8.749 17.021-168h189.002v49.318h-140.16l-9.386 86.384h1.91c12.090-14.317 35.475-24.816 61.885-24.816 59.181 0 102.774 45.181 102.774 107.862z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["jump-forward"],"defaultCode":59767,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1035,"name":"jump-forward","prevSize":32,"id":123,"code":59767},"setIdx":0,"setId":6,"iconIdx":123},{"icon":{"paths":["M769.296 649.373c12.496 12.496 12.496 32.758 0 45.254l-192 192c-12.499 12.496-32.758 12.496-45.258 0l-192-192c-12.496-12.496-12.496-32.758 0-45.254 12.499-12.496 32.758-12.496 45.258 0l137.37 137.373v-578.746h-192v192c0 17.674-14.325 32-31.999 32s-32-14.326-32-32v-224c0-17.673 14.327-32 32-32h255.999c17.674 0 32 14.327 32 32v610.746l137.373-137.373c12.499-12.496 32.758-12.496 45.258 0z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["jump-to-message"],"defaultCode":59768,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1036,"name":"jump-to-message","prevSize":32,"id":124,"code":59768},"setIdx":0,"setId":6,"iconIdx":124},{"icon":{"paths":["M576 256c0 35.346-28.653 64-64 64s-64-28.654-64-64c0-35.346 28.653-64 64-64s64 28.654 64 64z","M576 512c0 35.347-28.653 64-64 64s-64-28.653-64-64c0-35.347 28.653-64 64-64s64 28.653 64 64z","M576 768c0 35.347-28.653 64-64 64s-64-28.653-64-64c0-35.347 28.653-64 64-64s64 28.653 64 64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["kebab"],"defaultCode":59769,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1037,"name":"kebab","prevSize":32,"id":125,"code":59769},"setIdx":0,"setId":6,"iconIdx":125},{"icon":{"paths":["M160 224c-35.346 0-64 28.654-64 64v448c0 35.347 28.654 64 64 64h704c35.347 0 64-28.653 64-64v-448c0-35.346-28.653-64-64-64h-704zM160 288h704v448h-704v-448zM256 352c-17.673 0-32 14.326-32 32s14.327 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64zM256 512c0-17.674 14.327-32 32-32h64c17.674 0 32 14.326 32 32s-14.326 32-32 32h-64c-17.673 0-32-14.326-32-32zM480 480c-17.674 0-32 14.326-32 32s14.326 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64zM640 512c0-17.674 14.326-32 32-32h64c17.674 0 32 14.326 32 32s-14.326 32-32 32h-64c-17.674 0-32-14.326-32-32zM480 352c-17.674 0-32 14.326-32 32s14.326 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64zM320 640c0-17.674 14.326-32 32-32h320c17.674 0 32 14.326 32 32s-14.326 32-32 32h-320c-17.674 0-32-14.326-32-32zM704 352c-17.674 0-32 14.326-32 32s14.326 32 32 32h64c17.674 0 32-14.326 32-32s-14.326-32-32-32h-64z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["keyboard"],"defaultCode":59770,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1038,"name":"keyboard","prevSize":32,"id":126,"code":59770},"setIdx":0,"setId":6,"iconIdx":126},{"icon":{"paths":["M505.133 128.078c60.819-1.376 120.422 15.569 170.346 48.251 49.904 32.67 87.501 79.327 107.75 133.159 20.24 53.808 22.205 112.266 5.648 167.165-16.554 54.89-50.864 103.683-98.368 139.309-15.501 11.462-28.189 26.246-36.989 43.309-8.822 17.107-13.469 36-13.507 55.216v21.514h-96.013v-148.774l120.989-151.235c11.040-13.802 8.803-33.939-4.998-44.979s-33.939-8.803-44.979 4.998l-103.011 128.765-103.011-128.765c-11.040-13.802-31.178-16.038-44.979-4.998s-16.038 31.178-4.998 44.979l120.989 151.235v148.774h-95.994v-21.677c-0.138-19.030-4.762-37.728-13.462-54.691-8.694-16.954-21.21-31.69-36.509-43.194l-19.229 25.578 19.069-25.696c-34.247-25.418-61.857-57.84-80.845-94.736-18.985-36.89-28.886-77.331-29.027-118.285v-0.045c-0.71-146.981 123.709-271.715 281.13-275.177zM640.013 800c16.506 0 32.618-6.243 44.72-17.795 12.157-11.603 19.28-27.664 19.28-44.746v-22.842c0.022-8.947 2.182-17.856 6.39-26.016 4.214-8.176 10.406-15.459 18.208-21.216l0.192-0.144c58.173-43.59 100.733-103.75 121.35-172.109 20.621-68.378 18.154-141.245-7.021-208.177-25.168-66.908-71.664-124.28-132.602-164.174-60.915-39.878-133.274-60.348-206.826-58.689-189.76 4.184-344.567 155.060-343.702 339.427l0 0.045 32-0.154-32 0.109c0.176 51.165 12.553 101.558 36.121 147.35 23.547 45.754 57.616 85.658 99.521 116.774 7.682 5.792 13.781 13.062 17.952 21.194 4.164 8.122 6.33 16.944 6.409 25.84v22.781c0 17.082 7.123 33.142 19.28 44.746 12.106 11.552 28.218 17.795 44.72 17.795h256.006zM352 864c-17.674 0-32 14.326-32 32s14.326 32 32 32h320c17.674 0 32-14.326 32-32s-14.326-32-32-32h-320z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["lamp-bulb"],"defaultCode":59836,"grid":0},"attrs":[{}],"properties":{"order":1039,"id":127,"name":"lamp-bulb","prevSize":32,"code":59836},"setIdx":0,"setId":6,"iconIdx":127},{"icon":{"paths":["M681.904 256c0-17.673-14.326-32-32-32s-32 14.327-32 32v56.875l-80.346 13.998c-17.411 3.034-29.069 19.61-26.035 37.021 3.034 17.408 19.61 29.066 37.021 26.032l69.36-12.086v69.373c-30.384 6.851-60.461 20.074-84.154 43.139-27.923 27.184-44.070 65.238-44.070 113.808 0 25.741 6.262 48.262 18.451 66.621 12.186 18.349 29.062 30.682 47.251 38 35.357 14.221 76.72 10.173 108.128-4.579l1.206-0.566c31.126-14.621 62.493-29.354 90.723-57.818 21.325-21.507 39.709-49.539 56.848-88.678 5.654 9.498 9.594 20.966 10.285 34.339 1.632 31.526-14.275 82.813-87.955 153.418-12.758 12.227-13.19 32.483-0.963 45.245 12.227 12.758 32.486 13.19 45.245 0.963 80.192-76.851 110.586-145.034 107.59-202.934-2.986-57.658-38.586-96.022-70.675-113.955-20.774-13.014-50.214-22.826-81.216-28.288-16.624-2.931-34.47-4.749-52.694-4.995v-74.243l101.718-17.722c17.411-3.034 29.066-19.61 26.032-37.019-3.034-17.411-19.606-29.066-37.018-26.032l-90.733 15.809v-45.724zM578.394 536.208c10.163-9.891 23.565-17.475 39.51-22.704v138.653c-13.443 2.547-27.485 1.731-38.634-2.752-7.712-3.104-13.658-7.757-17.824-14.029-4.157-6.262-7.766-15.997-7.766-31.216 0-33.35 10.563-54.176 24.714-67.952zM709.994 600.752c-8.682 8.755-17.782 15.706-28.090 22.074v-117.888c14.125 0.24 28.224 1.661 41.587 4.016 13.587 2.397 25.683 5.622 35.763 9.165-16.88 42.038-33.069 66.304-49.261 82.634zM247.704 565.334h98.386l-49.193-184.883-49.193 184.883zM390.851 733.562l-27.734-104.227h-132.442l-27.732 104.227c-4.544 17.078-22.073 27.242-39.152 22.694-17.079-4.544-27.24-22.070-22.696-39.152l106.323-399.598c13.494-50.714 85.462-50.713 98.956 0l106.323 399.598c4.544 17.082-5.616 34.608-22.694 39.152-17.078 4.547-34.608-5.616-39.152-22.694z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["language"],"defaultCode":59771,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1040,"name":"language","prevSize":32,"id":128,"code":59771},"setIdx":0,"setId":6,"iconIdx":128},{"icon":{"paths":["M234.831 743.917c-75.198-141.606-58.197-285.718 40.507-391.734 101.776-109.314 284.915-172.318 524.636-158.217 16.192 0.953 29.114 13.872 30.064 30.066 14.102 239.723-48.902 422.859-158.218 524.635-106.016 98.707-250.128 115.706-391.737 40.506l-65.457 65.456c-12.497 12.499-32.758 12.499-45.255 0-12.497-12.496-12.497-32.758 0-45.254l65.458-65.456zM282.51 696.237l300.107-300.109c12.496-12.496 32.758-12.496 45.254 0 12.496 12.499 12.496 32.758 0 45.258l-300.109 300.106c113.565 53.238 220.73 34.554 300.448-39.664 86.579-80.611 146.157-231.866 139.251-445.286-213.418-6.905-364.675 52.673-445.283 139.254-74.219 79.715-92.904 186.877-39.669 300.442z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["leaf"],"defaultCode":59814,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1041,"id":129,"name":"leaf","prevSize":32,"code":59814},"setIdx":0,"setId":6,"iconIdx":129},{"icon":{"paths":["M254.841 275.612l-13.972 14.271c-37.092 37.883-36.449 98.664 1.435 135.758l145.619 142.573c37.885 37.091 98.666 36.448 135.76-1.437l13.971-14.269c0.723-0.739 1.43-1.488 2.128-2.243l0.099 0.099c5.805-5.904 13.888-9.568 22.822-9.568 17.674 0 32 14.326 32 32 0 9.6-4.227 18.211-10.922 24.077l-0.397 0.41-13.974 14.269c-61.818 63.142-163.12 64.214-226.259 2.394l-145.622-142.576c-63.141-61.818-64.212-163.119-2.392-226.26l13.972-14.27c61.82-63.141 163.12-64.212 226.263-2.392l74.691 73.131c0.976 0.847 1.901 1.752 2.768 2.71l0.374 0.366-0.026 0.026c4.934 5.63 7.923 13.005 7.923 21.078 0 17.674-14.326 32-32 32-7.83 0-15.005-2.813-20.566-7.482l-0.106 0.109-77.834-76.206c-37.885-37.092-98.666-36.45-135.757 1.435zM790.566 768.003l13.971-14.269c37.091-37.885 36.448-98.666-1.437-135.757l-145.619-142.576c-37.885-37.091-98.666-36.448-135.757 1.437l-13.971 14.269c-0.723 0.739-1.434 1.488-2.128 2.243l-0.102-0.099c-5.805 5.907-13.885 9.568-22.822 9.568-17.67 0-32-14.326-32-32 0-9.6 4.227-18.211 10.922-24.077l0.4-0.406 13.971-14.272c61.821-63.142 163.12-64.211 226.262-2.39l145.619 142.573c63.142 61.821 64.211 163.12 2.394 226.262l-13.971 14.269c-61.821 63.142-163.123 64.211-226.262 2.394l-74.694-73.133c-0.976-0.845-1.901-1.75-2.768-2.71l-0.374-0.365 0.026-0.026c-4.931-5.629-7.923-13.005-7.923-21.078 0-17.674 14.326-32 32-32 7.83 0 15.005 2.813 20.566 7.482l0.106-0.109 77.837 76.208c37.885 37.091 98.662 36.448 135.757-1.437z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["link"],"defaultCode":59752,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1042,"name":"link","prevSize":32,"id":130,"code":59752},"setIdx":0,"setId":6,"iconIdx":130},{"icon":{"paths":["M840.541 128c31.318 0 56.813 24.79 56.813 55.383v657.212c0 30.592-25.494 55.427-56.813 55.427h-654.546c-31.254 0-56.642-24.835-56.642-55.427v-657.212c0-30.593 25.387-55.383 56.642-55.383h654.546zM300.196 233.75c-36.588 0-66.093 29.59-66.093 66.050 0 36.482 29.505 66.072 66.093 66.072 36.437 0 66.005-29.59 66.005-66.072 0-36.46-29.568-66.050-66.005-66.050zM243.148 782.461h114.029v-366.515h-114.029v366.515zM537.814 415.923h-109.187v366.515h113.773v-181.274c0-47.83 9.046-94.147 68.333-94.147 58.454 0 59.181 54.678 59.181 97.174v178.246h113.901v-201.008c0-98.714-21.312-174.598-136.666-174.598-55.402 0-92.566 30.381-107.757 59.203h-1.578v-50.112z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["linkedin-monochromatic"],"defaultCode":59658,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1043,"name":"linkedin-monochromatic","prevSize":32,"id":131,"code":59658},"setIdx":0,"setId":6,"iconIdx":131},{"icon":{"paths":["M700.144 361.891c4.685-24.973 34.704-34.093 49.13-13.171 31.994 46.403 50.726 102.653 50.726 163.28s-18.733 116.88-50.726 163.283c-14.426 20.922-44.445 11.802-49.13-13.174l-1.706-9.101c-1.581-8.429 0.384-17.082 4.858-24.403 20.749-33.965 32.704-73.888 32.704-116.605 0-42.714-11.955-82.637-32.704-116.605-4.474-7.318-6.438-15.971-4.858-24.4l1.706-9.104z","M320.704 395.395c-20.748 33.968-32.704 73.891-32.704 116.605 0 42.717 11.956 82.64 32.704 116.605 4.474 7.322 6.438 15.974 4.858 24.403l-1.706 9.101c-4.684 24.976-34.705 34.096-49.128 13.174-31.994-46.403-50.728-102.656-50.728-163.283s18.733-116.877 50.728-163.28c14.424-20.922 44.444-11.802 49.128 13.171l1.706 9.104c1.581 8.429-0.384 17.082-4.858 24.4z","M728.765 209.256l-0.515 2.747c-2.234 11.911 2.534 23.967 11.763 31.821 75.866 64.565 123.987 160.751 123.987 268.175 0 107.427-48.122 203.613-123.987 268.176-9.229 7.856-13.997 19.914-11.763 31.824l0.515 2.746c4.192 22.362 29.69 33.194 47.261 18.746 92.794-76.294 151.974-191.981 151.974-321.491 0-129.507-59.181-245.193-151.974-321.489-17.571-14.448-43.069-3.615-47.261 18.745z","M283.986 243.825c9.228-7.854 13.998-19.911 11.764-31.821l-0.515-2.747c-4.192-22.359-29.69-33.193-47.262-18.745-92.793 76.296-151.973 191.981-151.973 321.489 0 129.51 59.18 245.197 151.973 321.491 17.572 14.448 43.070 3.616 47.262-18.746l0.515-2.746c2.233-11.91-2.536-23.968-11.764-31.824-75.864-64.563-123.986-160.749-123.986-268.176 0-107.424 48.122-203.61 123.986-268.175z","M608 512c0 53.021-42.979 96-96 96s-96-42.979-96-96c0-53.018 42.979-96 96-96s96 42.982 96 96z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["live"],"defaultCode":59774,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1044,"name":"live","prevSize":32,"id":132,"code":59774},"setIdx":0,"setId":6,"iconIdx":132},{"icon":{"paths":["M439.274 704.374c0-33.645 26.278-47.677 72.726-47.677s72.73 14.032 72.73 47.677c0 32.96-13.19 111.069-23.914 149.76-4.963 17.808-22.080 25.171-48.816 25.171s-43.85-7.363-48.813-25.174c-10.717-38.666-23.914-116.688-23.914-149.757zM616.778 870.374l0.026-0.090c6.176-22.291 12.566-53.869 17.386-83.453 4.688-28.787 8.72-60.707 8.72-82.458 0-35.891-15.811-67.802-46.797-87.114-26.035-16.227-57.152-19.926-84.112-19.926-26.957 0-58.077 3.699-84.112 19.926-30.982 19.312-46.797 51.222-46.797 87.114 0 21.805 4.035 53.728 8.726 82.515 4.819 29.578 11.21 61.123 17.379 83.392l0.026 0.086c7.402 26.557 24.982 45.664 46.87 56.467 19.472 9.61 40.426 11.834 57.907 11.834 17.485 0 38.435-2.224 57.907-11.83 21.888-10.8 39.469-29.907 46.87-56.464zM459.635 460.8c0-28.275 23.446-51.2 52.365-51.2s52.365 22.925 52.365 51.2c0 28.278-23.446 51.2-52.365 51.2s-52.365-22.922-52.365-51.2zM512 341.334c-67.478 0-122.182 53.488-122.182 119.466 0 65.981 54.704 119.469 122.182 119.469s122.182-53.488 122.182-119.469c0-65.978-54.704-119.466-122.182-119.466zM677.802 537.254c-6.662 13.792-3.882 31.11 6.278 42.573 14.086 15.894 39.85 17.939 50.205-0.602 19.642-35.174 30.806-75.526 30.806-118.426 0-136.672-113.315-247.465-253.091-247.465-139.779 0-253.092 110.793-253.092 247.465 0 42.899 11.164 83.251 30.806 118.426 10.354 18.541 36.119 16.496 50.205 0.602 10.16-11.462 12.938-28.781 6.275-42.573-11.203-23.187-17.469-49.104-17.469-76.454 0-98.97 82.054-179.199 183.274-179.199s183.27 80.229 183.27 179.199c0 27.35-6.262 53.267-17.469 76.454zM730.16 699.795c-0.304-10.659 3.542-21.072 10.928-28.762 52.771-54.957 85.094-128.902 85.094-210.234 0-169.661-140.666-307.199-314.182-307.199s-314.182 137.538-314.182 307.199c0 81.331 32.323 155.28 85.093 210.234 7.386 7.69 11.234 18.102 10.928 28.762-0.833 29.018-31.273 47.917-52.121 27.715-70.223-68.042-113.718-162.41-113.718-266.71 0-207.363 171.923-375.465 384-375.465s384 168.102 384 375.465c0 104.304-43.498 198.672-113.722 266.714-20.848 20.202-51.286 1.302-52.118-27.718z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["live-streaming"],"defaultCode":59773,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1045,"name":"live-streaming","prevSize":32,"id":133,"code":59773},"setIdx":0,"setId":6,"iconIdx":133},{"icon":{"paths":["M397.011 527.334c26.576 0 48.122-21.587 48.122-48.214s-21.546-48.214-48.122-48.214c-26.576 0-48.118 21.587-48.118 48.214s21.542 48.214 48.118 48.214z","M589.491 479.12c0 26.627-21.542 48.214-48.118 48.214s-48.122-21.587-48.122-48.214c0-26.627 21.546-48.214 48.122-48.214s48.118 21.587 48.118 48.214z","M733.853 479.12c0 26.627-21.542 48.214-48.118 48.214s-48.122-21.587-48.122-48.214c0-26.627 21.546-48.214 48.122-48.214s48.118 21.587 48.118 48.214z","M88.039 813.683l119.625 31.283c85.312 22.307 173.45-16.256 238.691-79.709 29.501 4.794 59.875 7.242 90.678 7.242 218.294 0 404.339-122.864 404.339-294.518 0-171.664-186.042-294.52-404.339-294.52-218.314 0-404.351 122.852-404.34 294.523 0 65.072 27.642 125.014 75.655 173.587-2.847 24.835-14.596 44.73-36.049 68.55l-84.261 93.562zM537.034 258.997c183.13 0 331.6 98.043 331.6 218.984 0 120.931-148.47 218.982-331.6 218.982-40.781 0-79.834-4.877-115.91-13.763-36.669 45.6-117.335 109.008-195.697 88.518 25.489-28.304 63.251-76.131 55.168-154.909-46.968-37.779-75.162-86.134-75.162-138.829-0.008-120.95 148.461-218.984 331.6-218.984z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["livechat-monochromatic"],"defaultCode":59775,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1046,"name":"livechat-monochromatic","prevSize":32,"id":134,"code":59775},"setIdx":0,"setId":6,"iconIdx":134},{"icon":{"paths":["M512 128c-97.203 0-176 78.798-176 176v142.477h-16c-53.020 0-96 42.979-96 96v257.523c0 53.021 42.981 96 96 96h384c53.021 0 96-42.979 96-96v-257.523c0-53.021-42.979-96-96-96h-16v-142.477c0-97.202-78.797-176-176-176zM624 304v142.477h-224v-142.477c0-61.856 50.144-112 112-112s112 50.144 112 112z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["lock-filled"],"defaultCode":59748,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1047,"name":"lock-filled","prevSize":32,"id":135,"code":59748},"setIdx":0,"setId":6,"iconIdx":135},{"icon":{"paths":["M336 304c0-97.202 78.797-176 176-176s176 78.798 176 176v142.477h16c53.021 0 96 42.979 96 96v257.523c0 53.021-42.979 96-96 96h-384c-53.019 0-96-42.979-96-96v-257.523c0-53.021 42.981-96 96-96h16v-142.477zM400 446.477h224v-142.477c0-61.856-50.144-112-112-112s-112 50.144-112 112v142.477zM320 510.477c-17.673 0-32 14.326-32 32v257.523c0 17.674 14.327 32 32 32h384c17.674 0 32-14.326 32-32v-257.523c0-17.674-14.326-32-32-32h-384z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["locker"],"defaultCode":59749,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1048,"name":"locker","prevSize":32,"id":136,"code":59749},"setIdx":0,"setId":6,"iconIdx":136},{"icon":{"paths":["M341.334 778.672c-17.674 0-32 14.326-32 32s14.326 32 32 32h341.334c17.674 0 32-14.326 32-32s-14.326-32-32-32h-341.334zM85.335 298.672c0-70.692 57.308-128 128-128h597.334c70.691 0 128 57.308 128 128v298.666c0 70.694-57.309 128-128 128h-597.334c-70.692 0-128-57.306-128-128v-298.666zM213.335 234.672c-35.346 0-64 28.654-64 64v298.666c0 35.347 28.654 64 64 64h597.334c35.344 0 64-28.653 64-64v-298.666c0-35.347-28.656-64-64-64h-597.334zM256 320c0-11.782 9.551-21.333 21.333-21.333h170.667c11.782 0 21.334 9.551 21.334 21.333s-9.552 21.334-21.334 21.334h-170.667c-11.782 0-21.333-9.552-21.333-21.334zM277.333 554.666c-11.782 0-21.333 9.552-21.333 21.334s9.551 21.334 21.333 21.334h85.332c11.782 0 21.334-9.552 21.334-21.334s-9.552-21.334-21.334-21.334h-85.332zM554.666 320c0-11.782 9.552-21.333 21.334-21.333h170.666c11.782 0 21.334 9.551 21.334 21.333s-9.552 21.334-21.334 21.334h-170.666c-11.782 0-21.334-9.552-21.334-21.334zM448 554.666c-11.782 0-21.334 9.552-21.334 21.334s9.552 21.334 21.334 21.334h298.666c11.782 0 21.334-9.552 21.334-21.334s-9.552-21.334-21.334-21.334h-298.666zM256 448c0-11.782 9.551-21.334 21.333-21.334h213.332c11.782 0 21.334 9.552 21.334 21.334s-9.552 21.334-21.334 21.334h-213.332c-11.782 0-21.333-9.552-21.333-21.334zM618.666 426.666c-11.782 0-21.331 9.552-21.331 21.334s9.549 21.334 21.331 21.334h128c11.782 0 21.334-9.552 21.334-21.334s-9.552-21.334-21.334-21.334h-128z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["log-view"],"defaultCode":59778,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1049,"name":"log-view","prevSize":32,"id":137,"code":59778},"setIdx":0,"setId":6,"iconIdx":137},{"icon":{"paths":["M176 96c-17.673 0-32 14.327-32 32v768c0 17.674 14.327 32 32 32h512c17.674 0 32-14.326 32-32v-96c0-17.674-14.326-32-32-32s-32 14.326-32 32v64h-448v-704h448v64c0 17.673 14.326 32 32 32s32-14.327 32-32v-96c0-17.673-14.326-32-32-32h-512zM521.373 329.373c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.254l-105.373 105.373h418.746c17.674 0 32 14.326 32 32s-14.326 32-32 32h-418.746l105.373 105.373c12.496 12.496 12.496 32.758 0 45.254s-32.758 12.496-45.254 0l-160-160c-12.496-12.496-12.496-32.758 0-45.254l160-160z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["login"],"defaultCode":59779,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1050,"name":"login","prevSize":32,"id":138,"code":59779},"setIdx":0,"setId":6,"iconIdx":138},{"icon":{"paths":["M268.099 96c-17.673 0-32 14.327-32 32v768c0 17.674 14.327 32 32 32h512c17.674 0 32-14.326 32-32v-96c0-17.674-14.326-32-32-32s-32 14.326-32 32v64h-448v-704h448v64c0 17.673 14.326 32 32 32s32-14.327 32-32v-96c0-17.673-14.326-32-32-32h-512zM994.726 489.373l-160-160c-12.496-12.497-32.758-12.497-45.254 0s-12.496 32.758 0 45.254l105.373 105.373h-418.746c-17.674 0-32 14.326-32 32s14.326 32 32 32h418.746l-105.373 105.373c-12.496 12.496-12.496 32.758 0 45.254s32.758 12.496 45.254 0l160-160c12.496-12.496 12.496-32.758 0-45.254z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["logout"],"defaultCode":59780,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1051,"name":"logout","prevSize":32,"id":139,"code":59780},"setIdx":0,"setId":6,"iconIdx":139},{"icon":{"paths":["M192 736h640v-448h-640v448zM128 256c0-17.673 14.327-32 32-32h704c17.674 0 32 14.327 32 32v512c0 17.674-14.326 32-32 32h-704c-17.673 0-32-14.326-32-32v-512zM305.304 389.082c-14.866-9.555-34.665-5.251-44.222 9.613-9.557 14.867-5.253 34.666 9.613 44.224l241.304 155.123 241.306-155.123c14.864-9.558 19.168-29.357 9.613-44.224-9.558-14.864-29.357-19.168-44.224-9.613l-206.694 132.877-206.696-132.877z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["mail"],"defaultCode":59781,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1052,"name":"mail","prevSize":32,"id":140,"code":59781},"setIdx":0,"setId":6,"iconIdx":140},{"icon":{"paths":["M302.769 192h418.463l23.187 72.727h-0.211l23.792 63.999c0 41.27-31.306 69.818-64 69.818s-64-28.547-64-69.818c0-18.476-14.326-33.454-32-33.454s-32 14.978-32 33.454c0 41.27-31.306 69.818-64 69.818s-64-28.547-64-69.818c0-18.476-14.326-33.454-32-33.454s-32 14.978-32 33.454c0 41.27-31.306 69.818-64 69.818s-64-28.547-64-69.818l23.794-63.999h-0.213l23.188-72.727zM212.406 264.727l36.491-114.448c4.231-13.27 16.56-22.279 30.488-22.279h465.23c13.93 0 26.259 9.009 30.49 22.279l56.896 178.447c0 33.939-12.083 64.925-32 88.515v350.778c0 53.018-42.979 96-96 96h-384c-53.019 0-96-42.982-96-96v-350.778c-19.916-23.59-32-54.576-32-88.515l20.406-63.999zM288 458.33v309.69c0 17.67 14.327 32 32 32h128v-192.019h128v192.019h128c17.674 0 32-14.33 32-32v-309.69c-10.227 2.752-20.95 4.214-32 4.214-38.23 0-72.547-17.52-96-45.302-23.453 27.782-57.77 45.302-96 45.302s-72.547-17.52-96-45.302c-23.453 27.782-57.77 45.302-96 45.302-11.050 0-21.772-1.462-32-4.214z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["marketplace"],"defaultCode":59782,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1053,"name":"marketplace","prevSize":32,"id":141,"code":59782},"setIdx":0,"setId":6,"iconIdx":141},{"icon":{"paths":["M773.072 576c-35.344 0-64-28.653-64-64s28.656-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64z","M517.072 576c-35.344 0-64-28.653-64-64s28.656-64 64-64c35.347 0 64 28.653 64 64s-28.653 64-64 64z","M261.073 576c-35.346 0-64-28.653-64-64s28.654-64 64-64c35.346 0 63.999 28.653 63.999 64s-28.652 64-63.999 64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["meatballs"],"defaultCode":59783,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1054,"name":"meatballs","prevSize":32,"id":142,"code":59783},"setIdx":0,"setId":6,"iconIdx":142},{"icon":{"paths":["M651.36 116.071c-57.242-19.989-105.792-20.069-138.358-20.071v64l-1.002-64c-92.006 0.342-297.345 47.824-381.242 242.995-17.897 38.97-34.758 103.344-34.758 173.005 0 69.958 17.020 146.285 52.216 207.875 23.229 40.653 92.799 131.376 191.179 173.536 94.861 40.656 206.368 52.349 296.49 16.301 16.41-6.563 24.39-25.187 17.827-41.597s-25.187-24.39-41.597-17.827c-69.878 27.952-163.171 20.445-247.51-15.699-80.819-34.64-141.384-112.451-160.821-146.464-28.804-50.41-43.784-115.418-43.784-176.125 0-60.765 15.020-116.182 29.055-146.589l0.184-0.4 0.173-0.406c69.507-162.181 243.823-204.604 323.589-204.605 31.594 0.002 70.877 0.296 117.258 16.493 46.147 16.114 101.389 48.779 161.824 116.767 43.658 49.115 63.533 114.977 69.389 177.713 5.891 63.12-2.854 118.189-11.546 142.093-6.4 17.6-20.429 45.44-59.392 45.699-18.259-0.806-72.822-14.672-83.12-69.568v-235.062c0-17.674-3.414-34.134-29.014-34.134-19.338 0-26.454 16.461-26.454 34.134v34.131c-35.181-39.859-95.402-68.266-152.746-68.266-106.038 0-192 85.962-192 192s85.962 192 192 192c62.179 0 117.658-29.555 152.746-75.386 25.715 71.078 102.57 93.027 137.014 94.134l0.515 0.016h0.512c82.643 0 111.715-64.806 120.086-87.83 12.64-34.762 21.674-99.696 15.12-169.907-6.589-70.595-29.379-151.401-85.277-214.287-66.902-75.265-131.075-114.597-188.557-134.67zM627.2 512c0 70.691-57.309 128-128 128s-128-57.309-128-128c0-70.691 57.309-128 128-128s128 57.309 128 128z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["mention"],"defaultCode":59784,"grid":0},"attrs":[{}],"properties":{"order":1055,"name":"mention","prevSize":32,"id":143,"code":59784},"setIdx":0,"setId":6,"iconIdx":143},{"icon":{"paths":["M223.311 308.609c-47.832 66.7-64.077 147.667-64.077 201.187v1.405l-0.127 1.398c-9.348 103.235 27.547 175.997 86.848 226.374 60.643 51.52 146.602 80.998 235.29 90.893 88.614 9.885 186.224 1.398 263.341-14.973 38.56-8.189 70.928-18.125 93.888-28.128 8.906-3.882 15.837-7.536 20.944-10.765-2.378-1.514-5.248-3.197-8.675-5.030-8.886-4.749-19.059-9.261-29.613-13.894l-1.843-0.81c-9.315-4.083-19.725-8.65-27.613-13.078-14.291-8.026-28.317-17.155-38.544-26.867-5.034-4.781-10.762-11.194-14.595-19.184-4.054-8.454-6.96-21.078-1.261-34.435 30.816-72.186 45.459-111.725 52.554-137.834 6.621-24.378 6.621-36.653 6.621-56.17v-0.179c0-15.51-8.979-86.595-53.776-152.876-43.376-64.174-121.395-125.729-264.832-125.729-129.725 0-207.83 53.576-254.529 118.696zM173.267 272.433c58.132-81.063 154.749-144.433 304.573-144.433 164.896 0 261.594 72.589 315.859 152.878 52.838 78.181 64.416 161.881 64.416 187.641 0 21.654-0.022 40.336-8.797 72.64-7.83 28.835-22.627 68.614-50.048 133.424 5.069 4.032 12.592 9.005 22.506 14.57 5.123 2.877 12.995 6.339 24.054 11.194 10.266 4.506 22.582 9.93 33.891 15.978 10.848 5.798 23.526 13.571 32.954 23.738 9.859 10.63 20.208 28.87 12.816 51.139-4.87 14.672-16.182 25.091-25.61 32.016-10.24 7.52-22.947 14.278-36.858 20.342-27.946 12.176-64.582 23.181-105.68 31.907-82.198 17.453-186.522 26.688-282.909 15.936-96.31-10.746-195.346-43.178-268.313-105.165-74.031-62.893-119.295-154.778-108.551-277.856 0.276-63.411 19.117-157.053 75.696-235.948z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["message"],"defaultCode":59786,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1056,"name":"message","prevSize":32,"id":144,"code":59786},"setIdx":0,"setId":6,"iconIdx":144},{"icon":{"paths":["M477.84 128c104.256 0 181.251 29.018 237.494 70.652l-44.317 44.317c-45.52-31.22-107.747-53.057-193.178-53.057-129.725 0-207.83 53.576-254.529 118.696-47.832 66.7-64.077 147.667-64.077 201.187v1.405l-0.127 1.398c-7.328 80.928 13.761 143.126 51.784 190.499l-43.879 43.878c-50.179-59.901-78.131-139.043-69.441-238.595 0.276-63.411 19.117-157.053 75.696-235.948 58.132-81.063 154.749-144.433 304.573-144.433zM822.848 332.499l-47.008 47.008c16.502 42.634 20.608 78.525 20.608 89.011v0.179c0 19.517 0 31.792-6.621 56.17-7.094 26.109-21.738 65.648-52.554 137.834-5.699 13.357-2.794 25.981 1.261 34.435 3.834 7.99 9.562 14.403 14.595 19.184 10.227 9.712 24.253 18.842 38.544 26.867 7.888 4.429 18.298 8.995 27.613 13.078l1.843 0.81c10.554 4.634 20.726 9.146 29.613 13.894 3.427 1.834 6.298 3.517 8.672 5.030-5.104 3.229-12.035 6.883-20.941 10.765-22.96 10.003-55.328 19.939-93.888 28.128-77.12 16.371-174.73 24.858-263.341 14.973-43.744-4.88-86.826-14.525-126.534-29.229l-47.542 47.542c52.771 23.018 110.492 36.886 167.267 43.222 96.387 10.752 200.71 1.517 282.909-15.936 41.098-8.726 77.731-19.731 105.68-31.907 13.91-6.064 26.618-12.822 36.858-20.342 9.427-6.925 20.739-17.344 25.61-32.016 7.392-22.269-2.957-40.509-12.816-51.139-9.427-10.166-22.106-17.939-32.954-23.738-11.309-6.048-23.626-11.472-33.891-15.978-11.059-4.854-18.934-8.317-24.054-11.194-9.914-5.565-17.437-10.538-22.506-14.57 27.421-64.81 42.214-104.589 50.048-133.424 8.774-32.304 8.797-50.986 8.797-72.64 0-20.106-7.053-75.501-35.267-136.019zM836.038 153.372c12.499-12.497 32.758-12.497 45.254 0 12.499 12.497 12.499 32.758 0 45.255l-682.665 682.665c-12.497 12.499-32.758 12.499-45.255 0-12.497-12.496-12.497-32.755 0-45.254l682.666-682.666z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["message-disabled"],"defaultCode":59785,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1057,"name":"message-disabled","prevSize":32,"id":145,"code":59785},"setIdx":0,"setId":6,"iconIdx":145},{"icon":{"paths":["M86.686 85.336l730.792 774.088c0 0 24.899 17.558 43.936-2.928 19.040-20.486 4.394-40.973 4.394-40.973l-779.122-730.187zM318.080 158.503l556.516 599.955c0 0 24.896 17.558 43.936-2.928 19.037-20.486 4.394-40.973 4.394-40.973l-604.845-556.054zM712.035 915.030l-556.517-599.955 604.843 556.054c0 0 14.646 20.486-4.39 40.973-19.040 20.486-43.936 2.928-43.936 2.928zM513.693 221.419l388.803 419.15c0 0 17.395 12.269 30.694-2.042 13.302-14.314 3.069-28.627 3.069-28.627l-422.566-388.482zM597.878 915.677l-388.805-419.152 422.568 388.48c0 0 10.234 14.314-3.069 28.627-13.302 14.31-30.694 2.045-30.694 2.045zM713.498 312.143l176.221 190.551c0 0 8.605 5.747 15.184-0.96 6.579-6.704 1.517-13.411 1.517-13.411l-192.922-176.18zM482.582 880.23l-176.219-190.55 192.923 176.179c0 0 5.059 6.707-1.52 13.414-6.579 6.704-15.184 0.957-15.184 0.957z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["meteor-monochromatic"],"defaultCode":59659,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1058,"name":"meteor-monochromatic","prevSize":32,"id":146,"code":59659},"setIdx":0,"setId":6,"iconIdx":146},{"icon":{"paths":["M608 288c0-53.019-42.979-96-96-96s-96 42.981-96 96v128c0 53.021 42.979 96 96 96s96-42.979 96-96v-128zM352 288c0-88.365 71.635-160 160-160s160 71.635 160 160v128c0 88.365-71.635 160-160 160s-160-71.635-160-160v-128zM256 384c17.673 0 32 14.326 32 32 0 92.086 37.757 149.632 83.722 185.6 46.464 36.358 102.736 51.581 140.278 54.326 37.542-2.746 93.814-17.968 140.278-54.326 45.962-35.968 83.722-93.514 83.722-185.6 0-17.674 14.326-32 32-32s32 14.326 32 32c0 112.714-47.574 188.499-108.278 236-47.904 37.485-103.082 56.762-147.722 64.381v115.619h160c17.674 0 32 14.326 32 32s-14.326 32-32 32h-384c-17.673 0-32-14.326-32-32s14.327-32 32-32h160v-115.619c-44.64-7.619-99.818-26.896-147.722-64.381-60.703-47.501-108.278-123.286-108.278-236 0-17.674 14.327-32 32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["microphone"],"defaultCode":59788,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1059,"name":"microphone","prevSize":32,"id":147,"code":59788},"setIdx":0,"setId":6,"iconIdx":147},{"icon":{"paths":["M512 128c75.546 0 138.861 52.356 155.645 122.762l-59.645 59.644v-22.405c0-53.019-42.979-96-96-96s-96 42.981-96 96v128c0 24.067 8.858 46.067 23.488 62.915l-45.322 45.325c-26.182-28.49-42.166-66.499-42.166-108.24v-128c0-88.365 71.635-160 160-160zM561.35 568.243l102.893-102.893c-15.763 48.672-54.221 87.13-102.893 102.893zM288 416c0 72.154 23.181 123.101 55.328 159.078l-45.304 45.302c-43.428-47.35-74.024-113.99-74.024-204.381 0-17.674 14.327-32 32-32s32 14.326 32 32zM478.659 650.938l-51.808 51.808c18.56 6.374 36.579 10.806 53.149 13.635v115.619h-160c-17.673 0-32 14.326-32 32s14.327 32 32 32h384c17.674 0 32-14.326 32-32s-14.326-32-32-32h-160v-115.619c44.64-7.619 99.818-26.896 147.722-64.381 60.704-47.501 108.278-123.286 108.278-236 0-17.674-14.326-32-32-32s-32 14.326-32 32c0 92.086-37.757 149.632-83.722 185.6-46.464 36.358-102.736 51.581-140.278 54.326-9.971-0.73-21.264-2.339-33.341-4.989zM825.373 153.372c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-672 672c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l672-672z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["microphone-disabled"],"defaultCode":59787,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1060,"name":"microphone-disabled","prevSize":32,"id":148,"code":59787},"setIdx":0,"setId":6,"iconIdx":148},{"icon":{"paths":["M234.666 170.661c0-47.128 38.205-85.333 85.333-85.333h384.001c47.126 0 85.331 38.205 85.331 85.333v682.667c0 47.13-38.205 85.334-85.331 85.334h-384.001c-47.128 0-85.333-38.205-85.333-85.334v-682.667zM298.666 170.661v682.667c0 11.782 9.551 21.334 21.333 21.334h384.001c11.782 0 21.331-9.552 21.331-21.334v-682.667c0-11.782-9.549-21.333-21.331-21.333h-96.291c-2.653 24.002-23.002 42.672-47.709 42.672h-96c-24.707 0-45.056-18.67-47.709-42.672h-96.292c-11.782 0-21.333 9.551-21.333 21.333z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["mobile"],"defaultCode":59789,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1061,"name":"mobile","prevSize":32,"id":149,"code":59789},"setIdx":0,"setId":6,"iconIdx":149},{"icon":{"paths":["M319.247 231.566c-62.882 49.504-135.086 136.549-141.94 266.127-5.762 108.922 37.404 187.184 89.915 241.51 53.258 55.098 115.702 84.925 144.25 94.438 41.859 13.955 114.269 29.536 234.643-15.603 34.858-13.072 73.165-42.096 108.304-78.426 14.272-14.755 27.616-30.294 39.6-45.773-28.778 9.293-61.699 17.754-96.589 23.594-56.192 9.405-119.29 12.32-179.411-0.237-2.49-0.518-4.96-1.030-7.408-1.536-22.195-4.576-42.733-8.816-62.589-17.648-23.091-10.275-43.805-25.891-69.299-51.386-42.096-42.096-89.142-107.222-89.371-213.843-1.569-34.080 4.622-81.878 13.764-129.216 4.624-23.946 10.142-48.465 16.132-72.003zM345.562 138.217c32.8-17.15 63.709 15.843 53.875 45.907-12.234 37.414-24.586 85.511-33.482 131.58-9.024 46.732-13.949 88.633-12.643 114.7l0.038 0.797v0.8c0 84.915 36.173 134.918 70.627 169.373 22.509 22.509 36.835 32.278 50.064 38.166 13.229 5.885 26.832 8.717 51.085 13.763 1.923 0.4 3.917 0.816 5.978 1.248 49.914 10.426 104.534 8.336 155.76-0.237 65.434-10.954 122.384-31.981 152.374-47.386 17.562-9.021 34.992-2.47 44.477 5.965 9.661 8.589 19.376 27.152 8.886 46.954-20.637 38.95-53.645 84.419-92.182 124.259-38.211 39.51-84.317 76.038-131.834 93.859-135.626 50.858-223.216 34.438-277.354 16.394-36.515-12.173-108.392-46.912-170.026-110.675-62.381-64.534-114.684-159.427-107.81-289.373 10.79-203.979 157.583-317.098 232.165-356.093z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["moon"],"defaultCode":59790,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1062,"name":"moon","prevSize":32,"id":150,"code":59790},"setIdx":0,"setId":6,"iconIdx":150},{"icon":{"paths":["M144 160c-17.673 0-32 14.327-32 32s14.327 32 32 32h192c17.674 0 32-14.327 32-32s-14.326-32-32-32h-192zM700.4 346.646c11.795-13.165 32.026-14.272 45.187-2.48 13.162 11.795 14.272 32.026 2.477 45.187l-81.222 90.646h216.358c17.674 0 32 14.326 32 32s-14.326 32-32 32h-216.358l81.222 90.646c11.795 13.162 10.685 33.392-2.477 45.187-13.162 11.792-33.392 10.685-45.187-2.48l-129.030-144c-10.893-12.154-10.893-30.554 0-42.707l129.030-144zM112 512c0-17.674 14.327-32 32-32h192c17.674 0 32 14.326 32 32s-14.326 32-32 32h-192c-17.673 0-32-14.326-32-32zM144 640c-17.673 0-32 14.326-32 32s14.327 32 32 32h192c17.674 0 32-14.326 32-32s-14.326-32-32-32h-192zM112 352c0-17.674 14.327-32 32-32h192c17.674 0 32 14.326 32 32s-14.326 32-32 32h-192c-17.673 0-32-14.326-32-32zM144 800c-17.673 0-32 14.326-32 32s14.327 32 32 32h192c17.674 0 32-14.326 32-32s-14.326-32-32-32h-192z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["move-to-the-queue"],"defaultCode":59791,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1063,"name":"move-to-the-queue","prevSize":32,"id":151,"code":59791},"setIdx":0,"setId":6,"iconIdx":151},{"icon":{"paths":["M809.002 166.758c7.782 6.063 12.333 15.377 12.333 25.242v448h-0.112c0.074 1.734 0.112 3.478 0.112 5.229 0 69.053-57.309 125.030-128 125.030-70.694 0-128-55.978-128-125.030s57.306-125.030 128-125.030c23.312 0 45.171 6.090 64 16.73v-303.86l-384 96.798v409.136c0 69.053-57.309 125.037-128.001 125.037s-128-55.978-128-125.030c0-69.050 57.308-125.027 128-125.027 23.314 0 45.173 6.086 64 16.726v-325.777c0-14.66 9.962-27.446 24.177-31.029l448-112.93c9.568-2.411 19.709-0.276 27.491 5.788z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["musical-note"],"defaultCode":59792,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1064,"name":"musical-note","prevSize":32,"id":152,"code":59792},"setIdx":0,"setId":6,"iconIdx":152},{"icon":{"paths":["M208 176c-35.346 0-64 28.654-64 64v576c0 35.347 28.654 64 64 64h576c35.347 0 64-28.653 64-64v-576c0-35.346-28.653-64-64-64h-576zM208 240h576v576h-576v-576zM698.627 558.15c-0.189 17.674-14.669 31.846-32.339 31.658-17.674-0.189-31.846-14.669-31.658-32.339l1.318-123.594-309.341 308.774c-12.51 12.483-32.771 12.464-45.256-0.042-12.485-12.509-12.467-32.771 0.042-45.258l309.195-308.624-123.382 1.315c-17.674 0.189-32.154-13.984-32.339-31.654-0.189-17.674 13.984-32.15 31.654-32.339l201.92-2.157c8.605-0.093 16.886 3.286 22.97 9.37 6.086 6.086 9.462 14.365 9.373 22.97l-2.157 201.92z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["new-window"],"defaultCode":59793,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1065,"name":"new-window","prevSize":32,"id":153,"code":59793},"setIdx":0,"setId":6,"iconIdx":153},{"icon":{"paths":["M601.331 808.928h-174.154c0.003 48.090 38.989 87.072 87.078 87.072s87.075-38.982 87.075-87.072zM815.597 731.677c7.274 9.696 8.442 22.669 3.021 33.51s-16.499 17.69-28.621 17.69h-565.996c-12.943 0-24.611-7.798-29.564-19.757-4.953-11.955-2.215-25.718 6.937-34.87l51.653-51.654v-274.032c0-144.272 116.957-261.228 261.229-261.228s261.229 116.956 261.229 261.228v275.629l40.112 53.485zM711.485 715.894v-313.331c0-108.926-88.304-197.228-197.229-197.228-108.928 0-197.229 88.302-197.229 197.228v313.331h394.458z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["notification"],"defaultCode":59795,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1066,"name":"notification","prevSize":32,"id":154,"code":59795},"setIdx":0,"setId":6,"iconIdx":154},{"icon":{"paths":["M781.837 402.634c0-5.245-0.154-10.454-0.461-15.622l-63.539 63.539v265.363h-265.363l-66.979 66.979h425.363c12.944 0 24.611-7.795 29.565-19.754 4.954-11.955 2.214-25.722-6.938-34.874l-51.648-51.648v-273.984zM704.765 217.373l-45.254 45.255c-35.638-35.351-84.704-57.189-138.867-57.189-108.909 0-197.194 88.287-197.194 197.195v196.054l-64.001 64v-260.054c0-144.254 116.941-261.195 261.194-261.195 71.837 0 136.899 29.001 184.122 75.934zM433.578 808.934c0 48.086 38.982 87.066 87.066 87.066s87.066-38.979 87.066-87.066h-174.131zM854.275 190.982c-11.334-11.334-29.709-11.334-41.043 0l-612.732 612.733c-11.333 11.331-11.333 29.709 0 41.040 11.334 11.334 29.709 11.334 41.043 0l612.732-612.731c11.334-11.333 11.334-29.709 0-41.043z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["notification-disabled"],"defaultCode":59794,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1067,"name":"notification-disabled","prevSize":32,"id":155,"code":59794},"setIdx":0,"setId":6,"iconIdx":155},{"icon":{"paths":["M712.051 512.675v54.89c-0.195 76.736-43.741 143.283-107.44 176.445-5.53-25.67-28.362-44.906-55.683-44.906h-72.502c-31.459 0-56.963 25.501-56.963 56.963v41.427c0 31.462 25.504 56.963 56.963 56.963h72.502c28.509 0 52.128-20.944 56.307-48.288 69.261-26.829 123.962-82.883 148.966-153.030 4.723 1.27 9.69 1.946 14.813 1.946h28.483c31.459 0 56.963-25.504 56.963-56.963v-85.446c0-31.459-25.504-56.963-56.963-56.963h-28.483v-28.483c0-141.572-114.765-256.338-256.336-256.338s-256.339 114.766-256.339 256.338v23.302h-28.483c-31.46 0-56.964 25.504-56.964 56.966v103.571c0 31.459 25.504 56.963 56.964 56.963h28.482c31.46 0 56.964-25.504 56.964-56.963v-36.253h0.149c-0.099-2.576-0.148-5.165-0.148-7.766v-139.821c0-110.111 89.263-199.374 199.375-199.374s199.373 89.263 199.373 199.374v85.446z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["omnichannel"],"defaultCode":59796,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1068,"name":"omnichannel","prevSize":32,"id":156,"code":59796},"setIdx":0,"setId":6,"iconIdx":156},{"icon":{"paths":["M705.578 633.158c9.507-9.235 24.701-9.018 33.939 0.486 9.238 9.507 9.021 24.701-0.486 33.939l-208.275 202.387c-9.312 9.050-24.138 9.050-33.45 0l-208.276-202.387c-9.506-9.238-9.724-24.432-0.487-33.939 9.237-9.504 24.432-9.722 33.937-0.486l191.549 186.134 191.549-186.134zM705.578 411.584c9.507 9.238 24.701 9.021 33.939-0.486s9.021-24.701-0.486-33.939l-208.275-202.385c-9.312-9.051-24.138-9.051-33.45 0l-208.276 202.385c-9.506 9.238-9.724 24.432-0.487 33.939 9.237 9.504 24.432 9.725 33.937 0.486l191.549-186.134 191.549 186.134z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["order"],"defaultCode":59797,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1069,"name":"order","prevSize":32,"id":157,"code":59797},"setIdx":0,"setId":6,"iconIdx":157},{"icon":{"paths":["M742.317 652.566c12.666-12.323 12.944-32.582 0.618-45.248-12.323-12.669-32.582-12.944-45.251-0.621l44.634 45.869zM512 832.019l-22.317 22.934c12.422 12.086 32.211 12.086 44.634 0l-22.317-22.934zM326.317 606.698c-12.667-12.323-32.927-12.048-45.252 0.621-12.324 12.666-12.047 32.925 0.619 45.248l44.632-45.869zM697.683 606.698l-208 202.387 44.634 45.869 208-202.387-44.634-45.869zM534.317 809.085l-208-202.387-44.632 45.869 207.999 202.387 44.634-45.869z","M742.317 371.456c12.666 12.323 12.944 32.582 0.618 45.251-12.323 12.666-32.582 12.944-45.251 0.618l44.634-45.869zM512 192.004l-22.317-22.935c12.422-12.087 32.211-12.087 44.634 0l-22.317 22.935zM326.317 417.325c-12.668 12.326-32.927 12.048-45.252-0.618-12.325-12.669-12.048-32.928 0.619-45.251l44.633 45.869zM697.683 417.325l-208-202.386 44.634-45.87 208 202.387-44.634 45.869zM534.317 214.939l-208 202.386-44.633-45.869 207.999-202.387 44.634 45.87z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"isMulticolor":true,"isMulticolor2":true,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":9}]},"tags":["ordering-ascending"],"defaultCode":59798,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"properties":{"order":1070,"name":"ordering-ascending","prevSize":32,"codes":[59798,59799],"id":158,"code":59798},"setIdx":0,"setId":6,"iconIdx":158},{"icon":{"paths":["M281.684 371.434c-12.667 12.323-12.944 32.582-0.619 45.248 12.324 12.669 32.584 12.944 45.252 0.621l-44.633-45.869zM512 191.981l22.317-22.935c-12.422-12.087-32.211-12.087-44.634 0l22.317 22.935zM697.683 417.302c12.669 12.323 32.928 12.048 45.251-0.621 12.326-12.666 12.048-32.925-0.618-45.248l-44.634 45.869zM326.317 417.302l208-202.387-44.634-45.869-207.999 202.387 44.633 45.869zM489.683 214.916l208 202.387 44.634-45.869-208-202.387-44.634 45.869z","M281.684 652.544c-12.667-12.323-12.944-32.582-0.619-45.251 12.324-12.666 32.584-12.944 45.252-0.618l-44.633 45.869zM512 831.997l22.317 22.934c-12.422 12.086-32.211 12.086-44.634 0l22.317-22.934zM697.683 606.675c12.669-12.326 32.928-12.048 45.251 0.618 12.326 12.669 12.048 32.928-0.618 45.251l-44.634-45.869zM326.317 606.675l208 202.384-44.634 45.872-207.999-202.387 44.633-45.869zM489.683 809.059l208-202.384 44.634 45.869-208 202.387-44.634-45.872z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"isMulticolor":true,"isMulticolor2":true,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":9}]},"tags":["ordering-descending"],"defaultCode":59800,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(158, 162, 168)","opacity":0.7}],"properties":{"order":1071,"name":"ordering-descending","prevSize":32,"codes":[59800,59801],"id":159,"code":59800},"setIdx":0,"setId":6,"iconIdx":159},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352-194.405 0-352.001 157.596-352.001 352s157.596 352 352.001 352c194.403 0 352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416-229.752 0-416.001-186.25-416.001-416s186.25-416 416.001-416c229.75 0 416 186.25 416 416zM399.997 383.994v256c0 17.674 14.326 32 32 32s32-14.326 32-32v-256c0-17.67-14.326-32-32-32s-32 14.33-32 32zM559.997 383.994v256c0 17.674 14.326 32 32 32s32-14.326 32-32v-256c0-17.67-14.326-32-32-32s-32 14.33-32 32z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pause"],"defaultCode":59803,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1072,"name":"pause","prevSize":32,"id":160,"code":59803},"setIdx":0,"setId":6,"iconIdx":160},{"icon":{"paths":["M512 928c229.75 0 416-186.25 416-416s-186.25-416-416-416c-229.752 0-416.001 186.25-416.001 416s186.25 416 416.001 416zM399.997 383.994c0-17.67 14.326-32 32-32s32 14.33 32 32v256c0 17.674-14.326 32-32 32s-32-14.326-32-32v-256zM559.997 383.994c0-17.67 14.326-32 32-32s32 14.33 32 32v256c0 17.674-14.326 32-32 32s-32-14.326-32-32v-256z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pause-filled"],"defaultCode":59802,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1073,"name":"pause-filled","prevSize":32,"id":161,"code":59802},"setIdx":0,"setId":6,"iconIdx":161},{"icon":{"paths":["M822.627 201.372c12.496 12.497 12.496 32.758 0 45.255l-576 576c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l576-576c12.496-12.497 32.758-12.497 45.254 0z","M192 320c0-70.692 57.308-128 128-128 70.691 0 128 57.308 128 128 0 70.691-57.309 128-128 128-70.692 0-128-57.309-128-128zM320 256c-35.346 0-64 28.654-64 64s28.654 64 64 64c35.347 0 64-28.653 64-64s-28.653-64-64-64z","M704 576c-70.691 0-128 57.309-128 128s57.309 128 128 128c70.691 0 128-57.309 128-128s-57.309-128-128-128zM640 704c0-35.347 28.653-64 64-64s64 28.653 64 64c0 35.347-28.653 64-64 64s-64-28.653-64-64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["percentage"],"defaultCode":59777,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1074,"id":162,"name":"percentage","prevSize":32,"code":59777},"setIdx":0,"setId":6,"iconIdx":162},{"icon":{"paths":["M410.502 204.616c-10.419-21.362-34.202-37.856-62.189-33.137-38.104 6.425-88.825 25.194-126.247 57.060-18.972 16.155-35.817 36.795-44.757 62.246-9.15 26.048-9.211 54.919 2.087 85.195 21.202 56.816 60.513 117.456 97.761 167.264 37.482 50.122 74.609 91.552 93.329 110.269l44.173-44.173c-16.406-16.403-51.6-55.536-87.472-103.51-36.11-48.285-71.192-103.264-89.264-151.69-6.437-17.248-5.748-31.056-1.675-42.651 4.283-12.192 13.134-24.16 26.319-35.388 25.849-22.012 63.292-36.814 92.623-42.392l59.075 121.097c0.019 0.074 0.045 0.285-0.013 0.688-0.112 0.749-0.502 1.827-1.344 2.883-7.117 8.95-14.899 20-20.941 31.741-5.674 11.024-11.715 26.246-10.976 42.47 0.643 14.138 7.76 27.773 13.222 36.973 6.275 10.576 14.416 21.741 22.79 32.291 16.806 21.171 36.541 42.326 49.68 55.466l44.173-44.173c-11.952-11.952-29.981-31.309-44.928-50.134-7.504-9.453-13.738-18.157-17.997-25.334-2.87-4.838-3.984-7.578-4.387-8.57l-0.038-0.093c0.266-1.382 1.139-4.736 4.006-10.31 3.552-6.902 8.717-14.438 14.291-21.443 14.611-18.374 20.518-45.424 8.611-69.837l-59.914-122.808zM819.386 613.504c21.36 10.419 37.856 34.202 33.136 62.189-6.426 38.106-25.194 88.826-57.059 126.246-16.157 18.973-36.797 35.818-62.246 44.758-26.048 9.149-54.922 9.21-85.197-2.086-56.813-21.203-117.453-60.515-167.261-97.763-50.122-37.482-91.555-74.608-110.272-93.328l44.173-44.173c16.403 16.406 55.539 51.6 103.51 87.472 48.285 36.109 103.267 71.194 151.69 89.264 17.248 6.435 31.056 5.747 42.653 1.674 12.192-4.282 24.16-13.133 35.386-26.317 22.013-25.85 36.816-63.293 42.394-92.624l-121.094-59.075c-0.077-0.019-0.288-0.048-0.688 0.013-0.752 0.112-1.83 0.502-2.886 1.344-8.95 7.117-20 14.899-31.741 20.941-11.024 5.674-26.246 11.715-42.47 10.976-14.134-0.643-27.773-7.76-36.973-13.222-10.576-6.275-21.741-14.416-32.288-22.79-21.174-16.806-42.33-36.541-55.469-49.68l44.173-44.173c11.952 11.952 31.309 29.981 50.134 44.928 9.453 7.504 18.16 13.738 25.334 17.997 4.838 2.87 7.578 3.984 8.57 4.387l0.093 0.038c1.382-0.266 4.739-1.139 10.314-4.006 6.899-3.552 14.435-8.717 21.44-14.291 18.374-14.611 45.427-20.518 69.837-8.611l122.81 59.914z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["phone"],"defaultCode":59806,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1075,"name":"phone","prevSize":32,"id":163,"code":59806},"setIdx":0,"setId":6,"iconIdx":163},{"icon":{"paths":["M825.373 153.372c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-672 672c-12.497 12.496-32.758 12.496-45.255 0s-12.497-32.758 0-45.254l672-672zM575.613 569.069l-44.707 44.707c7.846 5.904 15.846 11.453 23.533 16.016 9.2 5.459 22.838 12.579 36.973 13.222 16.224 0.736 31.446-5.302 42.47-10.976 11.741-6.042 22.79-13.824 31.744-20.944 1.053-0.838 2.134-1.232 2.883-1.341 0.403-0.061 0.611-0.032 0.688-0.013l121.094 59.075c-5.578 29.331-20.381 66.771-42.39 92.621-11.229 13.187-23.197 22.038-35.389 26.32-11.597 4.074-25.402 4.762-42.653-1.677-48.422-18.070-103.405-53.152-151.69-89.261-14.026-10.49-27.299-20.922-39.469-30.842l-44.387 44.39c14.186 11.683 29.84 24.061 46.445 36.48 49.808 37.248 110.448 76.56 167.261 97.76 30.275 11.299 59.149 11.238 85.197 2.086 25.45-8.938 46.090-25.786 62.246-44.755 31.866-37.424 50.634-88.144 57.059-126.246 4.72-27.987-11.776-51.77-33.136-62.192l-122.81-59.91c-24.41-11.907-51.462-6-69.834 8.611-7.008 5.571-14.544 10.739-21.443 14.291-5.574 2.867-8.931 3.741-10.314 4.003l-0.093-0.038c-0.992-0.4-3.731-1.514-8.57-4.387-3.277-1.942-6.87-4.301-10.71-7.002zM313.636 589.683l44.389-44.387c-9.92-12.17-20.349-25.44-30.838-39.466-36.109-48.285-71.192-103.267-89.263-151.69-6.437-17.251-5.748-31.056-1.675-42.652 4.283-12.192 13.134-24.16 26.319-35.388 25.849-22.012 63.291-36.814 92.622-42.392l59.075 121.095c0.019 0.077 0.048 0.285-0.013 0.688-0.109 0.752-0.502 1.83-1.341 2.883-7.12 8.954-14.902 20.003-20.944 31.744-5.674 11.024-11.715 26.246-10.976 42.47 0.643 14.134 7.763 27.773 13.222 36.973 4.563 7.686 10.109 15.683 16.013 23.53l44.707-44.707c-2.701-3.837-5.056-7.434-7.002-10.707-2.87-4.838-3.984-7.578-4.387-8.57l-0.038-0.093c0.266-1.382 1.139-4.739 4.006-10.314 3.552-6.899 8.72-14.435 14.291-21.443 14.611-18.371 20.518-45.424 8.611-69.834l-59.91-122.809c-10.422-21.362-34.205-37.856-62.192-33.137-38.103 6.425-88.824 25.194-126.246 57.060-18.972 16.155-35.817 36.795-44.757 62.246-9.15 26.048-9.211 54.921 2.087 85.196 21.202 56.813 60.513 117.453 97.761 167.261 12.417 16.605 24.795 32.256 36.478 46.442z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["phone-disabled"],"defaultCode":59804,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1076,"name":"phone-disabled","prevSize":32,"id":164,"code":59804},"setIdx":0,"setId":6,"iconIdx":164},{"icon":{"paths":["M801.123 657.59c22.474 7.734 50.954 2.582 67.408-20.544 22.4-31.488 44.992-80.624 48.922-129.619 1.99-24.838-0.691-51.344-12.368-75.661-11.949-24.89-32.32-45.35-61.718-58.768-55.165-25.181-125.84-40.262-187.398-49.146-61.946-8.936-117.494-11.98-143.965-11.98v62.469c23.2 0 75.757 2.787 135.043 11.341 59.677 8.611 123.36 22.682 170.381 44.144 16.749 7.645 26.022 17.894 31.344 28.973 5.59 11.651 7.795 26.371 6.413 43.635-2.717 33.843-18.723 70.784-35.52 95.469l-127.398-43.853c-0.067-0.042-0.237-0.17-0.48-0.496-0.451-0.608-0.934-1.651-1.088-2.989-1.296-11.363-3.606-24.678-7.635-37.254-3.786-11.808-10.278-26.842-22.272-37.792-10.451-9.539-25.126-14.15-35.494-16.794-11.914-3.040-25.568-5.181-38.944-6.717-26.858-3.088-55.773-4.093-74.352-4.093v62.47c16.902 0 43.338 0.938 67.219 3.683 11.99 1.379 22.554 3.123 30.64 5.187 5.45 1.389 8.173 2.541 9.162 2.957l0.093 0.038c0.79 1.165 2.544 4.154 4.458 10.125 2.368 7.392 4.045 16.374 5.059 25.267 2.659 23.325 17.61 46.63 43.29 55.469l129.203 44.477zM222.875 657.584c-22.474 7.738-50.954 2.586-67.407-20.544-22.4-31.485-44.993-80.621-48.922-129.616-1.992-24.838 0.691-51.344 12.366-75.664 11.949-24.886 32.321-45.347 61.719-58.765 55.165-25.181 125.841-40.262 187.4-49.146 61.946-8.937 117.494-11.98 143.965-11.98v62.47c-23.2 0-75.757 2.787-135.046 11.341-59.674 8.608-123.358 22.682-170.378 44.144-16.748 7.645-26.024 17.894-31.343 28.973-5.593 11.651-7.797 26.371-6.412 43.635 2.714 33.843 18.721 70.784 35.518 95.469l127.4-43.856c0.067-0.038 0.234-0.166 0.477-0.493 0.454-0.611 0.938-1.651 1.091-2.989 1.296-11.363 3.606-24.682 7.635-37.254 3.786-11.808 10.275-26.842 22.272-37.792 10.448-9.542 25.126-14.15 35.491-16.794 11.917-3.040 25.568-5.181 38.947-6.717 26.858-3.088 55.77-4.093 74.349-4.093v62.47c-16.899 0-43.338 0.938-67.216 3.683-11.99 1.376-22.554 3.123-30.64 5.187-5.453 1.389-8.176 2.541-9.162 2.957l-0.093 0.038c-0.79 1.162-2.547 4.154-4.458 10.125-2.371 7.389-4.045 16.371-5.059 25.267-2.659 23.322-17.61 46.627-43.293 55.469l-129.202 44.474z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["phone-end"],"defaultCode":59805,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1077,"name":"phone-end","prevSize":32,"id":165,"code":59805},"setIdx":0,"setId":6,"iconIdx":165},{"icon":{"paths":["M717.254 352l137.37-137.372c12.499-12.497 12.499-32.758 0-45.255-12.496-12.497-32.755-12.497-45.254 0l-137.373 137.373v-82.745c0-17.673-14.326-32-32-32-17.67 0-32 14.327-32 32v160c0 4.339 0.864 8.477 2.429 12.25 1.526 3.686 3.773 7.149 6.736 10.166 0.138 0.141 0.278 0.282 0.419 0.419 3.018 2.966 6.48 5.21 10.17 6.736 3.773 1.565 7.91 2.429 12.246 2.429h160c17.674 0 32-14.326 32-32s-14.326-32-32-32h-82.742z","M819.478 613.379l-122.88-59.84c-11.261-5.29-23.786-7.283-36.128-5.757-12.346 1.53-24.003 6.522-33.632 14.397-6.816 5.274-13.978 10.086-21.44 14.4-3.382 1.632-6.922 2.918-10.56 3.84-3.008-1.235-5.901-2.736-8.64-4.48-8.752-5.504-17.19-11.488-25.28-17.92-18.88-15.040-38.080-32-50.24-44.8s-29.76-32-44.8-50.24c-6.435-8.093-12.416-16.531-17.92-25.28-1.747-2.742-3.248-5.635-4.48-8.64 0.918-3.642 2.205-7.181 3.84-10.56 4.314-7.462 9.123-14.627 14.4-21.44 7.875-9.629 12.864-21.29 14.394-33.635 1.53-12.342-0.467-24.867-5.754-36.125l-59.84-122.881c-5.635-11.286-14.73-20.477-25.952-26.234-11.226-5.756-23.997-7.776-36.448-5.766-46.072 7.753-89.44 27.015-126.081 56-20.379 16.952-35.847 39.050-44.8 64-9.479 27.726-8.684 57.931 2.24 85.121 25.032 59.536 57.851 115.491 97.6 166.4 28.686 38.71 59.902 75.485 93.441 110.080 34.406 33.296 70.966 64.298 109.44 92.8 51.203 39.821 107.485 72.643 167.36 97.6 27.158 11.066 57.418 11.862 85.12 2.24 24.368-9.203 45.888-24.653 62.4-44.8 29.328-36.544 48.925-79.92 56.96-126.080 1.984-12.49-0.083-25.286-5.901-36.515-5.814-11.229-15.075-20.301-26.419-25.885zM747.798 761.219c-9.187 11.802-21.331 20.963-35.2 26.56-14.051 4.416-29.197 3.85-42.88-1.6-54.202-23.091-105.187-53.101-151.68-89.28-35.83-27.52-69.923-57.232-102.080-88.96-31.334-32.611-60.618-67.13-87.68-103.36-36.201-46.426-66.113-97.427-88.961-151.68-5.832-13.587-6.514-28.829-1.92-42.881 5.595-13.87 14.757-26.014 26.56-35.2 26.691-20.806 57.953-34.956 91.201-41.28l60.8 121.281c0.154 0.954 0.154 1.926 0 2.88-7.933 9.981-14.899 20.698-20.8 32-7.347 12.966-11.101 27.658-10.88 42.56 1.354 13.142 5.853 25.763 13.12 36.8 6.934 11.104 14.522 21.789 22.72 32 16.96 21.12 36.48 42.56 49.6 55.68s34.56 32 55.68 49.6c10.208 8.198 20.893 15.782 32 22.72 11.034 7.264 23.658 11.763 36.8 13.12 14.899 0.218 29.59-3.536 42.56-10.88 11.302-5.904 22.016-12.867 32-20.8 0.851-0.707 1.827-1.251 2.88-1.6l118.72 59.84c-6.509 33.811-21.11 65.542-42.56 92.48z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["phone-in"],"grid":0},"attrs":[{},{}],"properties":{"order":1078,"id":166,"name":"phone-in","prevSize":32,"code":59809},"setIdx":0,"setId":6,"iconIdx":166},{"icon":{"paths":["M649.373 137.372c12.496-12.497 32.758-12.497 45.254 0l73.373 73.373 73.373-73.373c12.499-12.497 32.758-12.497 45.254 0 12.499 12.497 12.499 32.758 0 45.255l-73.373 73.372 73.373 73.373c12.499 12.496 12.499 32.758 0 45.254-12.496 12.496-32.755 12.496-45.254 0l-73.373-73.372-73.373 73.372c-12.496 12.496-32.755 12.496-45.254 0-12.496-12.496-12.496-32.758 0-45.254l73.373-73.373-73.373-73.372c-12.496-12.497-12.496-32.758 0-45.255zM361.062 167.708c28.672-4.835 53.037 12.064 63.712 33.949l61.379 125.818c12.202 25.008 6.147 52.72-8.822 71.546-5.706 7.178-11.002 14.899-14.64 21.968-2.938 5.712-3.834 9.149-4.102 10.563 0.378 0.928 1.494 3.754 4.534 8.877 4.362 7.35 10.749 16.269 18.438 25.952 15.312 19.29 33.782 39.12 46.026 51.363s32.077 30.717 51.363 46.029c9.683 7.69 18.602 14.077 25.955 18.442 5.12 3.040 7.946 4.154 8.874 4.534 1.414-0.272 4.854-1.165 10.563-4.106 7.069-3.638 14.79-8.931 21.968-14.64 18.822-14.97 46.538-21.021 71.546-8.822l125.818 61.379c21.885 10.678 38.784 35.040 33.949 63.715-6.582 39.037-25.811 90.998-58.458 129.338-16.55 19.437-37.696 36.694-63.773 45.856-26.685 9.373-56.266 9.437-87.283-2.141-58.205-21.722-120.33-61.997-171.36-100.16-51.347-38.4-93.795-76.438-112.973-95.616s-57.213-61.622-95.613-112.973c-38.16-51.027-78.435-113.152-100.156-171.357-11.575-31.018-11.513-60.598-2.138-87.284 9.159-26.075 26.417-47.22 45.854-63.771 38.339-32.647 90.303-51.876 129.34-58.458zM368.106 231.463c-30.048 5.715-68.407 20.88-94.89 43.431-13.508 11.503-22.577 23.764-26.964 36.255-4.173 11.878-4.878 26.025 1.716 43.696 18.514 49.61 54.456 105.939 91.45 155.408 36.752 49.146 72.806 89.238 89.613 106.045 16.81 16.81 56.902 52.864 106.048 89.619 49.469 36.995 105.798 72.938 155.408 91.453 17.67 6.592 31.818 5.888 43.696 1.715 12.49-4.387 24.752-13.456 36.256-26.963 22.55-26.483 37.715-64.842 43.43-94.893l-124.064-60.522c-0.077-0.019-0.291-0.048-0.704 0.013-0.768 0.112-1.875 0.515-2.954 1.376-9.171 7.293-20.493 15.264-32.518 21.456-11.296 5.811-26.89 12-43.514 11.245-14.483-0.659-28.454-7.955-37.878-13.549-10.835-6.432-22.275-14.771-33.082-23.35-21.69-17.222-43.363-37.44-56.822-50.899s-33.677-35.133-50.896-56.826c-8.579-10.803-16.918-22.246-23.35-33.078-5.594-9.427-12.886-23.398-13.546-37.878-0.755-16.624 5.434-32.218 11.245-43.514 6.189-12.026 14.163-23.347 21.456-32.518 0.858-1.078 1.261-2.186 1.376-2.954 0.061-0.413 0.032-0.627 0.013-0.704l-60.525-124.063z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["phone-issue"],"grid":0},"attrs":[{}],"properties":{"order":1079,"id":167,"name":"phone-issue","prevSize":32,"code":59835},"setIdx":0,"setId":6,"iconIdx":167},{"icon":{"paths":["M428.346 199.399c17.542-17.543 45.984-17.543 63.53 0 17.542 17.543 17.542 45.986 0 63.53l-43.661 43.659 177.83 177.828 60.339-60.339c24.992-24.995 65.517-24.995 90.509 0l45.254 45.254-331.869 331.869-45.254-45.254c-24.992-24.995-24.992-65.517 0-90.509l60.339-60.339-177.827-177.83-43.661 43.661c-17.543 17.542-45.987 17.542-63.53 0s-17.543-45.987 0-63.53l208.001-207.999zM175.090 362.144c-42.537 42.538-42.537 111.501 0 154.038 42.001 42.003 109.771 42.531 152.42 1.587l87.334 87.334-15.075 15.075c-49.987 49.987-49.987 131.034 0 181.021l67.882 67.882c12.496 12.496 32.758 12.496 45.254 0l167.936-167.933 88.013 92.003c12.218 12.771 32.474 13.219 45.245 1.002 12.771-12.214 13.219-32.47 1.002-45.242l-88.995-93.030 163.923-163.923c12.499-12.496 12.499-32.758 0-45.254l-67.882-67.882c-49.987-49.987-131.030-49.987-181.018 0l-15.907 15.907-87.325-87.323c41.766-42.596 41.51-110.983-0.768-153.262-42.538-42.537-111.504-42.537-154.042 0l-207.998 208z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pin"],"defaultCode":59808,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1080,"name":"pin","prevSize":32,"id":168,"code":59808},"setIdx":0,"setId":6,"iconIdx":168},{"icon":{"paths":["M512.608 128.019c-72.378-1.376-144.906 25.78-199.307 80.524-54.654 54.999-89.301 136.056-89.301 239.464 0 80.234 44.5 174.87 97.546 252.806 53.066 77.965 120.829 148.157 176.141 175.821l15.194 7.6 14.81-8.326c217.158-122.154 272.31-333.882 272.31-427.898 0-101.731-27.923-181.776-80.179-236.932-52.346-55.248-125.296-81.503-207.213-83.060zM288 448.006c0-88.589 29.353-152.745 70.698-194.351 41.6-41.862 97.072-62.705 152.694-61.648 68.992 1.311 124.038 23.054 161.968 63.088 38.019 40.126 62.64 102.649 62.64 192.914 0 74.55-44.691 253.677-224.176 363.030-39.683-25.61-92.186-79.853-137.37-146.237-50.954-74.864-86.454-156.221-86.454-216.797zM544 416c0-17.674-14.326-32-32-32s-32 14.326-32 32c0 17.674 14.326 32 32 32s32-14.326 32-32zM608 416c0 53.021-42.979 96-96 96s-96-42.979-96-96c0-53.021 42.979-96 96-96s96 42.979 96 96z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["pin-map"],"defaultCode":59807,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1081,"name":"pin-map","prevSize":32,"id":169,"code":59807},"setIdx":0,"setId":6,"iconIdx":169},{"icon":{"paths":["M864 512c0-194.404-157.597-352-352-352s-352 157.596-352 352c0 194.403 157.596 352 352 352s352-157.597 352-352zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416c0-229.75 186.25-416 416-416s416 186.25 416 416zM451.85 357.187l195.254 136.768c14.208 9.949 18.496 30.87 9.581 46.726-2.432 4.326-5.706 7.981-9.581 10.694l-195.254 136.768c-14.208 9.952-32.954 5.165-41.869-10.694-3.037-5.398-4.646-11.642-4.646-18.016v-273.536c0-18.723 13.597-33.898 30.371-33.898 5.709 0 11.306 1.798 16.144 5.187z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["play"],"defaultCode":59811,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1082,"name":"play","prevSize":32,"id":170,"code":59811},"setIdx":0,"setId":6,"iconIdx":170},{"icon":{"paths":["M512 928.003c229.75 0 416-186.25 416-416s-186.25-415.999-416-415.999c-229.75 0-416 186.25-416 415.999s186.25 416 416 416zM451.846 357.19l195.258 136.768c14.205 9.952 18.496 30.874 9.578 46.73-2.429 4.323-5.706 7.978-9.578 10.691l-195.258 136.768c-14.205 9.952-32.95 5.165-41.866-10.691-3.037-5.398-4.646-11.645-4.646-18.019v-273.536c0-18.72 13.597-33.894 30.368-33.894 5.712 0 11.309 1.795 16.144 5.184z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["play-filled"],"defaultCode":59810,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1083,"name":"play-filled","prevSize":32,"id":171,"code":59810},"setIdx":0,"setId":6,"iconIdx":171},{"icon":{"paths":["M325.686 430.88l224.49 224.49-126.118 126.118-224.491-224.49 126.12-126.118zM370.941 385.626l192.115-192.117 224.49 224.491-192.115 192.115-224.49-224.49zM585.683 125.627c-12.496-12.497-32.758-12.497-45.254 0l-408.745 408.745c-12.497 12.496-12.497 32.758 0 45.254l269.746 269.747c5.229 5.229 11.818 8.269 18.63 9.123v0.067h0.57c2.278 0.243 4.576 0.243 6.851 0h440.579c17.674 0 32-14.33 32-32 0-17.674-14.326-32.003-32-32.003h-366.566l353.936-353.933c12.496-12.496 12.496-32.758 0-45.254l-269.747-269.746z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["prune"],"defaultCode":59817,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1084,"name":"prune","prevSize":32,"id":172,"code":59817},"setIdx":0,"setId":6,"iconIdx":172},{"icon":{"paths":["M230.486 636.688c-14.92-9.472-34.694-5.056-44.167 9.862-9.473 14.922-5.057 34.694 9.862 44.166l298.666 189.632c10.47 6.646 23.837 6.646 34.304 0l298.669-189.632c14.918-9.472 19.334-29.245 9.862-44.166-9.475-14.918-29.248-19.334-44.166-9.862l-281.517 178.739-281.514-178.739zM186.319 494.848c9.473-14.922 29.247-19.334 44.167-9.862l281.514 178.739 281.517-178.739c14.918-9.472 34.691-5.059 44.166 9.862 9.472 14.918 5.056 34.694-9.862 44.166l-298.669 189.632c-10.467 6.646-23.834 6.646-34.304 0l-298.666-189.632c-14.92-9.472-19.335-29.248-9.862-44.166zM529.152 143.657l298.669 189.629c9.245 5.872 14.848 16.064 14.848 27.014 0 10.954-5.603 21.146-14.848 27.014l-298.669 189.632c-10.467 6.646-23.834 6.646-34.304 0l-298.666-189.632c-9.246-5.869-14.848-16.061-14.848-27.014 0-10.95 5.602-21.142 14.848-27.014l298.666-189.629c10.47-6.647 23.837-6.647 34.304 0zM273.035 360.301l238.965 151.725 238.966-151.725-238.966-151.724-238.965 151.724z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["queue"],"defaultCode":59818,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1085,"name":"queue","prevSize":32,"id":173,"code":59818},"setIdx":0,"setId":6,"iconIdx":173},{"icon":{"paths":["M161.352 800c-11.706 0-22.477-6.39-28.087-16.666s-5.161-22.79 1.169-32.64l112.304-174.694h-69.387c-17.673 0-32-14.326-32-32v-288c0-17.673 14.327-32 32-32h255.999c17.674 0 32 14.327 32 32v288c0 6.138-1.763 12.144-5.082 17.306l-143.999 224c-5.888 9.158-16.029 14.694-26.918 14.694h-128zM332.269 561.306l-112.304 174.694h51.916l129.469-201.398v-246.602h-191.999v224h96c11.706 0 22.479 6.39 28.085 16.666 5.61 10.275 5.162 22.79-1.168 32.64zM577.35 800c-11.706 0-22.477-6.39-28.086-16.666s-5.162-22.79 1.171-32.64l112.304-174.694h-69.389c-17.67 0-32-14.326-32-32v-288c0-17.673 14.33-32 32-32h256c17.674 0 32 14.327 32 32v288c0 6.138-1.763 12.144-5.082 17.306l-144 224c-5.888 9.158-16.029 14.694-26.918 14.694h-128zM748.269 561.306l-112.304 174.694h51.917l129.469-201.398v-246.602h-192v224h96c11.706 0 22.48 6.39 28.086 16.666 5.61 10.275 5.162 22.79-1.168 32.64z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["quote"],"defaultCode":59819,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1086,"name":"quote","prevSize":32,"id":174,"code":59819},"setIdx":0,"setId":6,"iconIdx":174},{"icon":{"paths":["M800 560c0 176.73-143.27 320-320 320-176.731 0-320-143.27-320-320s143.269-320 320-320v-64c-212.077 0-384 171.923-384 384s171.923 384 384 384c212.077 0 384-171.923 384-384 0-10.778-0.445-21.45-1.315-32h-64.266c1.046 10.525 1.581 21.2 1.581 32zM800 128c0-17.673-14.326-32-32-32s-32 14.327-32 32v112h-112c-17.674 0-32 14.327-32 32s14.326 32 32 32h112v112c0 17.674 14.326 32 32 32s32-14.326 32-32v-112h112c17.674 0 32-14.327 32-32s-14.326-32-32-32h-112v-112zM384 528c35.347 0 64-28.653 64-64s-28.653-64-64-64c-35.347 0-64 28.653-64 64s28.653 64 64 64zM640 464c0 35.347-28.653 64-64 64s-64-28.653-64-64c0-35.347 28.653-64 64-64s64 28.653 64 64zM329.805 605.075c-10.451-14.25-30.477-17.331-44.728-6.88s-17.333 30.477-6.882 44.73c37.658 51.35 77.754 84.624 119.178 102.662 41.741 18.179 82.797 19.99 120.362 11.651 73.469-16.307 132.211-70.87 164.070-114.314 10.451-14.253 7.37-34.278-6.88-44.73-14.253-10.451-34.278-7.37-44.73 6.88-26.81 36.557-73.664 77.994-126.33 89.686-25.501 5.661-52.643 4.474-80.938-7.85-28.608-12.461-60.381-37.187-93.123-81.837z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["reaction-add"],"defaultCode":59820,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1087,"name":"reaction-add","prevSize":32,"id":175,"code":59820},"setIdx":0,"setId":6,"iconIdx":175},{"icon":{"paths":["M832 512c0-176.73-143.27-320-320-320s-320 143.27-320 320c0 176.73 143.27 320 320 320s320-143.27 320-320zM896 512c0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384s384 171.923 384 384zM512 704c-106.038 0-192-85.962-192-192s85.962-192 192-192c106.038 0 192 85.962 192 192s-85.962 192-192 192z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["record"],"defaultCode":59821,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1088,"name":"record","prevSize":32,"id":176,"code":59821},"setIdx":0,"setId":6,"iconIdx":176},{"icon":{"paths":["M896 512h-63.984c0-175.414-145.754-320-328.518-320-115.27 0-215.818 57.513-274.362 144h110.768c17.674 0 32 14.326 32 32s-14.326 32-32 32h-179.904c-17.673 0-32-14.326-32-32v-192c0-17.673 14.327-32 32-32s32 14.327 32 32v102.32c71.751-91.401 184.589-150.32 311.498-150.32 216.781 0 392.502 171.923 392.502 384 0 1.114 0.010 2.227 0 3.338v-3.338z","M127.997 512h63.986c0 175.414 145.751 320 328.519 320 115.27 0 215.818-57.514 274.358-144h-110.768c-17.67 0-32-14.326-32-32s14.33-32 32-32h179.907c17.67 0 32 14.326 32 32v192c0 17.674-14.33 32-32 32-17.674 0-32-14.326-32-32v-102.32c-71.754 91.402-184.592 150.32-311.498 150.32-216.782 0-392.505-171.923-392.505-384 0-1.082-0.009-2.166 0-3.245v3.245z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["refresh"],"defaultCode":59822,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1089,"name":"refresh","prevSize":32,"id":177,"code":59822},"setIdx":0,"setId":6,"iconIdx":177},{"icon":{"paths":["M565.802 233.862l-97.261 97.261h-187.521l-0.456 0.003c-14.696 0.208-28.717 6.186-39.042 16.637l-97.095 96.797-0.048 0.048c-7.165 7.174-12.248 16.157-14.707 25.994-2.459 9.834-2.202 20.154 0.745 29.856 2.946 9.699 8.471 18.419 15.984 25.226 7.506 6.8 16.746 11.443 26.678 13.424l125.65 25.19c5.103 1.024 10.166 0.771 14.859-0.538l162.866 162.867c1.987 1.987 4.17 3.654 6.483 5.011l22.88 114.128c1.981 9.936 6.618 19.146 13.418 26.653 6.81 7.514 15.526 13.037 25.229 15.984s20.019 3.203 29.856 0.746c9.837-2.461 18.819-7.542 25.994-14.707l96.842-97.146c10.451-10.323 16.432-24.346 16.64-39.040l0.003-0.454v-193.802c0-2.893-0.384-5.693-1.104-8.358l77.443-77.44c110.522-110.525 110.474-223.191 103.152-273.759-1.862-13.592-8.122-26.204-17.824-35.908s-22.317-15.962-35.907-17.823c-50.57-7.321-163.235-7.371-273.757 103.151zM611.056 279.117c92.138-92.138 182.144-90.373 218.947-85.121 5.254 36.804 7.018 126.811-85.12 218.948l-245.798 245.802-133.83-133.827 245.802-245.802zM404.541 395.123l-104.222 104.221-100.071-20.064 84.42-84.157h119.873zM542.89 705.446l106.909-106.906v135.61l-84.16 84.422-22.266-111.062c-0.138-0.698-0.301-1.386-0.483-2.064z","M286.325 699.699c15.297-8.851 20.524-28.426 11.674-43.725-8.85-15.296-28.426-20.522-43.723-11.674-49.486 28.63-72.438 77.786-83.25 115.523-5.52 19.267-8.252 36.813-9.619 49.539-0.687 6.397-1.037 11.661-1.217 15.424-0.090 1.885-0.137 3.402-0.162 4.499l-0.023 1.334-0.004 0.422-0.001 0.15v0.083c0 8.486 3.372 16.65 9.372 22.65 6.001 6.003 14.14 9.373 22.628 9.373v-32c0 32 0.037 32 0.048 32h0.208l0.424-0.003 1.333-0.022c1.099-0.026 2.614-0.074 4.498-0.163 3.764-0.179 9.029-0.528 15.425-1.216 12.727-1.366 30.272-4.099 49.54-9.619 37.739-10.813 86.892-33.763 115.523-83.251 8.851-15.296 3.622-34.87-11.674-43.722s-34.874-3.626-43.725 11.674c-16.669 28.813-47.164 45.011-77.751 53.776-6.095 1.744-12.005 3.139-17.55 4.25 1.111-5.546 2.505-11.456 4.251-17.549 8.763-30.589 24.961-61.085 53.775-77.754zM192 831.299l-32-0.022c0 0.013 0 0.022 32 0.022z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["rocket"],"defaultCode":59816,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1090,"id":178,"name":"rocket","prevSize":32,"code":59816},"setIdx":0,"setId":6,"iconIdx":178},{"icon":{"paths":["M713.718 450.362c0-142.689-115.824-258.362-258.701-258.362-142.878 0-258.704 115.673-258.704 258.362 0 142.691 115.826 258.365 258.704 258.365 142.877 0 258.701-115.674 258.701-258.365zM659.302 699.965c-55.645 45.475-126.774 72.762-204.285 72.762-178.271 0-322.788-144.326-322.788-322.365 0-178.035 144.517-322.362 322.788-322.362 178.269 0 322.787 144.327 322.787 322.362 0 77.408-27.318 148.442-72.854 204.013l186.838 186.592c12.608 12.589 12.608 33.002 0 45.59-12.605 12.589-33.043 12.589-45.648 0l-186.838-186.592z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["search"],"defaultCode":59823,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1091,"name":"search","prevSize":32,"id":179,"code":59823},"setIdx":0,"setId":6,"iconIdx":179},{"icon":{"paths":["M878.022 192.974c7.85 9.521 9.526 22.708 4.31 33.891l-298.669 640.002c-5.69 12.195-18.403 19.526-31.811 18.342-13.405-1.184-24.637-10.627-28.106-23.632l-81.619-306.070-285.772-142.886c-11.978-5.987-18.959-18.8-17.498-32.112s11.056-24.307 24.048-27.552l682.665-170.668c11.974-2.993 24.598 1.165 32.451 10.686zM505.821 545.968l57.082 214.051 233.027-499.35-533.58 133.395 203.606 101.802 69.51-52.131c14.141-10.605 34.198-7.741 44.8 6.4 10.605 14.138 7.741 34.195-6.4 44.8l-68.045 51.034z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["send"],"defaultCode":59825,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1092,"name":"send","prevSize":32,"id":180,"code":59825},"setIdx":0,"setId":6,"iconIdx":180},{"icon":{"paths":["M891.494 238.96l-297.475 637.446c-16.854 36.115-69.622 31.459-79.891-7.050l-66-247.498 151.248-189.059-219.994 109.997-226.833-113.418c-35.43-17.715-29.696-69.949 8.733-79.555l681.197-170.3c34.842-8.71 64.202 26.892 49.014 59.436z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["send-filled"],"defaultCode":59824,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1093,"name":"send-filled","prevSize":32,"id":181,"code":59824},"setIdx":0,"setId":6,"iconIdx":181},{"icon":{"paths":["M421.334 256c0-44.183-35.818-80-80-80s-80 35.817-80 80c0 44.183 35.817 80 80 80s80-35.817 80-80zM465.302 288c-14.211 55.206-64.326 96-123.968 96-59.643 0-109.758-40.794-123.968-96h-89.367c-17.673 0-32-14.327-32-32s14.327-32 32-32h89.367c14.209-55.207 64.324-96 123.968-96 59.642 0 109.757 40.793 123.968 96h430.698c17.674 0 32 14.327 32 32s-14.326 32-32 32h-430.698zM96 768c0-17.674 14.327-32 32-32h89.367c14.209-55.206 64.324-96 123.968-96 60.781 0 111.67 42.365 124.742 99.181 4.208-2.038 8.934-3.181 13.923-3.181h416c17.674 0 32 14.326 32 32s-14.326 32-32 32h-416c-4.989 0-9.715-1.142-13.923-3.181-13.072 56.816-63.962 99.181-124.742 99.181-59.643 0-109.758-40.794-123.968-96h-89.367c-17.673 0-32-14.326-32-32zM341.334 848c44.182 0 80-35.818 80-80s-35.818-80-80-80c-44.183 0-80 35.818-80 80s35.817 80 80 80zM796.029 543.757c-14.122 55.331-64.298 96.243-124.029 96.243s-109.904-40.912-124.029-96.243c-1.302 0.16-2.627 0.243-3.971 0.243h-416c-17.673 0-32-14.326-32-32s14.327-32 32-32h416c1.344 0 2.669 0.083 3.971 0.243 14.125-55.331 64.298-96.243 124.029-96.243s109.907 40.912 124.029 96.243c1.302-0.16 2.627-0.243 3.971-0.243h96c17.674 0 32 14.326 32 32s-14.326 32-32 32h-96c-1.344 0-2.669-0.083-3.971-0.243zM752 512c0-44.182-35.818-80-80-80s-80 35.818-80 80c0 44.182 35.818 80 80 80s80-35.818 80-80z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["settings"],"defaultCode":59826,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1094,"name":"settings","prevSize":32,"id":182,"code":59826},"setIdx":0,"setId":6,"iconIdx":182},{"icon":{"paths":["M690.176 301.708c11.645-11.977 11.645-31.396 0-43.374l-149.091-153.351c-11.645-11.977-30.525-11.977-42.17 0l-149.091 153.351c-11.645 11.977-11.645 31.397 0 43.374s30.525 11.978 42.17 0l98.189-100.993v401.343c0 16.938 13.35 30.669 29.818 30.669s29.818-13.731 29.818-30.669v-401.343l98.189 100.993c11.645 11.978 30.525 11.978 42.17 0z","M221.818 379.274h149.091v59.635h-119.272v387.635h536.728v-387.635h-119.274v-59.635h149.091c16.467 0 29.818 13.35 29.818 29.818v447.274c0 16.467-13.35 29.818-29.818 29.818h-596.364c-16.468 0-29.818-13.35-29.818-29.818v-447.274c0-16.467 13.35-29.818 29.818-29.818z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["share"],"defaultCode":59827,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1095,"name":"share","prevSize":32,"id":183,"code":59827},"setIdx":0,"setId":6,"iconIdx":183},{"icon":{"paths":["M502.627 142.69c12.915-3.408 26.509-3.289 39.363 0.345l245.194 69.317c29.165 8.245 51.254 33.818 53.504 65.14 24.506 341.145-184.394 520.422-272.611 580.214-33.053 22.403-75.28 22.474-108.416 0.259-88.758-59.504-300.1-238.589-276.51-579.794 2.205-31.89 24.96-57.772 54.753-65.633l264.724-69.849zM524.579 204.621c-1.837-0.519-3.779-0.536-5.622-0.049l-264.725 69.849c-4.4 1.161-6.999 4.775-7.233 8.165-21.305 308.166 168.214 468.531 248.301 522.218 11.507 7.715 25.434 7.677 36.87-0.077 79.379-53.798 266.835-214.288 244.685-522.649-0.243-3.358-2.787-6.925-7.082-8.139l-245.194-69.317z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["set-as-moderator"],"defaultCode":59661,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1096,"name":"shield","prevSize":32,"id":184,"code":59661},"setIdx":0,"setId":6,"iconIdx":184},{"icon":{"paths":["M513.302 142.705c12.915-3.408 26.509-3.289 39.36 0.345l245.197 69.318c29.165 8.245 51.254 33.818 53.504 65.14 24.506 341.142-184.397 520.422-272.611 580.214-33.053 22.403-75.28 22.47-108.416 0.259-88.762-59.504-300.101-238.589-276.511-579.794 2.205-31.89 24.96-57.772 54.753-65.633l264.725-69.849zM535.251 204.637c-1.834-0.519-3.776-0.536-5.622-0.050l-264.723 69.849c-4.4 1.161-6.999 4.775-7.234 8.164-21.305 308.164 168.216 468.532 248.299 522.218 11.507 7.715 25.434 7.677 36.874-0.077 79.379-53.798 266.832-214.288 244.682-522.65-0.24-3.358-2.784-6.925-7.078-8.139l-245.197-69.317z","M490.672 337.334c-19.76 4.672-47.245 12.31-81.149 24.554 20.81 108.771 53.219 187.014 81.149 238.832v-263.386zM492.867 271.316c33.77-6.898 61.805 19.742 61.805 51.125v360.963c0 17.024-10.333 31.747-25.642 37.52-15.67 5.91-33.779 1.331-44.861-12.675-32.656-41.267-106.323-152.95-141.19-354.563-3.242-18.746 7.066-37.695 25.328-44.726 56.186-21.63 99.094-32.442 124.56-37.644z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["shield"],"defaultCode":59829,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1097,"name":"shield-alt","prevSize":32,"id":185,"code":59829},"setIdx":0,"setId":6,"iconIdx":185},{"icon":{"paths":["M664.083 405.072c11.638-13.299 10.288-33.517-3.011-45.155s-33.517-10.288-45.155 3.011l-125.251 143.142-39.917-45.619c-11.638-13.299-31.853-14.646-45.155-3.011-13.299 11.638-14.646 31.856-3.008 45.155l64 73.142c6.077 6.944 14.854 10.928 24.080 10.928 9.229 0 18.006-3.984 24.083-10.928l149.334-170.666z","M541.99 143.050c-12.854-3.634-26.448-3.753-39.363-0.345l-264.724 69.849c-29.793 7.861-52.548 33.743-54.753 65.633-23.589 341.205 187.752 520.29 276.51 579.794 33.136 22.211 75.363 22.144 108.416-0.259 88.218-59.792 297.117-239.072 272.611-580.214-2.25-31.321-24.339-56.895-53.504-65.14l-245.194-69.318zM518.957 204.587c1.843-0.487 3.786-0.47 5.622 0.049l245.194 69.318c4.294 1.214 6.838 4.781 7.082 8.139 22.15 308.362-165.306 468.851-244.685 522.65-11.437 7.754-25.363 7.792-36.87 0.077-80.086-53.686-269.606-214.054-248.301-522.218 0.234-3.389 2.833-7.004 7.233-8.164l264.725-69.849z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2}]},"tags":["shield-check"],"defaultCode":59828,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1098,"name":"shield-check","prevSize":32,"id":186,"code":59828},"setIdx":0,"setId":6,"iconIdx":186},{"icon":{"paths":["M778.64 213.336c-17.674 0-32 14.327-32 32v533.333c0 17.674 14.326 32 32 32s32-14.326 32-32v-533.333c0-17.673-14.326-32-32-32z","M600.87 341.334c-17.674 0-32 14.33-32 32v405.334c0 17.674 14.326 32 32 32s32-14.326 32-32v-405.334c0-17.67-14.326-32-32-32z","M423.104 810.669c-17.674 0-32-14.326-32-32v-277.334c0-17.67 14.326-32 32-32 17.67 0 32 14.33 32 32v277.334c0 17.674-14.33 32-32 32z","M245.333 597.334c-17.673 0-32 14.33-32 32v149.334c0 17.674 14.327 32 32 32s32-14.326 32-32v-149.334c0-17.67-14.327-32-32-32z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["signal"],"defaultCode":59830,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1099,"name":"signal","prevSize":32,"id":187,"code":59830},"setIdx":0,"setId":6,"iconIdx":187},{"icon":{"paths":["M772.986 470.432h-40.186c-1.104-12.381-10.090-19.757-26.454-19.757-16.278 0-24.416 6.867-24.502 16.365-0.339 10.342 9.667 15.6 25.437 18.992l14.922 3.389c34.253 7.546 52.989 24.502 53.158 52.227-0.17 32.982-25.773 52.566-69.014 52.566-43.661 0-71.894-19.414-72.403-60.026h40.186c0.934 16.701 13.142 25.35 31.709 25.35 16.874 0 26.794-7.376 26.963-17.974-0.17-9.75-8.733-14.922-27.811-19.331l-18.141-4.24c-30.016-6.867-48.496-21.706-48.413-48.070-0.253-32.304 28.317-53.923 67.997-53.923 40.355 0 66.214 21.958 66.554 54.432z","M354.858 470.432h40.186c-0.339-32.474-26.198-54.432-66.554-54.432-39.679 0-68.251 21.619-67.996 53.923-0.085 26.365 18.398 41.203 48.411 48.070l18.145 4.24c19.075 4.41 27.638 9.581 27.808 19.331-0.17 10.598-10.090 17.974-26.96 17.974-18.569 0-30.778-8.65-31.71-25.35h-40.187c0.509 40.611 28.741 60.026 72.403 60.026 43.242 0 68.845-19.584 69.014-52.566-0.17-27.725-18.906-44.682-53.158-52.227l-14.922-3.389c-15.77-3.392-25.774-8.65-25.435-18.992 0.085-9.498 8.224-16.365 24.501-16.365 16.365 0 25.35 7.376 26.454 19.757z","M418.614 418.374v173.635h40.864v-107.251h1.443l41.712 106.15h26.112l41.715-105.555h1.44v106.656h40.867v-173.635h-51.974l-44.086 107.504h-2.035l-44.086-107.504h-51.971z","M864 192c16.973 0 33.251 6.743 45.254 18.745s18.746 28.281 18.746 45.255v635.296c0 12.186-3.478 24.122-10.032 34.397-6.55 10.278-15.898 18.474-26.947 23.619-11.046 5.146-23.334 7.027-35.418 5.43-12.083-1.6-23.456-6.614-32.787-14.458l-128.81-108.285h-534.006c-16.974 0-33.252-6.742-45.255-18.746s-18.745-28.282-18.745-45.254v-512c0-16.974 6.743-33.252 18.745-45.255s28.281-18.745 45.255-18.745h704zM864 256h-704v512h534.006c15.066 0 29.648 5.315 41.181 15.011l128.813 108.285v-635.296z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["sms"],"defaultCode":59772,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1100,"name":"sms","prevSize":32,"id":188,"code":59772},"setIdx":0,"setId":6,"iconIdx":188},{"icon":{"paths":["M919.258 667.229c12.605-12.253 12.877-32.394 0.605-44.982-12.269-12.589-32.435-12.858-45.040-0.605l-106.112 103.155v-500.8c0-17.568-14.259-31.81-31.853-31.81-17.59 0-31.85 14.242-31.85 31.81v500.8l-106.115-103.155c-12.605-12.253-32.768-11.984-45.040 0.605-12.269 12.589-11.997 32.73 0.608 44.982l160.179 155.718c12.368 12.019 32.070 12.019 44.435 0l160.182-155.718zM560.659 333.667c17.59 0 31.85-14.243 31.85-31.811s-14.259-31.809-31.85-31.809h-432.49c-17.591 0-31.852 14.242-31.852 31.809s14.26 31.811 31.852 31.811h432.49zM464.55 536.099c17.59 0 31.85-14.243 31.85-31.811 0-17.565-14.259-31.808-31.85-31.808h-336.381c-17.591 0-31.852 14.24-31.852 31.808s14.26 31.811 31.852 31.811h336.381zM384.458 722.96c17.594 0 31.853-14.24 31.853-31.808s-14.259-31.811-31.853-31.811h-256.289c-17.591 0-31.852 14.243-31.852 31.811s14.26 31.808 31.852 31.808h256.289z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["sort"],"defaultCode":59832,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1101,"name":"sort","prevSize":32,"id":189,"code":59832},"setIdx":0,"setId":6,"iconIdx":189},{"icon":{"paths":["M289.362 192c13.364 0 25.321 8.305 29.987 20.829l96.001 257.699c6.17 16.56-2.256 34.986-18.816 41.155-16.563 6.17-34.989-2.253-41.158-18.816l-20.477-54.963h-91.074l-20.476 54.963c-6.17 16.563-24.597 24.986-41.158 18.816s-24.986-24.595-18.816-41.155l96-257.699c4.666-12.524 16.622-20.829 29.987-20.829zM311.058 373.904l-21.695-58.238-21.695 58.238h43.391z","M522.131 626.435c-12.154 12.829-11.606 33.082 1.222 45.238l160 151.587c12.342 11.693 31.674 11.693 44.016 0l160-151.587c12.832-12.157 13.376-32.41 1.222-45.238s-32.41-13.376-45.238-1.222l-105.99 100.419v-501.632c0-17.673-14.326-32-32-32s-32 14.327-32 32v501.632l-105.994-100.419c-12.829-12.154-33.082-11.606-45.238 1.222z","M193.362 570.947c-17.673 0-32 14.326-32 32 0 17.67 14.327 32 32 32h116.145l-139.065 142.73c-8.979 9.216-11.565 22.915-6.564 34.771 5.001 11.853 16.617 19.562 29.484 19.562h192.001c17.674 0 32-14.326 32-32s-14.326-32-32-32h-116.146l139.064-142.733c8.979-9.216 11.565-22.915 6.563-34.768-4.998-11.856-16.614-19.562-29.482-19.562h-192.001z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["sort-az"],"defaultCode":59831,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1102,"name":"sort-az","prevSize":32,"id":190,"code":59831},"setIdx":0,"setId":6,"iconIdx":190},{"icon":{"paths":["M472.618 173.508c18.166-58.554 100.454-60.461 121.322-2.812l69.821 192.91h195.44c57.872 0 86.026 70.611 43.994 110.336l-147.888 139.782 53.386 217.363c14.17 57.696-51.251 101.805-99.536 67.11l-177.741-127.709-177.741 127.709c-48.283 34.691-113.703-9.414-99.533-67.11l53.209-216.64-157.591-139.024c-44.179-38.973-16.577-111.818 42.37-111.818h221.513l58.976-190.098zM603.574 385.334l-69.824-192.91-58.976 190.098c-8.304 26.758-33.085 45.002-61.133 45.002h-221.513l157.59 139.021c17.837 15.731 25.456 40.048 19.789 63.13l-53.209 216.643 177.74-127.709c22.33-16.045 52.426-16.045 74.755 0l177.738 127.709-53.386-217.363c-5.478-22.317 1.456-45.856 18.166-61.648l147.888-139.782h-195.44c-26.957 0-51.024-16.87-60.186-42.189z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["star"],"defaultCode":59834,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1103,"name":"star","prevSize":32,"id":191,"code":59834},"setIdx":0,"setId":6,"iconIdx":191},{"icon":{"paths":["M593.939 170.244c-20.867-57.726-103.155-55.816-121.322 2.815l-58.976 190.348h-221.513c-58.947 0-86.549 72.944-42.37 111.968l157.591 139.206-53.209 216.928c-14.17 57.77 51.25 101.936 99.533 67.197l177.741-127.875 177.741 127.875c48.285 34.739 113.706-9.427 99.536-67.197l-53.386-217.651 147.888-139.968c42.032-39.779 13.878-110.483-43.99-110.483h-195.443l-69.821-193.164z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["star-filled"],"defaultCode":59833,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1104,"name":"star-filled","prevSize":32,"id":192,"code":59833},"setIdx":0,"setId":6,"iconIdx":192},{"icon":{"paths":["M512 896c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM565.334 288c0-29.455-23.878-53.333-53.334-53.333s-53.334 23.878-53.334 53.333v249.632l180.016 144.013c23.002 18.403 56.563 14.672 74.963-8.326 18.403-23.002 14.672-56.563-8.326-74.963l-139.984-111.987v-198.368z"],"attrs":[{"fill":"rgb(243, 190, 8)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":3}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":2}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":3}]},"tags":["status-away"],"defaultCode":59741,"grid":0},"attrs":[{"fill":"rgb(243, 190, 8)"}],"properties":{"order":1105,"name":"status-away","prevSize":32,"id":193,"code":59741},"setIdx":0,"setId":6,"iconIdx":193},{"icon":{"paths":["M512 896c-212.077 0-384-171.923-384-384s171.923-384 384-384c212.077 0 384 171.923 384 384s-171.923 384-384 384zM384 458.666c-29.456 0-53.334 23.875-53.334 53.331s23.878 53.334 53.334 53.334h256c29.456 0 53.334-23.878 53.334-53.334s-23.878-53.331-53.334-53.331h-256z"],"attrs":[{"fill":"rgb(245, 69, 92)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":6}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":6}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":8}]},"tags":["status-busy"],"defaultCode":59742,"grid":0},"attrs":[{"fill":"rgb(245, 69, 92)"}],"properties":{"order":1106,"name":"status-busy","prevSize":32,"id":194,"code":59742},"setIdx":0,"setId":6,"iconIdx":194},{"icon":{"paths":["M512 896c212.077 0 384-171.923 384-384s-171.923-384-384-384c-212.077 0-384 171.923-384 384s171.923 384 384 384zM554.774 298.667v298.668c0 23.562-19.101 42.666-42.666 42.666s-42.669-19.104-42.669-42.666v-298.668c0-23.564 19.104-42.667 42.669-42.667s42.666 19.102 42.666 42.667zM554.774 725.334c0 23.562-19.101 42.666-42.666 42.666s-42.669-19.104-42.669-42.666c0-23.565 19.104-42.669 42.669-42.669s42.666 19.104 42.666 42.669z"],"attrs":[{"fill":"rgb(243, 140, 57)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":5}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":7}]},"tags":["status-disabled"],"defaultCode":59837,"grid":0},"attrs":[{"fill":"rgb(243, 140, 57)"}],"properties":{"order":1107,"id":195,"name":"status-disabled","prevSize":32,"code":59837},"setIdx":0,"setId":6,"iconIdx":195},{"icon":{"paths":["M888.691 586.941l-125.568-24.838c3.187-16.102 4.877-32.842 4.877-50.102s-1.69-34-4.877-50.102l125.568-24.838c4.794 24.237 7.309 49.296 7.309 74.941s-2.515 50.704-7.309 74.941zM831.322 298.644l-106.365 71.209c-18.726-27.971-42.838-52.083-70.81-70.81l71.21-106.364c41.875 28.035 77.93 64.089 105.965 105.965zM586.941 135.309l-24.838 125.566c-16.102-3.185-32.842-4.876-50.102-4.876s-34 1.69-50.102 4.876l-24.838-125.566c24.237-4.795 49.296-7.309 74.941-7.309s50.704 2.514 74.941 7.309zM298.644 192.679l71.209 106.364c-27.971 18.727-52.083 42.839-70.81 70.81l-106.364-71.209c28.035-41.876 64.089-77.93 105.965-105.964zM135.309 437.059c-4.795 24.237-7.309 49.296-7.309 74.941s2.514 50.704 7.309 74.941l125.566-24.838c-3.185-16.102-4.876-32.842-4.876-50.102s1.69-34 4.876-50.102l-125.566-24.838zM192.679 725.357l106.364-71.21c18.727 27.971 42.839 52.083 70.81 70.81l-71.209 106.365c-41.876-28.035-77.93-64.090-105.964-105.965zM437.059 888.691l24.838-125.568c16.102 3.187 32.842 4.877 50.102 4.877s34-1.69 50.102-4.877l24.838 125.568c-24.237 4.794-49.296 7.309-74.941 7.309s-50.704-2.515-74.941-7.309zM725.357 831.322l-71.21-106.365c27.971-18.726 52.083-42.838 70.81-70.81l106.365 71.21c-28.035 41.875-64.090 77.93-105.965 105.965z"],"attrs":[{"fill":"rgb(158, 162, 168)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":9}]},"tags":["status-loading"],"defaultCode":59743,"grid":0},"attrs":[{"fill":"rgb(158, 162, 168)"}],"properties":{"order":1108,"name":"status-loading","prevSize":32,"id":196,"code":59743},"setIdx":0,"setId":6,"iconIdx":196},{"icon":{"paths":["M512 789.334c-153.168 0-277.333-124.166-277.333-277.334s124.165-277.333 277.333-277.333c153.168 0 277.334 124.165 277.334 277.333s-124.166 277.334-277.334 277.334zM512 896c212.077 0 384-171.923 384-384s-171.923-384-384-384c-212.077 0-384 171.923-384 384s171.923 384 384 384z"],"attrs":[{"fill":"rgb(158, 162, 168)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":7}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":7}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":9}]},"tags":["status-offline"],"defaultCode":59744,"grid":0},"attrs":[{"fill":"rgb(158, 162, 168)"}],"properties":{"order":1109,"name":"status-offline","prevSize":32,"id":197,"code":59744},"setIdx":0,"setId":6,"iconIdx":197},{"icon":{"paths":["M896 512c0 212.077-171.923 384-384 384s-384-171.923-384-384c0-212.077 171.923-384 384-384s384 171.923 384 384z"],"attrs":[{"fill":"rgb(45, 224, 165)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":4}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":3}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":5}]},"tags":["status-online"],"defaultCode":59745,"grid":0},"attrs":[{"fill":"rgb(45, 224, 165)"}],"properties":{"order":1110,"name":"status-online","prevSize":32,"id":198,"code":59745},"setIdx":0,"setId":6,"iconIdx":198},{"icon":{"paths":["M511.997 224c-114.163 0-179.555 64.46-179.555 128v0.253c-0.061 7.453 1.072 14.867 3.354 21.962 5.411 16.826-3.84 34.851-20.666 40.259-16.825 5.411-34.85-3.84-40.261-20.666-4.357-13.546-6.527-27.702-6.428-41.933 0.081-113.124 110.343-191.875 243.556-191.875 103.597 0 190.97 46.311 226.886 120.071 7.738 15.889 1.13 35.043-14.762 42.78-15.888 7.738-35.043 1.13-42.781-14.761-22.259-45.713-82.714-84.090-169.344-84.090z","M128 512c0-17.674 14.327-32 32-32h392.893c0.467-0.010 0.938-0.010 1.408 0h309.699c17.674 0 32 14.326 32 32s-14.326 32-32 32h-160.432c38.198 29.328 64.432 70.438 64.432 128.003 0 57.2-32.512 105.965-79.008 139.178-46.557 33.254-109.235 52.822-176.992 52.822s-130.435-19.568-176.992-52.822c-46.495-33.213-79.008-81.978-79.008-139.178 0-17.674 14.327-32 32-32s32 14.326 32 32c0 31.168 17.632 62.4 52.208 87.098 34.515 24.653 83.837 40.902 139.792 40.902s105.277-16.25 139.792-40.902c34.576-24.698 52.208-55.93 52.208-87.098 0-35.558-15.216-59.581-42.134-79.283-27.824-20.368-67.005-35.082-112.88-48.72h-388.986c-17.673 0-32-14.326-32-32z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124319081245699212911624514522416519902101":[{},{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{},{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{},{}]},"tags":["strike"],"defaultCode":59846,"grid":0},"attrs":[{},{}],"properties":{"order":1111,"name":"strike","prevSize":32,"id":199,"code":59846},"setIdx":0,"setId":6,"iconIdx":199},{"icon":{"paths":["M481.35 117.336c0-17.673 14.326-32 32-32s32 14.327 32 32v106.667c0 17.673-14.326 32-32 32s-32-14.327-32-32v-106.667zM771.392 214.631c12.496-12.497 32.758-12.497 45.254 0s12.496 32.758 0 45.255l-75.411 75.413c-12.499 12.496-32.758 12.496-45.254 0-12.499-12.496-12.499-32.759 0-45.255l75.411-75.412zM336.73 694.63c-12.499-12.496-32.759-12.496-45.256 0l-75.495 75.498c-12.497 12.496-12.497 32.755 0 45.254 12.497 12.496 32.758 12.496 45.255 0l75.496-75.498c12.496-12.496 12.496-32.755 0-45.254zM481.35 800.003c0-17.674 14.326-32 32-32s32 14.326 32 32v106.669c0 17.67-14.326 32-32 32s-32-14.33-32-32v-106.669zM213.352 212.001c-12.497 12.497-12.497 32.758 0 45.255l75.349 75.348c12.497 12.496 32.758 12.496 45.254 0 12.499-12.496 12.496-32.757 0-45.254l-75.348-75.349c-12.497-12.497-32.758-12.497-45.255 0zM695.978 739.885c-12.496-12.496-12.496-32.758 0-45.254 12.499-12.496 32.758-12.496 45.254 0l75.331 75.328c12.496 12.496 12.496 32.758 0 45.254-12.499 12.496-32.758 12.496-45.258 0l-75.328-75.328zM87.751 512.003c0 17.674 14.327 32 32 32h106.667c17.673 0 32-14.326 32-32s-14.327-32-32-32h-106.667c-17.673 0-32 14.326-32 32zM801.35 544.003c-17.674 0-32-14.326-32-32s14.326-32 32-32h106.669c17.67 0 32 14.326 32 32s-14.33 32-32 32h-106.669zM668.17 512c0-85.504-69.315-154.816-154.819-154.816-85.507 0-154.819 69.312-154.819 154.816 0 85.507 69.312 154.819 154.819 154.819 85.504 0 154.819-69.312 154.819-154.819zM726.682 512c0 117.821-95.51 213.334-213.331 213.334s-213.335-95.514-213.335-213.334c0-117.821 95.514-213.332 213.335-213.332s213.331 95.511 213.331 213.332z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["sun"],"defaultCode":59847,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1112,"name":"sun","prevSize":32,"id":200,"code":59847},"setIdx":0,"setId":6,"iconIdx":200},{"icon":{"paths":["M930.704 512c0 229.75-186.25 416-416 416s-415.999-186.25-415.999-416c0-229.75 186.25-416 415.999-416s416 186.25 416 416zM570.49 859.603l-41.827-156.102c-4.611 0.33-9.264 0.499-13.958 0.499-4.57 0-9.101-0.16-13.594-0.474l-41.837 156.134c18.058 2.854 36.573 4.339 55.43 4.339 18.986 0 37.616-1.504 55.786-4.397zM438.893 688.451c-47.549-20.454-85.181-59.571-103.674-108.125l-155.029 41.539c33.968 103.485 114.617 185.805 217.045 222.058l41.658-155.472zM162.705 512c0 16.090 1.080 31.926 3.17 47.443l156.906-42.042c-0.051-1.795-0.077-3.594-0.077-5.402 0-4.909 0.186-9.776 0.547-14.595l-156.051-41.814c-2.958 18.368-4.496 37.21-4.496 56.41zM396.31 180.407c-99.16 35.408-177.786 114.033-213.196 213.19l155.535 41.677c19.357-44.352 54.982-79.978 99.334-99.331l-41.674-155.536zM514.704 160c-19.197 0-38.035 1.537-56.4 4.494l41.814 156.053c4.813-0.362 9.68-0.547 14.586-0.547 5.030 0 10.019 0.192 14.95 0.573l41.808-156.021c-18.477-2.995-37.437-4.552-56.758-4.552zM632.512 843.802c102.659-36.451 183.392-119.194 217.094-223.12l-154.973-41.526c-18.291 48.982-56.010 88.493-103.786 109.155l41.664 155.491zM863.699 558.198c1.984-15.117 3.005-30.538 3.005-46.198 0-18.771-1.469-37.197-4.298-55.171l-156.157 41.84c0.301 4.406 0.454 8.851 0.454 13.331 0 1.376-0.013 2.752-0.042 4.122l157.037 42.077zM846.714 394.774c-35.165-99.6-113.885-178.641-213.277-214.247l-41.68 155.559c44.582 19.555 80.314 55.565 99.504 100.342l155.453-41.654zM642.704 512c0-70.691-57.306-128-128-128-70.691 0-128 57.309-128 128s57.309 128 128 128c70.694 0 128-57.309 128-128z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["support"],"defaultCode":59848,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1113,"name":"support","prevSize":32,"id":201,"code":59848},"setIdx":0,"setId":6,"iconIdx":201},{"icon":{"paths":["M368 412.982c-53.592 0-96-42.877-96-94.491 0-51.616 42.408-94.491 96-94.491 53.594 0 96 42.876 96 94.491 0 51.614-42.406 94.491-96 94.491zM368 476.982c88.365 0 160-70.96 160-158.491s-71.635-158.491-160-158.491c-88.365 0-160 70.959-160 158.491s71.635 158.491 160 158.491zM713.6 397.133c-35.92 0-64-28.685-64-62.794s28.080-62.792 64-62.792c35.92 0 64 28.684 64 62.792s-28.080 62.794-64 62.794zM713.6 461.133c70.691 0 128-56.768 128-126.794s-57.309-126.792-128-126.792c-70.691 0-128 56.767-128 126.792s57.309 126.794 128 126.794zM197.459 527.267c27.344-8.707 56.67-9.242 84.319-1.539l48.491 13.51c24.205 6.742 49.882 6.275 73.824-1.347l30.099-9.584c29.475-9.386 61.085-9.962 90.89-1.658 67.962 18.934 114.918 80.333 114.918 150.269v91.987c0 52.518-42.979 95.094-96 95.094h-352c-53.019 0-96-42.576-96-95.094v-103.766c0-62.909 40.999-118.621 101.459-137.872zM264.451 586.758c-15.545-4.333-32.034-4.032-47.407 0.864-33.993 10.822-57.044 42.147-57.044 77.517v103.766c0 17.507 14.327 31.699 32 31.699h352c17.674 0 32-14.192 32-31.699v-91.987c0-41.533-27.885-77.997-68.246-89.242-17.699-4.931-36.474-4.589-53.978 0.986l-30.099 9.584c-35.91 11.434-74.426 12.138-110.737 2.019l-48.489-13.507zM691.2 778.717h140.8c53.021 0 96-42.979 96-96v-30.611c0-56.877-38.614-106.49-93.747-120.454-21.398-5.418-43.853-5.040-65.056 1.098l-16.4 4.746c-21.843 6.323-44.973 6.714-67.018 1.13l-29.805-7.549c-19.907-5.043-40.797-4.691-60.522 1.018-1.066 0.31-2.122 0.634-3.174 0.97 10.71 4.048 20.896 9.539 30.253 16.374l2.429 1.776 15.040 13.206c9.939 8.726 18.141 19.248 24.182 31.014l2.208 4.301 3.677 0.931c33.062 8.374 67.76 7.789 100.525-1.693l16.4-4.749c10.282-2.976 21.171-3.158 31.546-0.531 26.736 6.771 45.462 30.832 45.462 58.413v30.611c0 17.674-14.326 32-32 32h-140.8v64z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["team"],"defaultCode":59849,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1114,"name":"team","prevSize":32,"id":202,"code":59849},"setIdx":0,"setId":6,"iconIdx":202},{"icon":{"paths":["M281.184 336c17.673 0 32-14.326 32-32s-14.327-32-32-32c-17.673 0-32 14.327-32 32s14.327 32 32 32zM281.184 400c-53.020 0-96-42.979-96-96 0-53.019 42.98-96 96-96 53.018 0 96 42.981 96 96 0 53.021-42.982 96-96 96zM576 320c0-26.51-21.491-48-48-48s-48 21.49-48 48c0 26.509 21.491 48 48 48s48-21.491 48-48zM640 320c0 61.856-50.144 112-112 112s-112-50.144-112-112c0-61.856 50.144-112 112-112s112 50.144 112 112zM477.901 478.515c-28.56-10.957-60.291-10.211-88.307 2.067-42.282 18.534-69.594 60.326-69.594 106.49v132.928c0 53.021 42.979 96 96 96h224c53.021 0 96-42.979 96-96v-125.062c0-51.162-31.536-97.034-79.306-115.354-30.352-11.642-64.067-10.851-93.84 2.198l-2.070 0.909c-21.523 9.434-45.901 10.006-67.843 1.59l-15.040-5.766zM415.286 539.2c12.595-5.52 26.858-5.856 39.699-0.931l15.040 5.77c37.664 14.445 79.504 13.462 116.451-2.73l2.070-0.909c14.349-6.288 30.602-6.669 45.229-1.059 23.024 8.829 38.224 30.938 38.224 55.597v125.062c0 17.674-14.326 32-32 32h-224c-17.674 0-32-14.326-32-32v-132.928c0-20.752 12.278-39.539 31.286-47.872zM768 336c-17.674 0-32-14.326-32-32s14.326-32 32-32c17.674 0 32 14.327 32 32s-14.326 32-32 32zM768 400c53.021 0 96-42.979 96-96 0-53.019-42.979-96-96-96s-96 42.981-96 96c0 53.021 42.979 96 96 96zM840.714 681.766h-72.714v-64h72.714c17.674 0 32-14.326 32-32v-44.688c0-15.050-9.664-28.394-23.958-33.091-7.536-2.474-15.69-2.304-23.114 0.483l-4.554 1.709c-19.77 7.421-40.89 9.978-61.619 7.632-12.438-31.683-37.722-57.549-70.774-70.227-1.754-0.672-3.52-1.302-5.296-1.894 18.058-5.312 37.36-5.040 55.344 0.867l14.182 4.659c14.886 4.893 30.998 4.554 45.667-0.954l4.554-1.709c21.069-7.91 44.205-8.394 65.581-1.37 40.566 13.325 67.987 51.197 67.987 93.894v44.688c0 53.021-42.982 96-96 96zM625.267 624h-0.797c0.259 0.598 0.525 1.194 0.797 1.786v-1.786zM357.594 448.582c2.528-1.107 5.088-2.122 7.674-3.043-17.907-5.155-37.014-4.832-54.824 1.018l-14.183 4.659c-14.887 4.893-30.998 4.554-45.668-0.954l-4.554-1.709c-21.067-7.91-44.203-8.394-65.581-1.37-40.565 13.325-67.986 51.197-67.986 93.894v44.688c0 53.021 42.981 96 96 96h79.53v-64h-79.53c-17.673 0-32-14.326-32-32v-44.688c0-15.050 9.664-28.394 23.96-33.091 7.534-2.474 15.688-2.304 23.112 0.483l4.554 1.709c21.238 7.974 44.041 10.333 66.238 7.027 10.398-30.173 32.994-55.357 63.259-68.624zM423.917 624h0.797c-0.259 0.598-0.525 1.194-0.797 1.786v-1.786z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["teams"],"defaultCode":59751,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1115,"name":"teams","prevSize":32,"id":203,"code":59751},"setIdx":0,"setId":6,"iconIdx":203},{"icon":{"paths":["M631.997 256h24v-56c0-57.437 46.563-104 104-104 57.44 0 104 46.562 104 104v56h24c17.674 0 32 14.327 32 32v192c0 17.674-14.326 32-32 32h-256c-17.67 0-32-14.326-32-32v-192c0-17.673 14.33-32 32-32zM759.997 160c-22.090 0-40 17.908-40 40v55.238h80v-55.238c0-22.092-17.907-40-40-40z","M527.997 224c10.096 0 19.882 1.336 29.184 3.84-13.251 16.46-21.184 37.383-21.184 60.16v0.664c-2.602-0.436-5.274-0.664-8-0.664-26.509 0-48 21.49-48 48s21.491 48 48 48c2.726 0 5.398-0.227 8-0.662v64.381c-2.64 0.186-5.309 0.282-8 0.282-61.856 0-112-50.144-112-112s50.144-112 112-112z","M492.941 500.282c14.883 5.709 30.883 7.283 46.355 4.758 6.182 22.938 20.646 42.474 39.987 55.206-35.123 13.318-74.019 13.309-109.261-0.208l-15.040-5.77c-12.838-4.925-27.104-4.589-39.699 0.931-19.008 8.333-31.286 27.12-31.286 47.872v132.928c0 17.674 14.33 32 32 32h224c17.674 0 32-14.326 32-32v-125.062c0-12.842-4.122-24.995-11.325-34.938h70.291c3.29 11.162 5.034 22.902 5.034 34.938v125.062c0 53.021-42.979 96-96 96h-224c-53.018 0-95.999-42.979-95.999-96v-132.928c0-46.163 27.311-87.955 69.592-106.49 28.019-12.278 59.747-13.024 88.31-2.067l15.040 5.766z","M887.997 576h-15.286v25.766c0 17.674-14.326 32-32 32h-72.714v64h72.714c53.021 0 96-42.979 96-96v-39.027c-14.278 8.426-30.931 13.261-48.714 13.261z","M281.182 416c53.020 0 95.999-42.979 95.999-96 0-53.019-42.979-96-95.999-96s-96 42.981-96 96c0 53.021 42.98 96 96 96zM281.182 352c-17.673 0-32-14.326-32-32s14.327-32 32-32c17.673 0 32 14.327 32 32s-14.327 32-32 32z","M625.267 640h-0.8c0.262 0.598 0.528 1.194 0.8 1.786v-1.786z","M357.59 464.582c2.531-1.107 5.091-2.122 7.674-3.043-17.907-5.155-37.011-4.832-54.823 1.018l-14.183 4.659c-14.887 4.893-30.998 4.554-45.668-0.954l-4.554-1.709c-21.067-7.91-44.203-8.394-65.581-1.37-40.565 13.325-67.986 51.197-67.986 93.894v44.688c0 53.021 42.98 96 96 96h79.53v-64h-79.53c-17.673 0-32-14.326-32-32v-44.688c0-15.050 9.664-28.394 23.96-33.091 7.534-2.474 15.688-2.304 23.112 0.483l4.554 1.709c21.238 7.974 44.041 10.333 66.238 7.027 10.398-30.173 32.992-55.357 63.258-68.624z","M423.914 640h0.797c-0.259 0.598-0.525 1.194-0.797 1.786v-1.786z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["teams-private"],"defaultCode":59750,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1116,"name":"teams-private","prevSize":32,"id":204,"code":59750},"setIdx":0,"setId":6,"iconIdx":204},{"icon":{"paths":["M170.664 192c0-17.673 14.327-32 32-32h618.667c17.674 0 32 14.327 32 32v128c0 17.674-14.326 32-32 32s-32-14.326-32-32v-96h-245.334v576h96c17.674 0 32 14.326 32 32s-14.326 32-32 32h-256c-17.67 0-32-14.326-32-32s14.33-32 32-32h96v-576h-245.333v96c0 17.674-14.327 32-32 32s-32-14.326-32-32v-128z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"10811412211581621681203206209124319081245699212911624514522416519902101":[{}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{}]},"tags":["text-format"],"defaultCode":59839,"grid":0},"attrs":[{}],"properties":{"order":1117,"id":205,"name":"text-format","prevSize":32,"code":59839},"setIdx":0,"setId":6,"iconIdx":205},{"icon":{"paths":["M223.311 308.609c-47.832 66.7-64.077 147.667-64.077 201.187v1.405l-0.127 1.398c-9.348 103.235 27.547 175.997 86.848 226.374 60.642 51.52 146.602 80.998 235.29 90.893 88.611 9.885 186.221 1.398 263.341-14.973 38.56-8.189 70.928-18.125 93.888-28.128 8.906-3.882 15.837-7.536 20.941-10.765-2.374-1.514-5.245-3.197-8.672-5.030-8.886-4.749-19.059-9.261-29.613-13.894l-1.843-0.81c-9.315-4.083-19.725-8.65-27.613-13.078-14.291-8.026-28.317-17.155-38.544-26.867-5.034-4.781-10.762-11.194-14.595-19.184-4.054-8.454-6.96-21.078-1.261-34.435 30.816-72.186 45.459-111.725 52.554-137.834 6.621-24.378 6.621-36.653 6.621-56.17v-0.179c0-15.51-8.979-86.595-53.776-152.876-43.376-64.174-121.398-125.729-264.832-125.729-129.725 0-207.83 53.576-254.529 118.696zM173.267 272.433c58.132-81.063 154.749-144.433 304.573-144.433 164.896 0 261.594 72.589 315.859 152.878 52.838 78.181 64.416 161.881 64.416 187.641 0 21.654-0.022 40.336-8.797 72.64-7.834 28.835-22.627 68.614-50.048 133.424 5.069 4.032 12.592 9.005 22.506 14.57 5.12 2.877 12.995 6.339 24.054 11.194 10.266 4.506 22.582 9.93 33.891 15.978 10.848 5.798 23.526 13.571 32.954 23.738 9.859 10.63 20.208 28.87 12.816 51.139-4.87 14.672-16.182 25.091-25.61 32.016-10.24 7.52-22.947 14.278-36.858 20.342-27.949 12.176-64.582 23.181-105.68 31.907-82.198 17.453-186.522 26.688-282.909 15.936-96.31-10.746-195.346-43.178-268.313-105.165-74.031-62.893-119.295-154.778-108.551-277.856 0.276-63.411 19.117-157.053 75.696-235.948zM333.952 422.051c0-17.648 14.25-31.955 31.83-31.955h183.008c17.578 0 31.827 14.307 31.827 31.955s-14.25 31.955-31.827 31.955h-183.008c-17.581 0-31.83-14.307-31.83-31.955zM365.782 539.709c-17.581 0-31.83 14.307-31.83 31.955s14.25 31.955 31.83 31.955h224.118c17.578 0 31.827-14.307 31.827-31.955s-14.25-31.955-31.827-31.955h-224.118z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["threads"],"defaultCode":59850,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1118,"name":"threads","prevSize":32,"id":206,"code":59850},"setIdx":0,"setId":6,"iconIdx":206},{"icon":{"paths":["M353.354 320c0-17.673 14.326-32 32-32h256c17.674 0 32 14.327 32 32s-14.326 32-32 32h-256c-17.674 0-32-14.326-32-32z","M385.354 416c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M481.354 448c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M641.354 416c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M353.354 576c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M513.354 544c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M609.354 576c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M385.354 672c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M481.354 704c0-17.674 14.326-32 32-32s32 14.326 32 32c0 17.674-14.326 32-32 32s-32-14.326-32-32z","M641.354 672c-17.674 0-32 14.326-32 32s14.326 32 32 32c17.674 0 32-14.326 32-32s-14.326-32-32-32z","M289.353 160h448.001c35.344 0 64 28.654 64 64v576c0 35.347-28.656 64-64 64h-448.001c-35.346 0-64-28.653-64-64v-576c0-35.346 28.654-64 64-64zM289.353 224v576h448.001v-576h-448.001z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["total"],"defaultCode":59851,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1119,"name":"total","prevSize":32,"id":207,"code":59851},"setIdx":0,"setId":6,"iconIdx":207},{"icon":{"paths":["M713.613 91.356c13.162-11.794 33.392-10.685 45.187 2.477l129.034 144c10.89 12.154 10.89 30.556 0 42.71l-129.034 144.001c-11.795 13.162-32.026 14.269-45.187 2.477-13.162-11.795-14.272-32.026-2.477-45.187l81.222-90.646h-216.358c-17.674 0-32-14.327-32-32s14.326-32 32-32h216.358l-81.222-90.645c-11.795-13.162-10.685-33.393 2.477-45.187zM340.026 464.461c8.586-15.45 28.067-21.018 43.514-12.432l128.461 71.366 128.461-71.366c15.446-8.586 34.928-3.018 43.514 12.432 8.582 15.45 3.014 34.931-12.435 43.514l-159.539 88.634-159.539-88.634c-15.45-8.582-21.018-28.064-12.435-43.514zM192 288v448h640v-192c0-17.674 14.326-32 32-32s32 14.326 32 32v224c0 17.674-14.326 32-32 32h-704c-17.673 0-32-14.326-32-32v-512c0-17.673 14.327-32 32-32h272c17.674 0 32 14.327 32 32s-14.326 32-32 32h-240z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["transcript"],"defaultCode":59852,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1120,"name":"transcript","prevSize":32,"id":208,"code":59852},"setIdx":0,"setId":6,"iconIdx":208},{"icon":{"paths":["M378.861 853.331c317.456 0 491.091-262.662 491.091-490.442 0-7.462 0-14.89-0.506-22.282 33.779-24.401 62.938-54.614 86.112-89.224-31.501 13.94-64.918 23.082-99.136 27.12 36.032-21.542 62.998-55.424 75.882-95.34-33.878 20.078-70.944 34.228-109.597 41.839-53.501-56.814-138.515-70.72-207.37-33.919-68.851 36.801-104.426 115.155-86.768 191.127-138.774-6.947-268.074-72.409-355.715-180.093-45.811 78.76-22.412 179.517 53.436 230.1-27.467-0.813-54.335-8.214-78.337-21.574 0 0.704 0 1.443 0 2.182 0.022 82.051 57.937 152.723 138.47 168.97-25.41 6.922-52.071 7.933-77.933 2.957 22.611 70.218 87.409 118.32 161.25 119.706-61.116 47.968-136.616 74.010-214.35 73.933-13.732-0.026-27.452-0.858-41.087-2.486 78.931 50.586 170.772 77.418 264.557 77.293z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["twitter-monochromatic"],"defaultCode":59660,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1121,"name":"twitter-monochromatic","prevSize":32,"id":209,"code":59660},"setIdx":0,"setId":6,"iconIdx":209},{"icon":{"paths":["M384 320c0-17.673-14.326-32-32-32s-32 14.327-32 32v256c0 106.038 85.962 192 192 192s192-85.962 192-192v-256c0-17.673-14.326-32-32-32s-32 14.327-32 32v256c0 70.691-57.309 128-128 128s-128-57.309-128-128v-256zM352 856c-13.254 0-24 10.746-24 24s10.746 24 24 24h320c13.254 0 24-10.746 24-24s-10.746-24-24-24h-320z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["underline"],"defaultCode":59853,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1122,"name":"underline","prevSize":32,"id":210,"code":59853},"setIdx":0,"setId":6,"iconIdx":210},{"icon":{"paths":["M512 832c176.73 0 320-143.27 320-320s-143.27-320-320-320c-111.712 0-210.056 57.244-267.295 144h107.295c17.674 0 32 14.326 32 32s-14.326 32-32 32h-176c-17.673 0-32-14.326-32-32v-192c0-17.673 14.327-32 32-32s32 14.327 32 32v101.364c70.228-90.856 180.282-149.364 304-149.364 212.077 0 384 171.923 384 384s-171.923 384-384 384c-212.077 0-384-171.923-384-384h64c0 176.73 143.27 320 320 320z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["undo"],"defaultCode":59854,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1123,"name":"undo","prevSize":32,"id":211,"code":59854},"setIdx":0,"setId":6,"iconIdx":211},{"icon":{"paths":["M589.36 729.43c-107.366 23.603-252.288-9.875-422.339-221.158 65.137-95.478 165.885-189.15 280.79-213.871 108.314-23.302 251.286 10.604 413.674 221.404-61.546 95.187-158.653 188.682-272.125 213.626zM916.819 482.714c-347.59-456.963-669.742-211.156-808.018-2.662-12.655 19.082-10.846 44.304 3.402 62.227 362.786 456.419 677.038 209.142 808.011 0.563 11.674-18.589 9.894-42.656-3.395-60.128zM619.462 512c0-53.709-45.517-100.57-105.834-100.57s-105.834 46.861-105.834 100.57c0 53.709 45.517 100.573 105.834 100.573s105.834-46.864 105.834-100.573zM683.546 512c0 90.893-76.074 164.573-169.917 164.573s-169.917-73.68-169.917-164.573c0-90.89 76.074-164.57 169.917-164.57s169.917 73.68 169.917 164.57z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["unread-on-top"],"defaultCode":59857,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1124,"name":"unread-on-top","prevSize":32,"id":212,"code":59857},"setIdx":0,"setId":6,"iconIdx":212},{"icon":{"paths":["M829.168 153.372c12.515-12.497 32.803-12.497 45.315 0 12.515 12.497 12.515 32.758 0 45.255l-672.887 672c-12.513 12.496-32.801 12.496-45.315 0s-12.513-32.758 0-45.254l672.887-672zM110.155 480.051c101.936-153.699 303.797-327.676 542.114-225.436l-49.578 49.512c-56.528-19.209-108.077-19.504-153.526-9.726-114.906 24.721-215.653 118.392-280.79 213.871 38.633 48 75.969 86.822 111.862 117.885l-45.363 45.302c-39.684-34.736-80.189-77.437-121.317-129.181-14.248-17.923-16.056-43.146-3.402-62.227zM797.981 350.454l-45.328 45.27c35.546 31.427 72.336 70.947 110.186 120.080-61.546 95.187-158.656 188.682-272.125 213.626-46.752 10.278-100.624 9.734-160.592-11.603l-49.331 49.267c244.662 107.334 443.389-69.158 540.778-224.253 11.674-18.589 9.894-42.656-3.395-60.128-40.493-53.235-80.64-96.931-120.192-132.259zM514.982 347.43c13.709 0 27.037 1.571 39.802 4.541l-203.738 203.469c-3.901-13.837-5.981-28.403-5.981-43.44 0-90.89 76.074-164.57 169.917-164.57zM679.091 469.184l-203.264 202.998c12.57 2.87 25.68 4.39 39.155 4.39 93.843 0 169.917-73.68 169.917-164.573 0-14.81-2.019-29.162-5.808-42.816z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["unread-on-top-disabled"],"defaultCode":59856,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1125,"name":"unread-on-top-disabled","prevSize":32,"id":213,"code":59856},"setIdx":0,"setId":6,"iconIdx":213},{"icon":{"paths":["M273.128 356.678c-6.62 27.766-2.384 63.757 25.498 105.581l33.166 49.75h-59.792c-44.011 0-70.484 14.874-86.279 33.619-16.496 19.578-24.573 47.264-23.734 77.491 0.841 30.262 10.601 59.968 25.818 81.312 15.127 21.216 33.404 31.578 52.195 31.578h143.999v64h-144c-45.209 0-80.932-25.642-104.306-58.426-23.283-32.656-36.522-74.95-37.682-116.688-1.16-41.773 9.763-86.083 38.766-120.506 20.726-24.598 49.155-42.32 84.825-50.784-16.1-39.011-19.009-77.050-10.731-111.77 11.253-47.2 42.305-84.492 80.791-107.342 38.4-22.798 85.677-32.139 131.303-21.965 35.584 7.935 68.909 27.48 95.251 59.554 53.75-35.147 127.584-30.892 182.483-2.495 34.438 17.812 64.794 46.382 81.437 85.010 12.294 28.531 16.438 61.011 10.608 96.205 46.112 6.682 81.507 25.155 105.616 53.456 30.346 35.626 38.102 81.35 33.443 123.283-4.659 41.917-21.946 83.485-46.544 115.114-24.061 30.934-59.354 57.354-101.261 57.354h-144v-64h144c14.093 0 32.8-9.581 50.742-32.646 17.398-22.371 30.112-52.806 33.453-82.89 3.341-30.067-2.902-56.339-18.554-74.714-15.222-17.869-44.035-33.75-97.642-33.75h-45.686l15.613-42.938c13.546-37.251 11.091-66.742 1.437-89.149-9.856-22.87-28.502-41.302-52.064-53.488-49.587-25.649-107.475-18.625-134.717 14.064l-30.134 36.16-22.541-41.325c-19.757-36.219-47.232-54.175-74.87-60.339-28.378-6.327-59.098-0.669-84.701 14.53-25.512 15.148-44.461 38.855-51.208 67.152zM630.979 588.778l-96-99.050c-6.029-6.218-14.32-9.728-22.979-9.728s-16.95 3.51-22.979 9.728l-96 99.050c-12.298 12.691-11.981 32.95 0.707 45.251 12.691 12.298 32.95 11.981 45.251-0.707l41.021-42.326v273.005c0 17.674 14.326 32 32 32s32-14.326 32-32v-273.005l41.021 42.326c12.301 12.688 32.56 13.005 45.251 0.707 12.691-12.301 13.005-32.56 0.707-45.251z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["upload"],"defaultCode":59858,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1126,"name":"upload","prevSize":32,"id":214,"code":59858},"setIdx":0,"setId":6,"iconIdx":214},{"icon":{"paths":["M609.354 336c0-53.019-42.979-96-96-96s-96 42.981-96 96c0 53.021 42.979 96 96 96s96-42.979 96-96zM673.354 336c0 88.365-71.635 160-160 160s-160-71.635-160-160c0-88.365 71.635-160 160-160s160 71.635 160 160zM413.805 551.802c-24.621-5.77-50.285-5.366-74.714 1.178-67.086 17.968-113.738 78.762-113.738 148.211v66.81c0 53.021 42.98 96 96 96h384c53.021 0 96-42.979 96-96v-58.531c0-74.301-51.149-138.826-123.488-155.779l-6.458-1.514c-25.674-6.016-52.435-5.594-77.907 1.229l-49.626 13.293c-20.378 5.456-41.789 5.795-62.326 0.979l-67.744-15.875zM355.651 614.8c14.237-3.814 29.197-4.051 43.549-0.688l67.744 15.878c30.806 7.219 62.925 6.714 93.488-1.472l49.629-13.293c15.283-4.096 31.341-4.349 46.742-0.736l6.458 1.51c43.402 10.173 74.093 48.89 74.093 93.469v58.531c0 17.674-14.326 32-32 32h-384c-17.673 0-32-14.326-32-32v-66.81c0-40.483 27.193-75.917 66.298-86.39z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["user"],"defaultCode":59861,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1127,"name":"user","prevSize":32,"id":215,"code":59861},"setIdx":0,"setId":6,"iconIdx":215},{"icon":{"paths":["M553.411 326.282c0 91.578-75.846 165.818-169.411 165.818-93.564 0-169.412-74.24-169.412-165.818 0-91.581 75.848-165.821 169.412-165.821 93.565 0 169.411 74.24 169.411 165.821zM485.648 326.282c0-54.949-45.51-99.493-101.648-99.493s-101.647 44.544-101.647 99.493c0 54.947 45.509 99.491 101.647 99.491s101.648-44.544 101.648-99.491z","M203.427 511.232c28.952-9.11 60.004-9.67 89.279-1.61l51.342 14.131c25.632 7.056 52.819 6.566 78.166-1.408l31.872-10.026c31.206-9.821 64.678-10.422 96.234-1.738 71.962 19.811 121.68 84.051 121.68 157.219v96.24c0 54.947-45.51 99.491-101.648 99.491h-372.705c-56.138 0-101.647-44.544-101.647-99.491v-108.566c0-65.814 43.411-124.106 107.427-144.243zM274.359 573.472c-16.46-4.531-33.918-4.218-50.196 0.906-35.992 11.322-60.399 44.093-60.399 81.098v108.566c0 18.317 15.17 33.165 33.882 33.165h372.705c18.714 0 33.882-14.848 33.882-33.165v-96.24c0-43.453-29.523-81.603-72.259-93.366-18.739-5.158-38.618-4.8-57.152 1.030l-31.872 10.026c-38.022 11.962-78.803 12.698-117.248 2.115l-51.343-14.134z","M797.091 189.321c0-15.913-13.024-28.812-29.091-28.812s-29.091 12.9-29.091 28.812v100.844h-101.818c-16.067 0-29.091 12.9-29.091 28.812s13.024 28.812 29.091 28.812h101.818v100.845c0 15.914 13.024 28.813 29.091 28.813s29.091-12.899 29.091-28.813v-100.845h101.818c16.067 0 29.091-12.899 29.091-28.812s-13.024-28.812-29.091-28.812h-101.818v-100.844z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["user-add"],"defaultCode":59859,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1128,"name":"user-add","prevSize":32,"id":216,"code":59859},"setIdx":0,"setId":6,"iconIdx":216},{"icon":{"paths":["M464 318.747c0-51.548-42.406-94.366-96-94.366-53.592 0-96 42.819-96 94.366s42.408 94.367 96 94.367c53.594 0 96-42.819 96-94.367zM528 318.747c0 87.416-71.635 158.284-160 158.284s-160-70.867-160-158.284c0-87.417 71.635-158.282 160-158.282s160 70.865 160 158.282zM281.778 525.712c-27.649-7.693-56.976-7.158-84.319 1.536-60.46 19.226-101.459 74.864-101.459 137.69v103.629c0 52.451 42.981 94.97 96 94.97h352c3.606 0 7.165-0.195 10.666-0.579v-64.534c-3.334 1.168-6.925 1.802-10.666 1.802h-352c-17.673 0-32-14.173-32-31.658v-103.629c0-35.325 23.051-66.605 57.044-77.414 15.373-4.89 31.862-5.187 47.407-0.864l48.489 13.491c36.311 10.102 74.827 9.402 110.737-2.016l30.099-9.571c17.504-5.568 36.278-5.91 53.978-0.986 18.899 5.261 35.066 16.042 46.912 30.282v-79.712c-9.309-4.749-19.203-8.627-29.584-11.517-29.805-8.291-61.414-7.715-90.89 1.654l-30.099 9.574c-23.942 7.61-49.619 8.080-73.824 1.344l-48.491-13.491zM763.366 489.709c-12.326-12.646-32.586-12.918-45.248-0.608-12.666 12.31-12.938 32.544-0.611 45.19l102.842 105.51h-324.349c-17.674 0-32 14.307-32 31.958 0 17.648 14.326 31.958 32 31.958h324.349l-102.842 105.507c-12.326 12.65-12.054 32.88 0.611 45.194 12.662 12.31 32.922 12.038 45.248-0.611l155.718-159.757c12.093-12.406 12.093-32.176 0-44.582l-155.718-159.76z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["user-forward"],"defaultCode":59860,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1129,"name":"user-forward","prevSize":32,"id":217,"code":59860},"setIdx":0,"setId":6,"iconIdx":217},{"icon":{"paths":["M201.583 672c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M329.584 576c-17.674 0-32.001 14.326-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z","M201.583 480c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M329.584 384c-17.674 0-32.001 14.326-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z","M201.583 288c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z","M329.584 192c-17.674 0-32.001 14.327-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.327 32-32s-14.326-32-32-32h-544z","M201.583 864c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M329.584 768c-17.674 0-32.001 14.326-32.001 32s14.327 32 32.001 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["view-condensed"],"defaultCode":59862,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1130,"name":"view-condensed","prevSize":32,"id":218,"code":59862},"setIdx":0,"setId":6,"iconIdx":218},{"icon":{"paths":["M288 192c0-17.673 14.327-32 32-32h544c17.674 0 32 14.327 32 32s-14.326 32-32 32h-544c-17.673 0-32-14.327-32-32zM288 288c0-17.673 14.327-32 32-32h448c17.674 0 32 14.327 32 32s-14.326 32-32 32h-448c-17.673 0-32-14.327-32-32zM192 304c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z","M288 464c0-17.674 14.327-32 32-32h544c17.674 0 32 14.326 32 32s-14.326 32-32 32h-544c-17.673 0-32-14.326-32-32zM288 560c0-17.674 14.327-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32h-448c-17.673 0-32-14.326-32-32zM192 576c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M288 736c0-17.674 14.327-32 32-32h544c17.674 0 32 14.326 32 32s-14.326 32-32 32h-544c-17.673 0-32-14.326-32-32zM288 832c0-17.674 14.327-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32h-448c-17.673 0-32-14.326-32-32zM192 848c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["view-extended"],"defaultCode":59863,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1131,"name":"view-extended","prevSize":32,"id":219,"code":59863},"setIdx":0,"setId":6,"iconIdx":219},{"icon":{"paths":["M192 320c35.346 0 64-28.654 64-64s-28.654-64-64-64c-35.346 0-64 28.654-64 64s28.654 64 64 64z","M320 224c-17.673 0-32 14.327-32 32s14.327 32 32 32h544c17.674 0 32-14.327 32-32s-14.326-32-32-32h-544z","M192 576c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M320 480c-17.673 0-32 14.326-32 32s14.327 32 32 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z","M192 832c35.346 0 64-28.653 64-64s-28.654-64-64-64c-35.346 0-64 28.653-64 64s28.654 64 64 64z","M320 736c-17.673 0-32 14.326-32 32s14.327 32 32 32h544c17.674 0 32-14.326 32-32s-14.326-32-32-32h-544z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["view-medium"],"defaultCode":59864,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1132,"name":"view-medium","prevSize":32,"id":220,"code":59864},"setIdx":0,"setId":6,"iconIdx":220},{"icon":{"paths":["M640.854 256c26.512 0 48-21.49 48-48s-21.488-48-48-48c-26.509 0-48 21.49-48 48s21.491 48 48 48zM640.854 320c61.856 0 112-50.144 112-112s-50.144-112-112-112c-61.856 0-112 50.144-112 112s50.144 112 112 112zM592.854 416v256h-160v128h32v-96h224v-288h-96zM528.854 768h160c35.347 0 64-28.653 64-64v-288c0-35.347-28.653-64-64-64h-96c-35.344 0-64 28.653-64 64v192h-96c-35.344 0-64 28.653-64 64v128c0 35.347 28.656 64 64 64h32c35.347 0 64-28.653 64-64v-32zM784.854 448c0-17.674 14.326-32 32-32s32 14.326 32 32v384c0 17.674-14.326 32-32 32h-224c-17.674 0-32-14.326-32-32s14.326-32 32-32h192v-352zM368.403 401.52c9.677-9.059 10.176-24.246 1.117-33.923l-48.272-51.558v-47.925c0-13.255-10.746-24-24-24s-24 10.745-24 24v57.406c0 6.093 2.316 11.955 6.48 16.403l54.752 58.48c9.059 9.677 24.246 10.176 33.923 1.117zM170.974 414.278c53.308 74.218 156.687 91.171 230.908 37.862 10.765-7.731 25.76-5.274 33.494 5.491 7.731 10.768 5.274 25.763-5.494 33.494-95.75 68.771-229.121 46.902-297.894-48.848s-46.902-229.123 48.848-297.895c75.545-54.26 174.453-52.073 246.597-1.796 10.874 7.578 13.546 22.538 5.968 33.412s-22.538 13.547-33.411 5.968c-55.971-39.005-132.65-40.618-191.153 1.402-74.219 53.308-91.171 156.688-37.864 230.909z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["waiting-on-me"],"defaultCode":59865,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1133,"name":"waiting-on-me","prevSize":32,"id":221,"code":59865},"setIdx":0,"setId":6,"iconIdx":221},{"icon":{"paths":["M512 352.003c17.674 0 32 14.33 32 32v224c0 17.674-14.326 32-32 32s-32-14.326-32-32v-224c0-17.67 14.326-32 32-32z","M512 672.003c17.674 0 32 14.33 32 32 0 17.674-14.326 32-32 32s-32-14.326-32-32c0-17.67 14.326-32 32-32z","M567.101 158.348c-24.774-41.922-85.427-41.922-110.202 0l-359.92 609.099c-25.21 42.662 5.544 96.557 55.099 96.557h719.845c49.555 0 80.307-53.894 55.098-96.557l-359.92-609.099zM512 190.906l359.923 609.097h-719.845l359.922-609.097z"],"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2}]},"tags":["warning"],"defaultCode":59866,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1134,"name":"warning","prevSize":32,"id":222,"code":59866},"setIdx":0,"setId":6,"iconIdx":222},{"icon":{"paths":["M784.131 240.143c-35.43-35.658-77.581-63.931-124.016-83.181s-96.227-29.094-146.493-28.961c-210.863 0-382.322 171.532-382.414 382.376-0.085 67.104 17.523 133.043 51.047 191.171l-54.256 198.154 202.72-53.174c56.064 30.531 118.883 46.531 182.717 46.538h0.166c210.752 0 382.32-171.552 382.394-382.394 0.16-50.25-9.645-100.029-28.848-146.464-19.2-46.436-47.418-88.604-83.018-124.065zM513.622 828.486h-0.186c-56.922 0.006-112.797-15.293-161.776-44.298l-11.606-6.896-120.302 31.555 32.124-117.347-7.573-12.029c-31.783-50.64-48.608-109.232-48.535-169.021 0-175.235 142.653-317.816 317.981-317.816 84.301 0.049 165.13 33.58 224.707 93.218 59.581 59.638 93.034 140.499 92.998 224.8-0.074 175.254-142.653 317.834-317.834 317.834zM687.958 590.451c-9.552-4.787-56.528-27.907-65.293-31.171s-15.126-4.768-21.491 4.784c-6.362 9.555-24.678 31.171-30.253 37.462-5.574 6.288-11.149 7.187-20.701 2.4-9.555-4.784-40.339-14.87-76.845-47.434-28.403-25.322-47.584-56.621-53.174-66.192-5.594-9.571-0.589-14.669 4.198-19.491 4.291-4.291 9.552-11.168 14.32-16.742s6.381-9.571 9.552-15.933c3.174-6.362 1.597-11.955-0.787-16.739-2.384-4.787-21.491-51.818-29.466-70.96-7.757-18.63-15.622-16.099-21.491-16.394-5.501-0.275-11.955-0.349-18.336-0.349-4.842 0.131-9.606 1.264-13.994 3.325-4.387 2.058-8.298 5.005-11.491 8.65-8.749 9.552-33.428 32.675-33.428 79.706s34.234 92.467 39.002 98.848c4.765 6.381 67.382 102.883 163.187 144.266 17.792 7.68 35.974 14.413 54.477 20.17 22.902 7.334 43.731 6.237 60.179 3.779 18.336-2.733 56.547-23.104 64.506-45.418 7.955-22.317 7.955-41.459 5.501-45.456-2.458-3.997-8.618-6.326-18.173-11.11z"],"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["whatsapp-monochromatic"],"defaultCode":59868,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1135,"name":"whatsapp-monochromatic","prevSize":32,"id":223,"code":59868},"setIdx":0,"setId":6,"iconIdx":223},{"icon":{"paths":["M354.006 399.123l14.029 0.627-0.541-16.726-152.878 1.578c49.916-116.491 165.64-198.133 300.366-198.133 99.645 0 188.893 44.659 248.81 115.065-3.712 0.171-7.491 0.492-11.526 1.068 0 0-63.76 14.898-13.302 118.708 0 0 31.085 84.541-19.306 198.774l-28.403 73.306-99.101-264.723c0 0-5.984-28.154 23.61-28.154l23.76-1.472 0.339-16.035h-228.368v14.458c0 0 39.83-0.288 56.15 27.149l40.762 103.779-73.014 174.403-108.608-272.4c0 0-3.389-31.779 27.222-31.27z","M841.603 513.168c0-33.862-5.235-66.643-14.726-97.357l-145.949 378.755c96.134-56.88 160.675-161.571 160.675-281.398z","M411.478 823.011c32.49 10.912 67.267 16.778 103.488 16.778 37.85 0 74.102-6.406 107.898-18.256l-99.709-258.502-111.677 259.981z","M188.279 513.149c0-32.083 4.712-63.066 13.339-92.336l1 2.051 152.656 375.229c-99.606-55.882-166.994-162.538-166.994-284.944z","M130.705 512.093c0-211.775 172.316-384.093 384.076-384.093 211.725 0 383.923 172.318 383.923 384.093 0 211.776-172.198 384.010-383.923 384.010-211.757 0-384.076-172.234-384.076-384.010zM514.781 879.254c202.384 0 367.11-164.742 367.11-367.178 0-202.486-164.726-367.145-367.11-367.161-202.489 0-367.213 164.673-367.213 367.161 0 202.435 164.724 367.178 367.213 367.178z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["wordpress-monochromatic"],"defaultCode":59755,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1136,"name":"wordpress-monochromatic","prevSize":32,"id":224,"code":59755},"setIdx":0,"setId":6,"iconIdx":224},{"icon":{"paths":["M193.353 405.334h213.332v-213.334h-213.332v213.334zM129.353 170.667c0-23.564 19.102-42.667 42.667-42.667h256c23.565 0 42.666 19.102 42.666 42.667v255.999c0 23.565-19.101 42.669-42.666 42.669h-256c-23.564 0-42.667-19.104-42.667-42.669v-255.999zM620.019 405.334h213.334v-213.334h-213.334v213.334zM556.019 170.667c0-23.564 19.104-42.667 42.666-42.667h256c23.565 0 42.669 19.102 42.669 42.667v255.999c0 23.565-19.104 42.669-42.669 42.669h-256c-23.562 0-42.666-19.104-42.666-42.669v-255.999zM620.019 618.666h213.334v213.334h-213.334v-213.334zM598.685 554.666c-23.562 0-42.666 19.104-42.666 42.669v256c0 23.562 19.104 42.666 42.666 42.666h256c23.565 0 42.669-19.104 42.669-42.666v-256c0-23.565-19.104-42.669-42.669-42.669h-256zM193.353 832h213.332v-213.334h-213.332v213.334zM129.353 597.334c0-23.565 19.102-42.669 42.667-42.669h256c23.565 0 42.666 19.104 42.666 42.669v256c0 23.562-19.101 42.666-42.666 42.666h-256c-23.564 0-42.667-19.104-42.667-42.666v-256z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2}]},"tags":["workspaces"],"defaultCode":59870,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1137,"name":"workspaces","prevSize":32,"id":225,"code":59870},"setIdx":0,"setId":6,"iconIdx":225},{"icon":{"paths":["M384.509 149.333c0-11.782 9.562-21.333 21.36-21.333h85.446c11.798 0 21.363 9.551 21.363 21.333v106.667h-106.81c-11.798 0-21.36-9.551-21.36-21.333v-85.333z","M512.678 256h106.806c11.798 0 21.36 9.551 21.36 21.333v85.332c0 11.782-9.562 21.334-21.36 21.334h-106.806v-128z","M384.509 405.334c0-11.782 9.562-21.334 21.36-21.334h106.81v128h-106.81c-11.798 0-21.36-9.552-21.36-21.334v-85.331z","M512.678 512h106.806c11.798 0 21.36 9.552 21.36 21.334v106.666h-128.166v-128z","M427.232 640c-23.597 0-42.723 19.104-42.723 42.666v170.669c0 23.562 19.126 42.666 42.723 42.666h170.89c23.597 0 42.723-19.104 42.723-42.666v-213.334h-213.613zM491.315 725.334c-11.798 0-21.36 9.549-21.36 21.331v42.669c0 11.782 9.562 21.331 21.36 21.331h42.723c11.798 0 21.36-9.549 21.36-21.331v-42.669c0-11.782-9.562-21.331-21.36-21.331h-42.723z"],"width":1056,"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"1081141221158162168120320620912282312341243190812456992125519219212552552551291162451452241651699010019902101":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}],"10811412211581621681203206209124314057124319081245699212911624514522416519902101":[{"f":1},{"f":1},{"f":1},{"f":1},{"f":1}],"10811412211581621681201349612032062091211112451212123812431405712431908124569921291162451452241651":[{"f":2},{"f":2},{"f":2},{"f":2},{"f":2}]},"tags":["zip"],"defaultCode":59871,"grid":0},"attrs":[{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"},{"fill":"rgb(108, 114, 122)"}],"properties":{"order":1138,"name":"zip","prevSize":32,"id":226,"code":59871},"setIdx":0,"setId":6,"iconIdx":226},{"icon":{"paths":["M373.437 492.374c25.77-8.39 53.667-8.131 79.376 0.906l19.187 6.752c25.293 8.893 52.963 8.275 77.843-1.718l4.877-1.971c26.989-10.842 56.726-12.432 84.592-4.685 2.832 0.787 5.648 1.674 8.438 2.656 22.342 7.856 41.504 21.35 56.25 38.499 17.84 20.742 29.178 46.848 31.533 75.030 0.304 3.645 0.467 7.328 0.467 11.030v117.126c0 9.936-1.51 19.517-4.314 28.531-4.467 14.371-12.275 27.245-22.435 37.843-2.595 2.704-5.296 5.302-8.189 7.69-2.368 1.952-4.822 3.805-7.376 5.53-5.107 3.453-10.57 6.413-16.31 8.845-11.491 4.861-24.115 7.562-37.376 7.562l-260.938-0.125c-3.277-0.166-6.506-0.515-9.686-1.002-7.949-1.213-15.571-3.398-22.752-6.435-5.741-2.432-11.203-5.392-16.31-8.845-2.55-1.725-5.008-3.578-7.376-5.53-2.893-2.387-5.595-4.986-8.188-7.69-10.162-10.598-17.97-23.472-22.437-37.843-2.803-9.014-4.312-18.595-4.313-28.531v-125.968c0-0.675 0.052-1.357 0.062-2.032 0.487-29.827 11.671-57.741 30.531-79.344 12.578-14.41 28.523-26.032 47.032-33.469 2.576-1.034 5.187-1.958 7.811-2.813zM426.374 552.093c-10.461-2.643-21.446-2.406-31.779 0.688-1.728 0.518-3.443 1.104-5.126 1.782-1.757 0.704-3.466 1.488-5.126 2.342-0.115 0.061-0.227 0.128-0.342 0.189-19.514 10.24-31.997 30.573-32 52.938v125.968c0 17.674 14.326 32 32 32h256c17.674 0 32-14.326 32-32v-117.126c-0.003-23.798-12.39-45.472-32-57.718-0.253-0.157-0.525-0.282-0.781-0.435-1.555-0.944-3.142-1.837-4.781-2.656-0.57-0.288-1.139-0.576-1.718-0.845-2.006-0.934-4.070-1.786-6.189-2.531-3.894-1.37-7.878-2.394-11.907-3.030-10.070-1.597-20.403-0.883-30.218 2.061-1.958 0.589-3.901 1.264-5.811 2.032l-4.877 1.936c-9.818 3.946-19.914 6.973-30.157 9.062-12.81 2.618-25.85 3.763-38.874 3.469l-7.814-0.342c-10.406-0.704-20.774-2.333-30.966-4.906-2.547-0.643-5.072-1.366-7.594-2.125-2.522-0.762-5.037-1.562-7.533-2.438l-19.219-6.749c-1.709-0.602-3.443-1.123-5.187-1.565z","M174.188 458.624c19.051-8.506 40.722-9.024 60.156-1.437l7.906 3.094c8.268 3.229 17.489 2.992 25.594-0.624l0.844-0.378c20.012-8.931 42.773-9.469 63.188-1.498 6.358 2.483 12.262 5.722 17.658 9.562-27.331 11.914-50.085 31.030-66.283 54.688-20.961 6.541-43.62 5.914-64.281-2.157l-7.906-3.062c-3.484-1.36-7.366-1.274-10.781 0.25-5.037 2.25-8.281 7.264-8.281 12.781v49.219c0.001 15.981 12.956 28.938 28.938 28.938h35.125c-0.009 0.675-0.062 1.357-0.062 2.032v61.968h-35.062c-51.328 0-92.937-41.61-92.938-92.938v-49.219c0-30.768 18.093-58.672 46.188-71.219z","M878.406 422.813c11.197 14.163 17.594 31.891 17.594 50.563v102.624c0 53.021-42.979 96-96 96h-32v-53.126l-0.125-6.499c-0.058-1.462-0.246-2.922-0.342-4.374h32.467c17.674 0 32-14.326 32-32v-102.624c0-3.12-0.842-6.109-2.342-8.72 13.494-10.003 27.248-21.219 40.374-33.562 2.797-2.634 5.539-5.45 8.374-8.282z","M512.032 192c-0.106 19.205 0.71 40.743 2.938 64.156-0.986-0.045-1.974-0.156-2.97-0.156-35.347 0-64 28.654-64 64s28.653 64 64 64c14.624 0 28.035-4.995 38.813-13.251 12.131 18.838 26.362 35.45 40.406 49.718-21.798 17.213-49.29 27.533-79.219 27.533-70.691 0-128-57.309-128-128 0-70.692 57.338-128 128.032-128z","M256 224c53.019 0 96 42.981 96 96 0 53.021-42.981 96-96 96s-96-42.979-96-96c0-53.019 42.981-96 96-96zM256 288c-17.673 0-32 14.327-32 32s14.327 32 32 32c17.673 0 32-14.326 32-32s-14.327-32-32-32z","M735.997 96c44.746 0 121.2 10.367 153.827 29.086 4.662 18.723 11.184 75.812 0 154.423-11.187 78.625-107.213 145.092-153.824 168.49-46.614-23.402-142.637-89.869-153.824-168.49-11.184-78.609-4.662-135.699 0-154.423 32.627-18.719 109.072-29.084 153.821-29.086z"],"attrs":[{},{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["team-shield"]},"attrs":[{},{},{},{},{},{}],"properties":{"order":14,"id":1,"name":"team-shield","prevSize":32,"code":59877},"setIdx":4,"setId":2,"iconIdx":0},{"icon":{"paths":["M352 128c17.674 0 32 14.327 32 32v160h142.25c7.789 23.664 19.898 45.082 33.718 64h-175.968v256h256v-177.126c23.274 17.472 46 31.267 64 40.563v136.563h160c17.674 0 32 14.326 32 32s-14.326 32-32 32h-160v160c0 17.674-14.326 32-32 32s-32-14.326-32-32v-160h-256v160c0 17.674-14.326 32-32 32s-32-14.326-32-32v-160h-160c-17.673 0-32-14.326-32-32s14.327-32 32-32h160v-256h-160c-17.673 0-32-14.326-32-32s14.327-32 32-32h160v-160c0-17.673 14.326-32 32-32z","M735.997 96c44.746 0 121.2 10.367 153.827 29.086 4.662 18.723 11.184 75.812 0 154.423-11.187 78.625-107.213 145.092-153.824 168.49-46.614-23.402-142.637-89.869-153.824-168.49-11.184-78.609-4.662-135.699 0-154.423 32.627-18.719 109.072-29.084 153.821-29.086z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hash-shield"]},"attrs":[{},{}],"properties":{"order":15,"id":0,"name":"hash-shield","prevSize":32,"code":59878},"setIdx":4,"setId":2,"iconIdx":1}],"height":1024,"metadata":{"name":"custom"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"custom","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16}} \ No newline at end of file diff --git a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap index d1fafb1bbf5..4807ab3fd9e 100644 --- a/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap +++ b/app/containers/DirectoryItem/__snapshots__/DirectoryItem.test.tsx.snap @@ -10,8 +10,9 @@ exports[`Story Snapshots: CustomStyle should match snapshot 1`] = ` > + - + {type !== 'd' ? : null} diff --git a/app/containers/Header/components/HeaderButton/__snapshots__/HeaderButtons.test.tsx.snap b/app/containers/Header/components/HeaderButton/__snapshots__/HeaderButtons.test.tsx.snap index ec296cc2f6e..938b20fc972 100644 --- a/app/containers/Header/components/HeaderButton/__snapshots__/HeaderButtons.test.tsx.snap +++ b/app/containers/Header/components/HeaderButton/__snapshots__/HeaderButtons.test.tsx.snap @@ -204,6 +204,7 @@ exports[`Story Snapshots: Badge should match snapshot 1`] = ` }, ] } + testID="unread-badge-1" > { - const [autoplayGifs] = useUserPreferences(AUTOPLAY_GIFS_PREFERENCES_KEY); + const [autoplayGifs] = useUserPreferences(AUTOPLAY_GIFS_PREFERENCES_KEY, true); const [isPlaying, setIsPlaying] = useState(!!autoplayGifs); const expoImageRef = useRef(null); diff --git a/app/containers/InAppNotification/index.tsx b/app/containers/InAppNotification/index.tsx index 503e284eac9..7f429c40229 100644 --- a/app/containers/InAppNotification/index.tsx +++ b/app/containers/InAppNotification/index.tsx @@ -59,7 +59,7 @@ const InAppNotification = memo(() => { componentProps: { notification }, - duration: notification.customTime || 3000, // default 3s, + duration: notification.customTime || (process.env.RUNNING_E2E_TESTS ? 5000 : 3000), // default 3s, hideOnPress: notification.hideOnPress ?? true, swipeEnabled: notification.swipeEnabled ?? true }); diff --git a/app/containers/List/List.stories.tsx b/app/containers/List/List.stories.tsx index 805689a837d..fe375218e27 100644 --- a/app/containers/List/List.stories.tsx +++ b/app/containers/List/List.stories.tsx @@ -21,6 +21,8 @@ export const TitleAndSubtitle = () => ( + + ); @@ -67,6 +69,49 @@ export const Separator = () => ( ); +export const Radio = () => ( + + + alert('Option 1 selected')} + /> + + alert('Option 2 selected')} + /> + + alert('Option 3 selected')} + /> + + alert('Option 4 selected')} + /> + + +); + export const SectionAndInfo = () => ( diff --git a/app/containers/List/ListItem.tsx b/app/containers/List/ListItem.tsx index 89295e3dc63..5a999e1a7a3 100644 --- a/app/containers/List/ListItem.tsx +++ b/app/containers/List/ListItem.tsx @@ -18,6 +18,8 @@ import { Icon } from '.'; import { BASE_HEIGHT, ICON_SIZE, PADDING_HORIZONTAL } from './constants'; import { CustomIcon } from '../CustomIcon'; import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; +import EventEmitter from '../../lib/methods/helpers/events'; +import { LISTENER } from '../Toast'; const styles = StyleSheet.create({ container: { @@ -62,16 +64,16 @@ const styles = StyleSheet.create({ } }); -interface IListTitle extends Pick {} +interface IListTitle extends Pick {} -const ListTitle = ({ title, color, styleTitle, translateTitle }: IListTitle) => { +const ListTitle = ({ title, color, styleTitle, translateTitle, numberOfLines }: IListTitle) => { 'use memo'; const { colors } = useTheme(); switch (typeof title) { case 'string': return ( - + {translateTitle && title ? I18n.t(title) : title} ); @@ -90,6 +92,7 @@ interface IListItemContent { left?: () => JSX.Element | null; right?: () => JSX.Element | null; disabled?: boolean; + disabledReason?: string; testID?: string; color?: string; translateTitle?: boolean; @@ -99,9 +102,10 @@ interface IListItemContent { heightContainer?: number; rightContainerStyle?: StyleProp; styleTitle?: StyleProp; - additionalAcessibilityLabel?: string | boolean; + additionalAccessibilityLabel?: string | boolean; accessibilityRole?: AccessibilityRole; - additionalAcessibilityLabelCheck?: boolean; + additionalAccessibilityLabelCheck?: boolean; + numberOfLines?: number; } const Content = React.memo( @@ -120,10 +124,11 @@ const Content = React.memo( heightContainer, rightContainerStyle = {}, styleTitle, - additionalAcessibilityLabel, - additionalAcessibilityLabelCheck, + additionalAccessibilityLabel, + additionalAccessibilityLabelCheck, accessibilityRole, - accessibilityLabel + accessibilityLabel, + numberOfLines }: IListItemContent) => { 'use memo'; @@ -141,18 +146,26 @@ const Content = React.memo( if (subtitle) { label = translateSubtitle ? `${label} ${I18n.t(subtitle)}` : `${label} ${subtitle}`; } - if (typeof additionalAcessibilityLabel === 'string') { - label = `${label} ${additionalAcessibilityLabel}`; + if (typeof additionalAccessibilityLabel === 'string') { + label = `${label} ${additionalAccessibilityLabel}`; } - if (typeof additionalAcessibilityLabel === 'boolean') { - if (additionalAcessibilityLabelCheck) { - label = `${label} ${additionalAcessibilityLabel ? I18n.t('Checked') : I18n.t('Unchecked')}`; + if (typeof additionalAccessibilityLabel === 'boolean') { + if (additionalAccessibilityLabelCheck) { + label = `${label} ${additionalAccessibilityLabel ? I18n.t('Checked') : I18n.t('Unchecked')}`; } else { - label = `${label} ${additionalAcessibilityLabel ? I18n.t('Enabled') : I18n.t('Disabled')}`; + label = `${label} ${additionalAccessibilityLabel ? I18n.t('Enabled') : I18n.t('Disabled')}`; } } return label; - }, [title, subtitle, translateTitle, translateSubtitle, additionalAcessibilityLabel, additionalAcessibilityLabelCheck]); + }, [ + accessibilityLabel, + title, + subtitle, + translateTitle, + translateSubtitle, + additionalAccessibilityLabel, + additionalAccessibilityLabelCheck + ]); return ( - {title ? : null} + {title ? ( + + ) : null} {alert ? ( ) : null} @@ -195,6 +216,7 @@ interface IListButtonPress extends IListItemButton { interface IListItemButton { title: string | (() => JSX.Element | null); disabled?: boolean; + disabledReason?: string; backgroundColor?: string; underlayColor?: string; } @@ -204,18 +226,26 @@ const Button = React.memo(({ onPress, backgroundColor, underlayColor, ...props } const { colors } = useTheme(); + const handlePress = () => { + if (props.disabled && props.disabledReason) { + EventEmitter.emit(LISTENER, { message: props.disabledReason }); + } else if (!props.disabled) { + onPress(props.title); + } + }; + return ( onPress(props.title)} + onPress={handlePress} style={{ backgroundColor: backgroundColor || colors.surfaceRoom }} underlayColor={underlayColor} - enabled={!props.disabled}> + enabled={!props.disabled || !!props.disabledReason}> ); }); -interface IListItem extends Omit, Omit { +export interface IListItem extends Omit, Omit { backgroundColor?: string; onPress?: Function; } diff --git a/app/containers/List/ListRadio.tsx b/app/containers/List/ListRadio.tsx new file mode 100644 index 00000000000..58e044bd378 --- /dev/null +++ b/app/containers/List/ListRadio.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +import i18n from '../../i18n'; +import ListItem, { type IListItem } from './ListItem'; +import ListIcon from './ListIcon'; +import { useTheme } from '../../theme'; + +interface IListRadio extends IListItem { + value: any; + isSelected: boolean; +} + +const ListRadio = ({ value, isSelected, ...rest }: IListRadio) => { + const { colors } = useTheme(); + + const iconName = isSelected ? 'radio-checked' : 'radio-unchecked'; + const iconColor = isSelected ? colors.badgeBackgroundLevel2 : colors.strokeMedium; + + return ( + } + additionalAccessibilityLabel={isSelected ? i18n.t('Selected') : i18n.t('Unselected')} + accessibilityRole='radio' + /> + ); +}; + +export default ListRadio; diff --git a/app/containers/List/__snapshots__/List.test.tsx.snap b/app/containers/List/__snapshots__/List.test.tsx.snap index 3253f196a38..6414017d4fd 100644 --- a/app/containers/List/__snapshots__/List.test.tsx.snap +++ b/app/containers/List/__snapshots__/List.test.tsx.snap @@ -1239,6 +1239,782 @@ exports[`Story Snapshots: Pressable should match snapshot 1`] = ` `; +exports[`Story Snapshots: Radio should match snapshot 1`] = ` + + + + + + + + + + + Option 1 + + + + + + +  + + + + + + + + + + + + + + + Option 2 + + + + + + +  + + + + + + + + + + + + + + + Option 3 + + + + + + +  + + + + + + + + + + + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + + +  + + + + + + + + + +`; + exports[`Story Snapshots: SectionAndInfo should match snapshot 1`] = ` + + + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + + + + + `; @@ -2563,7 +3440,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={4} + handlerTag={8} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -2809,7 +3686,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={5} + handlerTag={9} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -3134,7 +4011,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={6} + handlerTag={10} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -3380,7 +4257,7 @@ exports[`Story Snapshots: WithBiggerFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={7} + handlerTag={11} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -3747,7 +4624,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={8} + handlerTag={12} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -3993,7 +4870,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={9} + handlerTag={13} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -4318,7 +5195,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={10} + handlerTag={14} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -4564,7 +5441,7 @@ exports[`Story Snapshots: WithBlackTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={11} + handlerTag={15} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -4956,7 +5833,7 @@ exports[`Story Snapshots: WithCustomColors should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={12} + handlerTag={16} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -5177,7 +6054,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={13} + handlerTag={17} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -5423,7 +6300,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={14} + handlerTag={18} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -5748,7 +6625,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={15} + handlerTag={19} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -5994,7 +6871,7 @@ exports[`Story Snapshots: WithDarkTheme should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={16} + handlerTag={20} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -7993,7 +8870,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={17} + handlerTag={21} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -8239,7 +9116,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={18} + handlerTag={22} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -8564,7 +9441,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={true} - handlerTag={19} + handlerTag={23} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -8810,7 +9687,7 @@ exports[`Story Snapshots: WithSmallFont should match snapshot 1`] = ` collapsable={false} delayLongPress={600} enabled={false} - handlerTag={20} + handlerTag={24} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} diff --git a/app/containers/List/index.ts b/app/containers/List/index.ts index 6456f522701..76002b160db 100644 --- a/app/containers/List/index.ts +++ b/app/containers/List/index.ts @@ -1,5 +1,6 @@ export { default as Container } from './ListContainer'; export { default as Item } from './ListItem'; +export { default as Radio } from './ListRadio'; export { default as Section } from './ListSection'; export { default as Icon } from './ListIcon'; export { default as Separator } from './ListSeparator'; diff --git a/app/containers/MessageActions/index.tsx b/app/containers/MessageActions/index.tsx index 90a516ce0c0..466a70ce510 100644 --- a/app/containers/MessageActions/index.tsx +++ b/app/containers/MessageActions/index.tsx @@ -2,8 +2,8 @@ import React, { forwardRef, useImperativeHandle } from 'react'; import { Alert, Share } from 'react-native'; import Clipboard from '@react-native-clipboard/clipboard'; import { connect } from 'react-redux'; -import moment from 'moment'; +import dayjs from '../../lib/dayjs'; import database from '../../lib/database'; import { getSubscriptionByRoomId } from '../../lib/database/services/Subscription'; import I18n from '../../i18n'; @@ -154,11 +154,11 @@ const MessageActions = React.memo( if (blockEditInMinutes) { let msgTs; if (message.ts != null) { - msgTs = moment(message.ts); + msgTs = dayjs(message.ts); } let currentTsDiff = 0; if (msgTs != null) { - currentTsDiff = moment().diff(msgTs, 'minutes'); + currentTsDiff = dayjs().diff(msgTs, 'minutes'); } return currentTsDiff < blockEditInMinutes; } @@ -185,11 +185,11 @@ const MessageActions = React.memo( if (blockDeleteInMinutes != null && blockDeleteInMinutes !== 0) { let msgTs; if (message.ts != null) { - msgTs = moment(message.ts); + msgTs = dayjs(message.ts); } let currentTsDiff = 0; if (msgTs != null) { - currentTsDiff = moment().diff(msgTs, 'minutes'); + currentTsDiff = dayjs().diff(msgTs, 'minutes'); } return currentTsDiff < blockDeleteInMinutes; } @@ -442,7 +442,8 @@ const MessageActions = React.memo( title: I18n.t('Reply_in_direct_message'), icon: 'arrow-back', onPress: () => handleReplyInDM(message), - enabled: permissions.hasCreateDirectMessagePermission + enabled: permissions.hasCreateDirectMessagePermission && !room.abacAttributes, + disabledReason: room.abacAttributes && I18n.t('ABAC_disabled_action_reason') }); } @@ -454,19 +455,24 @@ const MessageActions = React.memo( enabled: permissions.hasCreateDiscussionOtherUserPermission }); + // Forward if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '6.2.0') && !videoConfBlock) { options.push({ title: I18n.t('Forward'), icon: 'arrow-forward', - onPress: () => handleShareMessage(message) + onPress: () => handleShareMessage(message), + enabled: !room.abacAttributes, + disabledReason: room.abacAttributes && I18n.t('ABAC_disabled_action_reason') }); } - // Permalink + // Get link options.push({ title: I18n.t('Get_link'), icon: 'link', - onPress: () => handlePermalink(message) + onPress: () => handlePermalink(message), + enabled: !room.abacAttributes, + disabledReason: room.abacAttributes && I18n.t('ABAC_disabled_action_reason') }); // Copy diff --git a/app/containers/MessageComposer/MessageComposer.test.tsx b/app/containers/MessageComposer/MessageComposer.test.tsx index 644decabae8..cd63fddf52d 100644 --- a/app/containers/MessageComposer/MessageComposer.test.tsx +++ b/app/containers/MessageComposer/MessageComposer.test.tsx @@ -439,6 +439,70 @@ describe('MessageComposer', () => { expect(onSendMessage).toHaveBeenCalledWith('@john', undefined); }); + test('does not show @all or @here in autocomplete when user does not have permissions', async () => { + mockedStore.dispatch(setPermissions({ 'mention-all': [], 'mention-here': [] })); + const onSendMessage = jest.fn(); + render(); + + await fireEvent(screen.getByTestId('message-composer-input'), 'focus'); + await fireEvent.changeText(screen.getByTestId('message-composer-input'), '@'); + await fireEvent(screen.getByTestId('message-composer-input'), 'selectionChange', { + nativeEvent: { selection: { start: 1, end: 1 } } + }); + jest.advanceTimersByTime(500); + + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-all')).not.toBeOnTheScreen()); + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-here')).not.toBeOnTheScreen()); + }); + + test('shows only @all when user has mention-all permission', async () => { + mockedStore.dispatch(setPermissions({ 'mention-all': ['user'], 'mention-here': [] })); + const onSendMessage = jest.fn(); + render(); + + await fireEvent(screen.getByTestId('message-composer-input'), 'focus'); + await fireEvent.changeText(screen.getByTestId('message-composer-input'), '@'); + await fireEvent(screen.getByTestId('message-composer-input'), 'selectionChange', { + nativeEvent: { selection: { start: 1, end: 1 } } + }); + jest.advanceTimersByTime(500); + + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-all')).toBeOnTheScreen()); + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-here')).not.toBeOnTheScreen()); + }); + + test('shows only @here when user has mention-here permission', async () => { + mockedStore.dispatch(setPermissions({ 'mention-here': ['user'], 'mention-all': [] })); + const onSendMessage = jest.fn(); + render(); + + await fireEvent(screen.getByTestId('message-composer-input'), 'focus'); + await fireEvent.changeText(screen.getByTestId('message-composer-input'), '@'); + await fireEvent(screen.getByTestId('message-composer-input'), 'selectionChange', { + nativeEvent: { selection: { start: 1, end: 1 } } + }); + jest.advanceTimersByTime(500); + + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-here')).toBeOnTheScreen()); + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-all')).not.toBeOnTheScreen()); + }); + + test('shows both @all and @here when user has both permissions', async () => { + mockedStore.dispatch(setPermissions({ 'mention-all': ['user'], 'mention-here': ['user'] })); + const onSendMessage = jest.fn(); + render(); + + await fireEvent(screen.getByTestId('message-composer-input'), 'focus'); + await fireEvent.changeText(screen.getByTestId('message-composer-input'), '@'); + await fireEvent(screen.getByTestId('message-composer-input'), 'selectionChange', { + nativeEvent: { selection: { start: 1, end: 1 } } + }); + jest.advanceTimersByTime(500); + + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-all')).toBeOnTheScreen()); + await waitFor(() => expect(screen.queryByTestId('autocomplete-item-here')).toBeOnTheScreen()); + }); + test('select # room inserts channel and sends, autocomplete hides', async () => { const onSendMessage = jest.fn(); (search as unknown as jest.Mock).mockImplementationOnce(() => [{ rid: 'r1', name: 'general', t: 'c' }]); diff --git a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap index 8dd0f6b4152..ca392c9b2f3 100644 --- a/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap +++ b/app/containers/MessageComposer/__snapshots__/MessageComposer.test.tsx.snap @@ -82,7 +82,7 @@ exports[`MessageComposer Audio tap record 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={259} + handlerTag={289} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -177,7 +177,7 @@ exports[`MessageComposer Audio tap record 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={260} + handlerTag={290} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -299,7 +299,7 @@ exports[`MessageComposer Quote Add quote \`abc\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={246} + handlerTag={276} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -415,7 +415,7 @@ exports[`MessageComposer Quote Add quote \`abc\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={247} + handlerTag={277} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -587,7 +587,7 @@ exports[`MessageComposer Quote Add quote \`abc\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={248} + handlerTag={278} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -744,7 +744,7 @@ exports[`MessageComposer Quote Add quote \`def\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={249} + handlerTag={279} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -860,7 +860,7 @@ exports[`MessageComposer Quote Add quote \`def\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={250} + handlerTag={280} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1033,7 +1033,7 @@ exports[`MessageComposer Quote Add quote \`def\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={251} + handlerTag={281} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1214,7 +1214,7 @@ exports[`MessageComposer Quote Add quote \`def\` 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={252} + handlerTag={282} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1371,7 +1371,7 @@ exports[`MessageComposer Quote Remove a quote 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={253} + handlerTag={283} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1487,7 +1487,7 @@ exports[`MessageComposer Quote Remove a quote 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={254} + handlerTag={284} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1660,7 +1660,7 @@ exports[`MessageComposer Quote Remove a quote 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={255} + handlerTag={285} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1841,7 +1841,7 @@ exports[`MessageComposer Quote Remove a quote 1`] = ` borderless={true} collapsable={false} delayLongPress={600} - handlerTag={256} + handlerTag={286} handlerType="NativeViewGestureHandler" hitSlop={ { diff --git a/app/containers/MessageComposer/components/Quotes/Quote.tsx b/app/containers/MessageComposer/components/Quotes/Quote.tsx index 80782dee217..c5436f19938 100644 --- a/app/containers/MessageComposer/components/Quotes/Quote.tsx +++ b/app/containers/MessageComposer/components/Quotes/Quote.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { View, Text } from 'react-native'; -import moment from 'moment'; +import dayjs from '../../../../lib/dayjs'; import { useTheme } from '../../../../theme'; import sharedStyles from '../../../../views/Styles'; import { useRoomContext } from '../../../../views/RoomView/context'; @@ -25,7 +25,7 @@ export const Quote = ({ messageId }: { messageId: string }) => { if (message) { username = useRealName ? message.u?.name || message.u?.username || '' : message.u?.username || ''; msg = message.msg || ''; - time = message.ts ? moment(message.ts).format('LT') : ''; + time = message.ts ? dayjs(message.ts).format('LT') : ''; } if (!message) { diff --git a/app/containers/MessageComposer/hooks/useAutocomplete.ts b/app/containers/MessageComposer/hooks/useAutocomplete.ts index 94ab23f63cc..906fe8d631e 100644 --- a/app/containers/MessageComposer/hooks/useAutocomplete.ts +++ b/app/containers/MessageComposer/hooks/useAutocomplete.ts @@ -16,6 +16,7 @@ import { getCommandPreview, getListCannedResponse } from '../../../lib/services/ import log from '../../../lib/methods/helpers/log'; import I18n from '../../../i18n'; import { NO_CANNED_RESPONSES } from '../constants'; +import { usePermissions } from '../../../lib/hooks/usePermissions'; const MENTIONS_COUNT_TO_DISPLAY = 4; @@ -52,6 +53,8 @@ export const useAutocomplete = ({ updateAutocompleteVisible?: (updatedAutocompleteVisible: boolean) => void; }): TAutocompleteItem[] => { const [items, setItems] = useState([]); + const [mentionAll, mentionHere] = usePermissions(['mention-all', 'mention-here']); + useEffect(() => { const getAutocomplete = async () => { try { @@ -87,7 +90,7 @@ export const useAutocomplete = ({ type })) as IAutocompleteUserRoom[]; if (type === '@') { - if ('all'.includes(text.toLocaleLowerCase())) { + if (mentionAll && 'all'.includes(text.toLocaleLowerCase())) { parsedRes.push({ id: 'all', title: 'all', @@ -96,7 +99,7 @@ export const useAutocomplete = ({ t: 'd' }); } - if ('here'.includes(text.toLocaleLowerCase())) { + if (mentionHere && 'here'.includes(text.toLocaleLowerCase())) { parsedRes.push({ id: 'here', title: 'here', diff --git a/app/containers/MessageSeparator.tsx b/app/containers/MessageSeparator.tsx index ecc768f0357..6ba013755ae 100644 --- a/app/containers/MessageSeparator.tsx +++ b/app/containers/MessageSeparator.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { StyleSheet, Text, View } from 'react-native'; -import moment from 'moment'; +import dayjs from '../lib/dayjs'; import I18n from '../i18n'; import sharedStyles from '../views/Styles'; import { themes } from '../lib/constants/colors'; @@ -36,7 +36,7 @@ const MessageSeparator = ({ ts, unread }: { ts?: Date | string | null; unread?: return null; } - const date = ts ? moment(ts).format('LL') : null; + const date = ts ? dayjs(ts).format('LL') : null; const unreadLine = { backgroundColor: themes[theme].buttonBackgroundDangerDefault }; const unreadText = { color: themes[theme].fontDanger }; if (ts && unread) { diff --git a/app/containers/Passcode/utils.ts b/app/containers/Passcode/utils.ts index bec7bcf7519..8a07b6dbbb4 100644 --- a/app/containers/Passcode/utils.ts +++ b/app/containers/Passcode/utils.ts @@ -1,12 +1,12 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; -import moment from 'moment'; +import dayjs from '../../lib/dayjs'; import { LOCKED_OUT_TIMER_KEY, TIME_TO_LOCK } from '../../lib/constants/localAuthentication'; export const getLockedUntil = async () => { const t = await AsyncStorage.getItem(LOCKED_OUT_TIMER_KEY); if (t) { - return moment(t).add(TIME_TO_LOCK).toDate(); + return dayjs(t).add(TIME_TO_LOCK, 'millisecond').toDate(); } return null; }; diff --git a/app/containers/RoomHeader/RoomHeader.stories.tsx b/app/containers/RoomHeader/RoomHeader.stories.tsx index 7ea6952f625..00c7252ec46 100644 --- a/app/containers/RoomHeader/RoomHeader.stories.tsx +++ b/app/containers/RoomHeader/RoomHeader.stories.tsx @@ -55,6 +55,21 @@ export const Icons = () => ( } /> } /> } /> + ( + + )} + /> + ( + + )} + /> ); diff --git a/app/containers/RoomHeader/RoomHeader.tsx b/app/containers/RoomHeader/RoomHeader.tsx index ec65eb792ea..bd2a95d89d5 100644 --- a/app/containers/RoomHeader/RoomHeader.tsx +++ b/app/containers/RoomHeader/RoomHeader.tsx @@ -7,7 +7,7 @@ import I18n from '../../i18n'; import sharedStyles from '../../views/Styles'; import { MarkdownPreview } from '../markdown'; import RoomTypeIcon from '../RoomTypeIcon'; -import { type TUserStatus, type IOmnichannelSource } from '../../definitions'; +import { type TUserStatus, type IOmnichannelSource, type ISubscription } from '../../definitions'; import { useTheme } from '../../theme'; import { useAppSelector } from '../../lib/hooks/useAppSelector'; import useStatusAccessibilityLabel from '../../lib/hooks/useStatusAccessibilityLabel'; @@ -80,6 +80,7 @@ interface IRoomHeader { sourceType?: IOmnichannelSource; disabled?: boolean; rightButtonsWidth?: number; + abacAttributes?: ISubscription['abacAttributes']; } const SubTitle = React.memo(({ usersTyping, subtitle, renderFunc, scale }: TRoomHeaderSubTitle) => { @@ -148,7 +149,8 @@ const Header = React.memo( testID, usersTyping = [], sourceType, - disabled + disabled, + abacAttributes }: IRoomHeader) => { const statusAccessibilityLabel = useStatusAccessibilityLabel({ isGroupChat, @@ -182,6 +184,7 @@ const Header = React.memo( isGroupChat={isGroupChat} status={status} teamMain={teamMain} + abacAttributes={abacAttributes} /> {parentTitle} @@ -208,6 +211,7 @@ const Header = React.memo( status={status} teamMain={teamMain} sourceType={sourceType} + abacAttributes={abacAttributes} /> )} diff --git a/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap b/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap index f75b0a2470e..089fa4625c8 100644 --- a/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap +++ b/app/containers/RoomHeader/__snapshots__/RoomHeader.test.tsx.snap @@ -1575,6 +1575,266 @@ exports[`Story Snapshots: Icons should match snapshot 1`] = ` , + + + + + + +  + + + classified + + + + + + , + + + + + + +  + + + classified + + + + + + , ] `; @@ -1611,7 +1871,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={13} + handlerTag={15} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1774,7 +2034,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={14} + handlerTag={16} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -1937,7 +2197,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={15} + handlerTag={17} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -2105,7 +2365,7 @@ exports[`Story Snapshots: Thread should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={16} + handlerTag={18} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -2280,7 +2540,7 @@ preview delayLongPress={600} enabled={true} exclusive={true} - handlerTag={17} + handlerTag={19} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -2460,7 +2720,7 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={18} + handlerTag={20} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -2590,7 +2850,7 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={19} + handlerTag={21} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -2720,7 +2980,7 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={20} + handlerTag={22} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -2883,7 +3143,7 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={21} + handlerTag={23} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -3046,7 +3306,7 @@ exports[`Story Snapshots: TitleSubtitle should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={22} + handlerTag={24} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -3215,7 +3475,7 @@ exports[`Story Snapshots: Typing should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={23} + handlerTag={25} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -3378,7 +3638,7 @@ exports[`Story Snapshots: Typing should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={24} + handlerTag={26} handlerType="NativeViewGestureHandler" hitSlop={ { @@ -3541,7 +3801,7 @@ exports[`Story Snapshots: Typing should match snapshot 1`] = ` delayLongPress={600} enabled={true} exclusive={true} - handlerTag={25} + handlerTag={27} handlerType="NativeViewGestureHandler" hitSlop={ { diff --git a/app/containers/RoomHeader/index.tsx b/app/containers/RoomHeader/index.tsx index 838c5eb62cc..50a3df02f9d 100644 --- a/app/containers/RoomHeader/index.tsx +++ b/app/containers/RoomHeader/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { shallowEqual, useSelector } from 'react-redux'; -import { type IApplicationState, type TUserStatus, type IOmnichannelSource, type IVisitor } from '../../definitions'; +import type { IApplicationState, TUserStatus, IOmnichannelSource, IVisitor, ISubscription } from '../../definitions'; import I18n from '../../i18n'; import RoomHeader from './RoomHeader'; import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; @@ -21,6 +21,7 @@ interface IRoomHeaderContainerProps { sourceType?: IOmnichannelSource; visitor?: IVisitor; disabled?: boolean; + abacAttributes?: ISubscription['abacAttributes']; } const RoomHeaderContainer = React.memo( @@ -38,7 +39,8 @@ const RoomHeaderContainer = React.memo( type, sourceType, visitor, - disabled + disabled, + abacAttributes }: IRoomHeaderContainerProps) => { let subtitle: string | undefined; let statusVisitor: TUserStatus | undefined; @@ -89,6 +91,7 @@ const RoomHeaderContainer = React.memo( onPress={onPress} sourceType={sourceType} disabled={disabled} + abacAttributes={abacAttributes} /> ); } diff --git a/app/containers/RoomItem/IconOrAvatar.tsx b/app/containers/RoomItem/IconOrAvatar.tsx index 5a5c6de9ad5..59d054864b4 100644 --- a/app/containers/RoomItem/IconOrAvatar.tsx +++ b/app/containers/RoomItem/IconOrAvatar.tsx @@ -20,7 +20,8 @@ const IconOrAvatar = ({ teamMain, showLastMessage, displayMode, - sourceType + sourceType, + abacAttributes }: IIconOrAvatar): React.ReactElement | null => { const { rowHeight } = useResponsiveLayout(); @@ -43,6 +44,7 @@ const IconOrAvatar = ({ size={24} style={{ marginRight: 12 }} sourceType={sourceType} + abacAttributes={abacAttributes} /> ); diff --git a/app/containers/RoomItem/RoomItem.stories.tsx b/app/containers/RoomItem/RoomItem.stories.tsx index 962de2ab91d..28c8261f4a1 100644 --- a/app/containers/RoomItem/RoomItem.stories.tsx +++ b/app/containers/RoomItem/RoomItem.stories.tsx @@ -71,6 +71,8 @@ export const Type = () => ( + + ); @@ -189,3 +191,10 @@ export const OmnichannelIcon = () => ( ); + +export const InvitedRoom = () => ( + <> + + + +); diff --git a/app/containers/RoomItem/RoomItem.tsx b/app/containers/RoomItem/RoomItem.tsx index 3b6454fbbc6..5939b0d583e 100644 --- a/app/containers/RoomItem/RoomItem.tsx +++ b/app/containers/RoomItem/RoomItem.tsx @@ -16,6 +16,8 @@ import { type IRoomItemProps } from './interfaces'; import { formatLastMessage } from '../../lib/methods/formatLastMessage'; import useStatusAccessibilityLabel from '../../lib/hooks/useStatusAccessibilityLabel'; import { useResponsiveLayout } from '../../lib/hooks/useResponsiveLayout/useResponsiveLayout'; +import { CustomIcon } from '../CustomIcon'; +import { useTheme } from '../../theme'; const RoomItem = ({ rid, @@ -53,10 +55,13 @@ const RoomItem = ({ displayMode, sourceType, hideMentionStatus, - accessibilityDate + accessibilityDate, + abacAttributes, + isInvited }: IRoomItemProps) => { 'use memo'; + const { colors } = useTheme(); const { isLargeFontScale } = useResponsiveLayout(); const memoizedMessage = useMemo( () => formatLastMessage({ lastMessage, username, useRealName, showLastMessage, alert, type }), @@ -112,6 +117,7 @@ const RoomItem = ({ isGroupChat={isGroupChat} teamMain={teamMain} sourceType={sourceType} + abacAttributes={abacAttributes} /> ) : null} @@ -137,6 +143,15 @@ const RoomItem = ({ hideMentionStatus={hideMentionStatus} hideUnreadStatus={hideUnreadStatus} /> + {isInvited ? ( + <CustomIcon + size={24} + name='mail' + role='status' + accessibilityLabel={I18n.t('Invited')} + color={colors.badgeBackgroundLevel2} + /> + ) : null} </View> {isLargeFontScale ? <UpdatedAt date={date} hideUnreadStatus={hideUnreadStatus} alert={alert} /> : null} </> @@ -153,9 +168,19 @@ const RoomItem = ({ size={22} style={{ marginRight: 8 }} sourceType={sourceType} + abacAttributes={abacAttributes} /> <Title name={name} hideUnreadStatus={hideUnreadStatus} alert={alert} /> {autoJoin ? <Tag name={I18n.t('Auto-join')} /> : null} + {isInvited ? ( + <CustomIcon + size={24} + name='mail' + role='status' + accessibilityLabel={I18n.t('Invited')} + color={colors.badgeBackgroundLevel2} + /> + ) : null} <View style={styles.wrapUpdatedAndBadge}> {isLargeFontScale ? null : <UpdatedAt date={date} hideUnreadStatus={hideUnreadStatus} alert={alert} />} diff --git a/app/containers/RoomItem/TypeIcon.tsx b/app/containers/RoomItem/TypeIcon.tsx index ad14a7037f0..b2556a8770c 100644 --- a/app/containers/RoomItem/TypeIcon.tsx +++ b/app/containers/RoomItem/TypeIcon.tsx @@ -3,17 +3,20 @@ import React from 'react'; import RoomTypeIcon from '../RoomTypeIcon'; import { type ITypeIconProps } from './interfaces'; -const TypeIcon = React.memo(({ userId, type, prid, status, isGroupChat, teamMain, size, style, sourceType }: ITypeIconProps) => ( - <RoomTypeIcon - userId={userId} - type={prid ? 'discussion' : type} - isGroupChat={isGroupChat} - status={status} - teamMain={teamMain} - size={size} - style={style} - sourceType={sourceType} - /> -)); +const TypeIcon = React.memo( + ({ userId, type, prid, status, isGroupChat, teamMain, size, style, sourceType, abacAttributes }: ITypeIconProps) => ( + <RoomTypeIcon + userId={userId} + type={prid ? 'discussion' : type} + isGroupChat={isGroupChat} + status={status} + teamMain={teamMain} + size={size} + style={style} + sourceType={sourceType} + abacAttributes={abacAttributes} + /> + ) +); export default TypeIcon; diff --git a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap index a57f8ad2e8e..971e7b8dc59 100644 --- a/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap +++ b/app/containers/RoomItem/__snapshots__/RoomItem.test.tsx.snap @@ -1288,6 +1288,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -1966,6 +1967,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-+999" > <Text numberOfLines={1} @@ -2644,6 +2646,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -3322,6 +3325,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-1" > <Text numberOfLines={1} @@ -4000,6 +4004,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -4678,6 +4683,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -5356,6 +5362,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -6034,6 +6041,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -6712,6 +6720,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-1" > <Text numberOfLines={1} @@ -7390,6 +7399,7 @@ exports[`Story Snapshots: Alerts should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -8699,6 +8709,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -9377,6 +9388,7 @@ exports[`Story Snapshots: CondensedRoomItem should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-+999" > <Text numberOfLines={1} @@ -10663,6 +10675,7 @@ exports[`Story Snapshots: CondensedRoomItemWithoutAvatar should match snapshot 1 undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -12507,6 +12520,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -13175,6 +13189,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -13835,7 +13850,7 @@ exports[`Story Snapshots: ExpandedRoomItemWithoutAvatar should match snapshot 1` ] `; -exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` +exports[`Story Snapshots: InvitedRoom should match snapshot 1`] = ` [ <View collapsable={false} @@ -14266,7 +14281,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. No message" + accessibilityLabel="rocket.cat. private channel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -14355,12 +14370,17 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` > <View style={ - { - "alignItems": "center", - "flexDirection": "row", - "justifyContent": "center", - "width": "100%", - } + [ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, + }, + ] } > <Text @@ -14370,17 +14390,19 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ { "color": "#1F2329", - "fontSize": 16, + "fontSize": 22, }, [ { - "lineHeight": 16, + "lineHeight": 22, }, [ { "marginRight": 4, }, - undefined, + { + "marginRight": 8, + }, ], ], { @@ -14417,73 +14439,63 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` rocket.cat </Text> <Text - ellipsizeMode="tail" - numberOfLines={1} + accessibilityLabel="Invited" + allowFontScaling={false} + role="status" + selectable={false} style={ [ { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "400", - "marginLeft": 4, - "textAlign": "left", + "color": "#1D74F5", + "fontSize": 24, }, + [ + { + "lineHeight": 24, + }, + undefined, + ], { - "color": "#2F343D", + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", }, - undefined, + {}, ] } > - 10:00 +  </Text> - </View> - <View - style={ - { - "alignItems": "flex-start", - "flex": 1, - "flexDirection": "row", - } - } - testID="room-item-last-message-container" - > - <Text - accessibilityLabel="No message" - numberOfLines={2} + <View style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "400", - "lineHeight": 22, - "textAlign": "left", - }, - { - "color": "#2F343D", - "lineHeight": undefined, - }, - { - "backgroundColor": "transparent", - "flex": 1, - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "400", - "textAlign": "left", - }, - { - "color": "#6C727A", - }, - {}, - ] + { + "alignItems": "flex-end", + } } - testID="markdown-preview-No message" > - No message - </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> </View> </View> </View> @@ -14527,7 +14539,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 1500, }, { - "height": 75, + "height": 60, }, { "transform": [ @@ -14549,7 +14561,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "top": 0, }, { - "height": 75, + "height": 60, }, ] } @@ -14608,11 +14620,11 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ { "color": "#FFFFFF", - "fontSize": 28, + "fontSize": 24, }, [ { - "lineHeight": 28, + "lineHeight": 24, }, undefined, ], @@ -14642,7 +14654,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "right": 0, }, { - "height": 75, + "height": 60, }, ] } @@ -14661,7 +14673,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 750, }, { - "height": 75, + "height": 60, }, { "transform": [ @@ -14728,11 +14740,11 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ { "color": "#FFFFFF", - "fontSize": 28, + "fontSize": 24, }, [ { - "lineHeight": 28, + "lineHeight": 24, }, undefined, ], @@ -14763,7 +14775,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "width": 1500, }, { - "height": 75, + "height": 60, }, { "transform": [ @@ -14830,11 +14842,11 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ { "color": "#FFFFFF", - "fontSize": 28, + "fontSize": 24, }, [ { - "lineHeight": 28, + "lineHeight": 24, }, undefined, ], @@ -14920,7 +14932,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. 2" + accessibilityLabel="rocket.cat. private channel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -14931,7 +14943,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "paddingLeft": 14, }, { - "height": 75, + "height": 60, }, ] } @@ -14943,8 +14955,8 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ { "borderRadius": 4, - "height": 48, - "width": 48, + "height": 36, + "width": 36, }, { "marginRight": 10, @@ -14963,7 +14975,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "top": "50%", } } - height={48} + height={36} nativeViewRef={"[React.ref]"} onError={[Function]} onLoad={[Function]} @@ -14977,19 +14989,19 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=72", }, ] } style={ { "borderRadius": 4, - "height": 48, - "width": 48, + "height": 36, + "width": 36, } } transition={null} - width={48} + width={36} /> </View> <View @@ -15009,12 +15021,17 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` > <View style={ - { - "alignItems": "center", - "flexDirection": "row", - "justifyContent": "center", - "width": "100%", - } + [ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, + }, + ] } > <Text @@ -15024,17 +15041,19 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` [ { "color": "#1F2329", - "fontSize": 16, + "fontSize": 22, }, [ { - "lineHeight": 16, + "lineHeight": 22, }, [ { "marginRight": 4, }, - undefined, + { + "marginRight": 8, + }, ], ], { @@ -15071,73 +15090,63 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` rocket.cat </Text> <Text - ellipsizeMode="tail" - numberOfLines={1} + accessibilityLabel="Invited" + allowFontScaling={false} + role="status" + selectable={false} style={ [ { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "400", - "marginLeft": 4, - "textAlign": "left", + "color": "#1D74F5", + "fontSize": 24, }, + [ + { + "lineHeight": 24, + }, + undefined, + ], { - "color": "#2F343D", + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", }, - undefined, + {}, ] } > - 10:00 +  </Text> - </View> - <View - style={ - { - "alignItems": "flex-start", - "flex": 1, - "flexDirection": "row", - } - } - testID="room-item-last-message-container" - > - <Text - accessibilityLabel="2" - numberOfLines={2} + <View style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "400", - "lineHeight": 22, - "textAlign": "left", - }, - { - "color": "#2F343D", - "lineHeight": undefined, - }, - { - "backgroundColor": "transparent", - "flex": 1, - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "400", - "textAlign": "left", - }, - { - "color": "#6C727A", - }, - {}, - ] + { + "alignItems": "flex-end", + } } - testID="markdown-preview-2" > - 2 - </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> </View> </View> </View> @@ -15145,6 +15154,11 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` </RNGestureHandlerButton> </View> </View>, +] +`; + +exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` +[ <View collapsable={false} > @@ -15214,7 +15228,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={135} + handlerTag={139} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -15333,7 +15347,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={136} + handlerTag={140} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -15435,7 +15449,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={137} + handlerTag={141} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -15521,7 +15535,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={138} + handlerTag={142} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -15574,7 +15588,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. You: 1" + accessibilityLabel="rocket.cat. private channel. undefined. No message" accessibilityRole="button" accessible={true} style={ @@ -15758,7 +15772,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` testID="room-item-last-message-container" > <Text - accessibilityLabel="You: 1" + accessibilityLabel="No message" numberOfLines={2} style={ [ @@ -15788,9 +15802,9 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` {}, ] } - testID="markdown-preview-You: 1" + testID="markdown-preview-No message" > - You: 1 + No message </Text> </View> </View> @@ -15868,7 +15882,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={139} + handlerTag={143} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -15987,7 +16001,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={140} + handlerTag={144} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16089,7 +16103,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={141} + handlerTag={145} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16175,7 +16189,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={142} + handlerTag={146} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16228,7 +16242,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + accessibilityLabel="rocket.cat. private channel. undefined. 2" accessibilityRole="button" accessible={true} style={ @@ -16412,7 +16426,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` testID="room-item-last-message-container" > <Text - accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + accessibilityLabel="2" numberOfLines={2} style={ [ @@ -16442,9 +16456,9 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` {}, ] } - testID="markdown-preview-Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + testID="markdown-preview-2" > - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + 2 </Text> </View> </View> @@ -16522,7 +16536,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={143} + handlerTag={147} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16641,7 +16655,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={144} + handlerTag={148} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16743,7 +16757,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={145} + handlerTag={149} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16829,7 +16843,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={146} + handlerTag={150} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -16882,7 +16896,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + accessibilityLabel="rocket.cat. private channel. undefined. You: 1" accessibilityRole="button" accessible={true} style={ @@ -17023,12 +17037,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "fontWeight": "500", "textAlign": "left", }, - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontWeight": "600", - "textAlign": "left", - }, + undefined, { "color": "#1F2329", }, @@ -17053,17 +17062,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` { "color": "#2F343D", }, - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontWeight": "600", - "textAlign": "left", - }, - { - "color": "#1D74F5", - }, - ], + undefined, ] } > @@ -17081,7 +17080,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` testID="room-item-last-message-container" > <Text - accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + accessibilityLabel="You: 1" numberOfLines={2} style={ [ @@ -17106,55 +17105,15 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "textAlign": "left", }, { - "color": "#2F343D", + "color": "#6C727A", }, {}, ] } - testID="markdown-preview-Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + testID="markdown-preview-You: 1" > - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + You: 1 </Text> - <View - style={ - [ - { - "alignItems": "center", - "justifyContent": "center", - "marginLeft": 10, - "paddingHorizontal": 5, - "paddingVertical": 3, - }, - { - "backgroundColor": "#9EA2A8", - "borderRadius": 10.5, - "minWidth": 21, - }, - undefined, - ] - } - > - <Text - numberOfLines={1} - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "600", - "textAlign": "left", - }, - undefined, - { - "color": "#FFFFFF", - }, - ] - } - > - 1 - </Text> - </View> </View> </View> </View> @@ -17231,7 +17190,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={147} + handlerTag={151} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -17350,7 +17309,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={148} + handlerTag={152} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -17452,7 +17411,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={149} + handlerTag={153} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -17538,7 +17497,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={150} + handlerTag={154} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -17732,12 +17691,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "fontWeight": "500", "textAlign": "left", }, - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontWeight": "600", - "textAlign": "left", - }, + undefined, { "color": "#1F2329", }, @@ -17762,17 +17716,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` { "color": "#2F343D", }, - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontWeight": "600", - "textAlign": "left", - }, - { - "color": "#1D74F5", - }, - ], + undefined, ] } > @@ -17815,7 +17759,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "textAlign": "left", }, { - "color": "#2F343D", + "color": "#6C727A", }, {}, ] @@ -17824,46 +17768,6 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` > Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries </Text> - <View - style={ - [ - { - "alignItems": "center", - "justifyContent": "center", - "marginLeft": 10, - "paddingHorizontal": 5, - "paddingVertical": 3, - }, - { - "backgroundColor": "#9EA2A8", - "borderRadius": 10.5, - "minWidth": 21, - }, - undefined, - ] - } - > - <Text - numberOfLines={1} - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "600", - "textAlign": "left", - }, - undefined, - { - "color": "#FFFFFF", - }, - ] - } - > - +999 - </Text> - </View> </View> </View> </View> @@ -17940,7 +17844,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={151} + handlerTag={155} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18059,7 +17963,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={152} + handlerTag={156} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18161,7 +18065,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={153} + handlerTag={157} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18247,7 +18151,7 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={154} + handlerTag={158} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18544,13 +18448,14 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` "paddingVertical": 3, }, { - "backgroundColor": "#095AD2", + "backgroundColor": "#9EA2A8", "borderRadius": 10.5, "minWidth": 21, }, undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -18580,11 +18485,6 @@ exports[`Story Snapshots: LastMessage should match snapshot 1`] = ` </RNGestureHandlerButton> </View> </View>, -] -`; - -exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` -[ <View collapsable={false} > @@ -18654,7 +18554,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={169} + handlerTag={159} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18773,7 +18673,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={170} + handlerTag={160} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18875,7 +18775,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={171} + handlerTag={161} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -18961,7 +18861,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={172} + handlerTag={162} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -19014,7 +18914,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. Omnichannel. undefined. " + accessibilityLabel="rocket.cat. private channel. undefined. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" accessibilityRole="button" accessible={true} style={ @@ -19071,7 +18971,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", }, ] } @@ -19103,17 +19003,12 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` > <View style={ - [ - { - "alignItems": "center", - "flexDirection": "row", - "justifyContent": "center", - "width": "100%", - }, - { - "flex": 1, - }, - ] + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + } } > <Text @@ -19122,20 +19017,18 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#158D65", - "fontSize": 22, + "color": "#1F2329", + "fontSize": 16, }, [ { - "lineHeight": 22, + "lineHeight": 16, }, [ { "marginRight": 4, }, - { - "marginRight": 8, - }, + undefined, ], ], { @@ -19147,7 +19040,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -19162,7 +19055,12 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "fontWeight": "500", "textAlign": "left", }, - undefined, + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontWeight": "600", + "textAlign": "left", + }, { "color": "#1F2329", }, @@ -19171,15 +19069,105 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` > rocket.cat </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontWeight": "600", + "textAlign": "left", + }, + { + "color": "#1D74F5", + }, + ], + ] + } + > + 10:00 + </Text> + </View> + <View + style={ + { + "alignItems": "flex-start", + "flex": 1, + "flexDirection": "row", + } + } + testID="room-item-last-message-container" + > + <Text + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + numberOfLines={2} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#2F343D", + "lineHeight": undefined, + }, + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + {}, + ] + } + testID="markdown-preview-Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + > + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + </Text> <View style={ - { - "alignItems": "flex-end", - } + [ + { + "alignItems": "center", + "justifyContent": "center", + "marginLeft": 10, + "paddingHorizontal": 5, + "paddingVertical": 3, + }, + { + "backgroundColor": "#9EA2A8", + "borderRadius": 10.5, + "minWidth": 21, + }, + undefined, + ] } + testID="unread-badge-+999" > <Text - ellipsizeMode="tail" numberOfLines={1} style={ [ @@ -19187,18 +19175,17 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "backgroundColor": "transparent", "fontFamily": "Inter", "fontSize": 13, - "fontWeight": "400", - "marginLeft": 4, + "fontWeight": "600", "textAlign": "left", }, + undefined, { - "color": "#2F343D", + "color": "#FFFFFF", }, - undefined, ] } > - 10:00 + +999 </Text> </View> </View> @@ -19277,7 +19264,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={173} + handlerTag={163} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -19396,7 +19383,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={174} + handlerTag={164} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -19498,7 +19485,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={175} + handlerTag={165} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -19584,7 +19571,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={176} + handlerTag={166} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -19637,7 +19624,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. Omnichannel. undefined. " + accessibilityLabel="rocket.cat. private channel. undefined. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" accessibilityRole="button" accessible={true} style={ @@ -19694,7 +19681,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", }, ] } @@ -19726,17 +19713,12 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` > <View style={ - [ - { - "alignItems": "center", - "flexDirection": "row", - "justifyContent": "center", - "width": "100%", - }, - { - "flex": 1, - }, - ] + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + } } > <Text @@ -19745,20 +19727,18 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#AC892F", - "fontSize": 22, + "color": "#1F2329", + "fontSize": 16, }, [ { - "lineHeight": 22, + "lineHeight": 16, }, [ { "marginRight": 4, }, - { - "marginRight": 8, - }, + undefined, ], ], { @@ -19770,7 +19750,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -19785,7 +19765,12 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "fontWeight": "500", "textAlign": "left", }, - undefined, + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontWeight": "600", + "textAlign": "left", + }, { "color": "#1F2329", }, @@ -19794,15 +19779,105 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` > rocket.cat </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontWeight": "600", + "textAlign": "left", + }, + { + "color": "#1D74F5", + }, + ], + ] + } + > + 10:00 + </Text> + </View> + <View + style={ + { + "alignItems": "flex-start", + "flex": 1, + "flexDirection": "row", + } + } + testID="room-item-last-message-container" + > + <Text + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + numberOfLines={2} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#2F343D", + "lineHeight": undefined, + }, + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + {}, + ] + } + testID="markdown-preview-Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries" + > + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + </Text> <View style={ - { - "alignItems": "flex-end", - } + [ + { + "alignItems": "center", + "justifyContent": "center", + "marginLeft": 10, + "paddingHorizontal": 5, + "paddingVertical": 3, + }, + { + "backgroundColor": "#095AD2", + "borderRadius": 10.5, + "minWidth": 21, + }, + undefined, + ] } + testID="unread-badge-1" > <Text - ellipsizeMode="tail" numberOfLines={1} style={ [ @@ -19810,18 +19885,17 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` "backgroundColor": "transparent", "fontFamily": "Inter", "fontSize": 13, - "fontWeight": "400", - "marginLeft": 4, + "fontWeight": "600", "textAlign": "left", }, + undefined, { - "color": "#2F343D", + "color": "#FFFFFF", }, - undefined, ] } > - 10:00 + 1 </Text> </View> </View> @@ -19831,6 +19905,11 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` </RNGestureHandlerButton> </View> </View>, +] +`; + +exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` +[ <View collapsable={false} > @@ -19900,7 +19979,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={177} + handlerTag={181} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20019,7 +20098,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={178} + handlerTag={182} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20121,7 +20200,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={179} + handlerTag={183} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20207,7 +20286,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={180} + handlerTag={184} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20368,7 +20447,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#2F343D", + "color": "#158D65", "fontSize": 22, }, [ @@ -20523,7 +20602,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={181} + handlerTag={185} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20642,7 +20721,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={182} + handlerTag={186} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20744,7 +20823,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={183} + handlerTag={187} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20830,7 +20909,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={184} + handlerTag={188} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -20991,7 +21070,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#6C727A", + "color": "#AC892F", "fontSize": 22, }, [ @@ -21146,7 +21225,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={185} + handlerTag={189} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -21265,7 +21344,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={186} + handlerTag={190} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -21367,7 +21446,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={187} + handlerTag={191} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -21453,7 +21532,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={188} + handlerTag={192} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -21614,7 +21693,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` style={ [ { - "color": "#158D65", + "color": "#2F343D", "fontSize": 22, }, [ @@ -21639,7 +21718,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -21769,7 +21848,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={189} + handlerTag={193} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -21888,7 +21967,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={190} + handlerTag={194} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -21990,7 +22069,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={191} + handlerTag={195} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -22076,7 +22155,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={192} + handlerTag={196} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -22262,7 +22341,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -22392,7 +22471,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={193} + handlerTag={197} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -22511,7 +22590,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={194} + handlerTag={198} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -22613,7 +22692,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={195} + handlerTag={199} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -22699,7 +22778,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={196} + handlerTag={200} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -22885,7 +22964,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -23015,7 +23094,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={197} + handlerTag={201} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23134,7 +23213,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={198} + handlerTag={202} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23236,7 +23315,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={199} + handlerTag={203} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23322,7 +23401,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={200} + handlerTag={204} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23508,7 +23587,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -23638,7 +23717,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={201} + handlerTag={205} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23757,7 +23836,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={202} + handlerTag={206} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23859,7 +23938,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={203} + handlerTag={207} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -23945,7 +24024,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={204} + handlerTag={208} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -24131,7 +24210,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -24261,7 +24340,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={205} + handlerTag={209} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -24380,7 +24459,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={206} + handlerTag={210} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -24482,7 +24561,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={207} + handlerTag={211} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -24568,7 +24647,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={208} + handlerTag={212} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -24754,7 +24833,7 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -24815,11 +24894,6 @@ exports[`Story Snapshots: OmnichannelIcon should match snapshot 1`] = ` </RNGestureHandlerButton> </View> </View>, -] -`; - -exports[`Story Snapshots: Tag should match snapshot 1`] = ` -[ <View collapsable={false} > @@ -24889,7 +24963,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={229} + handlerTag={213} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25008,7 +25082,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={230} + handlerTag={214} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25110,7 +25184,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={231} + handlerTag={215} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25196,7 +25270,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={232} + handlerTag={216} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25249,7 +25323,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. " + accessibilityLabel="rocket.cat. Omnichannel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -25306,7 +25380,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", }, ] } @@ -25357,7 +25431,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` style={ [ { - "color": "#1F2329", + "color": "#158D65", "fontSize": 22, }, [ @@ -25382,7 +25456,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -25406,42 +25480,6 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` > rocket.cat </Text> - <View - style={ - [ - { - "alignItems": "center", - "alignSelf": "center", - "borderRadius": 4, - "marginHorizontal": 4, - }, - { - "backgroundColor": "#CBCED1", - }, - ] - } - > - <Text - numberOfLines={1} - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "600", - "paddingHorizontal": 4, - "textAlign": "left", - }, - { - "color": "#6C727A", - }, - ] - } - > - Auto-join - </Text> - </View> <View style={ { @@ -25548,7 +25586,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={233} + handlerTag={217} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25667,7 +25705,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={234} + handlerTag={218} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25769,7 +25807,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={235} + handlerTag={219} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25855,7 +25893,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={236} + handlerTag={220} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -25908,7 +25946,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. No message" + accessibilityLabel="rocket.cat. Omnichannel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -25965,7 +26003,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", }, ] } @@ -25997,12 +26035,17 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` > <View style={ - { - "alignItems": "center", - "flexDirection": "row", - "justifyContent": "center", - "width": "100%", - } + [ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, + }, + ] } > <Text @@ -26011,18 +26054,20 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` style={ [ { - "color": "#1F2329", - "fontSize": 16, + "color": "#6C727A", + "fontSize": 22, }, [ { - "lineHeight": 16, + "lineHeight": 22, }, [ { "marginRight": 4, }, - undefined, + { + "marginRight": 8, + }, ], ], { @@ -26034,7 +26079,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -26060,20 +26105,13 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` </Text> <View style={ - [ - { - "alignItems": "center", - "alignSelf": "center", - "borderRadius": 4, - "marginHorizontal": 4, - }, - { - "backgroundColor": "#CBCED1", - }, - ] + { + "alignItems": "flex-end", + } } > <Text + ellipsizeMode="tail" numberOfLines={1} style={ [ @@ -26081,88 +26119,20 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` "backgroundColor": "transparent", "fontFamily": "Inter", "fontSize": 13, - "fontWeight": "600", - "paddingHorizontal": 4, + "fontWeight": "400", + "marginLeft": 4, "textAlign": "left", }, { - "color": "#6C727A", + "color": "#2F343D", }, + undefined, ] } - testID="auto-join-tag" > - Auto-join + 10:00 </Text> </View> - <Text - ellipsizeMode="tail" - numberOfLines={1} - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "400", - "marginLeft": 4, - "textAlign": "left", - }, - { - "color": "#2F343D", - }, - undefined, - ] - } - > - 10:00 - </Text> - </View> - <View - style={ - { - "alignItems": "flex-start", - "flex": 1, - "flexDirection": "row", - } - } - testID="room-item-last-message-container" - > - <Text - accessibilityLabel="No message" - numberOfLines={2} - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "400", - "lineHeight": 22, - "textAlign": "left", - }, - { - "color": "#2F343D", - "lineHeight": undefined, - }, - { - "backgroundColor": "transparent", - "flex": 1, - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "400", - "textAlign": "left", - }, - { - "color": "#6C727A", - }, - {}, - ] - } - testID="markdown-preview-No message" - > - No message - </Text> </View> </View> </View> @@ -26170,6 +26140,11 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` </RNGestureHandlerButton> </View> </View>, +] +`; + +exports[`Story Snapshots: Tag should match snapshot 1`] = ` +[ <View collapsable={false} > @@ -26239,7 +26214,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={237} + handlerTag={241} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -26358,7 +26333,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={238} + handlerTag={242} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -26460,7 +26435,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={239} + handlerTag={243} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -26546,7 +26521,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={240} + handlerTag={244} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -26599,7 +26574,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries. private channel. undefined. " + accessibilityLabel="rocket.cat. private channel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -26754,7 +26729,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + rocket.cat </Text> <View style={ @@ -26898,7 +26873,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={241} + handlerTag={245} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -27017,7 +26992,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={242} + handlerTag={246} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -27119,7 +27094,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={243} + handlerTag={247} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -27205,7 +27180,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={244} + handlerTag={248} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -27258,7 +27233,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries. private channel. undefined. No message" + accessibilityLabel="rocket.cat. private channel. undefined. No message" accessibilityRole="button" accessible={true} style={ @@ -27406,7 +27381,7 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` ] } > - Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + rocket.cat </Text> <View style={ @@ -27520,54 +27495,158 @@ exports[`Story Snapshots: Tag should match snapshot 1`] = ` </RNGestureHandlerButton> </View> </View>, -] -`; - -exports[`Story Snapshots: Touch should match snapshot 1`] = ` -<View - collapsable={false} -> <View - pointerEvents="box-none" - style={ - [ - { - "left": 0, - "position": "absolute", - "right": 0, - }, - { - "flexDirection": "row", - "left": 0, - "position": "absolute", - "right": 0, - }, - ] - } + collapsable={false} > <View + pointerEvents="box-none" style={ [ { - "justifyContent": "center", + "left": 0, "position": "absolute", "right": 0, - "top": 0, }, { - "backgroundColor": "#1D74F5", - "right": "100%", - "width": 1500, + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "height": 75, + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Mark read" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={249} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + </View> + <View + pointerEvents="box-none" + style={ + [ { - "height": 75, + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, }, { - "transform": [ - { - "translateX": 0, - }, - ], + "height": 75, }, ] } @@ -27578,22 +27657,33 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` { "justifyContent": "center", "position": "absolute", - "right": 0, "top": 0, }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, { "height": 75, }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, ] } > <RNGestureHandlerButton - accessibilityLabel="Mark read" + accessibilityLabel="Favorite" accessible={true} activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={253} + handlerTag={250} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -27604,6 +27694,7 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` [ { "alignItems": "center", + "backgroundColor": "#8E6300", "height": "100%", "justifyContent": "center", "width": 80, @@ -27658,88 +27749,163 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` ] } > -  +  + </Text> + </RNGestureHandlerButton> + </View> + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#9EA2A8", + "left": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 80, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Hide" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={251} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#9EA2A8", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  </Text> </RNGestureHandlerButton> </View> </View> - </View> - <View - pointerEvents="box-none" - style={ - [ - { - "flexDirection": "row", - "left": 0, - "position": "absolute", - "right": 0, - }, - { - "height": 75, - }, - ] - } - > <View style={ - [ - { - "justifyContent": "center", - "position": "absolute", - "top": 0, - }, - { - "backgroundColor": "#8E6300", - "left": "100%", - "width": 750, - }, - { - "height": 75, - }, - { - "transform": [ - { - "translateX": 0, - }, - ], - }, - ] + { + "transform": [ + { + "translateX": 0, + }, + ], + } } > <RNGestureHandlerButton - accessibilityLabel="Favorite" - accessible={true} - activeOpacity={0.105} + activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={254} + handlerTag={252} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} onGestureHandlerEvent={[Function]} onGestureHandlerStateChange={[Function]} onPress={[Function]} + rippleColor="#E4E7EA" style={ [ { - "alignItems": "center", - "backgroundColor": "#8E6300", - "height": "100%", - "justifyContent": "center", - "width": 80, + "backgroundColor": "#FFFFFF", + "borderRadius": undefined, + "margin": undefined, + "marginBottom": undefined, + "marginEnd": undefined, + "marginHorizontal": undefined, + "marginLeft": undefined, + "marginRight": undefined, + "marginStart": undefined, + "marginTop": undefined, + "marginVertical": undefined, }, { "cursor": undefined, }, ] } - underlayColor="black" + underlayColor="#E4E7EA" > <View collapsable={false} style={ { - "backgroundColor": "black", + "backgroundColor": "#E4E7EA", "borderBottomLeftRadius": undefined, "borderBottomRightRadius": undefined, "borderRadius": undefined, @@ -27754,94 +27920,2603 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` } } /> - <Text - allowFontScaling={false} - selectable={false} - style={ - [ - { - "color": "#FFFFFF", - "fontSize": 28, - }, + <View + style={{}} + > + <View + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries. private channel. undefined. " + accessibilityRole="button" + accessible={true} + style={ [ { - "lineHeight": 28, + "alignItems": "center", + "flexDirection": "row", + "paddingLeft": 14, + }, + { + "height": 75, + }, + ] + } + > + <View + accessibilityLabel="rocket.cat's avatar" + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 48, + "width": 48, + }, + { + "marginRight": 10, + }, + ] + } + testID="avatar" + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={48} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + transition={null} + width={48} + /> + </View> + <View + style={ + [ + { + "borderBottomWidth": 0.5, + "flex": 1, + "paddingRight": 14, + "paddingVertical": 10, + }, + { + "borderColor": "#CBCED1", + }, + ] + } + > + <View + style={ + [ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#1F2329", + "fontSize": 22, + }, + [ + { + "lineHeight": 22, + }, + [ + { + "marginRight": 4, + }, + { + "marginRight": 8, + }, + ], + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 17, + "fontWeight": "500", + "textAlign": "left", + }, + undefined, + { + "color": "#1F2329", + }, + ] + } + > + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + </Text> + <View + style={ + [ + { + "alignItems": "center", + "alignSelf": "center", + "borderRadius": 4, + "marginHorizontal": 4, + }, + { + "backgroundColor": "#CBCED1", + }, + ] + } + > + <Text + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600", + "paddingHorizontal": 4, + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + Auto-join + </Text> + </View> + <View + style={ + { + "alignItems": "flex-end", + } + } + > + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> + </View> + </View> + </View> + </View> + </RNGestureHandlerButton> + </View> + </View>, + <View + collapsable={false} + > + <View + pointerEvents="box-none" + style={ + [ + { + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, }, - undefined, ], + }, + ] + } + > + <View + style={ + [ { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "height": 75, }, - {}, ] } > -  - </Text> - </RNGestureHandlerButton> + <RNGestureHandlerButton + accessibilityLabel="Mark read" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={253} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + </View> + <View + pointerEvents="box-none" + style={ + [ + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "height": 75, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Favorite" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={254} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#8E6300", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#9EA2A8", + "left": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 80, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Hide" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={255} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#9EA2A8", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + <View + style={ + { + "transform": [ + { + "translateX": 0, + }, + ], + } + } + > + <RNGestureHandlerButton + activeOpacity={1} + collapsable={false} + delayLongPress={600} + handlerTag={256} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + rippleColor="#E4E7EA" + style={ + [ + { + "backgroundColor": "#FFFFFF", + "borderRadius": undefined, + "margin": undefined, + "marginBottom": undefined, + "marginEnd": undefined, + "marginHorizontal": undefined, + "marginLeft": undefined, + "marginRight": undefined, + "marginStart": undefined, + "marginTop": undefined, + "marginVertical": undefined, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="#E4E7EA" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "#E4E7EA", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <View + style={{}} + > + <View + accessibilityLabel="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries. private channel. undefined. No message" + accessibilityRole="button" + accessible={true} + style={ + [ + { + "alignItems": "center", + "flexDirection": "row", + "paddingLeft": 14, + }, + { + "height": 75, + }, + ] + } + > + <View + accessibilityLabel="rocket.cat's avatar" + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 48, + "width": 48, + }, + { + "marginRight": 10, + }, + ] + } + testID="avatar" + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={48} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + transition={null} + width={48} + /> + </View> + <View + style={ + [ + { + "borderBottomWidth": 0.5, + "flex": 1, + "paddingRight": 14, + "paddingVertical": 10, + }, + { + "borderColor": "#CBCED1", + }, + ] + } + > + <View + style={ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + } + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#1F2329", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + [ + { + "marginRight": 4, + }, + undefined, + ], + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 17, + "fontWeight": "500", + "textAlign": "left", + }, + undefined, + { + "color": "#1F2329", + }, + ] + } + > + Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries + </Text> + <View + style={ + [ + { + "alignItems": "center", + "alignSelf": "center", + "borderRadius": 4, + "marginHorizontal": 4, + }, + { + "backgroundColor": "#CBCED1", + }, + ] + } + > + <Text + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "600", + "paddingHorizontal": 4, + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + testID="auto-join-tag" + > + Auto-join + </Text> + </View> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> + <View + style={ + { + "alignItems": "flex-start", + "flex": 1, + "flexDirection": "row", + } + } + testID="room-item-last-message-container" + > + <Text + accessibilityLabel="No message" + numberOfLines={2} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#2F343D", + "lineHeight": undefined, + }, + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + {}, + ] + } + testID="markdown-preview-No message" + > + No message + </Text> + </View> + </View> + </View> + </View> + </RNGestureHandlerButton> + </View> + </View>, +] +`; + +exports[`Story Snapshots: Touch should match snapshot 1`] = ` +<View + collapsable={false} +> + <View + pointerEvents="box-none" + style={ + [ + { + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "height": 75, + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Mark read" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={265} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + </View> + <View + pointerEvents="box-none" + style={ + [ + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "height": 75, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Favorite" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={266} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#8E6300", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#9EA2A8", + "left": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 80, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Hide" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={267} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#9EA2A8", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + <View + style={ + { + "transform": [ + { + "translateX": 0, + }, + ], + } + } + > + <RNGestureHandlerButton + activeOpacity={1} + collapsable={false} + delayLongPress={600} + handlerTag={268} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + rippleColor="#E4E7EA" + style={ + [ + { + "backgroundColor": "#FFFFFF", + "borderRadius": undefined, + "margin": undefined, + "marginBottom": undefined, + "marginEnd": undefined, + "marginHorizontal": undefined, + "marginLeft": undefined, + "marginRight": undefined, + "marginStart": undefined, + "marginTop": undefined, + "marginVertical": undefined, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="#E4E7EA" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "#E4E7EA", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <View + style={{}} + > + <View + accessibilityLabel="rocket.cat. private channel. undefined. " + accessibilityRole="button" + accessible={true} + style={ + [ + { + "alignItems": "center", + "flexDirection": "row", + "paddingLeft": 14, + }, + { + "height": 75, + }, + ] + } + > + <View + accessibilityLabel="rocket.cat's avatar" + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 48, + "width": 48, + }, + { + "marginRight": 10, + }, + ] + } + testID="avatar" + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={48} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + transition={null} + width={48} + /> + </View> + <View + style={ + [ + { + "borderBottomWidth": 0.5, + "flex": 1, + "paddingRight": 14, + "paddingVertical": 10, + }, + { + "borderColor": "#CBCED1", + }, + ] + } + > + <View + style={ + [ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#1F2329", + "fontSize": 22, + }, + [ + { + "lineHeight": 22, + }, + [ + { + "marginRight": 4, + }, + { + "marginRight": 8, + }, + ], + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 17, + "fontWeight": "500", + "textAlign": "left", + }, + undefined, + { + "color": "#1F2329", + }, + ] + } + > + rocket.cat + </Text> + <View + style={ + { + "alignItems": "flex-end", + } + } + > + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> + </View> + </View> + </View> + </View> + </RNGestureHandlerButton> + </View> +</View> +`; + +exports[`Story Snapshots: Type should match snapshot 1`] = ` +[ + <View + collapsable={false} + > + <View + pointerEvents="box-none" + style={ + [ + { + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "height": 75, + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Mark read" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={271} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + </View> + <View + pointerEvents="box-none" + style={ + [ + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "height": 75, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Favorite" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={272} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#8E6300", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#9EA2A8", + "left": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 80, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Hide" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={273} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#9EA2A8", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + <View + style={ + { + "transform": [ + { + "translateX": 0, + }, + ], + } + } + > + <RNGestureHandlerButton + activeOpacity={1} + collapsable={false} + delayLongPress={600} + handlerTag={274} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + rippleColor="#E4E7EA" + style={ + [ + { + "backgroundColor": "#FFFFFF", + "borderRadius": undefined, + "margin": undefined, + "marginBottom": undefined, + "marginEnd": undefined, + "marginHorizontal": undefined, + "marginLeft": undefined, + "marginRight": undefined, + "marginStart": undefined, + "marginTop": undefined, + "marginVertical": undefined, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="#E4E7EA" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "#E4E7EA", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <View + style={{}} + > + <View + accessibilityLabel="rocket.cat. Offline. undefined. " + accessibilityRole="button" + accessible={true} + style={ + [ + { + "alignItems": "center", + "flexDirection": "row", + "paddingLeft": 14, + }, + { + "height": 75, + }, + ] + } + > + <View + accessibilityLabel="rocket.cat's avatar" + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 48, + "width": 48, + }, + { + "marginRight": 10, + }, + ] + } + testID="avatar" + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={48} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + transition={null} + width={48} + /> + </View> + <View + style={ + [ + { + "borderBottomWidth": 0.5, + "flex": 1, + "paddingRight": 14, + "paddingVertical": 10, + }, + { + "borderColor": "#CBCED1", + }, + ] + } + > + <View + style={ + [ + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#6C727A", + "fontSize": 22, + }, + [ + { + "lineHeight": 22, + }, + [ + { + "height": 22, + "textAlignVertical": "center", + "width": 22, + }, + [ + { + "marginRight": 4, + }, + { + "marginRight": 8, + }, + ], + ], + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "flex": 1, + "fontFamily": "Inter", + "fontSize": 17, + "fontWeight": "500", + "textAlign": "left", + }, + undefined, + { + "color": "#1F2329", + }, + ] + } + > + rocket.cat + </Text> + <View + style={ + { + "alignItems": "flex-end", + } + } + > + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> + </View> + </View> + </View> + </View> + </RNGestureHandlerButton> + </View> + </View>, + <View + collapsable={false} + > + <View + pointerEvents="box-none" + style={ + [ + { + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "backgroundColor": "#1D74F5", + "right": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "right": 0, + "top": 0, + }, + { + "height": 75, + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Mark read" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={275} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + </View> + </View> + <View + pointerEvents="box-none" + style={ + [ + { + "flexDirection": "row", + "left": 0, + "position": "absolute", + "right": 0, + }, + { + "height": 75, + }, + ] + } + > + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#8E6300", + "left": "100%", + "width": 750, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 0, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Favorite" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={276} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#8E6300", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> + <View + style={ + [ + { + "justifyContent": "center", + "position": "absolute", + "top": 0, + }, + { + "backgroundColor": "#9EA2A8", + "left": "100%", + "width": 1500, + }, + { + "height": 75, + }, + { + "transform": [ + { + "translateX": 80, + }, + ], + }, + ] + } + > + <RNGestureHandlerButton + accessibilityLabel="Hide" + accessible={true} + activeOpacity={0.105} + collapsable={false} + delayLongPress={600} + handlerTag={277} + handlerType="NativeViewGestureHandler" + innerRef={null} + onActiveStateChange={[Function]} + onGestureHandlerEvent={[Function]} + onGestureHandlerStateChange={[Function]} + onPress={[Function]} + style={ + [ + { + "alignItems": "center", + "backgroundColor": "#9EA2A8", + "height": "100%", + "justifyContent": "center", + "width": 80, + }, + { + "cursor": undefined, + }, + ] + } + underlayColor="black" + > + <View + collapsable={false} + style={ + { + "backgroundColor": "black", + "borderBottomLeftRadius": undefined, + "borderBottomRightRadius": undefined, + "borderRadius": undefined, + "borderTopLeftRadius": undefined, + "borderTopRightRadius": undefined, + "bottom": 0, + "left": 0, + "opacity": 0, + "position": "absolute", + "right": 0, + "top": 0, + } + } + /> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#FFFFFF", + "fontSize": 28, + }, + [ + { + "lineHeight": 28, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </RNGestureHandlerButton> + </View> </View> <View style={ - [ - { - "justifyContent": "center", - "position": "absolute", - "top": 0, - }, - { - "backgroundColor": "#9EA2A8", - "left": "100%", - "width": 1500, - }, - { - "height": 75, - }, - { - "transform": [ - { - "translateX": 80, - }, - ], - }, - ] + { + "transform": [ + { + "translateX": 0, + }, + ], + } } > <RNGestureHandlerButton - accessibilityLabel="Hide" - accessible={true} - activeOpacity={0.105} + activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={255} + handlerTag={278} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} onGestureHandlerEvent={[Function]} onGestureHandlerStateChange={[Function]} onPress={[Function]} + rippleColor="#E4E7EA" style={ [ { - "alignItems": "center", - "backgroundColor": "#9EA2A8", - "height": "100%", - "justifyContent": "center", - "width": 80, + "backgroundColor": "#FFFFFF", + "borderRadius": undefined, + "margin": undefined, + "marginBottom": undefined, + "marginEnd": undefined, + "marginHorizontal": undefined, + "marginLeft": undefined, + "marginRight": undefined, + "marginStart": undefined, + "marginTop": undefined, + "marginVertical": undefined, }, { "cursor": undefined, }, ] } - underlayColor="black" + underlayColor="#E4E7EA" > <View collapsable={false} style={ { - "backgroundColor": "black", + "backgroundColor": "#E4E7EA", "borderBottomLeftRadius": undefined, "borderBottomRightRadius": undefined, "borderRadius": undefined, @@ -27856,267 +30531,145 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` } } /> - <Text - allowFontScaling={false} - selectable={false} - style={ - [ - { - "color": "#FFFFFF", - "fontSize": 28, - }, - [ - { - "lineHeight": 28, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", - }, - {}, - ] - } - > -  - </Text> - </RNGestureHandlerButton> - </View> - </View> - <View - style={ - { - "transform": [ - { - "translateX": 0, - }, - ], - } - } - > - <RNGestureHandlerButton - activeOpacity={1} - collapsable={false} - delayLongPress={600} - handlerTag={256} - handlerType="NativeViewGestureHandler" - innerRef={null} - onActiveStateChange={[Function]} - onGestureHandlerEvent={[Function]} - onGestureHandlerStateChange={[Function]} - onPress={[Function]} - rippleColor="#E4E7EA" - style={ - [ - { - "backgroundColor": "#FFFFFF", - "borderRadius": undefined, - "margin": undefined, - "marginBottom": undefined, - "marginEnd": undefined, - "marginHorizontal": undefined, - "marginLeft": undefined, - "marginRight": undefined, - "marginStart": undefined, - "marginTop": undefined, - "marginVertical": undefined, - }, - { - "cursor": undefined, - }, - ] - } - underlayColor="#E4E7EA" - > - <View - collapsable={false} - style={ - { - "backgroundColor": "#E4E7EA", - "borderBottomLeftRadius": undefined, - "borderBottomRightRadius": undefined, - "borderRadius": undefined, - "borderTopLeftRadius": undefined, - "borderTopRightRadius": undefined, - "bottom": 0, - "left": 0, - "opacity": 0, - "position": "absolute", - "right": 0, - "top": 0, - } - } - /> - <View - style={{}} - > <View - accessibilityLabel="rocket.cat. private channel. undefined. " - accessibilityRole="button" - accessible={true} - style={ - [ - { - "alignItems": "center", - "flexDirection": "row", - "paddingLeft": 14, - }, - { - "height": 75, - }, - ] - } + style={{}} > <View - accessibilityLabel="rocket.cat's avatar" + accessibilityLabel="rocket.cat. public channel. undefined. " + accessibilityRole="button" accessible={true} style={ [ { - "borderRadius": 4, - "height": 48, - "width": 48, + "alignItems": "center", + "flexDirection": "row", + "paddingLeft": 14, }, { - "marginRight": 10, + "height": 75, }, ] } - testID="avatar" > - <ViewManagerAdapter_ExpoImage - borderRadius={4} - containerViewRef={"[React.ref]"} - contentFit="cover" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={48} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - priority="high" - source={ + <View + accessibilityLabel="rocket.cat's avatar" + accessible={true} + style={ [ { - "headers": { - "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", - }, - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + "borderRadius": 4, + "height": 48, + "width": 48, + }, + { + "marginRight": 10, }, ] } - style={ - { - "borderRadius": 4, - "height": 48, - "width": 48, + testID="avatar" + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={48} - /> - </View> - <View - style={ - [ - { - "borderBottomWidth": 0.5, - "flex": 1, - "paddingRight": 14, - "paddingVertical": 10, - }, - { - "borderColor": "#CBCED1", - }, - ] - } - > + height={48} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 48, + "width": 48, + } + } + transition={null} + width={48} + /> + </View> <View style={ [ { - "alignItems": "center", - "flexDirection": "row", - "justifyContent": "center", - "width": "100%", + "borderBottomWidth": 0.5, + "flex": 1, + "paddingRight": 14, + "paddingVertical": 10, }, { - "flex": 1, + "borderColor": "#CBCED1", }, ] } > - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#1F2329", - "fontSize": 22, + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "center", + "width": "100%", + }, + { + "flex": 1, }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ [ { - "lineHeight": 22, + "color": "#1F2329", + "fontSize": 22, }, [ { - "marginRight": 4, - }, - { - "marginRight": 8, + "lineHeight": 22, }, + [ + { + "marginRight": 4, + }, + { + "marginRight": 8, + }, + ], ], - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", - }, - {}, - ] - } - > -  - </Text> - <Text - ellipsizeMode="tail" - numberOfLines={1} - style={ - [ - { - "backgroundColor": "transparent", - "flex": 1, - "fontFamily": "Inter", - "fontSize": 17, - "fontWeight": "500", - "textAlign": "left", - }, - undefined, - { - "color": "#1F2329", - }, - ] - } - > - rocket.cat - </Text> - <View - style={ - { - "alignItems": "flex-end", + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] } - } - > + > +  + </Text> <Text ellipsizeMode="tail" numberOfLines={1} @@ -28124,33 +30677,58 @@ exports[`Story Snapshots: Touch should match snapshot 1`] = ` [ { "backgroundColor": "transparent", + "flex": 1, "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "400", - "marginLeft": 4, + "fontSize": 17, + "fontWeight": "500", "textAlign": "left", }, + undefined, { - "color": "#2F343D", + "color": "#1F2329", }, - undefined, ] } > - 10:00 + rocket.cat </Text> + <View + style={ + { + "alignItems": "flex-end", + } + } + > + <Text + ellipsizeMode="tail" + numberOfLines={1} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 13, + "fontWeight": "400", + "marginLeft": 4, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + undefined, + ] + } + > + 10:00 + </Text> + </View> </View> </View> </View> </View> - </View> - </RNGestureHandlerButton> - </View> -</View> -`; - -exports[`Story Snapshots: Type should match snapshot 1`] = ` -[ + </RNGestureHandlerButton> + </View> + </View>, <View collapsable={false} > @@ -28220,7 +30798,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={259} + handlerTag={279} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -28339,7 +30917,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={260} + handlerTag={280} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -28441,7 +31019,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={261} + handlerTag={281} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -28527,7 +31105,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={262} + handlerTag={282} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -28580,7 +31158,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. Offline. undefined. " + accessibilityLabel="rocket.cat. private channel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -28637,7 +31215,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", }, ] } @@ -28688,7 +31266,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={ [ { - "color": "#6C727A", + "color": "#1F2329", "fontSize": 22, }, [ @@ -28697,18 +31275,11 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` }, [ { - "height": 22, - "textAlignVertical": "center", - "width": 22, + "marginRight": 4, + }, + { + "marginRight": 8, }, - [ - { - "marginRight": 4, - }, - { - "marginRight": 8, - }, - ], ], ], { @@ -28720,7 +31291,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -28850,7 +31421,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={263} + handlerTag={283} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -28969,7 +31540,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={264} + handlerTag={284} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29071,7 +31642,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={265} + handlerTag={285} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29157,7 +31728,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={266} + handlerTag={286} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29210,7 +31781,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. public channel. undefined. " + accessibilityLabel="rocket.cat. Omnichannel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -29318,7 +31889,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={ [ { - "color": "#1F2329", + "color": "#6C727A", "fontSize": 22, }, [ @@ -29343,7 +31914,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -29473,7 +32044,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={267} + handlerTag={287} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29592,7 +32163,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={268} + handlerTag={288} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29694,7 +32265,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={269} + handlerTag={289} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29780,7 +32351,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={270} + handlerTag={290} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -29833,7 +32404,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. private channel. undefined. " + accessibilityLabel="rocket.cat. Discussion. undefined. " accessibilityRole="button" accessible={true} style={ @@ -29966,7 +32537,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -30096,7 +32667,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={271} + handlerTag={291} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -30215,7 +32786,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={272} + handlerTag={292} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -30317,7 +32888,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={273} + handlerTag={293} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -30403,7 +32974,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={274} + handlerTag={294} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -30456,7 +33027,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. Omnichannel. undefined. " + accessibilityLabel="rocket.cat. Message. undefined. " accessibilityRole="button" accessible={true} style={ @@ -30513,7 +33084,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", }, ] } @@ -30564,7 +33135,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={ [ { - "color": "#6C727A", + "color": "#1F2329", "fontSize": 22, }, [ @@ -30589,7 +33160,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -30719,7 +33290,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={275} + handlerTag={295} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -30838,7 +33409,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={276} + handlerTag={296} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -30940,7 +33511,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={277} + handlerTag={297} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -31026,7 +33597,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={278} + handlerTag={298} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -31079,7 +33650,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. Discussion. undefined. " + accessibilityLabel="rocket.cat. private channel. undefined. " accessibilityRole="button" accessible={true} style={ @@ -31212,7 +33783,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -31342,7 +33913,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={279} + handlerTag={299} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -31461,7 +34032,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={280} + handlerTag={300} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -31563,7 +34134,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={281} + handlerTag={301} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -31649,7 +34220,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={282} + handlerTag={302} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -31702,7 +34273,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` style={{}} > <View - accessibilityLabel="rocket.cat. Message. undefined. " + accessibilityLabel="rocket.cat. private team. undefined. " accessibilityRole="button" accessible={true} style={ @@ -31759,7 +34330,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&size=96", + "uri": "https://open.rocket.chat/avatar/@rocket.cat?format=png&size=96", }, ] } @@ -31835,7 +34406,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` ] } > -  +  </Text> <Text ellipsizeMode="tail" @@ -31965,7 +34536,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={283} + handlerTag={303} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32084,7 +34655,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={284} + handlerTag={304} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32186,7 +34757,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={285} + handlerTag={305} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32272,7 +34843,7 @@ exports[`Story Snapshots: Type should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={286} + handlerTag={306} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32593,7 +35164,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={301} + handlerTag={325} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32712,7 +35283,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={302} + handlerTag={326} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32814,7 +35385,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={303} + handlerTag={327} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -32900,7 +35471,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={304} + handlerTag={328} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -33223,7 +35794,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={305} + handlerTag={329} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -33342,7 +35913,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={306} + handlerTag={330} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -33444,7 +36015,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={0.105} collapsable={false} delayLongPress={600} - handlerTag={307} + handlerTag={331} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} @@ -33530,7 +36101,7 @@ exports[`Story Snapshots: User should match snapshot 1`] = ` activeOpacity={1} collapsable={false} delayLongPress={600} - handlerTag={308} + handlerTag={332} handlerType="NativeViewGestureHandler" innerRef={null} onActiveStateChange={[Function]} diff --git a/app/containers/RoomItem/index.tsx b/app/containers/RoomItem/index.tsx index dd135367976..44b112921e2 100644 --- a/app/containers/RoomItem/index.tsx +++ b/app/containers/RoomItem/index.tsx @@ -5,6 +5,7 @@ import { isGroupChat } from '../../lib/methods/helpers'; import { formatDate, formatDateAccessibility } from '../../lib/methods/helpers/room'; import { type IRoomItemContainerProps } from './interfaces'; import RoomItem from './RoomItem'; +import { isInviteSubscription } from '../../lib/methods/isInviteSubscription'; const attrs = ['width', 'isFocused', 'showLastMessage', 'autoJoin', 'showAvatar', 'displayMode']; @@ -61,6 +62,7 @@ const RoomItemContainer = React.memo( name={name} avatar={avatar} isGroupChat={isGroupChat(item)} + isInvited={isInviteSubscription(item)} isRead={isRead} onPress={handleOnPress} onLongPress={handleOnLongPress} @@ -94,6 +96,7 @@ const RoomItemContainer = React.memo( displayMode={displayMode} status={item.t === 'l' ? item?.visitor?.status : null} sourceType={item.t === 'l' ? item.source : null} + abacAttributes={item.abacAttributes} /> ); }, diff --git a/app/containers/RoomItem/interfaces.ts b/app/containers/RoomItem/interfaces.ts index fc26c2663cf..07b48bc7cd5 100644 --- a/app/containers/RoomItem/interfaces.ts +++ b/app/containers/RoomItem/interfaces.ts @@ -67,6 +67,7 @@ export interface ITypeIconProps { size?: number; style?: object; sourceType: IOmnichannelSource; + abacAttributes?: ISubscription['abacAttributes']; } interface IRoomItemTouchables { @@ -107,6 +108,7 @@ export interface IRoomItemProps extends IBaseRoomItem { testID: string; status: TUserStatus; isGroupChat: boolean; + isInvited?: boolean; isRead: boolean; teamMain: boolean; date: string; @@ -124,6 +126,7 @@ export interface IRoomItemProps extends IBaseRoomItem { sourceType: IOmnichannelSource; hideMentionStatus?: boolean; accessibilityDate: string; + abacAttributes?: ISubscription['abacAttributes']; } export interface ILastMessageProps { @@ -161,6 +164,7 @@ export interface IIconOrAvatar { teamMain: boolean; showLastMessage: boolean; sourceType: IOmnichannelSource; + abacAttributes?: ISubscription['abacAttributes']; } export interface IRoomItem extends ISubscription { diff --git a/app/containers/RoomTypeIcon/RoomTypeIcon.stories.tsx b/app/containers/RoomTypeIcon/RoomTypeIcon.stories.tsx index 02307ec8c2b..07b425f9634 100644 --- a/app/containers/RoomTypeIcon/RoomTypeIcon.stories.tsx +++ b/app/containers/RoomTypeIcon/RoomTypeIcon.stories.tsx @@ -18,6 +18,8 @@ export const All = () => ( <RoomTypeIcon size={30} type='p' teamMain /> <RoomTypeIcon size={30} type='discussion' /> <RoomTypeIcon size={30} type='l' status='away' sourceType={{ type: OmnichannelSourceType.SMS }} /> + <RoomTypeIcon size={30} type='p' abacAttributes={[{ key: 'Attribute', values: ['Value 1', 'Value 2'] }]} /> + <RoomTypeIcon size={30} type='p' abacAttributes={[{ key: 'Attribute', values: ['Value 1', 'Value 2'] }]} teamMain /> <RoomTypeIcon size={30} type='p' style={{ margin: 10 }} /> </> ); diff --git a/app/containers/RoomTypeIcon/__snapshots__/RoomTypeIcon.test.tsx.snap b/app/containers/RoomTypeIcon/__snapshots__/RoomTypeIcon.test.tsx.snap index 4cf1e7eb8c0..d3f054edc7a 100644 --- a/app/containers/RoomTypeIcon/__snapshots__/RoomTypeIcon.test.tsx.snap +++ b/app/containers/RoomTypeIcon/__snapshots__/RoomTypeIcon.test.tsx.snap @@ -295,6 +295,68 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` >  </Text>, + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#1F2329", + "fontSize": 30, + }, + [ + { + "lineHeight": 30, + }, + [ + { + "marginRight": 4, + }, + undefined, + ], + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text>, + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#1F2329", + "fontSize": 30, + }, + [ + { + "lineHeight": 30, + }, + [ + { + "marginRight": 4, + }, + undefined, + ], + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text>, <Text allowFontScaling={false} selectable={false} diff --git a/app/containers/RoomTypeIcon/index.tsx b/app/containers/RoomTypeIcon/index.tsx index 783c727c667..1dec36f0eed 100644 --- a/app/containers/RoomTypeIcon/index.tsx +++ b/app/containers/RoomTypeIcon/index.tsx @@ -7,7 +7,7 @@ import { CustomIcon, type TIconsName } from '../CustomIcon'; import { themes } from '../../lib/constants/colors'; import Status from '../Status'; import { useTheme } from '../../theme'; -import { type TUserStatus, type IOmnichannelSource } from '../../definitions'; +import { type TUserStatus, type IOmnichannelSource, type ISubscription } from '../../definitions'; const styles = StyleSheet.create({ icon: { @@ -24,10 +24,11 @@ interface IRoomTypeIcon { size?: number; style?: ViewStyle; sourceType?: IOmnichannelSource; + abacAttributes?: ISubscription['abacAttributes']; } const RoomTypeIcon = React.memo( - ({ userId, type, isGroupChat, status, style, teamMain, size = 16, sourceType }: IRoomTypeIcon) => { + ({ userId, type, isGroupChat, status, style, teamMain, size = 16, sourceType, abacAttributes }: IRoomTypeIcon) => { const { theme } = useTheme(); if (!type) { @@ -49,7 +50,9 @@ const RoomTypeIcon = React.memo( // TODO: move this to a separate function let icon: TIconsName = 'channel-private'; - if (teamMain) { + if (abacAttributes?.length) { + icon = teamMain ? 'team-shield' : 'hash-shield'; + } else if (teamMain) { icon = `teams${type === 'p' ? '-private' : ''}`; } else if (type === 'discussion') { icon = 'discussions'; diff --git a/app/containers/SelectedUsers/index.tsx b/app/containers/SelectedUsers/index.tsx new file mode 100644 index 00000000000..ff3163372ca --- /dev/null +++ b/app/containers/SelectedUsers/index.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import { FlatList, StyleSheet, Text, View } from 'react-native'; + +import { useTheme } from '../../theme'; +import { type ISelectedUser } from '../../reducers/selectedUsers'; +import I18n from '../../i18n'; +import sharedStyles from '../../views/Styles'; +import Chip from '../Chip'; + +const styles = StyleSheet.create({ + list: { + flex: 1, + maxHeight: '25%' + }, + invitedHeader: { + marginVertical: 12, + marginHorizontal: 16, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center' + }, + invitedCount: { + fontSize: 12, + ...sharedStyles.textRegular + }, + invitedList: { + gap: 8, + paddingHorizontal: 4 + } +}); + +export interface ISelectedUsers { + users: ISelectedUser[]; + useRealName?: boolean; + onPress: (item: ISelectedUser) => void; +} + +const SelectedUsers = ({ users, useRealName, onPress }: ISelectedUsers) => { + const { colors } = useTheme(); + + return ( + <> + <View style={styles.invitedHeader}> + <Text style={[styles.invitedCount, { color: colors.fontSecondaryInfo }]}> + {I18n.t('N_Selected_members', { n: users.length })} + </Text> + </View> + <FlatList + data={users} + extraData={users} + numColumns={2} + keyExtractor={item => item._id} + style={[ + styles.list, + { + backgroundColor: colors.surfaceTint, + borderColor: colors.strokeLight + } + ]} + contentContainerStyle={styles.invitedList} + renderItem={({ item }) => { + const name = useRealName && item.fname ? item.fname : item.name; + const username = item.name; + + return ( + <Chip text={name} avatar={username} onPress={() => onPress(item)} testID={`create-channel-view-item-${item.name}`} /> + ); + }} + keyboardShouldPersistTaps='always' + /> + </> + ); +}; + +export default SelectedUsers; diff --git a/app/containers/ServerItem/Touchable.tsx b/app/containers/ServerItem/Touchable.tsx index ccf68681245..5ec949fb42d 100644 --- a/app/containers/ServerItem/Touchable.tsx +++ b/app/containers/ServerItem/Touchable.tsx @@ -1,4 +1,5 @@ import React, { memo } from 'react'; +import { type AccessibilityRole } from 'react-native'; import SwipeableDeleteTouchable from './SwipeableDeleteItem/Touchable'; import Touch from '../Touch'; @@ -13,6 +14,7 @@ export interface IServerItemTouchableProps { onDeletePress?(): void; accessibilityLabel?: string; accessibilityHint?: string; + accessibilityRole?: AccessibilityRole; } const Touchable = ({ @@ -22,7 +24,8 @@ const Touchable = ({ onPress, onDeletePress, accessibilityLabel, - accessibilityHint + accessibilityHint, + accessibilityRole = 'button' }: IServerItemTouchableProps): React.ReactElement => { const { colors } = useTheme(); @@ -52,7 +55,8 @@ const Touchable = ({ style={{ backgroundColor: colors.surfaceLight }} accessible accessibilityLabel={accessibilityLabel} - accessibilityHint={accessibilityHint}> + accessibilityHint={accessibilityHint} + accessibilityRole={accessibilityRole}> {children} </Touch> ); diff --git a/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap b/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap index b02764e50e8..01509e744dc 100644 --- a/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap +++ b/app/containers/ServerItem/__snapshots__/ServerItem.test.tsx.snap @@ -3,6 +3,7 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` [ <RNGestureHandlerButton + accessibilityRole="radio" activeOpacity={1} collapsable={false} delayLongPress={600} @@ -58,7 +59,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` /> <View accessibilityHint="Activate to select server" - accessibilityLabel="Rocket.Chat, https://open.rocket.chat/" + accessibilityLabel="Rocket.Chat. https://open.rocket.chat/. Selected" + accessibilityRole="radio" accessible={true} style={{}} > @@ -161,36 +163,49 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` https://open.rocket.chat/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#156FF5", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#1D74F5", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton>, <RNGestureHandlerButton + accessibilityRole="radio" activeOpacity={1} collapsable={false} delayLongPress={600} @@ -246,7 +261,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` /> <View accessibilityHint="Activate to select server" - accessibilityLabel="Super Long Server Name in Rocket.Chat, https://superlongservername.tologintoasuperlongservername/" + accessibilityLabel="Super Long Server Name in Rocket.Chat. https://superlongservername.tologintoasuperlongservername/. Unselected" + accessibilityRole="radio" accessible={true} style={{}} > @@ -349,36 +365,49 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` https://superlongservername.tologintoasuperlongservername/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#9EA2A8", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#9EA2A8", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton>, <RNGestureHandlerButton + accessibilityRole="radio" activeOpacity={1} collapsable={false} delayLongPress={600} @@ -434,7 +463,8 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` /> <View accessibilityHint="Activate to select server" - accessibilityLabel="Rocket.Chat, https://stable.rocket.chat/" + accessibilityLabel="Rocket.Chat. https://stable.rocket.chat/. Unselected" + accessibilityRole="radio" accessible={true} style={{}} > @@ -537,32 +567,44 @@ exports[`Story Snapshots: Content should match snapshot 1`] = ` https://stable.rocket.chat/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#9EA2A8", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#9EA2A8", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton>, @@ -773,7 +815,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` ] } accessibilityHint="Activate to select server. Available actions: delete" - accessibilityLabel="Rocket.Chat, https://open.rocket.chat/" + accessibilityLabel="Rocket.Chat. https://open.rocket.chat/. Unselected" accessible={true} onAccessibilityAction={[Function]} style={{}} @@ -877,32 +919,44 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` https://open.rocket.chat/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#9EA2A8", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#9EA2A8", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton> @@ -1110,7 +1164,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` ] } accessibilityHint="Activate to select server. Available actions: delete" - accessibilityLabel="Another Server, https://example.com/" + accessibilityLabel="Another Server. https://example.com/. Unselected" accessible={true} onAccessibilityAction={[Function]} style={{}} @@ -1214,32 +1268,44 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` https://example.com/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#9EA2A8", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#9EA2A8", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton> @@ -1251,6 +1317,7 @@ exports[`Story Snapshots: SwipeActions should match snapshot 1`] = ` exports[`Story Snapshots: Themes should match snapshot 1`] = ` [ <RNGestureHandlerButton + accessibilityRole="radio" activeOpacity={1} collapsable={false} delayLongPress={600} @@ -1306,7 +1373,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` /> <View accessibilityHint="Activate to select server" - accessibilityLabel="Rocket.Chat, https://open.rocket.chat/" + accessibilityLabel="Rocket.Chat. https://open.rocket.chat/. Unselected" + accessibilityRole="radio" accessible={true} style={{}} > @@ -1409,36 +1477,49 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` https://open.rocket.chat/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#9EA2A8", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#9EA2A8", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton>, <RNGestureHandlerButton + accessibilityRole="radio" activeOpacity={1} collapsable={false} delayLongPress={600} @@ -1494,7 +1575,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` /> <View accessibilityHint="Activate to select server" - accessibilityLabel="Rocket.Chat, https://open.rocket.chat/" + accessibilityLabel="Rocket.Chat. https://open.rocket.chat/. Unselected" + accessibilityRole="radio" accessible={true} style={{}} > @@ -1597,36 +1679,49 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` https://open.rocket.chat/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#404754", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#404754", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton>, <RNGestureHandlerButton + accessibilityRole="radio" activeOpacity={1} collapsable={false} delayLongPress={600} @@ -1682,7 +1777,8 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` /> <View accessibilityHint="Activate to select server" - accessibilityLabel="Rocket.Chat, https://open.rocket.chat/" + accessibilityLabel="Rocket.Chat. https://open.rocket.chat/. Unselected" + accessibilityRole="radio" accessible={true} style={{}} > @@ -1785,32 +1881,44 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` https://open.rocket.chat/ </Text> </View> - <Text - allowFontScaling={false} - selectable={false} + <View style={ [ { - "color": "#404754", - "fontSize": 24, - }, - [ - { - "lineHeight": 24, - }, - undefined, - ], - { - "fontFamily": "custom", - "fontStyle": "normal", - "fontWeight": "normal", + "alignItems": "center", + "justifyContent": "center", }, - {}, + undefined, ] } > -  - </Text> + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#404754", + "fontSize": 24, + }, + [ + { + "lineHeight": 24, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + </View> </View> </View> </RNGestureHandlerButton>, diff --git a/app/containers/ServerItem/index.tsx b/app/containers/ServerItem/index.tsx index 1e68e0b6fef..faf04f52465 100644 --- a/app/containers/ServerItem/index.tsx +++ b/app/containers/ServerItem/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Text, View } from 'react-native'; import { Image } from 'expo-image'; -import Radio from '../Radio'; +import * as List from '../List'; import styles, { ROW_HEIGHT } from './styles'; import { useTheme } from '../../theme'; import Touchable from './Touchable'; @@ -31,20 +31,23 @@ const ServerItem = React.memo(({ item, onPress, onDeletePress, hasCheck }: IServ const { colors } = useTheme(); const { width } = useResponsiveLayout(); - const serverName = item.name || item.id; - const accessibilityLabel = `${serverName}, ${item.id}`; + const iconName = hasCheck ? 'radio-checked' : 'radio-unchecked'; + const iconColor = hasCheck ? colors.badgeBackgroundLevel2 : colors.strokeMedium; + const accessibilityLabel = `${item.name || item.id}. ${item.id}. ${I18n.t(hasCheck ? 'Selected' : 'Unselected')}`; + const accessibilityHint = onDeletePress ? I18n.t('Activate_to_select_server_Available_actions_delete') : I18n.t('Activate_to_select_server'); return ( <Touchable + accessibilityLabel={accessibilityLabel} + accessibilityRole='radio' + accessibilityHint={accessibilityHint} onPress={onPress} onDeletePress={onDeletePress} testID={`server-item-${item.id}`} - width={width} - accessibilityLabel={accessibilityLabel} - accessibilityHint={accessibilityHint}> + width={width}> <View style={styles.serverItemContainer}> {item.iconURL ? ( <Image @@ -67,7 +70,8 @@ const ServerItem = React.memo(({ item, onPress, onDeletePress, hasCheck }: IServ {item.id} </Text> </View> - <Radio check={hasCheck || false} size={24} /> + + <List.Icon name={iconName} color={iconColor} /> </View> </Touchable> ); diff --git a/app/containers/Status/Status.tsx b/app/containers/Status/Status.tsx index 6e4fa17666d..cb85da5e68f 100644 --- a/app/containers/Status/Status.tsx +++ b/app/containers/Status/Status.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { type StyleProp, type TextStyle, useWindowDimensions } from 'react-native'; import { useTheme } from '../../theme'; -import { CustomIcon, IconSet, type TIconsName } from '../CustomIcon'; +import { CustomIcon, hasIcon, type TIconsName } from '../CustomIcon'; import { type IStatusComponentProps } from './definition'; import { useUserStatusColor } from '../../lib/hooks/useUserStatusColor'; @@ -14,7 +14,7 @@ const Status = React.memo(({ style, status = 'offline', size = 32, ...props }: I const { fontScale } = useWindowDimensions(); const name: TIconsName = `status-${status}`; - const isNameValid = IconSet.hasIcon(name); + const isNameValid = hasIcon(name); const iconName = isNameValid ? name : 'status-offline'; const calculatedStyle: StyleProp<TextStyle> = [ { diff --git a/app/containers/SupportedVersions/useSupportedVersionMessage.ts b/app/containers/SupportedVersions/useSupportedVersionMessage.ts index d4b31d10854..85f9965b2d7 100644 --- a/app/containers/SupportedVersions/useSupportedVersionMessage.ts +++ b/app/containers/SupportedVersions/useSupportedVersionMessage.ts @@ -1,5 +1,4 @@ -import moment from 'moment'; - +import dayjs from '../../lib/dayjs'; import { useAppSelector } from '../../lib/hooks/useAppSelector'; const applyParams = (message: string, params: Record<string, unknown>) => { @@ -25,7 +24,7 @@ export const useSupportedVersionMessage = () => { instance_email: email, instance_ws_name: name, instance_domain: server, - remaining_days: moment(expiration).diff(new Date(), 'days'), + remaining_days: dayjs(expiration).diff(new Date(), 'days'), instance_version: version, ...message?.params }; diff --git a/app/containers/Switch/index.tsx b/app/containers/Switch/index.tsx index ea82e0f5d1c..3905ef56989 100644 --- a/app/containers/Switch/index.tsx +++ b/app/containers/Switch/index.tsx @@ -1,7 +1,9 @@ -import { Switch as RNSwitch, type SwitchProps } from 'react-native'; +import { AccessibilityInfo, Switch as RNSwitch, type SwitchProps } from 'react-native'; import React from 'react'; import { useTheme } from '../../theme'; +import { isIOS } from '../../lib/methods/helpers'; +import I18n from '../../i18n'; const Switch = (props: SwitchProps): React.ReactElement => { const { colors } = useTheme(); @@ -11,8 +13,21 @@ const Switch = (props: SwitchProps): React.ReactElement => { true: colors.buttonBackgroundPrimaryDefault }; + const onValueChange = (value: boolean) => { + props?.onValueChange?.(value); + if (isIOS) { + AccessibilityInfo.announceForAccessibility(I18n.t(value ? 'Enabled' : 'Disabled')); + } + }; + return ( - <RNSwitch trackColor={trackColor} thumbColor={colors.fontPureWhite} ios_backgroundColor={colors.strokeDark} {...props} /> + <RNSwitch + onValueChange={onValueChange} + trackColor={trackColor} + thumbColor={colors.fontPureWhite} + ios_backgroundColor={colors.strokeDark} + {...props} + /> ); }; diff --git a/app/containers/Touch.tsx b/app/containers/Touch.tsx index 7017ad340a5..cc76c7b2a7c 100644 --- a/app/containers/Touch.tsx +++ b/app/containers/Touch.tsx @@ -81,6 +81,7 @@ const Touch = React.forwardRef<React.ElementRef<typeof RectButton>, ITouchProps> {...props}> <View accessible={accessible} + accessibilityRole={props.accessibilityRole} accessibilityLabel={accessibilityLabel} accessibilityHint={accessibilityHint} accessibilityActions={accessibilityActions} diff --git a/app/containers/UIKit/DatePicker.tsx b/app/containers/UIKit/DatePicker.tsx index df7eef95b2b..bc1e05fbb60 100644 --- a/app/containers/UIKit/DatePicker.tsx +++ b/app/containers/UIKit/DatePicker.tsx @@ -3,8 +3,8 @@ import { StyleSheet, Text, unstable_batchedUpdates, View } from 'react-native'; import DateTimePicker, { type BaseProps } from '@react-native-community/datetimepicker'; import Touchable from 'react-native-platform-touchable'; import { BlockContext } from '@rocket.chat/ui-kit'; -import moment from 'moment'; +import dayjs from '../../lib/dayjs'; import Button from '../Button'; import { textParser } from './utils'; import { themes } from '../../lib/constants/colors'; @@ -54,7 +54,7 @@ export const DatePicker = ({ element, language, action, context, loading, value, onShow(false); } }); - action({ value: moment(newDate).format('YYYY-MM-DD') }); + action({ value: dayjs(newDate).format('YYYY-MM-DD') }); } }; diff --git a/app/containers/UIKit/MultiSelect/Items.tsx b/app/containers/UIKit/MultiSelect/Items.tsx index ec562e45537..cb01de66ab8 100644 --- a/app/containers/UIKit/MultiSelect/Items.tsx +++ b/app/containers/UIKit/MultiSelect/Items.tsx @@ -10,6 +10,7 @@ import styles from './styles'; import { type IItemData } from '.'; import { useTheme } from '../../../theme'; import { CustomIcon } from '../../CustomIcon'; +import I18n from '../../../i18n'; interface IItem { item: IItemData; @@ -29,8 +30,17 @@ const keyExtractor = (item: IItemData) => item.value?.name || item.text?.text; const Item = ({ item, selected, onSelect }: IItem) => { const itemName = item.value?.name || item.text.text.toLowerCase(); const { colors } = useTheme(); + const iconName = selected ? 'checkbox-checked' : 'checkbox-unchecked'; + const iconColor = selected ? colors.badgeBackgroundLevel2 : colors.strokeMedium; + return ( - <Touchable testID={`multi-select-item-${itemName}`} key={itemName} onPress={() => onSelect(item)}> + <Touchable + accessible + accessibilityLabel={`${textParser([item.text])}. ${selected ? I18n.t('Selected') : ''}`} + accessibilityRole='checkbox' + testID={`multi-select-item-${itemName}`} + key={itemName} + onPress={() => onSelect(item)}> <View style={styles.item}> <View style={styles.flexZ}> {item.imageUrl ? <Image style={styles.itemImage} source={{ uri: item.imageUrl }} /> : null} @@ -41,7 +51,7 @@ const Item = ({ item, selected, onSelect }: IItem) => { </Text> </View> <View style={styles.flexZ}> - {selected ? <CustomIcon color={colors.badgeBackgroundLevel2} size={22} name='check' /> : null} + <CustomIcon color={iconColor} size={22} name={iconName} /> </View> </View> </Touchable> diff --git a/app/containers/UnreadBadge/__snapshots__/UnreadBadge.test.tsx.snap b/app/containers/UnreadBadge/__snapshots__/UnreadBadge.test.tsx.snap index 3e5ed9dea11..742fc1b0858 100644 --- a/app/containers/UnreadBadge/__snapshots__/UnreadBadge.test.tsx.snap +++ b/app/containers/UnreadBadge/__snapshots__/UnreadBadge.test.tsx.snap @@ -26,6 +26,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-9" > <Text numberOfLines={1} @@ -65,6 +66,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-+99" > <Text numberOfLines={1} @@ -107,6 +109,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-9" > <Text numberOfLines={1} @@ -147,6 +150,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-+999" > <Text numberOfLines={1} @@ -187,6 +191,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-9" > <Text numberOfLines={1} @@ -227,6 +232,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-9" > <Text numberOfLines={1} @@ -267,6 +273,7 @@ exports[`Story Snapshots: All should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-9" > <Text numberOfLines={1} @@ -321,6 +328,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -361,6 +369,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -401,6 +410,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-1" > <Text numberOfLines={1} @@ -441,6 +451,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -481,6 +492,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -521,6 +533,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -561,6 +574,7 @@ exports[`Story Snapshots: DifferentMentionTypes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -615,6 +629,7 @@ exports[`Story Snapshots: Normal should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-9" > <Text numberOfLines={1} @@ -655,6 +670,7 @@ exports[`Story Snapshots: Normal should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-+999" > <Text numberOfLines={1} @@ -706,6 +722,7 @@ exports[`Story Snapshots: Small should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-9" > <Text numberOfLines={1} @@ -745,6 +762,7 @@ exports[`Story Snapshots: Small should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-+99" > <Text numberOfLines={1} @@ -802,6 +820,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -842,6 +861,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -882,6 +902,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-1" > <Text numberOfLines={1} @@ -922,6 +943,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -973,6 +995,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -1013,6 +1036,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -1053,6 +1077,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-1" > <Text numberOfLines={1} @@ -1093,6 +1118,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -1144,6 +1170,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} @@ -1184,6 +1211,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="mention-badge-1" > <Text numberOfLines={1} @@ -1224,6 +1252,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="group-mention-badge-1" > <Text numberOfLines={1} @@ -1264,6 +1293,7 @@ exports[`Story Snapshots: Themes should match snapshot 1`] = ` undefined, ] } + testID="unread-badge-1" > <Text numberOfLines={1} diff --git a/app/containers/UnreadBadge/index.tsx b/app/containers/UnreadBadge/index.tsx index 7272113fd61..b2c1d96554c 100644 --- a/app/containers/UnreadBadge/index.tsx +++ b/app/containers/UnreadBadge/index.tsx @@ -39,6 +39,19 @@ export interface IUnreadBadge { hideMentionStatus?: boolean; } +function getTestId(userMentions: number | undefined, groupMentions: number | undefined, unread: number | undefined) { + if (userMentions) { + return `mention-badge-${unread}`; + } + if (groupMentions) { + return `group-mention-badge-${unread}`; + } + if (unread) { + return `unread-badge-${unread}`; + } + return ''; +} + const UnreadBadge = React.memo( ({ unread, @@ -95,13 +108,16 @@ const UnreadBadge = React.memo( minWidth = 11 + text.length * 5; } const borderRadius = 10.5 * fontScale; + const testId = getTestId(userMentions, groupMentions, text); + return ( <View style={[ small ? styles.unreadNumberContainerSmall : styles.unreadNumberContainerNormal, { backgroundColor, minWidth: minWidth * fontScale, borderRadius }, style - ]}> + ]} + testID={testId}> <Text style={[styles.unreadText, small && styles.textSmall, { color }]} numberOfLines={1}> {text} </Text> diff --git a/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap b/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap index faa65cf2e84..043ce490978 100644 --- a/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap +++ b/app/containers/markdown/__snapshots__/Markdown.test.tsx.snap @@ -709,38 +709,52 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` > Custom emojis: </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> <Text accessibilityLabel=" " style={ @@ -758,38 +772,52 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` > </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> <Text accessibilityLabel=" " style={ @@ -807,38 +835,52 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` > </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -896,38 +938,52 @@ exports[`Story Snapshots: Emoji should match snapshot 1`] = ` > 👍 </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> diff --git a/app/containers/markdown/components/emoji/Emoji.tsx b/app/containers/markdown/components/emoji/Emoji.tsx index 1d02aa2c852..f1039d7bd1e 100644 --- a/app/containers/markdown/components/emoji/Emoji.tsx +++ b/app/containers/markdown/components/emoji/Emoji.tsx @@ -1,5 +1,5 @@ import React, { useContext } from 'react'; -import { Text, useWindowDimensions } from 'react-native'; +import { Text, View, useWindowDimensions } from 'react-native'; import { type Emoji as EmojiProps } from '@rocket.chat/message-parser'; import Plain from '../Plain'; @@ -68,7 +68,11 @@ const Emoji = ({ block, isBigEmoji, style = {}, index, isAvatar = false }: IEmoj }; if (emoji) { - return <CustomEmoji style={[isBigEmoji ? customEmojiBigSize : customEmojiSize, style]} emoji={emoji} />; + return ( + <View style={[{ transform: [{ translateY: isBigEmoji || isAvatar ? 0 : 3 }] }]}> + <CustomEmoji style={[isBigEmoji ? customEmojiBigSize : customEmojiSize, style]} emoji={emoji} /> + </View> + ); } return ( diff --git a/app/containers/markdown/components/mentions/AtMention.tsx b/app/containers/markdown/components/mentions/AtMention.tsx index df9dd3b33d6..cf0779c0343 100644 --- a/app/containers/markdown/components/mentions/AtMention.tsx +++ b/app/containers/markdown/components/mentions/AtMention.tsx @@ -20,7 +20,7 @@ interface IAtMention { const AtMention = React.memo(({ mention, mentions, username, navToRoomInfo, style = [], useRealName }: IAtMention) => { const { theme } = useTheme(); - const [mentionsWithAtSymbol] = useUserPreferences<boolean>(USER_MENTIONS_PREFERENCES_KEY); + const [mentionsWithAtSymbol] = useUserPreferences<boolean>(USER_MENTIONS_PREFERENCES_KEY, false); const preffix = mentionsWithAtSymbol ? '@' : ''; if (mention === 'all' || mention === 'here') { return ( diff --git a/app/containers/markdown/components/mentions/Hashtag.tsx b/app/containers/markdown/components/mentions/Hashtag.tsx index 4013d236487..c5d8ffff7ee 100644 --- a/app/containers/markdown/components/mentions/Hashtag.tsx +++ b/app/containers/markdown/components/mentions/Hashtag.tsx @@ -24,7 +24,7 @@ interface IHashtag { const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [] }: IHashtag) => { const { theme } = useTheme(); - const [roomsWithHashTagSymbol] = useUserPreferences<boolean>(ROOM_MENTIONS_PREFERENCES_KEY); + const [roomsWithHashTagSymbol] = useUserPreferences<boolean>(ROOM_MENTIONS_PREFERENCES_KEY, false); const isMasterDetail = useAppSelector(state => state.app.isMasterDetail); const preffix = roomsWithHashTagSymbol ? '#' : ''; const handlePress = async () => { diff --git a/app/containers/message/Components/Attachments/Reply.tsx b/app/containers/message/Components/Attachments/Reply.tsx index faa796f9634..eec13fe43c0 100644 --- a/app/containers/message/Components/Attachments/Reply.tsx +++ b/app/containers/message/Components/Attachments/Reply.tsx @@ -1,5 +1,4 @@ import { dequal } from 'dequal'; -import moment from 'moment'; import React, { useContext, useState } from 'react'; import { StyleSheet, Text, View } from 'react-native'; import { Image } from 'expo-image'; @@ -17,6 +16,7 @@ import { Attachments } from './components'; import MessageContext from '../../Context'; import Touchable from '../../Touchable'; import messageStyles from '../../styles'; +import dayjs from '../../../../lib/dayjs'; const styles = StyleSheet.create({ button: { @@ -103,7 +103,7 @@ const Title = React.memo( ({ attachment, timeFormat, theme }: { attachment: IAttachment; timeFormat?: string; theme: TSupportedThemes }) => { 'use memo'; - const time = attachment.message_link && attachment.ts ? moment(attachment.ts).format(timeFormat) : null; + const time = attachment.message_link && attachment.ts ? dayjs(attachment.ts).format(timeFormat) : null; return ( <View style={styles.authorContainer}> {attachment.author_name ? ( diff --git a/app/containers/message/Message.stories.tsx b/app/containers/message/Message.stories.tsx index 9adcea932dd..1f15cea13c4 100644 --- a/app/containers/message/Message.stories.tsx +++ b/app/containers/message/Message.stories.tsx @@ -1919,6 +1919,8 @@ export const SystemMessages = () => ( <Message type='user-converted-to-channel' isInfo msg='channel-name' /> <Message type='user-deleted-room-from-team' isInfo msg='channel-name' /> <Message type='user-removed-room-from-team' isInfo msg='channel-name' /> + <Message type='abac-removed-user-from-room' isInfo /> + <Message type='unsupported' isInfo /> </> ); @@ -1960,6 +1962,8 @@ export const SystemMessagesLargeFont = () => ( <MessageLargeFont type='user-converted-to-channel' isInfo msg='channel-name' /> <MessageLargeFont type='user-deleted-room-from-team' isInfo msg='channel-name' /> <MessageLargeFont type='user-removed-room-from-team' isInfo msg='channel-name' /> + <MessageLargeFont type='abac-removed-user-from-room' isInfo /> + <MessageLargeFont type='unsupported' isInfo /> </> ); diff --git a/app/containers/message/Time.tsx b/app/containers/message/Time.tsx index efeb4ac5063..78ae7ab80f5 100644 --- a/app/containers/message/Time.tsx +++ b/app/containers/message/Time.tsx @@ -1,7 +1,7 @@ -import moment from 'moment'; import React from 'react'; import { Text } from 'react-native'; +import dayjs from '../../lib/dayjs'; import { useTheme } from '../../theme'; import messageStyles from './styles'; @@ -15,7 +15,7 @@ const MessageTime = ({ timeFormat, ts }: IMessageTime) => { const { colors } = useTheme(); - const time = moment(ts).format(timeFormat); + const time = dayjs(ts).format(timeFormat); return <Text style={[messageStyles.time, { color: colors.fontSecondaryInfo }]}>{time}</Text>; }; diff --git a/app/containers/message/__snapshots__/Message.test.tsx.snap b/app/containers/message/__snapshots__/Message.test.tsx.snap index fb42ca0dda3..4bb85ad01f8 100644 --- a/app/containers/message/__snapshots__/Message.test.tsx.snap +++ b/app/containers/message/__snapshots__/Message.test.tsx.snap @@ -3305,40 +3305,54 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` } } > - <ViewManagerAdapter_ExpoImage - borderRadius={4} - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={36} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "borderRadius": 4, - "height": 36, - "width": 36, + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={36} - /> + height={36} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 36, + "width": 36, + } + } + transition={null} + width={36} + /> + </View> </View> </View> </View> @@ -3663,40 +3677,54 @@ exports[`Story Snapshots: Avatar should match snapshot 1`] = ` } } > - <ViewManagerAdapter_ExpoImage - borderRadius={4} - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={36} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "borderRadius": 4, - "height": 36, - "width": 36, + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={36} - /> + height={36} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 36, + "width": 36, + } + } + transition={null} + width={36} + /> + </View> </View> </View> </View> @@ -26636,102 +26664,144 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` } } > - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> @@ -27055,38 +27125,52 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` } } > - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> @@ -27429,38 +27513,52 @@ exports[`Story Snapshots: Emojis should match snapshot 1`] = ` > 🤙 </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> @@ -28919,102 +29017,144 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` } } > - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> @@ -29338,38 +29478,52 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` } } > - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> @@ -29712,38 +29866,52 @@ exports[`Story Snapshots: EmojisLargeFont should match snapshot 1`] = ` > 🤙 </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={30} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + "transform": [ + { + "translateY": 0, + }, + ], }, ] } - style={ - { - "height": 30, - "width": 30, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={30} - /> + height={30} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/react_rocket.png", + }, + ] + } + style={ + { + "height": 30, + "width": 30, + } + } + transition={null} + width={30} + /> + </View> </View> </View> </View> @@ -67305,38 +67473,52 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` > How are you? </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -67496,38 +67678,52 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` > How are you? </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -68829,38 +69025,52 @@ exports[`Story Snapshots: MessageWithReply should match snapshot 1`] = ` > Are you seeing this mario </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> <Text accessibilityLabel=" ?" style={ @@ -73677,38 +73887,52 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = > How are you? </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -74955,38 +75179,52 @@ exports[`Story Snapshots: MessageWithReplyLargeFont should match snapshot 1`] = > Are you seeing this mario </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/marioparty.gif", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> <Text accessibilityLabel=" ?" style={ @@ -98074,19 +98312,6 @@ exports[`Story Snapshots: SystemMessages should match snapshot 1`] = ` </View> </View> </A11yOrderView> - </View> -</RCTScrollView> -`; - -exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` -<RCTScrollView - style={ - { - "backgroundColor": "#FFFFFF", - } - } -> - <View> <A11yOrderView orderKey=":r7e:" > @@ -98107,7 +98332,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM message removed. " + accessibilityLabel="diego.mello 10:00:00 AM was removed by ABAC. " accessible={true} style={ [ @@ -98124,7 +98349,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` style={ { "alignItems": "flex-end", - "width": 46.800000000000004, + "width": 36, } } > @@ -98134,8 +98359,8 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` [ { "borderRadius": 4, - "height": 26, - "width": 26, + "height": 20, + "width": 20, }, undefined, ] @@ -98187,7 +98412,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "top": "50%", } } - height={26} + height={20} nativeViewRef={"[React.ref]"} onError={[Function]} onLoad={[Function]} @@ -98201,19 +98426,19 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` "headers": { "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", }, - "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=52", + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=40", }, ] } style={ { "borderRadius": 4, - "height": 26, - "width": 26, + "height": 20, + "width": 20, } } transition={null} - width={26} + width={20} /> </View> </View> @@ -98255,7 +98480,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="message removed" + accessibilityLabel="was removed by ABAC" style={ [ { @@ -98271,7 +98496,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - message removed + was removed by ABAC </Text> </Text> </View> @@ -98299,7 +98524,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM joined the channel. " + accessibilityLabel="diego.mello 10:00:00 AM Unsupported system message. " accessible={true} style={ [ @@ -98316,7 +98541,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` style={ { "alignItems": "flex-end", - "width": 46.800000000000004, + "width": 36, } } > @@ -98326,8 +98551,191 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` [ { "borderRadius": 4, - "height": 26, - "width": 26, + "height": 20, + "width": 20, + }, + undefined, + ] + } + testID="avatar" + > + <View + accessibilityLabel="diego.mello's avatar" + accessibilityState={ + { + "busy": undefined, + "checked": undefined, + "disabled": undefined, + "expanded": undefined, + "selected": undefined, + } + } + accessibilityValue={ + { + "max": undefined, + "min": undefined, + "now": undefined, + "text": undefined, + } + } + accessible={true} + collapsable={false} + focusable={true} + onClick={[Function]} + onResponderGrant={[Function]} + onResponderMove={[Function]} + onResponderRelease={[Function]} + onResponderTerminate={[Function]} + onResponderTerminationRequest={[Function]} + onStartShouldSetResponder={[Function]} + style={ + { + "opacity": 1, + } + } + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={20} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=40", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 20, + "width": 20, + } + } + transition={null} + width={20} + /> + </View> + </View> + </View> + <A11yIndexView + accessibilityLabel="" + importantForAccessibility="yes" + orderFocusType={0} + orderIndex={2} + orderKey=":r7f:" + > + <View + style={ + { + "flex": 1, + "marginLeft": 10, + } + } + > + <Text + accessibilityLabel="Unsupported system message" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + Unsupported system message + </Text> + </View> + </A11yIndexView> + </View> + </View> + </A11yOrderView> + </View> +</RCTScrollView> +`; + +exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` +<RCTScrollView + style={ + { + "backgroundColor": "#FFFFFF", + } + } +> + <View> + <A11yOrderView + orderKey=":r7g:" + > + <View + style={ + [ + { + "flexDirection": "column", + "gap": 8, + "paddingHorizontal": 12, + "paddingVertical": 4, + "width": "100%", + }, + { + "marginTop": 4, + }, + ] + } + > + <View + accessibilityLabel="diego.mello 10:00:00 AM message removed. " + accessible={true} + style={ + [ + { + "flexDirection": "row", + }, + { + "alignItems": "center", + }, + ] + } + > + <View + style={ + { + "alignItems": "flex-end", + "width": 46.800000000000004, + } + } + > + <View + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 26, + "width": 26, }, undefined, ] @@ -98415,7 +98823,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7f:" + orderKey=":r7g:" > <View style={ @@ -98447,7 +98855,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="joined the channel" + accessibilityLabel="message removed" style={ [ { @@ -98463,7 +98871,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - joined the channel + message removed </Text> </Text> </View> @@ -98472,7 +98880,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r7g:" + orderKey=":r7h:" > <View style={ @@ -98491,7 +98899,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM Pinned a message:. " + accessibilityLabel="diego.mello 10:00:00 AM joined the channel. " accessible={true} style={ [ @@ -98603,11 +99011,11 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="New name" + accessibilityLabel="" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7g:" + orderKey=":r7h:" > <View style={ @@ -98639,7 +99047,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="Pinned a message:" + accessibilityLabel="joined the channel" style={ [ { @@ -98655,19 +99063,16 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - Pinned a message: + joined the channel </Text> </Text> - <View - pointerEvents="none" - /> </View> </A11yIndexView> </View> </View> </A11yOrderView> <A11yOrderView - orderKey=":r7h:" + orderKey=":r7i:" > <View style={ @@ -98686,7 +99091,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM left the channel. " + accessibilityLabel="diego.mello 10:00:00 AM Pinned a message:. " accessible={true} style={ [ @@ -98798,11 +99203,11 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="" + accessibilityLabel="New name" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7h:" + orderKey=":r7i:" > <View style={ @@ -98834,7 +99239,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="left the channel" + accessibilityLabel="Pinned a message:" style={ [ { @@ -98850,16 +99255,19 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - left the channel + Pinned a message: </Text> </Text> + <View + pointerEvents="none" + /> </View> </A11yIndexView> </View> </View> </A11yOrderView> <A11yOrderView - orderKey=":r7i:" + orderKey=":r7j:" > <View style={ @@ -98878,7 +99286,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM removed rocket.cat. " + accessibilityLabel="diego.mello 10:00:00 AM left the channel. " accessible={true} style={ [ @@ -98990,11 +99398,11 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="rocket.cat" + accessibilityLabel="" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7i:" + orderKey=":r7j:" > <View style={ @@ -99026,7 +99434,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="removed rocket.cat" + accessibilityLabel="left the channel" style={ [ { @@ -99042,7 +99450,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - removed rocket.cat + left the channel </Text> </Text> </View> @@ -99051,7 +99459,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r7j:" + orderKey=":r7k:" > <View style={ @@ -99070,7 +99478,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM added rocket.cat. " + accessibilityLabel="diego.mello 10:00:00 AM removed rocket.cat. " accessible={true} style={ [ @@ -99186,7 +99594,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7j:" + orderKey=":r7k:" > <View style={ @@ -99218,7 +99626,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="added rocket.cat" + accessibilityLabel="removed rocket.cat" style={ [ { @@ -99234,7 +99642,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - added rocket.cat + removed rocket.cat </Text> </Text> </View> @@ -99243,7 +99651,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r7k:" + orderKey=":r7l:" > <View style={ @@ -99262,7 +99670,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM muted rocket.cat. " + accessibilityLabel="diego.mello 10:00:00 AM added rocket.cat. " accessible={true} style={ [ @@ -99378,7 +99786,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7k:" + orderKey=":r7l:" > <View style={ @@ -99410,7 +99818,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="muted rocket.cat" + accessibilityLabel="added rocket.cat" style={ [ { @@ -99426,7 +99834,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - muted rocket.cat + added rocket.cat </Text> </Text> </View> @@ -99435,7 +99843,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r7l:" + orderKey=":r7m:" > <View style={ @@ -99454,7 +99862,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM unmuted rocket.cat. " + accessibilityLabel="diego.mello 10:00:00 AM muted rocket.cat. " accessible={true} style={ [ @@ -99570,7 +99978,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r7l:" + orderKey=":r7m:" > <View style={ @@ -99602,7 +100010,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="unmuted rocket.cat" + accessibilityLabel="muted rocket.cat" style={ [ { @@ -99618,7 +100026,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - unmuted rocket.cat + muted rocket.cat </Text> </Text> </View> @@ -99627,7 +100035,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r7m:" + orderKey=":r7n:" > <View style={ @@ -99646,199 +100054,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM defined rocket.cat as admin. " - accessible={true} - style={ - [ - { - "flexDirection": "row", - }, - { - "alignItems": "center", - }, - ] - } - > - <View - style={ - { - "alignItems": "flex-end", - "width": 46.800000000000004, - } - } - > - <View - accessible={true} - style={ - [ - { - "borderRadius": 4, - "height": 26, - "width": 26, - }, - undefined, - ] - } - testID="avatar" - > - <View - accessibilityLabel="diego.mello's avatar" - accessibilityState={ - { - "busy": undefined, - "checked": undefined, - "disabled": undefined, - "expanded": undefined, - "selected": undefined, - } - } - accessibilityValue={ - { - "max": undefined, - "min": undefined, - "now": undefined, - "text": undefined, - } - } - accessible={true} - collapsable={false} - focusable={true} - onClick={[Function]} - onResponderGrant={[Function]} - onResponderMove={[Function]} - onResponderRelease={[Function]} - onResponderTerminate={[Function]} - onResponderTerminationRequest={[Function]} - onStartShouldSetResponder={[Function]} - style={ - { - "opacity": 1, - } - } - > - <ViewManagerAdapter_ExpoImage - borderRadius={4} - containerViewRef={"[React.ref]"} - contentFit="cover" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={26} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - priority="high" - source={ - [ - { - "headers": { - "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", - }, - "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=52", - }, - ] - } - style={ - { - "borderRadius": 4, - "height": 26, - "width": 26, - } - } - transition={null} - width={26} - /> - </View> - </View> - </View> - <A11yIndexView - accessibilityLabel="rocket.cat" - importantForAccessibility="yes" - orderFocusType={0} - orderIndex={2} - orderKey=":r7m:" - > - <View - style={ - { - "flex": 1, - "marginLeft": 10, - } - } - > - <Text> - <Text - onPress={[Function]} - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500", - "textAlign": "left", - }, - { - "color": "#1F2329", - }, - ] - } - > - diego.mello - </Text> - - <Text - accessibilityLabel="defined rocket.cat as admin" - style={ - [ - { - "backgroundColor": "transparent", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "400", - "textAlign": "left", - }, - { - "color": "#6C727A", - }, - ] - } - > - defined rocket.cat as admin - </Text> - </Text> - </View> - </A11yIndexView> - </View> - </View> - </A11yOrderView> - <A11yOrderView - orderKey=":r7n:" - > - <View - style={ - [ - { - "flexDirection": "column", - "gap": 8, - "paddingHorizontal": 12, - "paddingVertical": 4, - "width": "100%", - }, - { - "marginTop": 4, - }, - ] - } - > - <View - accessibilityLabel="diego.mello 10:00:00 AM removed rocket.cat as admin. " + accessibilityLabel="diego.mello 10:00:00 AM unmuted rocket.cat. " accessible={true} style={ [ @@ -99986,7 +100202,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="removed rocket.cat as admin" + accessibilityLabel="unmuted rocket.cat" style={ [ { @@ -100002,7 +100218,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - removed rocket.cat as admin + unmuted rocket.cat </Text> </Text> </View> @@ -100030,7 +100246,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM changed room name to: New name. " + accessibilityLabel="diego.mello 10:00:00 AM defined rocket.cat as admin. " accessible={true} style={ [ @@ -100142,7 +100358,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="New name" + accessibilityLabel="rocket.cat" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -100178,7 +100394,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="changed room name to: New name" + accessibilityLabel="defined rocket.cat as admin" style={ [ { @@ -100194,7 +100410,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - changed room name to: New name + defined rocket.cat as admin </Text> </Text> </View> @@ -100222,7 +100438,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM changed room description to: new description. " + accessibilityLabel="diego.mello 10:00:00 AM removed rocket.cat as admin. " accessible={true} style={ [ @@ -100334,7 +100550,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="new description" + accessibilityLabel="rocket.cat" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -100370,7 +100586,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="changed room description to: new description" + accessibilityLabel="removed rocket.cat as admin" style={ [ { @@ -100386,7 +100602,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - changed room description to: new description + removed rocket.cat as admin </Text> </Text> </View> @@ -100414,7 +100630,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM changed room announcement to: new announcement. " + accessibilityLabel="diego.mello 10:00:00 AM changed room name to: New name. " accessible={true} style={ [ @@ -100526,7 +100742,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="new announcement" + accessibilityLabel="New name" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -100562,7 +100778,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="changed room announcement to: new announcement" + accessibilityLabel="changed room name to: New name" style={ [ { @@ -100578,7 +100794,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - changed room announcement to: new announcement + changed room name to: New name </Text> </Text> </View> @@ -100606,7 +100822,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM changed room topic to: new topic. " + accessibilityLabel="diego.mello 10:00:00 AM changed room description to: new description. " accessible={true} style={ [ @@ -100718,7 +100934,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="new topic" + accessibilityLabel="new description" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -100754,7 +100970,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="changed room topic to: new topic" + accessibilityLabel="changed room description to: new description" style={ [ { @@ -100770,7 +100986,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - changed room topic to: new topic + changed room description to: new description </Text> </Text> </View> @@ -100798,7 +101014,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM changed room to public. " + accessibilityLabel="diego.mello 10:00:00 AM changed room announcement to: new announcement. " accessible={true} style={ [ @@ -100910,7 +101126,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="public" + accessibilityLabel="new announcement" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -100946,7 +101162,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="changed room to public" + accessibilityLabel="changed room announcement to: new announcement" style={ [ { @@ -100962,7 +101178,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - changed room to public + changed room announcement to: new announcement </Text> </Text> </View> @@ -100990,7 +101206,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM disabled E2E encryption for this room. " + accessibilityLabel="diego.mello 10:00:00 AM changed room topic to: new topic. " accessible={true} style={ [ @@ -101102,7 +101318,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="" + accessibilityLabel="new topic" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -101138,7 +101354,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="disabled E2E encryption for this room" + accessibilityLabel="changed room topic to: new topic" style={ [ { @@ -101154,7 +101370,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - disabled E2E encryption for this room + changed room topic to: new topic </Text> </Text> </View> @@ -101182,7 +101398,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM enabled E2E encryption for this room. " + accessibilityLabel="diego.mello 10:00:00 AM changed room to public. " accessible={true} style={ [ @@ -101294,7 +101510,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="" + accessibilityLabel="public" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -101330,7 +101546,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="enabled E2E encryption for this room" + accessibilityLabel="changed room to public" style={ [ { @@ -101346,7 +101562,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - enabled E2E encryption for this room + changed room to public </Text> </Text> </View> @@ -101374,7 +101590,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM removed @rocket.cat from this team. " + accessibilityLabel="diego.mello 10:00:00 AM disabled E2E encryption for this room. " accessible={true} style={ [ @@ -101486,7 +101702,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="rocket.cat" + accessibilityLabel="" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} @@ -101522,7 +101738,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="removed @rocket.cat from this team" + accessibilityLabel="disabled E2E encryption for this room" style={ [ { @@ -101538,7 +101754,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - removed @rocket.cat from this team + disabled E2E encryption for this room </Text> </Text> </View> @@ -101548,6 +101764,390 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </A11yOrderView> <A11yOrderView orderKey=":r80:" + > + <View + style={ + [ + { + "flexDirection": "column", + "gap": 8, + "paddingHorizontal": 12, + "paddingVertical": 4, + "width": "100%", + }, + { + "marginTop": 4, + }, + ] + } + > + <View + accessibilityLabel="diego.mello 10:00:00 AM enabled E2E encryption for this room. " + accessible={true} + style={ + [ + { + "flexDirection": "row", + }, + { + "alignItems": "center", + }, + ] + } + > + <View + style={ + { + "alignItems": "flex-end", + "width": 46.800000000000004, + } + } + > + <View + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 26, + "width": 26, + }, + undefined, + ] + } + testID="avatar" + > + <View + accessibilityLabel="diego.mello's avatar" + accessibilityState={ + { + "busy": undefined, + "checked": undefined, + "disabled": undefined, + "expanded": undefined, + "selected": undefined, + } + } + accessibilityValue={ + { + "max": undefined, + "min": undefined, + "now": undefined, + "text": undefined, + } + } + accessible={true} + collapsable={false} + focusable={true} + onClick={[Function]} + onResponderGrant={[Function]} + onResponderMove={[Function]} + onResponderRelease={[Function]} + onResponderTerminate={[Function]} + onResponderTerminationRequest={[Function]} + onStartShouldSetResponder={[Function]} + style={ + { + "opacity": 1, + } + } + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={26} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=52", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 26, + "width": 26, + } + } + transition={null} + width={26} + /> + </View> + </View> + </View> + <A11yIndexView + accessibilityLabel="" + importantForAccessibility="yes" + orderFocusType={0} + orderIndex={2} + orderKey=":r80:" + > + <View + style={ + { + "flex": 1, + "marginLeft": 10, + } + } + > + <Text> + <Text + onPress={[Function]} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + diego.mello + </Text> + + <Text + accessibilityLabel="enabled E2E encryption for this room" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + enabled E2E encryption for this room + </Text> + </Text> + </View> + </A11yIndexView> + </View> + </View> + </A11yOrderView> + <A11yOrderView + orderKey=":r81:" + > + <View + style={ + [ + { + "flexDirection": "column", + "gap": 8, + "paddingHorizontal": 12, + "paddingVertical": 4, + "width": "100%", + }, + { + "marginTop": 4, + }, + ] + } + > + <View + accessibilityLabel="diego.mello 10:00:00 AM removed @rocket.cat from this team. " + accessible={true} + style={ + [ + { + "flexDirection": "row", + }, + { + "alignItems": "center", + }, + ] + } + > + <View + style={ + { + "alignItems": "flex-end", + "width": 46.800000000000004, + } + } + > + <View + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 26, + "width": 26, + }, + undefined, + ] + } + testID="avatar" + > + <View + accessibilityLabel="diego.mello's avatar" + accessibilityState={ + { + "busy": undefined, + "checked": undefined, + "disabled": undefined, + "expanded": undefined, + "selected": undefined, + } + } + accessibilityValue={ + { + "max": undefined, + "min": undefined, + "now": undefined, + "text": undefined, + } + } + accessible={true} + collapsable={false} + focusable={true} + onClick={[Function]} + onResponderGrant={[Function]} + onResponderMove={[Function]} + onResponderRelease={[Function]} + onResponderTerminate={[Function]} + onResponderTerminationRequest={[Function]} + onStartShouldSetResponder={[Function]} + style={ + { + "opacity": 1, + } + } + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={26} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=52", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 26, + "width": 26, + } + } + transition={null} + width={26} + /> + </View> + </View> + </View> + <A11yIndexView + accessibilityLabel="rocket.cat" + importantForAccessibility="yes" + orderFocusType={0} + orderIndex={2} + orderKey=":r81:" + > + <View + style={ + { + "flex": 1, + "marginLeft": 10, + } + } + > + <Text> + <Text + onPress={[Function]} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + diego.mello + </Text> + + <Text + accessibilityLabel="removed @rocket.cat from this team" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + removed @rocket.cat from this team + </Text> + </Text> + </View> + </A11yIndexView> + </View> + </View> + </A11yOrderView> + <A11yOrderView + orderKey=":r82:" > <View style={ @@ -101682,7 +102282,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r80:" + orderKey=":r82:" > <View style={ @@ -101739,7 +102339,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r81:" + orderKey=":r83:" > <View style={ @@ -101874,7 +102474,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r81:" + orderKey=":r83:" > <View style={ @@ -101931,7 +102531,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r82:" + orderKey=":r84:" > <View style={ @@ -102066,7 +102666,199 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r82:" + orderKey=":r84:" + > + <View + style={ + { + "flex": 1, + "marginLeft": 10, + } + } + > + <Text> + <Text + onPress={[Function]} + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + diego.mello + </Text> + + <Text + accessibilityLabel="converted #channel-name to a team" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + converted #channel-name to a team + </Text> + </Text> + </View> + </A11yIndexView> + </View> + </View> + </A11yOrderView> + <A11yOrderView + orderKey=":r85:" + > + <View + style={ + [ + { + "flexDirection": "column", + "gap": 8, + "paddingHorizontal": 12, + "paddingVertical": 4, + "width": "100%", + }, + { + "marginTop": 4, + }, + ] + } + > + <View + accessibilityLabel="diego.mello 10:00:00 AM converted #channel-name to channel. " + accessible={true} + style={ + [ + { + "flexDirection": "row", + }, + { + "alignItems": "center", + }, + ] + } + > + <View + style={ + { + "alignItems": "flex-end", + "width": 46.800000000000004, + } + } + > + <View + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 26, + "width": 26, + }, + undefined, + ] + } + testID="avatar" + > + <View + accessibilityLabel="diego.mello's avatar" + accessibilityState={ + { + "busy": undefined, + "checked": undefined, + "disabled": undefined, + "expanded": undefined, + "selected": undefined, + } + } + accessibilityValue={ + { + "max": undefined, + "min": undefined, + "now": undefined, + "text": undefined, + } + } + accessible={true} + collapsable={false} + focusable={true} + onClick={[Function]} + onResponderGrant={[Function]} + onResponderMove={[Function]} + onResponderRelease={[Function]} + onResponderTerminate={[Function]} + onResponderTerminationRequest={[Function]} + onStartShouldSetResponder={[Function]} + style={ + { + "opacity": 1, + } + } + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={26} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=52", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 26, + "width": 26, + } + } + transition={null} + width={26} + /> + </View> + </View> + </View> + <A11yIndexView + accessibilityLabel="channel-name" + importantForAccessibility="yes" + orderFocusType={0} + orderIndex={2} + orderKey=":r85:" > <View style={ @@ -102098,7 +102890,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="converted #channel-name to a team" + accessibilityLabel="converted #channel-name to channel" style={ [ { @@ -102114,7 +102906,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - converted #channel-name to a team + converted #channel-name to channel </Text> </Text> </View> @@ -102123,7 +102915,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r83:" + orderKey=":r86:" > <View style={ @@ -102142,7 +102934,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM converted #channel-name to channel. " + accessibilityLabel="diego.mello 10:00:00 AM deleted #channel-name. " accessible={true} style={ [ @@ -102258,7 +103050,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r83:" + orderKey=":r86:" > <View style={ @@ -102290,7 +103082,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="converted #channel-name to channel" + accessibilityLabel="deleted #channel-name" style={ [ { @@ -102306,7 +103098,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - converted #channel-name to channel + deleted #channel-name </Text> </Text> </View> @@ -102315,7 +103107,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r84:" + orderKey=":r87:" > <View style={ @@ -102334,7 +103126,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM deleted #channel-name. " + accessibilityLabel="diego.mello 10:00:00 AM removed #channel-name from this team. " accessible={true} style={ [ @@ -102450,7 +103242,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r84:" + orderKey=":r87:" > <View style={ @@ -102482,7 +103274,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="deleted #channel-name" + accessibilityLabel="removed #channel-name from this team" style={ [ { @@ -102498,7 +103290,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - deleted #channel-name + removed #channel-name from this team </Text> </Text> </View> @@ -102507,7 +103299,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </A11yOrderView> <A11yOrderView - orderKey=":r85:" + orderKey=":r88:" > <View style={ @@ -102526,7 +103318,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` } > <View - accessibilityLabel="diego.mello 10:00:00 AM removed #channel-name from this team. " + accessibilityLabel="diego.mello 10:00:00 AM was removed by ABAC. " accessible={true} style={ [ @@ -102638,11 +103430,11 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> <A11yIndexView - accessibilityLabel="channel-name" + accessibilityLabel="" importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r85:" + orderKey=":r88:" > <View style={ @@ -102674,7 +103466,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </Text> <Text - accessibilityLabel="removed #channel-name from this team" + accessibilityLabel="was removed by ABAC" style={ [ { @@ -102690,7 +103482,7 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` ] } > - removed #channel-name from this team + was removed by ABAC </Text> </Text> </View> @@ -102698,6 +103490,176 @@ exports[`Story Snapshots: SystemMessagesLargeFont should match snapshot 1`] = ` </View> </View> </A11yOrderView> + <A11yOrderView + orderKey=":r89:" + > + <View + style={ + [ + { + "flexDirection": "column", + "gap": 8, + "paddingHorizontal": 12, + "paddingVertical": 4, + "width": "100%", + }, + { + "marginTop": 4, + }, + ] + } + > + <View + accessibilityLabel="diego.mello 10:00:00 AM Unsupported system message. " + accessible={true} + style={ + [ + { + "flexDirection": "row", + }, + { + "alignItems": "center", + }, + ] + } + > + <View + style={ + { + "alignItems": "flex-end", + "width": 46.800000000000004, + } + } + > + <View + accessible={true} + style={ + [ + { + "borderRadius": 4, + "height": 26, + "width": 26, + }, + undefined, + ] + } + testID="avatar" + > + <View + accessibilityLabel="diego.mello's avatar" + accessibilityState={ + { + "busy": undefined, + "checked": undefined, + "disabled": undefined, + "expanded": undefined, + "selected": undefined, + } + } + accessibilityValue={ + { + "max": undefined, + "min": undefined, + "now": undefined, + "text": undefined, + } + } + accessible={true} + collapsable={false} + focusable={true} + onClick={[Function]} + onResponderGrant={[Function]} + onResponderMove={[Function]} + onResponderRelease={[Function]} + onResponderTerminate={[Function]} + onResponderTerminationRequest={[Function]} + onStartShouldSetResponder={[Function]} + style={ + { + "opacity": 1, + } + } + > + <ViewManagerAdapter_ExpoImage + borderRadius={4} + containerViewRef={"[React.ref]"} + contentFit="cover" + contentPosition={ + { + "left": "50%", + "top": "50%", + } + } + height={26} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + priority="high" + source={ + [ + { + "headers": { + "User-Agent": "RC Mobile; ios unknown; vunknown (unknown)", + }, + "uri": "https://open.rocket.chat/avatar/diego.mello?format=png&size=52", + }, + ] + } + style={ + { + "borderRadius": 4, + "height": 26, + "width": 26, + } + } + transition={null} + width={26} + /> + </View> + </View> + </View> + <A11yIndexView + accessibilityLabel="" + importantForAccessibility="yes" + orderFocusType={0} + orderIndex={2} + orderKey=":r89:" + > + <View + style={ + { + "flex": 1, + "marginLeft": 10, + } + } + > + <Text + accessibilityLabel="Unsupported system message" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + Unsupported system message + </Text> + </View> + </A11yIndexView> + </View> + </View> + </A11yOrderView> </View> </RCTScrollView> `; @@ -102712,13 +103674,13 @@ exports[`Story Snapshots: Temp should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r86:" + orderKey=":r8a:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r86:" + orderKey=":r8a:" > <View accessibilityState={ @@ -102774,7 +103736,7 @@ exports[`Story Snapshots: Temp should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r86:" + orderKey=":r8a:" > <View accessible={true} @@ -103092,13 +104054,13 @@ exports[`Story Snapshots: TempLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r87:" + orderKey=":r8b:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r87:" + orderKey=":r8b:" > <View accessibilityState={ @@ -103154,7 +104116,7 @@ exports[`Story Snapshots: TempLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r87:" + orderKey=":r8b:" > <View accessible={true} @@ -103472,13 +104434,13 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r88:" + orderKey=":r8c:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r88:" + orderKey=":r8c:" > <View accessibilityState={ @@ -103534,7 +104496,7 @@ exports[`Story Snapshots: ThumbnailFromServer should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r88:" + orderKey=":r8c:" > <View accessible={true} @@ -104053,13 +105015,13 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] > <View> <A11yOrderView - orderKey=":r89:" + orderKey=":r8d:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r89:" + orderKey=":r8d:" > <View accessibilityState={ @@ -104115,7 +105077,7 @@ exports[`Story Snapshots: ThumbnailFromServerLargeFont should match snapshot 1`] importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r89:" + orderKey=":r8d:" > <View accessible={true} @@ -104634,13 +105596,13 @@ exports[`Story Snapshots: TimeFormat should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8a:" + orderKey=":r8e:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8a:" + orderKey=":r8e:" > <View accessibilityState={ @@ -104696,7 +105658,7 @@ exports[`Story Snapshots: TimeFormat should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8a:" + orderKey=":r8e:" > <View accessible={true} @@ -105009,13 +105971,13 @@ exports[`Story Snapshots: TimeFormatLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8b:" + orderKey=":r8f:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8b:" + orderKey=":r8f:" > <View accessibilityState={ @@ -105071,7 +106033,7 @@ exports[`Story Snapshots: TimeFormatLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8b:" + orderKey=":r8f:" > <View accessible={true} @@ -105384,13 +106346,13 @@ exports[`Story Snapshots: Translated should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8c:" + orderKey=":r8g:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8c:" + orderKey=":r8g:" > <View accessibilityState={ @@ -105447,7 +106409,7 @@ exports[`Story Snapshots: Translated should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8c:" + orderKey=":r8g:" > <View accessible={true} @@ -105795,13 +106757,13 @@ exports[`Story Snapshots: TranslatedLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8d:" + orderKey=":r8h:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8d:" + orderKey=":r8h:" > <View accessibilityState={ @@ -105858,7 +106820,7 @@ exports[`Story Snapshots: TranslatedLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8d:" + orderKey=":r8h:" > <View accessible={true} @@ -106206,13 +107168,13 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdown should match snapshot > <View> <A11yOrderView - orderKey=":r8e:" + orderKey=":r8i:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8e:" + orderKey=":r8i:" > <View accessibilityState={ @@ -106268,7 +107230,7 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdown should match snapshot importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8e:" + orderKey=":r8i:" > <View accessible={true} @@ -107287,13 +108249,13 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdownLargeFont should match > <View> <A11yOrderView - orderKey=":r8f:" + orderKey=":r8j:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8f:" + orderKey=":r8j:" > <View accessibilityState={ @@ -107349,7 +108311,7 @@ exports[`Story Snapshots: TwoShortCustomFieldsWithMarkdownLargeFont should match importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8f:" + orderKey=":r8j:" > <View accessible={true} @@ -108368,13 +109330,13 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8g:" + orderKey=":r8k:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8g:" + orderKey=":r8k:" > <View accessibilityState={ @@ -108430,7 +109392,7 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8g:" + orderKey=":r8k:" > <View accessible={true} @@ -108857,13 +109819,13 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8h:" + orderKey=":r8l:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8h:" + orderKey=":r8l:" > <View accessibilityState={ @@ -108919,7 +109881,7 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8h:" + orderKey=":r8l:" > <View accessible={true} @@ -109205,38 +110167,52 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` > Message </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -109344,13 +110320,13 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8i:" + orderKey=":r8m:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8i:" + orderKey=":r8m:" > <View accessibilityState={ @@ -109406,7 +110382,7 @@ exports[`Story Snapshots: URL should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8i:" + orderKey=":r8m:" > <View accessible={true} @@ -109570,13 +110546,13 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8j:" + orderKey=":r8n:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8j:" + orderKey=":r8n:" > <View accessibilityState={ @@ -109632,7 +110608,7 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8j:" + orderKey=":r8n:" > <View accessible={true} @@ -109966,13 +110942,13 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8k:" + orderKey=":r8o:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8k:" + orderKey=":r8o:" > <View accessibilityState={ @@ -110028,7 +111004,7 @@ exports[`Story Snapshots: URLImagePreview should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8k:" + orderKey=":r8o:" > <View accessible={true} @@ -110319,13 +111295,13 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8l:" + orderKey=":r8p:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8l:" + orderKey=":r8p:" > <View accessibilityState={ @@ -110381,7 +111357,7 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8l:" + orderKey=":r8p:" > <View accessible={true} @@ -110715,13 +111691,13 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8m:" + orderKey=":r8q:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8m:" + orderKey=":r8q:" > <View accessibilityState={ @@ -110777,7 +111753,7 @@ exports[`Story Snapshots: URLImagePreviewLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8m:" + orderKey=":r8q:" > <View accessible={true} @@ -111068,13 +112044,13 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8n:" + orderKey=":r8r:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8n:" + orderKey=":r8r:" > <View accessibilityState={ @@ -111130,7 +112106,7 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8n:" + orderKey=":r8r:" > <View accessible={true} @@ -111557,13 +112533,13 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8o:" + orderKey=":r8s:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8o:" + orderKey=":r8s:" > <View accessibilityState={ @@ -111619,7 +112595,7 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8o:" + orderKey=":r8s:" > <View accessible={true} @@ -111905,38 +112881,52 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` > Message </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -112044,13 +113034,13 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8p:" + orderKey=":r8t:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8p:" + orderKey=":r8t:" > <View accessibilityState={ @@ -112106,7 +113096,7 @@ exports[`Story Snapshots: URLLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8p:" + orderKey=":r8t:" > <View accessible={true} @@ -112270,13 +113260,13 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8q:" + orderKey=":r8u:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8q:" + orderKey=":r8u:" > <View accessibilityState={ @@ -112332,7 +113322,7 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8q:" + orderKey=":r8u:" > <View accessible={true} @@ -112651,13 +113641,13 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8r:" + orderKey=":r8v:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8r:" + orderKey=":r8v:" > <View accessibilityState={ @@ -112713,7 +113703,7 @@ exports[`Story Snapshots: WithAlias should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8r:" + orderKey=":r8v:" > <View accessible={true} @@ -113045,13 +114035,13 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8s:" + orderKey=":r90:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8s:" + orderKey=":r90:" > <View accessibilityState={ @@ -113107,7 +114097,7 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8s:" + orderKey=":r90:" > <View accessible={true} @@ -113426,13 +114416,13 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8t:" + orderKey=":r91:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8t:" + orderKey=":r91:" > <View accessibilityState={ @@ -113488,7 +114478,7 @@ exports[`Story Snapshots: WithAliasLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8t:" + orderKey=":r91:" > <View accessible={true} @@ -113820,13 +114810,13 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r8u:" + orderKey=":r92:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8u:" + orderKey=":r92:" > <View accessibilityState={ @@ -113882,7 +114872,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8u:" + orderKey=":r92:" > <View accessible={true} @@ -114179,38 +115169,52 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -114469,13 +115473,13 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r8v:" + orderKey=":r93:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r8v:" + orderKey=":r93:" > <View accessibilityState={ @@ -114531,7 +115535,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r8v:" + orderKey=":r93:" > <View accessible={true} @@ -114648,13 +115652,13 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r90:" + orderKey=":r94:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r90:" + orderKey=":r94:" > <View accessibilityState={ @@ -114710,7 +115714,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r90:" + orderKey=":r94:" > <View accessible={true} @@ -115082,13 +116086,13 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r91:" + orderKey=":r95:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r91:" + orderKey=":r95:" > <View accessibilityState={ @@ -115144,7 +116148,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r91:" + orderKey=":r95:" > <View accessible={true} @@ -115461,13 +116465,13 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r92:" + orderKey=":r96:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r92:" + orderKey=":r96:" > <View accessibilityState={ @@ -115523,7 +116527,7 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r92:" + orderKey=":r96:" > <View accessible={true} @@ -115881,38 +116885,52 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -116442,13 +117460,13 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r93:" + orderKey=":r97:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r93:" + orderKey=":r97:" > <View accessibilityState={ @@ -116504,7 +117522,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r93:" + orderKey=":r97:" > <View accessible={true} @@ -116801,38 +117819,52 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -117091,13 +118123,13 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r94:" + orderKey=":r98:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r94:" + orderKey=":r98:" > <View accessibilityState={ @@ -117153,7 +118185,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r94:" + orderKey=":r98:" > <View accessible={true} @@ -117270,13 +118302,13 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r95:" + orderKey=":r99:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r95:" + orderKey=":r99:" > <View accessibilityState={ @@ -117332,7 +118364,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r95:" + orderKey=":r99:" > <View accessible={true} @@ -117704,13 +118736,13 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r96:" + orderKey=":r9a:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r96:" + orderKey=":r9a:" > <View accessibilityState={ @@ -117766,7 +118798,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r96:" + orderKey=":r9a:" > <View accessible={true} @@ -118083,13 +119115,13 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r97:" + orderKey=":r9b:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r97:" + orderKey=":r9b:" > <View accessibilityState={ @@ -118145,7 +119177,7 @@ exports[`Story Snapshots: WithAudioLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r97:" + orderKey=":r9b:" > <View accessible={true} @@ -118475,13 +119507,13 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r98:" + orderKey=":r9c:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r98:" + orderKey=":r9c:" > <View accessibilityState={ @@ -118537,7 +119569,7 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r98:" + orderKey=":r9c:" > <View accessible={true} @@ -118964,38 +119996,52 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -119011,13 +120057,13 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r99:" + orderKey=":r9d:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r99:" + orderKey=":r9d:" > <View accessibilityState={ @@ -119073,7 +120119,7 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r99:" + orderKey=":r9d:" > <View accessible={true} @@ -119310,38 +120356,52 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -119535,38 +120595,52 @@ exports[`Story Snapshots: WithFile should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -119602,13 +120676,13 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9a:" + orderKey=":r9e:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9a:" + orderKey=":r9e:" > <View accessibilityState={ @@ -119664,7 +120738,7 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9a:" + orderKey=":r9e:" > <View accessible={true} @@ -120091,38 +121165,52 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -120138,13 +121226,13 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9b:" + orderKey=":r9f:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9b:" + orderKey=":r9f:" > <View accessibilityState={ @@ -120200,7 +121288,7 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9b:" + orderKey=":r9f:" > <View accessible={true} @@ -120437,38 +121525,52 @@ exports[`Story Snapshots: WithFileLargeFont should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -120504,13 +121606,13 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9c:" + orderKey=":r9g:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9c:" + orderKey=":r9g:" > <View accessibilityState={ @@ -120566,7 +121668,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9c:" + orderKey=":r9g:" > <View accessible={true} @@ -121036,13 +122138,13 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9d:" + orderKey=":r9h:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9d:" + orderKey=":r9h:" > <View accessibilityState={ @@ -121098,7 +122200,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9d:" + orderKey=":r9h:" > <View accessible={true} @@ -121454,38 +122556,52 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -121707,38 +122823,52 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -122070,13 +123200,13 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9e:" + orderKey=":r9i:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9e:" + orderKey=":r9i:" > <View accessibilityState={ @@ -122132,7 +123262,7 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9e:" + orderKey=":r9i:" > <View accessible={true} @@ -122429,38 +123559,52 @@ exports[`Story Snapshots: WithImage should match snapshot 1`] = ` > This is a description for Base64 Attachment </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -122634,13 +123778,13 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9f:" + orderKey=":r9j:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9f:" + orderKey=":r9j:" > <View accessibilityState={ @@ -122696,7 +123840,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9f:" + orderKey=":r9j:" > <View accessible={true} @@ -123166,13 +124310,13 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9g:" + orderKey=":r9k:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9g:" + orderKey=":r9k:" > <View accessibilityState={ @@ -123228,7 +124372,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9g:" + orderKey=":r9k:" > <View accessible={true} @@ -123525,38 +124669,52 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -123730,13 +124888,13 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9h:" + orderKey=":r9l:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9h:" + orderKey=":r9l:" > <View accessibilityState={ @@ -123792,7 +124950,7 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9h:" + orderKey=":r9l:" > <View accessible={true} @@ -124089,38 +125247,52 @@ exports[`Story Snapshots: WithImageLargeFont should match snapshot 1`] = ` > This is a description for Base64 Attachment </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -124294,13 +125466,13 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9i:" + orderKey=":r9m:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9i:" + orderKey=":r9m:" > <View accessibilityState={ @@ -124356,7 +125528,7 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9i:" + orderKey=":r9m:" > <View accessible={true} @@ -124653,38 +125825,52 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -124818,13 +126004,13 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9j:" + orderKey=":r9n:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9j:" + orderKey=":r9n:" > <View accessibilityState={ @@ -124880,7 +126066,7 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9j:" + orderKey=":r9n:" > <View accessible={true} @@ -125303,38 +126489,52 @@ exports[`Story Snapshots: WithVideo should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -125607,13 +126807,13 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9k:" + orderKey=":r9o:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9k:" + orderKey=":r9o:" > <View accessibilityState={ @@ -125669,7 +126869,7 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9k:" + orderKey=":r9o:" > <View accessible={true} @@ -125966,38 +127166,52 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` > This is a description </Text> - <ViewManagerAdapter_ExpoImage - containerViewRef={"[React.ref]"} - contentFit="contain" - contentPosition={ - { - "left": "50%", - "top": "50%", - } - } - height={15} - nativeViewRef={"[React.ref]"} - onError={[Function]} - onLoad={[Function]} - onLoadStart={[Function]} - onProgress={[Function]} - placeholder={[]} - source={ + <View + style={ [ { - "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + "transform": [ + { + "translateY": 3, + }, + ], }, ] } - style={ - { - "height": 15, - "width": 15, + > + <ViewManagerAdapter_ExpoImage + containerViewRef={"[React.ref]"} + contentFit="contain" + contentPosition={ + { + "left": "50%", + "top": "50%", + } } - } - transition={null} - width={15} - /> + height={15} + nativeViewRef={"[React.ref]"} + onError={[Function]} + onLoad={[Function]} + onLoadStart={[Function]} + onProgress={[Function]} + placeholder={[]} + source={ + [ + { + "uri": "https://open.rocket.chat/emoji-custom/nyan_rocket.png", + }, + ] + } + style={ + { + "height": 15, + "width": 15, + } + } + transition={null} + width={15} + /> + </View> </Text> </Text> </View> @@ -126131,13 +127345,13 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` </A11yIndexView> </A11yOrderView> <A11yOrderView - orderKey=":r9l:" + orderKey=":r9p:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9l:" + orderKey=":r9p:" > <View accessibilityState={ @@ -126193,7 +127407,7 @@ exports[`Story Snapshots: WithVideoLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9l:" + orderKey=":r9p:" > <View accessible={true} @@ -126581,13 +127795,13 @@ exports[`Story Snapshots: WithoutHeader should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9m:" + orderKey=":r9q:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9m:" + orderKey=":r9q:" > <View accessibilityState={ @@ -126643,7 +127857,7 @@ exports[`Story Snapshots: WithoutHeader should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9m:" + orderKey=":r9q:" > <View accessible={true} @@ -126773,13 +127987,13 @@ exports[`Story Snapshots: WithoutHeaderLargeFont should match snapshot 1`] = ` > <View> <A11yOrderView - orderKey=":r9n:" + orderKey=":r9r:" > <A11yIndexView importantForAccessibility="yes" orderFocusType={0} orderIndex={1} - orderKey=":r9n:" + orderKey=":r9r:" > <View accessibilityState={ @@ -126835,7 +128049,7 @@ exports[`Story Snapshots: WithoutHeaderLargeFont should match snapshot 1`] = ` importantForAccessibility="yes" orderFocusType={0} orderIndex={2} - orderKey=":r9n:" + orderKey=":r9r:" > <View accessible={true} diff --git a/app/containers/message/utils.ts b/app/containers/message/utils.ts index 384d0fac67c..fef218699d0 100644 --- a/app/containers/message/utils.ts +++ b/app/containers/message/utils.ts @@ -75,7 +75,8 @@ const messagesWithAuthorName: MessageTypesValues[] = [ 'user-unmuted', 'room-unarchived', 'subscription-role-added', - 'subscription-role-removed' + 'subscription-role-removed', + 'abac-removed-user-from-room' ]; export const messageHaveAuthorName = (type: MessageTypesValues): boolean => messagesWithAuthorName.includes(type); @@ -159,6 +160,8 @@ export const getInfoMessage = ({ type, role, msg, author, comment }: TInfoMessag return I18n.t('Removed_user_as_role', { user: msg, role }); case 'message_pinned': return I18n.t('Pinned_a_message'); + case 'abac-removed-user-from-room': + return I18n.t('abac_removed_user_from_the_room'); // without author name case 'ul': diff --git a/app/definitions/IMessage.ts b/app/definitions/IMessage.ts index cd9c652320a..756228addec 100644 --- a/app/definitions/IMessage.ts +++ b/app/definitions/IMessage.ts @@ -272,7 +272,8 @@ export type MessageTypesValues = | OtrSystemMessages | 'message_pinned' | 'message_snippeted' - | 'jitsi_call_started'; + | 'jitsi_call_started' + | 'abac-removed-user-from-room'; export interface IAttachmentTranslations { [k: string]: string; diff --git a/app/definitions/IRoom.ts b/app/definitions/IRoom.ts index 64f0b8eb87e..e77221f13bc 100644 --- a/app/definitions/IRoom.ts +++ b/app/definitions/IRoom.ts @@ -163,7 +163,12 @@ export interface IServerRoom extends IRocketChatRecord { username?: string; nickname?: string; - federation?: any; + federation?: { + version: number; + mrid: string; + origin: string; + peer?: string; + }; roomsCount?: number; u: Pick<IUser, '_id' | 'username' | 'name'>; @@ -233,6 +238,7 @@ export interface IServerRoom extends IRocketChatRecord { isLastOwner?: boolean; federated?: boolean; + abacAttributes?: { key: string; values: string[] }[]; } export interface IRoomNotifications { diff --git a/app/definitions/ISubscription.ts b/app/definitions/ISubscription.ts index 17e09f329a1..6bbd836889b 100644 --- a/app/definitions/ISubscription.ts +++ b/app/definitions/ISubscription.ts @@ -116,6 +116,18 @@ export interface ISubscription { uploads: RelationModified<TUploadModel>; disableNotifications?: boolean; federated?: boolean; + abacAttributes?: { key: string; values: string[] }[]; + federation?: { + version: number; + mrid: string; + origin: string; + }; + inviter?: Required<Pick<IUser, '_id' | 'username'>> & Pick<IUser, 'name'>; +} + +export interface IInviteSubscription extends ISubscription { + status: 'INVITED'; + inviter: NonNullable<ISubscription['inviter']>; } export type TSubscriptionModel = ISubscription & diff --git a/app/definitions/rest/v1/directory.ts b/app/definitions/rest/v1/directory.ts index 34a96798705..125b5ad65f2 100644 --- a/app/definitions/rest/v1/directory.ts +++ b/app/definitions/rest/v1/directory.ts @@ -8,6 +8,6 @@ export type DirectoryEndpoint = { count: number; offset: number; sort: { [key: string]: number }; - }) => PaginatedResult<{ result: IServerRoom[] }>; + }) => PaginatedResult<{ result: IServerRoom[]; count: number }>; }; }; diff --git a/app/definitions/rest/v1/omnichannel.ts b/app/definitions/rest/v1/omnichannel.ts index f467ed176c7..0f3162d195e 100644 --- a/app/definitions/rest/v1/omnichannel.ts +++ b/app/definitions/rest/v1/omnichannel.ts @@ -19,6 +19,19 @@ export type OmnichannelEndpoints = { appearance: ISetting[]; }; }; + 'livechat/config/routing': { + GET: () => { + config: { + previewRoom: boolean; + showConnecting: boolean; + showQueue: boolean; + showQueueLink: boolean; + returnQueue: boolean; + enableTriggerAction: boolean; + autoAssignAgent: boolean; + }; + }; + }; 'livechat/visitors.info': { GET: (params: { visitorId: string }) => { visitor: ILivechatVisitor; @@ -122,6 +135,14 @@ export type OmnichannelEndpoints = { }>; }; + 'livechat/inquiries.take': { + POST: (params: { inquiryId: string }) => void; + }; + + 'livechat/inquiries.returnAsInquiry': { + POST: (params: { roomId: string; departmentId?: string }) => boolean; + }; + 'livechat/rooms': { GET: (params: { guest: string; diff --git a/app/definitions/rest/v1/rooms.ts b/app/definitions/rest/v1/rooms.ts index 0343a298a40..fdb75dbc5d0 100644 --- a/app/definitions/rest/v1/rooms.ts +++ b/app/definitions/rest/v1/rooms.ts @@ -44,6 +44,19 @@ export type RoomsEndpoints = { 'rooms.saveNotification': { POST: (params: { roomId: string; notifications: IRoomNotifications }) => {}; }; + 'rooms.muteUser': { + POST: (params: { roomId: string; userId: string }) => { + success: boolean; + }; + }; + 'rooms.unmuteUser': { + POST: (params: { rid: string; userId: string }) => { + success: boolean; + }; + }; + 'rooms.invite': { + POST: (params: { roomId: string; action: 'accept' | 'reject' }) => void; + }; }; export type TRoomsMediaResponse = { diff --git a/app/ee/omnichannel/containers/OmnichannelHeader/index.tsx b/app/ee/omnichannel/containers/OmnichannelHeader/index.tsx index c5bdb602d7e..1680db43703 100644 --- a/app/ee/omnichannel/containers/OmnichannelHeader/index.tsx +++ b/app/ee/omnichannel/containers/OmnichannelHeader/index.tsx @@ -71,7 +71,7 @@ const OmnichannelStatus = memo(() => { title='Omnichannel' color={colors.fontDefault} onPress={toggleLivechat} - additionalAcessibilityLabel={statusLivechat} + additionalAccessibilityLabel={statusLivechat} right={() => ( <View style={styles.omnichannelRightContainer}> <Switch value={isOmnichannelStatusAvailable(statusLivechat)} onValueChange={toggleLivechat} /> diff --git a/app/ee/omnichannel/lib/index.ts b/app/ee/omnichannel/lib/index.ts index 486749d005d..3b81d091be4 100644 --- a/app/ee/omnichannel/lib/index.ts +++ b/app/ee/omnichannel/lib/index.ts @@ -20,7 +20,13 @@ export const getInquiriesQueued = (serverVersion: string) => { // this inquiry is added to the db by the subscriptions stream // and will be removed by the queue stream // RC 2.4.0 -export const takeInquiry = (inquiryId: string) => sdk.methodCallWrapper('livechat:takeInquiry', inquiryId); +export const takeInquiry = (inquiryId: string, serverVersion: string) => { + if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '7.11.0')) { + return sdk.post('livechat/inquiries.take', { inquiryId }); + } + // Method removed in 8.0.0 + return sdk.methodCallWrapper('livechat:takeInquiry', inquiryId); +}; // RC 4.26 export const takeResume = (roomId: string) => sdk.methodCallWrapper('livechat:resumeOnHold', roomId); diff --git a/app/i18n/moment.ts b/app/i18n/dayjs.ts similarity index 69% rename from app/i18n/moment.ts rename to app/i18n/dayjs.ts index 88254b755df..32879525694 100644 --- a/app/i18n/moment.ts +++ b/app/i18n/dayjs.ts @@ -15,7 +15,8 @@ const localeKeys: { [key: string]: string } = { sv: 'sv', tr: 'tr', 'zh-CN': 'zh-cn', - 'zh-TW': 'zh-tw' + 'zh-TW': 'zh-tw', + no: 'nb' }; -export const toMomentLocale = (locale: string): string => localeKeys[locale]; +export const toDayJsLocale = (locale: string): string => localeKeys[locale] || locale; diff --git a/app/i18n/index.ts b/app/i18n/index.ts index 0124dffa5ce..91189b48d42 100644 --- a/app/i18n/index.ts +++ b/app/i18n/index.ts @@ -1,10 +1,9 @@ import i18n from 'i18n-js'; import { I18nManager } from 'react-native'; import * as RNLocalize from 'react-native-localize'; -import moment from 'moment'; -import 'moment/min/locales'; -import { toMomentLocale } from './moment'; +import dayjs from '../lib/dayjs/index'; +import { toDayJsLocale } from './dayjs'; import { isRTL } from './isRTL'; import englishJson from './locales/en.json'; @@ -177,7 +176,7 @@ export const setLanguage = (l: string) => { // TODO: Review this logic // @ts-ignore i18n.isRTL = I18nManager.isRTL; - moment.locale(toMomentLocale(locale)); + dayjs.locale(toDayJsLocale(locale)); }; i18n.translations = { en: translations.en?.() }; diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index 16a412396c9..21e8858388d 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "رسالة جديدة من {{name}}: {{message}}", "A11y_incoming_call_dismiss": "تجاهل", "A11y_incoming_call_swipe_down_to_view_options": "اسحب لأسفل لعرض الخيارات", + "ABAC_disabled_action_reason": "غير متاح في الغرف المدارة بواسطة ABAC", + "ABAC_managed": "مدار بواسطة ABAC", + "ABAC_managed_description": "فقط المستخدمون المتوافقون لديهم حق الوصول إلى الغرف التي يتم التحكم فيها بالوصول المستند إلى السمات. تحدد السمات الوصول إلى الغرفة.", + "abac_removed_user_from_the_room": "تمت إزالته بواسطة ABAC", + "ABAC_room_attributes": "سمات الغرفة", "Accessibility": "إمكانية الوصول", "Accessibility_and_Appearance": "إمكانية الوصول والمظهر", "Accessibility_statement": "بيان الوصول", @@ -195,6 +200,7 @@ "error-invalid-file-type": "نوع الملف غير صالح", "error-invalid-password": "كلمة مرور خاطئة", "error-invalid-room-name": "{{room_name}} اسم الغرفة غير صالح", + "error-invitation-reply-action": "خطأ أثناء إرسال رد الدعوة", "error-not-allowed": "غير مسموح", "error-save-image": "خطأ عند حفظ الصورة", "error-save-video": "خطأ عند حفظ الفيديو", @@ -205,6 +211,9 @@ "Expiration_Days": "انتهاء (أيام)", "Favorite": "مفضل", "Favorites": "مفضلات", + "Federation_Matrix_room_description_disabled": "الاتحاد معطل حاليًا في مساحة العمل هذه", + "Federation_Matrix_room_description_invalid_version": "تم إنشاء هذه الغرفة بواسطة إصدار قديم من الاتحاد وهي محظورة بشكل غير محدد.", + "Federation_Matrix_room_description_missing_module": "الانضمام إلى الغرف المتصلة هو ميزة متميزة", "Fetch_image_from_URL": "جلب الصورة من الرابط", "Field_are_required": "{{field}} مطلوبة", "Field_is_required": "{{field}} مطلوب", @@ -255,6 +264,11 @@ "Invite_user_to_join_channel_all_from": "دعوة جميع المستخدمين من [‎#channel] إلى الانضمام إلى هذه القناة", "Invite_user_to_join_channel_all_to": "دعوة جميع المستخدمين من هذه القناة إلى الانضمام إلى [‎#channel]", "Invite_users": "دعوة المستخدمين", + "Invited": "مدعو", + "invited_room_description_channel": "تمت دعوتك بواسطة", + "invited_room_description_dm": "تمت دعوتك لإجراء محادثة مع", + "invited_room_title_channel": "دعوة للانضمام إلى {{room_name}}", + "invited_room_title_dm": "طلب رسالة", "IP": " عنوان بروتوكول الإنترنت (الآيبي)", "is_typing": "يكتب", "Join": "انضم", @@ -381,6 +395,7 @@ "Onboarding_less_options": "خيارات أقل", "Onboarding_more_options": "خيارات أكثر", "Onboarding_subtitle": "ما بعد بيئة فريق تعاونية", + "One_result_found": "نتيجة واحدة وُجدت.", "Online": "متصل", "Only_authorized_users_can_write_new_messages": "يمكن للمستخدمين المصرح لهم فقط كتابة رسائل جديدة", "Oops": "عفوًا!", @@ -442,6 +457,7 @@ "Record_audio_message": "تسجيل رسالة صوتية", "Register": "تسجيل", "Registration_Succeeded": "تم التسجيل بنجاح", + "reject": "رفض", "Remove": "حذف", "remove": "حذف", "Remove_from_workspace_history": "إزالة من سجل مساحة العمل", @@ -492,6 +508,7 @@ "Search_global_users_description": "إذا قمت بالتفعيل، فسيمكنك البحث عن أي مستخدم في شركات أو خوادم أخرى", "Search_Messages": "بحث الرسائل", "Search_messages": "رسائل البحث", + "Search_Results_found": "{{count}} تم العثور على نتائج.", "Security_and_privacy": "الأمن والخصوصية", "Select_a_Channel": "حدد قناة", "Select_a_Department": "حدد قسم", diff --git a/app/i18n/locales/bn-IN.json b/app/i18n/locales/bn-IN.json index 1ec5f231c61..410bf5ee2a7 100644 --- a/app/i18n/locales/bn-IN.json +++ b/app/i18n/locales/bn-IN.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "{{name}} থেকে নতুন বার্তা: {{message}}", "A11y_incoming_call_dismiss": "বন্ধ করুন", "A11y_incoming_call_swipe_down_to_view_options": "নির্বাচনগুলি দেখতে নিচে সোয়াইপ করুন", + "ABAC_disabled_action_reason": "ABAC-পরিচালিত রুমগুলিতে উপলব্ধ নয়", + "ABAC_managed": "ABAC দ্বারা পরিচালিত", + "ABAC_managed_description": "শুধুমাত্র অনুগত ব্যবহারকারীদের অ্যাট্রিবিউট-ভিত্তিক অ্যাক্সেস নিয়ন্ত্রিত রুমগুলিতে অ্যাক্সেস আছে। অ্যাট্রিবিউটগুলি রুমের অ্যাক্সেস নির্ধারণ করে।", + "abac_removed_user_from_the_room": "ABAC দ্বারা সরানো হয়েছে", + "ABAC_room_attributes": "রুমের বৈশিষ্ট্য", "accept": "গ্রহণ করুন", "Accessibility": "অ্যাক্সেসিবিলিটি", "Accessibility_and_Appearance": "অ্যাক্সেসিবিলিটি ও চেহারা", @@ -299,6 +304,7 @@ "error-invalid-file-type": "অবৈধ ফাইল টাইপ", "error-invalid-password": "অবৈধ পাসওয়ার্ড", "error-invalid-room-name": "{{room_name}} একটি বৈধ রুম নয়", + "error-invitation-reply-action": "আমন্ত্রণের উত্তর পাঠাতে ত্রুটি", "error-not-allowed": "অনুমোদিত নয়", "error-not-permission-to-upload-file": "আপলোড করতে আপনার অনুমতি নেই", "error-save-image": "ছবি সংরক্ষণে সমস্যা হয়েছে", @@ -312,6 +318,9 @@ "Expiration_Days": "মেয়াদ শেষ (দিন)", "Favorite": "প্রিয়", "Favorites": "প্রিয়সমূহ", + "Federation_Matrix_room_description_disabled": "এই ওয়ার্কস্পেসে ফেডারেশন বর্তমানে নিষ্ক্রিয়", + "Federation_Matrix_room_description_invalid_version": "এই রুমটি একটি পুরানো ফেডারেশন সংস্করণ দ্বারা তৈরি করা হয়েছিল এবং এটি অনির্দিষ্টকালের জন্য অবরুদ্ধ।", + "Federation_Matrix_room_description_missing_module": "ফেডারেটেড রুমে যোগদান একটি প্রিমিয়াম বৈশিষ্ট্য", "Fetch_image_from_URL": "URL থেকে ছবি আনুন", "Field_are_required": "{{field}} প্রয়োজনীয়।", "Field_is_required": "{{field}} প্রয়োজনীয়", @@ -369,6 +378,11 @@ "Invalid_workspace_URL": "অবৈধ ওয়ার্কস্পেস URL", "Invite_Link": "আমন্ত্রণ লিঙ্ক", "Invite_users": "ব্যবহারকারীদের আমন্ত্রণ করুন", + "Invited": "আমন্ত্রিত", + "invited_room_description_channel": "আপনাকে আমন্ত্রণ জানিয়েছেন", + "invited_room_description_dm": "আপনাকে একটি কথোপকথনের জন্য আমন্ত্রণ জানানো হয়েছে", + "invited_room_title_channel": "{{room_name}} এ যোগদানের আমন্ত্রণ", + "invited_room_title_dm": "বার্তা অনুরোধ", "IP": "IP", "is_typing": "টাইপ করছে", "Jitsi_authentication_before_making_calls": "জিতসি কল করার আগে সত্যাপন প্রয়োজন হতে পারে। তাদের নীতি সম্পর্কে আরও জানতে, জিতসি ওয়েবসাইট দেখুন।", @@ -549,6 +563,7 @@ "Onboarding_less_options": "কম বিকল্প", "Onboarding_more_options": "আরও বিকল্প", "Onboarding_subtitle": "দল সহযোগিতা বাদ দিন", + "One_result_found": "একটি ফলাফল পাওয়া গেছে।", "Online": "অনলাইন", "Only_authorized_users_can_write_new_messages": "কেবল অনুমোদিত ব্যবহারকারীরা নতুন বার্তা লিখতে পারবেন", "Oops": "ওহ!", @@ -617,6 +632,7 @@ "Record_audio_message": "শব্দবার্তা রেকর্ড করুন", "Register": "নিবন্ধন করুন", "Registration_Succeeded": "নিবন্ধন সফল!", + "reject": "প্রত্যাখ্যান", "Remove": "মুছুন", "remove": "মুছুন", "Remove_from_room": "রুম থেকে সরান", @@ -692,6 +708,7 @@ "Search_global_users_description": "আপনি এটি চালু করলে, আপনি অন্যান্য কোম্পানি বা ওয়ার্কস্পেস থেকে যেকোনো ব্যবহারকারীকে সন্ধান করতে পারবেন।", "Search_Messages": "মেসেজ খুঁজুন", "Search_messages": "বার্তা অনুসন্ধান করুন", + "Search_Results_found": "{{count}} ফলাফল পাওয়া গেছে।", "Searching": "অনুসন্ধান করা হচ্ছে", "Security_and_privacy": "নিরাপত্তা এবং গোপনীয়তা", "Select": "নির্বাচন করুন", diff --git a/app/i18n/locales/cs.json b/app/i18n/locales/cs.json index 4b8366a7eb5..6718cc41ef5 100644 --- a/app/i18n/locales/cs.json +++ b/app/i18n/locales/cs.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Nová zpráva od {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Zavřít", "A11y_incoming_call_swipe_down_to_view_options": "Přejetím dolů zobrazíte možnosti", + "ABAC_disabled_action_reason": "Není k dispozici v místnostech spravovaných systémem ABAC", + "ABAC_managed": "Spravováno ABAC", + "ABAC_managed_description": "Pouze vyhovující uživatelé mají přístup k místnostem řízeným přístupem na základě atributů. Atributy určují přístup k místnosti.", + "abac_removed_user_from_the_room": "byl odstraněn pomocí ABAC", + "ABAC_room_attributes": "Atributy místnosti", "accept": "Akceptovat", "Accessibility": "Přístupnost", "Accessibility_and_Appearance": "Přístupnost a vzhled", @@ -318,6 +323,7 @@ "error-invalid-file-type": "Neplatný typ souboru", "error-invalid-password": "Neplatné heslo", "error-invalid-room-name": "{{room_name}} není platný název místnosti", + "error-invitation-reply-action": "Chyba při odesílání odpovědi na pozvánku", "error-no-tokens-for-this-user": "Pro tohoto uživatele neexistují žádné tokeny", "error-not-allowed": "Nepovoleno", "error-not-permission-to-upload-file": "Nemáte oprávnění nahrávat soubory", @@ -332,6 +338,9 @@ "Expiration_Days": "Vypršení platnosti (dny)", "Favorite": "Oblíbený", "Favorites": "Oblíbené", + "Federation_Matrix_room_description_disabled": "Federace je v tomto pracovním prostoru aktuálně zakázána", + "Federation_Matrix_room_description_invalid_version": "Tato místnost byla vytvořena starou verzí Federace a je na neurčito blokována.", + "Federation_Matrix_room_description_missing_module": "Připojení k federovaným místnostem je prémiová funkce", "Fetch_image_from_URL": "Načíst obrázek z URL", "Field_are_required": "{{field}} jsou povinné.", "Field_is_required": "{{field}} je povinný.", @@ -397,6 +406,11 @@ "Invite_user_to_join_channel_all_from": "Pozvat všechny uživatele z [#channel], aby se připojili k tomuto kanálu", "Invite_user_to_join_channel_all_to": "Pozvat všechny uživatele z tohoto kanálu, aby se připojili ke [#channel]", "Invite_users": "Pozvat uživatele", + "Invited": "Pozván", + "invited_room_description_channel": "Byli jste pozváni uživatelem", + "invited_room_description_dm": "Byli jste pozváni k rozhovoru s", + "invited_room_title_channel": "Pozvánka k připojení k {{room_name}}", + "invited_room_title_dm": "Žádost o zprávu", "IP": "IP", "is_typing": "píše", "Italic": "kurzíva", @@ -588,6 +602,7 @@ "Onboarding_less_options": "Méně možností", "Onboarding_more_options": "Více možností", "Onboarding_subtitle": "Mimo týmovou spolupráci", + "One_result_found": "Jeden výsledek nalezen.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Pouze oprávnění uživatelé mohou psát nové zprávy", "Oops": "Jejda!", @@ -661,6 +676,7 @@ "Recording_audio_in_progress": "Nahrávání zvukové zprávy", "Register": "Registrovat", "Registration_Succeeded": "Registrace byla úspěšná!", + "reject": "Odmítnout", "Remove": "Odstranit", "remove": "odstranit", "Remove_from_room": "Odebrat z místnosti", @@ -741,6 +757,7 @@ "Search_global_users_description": "Pokud zapnete, můžete vyhledat libovolného uživatele z jiných společností nebo pracovních prostorů.", "Search_Messages": "Hledat zprávy", "Search_messages": "Hledat zprávy", + "Search_Results_found": "{{count}} výsledků nalezeno.", "Searching": "Hledání", "Security_and_privacy": "Bezpečnost a soukromí", "Select": "Vybrat", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index 7e04282938e..4c2ba85c2ef 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Neue Nachricht von {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Verwerfen", "A11y_incoming_call_swipe_down_to_view_options": "Nach unten wischen, um Optionen anzuzeigen", + "ABAC_disabled_action_reason": "Nicht verfügbar in ABAC-verwalteten Räumen", + "ABAC_managed": "ABAC verwaltet", + "ABAC_managed_description": "Nur konforme Benutzer haben Zugriff auf attributbasierte zugriffsgesteuerte Räume. Attribute bestimmen den Raumzugriff.", + "abac_removed_user_from_the_room": "wurde durch ABAC entfernt", + "ABAC_room_attributes": "Raumattribute", "accept": "Annehmen", "Accessibility": "Barrierefreiheit", "Accessibility_and_Appearance": "Barrierefreiheit & Erscheinungsbild", @@ -293,6 +298,7 @@ "error-invalid-file-type": "Ungültiger Dateityp", "error-invalid-password": "Ungültiges Passwort", "error-invalid-room-name": "{{room_name}} ist kein gültiger Room-Name", + "error-invitation-reply-action": "Fehler beim Senden der Einladungsantwort", "error-not-allowed": "Nicht erlaubt", "error-not-permission-to-upload-file": "Sie haben keine Berechtigung zum Hochladen von Dateien", "error-save-image": "Fehler beim Speichern des Bildes", @@ -306,6 +312,9 @@ "Expiration_Days": "läuft ab (Tage)", "Favorite": "Lieblings-", "Favorites": "Favoriten", + "Federation_Matrix_room_description_disabled": "Föderation ist derzeit in diesem Arbeitsbereich deaktiviert", + "Federation_Matrix_room_description_invalid_version": "Dieser Raum wurde mit einer alten Föderationsversion erstellt und ist unbestimmt blockiert.", + "Federation_Matrix_room_description_missing_module": "Beitritt zu föderierten Räumen ist eine Premium-Funktion", "Fetch_image_from_URL": "Bild von URL abrufen", "Field_are_required": "{{field}} sind erforderlich", "Field_is_required": "{{field}} ist erforderlich", @@ -365,6 +374,11 @@ "Invite_user_to_join_channel_all_from": "Alle Benutzer des Channels [#channel] einladen, diesem Channel zu folgen", "Invite_user_to_join_channel_all_to": "Alle Benutzer dieses Channels einladen, dem Channel [#channel] zu folgen", "Invite_users": "Benutzer einladen", + "Invited": "Eingeladen", + "invited_room_description_channel": "Sie wurden eingeladen von", + "invited_room_description_dm": "Sie wurden zu einem Gespräch eingeladen", + "invited_room_title_channel": "Einladung zum Beitritt zu {{room_name}}", + "invited_room_title_dm": "Nachrichtenanfrage", "IP": "IP", "is_typing": "schreibt", "Join": "Beitreten", @@ -538,6 +552,7 @@ "Onboarding_less_options": "Weniger Optionen", "Onboarding_more_options": "Mehr Optionen", "Onboarding_subtitle": "Mehr als Team-Zusammenarbeit", + "One_result_found": "Ein Ergebnis gefunden.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Nur autorisierte Benutzer können neue Nachrichten schreiben", "Oops": "Hoppla!", @@ -604,6 +619,7 @@ "Record_audio_message": "Audioaufnahme aufzeichnen", "Register": "Registrieren", "Registration_Succeeded": "Registrierung erfolgreich!", + "reject": "Ablehnen", "Remove": "Entfernen", "remove": "entfernen", "Remove_from_room": "Aus dem Room entfernen", @@ -679,6 +695,7 @@ "Search_global_users_description": "Wenn aktiviert, Können Sie nach Benutzern von anderen Unternehmen oder Servern suchen.", "Search_Messages": "Nachrichten suchen", "Search_messages": "Nachrichten durchsuchen", + "Search_Results_found": "{{count}} Ergebnisse gefunden.", "Searching": "Suche", "Security_and_privacy": "Sicherheit und Datenschutz", "Select_a_Channel": "Channel auswählen", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 5ba3ce15feb..20adc12eb90 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "New message from {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Dismiss", "A11y_incoming_call_swipe_down_to_view_options": "Swipe down to view options", + "ABAC_disabled_action_reason": "Not available in ABAC-managed rooms", + "ABAC_managed": "ABAC managed", + "ABAC_managed_description": "Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access.", + "abac_removed_user_from_the_room": "was removed by ABAC", + "ABAC_room_attributes": "Room attributes", "accept": "Accept", "Accessibility": "Accessibility", "Accessibility_and_Appearance": "Accessibility & appearance", @@ -337,6 +342,7 @@ "error-invalid-file-type": "Invalid file type", "error-invalid-password": "Invalid password", "error-invalid-room-name": "{{room_name}} is not a valid room name", + "error-invitation-reply-action": "Error while sending invitation reply", "error-no-tokens-for-this-user": "There are no tokens for this user", "error-not-allowed": "Not allowed", "error-not-permission-to-upload-file": "You don't have permission to upload files", @@ -351,6 +357,9 @@ "Expiration_Days": "Expiration (days)", "Favorite": "Favorite", "Favorites": "Favorites", + "Federation_Matrix_room_description_disabled": "Federation is currently disabled on this workspace", + "Federation_Matrix_room_description_invalid_version": "This room was created by an old Federation version and it's blocked indeterminately.", + "Federation_Matrix_room_description_missing_module": "Joining federated rooms is a Premium feature", "Fetch_image_from_URL": "Fetch image from URL", "Field_are_required": "{{field}} are required", "Field_is_required": "{{field}} is required", @@ -416,6 +425,11 @@ "Invite_user_to_join_channel_all_from": "Invite all users from [#channel] to join this channel", "Invite_user_to_join_channel_all_to": "Invite all users from this channel to join [#channel]", "Invite_users": "Invite users", + "Invited": "Invited", + "invited_room_description_channel": "You've been invited by", + "invited_room_description_dm": "You've been invited to have a conversation with", + "invited_room_title_channel": "Invitation to join {{room_name}}", + "invited_room_title_dm": "Message request", "IP": "IP", "is_typing": "is typing", "Italic": "Italic", @@ -609,6 +623,7 @@ "Onboarding_less_options": "Less options", "Onboarding_more_options": "More options", "Onboarding_subtitle": "Beyond team collaboration", + "One_result_found": "One result found.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Only authorized users can write new messages", "Oops": "Oops!", @@ -683,6 +698,7 @@ "Recording_audio_in_progress": "Recording audio message", "Register": "Register", "Registration_Succeeded": "Registration succeeded!", + "reject": "Reject", "Remove": "Remove", "remove": "remove", "Remove_from_room": "Remove from room", @@ -768,6 +784,7 @@ "Search_global_users_description": "If you turn-on, you can search for any user from others companies or workspacess.", "Search_Messages": "Search messages", "Search_messages": "Search messages", + "Search_Results_found": "{{count}} results found.", "Searching": "Searching", "Security_and_privacy": "Security and privacy", "Select": "Select", diff --git a/app/i18n/locales/es.json b/app/i18n/locales/es.json index fe63e1ce387..72e0d6b62ff 100644 --- a/app/i18n/locales/es.json +++ b/app/i18n/locales/es.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "Nuevo mensaje de {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Descartar", "A11y_incoming_call_swipe_down_to_view_options": "Desliza hacia abajo para ver opciones", + "ABAC_disabled_action_reason": "No disponible en salas gestionadas por ABAC", + "ABAC_managed": "Gestionado por ABAC", + "ABAC_managed_description": "Solo los usuarios compatibles tienen acceso a las salas controladas por acceso basado en atributos. Los atributos determinan el acceso a la sala.", + "abac_removed_user_from_the_room": "fue eliminado por ABAC", + "ABAC_room_attributes": "Atributos de la sala", "Accessibility": "Accesibilidad", "Accessibility_and_Appearance": "Accesibilidad y apariencia", "Accessibility_statement": "Declaración de accesibilidad", @@ -160,12 +165,16 @@ "error-invalid-file-type": "El formato del archivo no es correcto", "error-invalid-password": "La contraseña no es correcta", "error-invalid-room-name": "No se puede asignar el nombre {{room_name}} a una sala.", + "error-invitation-reply-action": "Error al enviar respuesta de invitación", "error-not-allowed": "No permitido", "error-too-many-requests": "Error, demasiadas peticiones. Debes esperar {{seconds}} segundos antes de continuar. Por favor, sé paciente.", "error-you-are-last-owner": "Eres el único propietario existente. Debes establecer un nuevo propietario antes de abandonar la sala.", "Everyone_can_access_this_channel": "Todos los usuarios pueden acceder a este canal", "Favorite": "Favorito", "Favorites": "Favoritos", + "Federation_Matrix_room_description_disabled": "La federación está actualmente deshabilitada en este espacio de trabajo", + "Federation_Matrix_room_description_invalid_version": "Esta sala fue creada por una versión antigua de Federación y está bloqueada indefinidamente.", + "Federation_Matrix_room_description_missing_module": "Unirse a salas federadas es una función Premium", "Fetch_image_from_URL": "Obtener imagen desde URL", "Field_are_required": "{{field}} son obligatorios", "Field_is_required": "{{field}} es obligatorio", @@ -203,6 +212,12 @@ "Invite_user_to_join_channel": "Invitar a un usuario a unirse a este canal", "Invite_user_to_join_channel_all_from": "Invitar a todos los usuarios de [#channell] a que se unan a este canal", "Invite_user_to_join_channel_all_to": "Invitar a todos los usuarios de este canal a unirse a [#channel]", + "Invite_users": "Invitar usuarios", + "Invited": "Invitado", + "invited_room_description_channel": "Has sido invitado por", + "invited_room_description_dm": "Has sido invitado a tener una conversación con", + "invited_room_title_channel": "Invitación para unirse a {{room_name}}", + "invited_room_title_dm": "Solicitud de mensaje", "is_typing": "escribiendo", "Join": "Conectar", "Join_the_given_channel": "Unirse al canal dado", @@ -275,6 +290,7 @@ "Notify_all_in_this_room": "Notificar a todos en esta sala", "Objects": "Objetos", "Offline": "Desconectado", + "One_result_found": "Un resultado encontrado.", "Online": "Conectado", "Only_authorized_users_can_write_new_messages": "Sólo pueden escribir mensajes usuarios autorizados", "Oops": "Oops!", @@ -317,6 +333,7 @@ "Recently_used": "Recientemente usado", "Record_audio_message": "Grabar mensaje de audio", "Register": "Registrar", + "reject": "Rechazar", "Remove_from_workspace_history": "Eliminar del historial del espacio de trabajo", "Remove_someone_from_room": "Eliminar a alguien de la sala", "replies": "respuestas", @@ -350,6 +367,7 @@ "Search_global_users_description": "Si lo activas, puedes buscar cualquier usuario de otras empresas o servidores.", "Search_Messages": "Buscar mensajes", "Search_messages": "Buscar mensajes", + "Search_Results_found": "{{count}} resultados encontrados.", "Select_emoji_reaction": "Seleccionar reacción de emoji", "Select_Server": "Selecciona servidor", "Select_Uploaded_Image": "Seleccionar imagen cargada", diff --git a/app/i18n/locales/fi.json b/app/i18n/locales/fi.json index 086abf715f9..377f38d5c34 100644 --- a/app/i18n/locales/fi.json +++ b/app/i18n/locales/fi.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Uusi viesti {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Hylkää", "A11y_incoming_call_swipe_down_to_view_options": "Pyyhkäise alas nähdäksesi vaihtoehdot", + "ABAC_disabled_action_reason": "Ei saatavilla ABAC-hallituissa huoneissa", + "ABAC_managed": "ABAC-hallittu", + "ABAC_managed_description": "Vain yhteensopivilla käyttäjillä on pääsy attribuuttipohjaisesti hallittuihin huoneisiin. Attribuutit määrittävät huoneen pääsyn.", + "abac_removed_user_from_the_room": "poistettiin ABAC:n toimesta", + "ABAC_room_attributes": "Huoneen attribuutit", "Accessibility": "Saavutettavuus", "Accessibility_and_Appearance": "Saavutettavuus ja ulkonäkö", "Accessibility_statement": "Saavutettavuusilmoitus", @@ -278,6 +283,7 @@ "error-invalid-file-type": "Virheellinen tiedostotyyppi", "error-invalid-password": "Virheellinen salasana", "error-invalid-room-name": "{{room_name}} ei ole kelvollinen huoneen nimi", + "error-invitation-reply-action": "Virhe kutsuun vastaamisen lähettämisessä", "error-not-allowed": "Ei sallittu", "error-not-permission-to-upload-file": "Sinulla ei ole oikeutta ladata tiedostoja", "error-save-image": "Virhe tallennettaessa kuvaa", @@ -291,6 +297,9 @@ "Expiration_Days": "Vanheneminen (päivää)", "Favorite": "Suosikki", "Favorites": "Suosikit", + "Federation_Matrix_room_description_disabled": "Federointi on tällä hetkellä poistettu käytöstä tässä työtilassa", + "Federation_Matrix_room_description_invalid_version": "Tämä huone luotiin vanhalla Federointi-versiolla ja se on estetty määrittelemättömästi.", + "Federation_Matrix_room_description_missing_module": "Liittyminen federoiduihin huoneisiin on Premium-ominaisuus", "Fetch_image_from_URL": "Hae kuva URL-osoitteesta", "Field_are_required": "{{field}} ovat pakollisia.", "Field_is_required": "{{field}} on pakollinen", @@ -347,6 +356,11 @@ "Invite_user_to_join_channel_all_from": "Kutsu kaikki käyttäjät kanavalta [#channel] liittymään tälle kanavalle", "Invite_user_to_join_channel_all_to": "Kutsu kaikki tämän kanavan käyttäjät liittymään kanavalle [#channel]", "Invite_users": "Kutsu käyttäjiä", + "Invited": "Kutsuttu", + "invited_room_description_channel": "Sinut on kutsuttu käyttäjän", + "invited_room_description_dm": "Sinut on kutsuttu keskustelemaan käyttäjän", + "invited_room_title_channel": "Kutsu liittyä {{room_name}}", + "invited_room_title_dm": "Viestipyyntö", "IP": "IP", "is_typing": "kirjoittaa", "Join": "Liity", @@ -515,6 +529,7 @@ "Onboarding_less_options": "Vähemmän vaihtoehtoja", "Onboarding_more_options": "Enemmän vaihtoehtoja", "Onboarding_subtitle": "Enemmän kuin ryhmäyhteistyötä", + "One_result_found": "Yksi tulos löytyi.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Vain valtuutetut käyttäjät voivat kirjoittaa uusia viestejä", "Oops": "Oho!", @@ -579,6 +594,7 @@ "Record_audio_message": "Tallenna ääniviesti", "Register": "Rekisteröi", "Registration_Succeeded": "Rekisteröinti onnistui!", + "reject": "Hylkää", "Remove": "Poista", "remove": "poista", "Remove_from_room": "Poista huoneesta", @@ -654,6 +670,7 @@ "Search_global_users_description": "Jos otat tämän käyttöön, voit etsiä käyttäjiä muista yrityksistä tai palvelimista.", "Search_Messages": "Hae viestejä", "Search_messages": "Hae viestejä", + "Search_Results_found": "{{count}} hakutulosta löytyi.", "Searching": "Haetaan", "Security_and_privacy": "Turvallisuus ja yksityisyys", "Select_a_Channel": "Valitse kanava", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 7f6994edc02..eb65e6e5ab8 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "Nouveau message de {{name}} : {{message}}", "A11y_incoming_call_dismiss": "Ignorer", "A11y_incoming_call_swipe_down_to_view_options": "Faites glisser vers le bas pour voir les options", + "ABAC_disabled_action_reason": "Non disponible dans les salles gérées par ABAC", + "ABAC_managed": "Géré par ABAC", + "ABAC_managed_description": "Seuls les utilisateurs conformes ont accès aux salles contrôlées par accès basé sur les attributs. Les attributs déterminent l'accès à la salle.", + "abac_removed_user_from_the_room": "a été supprimé par ABAC", + "ABAC_room_attributes": "Attributs de la salle", "Accessibility": "Accessibilité", "Accessibility_and_Appearance": "Accessibilité et apparence", "Accessibility_statement": "Déclaration d'accessibilité", @@ -244,6 +249,7 @@ "error-invalid-file-type": "Type de fichier invalide", "error-invalid-password": "Mot de passe incorrect", "error-invalid-room-name": "{{room_name}} n'est pas un nom de salon valide", + "error-invitation-reply-action": "Erreur lors de l'envoi de la réponse à l'invitation", "error-not-allowed": "Interdit", "error-not-permission-to-upload-file": "Vous n'êtes pas autorisé à envoyer des fichiers", "error-save-image": "Erreur lors de l'enregistrement de l'image", @@ -257,6 +263,9 @@ "Expiration_Days": "Expiration (Jours)", "Favorite": "Favori", "Favorites": "Favoris", + "Federation_Matrix_room_description_disabled": "La fédération est actuellement désactivée sur cet espace de travail", + "Federation_Matrix_room_description_invalid_version": "Cette salle a été créée par une ancienne version de Fédération et est bloquée indéfiniment.", + "Federation_Matrix_room_description_missing_module": "Rejoindre les salles fédérées est une fonctionnalité Premium", "Fetch_image_from_URL": "Récupérer l'image depuis l'URL", "Field_are_required": "Les {{field}} sont requis.", "Field_is_required": "Le champ {{field}} est requis.", @@ -312,6 +321,11 @@ "Invite_user_to_join_channel_all_from": "Inviter tous les utilisateurs de [#channel] à rejoindre ce canal", "Invite_user_to_join_channel_all_to": "Inviter tous les utilisateurs de ce canal à rejoindre [#channel]", "Invite_users": "Inviter des utilisateurs", + "Invited": "Invité", + "invited_room_description_channel": "Vous avez été invité par", + "invited_room_description_dm": "Vous avez été invité à avoir une conversation avec", + "invited_room_title_channel": "Invitation à rejoindre {{room_name}}", + "invited_room_title_dm": "Demande de message", "IP": "IP", "is_typing": "est en train d'écrire", "Join": "Rejoindre", @@ -475,6 +489,7 @@ "Onboarding_less_options": "Moins d'options", "Onboarding_more_options": "Plus d'options", "Onboarding_subtitle": "Au-delà de la collaboration d'équipe", + "One_result_found": "Un résultat trouvé.", "Online": "En ligne", "Only_authorized_users_can_write_new_messages": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages.", "Oops": "Oups !", @@ -539,6 +554,7 @@ "Record_audio_message": "Enregistrer un message audio", "Register": "S'inscrire", "Registration_Succeeded": "Inscription réussie !", + "reject": "Rejeter", "Remove": "Supprimer", "remove": "supprimer", "Remove_from_room": "Retirer du salon", @@ -598,6 +614,7 @@ "Search_global_users_description": "Si vous activez, vous pouvez rechercher n'importe quel utilisateur d'autres sociétés ou serveurs.", "Search_Messages": "Rechercher des messages", "Search_messages": "Rechercher des messages", + "Search_Results_found": "{{count}} résultats trouvés.", "Searching": "Recherche", "Security_and_privacy": "Sécurité et vie privée", "Select_a_Channel": "Sélectionnez un canal", diff --git a/app/i18n/locales/hi-IN.json b/app/i18n/locales/hi-IN.json index 6697492b66e..78bb09a910e 100644 --- a/app/i18n/locales/hi-IN.json +++ b/app/i18n/locales/hi-IN.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "{{name}} से नया संदेश: {{message}}", "A11y_incoming_call_dismiss": "खारिज करें", "A11y_incoming_call_swipe_down_to_view_options": "विकल्प देखने के लिए नीचे स्वाइप करें", + "ABAC_disabled_action_reason": "ABAC-प्रबंधित कमरों में उपलब्ध नहीं है", + "ABAC_managed": "ABAC प्रबंधित", + "ABAC_managed_description": "केवल संगत उपयोगकर्ताओं के पास विशेषता-आधारित पहुँच नियंत्रित कमरों तक पहुँच है। विशेषताएँ कमरे तक पहुँच निर्धारित करती हैं।", + "abac_removed_user_from_the_room": "ABAC द्वारा हटाया गया", + "ABAC_room_attributes": "कमरे के गुण", "accept": "स्वीकार करें", "Accessibility": "प्रवेशयोग्यता", "Accessibility_and_Appearance": "प्रवेशयोग्यता और दृश्यता", @@ -299,6 +304,7 @@ "error-invalid-file-type": "अवैध फ़ाइल प्रकार", "error-invalid-password": "अवैध पासवर्ड", "error-invalid-room-name": "{{room_name}} एक वैध कमरा नाम नहीं है", + "error-invitation-reply-action": "आमंत्रण उत्तर भेजते समय त्रुटि", "error-not-allowed": "अनुमति नहीं है", "error-not-permission-to-upload-file": "आपको फ़ाइल अपलोड करने की अनुमति नहीं है", "error-save-image": "छवि सहेजते समय त्रुटि", @@ -312,6 +318,9 @@ "Expiration_Days": "समाप्ति (दिन)", "Favorite": "पसंदीदा", "Favorites": "पसंदीदा", + "Federation_Matrix_room_description_disabled": "इस वर्कस्पेस पर फेडरेशन वर्तमान में अक्षम है", + "Federation_Matrix_room_description_invalid_version": "यह रूम फेडरेशन के पुराने संस्करण द्वारा बनाया गया था और यह अनिश्चित काल के लिए अवरुद्ध है।", + "Federation_Matrix_room_description_missing_module": "फेडरेटेड रूम में शामिल होना एक प्रीमियम सुविधा है", "Fetch_image_from_URL": "URL से छवि प्राप्त करें", "Field_are_required": "{{field}} आवश्यक हैं।", "Field_is_required": "{{field}} आवश्यक है।", @@ -369,6 +378,11 @@ "Invalid_workspace_URL": "अमान्य कार्यक्षेत्र URL", "Invite_Link": "निमंत्रण लिंक", "Invite_users": "उपयोगकर्ताओं को निमंत्रित करें", + "Invited": "आमंत्रित", + "invited_room_description_channel": "आपको आमंत्रित किया गया है", + "invited_room_description_dm": "आपको बातचीत करने के लिए आमंत्रित किया गया है", + "invited_room_title_channel": "{{room_name}} में शामिल होने का निमंत्रण", + "invited_room_title_dm": "संदेश अनुरोध", "IP": "आईपी", "is_typing": "टाइप कर रहा है", "Jitsi_authentication_before_making_calls": "कॉल करने से पहले जिट्सी को पहले से पहले प्रमाणीकरण की आवश्यकता हो सकती है। उनकी नीतियों के बारे में अधिक जानकारी प्राप्त करने के लिए, जिट्सी वेबसाइट पर जाएं।", @@ -549,6 +563,7 @@ "Onboarding_less_options": "कम विकल्प", "Onboarding_more_options": "अधिक विकल्प", "Onboarding_subtitle": "टीम सहयोग के पार", + "One_result_found": "एक परिणाम मिला।", "Online": "ऑनलाइन", "Only_authorized_users_can_write_new_messages": "केवल अधिकृत उपयोगकर्ताएँ नए संदेश लिख सकती हैं", "Oops": "ऊपस!", @@ -617,6 +632,7 @@ "Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें", "Register": "रजिस्टर", "Registration_Succeeded": "पंजीकरण सफल हुआ!", + "reject": "अस्वीकार", "Remove": "हटाएं", "remove": "हटाएं", "Remove_from_room": "कमरे से हटाएं", @@ -692,6 +708,7 @@ "Search_global_users_description": "आप इसे ऑन करते हैं, तो आप अन्य कंपनियों या कार्यस्थानों से किसी भी उपयोगकर्ता की खोज कर सकते हैं।", "Search_Messages": "संदेश खोजें", "Search_messages": "संदेश खोजें", + "Search_Results_found": "{{count}} परिणाम मिले।", "Searching": "खोज रहा है", "Security_and_privacy": "सुरक्षा और गोपनीयता", "Select": "चयन करें", diff --git a/app/i18n/locales/hu.json b/app/i18n/locales/hu.json index 36837c72a2e..6839e2c30ba 100644 --- a/app/i18n/locales/hu.json +++ b/app/i18n/locales/hu.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Új üzenet érkezett {{name}}-tól: {{message}}", "A11y_incoming_call_dismiss": "Elutasítás", "A11y_incoming_call_swipe_down_to_view_options": "Húzza lefelé az opciók megtekintéséhez", + "ABAC_disabled_action_reason": "Nem érhető el ABAC által kezelt szobákban", + "ABAC_managed": "ABAC által kezelt", + "ABAC_managed_description": "Csak a megfelelő felhasználók férhetnek hozzá az attribútum alapú hozzáférés-vezérelt szobákhoz. Az attribútumok határozzák meg a szoba hozzáférését.", + "abac_removed_user_from_the_room": "eltávolítva az ABAC által", + "ABAC_room_attributes": "Szoba attribútumok", "accept": "Elfogadom", "Accessibility": "Akadálymentesség", "Accessibility_and_Appearance": "Hozzáférhetőség és megjelenés", @@ -299,6 +304,7 @@ "error-invalid-file-type": "Érvénytelen fájltípus", "error-invalid-password": "Érvénytelen jelszó", "error-invalid-room-name": "{{room_name}} nem érvényes szobanév", + "error-invitation-reply-action": "Hiba a meghívó válasz küldésekor", "error-not-allowed": "Nem engedélyezett", "error-not-permission-to-upload-file": "Nincs jogosultsága fájlok feltöltéséhez", "error-save-image": "Hiba a kép mentése közben", @@ -312,6 +318,9 @@ "Expiration_Days": "Lejárat (napokban)", "Favorite": "Kedvenc", "Favorites": "Kedvencek", + "Federation_Matrix_room_description_disabled": "A federáció jelenleg le van tiltva ezen a munkaterületen", + "Federation_Matrix_room_description_invalid_version": "Ez a szoba egy régi Federáció verzióval lett létrehozva és határozatlan ideig blokkolva van.", + "Federation_Matrix_room_description_missing_module": "A federált szobákhoz való csatlakozás prémium funkció", "Fetch_image_from_URL": "Kép betöltése az URL-ről", "Field_are_required": "{{field}} kötelezőek", "Field_is_required": "A {{field}} megadása kötelező.", @@ -369,6 +378,11 @@ "Invalid_workspace_URL": "Érvénytelen munkaterület URL", "Invite_Link": "Meghívási hivatkozás", "Invite_users": "Felhasználók meghívása", + "Invited": "Meghívott", + "invited_room_description_channel": "Meghívottak", + "invited_room_description_dm": "Meghívottak beszélgetésre", + "invited_room_title_channel": "Meghívó a {{room_name}} csatlakozásához", + "invited_room_title_dm": "Üzenetkérés", "IP": "IP-cím", "is_typing": "éppen ír", "Jitsi_authentication_before_making_calls": "A Jitsi a hívások kezdeményezése előtt hitelesítést igényelhet. Ha többet szeretne megtudni az irányelveikről, látogasson el a Jitsi weboldalára.", @@ -550,6 +564,7 @@ "Onboarding_less_options": "Kevesebb beállítás", "Onboarding_more_options": "Több beállítás", "Onboarding_subtitle": "A csoportos együttműködésen túl", + "One_result_found": "Egy eredmény található.", "Online": "Elérhető", "Only_authorized_users_can_write_new_messages": "Csak az engedélyezett felhasználók írhatnak új üzeneteket", "Oops": "Hoppá!", @@ -618,6 +633,7 @@ "Record_audio_message": "Hangüzenet rögzítése", "Register": "Regisztráció", "Registration_Succeeded": "A regisztráció sikeres", + "reject": "Elutasít", "Remove": "Eltávolítás", "remove": "eltávolítás", "Remove_from_room": "Eltávolítás a szobából", @@ -693,6 +709,7 @@ "Search_global_users_description": "Ha bekapcsolja, kereshet bármelyik felhasználót más cégekből vagy munkaterületekről.", "Search_Messages": "Üzenetek keresése", "Search_messages": "Üzenetek keresése", + "Search_Results_found": "{{count}} eredmény található.", "Searching": "Keresés", "Security_and_privacy": "Biztonság és adatvédelem", "Select": "Kiválasztás", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 5a1b5aabf23..4344347fc2f 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Nuovo messaggio da {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Ignora", "A11y_incoming_call_swipe_down_to_view_options": "Scorri verso il basso per visualizzare le opzioni", + "ABAC_disabled_action_reason": "Non disponibile nelle stanze gestite da ABAC", + "ABAC_managed": "Gestito da ABAC", + "ABAC_managed_description": "Solo gli utenti conformi hanno accesso alle stanze controllate da accesso basato su attributi. Gli attributi determinano l'accesso alla stanza.", + "abac_removed_user_from_the_room": "è stato rimosso da ABAC", + "ABAC_room_attributes": "Attributi della stanza", "Accessibility": "Accessibilità", "Accessibility_and_Appearance": "Accessibilità e aspetto", "Accessibility_statement": "Dichiarazione di accessibilità", @@ -219,6 +224,7 @@ "error-invalid-file-type": "Tipo di file non valido", "error-invalid-password": "Password non corretta", "error-invalid-room-name": "{{room_name}} non è un nome di stanza valido", + "error-invitation-reply-action": "Errore durante l'invio della risposta all'invito", "error-not-allowed": "Non permesso", "error-not-permission-to-upload-file": "Non hai l'autorizzazione per caricare file", "error-save-image": "Errore nel salvataggio dell'immagine", @@ -230,6 +236,9 @@ "Expiration_Days": "Scadenza (giorni)", "Favorite": "Preferito", "Favorites": "Preferiti", + "Federation_Matrix_room_description_disabled": "La federazione è attualmente disabilitata in questo spazio di lavoro", + "Federation_Matrix_room_description_invalid_version": "Questa stanza è stata creata da una vecchia versione di Federazione ed è bloccata indefinitamente.", + "Federation_Matrix_room_description_missing_module": "Unirsi alle stanze federate è una funzionalità Premium", "Fetch_image_from_URL": "Recupera immagine da URL", "Field_are_required": "{{field}} sono obbligatori", "Field_is_required": "Il campo {{field}} è obbligatorio", @@ -284,6 +293,11 @@ "Invite_user_to_join_channel_all_from": "Invita tutti gli utenti da [#channell] per unirsi a questo canale", "Invite_user_to_join_channel_all_to": "Invita tutti gli utenti di questo canale a unirsi [#channel]", "Invite_users": "Invita utenti", + "Invited": "Invitato", + "invited_room_description_channel": "Sei stato invitato da", + "invited_room_description_dm": "Sei stato invitato ad avere una conversazione con", + "invited_room_title_channel": "Invito a unirti a {{room_name}}", + "invited_room_title_dm": "Richiesta di messaggio", "IP": "Indirizzo IP", "is_typing": "sta scrivendo", "Join": "Entra", @@ -415,6 +429,7 @@ "Onboarding_less_options": "Meno opzioni", "Onboarding_more_options": "Più opzioni", "Onboarding_subtitle": "Oltre la collaborazione di gruppo", + "One_result_found": "Un risultato trovato.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Solo gli utenti autorizzati possono scrivere nuovi messaggi", "Oops": "Oops!", @@ -477,6 +492,7 @@ "Record_audio_message": "Registra messaggio audio", "Register": "Registrati", "Registration_Succeeded": "Registrazione completata!", + "reject": "Rifiuta", "Remove": "Rimuovi", "Remove_from_room": "Rimuovi dalla stanza", "Remove_from_workspace_history": "Rimuovi dalla cronologia dell'area di lavoro", @@ -527,6 +543,7 @@ "Search_global_users_description": "Se attivi questa opzione, puoi cercare qualsiasi utente da altre aziende o server.", "Search_Messages": "Cerca messaggi", "Search_messages": "Cerca messaggi", + "Search_Results_found": "{{count}} risultati trovati.", "Security_and_privacy": "Sicurezza e privacy", "Select_a_Channel": "Seleziona un Canale", "Select_a_Department": "Seleziona un Dipartimento", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index 5a87b2aaa2e..dda45aad4d9 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "{{name}} からの新しいメッセージ: {{message}}", "A11y_incoming_call_dismiss": "閉じる", "A11y_incoming_call_swipe_down_to_view_options": "オプションを見るには下にスワイプしてください", + "ABAC_disabled_action_reason": "ABAC管理の部屋では利用できません", + "ABAC_managed": "ABAC管理", + "ABAC_managed_description": "準拠しているユーザーのみが属性ベースのアクセス制御された部屋にアクセスできます。属性によって部屋へのアクセスが決まります。", + "abac_removed_user_from_the_room": "ABACによって削除されました", + "ABAC_room_attributes": "部屋の属性", "Accessibility": "アクセシビリティ", "Accessibility_and_Appearance": "アクセシビリティと外観", "Accessibility_statement": "アクセシビリティ声明", @@ -194,6 +199,7 @@ "error-invalid-file-type": "ファイルの種類が不正です", "error-invalid-password": "不正なパスワードです", "error-invalid-room-name": "{{room_name}}は正しいルーム名ではありません。", + "error-invitation-reply-action": "招待への返信送信中にエラーが発生しました", "error-not-allowed": "許可されていません。", "error-not-permission-to-upload-file": "ファイルをアップロードする権限がありません", "error-save-image": "画像の保存に失敗しました。", @@ -205,6 +211,9 @@ "Expiration_Days": "期限切れ (日)", "Favorite": "お気に入り", "Favorites": "お気に入り", + "Federation_Matrix_room_description_disabled": "このワークスペースでは現在フェデレーションが無効になっています", + "Federation_Matrix_room_description_invalid_version": "このルームは古いフェデレーションバージョンで作成され、無期限にブロックされています。", + "Federation_Matrix_room_description_missing_module": "フェデレーションルームへの参加はプレミアム機能です", "Fetch_image_from_URL": "URLから画像を取得する", "Field_are_required": "{{field}}は必須です。", "Field_is_required": "{{field}}は必須です。", @@ -256,6 +265,11 @@ "Invite_user_to_join_channel_all_from": "[#channel]のすべてのユーザーをこのチャネルに招待", "Invite_user_to_join_channel_all_to": "このチャネルのすべてのユーザーを[#channel]に招待", "Invite_users": "ユーザーを招待", + "Invited": "招待済み", + "invited_room_description_channel": "招待されました", + "invited_room_description_dm": "会話に招待されました", + "invited_room_title_channel": "{{room_name}}への招待", + "invited_room_title_dm": "メッセージリクエスト", "IP": "IP", "is_typing": "が入力中", "Join": "参加", @@ -353,6 +367,7 @@ "Notify_all_in_this_room": "このルームのユーザー全員に通知する", "Objects": "オブジェクト", "Offline": "オフライン", + "One_result_found": "1 件の結果が見つかりました。", "Online": "オンライン", "Only_authorized_users_can_write_new_messages": "承認されたユーザーだけが新しいメッセージを書き込めます", "Oops": "おっと!", @@ -396,6 +411,7 @@ "Record_audio_message": "音声メッセージを記録する", "Register": "登録", "Registration_Succeeded": "登録が成功しました", + "reject": "拒否", "Remove_from_workspace_history": "ワークスペースの履歴から削除する", "Remove_someone_from_room": "ルームからいずれかのユーザーを削除", "replies": "返信", @@ -437,6 +453,7 @@ "Search_global_users_description": "有効にした場合、他の会社やサーバーの誰もがあなたを検索可能になります。", "Search_Messages": "メッセージを検索", "Search_messages": "メッセージを検索", + "Search_Results_found": "{{count}} 件の結果が見つかりました。", "Select_emoji_reaction": "絵文字リアクションを選択", "Select_Server": "サーバーを選択", "Select_Uploaded_Image": "アップロードされた画像を選択します", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index d490fe82d9f..522d23cc72d 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "Nieuw bericht van {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Afwijzen", "A11y_incoming_call_swipe_down_to_view_options": "Veeg omlaag om opties te bekijken", + "ABAC_disabled_action_reason": "Niet beschikbaar in ABAC-beheerde kamers", + "ABAC_managed": "ABAC beheerd", + "ABAC_managed_description": "Alleen conforme gebruikers hebben toegang tot op attributen gebaseerde toegangsgecontroleerde kamers. Attributen bepalen de toegang tot de kamer.", + "abac_removed_user_from_the_room": "werd verwijderd door ABAC", + "ABAC_room_attributes": "Kamerattributen", "Accessibility": "Toegankelijkheid", "Accessibility_and_Appearance": "Toegankelijkheid & uiterlijk", "Accessibility_statement": "Toegankelijkheidsverklaring", @@ -244,6 +249,7 @@ "error-invalid-file-type": "Ongeldig bestandstype", "error-invalid-password": "Ongeldig wachtwoord", "error-invalid-room-name": "{{room_name}} is geen geldige kamernaam", + "error-invitation-reply-action": "Fout bij het verzenden van uitnodigingsantwoord", "error-not-allowed": "Niet toegestaan", "error-not-permission-to-upload-file": "Je hebt geen toestemming om bestanden up te loaden", "error-save-image": "Fout bij het opslaan van afbeelding", @@ -257,6 +263,9 @@ "Expiration_Days": "Vervaldatum (Dagen)", "Favorite": "Favoriet", "Favorites": "Favorieten", + "Federation_Matrix_room_description_disabled": "Federatie is momenteel uitgeschakeld op deze werkruimte", + "Federation_Matrix_room_description_invalid_version": "Deze ruimte is gemaakt met een oude Federatie-versie en is onbepaald geblokkeerd.", + "Federation_Matrix_room_description_missing_module": "Deelnemen aan gefedereerde ruimtes is een Premium-functie", "Fetch_image_from_URL": "Afbeelding ophalen van URL", "Field_are_required": "{{field}} zijn verplicht", "Field_is_required": "{{field}} is vereist", @@ -312,6 +321,11 @@ "Invite_user_to_join_channel_all_from": "Nodig alle gebruikers van [#kanaal] uit om lid te worden van dit kanaal", "Invite_user_to_join_channel_all_to": "Alle gebruikers van dit kanaal uitnodigen om lid te worden van [#channel]", "Invite_users": "Gebruikers uitnodigen", + "Invited": "Uitgenodigd", + "invited_room_description_channel": "Je bent uitgenodigd door", + "invited_room_description_dm": "Je bent uitgenodigd om een gesprek te voeren met", + "invited_room_title_channel": "Uitnodiging om lid te worden van {{room_name}}", + "invited_room_title_dm": "Berichtverzoek", "IP": "IP", "is_typing": "is aan het typen", "Join": "Doe mee", @@ -475,6 +489,7 @@ "Onboarding_less_options": "Minder opties", "Onboarding_more_options": "Meer opties", "Onboarding_subtitle": "Meer dan teamsamenwerking", + "One_result_found": "Eén resultaat gevonden.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven", "Oops": "Oeps!", @@ -539,6 +554,7 @@ "Record_audio_message": "Audiobericht opnemen", "Register": "Registreren", "Registration_Succeeded": "Registratie geslaagd!", + "reject": "Afwijzen", "Remove": "Verwijderen", "remove": "verwijderen", "Remove_from_room": "Verwijderen uit kamer", @@ -598,6 +614,7 @@ "Search_global_users_description": "Als je dit inschakelt, kan je gebruikers van andere bedrijven en servers opzoeken.", "Search_Messages": "Berichten zoeken", "Search_messages": "Berichten zoeken", + "Search_Results_found": "{{count}} resultaten gevonden.", "Searching": "Zoeken", "Security_and_privacy": "Veiligheid en privacy", "Select_a_Channel": "Selecteer een kanaal", diff --git a/app/i18n/locales/nn.json b/app/i18n/locales/nn.json index 6548bd58a24..d171c7c1707 100644 --- a/app/i18n/locales/nn.json +++ b/app/i18n/locales/nn.json @@ -7,6 +7,11 @@ "A11y_in_app_notification": "Ny melding frå {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Avslå", "A11y_incoming_call_swipe_down_to_view_options": "Sveip ned for å sjå alternativa", + "ABAC_disabled_action_reason": "Ikkje tilgjengeleg i ABAC-administrerte rom", + "ABAC_managed": "ABAC-administrert", + "ABAC_managed_description": "Berre kompatible brukarar har tilgang til attributtbaserte tilgangskontrollerte rom. Attributta bestemmer romtilgangen.", + "abac_removed_user_from_the_room": "vart fjerna av ABAC", + "ABAC_room_attributes": "Romattributt", "accept": "Aksepter", "Accessibility": "Tilgjengelighet", "Accessibility_and_Appearance": "Tilgjengelighet og utseende", @@ -156,6 +161,8 @@ "error-invalid-email": "Ugyldig e-post {{email}}", "error-invalid-file-type": "ugyldig filtype", "error-invalid-password": "Ugyldig passord", + "error-invalid-room-name": "{{room_name}} er ikke et godkjent romnavn", + "error-invitation-reply-action": "Feil ved sending av invitasjonssvar", "error-no-tokens-for-this-user": "Det er ingen tokens for denne brukeren", "error-not-allowed": "Ikke tillatt", "error-too-many-requests": "Feil, for mange forespørsler. Vennligst senke farten. Du må vente {{seconds}} sekunder før du prøver igjen.", @@ -163,6 +170,9 @@ "Everyone_can_access_this_channel": "Alle kan få tilgang til denne kanalen", "Favorite": "Favoritt", "Favorites": "Favoritter", + "Federation_Matrix_room_description_disabled": "Federasjon er for tida deaktivert på dette arbeidsområdet", + "Federation_Matrix_room_description_invalid_version": "Dette rommet vart oppretta med ei gammal Federasjon-versjon og er blokkert på ubestemt tid.", + "Federation_Matrix_room_description_missing_module": "Å bli med i federerte rom er ein Premium-funksjon", "Field_is_required": "{{field}} er påkrevd", "File_description": "Filbeskrivelse", "Files": "Filer", @@ -192,6 +202,12 @@ "Invite_user_to_join_channel": "Be en bruker til å bli med på denne kanalen", "Invite_user_to_join_channel_all_from": "Inviter alle brukere fra [#kanal] for å bli med på denne kanalen", "Invite_user_to_join_channel_all_to": "Inviter alle brukere fra denne kanalen til å delta i [#kanal]", + "Invite_users": "Inviter brukere", + "Invited": "Invitert", + "invited_room_description_channel": "Du har blitt invitert av", + "invited_room_description_dm": "Du har blitt invitert til å ha ein samtale med", + "invited_room_title_channel": "Invitasjon til å bli med i {{room_name}}", + "invited_room_title_dm": "Meldingforespørsel", "IP": "IP", "is_typing": "skriver", "Italic": "Kursiv", @@ -260,6 +276,7 @@ "Off": "Av", "Offline": "offline", "Onboarding_more_options": "Flere alternativer", + "One_result_found": "Eitt resultat funne.", "Online": "på nett", "Only_authorized_users_can_write_new_messages": "Kun autoriserte brukere kan skrive nye meldinger", "Open_sidebar": "Åpne sidepanelet", @@ -282,6 +299,7 @@ "Quote": "Sitat", "Receive_Group_Mentions_Info": "Motta @all og @here nevner", "Register": "Registrer en ny konto", + "reject": "Avvis", "Remove": "Fjerne", "Remove_from_room": "Fjern fra rommet", "Remove_from_Team": "Fjern fra team", @@ -312,6 +330,7 @@ "Save_Changes": "Lagre endringer", "Saved": "lagret", "Search": "Søk", + "Search_Results_found": "{{count}} resultat funne.", "Security_and_privacy": "Sikkerhet og personvern", "Select": "Velg", "Select_a_Department": "Velg en avdeling", diff --git a/app/i18n/locales/no.json b/app/i18n/locales/no.json index 23d77e7799f..2d5c014ce43 100644 --- a/app/i18n/locales/no.json +++ b/app/i18n/locales/no.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Ny melding fra {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Avvis", "A11y_incoming_call_swipe_down_to_view_options": "Dra ned for å se alternativer", + "ABAC_disabled_action_reason": "Ikke tilgjengelig i ABAC-administrerte rom", + "ABAC_managed": "ABAC-administrert", + "ABAC_managed_description": "Kun kompatible brukere har tilgang til attributtbaserte tilgangskontrollerte rom. Attributter bestemmer romtilgang.", + "abac_removed_user_from_the_room": "ble fjernet av ABAC", + "ABAC_room_attributes": "Romattributter", "accept": "Aksepter", "Accessibility": "Tilgjengelighet", "Accessibility_and_Appearance": "Tilgjengelighet og utseende", @@ -322,6 +327,7 @@ "error-invalid-file-type": "Ugyldig filtype", "error-invalid-password": "Ugyldig passord", "error-invalid-room-name": "{{room_name}} er ikke et godkjent romnavn", + "error-invitation-reply-action": "Feil ved sending av invitasjonssvar", "error-no-tokens-for-this-user": "Det er ingen tokens for denne brukeren", "error-not-allowed": "Ikke tillatt", "error-not-permission-to-upload-file": "Du har ikke tillatelse til å laste opp filer", @@ -335,6 +341,9 @@ "Expanded": "Utvidet", "Expiration_Days": "Utløp (dager)", "Favorites": "Favoritter", + "Federation_Matrix_room_description_disabled": "Federasjon er for øyeblikket deaktivert på denne arbeidsområdet", + "Federation_Matrix_room_description_invalid_version": "Dette rommet ble opprettet med en gammel Federasjon-versjon og er blokkert på ubestemt tid.", + "Federation_Matrix_room_description_missing_module": "Bli med i federerte rom er en Premium-funksjon", "Fetch_image_from_URL": "Hent bilde fra URL", "Field_is_required": "{{field}} er påkrevd", "File_description": "Filbeskrivelse", @@ -392,6 +401,11 @@ "Invite_user_to_join_channel_all_from": "Inviter alle brukere fra [#channel] til å bli med i denne kanalen", "Invite_user_to_join_channel_all_to": "Inviter alle brukere fra denne kanalen til å bli med i [#channel]", "Invite_users": "Inviter brukere", + "Invited": "Invitert", + "invited_room_description_channel": "Du har blitt invitert av", + "invited_room_description_dm": "Du har blitt invitert til å ha en samtale med", + "invited_room_title_channel": "Invitasjon til å bli med i {{room_name}}", + "invited_room_title_dm": "Meldingforespørsel", "IP": "IP", "is_typing": "skriver", "Italic": "Kursiv", @@ -577,6 +591,7 @@ "Onboarding_less_options": "Færre alternativer", "Onboarding_more_options": "Flere alternativer", "Onboarding_subtitle": "Utover teamsamarbeid", + "One_result_found": "Ett resultat funnet.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Bare autoriserte brukere kan skrive nye meldinger", "Oops": "Ups!", @@ -645,6 +660,7 @@ "Recording_audio_in_progress": "Tar opp lydmelding", "Register": "Register", "Registration_Succeeded": "Registreringen var vellykket!", + "reject": "Avvis", "Remove": "Fjerne", "remove": "fjerne", "Remove_from_room": "Fjern fra rommet", @@ -728,6 +744,7 @@ "Search_global_users_description": "Hvis du slår på, kan du søke etter hvilken som helst bruker fra andre bedrifter eller arbeidsområder.", "Search_Messages": "Søk etter meldinger", "Search_messages": "Søk i meldinger", + "Search_Results_found": "{{count}} resultater funnet.", "Searching": "Søker", "Security_and_privacy": "Sikkerhet og personvern", "Select": "Velg", @@ -952,5 +969,6 @@ "Your_invite_link_will_never_expire": "Invitasjonslenken din vil aldri utløpe.", "Your_password_is": "Passordet ditt er", "Your_Password_Must_Have": "Passordet ditt må inneholde:", - "Your_push_was_sent_to_s_devices": "Din push ble sendt til {{s}} enheter" + "Your_push_was_sent_to_s_devices": "Din push ble sendt til {{s}} enheter", + "Your_workspace": "Arbeidsområdet ditt" } \ No newline at end of file diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index 68cd6d96496..cbd4dfb4eae 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Nova mensagem de {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Dispensar", "A11y_incoming_call_swipe_down_to_view_options": "Deslize para baixo para ver as opções", + "ABAC_disabled_action_reason": "Não disponível em salas gerenciadas por ABAC", + "ABAC_managed": "Gerenciado por ABAC", + "ABAC_managed_description": "Apenas usuários compatíveis têm acesso a salas controladas por acesso baseado em atributos. Atributos determinam o acesso à sala.", + "abac_removed_user_from_the_room": "foi removido pelo ABAC", + "ABAC_room_attributes": "Atributos da sala", "accept": "Aceitar", "Accessibility": "Acessibilidade", "Accessibility_and_Appearance": "Acessibilidade e aparência", @@ -328,6 +333,7 @@ "error-invalid-file-type": "Tipo de arquivo inválido", "error-invalid-password": "Senha inválida", "error-invalid-room-name": "{{room_name}} não é um nome de sala válido", + "error-invitation-reply-action": "Erro ao enviar resposta do convite", "error-no-tokens-for-this-user": "Não existem tokens para este usuário", "error-not-allowed": "Não permitido", "error-not-permission-to-upload-file": "Você não tem permissão para enviar arquivos", @@ -342,6 +348,9 @@ "Expiration_Days": "Expira em (dias)", "Favorite": "Favorito", "Favorites": "Favoritos", + "Federation_Matrix_room_description_disabled": "A federação está atualmente desabilitada neste espaço de trabalho", + "Federation_Matrix_room_description_invalid_version": "Esta sala foi criada por uma versão antiga da Federação e está bloqueada indefinidamente.", + "Federation_Matrix_room_description_missing_module": "Entrar em salas federadas é um recurso Premium", "Fetch_image_from_URL": "Obter imagem da URL", "Field_are_required": "{{field}} são obrigatórios", "Field_is_required": "{{field}} é obrigatório", @@ -406,6 +415,11 @@ "Invite_user_to_join_channel_all_from": "Convidar todos os usuários de [#channel] para ingressar neste canal", "Invite_user_to_join_channel_all_to": "Convidar todos os usuários deste canal para ingressar no [#canal]", "Invite_users": "Convidar usuários", + "Invited": "Convidado", + "invited_room_description_channel": "Você foi convidado por", + "invited_room_description_dm": "Você foi convidado para ter uma conversa com", + "invited_room_title_channel": "Convite para participar de {{room_name}}", + "invited_room_title_dm": "Solicitação de mensagem", "IP": "IP", "is_typing": "está digitando", "Jitsi_authentication_before_making_calls": "Jitsi pode exigir autenticação antes de fazer chamadas. Para saber mais sobre suas políticas, visite o site do Jitsi.", @@ -597,6 +611,7 @@ "Onboarding_less_options": "Menos opções", "Onboarding_more_options": "Mais opções", "Onboarding_subtitle": "Além da colaboração em time", + "One_result_found": "Um resultado encontrado.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Somente usuários autorizados podem escrever novas mensagens", "Oops": "Ops!", @@ -670,6 +685,7 @@ "Record_audio_message": "Gravar mensagem de áudio", "Register": "Registrar", "Registration_Succeeded": "Registrado com sucesso!", + "reject": "Rejeitar", "Remove": "Remover", "remove": "remover", "Remove_from_room": "Remover do canal", @@ -749,6 +765,7 @@ "Search_global_users_description": "Caso ativado, busca por usuários de outras empresas ou workspaces.", "Search_Messages": "Buscar mensagens", "Search_messages": "Buscar mensagens", + "Search_Results_found": "{{count}} resultados encontrados.", "Searching": "Buscando", "Security_and_privacy": "Segurança e privacidade", "Select": "Selecionar", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index 64538567059..4f71d5315db 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "Nova mensagem de {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Dispensar", "A11y_incoming_call_swipe_down_to_view_options": "Deslize para baixo para ver as opções.", + "ABAC_disabled_action_reason": "Não disponível em salas geridas por ABAC", + "ABAC_managed": "Gerido por ABAC", + "ABAC_managed_description": "Apenas utilizadores compatíveis têm acesso a salas controladas por acesso baseado em atributos. Atributos determinam o acesso à sala.", + "abac_removed_user_from_the_room": "foi removido pelo ABAC", + "ABAC_room_attributes": "Atributos da sala", "Accessibility": "Acessibilidade", "Accessibility_and_Appearance": "Acessibilidade e aparência", "Accessibility_statement": "Declaração de acessibilidade", @@ -190,6 +195,7 @@ "error-invalid-file-type": "Tipo de ficheiro inválido", "error-invalid-password": "Palavra-passe inválida", "error-invalid-room-name": "{{room_name}} não é um nome de sala válido", + "error-invitation-reply-action": "Erro ao enviar resposta do convite", "error-not-allowed": "Não permitido", "error-save-image": "Erro ao salvar imagem", "error-save-video": "Erro ao salvar vídeo", @@ -200,6 +206,9 @@ "Expiration_Days": "Validade (Dias)", "Favorite": "Favorito", "Favorites": "Favoritos", + "Federation_Matrix_room_description_disabled": "A federação está atualmente desativada neste espaço de trabalho", + "Federation_Matrix_room_description_invalid_version": "Esta sala foi criada por uma versão antiga da Federação e está bloqueada indefinidamente.", + "Federation_Matrix_room_description_missing_module": "Entrar em salas federadas é uma funcionalidade Premium", "Fetch_image_from_URL": "Pesquisar imagem do URL", "Field_are_required": "{{field}} são obrigatórios", "Field_is_required": "{{campo}} é obrigatório", @@ -251,6 +260,11 @@ "Invite_user_to_join_channel_all_from": "Convide todos os utilizadores de [#channel] a participar deste canal", "Invite_user_to_join_channel_all_to": "Convide todos os utilizadores deste canal a participar [#canal]", "Invite_users": "Convidar utilizadores", + "Invited": "Convidado", + "invited_room_description_channel": "Foi convidado por", + "invited_room_description_dm": "Foi convidado para ter uma conversa com", + "invited_room_title_channel": "Convite para participar de {{room_name}}", + "invited_room_title_dm": "Pedido de mensagem", "IP": "IP", "is_typing": "está a escrever", "Join": "Entrar", @@ -359,6 +373,7 @@ "Onboarding_less_options": "Menos opções", "Onboarding_more_options": "Mais opções", "Onboarding_subtitle": "Além da Colaboração da Equipe", + "One_result_found": "Um resultado encontrado.", "Online": "Ligado", "Only_authorized_users_can_write_new_messages": "Apenas utilizadores autorizados podem escrever novas mensagens", "Oops": "Oops!", @@ -409,6 +424,7 @@ "Recently_used": "Recentemente usado", "Record_audio_message": "Gravar mensagem de áudio", "Register": "Registar", + "reject": "Rejeitar", "Remove_from_workspace_history": "Remover do histórico do espaço de trabalho", "Remove_someone_from_room": "Remover alguém da sala", "Reply": "Responder", @@ -435,6 +451,7 @@ "saving_settings": "a guardar configurações", "Search": "Pesquisar", "Search_Messages": "Pesquisar Mensagens", + "Search_Results_found": "{{count}} resultados encontrados.", "Select_emoji_reaction": "Selecionar reação de emoji", "Select_Uploaded_Image": "Selecione a Imagem Carregada", "Select_Users": "Seleccionar Utilizadores", diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index 918fdd3fc8b..faded076a86 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Новое сообщение от {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Отклонить", "A11y_incoming_call_swipe_down_to_view_options": "Проведите вниз, чтобы просмотреть варианты действий", + "ABAC_disabled_action_reason": "Недоступно в комнатах, управляемых ABAC", + "ABAC_managed": "Управляется ABAC", + "ABAC_managed_description": "Только соответствующие пользователи имеют доступ к комнатам с атрибутивным контролем доступа. Атрибуты определяют доступ к комнате.", + "abac_removed_user_from_the_room": "был удалён ABAC'ом", + "ABAC_room_attributes": "Атрибуты комнаты", "Accessibility": "Доступность", "Accessibility_and_Appearance": "Доступность и внешний вид", "Accessibility_statement": "Заявление о доступности", @@ -269,6 +274,7 @@ "error-invalid-file-type": "Неверный тип файла", "error-invalid-password": "Неверный пароль", "error-invalid-room-name": "{{room_name}} не является допустимым именем чата", + "error-invitation-reply-action": "Ошибка при отправке ответа на приглашение", "error-not-allowed": "Не допускается", "error-not-permission-to-upload-file": "У вас нет разрешения на загрузку файлов", "error-save-image": "Ошибка при попытке сохранить изображение", @@ -282,6 +288,9 @@ "Expiration_Days": "Срок действия (Дни)", "Favorite": "Любимый", "Favorites": "Избранное", + "Federation_Matrix_room_description_disabled": "Федерация в настоящее время отключена в этом рабочем пространстве", + "Federation_Matrix_room_description_invalid_version": "Эта комната была создана старой версией Федерации и заблокирована на неопределенный срок.", + "Federation_Matrix_room_description_missing_module": "Присоединение к федеративным комнатам — это функция Premium", "Fetch_image_from_URL": "получить изображение по URL", "Field_are_required": "Поле {{field}} обязательно для заполнения.", "Field_is_required": "Поле {{field}} является обязательным.", @@ -337,6 +346,11 @@ "Invite_user_to_join_channel_all_from": "Пригласить всех пользователей из [#channel] присоединиться к этому каналу", "Invite_user_to_join_channel_all_to": "Пригласить всех пользователей этого канала присоединиться к [#channel]", "Invite_users": "Приглашение пользователей", + "Invited": "Приглашен", + "invited_room_description_channel": "Вас пригласил", + "invited_room_description_dm": "Вас пригласили на беседу с", + "invited_room_title_channel": "Приглашение присоединиться к {{room_name}}", + "invited_room_title_dm": "Запрос сообщения", "IP": "IP", "is_typing": "печатает", "Join": "Присоединиться", @@ -505,6 +519,7 @@ "Onboarding_less_options": "Меньше опций", "Onboarding_more_options": "Больше опций", "Onboarding_subtitle": "За пределами Командного Взаимодействия", + "One_result_found": "Один результат найден.", "Online": "В сети", "Only_authorized_users_can_write_new_messages": "Только авторизованные пользователи могут писать новые сообщения", "Oops": "Упс!", @@ -569,6 +584,7 @@ "Record_audio_message": "Записать голосовое сообщение", "Register": "Зарегистрировать", "Registration_Succeeded": "Регистрация Успешна!", + "reject": "Отклонить", "Remove": "Удалить", "remove": "удалить", "Remove_from_room": "Удалить из чата", @@ -631,6 +647,7 @@ "Search_global_users_description": "При активации станет возможен поиск пользователей на других серверах.", "Search_Messages": "Поиск сообщений", "Search_messages": "Поиск сообщений", + "Search_Results_found": "Найдено {{count}} результатов.", "Searching": "Поиск", "Security_and_privacy": "Безопасность и конфиденциальность", "Select_a_Channel": "Выбор Канала", diff --git a/app/i18n/locales/sl-SI.json b/app/i18n/locales/sl-SI.json index b6d2c0d3483..68e8aa5caf7 100644 --- a/app/i18n/locales/sl-SI.json +++ b/app/i18n/locales/sl-SI.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Novo sporočilo od {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Opusti", "A11y_incoming_call_swipe_down_to_view_options": "Podrsnite navzdol za ogled možnosti", + "ABAC_disabled_action_reason": "Ni na voljo v sobah, ki jih upravlja ABAC", + "ABAC_managed": "ABAC upravljano", + "ABAC_managed_description": "Samo skladni uporabniki imajo dostop do sob z nadzorom dostopa na podlagi atributov. Atributi določajo dostop do sobe.", + "abac_removed_user_from_the_room": "je bil odstranjen s strani ABAC", + "ABAC_room_attributes": "Atributi sobe", "Accessibility": "Dostopnost", "Accessibility_and_Appearance": "Dostopnost in videz", "Accessibility_statement": "Izjava o dostopnosti", @@ -255,6 +260,7 @@ "error-invalid-file-type": "Neveljavna vrsta datoteke", "error-invalid-password": "Neveljavno geslo", "error-invalid-room-name": "{{room_name}} ni veljavno ime sobe", + "error-invitation-reply-action": "Napaka pri pošiljanju odgovora na povabilo", "error-not-allowed": "Ni dovoljeno", "error-not-permission-to-upload-file": "Nimate pooblastil za nalaganje datotek", "error-save-image": "Napaka pri shranjevanju slike", @@ -268,6 +274,9 @@ "Expiration_Days": "Iztek (dnevi)", "Favorite": "Priljubljeno", "Favorites": "Priljubljeno", + "Federation_Matrix_room_description_disabled": "Federacija je trenutno onemogočena v tem delovnem prostoru", + "Federation_Matrix_room_description_invalid_version": "Ta soba je bila ustvarjena s staro različico Federacije in je nedoločno blokirana.", + "Federation_Matrix_room_description_missing_module": "Pridružitev federiranim sobam je Premium funkcija", "Fetch_image_from_URL": "Pridobi sliko iz URL", "Field_are_required": "{{field}} so obvezna", "Field_is_required": "{{field}} je obvezno", @@ -322,6 +331,11 @@ "Invite_user_to_join_channel_all_from": "Povabi vse uporabnike iz [#channel], da se pridružijo kanalu", "Invite_user_to_join_channel_all_to": "Povabi vse uporabnike iz tega kanala, da se pridružijo [#channel]", "Invite_users": "Povabite uporabnike", + "Invited": "Povabljen", + "invited_room_description_channel": "Povabil vas je", + "invited_room_description_dm": "Povabljeni ste na pogovor z", + "invited_room_title_channel": "Povabilo za pridružitev {{room_name}}", + "invited_room_title_dm": "Zahteva za sporočilo", "IP": "IP", "is_typing": "piše", "Join": "Pridružite se", @@ -487,6 +501,7 @@ "Onboarding_less_options": "Manj možnosti", "Onboarding_more_options": "Več možnosti", "Onboarding_subtitle": "Izven ekipnega sodelovanja", + "One_result_found": "Najden je en rezultat.", "Online": "Dosegljiv", "Only_authorized_users_can_write_new_messages": "Samo pooblaščen uporabnik lahko napiše nova sporočila", "Oops": "Ups!", @@ -551,6 +566,7 @@ "Record_audio_message": "Posnemi zvočno sporočilo", "Register": "Registriraj novi račun", "Registration_Succeeded": "Registracija je bila uspešna", + "reject": "Zavrni", "Remove": "Odstrani", "remove": "Odstrani", "Remove_from_room": "Odstrani iz sobe", @@ -611,6 +627,7 @@ "Search_global_users_description": "Če si vklopite, lahko poiščete katerega koli uporabnika od drugih podjetij ali strežnikov.", "Search_Messages": "Iskanje sporočil", "Search_messages": "Iskalna sporočila", + "Search_Results_found": "{{count}} zadetkov najdenih.", "Searching": "Iskanje", "Security_and_privacy": "Varnost in zasebnost", "Select_a_Channel": "Izberite kanal", diff --git a/app/i18n/locales/sv.json b/app/i18n/locales/sv.json index 2debf1b9205..f22df03c7be 100644 --- a/app/i18n/locales/sv.json +++ b/app/i18n/locales/sv.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "Nytt meddelande från {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Avvisa", "A11y_incoming_call_swipe_down_to_view_options": "Svep nedåt för att se alternativ", + "ABAC_disabled_action_reason": "Inte tillgängligt i ABAC-hanterade rum", + "ABAC_managed": "ABAC-hanterat", + "ABAC_managed_description": "Endast kompatibla användare har åtkomst till attributbaserat åtkomstskyddade rum. Attributen avgör tillgången till rummet.", + "abac_removed_user_from_the_room": "togs bort av ABAC", + "ABAC_room_attributes": "Rumsattribut", "Accessibility": "Tillgänglighet", "Accessibility_and_Appearance": "Tillgänglighet och utseende", "Accessibility_statement": "Tillgänglighetsredogörelse", @@ -278,6 +283,7 @@ "error-invalid-file-type": "Ogiltig filtyp", "error-invalid-password": "Ogiltigt lösenord", "error-invalid-room-name": "{{room_name}} är inte ett giltigt rumsnamn", + "error-invitation-reply-action": "Fel vid sändning av inbjudningssvar", "error-not-allowed": "Tillåts inte", "error-not-permission-to-upload-file": "Du har inte behörighet att ladda upp filer", "error-save-image": "Fel när bilden skulle sparas", @@ -291,6 +297,9 @@ "Expiration_Days": "Förfallotid (dagar)", "Favorite": "Favorit", "Favorites": "Favoriter", + "Federation_Matrix_room_description_disabled": "Federation är för närvarande inaktiverad på denna arbetsyta", + "Federation_Matrix_room_description_invalid_version": "Detta rum skapades med en gammal Federation-version och är blockerat på obestämd tid.", + "Federation_Matrix_room_description_missing_module": "Gå med i federerade rum är en Premium-funktion", "Fetch_image_from_URL": "Hämta bild från URL", "Field_are_required": "{{field}} är obligatoriska", "Field_is_required": "{{fält}} är obligatoriskt", @@ -346,6 +355,11 @@ "Invite_user_to_join_channel_all_from": "Bjud in alla användare från [#kanalen] för att gå med i den här kanalen", "Invite_user_to_join_channel_all_to": "Bjud in alla användare från den här kanalen till att delta i [#kanalen]", "Invite_users": "Bjud in användare", + "Invited": "Inbjuden", + "invited_room_description_channel": "Du har blivit inbjuden av", + "invited_room_description_dm": "Du har blivit inbjuden att ha en konversation med", + "invited_room_title_channel": "Inbjudan att gå med i {{room_name}}", + "invited_room_title_dm": "Meddelandeförfrågan", "IP": "IP", "is_typing": "skriver", "Join": "Gå med", @@ -514,6 +528,7 @@ "Onboarding_less_options": "Färre alternativ", "Onboarding_more_options": "Fler alternativ", "Onboarding_subtitle": "Mer än teamsamarbete", + "One_result_found": "Ett resultat hittades.", "Online": "Online", "Only_authorized_users_can_write_new_messages": "Endast behöriga användare kan skriva nya meddelanden", "Oops": "Ojdå!", @@ -578,6 +593,7 @@ "Record_audio_message": "Spela in röstmeddelande", "Register": "Registrera", "Registration_Succeeded": "Registreringen är klar.", + "reject": "Avvisa", "Remove": "Ta bort", "remove": "ta bort", "Remove_from_room": "Ta bort från rummet", @@ -653,6 +669,7 @@ "Search_global_users_description": "Om du aktiverar alternativet kan du söka efter användare från andra företag eller servrar.", "Search_Messages": "Sök bland meddelanden", "Search_messages": "Sök efter meddelanden", + "Search_Results_found": "{{count}} resultat hittades.", "Searching": "Söker", "Security_and_privacy": "Säkerhet och integritet", "Select_a_Channel": "Välj en kanal", diff --git a/app/i18n/locales/ta-IN.json b/app/i18n/locales/ta-IN.json index 4668db2a962..a7c1dc4da6a 100644 --- a/app/i18n/locales/ta-IN.json +++ b/app/i18n/locales/ta-IN.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "{{name}}-இருந்து புதிய செய்தி: {{message}}", "A11y_incoming_call_dismiss": "தள்ளு", "A11y_incoming_call_swipe_down_to_view_options": "விருப்பங்களைப் பார்க்க கீழே நகர்த்தவும்", + "ABAC_disabled_action_reason": "ABAC-நிர்வகிக்கப்படும் அறைகளில் கிடைக்காது", + "ABAC_managed": "ABAC நிர்வகிக்கப்பட்டது", + "ABAC_managed_description": "இணக்கமான பயனர்கள் மட்டுமே பண்பு அடிப்படையிலான அணுகல் கட்டுப்படுத்தப்பட்ட அறைகளுக்கு அணுகல் கொண்டுள்ளனர். பண்புகள் அறை அணுகலை தீர்மானிக்கின்றன.", + "abac_removed_user_from_the_room": "ABAC மூலம் அகற்றப்பட்டது", + "ABAC_room_attributes": "அறை பண்புகள்", "accept": "ஏற்றுக்கொள்", "Accessibility": "அணுகல் மேம்பாடு", "Accessibility_and_Appearance": "நுகர்வுத்திறன் மற்றும் தோற்றம்", @@ -299,6 +304,7 @@ "error-invalid-file-type": "தவறான கோப்பு வகை", "error-invalid-password": "தவறான கடவுச்சொல்", "error-invalid-room-name": "{{room_name}} என்ற அறைபெயர் செல்லுதலின்று அமைந்திருக்கவில்லை", + "error-invitation-reply-action": "அழைப்பு பதிலை அனுப்பும்போது பிழை", "error-not-allowed": "அனுமதி இல்லை", "error-not-permission-to-upload-file": "கோப்புகளை பதிவேற்ற உங்களுக்கு அனுமதி இல்லை", "error-save-image": "படம் சேமிக்கும் போது பிழை", @@ -312,6 +318,9 @@ "Expiration_Days": "காலாவதி (நாட்கள்)", "Favorite": "பிடித்தது", "Favorites": "பிடித்தவை", + "Federation_Matrix_room_description_disabled": "இந்த பணியிடத்தில் இணைப்பு தற்போது முடக்கப்பட்டுள்ளது", + "Federation_Matrix_room_description_invalid_version": "இந்த அறை ஒரு பழைய இணைப்பு பதிப்பால் உருவாக்கப்பட்டது மற்றும் காலவரையின்றி தடுக்கப்பட்டுள்ளது.", + "Federation_Matrix_room_description_missing_module": "இணைக்கப்பட்ட அறைகளில் சேர்வது ஒரு பிரீமியம் அம்சமாகும்", "Fetch_image_from_URL": "URL இலிருந்து படத்தைப் பெறவும்", "Field_are_required": "{{field}} தேவை.", "Field_is_required": "{{field}} தேவை.", @@ -369,6 +378,11 @@ "Invalid_workspace_URL": "தவறான வேலைத்தள URL", "Invite_Link": "அழைப்பு இணைப்பு", "Invite_users": "பயனர்களை அழை", + "Invited": "அழைக்கப்பட்டது", + "invited_room_description_channel": "நீங்கள் அழைக்கப்பட்டீர்கள்", + "invited_room_description_dm": "நீங்கள் ஒரு உரையாடலை நடத்த அழைக்கப்பட்டீர்கள்", + "invited_room_title_channel": "{{room_name}} இல் சேர அழைப்பு", + "invited_room_title_dm": "செய்தி கோரிக்கை", "IP": "IP", "is_typing": "எழுந்துகொள்ளின்றார்", "Jitsi_authentication_before_making_calls": "ஜிட்சி அங்கத்திற்கு அங்கீகாரம் கேட்கும்போது கால் பரிந்துரை செய்யும் முன். அவர்களின் கொள்கைகளை அறிந்துகொள்ள ஜிட்சி இணையத்திற்கு செல்க.", @@ -549,6 +563,7 @@ "Onboarding_less_options": "குறைந்த விருப்பங்கள்", "Onboarding_more_options": "மேலும் விருப்பங்கள்", "Onboarding_subtitle": "குழு இணையத்திற்கு மேல்", + "One_result_found": "ஒரு முடிவு காணப்பட்டது.", "Online": "இணைந்துள்ளது", "Only_authorized_users_can_write_new_messages": "அநுமதிக்கப்பட்ட பயனர்கள் மட்டும் புதிய செய்திகளை எழுதலாம்", "Oops": "ஒப்ஸ்!", @@ -617,6 +632,7 @@ "Record_audio_message": "ஆடியோ செய்தியை பதிவுசெய்", "Register": "பதிவு செய்", "Registration_Succeeded": "பதிவு செய்தது வெற்றிகரமாகின்றது!", + "reject": "நிராகரி", "Remove": "அகற்று", "remove": "அகற்று", "Remove_from_room": "அலுவலகத்திலிருந்து அகற்று", @@ -692,6 +708,7 @@ "Search_global_users_description": "நீங்கள் இதை செயலிழங்கும் போது, வேறு நிறுவங்களிலுள்ள அந்தரங்க பயனர்களை தேடலாம்.", "Search_Messages": "செய்திகளை தேடு", "Search_messages": "செய்திகளை தேடு", + "Search_Results_found": "{{count}} முடிவுகள் கிடைத்தன.", "Searching": "தேடுகின்றன", "Security_and_privacy": "பாதுகாப்பு மற்றும் தனியுரிமை", "Select": "தேர்ந்தெடு", diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index 6791f0a155a..f209d932ed9 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -12,6 +12,11 @@ "A11y_in_app_notification": "{{name}} నుండి కొత్త సందేశం: {{message}}", "A11y_incoming_call_dismiss": "ఖారు చేయండి", "A11y_incoming_call_swipe_down_to_view_options": "క్రిందికి స్వైప్ చేయి, పరామితులను చూడండి", + "ABAC_disabled_action_reason": "ABAC-నిర్వహించబడే గదులలో అందుబాటులో లేదు", + "ABAC_managed": "ABAC నిర్వహించబడింది", + "ABAC_managed_description": "అట్రిబ్యూట్ ఆధారిత యాక్సెస్ నియంత్రిత గదులకు అనుకూలమైన వినియోగదారులు మాత్రమే ప్రాప్యతను కలిగి ఉంటారు. లక్షణాలు గది ప్రాప్యతను నిర్ణయిస్తాయి.", + "abac_removed_user_from_the_room": "ABAC ద్వారా తొలగించబడింది", + "ABAC_room_attributes": "గది లక్షణాలు", "accept": "అంగీకరించు", "Accessibility": "एक्सेसिबिलिटी", "Accessibility_and_Appearance": "प्रवेशयोग्यता और रूपरेखा", @@ -298,6 +303,7 @@ "error-invalid-file-type": "చెల్లని ఫైలు రకం", "error-invalid-password": "చెల్లని పాస్‌వర్డ్", "error-invalid-room-name": "{{room_name}} చెల్లని కొరకు పేరు", + "error-invitation-reply-action": "ఆహ్వాన ప్రతిస్పందనను పంపించడంలో లోపం", "error-not-allowed": "అనుమతి లేదు", "error-not-permission-to-upload-file": "మీకు ఫైలులను అప్‌లోడ్ చేయడానికి అనుమతి లేదు", "error-save-image": "చిత్రం సేవ్ చేయడంలో లోపం", @@ -311,6 +317,9 @@ "Expiration_Days": "కాలాంతరం (రోజులు)", "Favorite": "पसंदीदा", "Favorites": "ఇష్టాలు", + "Federation_Matrix_room_description_disabled": "ఈ వర్క్‌స్పేస్‌లో ఫెడరేషన్ ప్రస్తుతం నిలిపివేయబడింది", + "Federation_Matrix_room_description_invalid_version": "ఈ గది పాత ఫెడరేషన్ వెర్షన్‌తో సృష్టించబడింది మరియు నిరవధికంగా నిరోధించబడింది.", + "Federation_Matrix_room_description_missing_module": "ఫెడరేటెడ్ గదులలో చేరడం ఒక ప్రీమియం ఫీచర్", "Fetch_image_from_URL": "URL నుండి చిత్రాన్ని పొందండి", "Field_are_required": "{{field}} आवश्यक हैं", "Field_is_required": "{{field}} आवश्यक है।", @@ -368,6 +377,11 @@ "Invalid_workspace_URL": "చెల్లని వర్క్‌స్పేస్ URL", "Invite_Link": "ఆమంత్రణ లింక్", "Invite_users": "వాడికి ఆమంత్రణం పంపండి", + "Invited": "ఆహ్వానించబడింది", + "invited_room_description_channel": "మీరు ఆహ్వానించబడ్డారు", + "invited_room_description_dm": "మీరు సంభాషణ కలిగి ఉండడానికి ఆహ్వానించబడ్డారు", + "invited_room_title_channel": "{{room_name}} లో చేరడానికి ఆహ్వానం", + "invited_room_title_dm": "సందేశ అభ్యర్థన", "IP": "IP", "is_typing": "టైపు చేస్తోంది", "Jitsi_authentication_before_making_calls": "కాల్స్ చేసే ముందు Jitsi పరిశోధన అవసరం ఉండవచ్చు. వారి నయంత్రాల గురించి అడగించడానికి, Jitsi వెబ్‌సైట్‌ను సందర్శించండి.", @@ -548,6 +562,7 @@ "Onboarding_less_options": "తక్కువ ఎంపికలు", "Onboarding_more_options": "మరికొన్ని ఎంపికలు", "Onboarding_subtitle": "దల సహయాకాంక్ష", + "One_result_found": "ఒక ఫలితం కనుగొనబడింది।", "Online": "ఆన్‌లైన్", "Only_authorized_users_can_write_new_messages": "కేవలం అనుమతించబడిన వాడులు కొత్త సందేశాలను రాయగలరు", "Oops": "అయ్యో!", @@ -616,6 +631,7 @@ "Record_audio_message": "ऑडियो संदेश रिकॉर्ड करें", "Register": "నమోదు", "Registration_Succeeded": "నమోదు విజయవంతంగా చేయబడింది!", + "reject": "తిరస్కరించు", "Remove": "తొలగించండి", "remove": "తొలగించండి", "Remove_from_room": "కొరకున్ని తీసివేయండి", @@ -691,6 +707,7 @@ "Search_global_users_description": "మీరు ఆన్‌చర్చలోని అన్యాన్య కంపెనీలు లేదా పనుల కిందరా ఏ వాడుకరిని వెతుకుతున్నట్లు ఉంటే, మీరు ఇదను ఎంచుకోవచ్చు.", "Search_Messages": "సందేశాలను వెతుకు", "Search_messages": "సందేశాలను శోధించండి", + "Search_Results_found": "{{count}} ఫలితాలు కనుగొనబడ్డాయి।", "Searching": "శోధిస్తోంది", "Security_and_privacy": "భద్రత మరియు గోప్యత", "Select": "ఎంచుకోండి", diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index 800c6feeb98..051fc752a8c 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "Yeni mesaj {{name}}: {{message}}", "A11y_incoming_call_dismiss": "Dismiss et.", "A11y_incoming_call_swipe_down_to_view_options": "Aşağı kaydırarak seçenekleri görüntüle", + "ABAC_disabled_action_reason": "ABAC tarafından yönetilen odalarda mevcut değil", + "ABAC_managed": "ABAC tarafından yönetilir", + "ABAC_managed_description": "Yalnızca uyumlu kullanıcılar, öznitelik tabanlı erişim kontrollü odalara erişebilir. Öznitelikler, oda erişimini belirler.", + "abac_removed_user_from_the_room": "ABAC tarafından kaldırıldı", + "ABAC_room_attributes": "Oda özellikleri", "Accessibility": "Erişilebilirlik", "Accessibility_and_Appearance": "Erişilebilirlik ve görünüm", "Accessibility_statement": "Erişilebilirlik beyanı", @@ -208,6 +213,7 @@ "error-invalid-file-type": "Geçersiz dosya türü!", "error-invalid-password": "Geçersiz şifre!", "error-invalid-room-name": "{{room_name}}, geçerli bir oda adı değil!", + "error-invitation-reply-action": "Davet yanıtı gönderilirken hata oluştu", "error-not-allowed": "İzin verilmedi", "error-save-image": "Görüntüyü kaydederken hata oluştu!", "error-save-video": "Videoyu kaydederken hata oluştu!", @@ -217,6 +223,9 @@ "Expiration_Days": "Geçerlilik Süresi (Gün)", "Favorite": "Favori", "Favorites": "Favoriler", + "Federation_Matrix_room_description_disabled": "Federasyon şu anda bu çalışma alanında devre dışı", + "Federation_Matrix_room_description_invalid_version": "Bu oda eski bir Federasyon sürümü tarafından oluşturuldu ve süresiz olarak engellendi.", + "Federation_Matrix_room_description_missing_module": "Federe odalara katılmak bir Premium özelliğidir", "Fetch_image_from_URL": "URL'den resim al", "Field_are_required": "{{field}} gereklidir.", "Field_is_required": "{{field}} gerekli", @@ -270,6 +279,11 @@ "Invite_user_to_join_channel_all_from": "[#kanal] 'daki tüm kullanıcıları bu kanala katılmaya davet et", "Invite_user_to_join_channel_all_to": "Bu kanaldaki tüm kullanıcıları [#kanal] katılmaya davet edin", "Invite_users": "Kullanıcıları davet et", + "Invited": "Davet edildi", + "invited_room_description_channel": "Tarafından davet edildiniz", + "invited_room_description_dm": "Bir konuşma yapmak için davet edildiniz", + "invited_room_title_channel": "{{room_name}} katılma daveti", + "invited_room_title_dm": "Mesaj isteği", "IP": "IP", "is_typing": "yazıyor", "Join": "Katıl", @@ -398,6 +412,7 @@ "Onboarding_less_options": "Daha az seçenek", "Onboarding_more_options": "Daha çok seçenek", "Onboarding_subtitle": "Ekip İşbirliğinin Ötesinde", + "One_result_found": "Bir sonuç bulundu.", "Online": "Çevrimiçi", "Only_authorized_users_can_write_new_messages": "Yalnızca yetkili kullanıcılar yeni ileti yazabilir", "Oops": "Ahh!", @@ -460,6 +475,7 @@ "Record_audio_message": "Sesli mesaj kaydet", "Register": "Kayıt Ol", "Registration_Succeeded": "Kayıt Başarılı!", + "reject": "Reddet", "Remove": "Kaldır", "Remove_from_room": "Odadan çıkar", "Remove_from_workspace_history": "Çalışma alanı geçmişinden kaldır", @@ -510,6 +526,7 @@ "Search_global_users_description": "Açarsanız, diğer şirketlerden veya sunuculardan herhangi bir kullanıcıyı arayabilirsiniz.", "Search_Messages": "İleti ara", "Search_messages": "İletilerda ara", + "Search_Results_found": "{{count}} sonuç bulundu.", "Security_and_privacy": "Güvenlik ve gizlilik", "Select_a_Channel": "Kanal Seç", "Select_a_Department": "Bölüm Seç", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index cee75dd268c..95d7ee7684c 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "来自{{name}}的新消息:{{message}}", "A11y_incoming_call_dismiss": "关闭", "A11y_incoming_call_swipe_down_to_view_options": "向下滑动以查看选项", + "ABAC_disabled_action_reason": "在ABAC管理的房间中不可用", + "ABAC_managed": "ABAC 管理", + "ABAC_managed_description": "只有符合条件的用户才能访问基于属性的访问控制房间。属性决定房间访问权限。", + "abac_removed_user_from_the_room": "被ABAC删除", + "ABAC_room_attributes": "房间属性", "Accessibility": "无障碍性", "Accessibility_and_Appearance": "辅助功能和外观", "Accessibility_statement": "无障碍声明", @@ -204,6 +209,7 @@ "error-invalid-file-type": "无效的文件类型", "error-invalid-password": "无效的密码", "error-invalid-room-name": "{{room_name}} 不是合法的聊天室名称", + "error-invitation-reply-action": "发送邀请回复时出错", "error-not-allowed": "不允许", "error-save-image": "错误,无法保存图片", "error-save-video": "错误,无法保存視頻", @@ -213,6 +219,9 @@ "Expiration_Days": "到期 (日)", "Favorite": "收藏", "Favorites": "收藏", + "Federation_Matrix_room_description_disabled": "此工作区当前已禁用联合", + "Federation_Matrix_room_description_invalid_version": "此房间由旧版联合创建,已被无限期阻止。", + "Federation_Matrix_room_description_missing_module": "加入联合房间是高级功能", "Fetch_image_from_URL": "从URL获取图片", "Field_are_required": "{{field}}为必填项。", "Field_is_required": "{{field}}为必填项。", @@ -259,6 +268,11 @@ "Invalid_workspace_URL": "无效的工作区 URL", "Invite_Link": "邀请链接", "Invite_users": "邀请用戶", + "Invited": "已邀请", + "invited_room_description_channel": "您已被邀请", + "invited_room_description_dm": "您已被邀请进行对话", + "invited_room_title_channel": "加入 {{room_name}} 的邀请", + "invited_room_title_dm": "消息请求", "IP": "IP", "is_typing": "正在输入", "Join": "加入", @@ -381,6 +395,7 @@ "Onboarding_less_options": "较少选项", "Onboarding_more_options": "较多选项", "Onboarding_subtitle": "超越团队合作", + "One_result_found": "找到一个结果。", "Online": "在线", "Only_authorized_users_can_write_new_messages": "只有经过授权的用户才能写新信息", "Oops": "哎呀!", @@ -443,6 +458,7 @@ "Record_audio_message": "录制语音消息", "Register": "注册", "Registration_Succeeded": "注册成功", + "reject": "拒绝", "Remove": "移除", "Remove_from_workspace_history": "从工作区历史记录中移除", "replies": "回覆", @@ -491,6 +507,7 @@ "Search_global_users_description": "如果启用,您将可以搜寻其他公司、服务器上的任何用戶", "Search_Messages": "搜索信息", "Search_messages": "搜索信息", + "Search_Results_found": "{{count}} 个结果已找到。", "Security_and_privacy": "安全与隐私", "Select_a_Channel": "选择一个频道", "Select_a_Department": "选择一个部门", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index a59c0df892d..b66d5dee1c8 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -8,6 +8,11 @@ "A11y_in_app_notification": "來自 {{name}} 的新訊息:{{message}}", "A11y_incoming_call_dismiss": "關閉", "A11y_incoming_call_swipe_down_to_view_options": "向下滑動以查看選項", + "ABAC_disabled_action_reason": "無法在 ABAC 管理的房間中使用", + "ABAC_managed": "ABAC 管理", + "ABAC_managed_description": "只有符合條件的使用者才能存取基於屬性的存取控制房間。屬性決定房間存取權限。", + "abac_removed_user_from_the_room": "被ABAC刪除", + "ABAC_room_attributes": "房間屬性", "Accessibility": "無障礙設施", "Accessibility_and_Appearance": "無障礙功能與外觀", "Accessibility_statement": "无障碍声明", @@ -210,6 +215,7 @@ "error-invalid-file-type": "無效的檔案類型", "error-invalid-password": "無效的密碼", "error-invalid-room-name": "{{room_name}} 不是一個有效的聊天室名稱", + "error-invitation-reply-action": "發送邀請回覆時出錯", "error-not-allowed": "不允許", "error-not-permission-to-upload-file": "You don't have permission to upload files", "error-save-image": "錯誤,無法儲存圖片", @@ -221,6 +227,9 @@ "Expiration_Days": "到期 (日)", "Favorite": "最愛", "Favorites": "我的最愛", + "Federation_Matrix_room_description_disabled": "此工作區目前已停用聯合", + "Federation_Matrix_room_description_invalid_version": "此房間由舊版聯合建立,已被無限期封鎖。", + "Federation_Matrix_room_description_missing_module": "加入聯合房間是進階功能", "Fetch_image_from_URL": "從URL獲取圖片", "Field_are_required": "{{field}}為必填項目", "Field_is_required": "{{field}} 是必填項目", @@ -272,6 +281,11 @@ "Invite_user_to_join_channel_all_from": "邀請[#channel]中的所有使用者加入此頻道", "Invite_user_to_join_channel_all_to": "邀請此頻道的所有使用者加入[#頻道]", "Invite_users": "邀請使用者", + "Invited": "已邀請", + "invited_room_description_channel": "您已被邀請", + "invited_room_description_dm": "您已被邀請進行對話", + "invited_room_title_channel": "加入 {{room_name}} 的邀請", + "invited_room_title_dm": "訊息請求", "IP": "IP", "is_typing": "正在輸入", "Join": "加入", @@ -398,6 +412,7 @@ "Onboarding_less_options": "較少選項", "Onboarding_more_options": "較多選項", "Onboarding_subtitle": "超越團隊合作", + "One_result_found": "找到一個結果。", "Online": "上線", "Only_authorized_users_can_write_new_messages": "只有經過授權的使用者才能寫新訊息", "Oops": "哎呀!", @@ -460,6 +475,7 @@ "Record_audio_message": "錄製語音訊息", "Register": "註冊", "Registration_Succeeded": "註冊成功", + "reject": "拒絕", "Remove": "移除", "Remove_from_workspace_history": "從工作區歷史記錄中刪除", "Remove_someone_from_room": "從房間中刪除某人", @@ -509,6 +525,7 @@ "Search_global_users_description": "如果啟用,您將可以搜尋其他公司、伺服器上的任何使用者", "Search_Messages": "搜尋訊息", "Search_messages": "搜尋訊息", + "Search_Results_found": "找到 {{count}} 個結果。", "Security_and_privacy": "安全與隱私", "Select_a_Channel": "選擇一個頻道", "Select_a_Department": "選擇一個部門", diff --git a/app/index.tsx b/app/index.tsx index 3e87e3bcaa0..88f8347445f 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -32,7 +32,7 @@ import { unsubscribeTheme } from './lib/methods/helpers/theme'; import { initializePushNotifications, onNotification } from './lib/notifications'; -import { getInitialNotification } from './lib/notifications/videoConf/getInitialNotification'; +import { getInitialNotification, setupVideoConfActionListener } from './lib/notifications/videoConf/getInitialNotification'; import store from './lib/store'; import { initStore } from './lib/store/auxStore'; import { type TSupportedThemes, ThemeContext } from './theme'; @@ -85,6 +85,7 @@ const parseDeepLinking = (url: string) => { export default class Root extends React.Component<{}, IState> { private listenerTimeout!: any; private dimensionsListener?: EmitterSubscription; + private videoConfActionCleanup?: () => void; constructor(props: any) { super(props); @@ -116,11 +117,15 @@ export default class Root extends React.Component<{}, IState> { }); }, 5000); this.dimensionsListener = Dimensions.addEventListener('change', this.onDimensionsChange); + + // Set up video conf action listener for background accept/decline + this.videoConfActionCleanup = setupVideoConfActionListener(); } componentWillUnmount() { clearTimeout(this.listenerTimeout); this.dimensionsListener?.remove?.(); + this.videoConfActionCleanup?.(); unsubscribeTheme(); } @@ -138,7 +143,10 @@ export default class Root extends React.Component<{}, IState> { return; } - await getInitialNotification(); + const handledVideoConf = await getInitialNotification(); + if (handledVideoConf) { + return; + } // Open app from deep linking const deepLinking = await Linking.getInitialURL(); diff --git a/app/lib/constants/defaultSettings.ts b/app/lib/constants/defaultSettings.ts index 74b3f1ed355..aac112fd0f2 100644 --- a/app/lib/constants/defaultSettings.ts +++ b/app/lib/constants/defaultSettings.ts @@ -300,5 +300,11 @@ export const defaultSettings = { Cloud_Workspace_AirGapped_Restrictions_Remaining_Days: { type: 'valueAsNumber' }, + Federation_Service_Enabled: { + type: 'valueAsBoolean' + }, + Federation_Matrix_enabled: { + type: 'valueAsBoolean' + }, ...deprecatedSettings } as const; diff --git a/app/lib/database/model/Subscription.js b/app/lib/database/model/Subscription.js index 396817283bb..8c0db9d18ca 100644 --- a/app/lib/database/model/Subscription.js +++ b/app/lib/database/model/Subscription.js @@ -153,6 +153,14 @@ export default class Subscription extends Model { @field('federated') federated; + @json('abac_attributes', sanitizer) abacAttributes; + + @json('federation', sanitizer) federation; + + @field('status') status; + + @json('inviter', sanitizer) inviter; + asPlain() { return { _id: this._id, @@ -219,7 +227,11 @@ export default class Subscription extends Model { usersCount: this.usersCount, source: this.source, disableNotifications: this.disableNotifications, - federated: this.federated + federated: this.federated, + abacAttributes: this.abacAttributes, + federation: this.federation, + status: this.status, + inviter: this.inviter }; } } diff --git a/app/lib/database/model/migrations.js b/app/lib/database/model/migrations.js index 601ece52607..17cecfe4e2b 100644 --- a/app/lib/database/model/migrations.js +++ b/app/lib/database/model/migrations.js @@ -331,6 +331,20 @@ export default schemaMigrations({ columns: [{ name: 'federated', type: 'boolean', isOptional: true }] }) ] + }, + { + toVersion: 28, + steps: [ + addColumns({ + table: 'subscriptions', + columns: [ + { name: 'abac_attributes', type: 'string', isOptional: true }, + { name: 'federation', type: 'string', isOptional: true }, + { name: 'status', type: 'string', isOptional: true }, + { name: 'inviter', type: 'string', isOptional: true } + ] + }) + ] } ] }); diff --git a/app/lib/database/schema/app.js b/app/lib/database/schema/app.js index acca231cc08..d5b8df00b5c 100644 --- a/app/lib/database/schema/app.js +++ b/app/lib/database/schema/app.js @@ -1,7 +1,7 @@ import { appSchema, tableSchema } from '@nozbe/watermelondb'; export default appSchema({ - version: 27, + version: 28, tables: [ tableSchema({ name: 'subscriptions', @@ -70,7 +70,11 @@ export default appSchema({ { name: 'users_count', type: 'number', isOptional: true }, { name: 'unmuted', type: 'string', isOptional: true }, { name: 'disable_notifications', type: 'boolean', isOptional: true }, - { name: 'federated', type: 'boolean', isOptional: true } + { name: 'federated', type: 'boolean', isOptional: true }, + { name: 'abac_attributes', type: 'string', isOptional: true }, + { name: 'federation', type: 'string', isOptional: true }, + { name: 'status', type: 'string', isOptional: true }, + { name: 'inviter', type: 'string', isOptional: true } ] }), tableSchema({ diff --git a/app/lib/dayjs/index.ts b/app/lib/dayjs/index.ts new file mode 100644 index 00000000000..f492c042909 --- /dev/null +++ b/app/lib/dayjs/index.ts @@ -0,0 +1,40 @@ +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc'; +import timezone from 'dayjs/plugin/timezone'; +import calendar from 'dayjs/plugin/calendar'; +import relativeTime from 'dayjs/plugin/relativeTime'; +import localizedFormat from 'dayjs/plugin/localizedFormat'; + +import 'dayjs/locale/en'; +import 'dayjs/locale/ar'; +import 'dayjs/locale/bn'; +import 'dayjs/locale/cs'; +import 'dayjs/locale/de'; +import 'dayjs/locale/es'; +import 'dayjs/locale/fi'; +import 'dayjs/locale/fr'; +import 'dayjs/locale/hi'; +import 'dayjs/locale/hu'; +import 'dayjs/locale/it'; +import 'dayjs/locale/ja'; +import 'dayjs/locale/nl'; +import 'dayjs/locale/nb'; +import 'dayjs/locale/nn'; +import 'dayjs/locale/pt-br'; +import 'dayjs/locale/pt'; +import 'dayjs/locale/ru'; +import 'dayjs/locale/sl'; +import 'dayjs/locale/sv'; +import 'dayjs/locale/ta'; +import 'dayjs/locale/te'; +import 'dayjs/locale/tr'; +import 'dayjs/locale/zh-cn'; +import 'dayjs/locale/zh-tw'; + +dayjs.extend(utc); +dayjs.extend(timezone); +dayjs.extend(calendar); +dayjs.extend(relativeTime); +dayjs.extend(localizedFormat); + +export default dayjs; diff --git a/app/lib/methods/AudioManager.ts b/app/lib/methods/AudioManager.ts index 9ee29e99889..ee4b9bec978 100644 --- a/app/lib/methods/AudioManager.ts +++ b/app/lib/methods/AudioManager.ts @@ -1,7 +1,7 @@ import { type AVPlaybackStatus, Audio } from 'expo-av'; import { Q } from '@nozbe/watermelondb'; -import moment from 'moment'; +import dayjs from '../dayjs'; import { getMessageById } from '../database/services/Message'; import database from '../database'; import { getFilePathAudio } from './getFilePathAudio'; @@ -120,7 +120,7 @@ class AudioManagerClass { const msg = await getMessageById(msgId); if (msg) { const db = database.active; - const whereClause: Q.Clause[] = [Q.sortBy('ts', Q.asc), Q.where('ts', Q.gt(moment(msg.ts).valueOf())), Q.take(1)]; + const whereClause: Q.Clause[] = [Q.sortBy('ts', Q.asc), Q.where('ts', Q.gt(dayjs(msg.ts).valueOf())), Q.take(1)]; if (msg.tmid) { whereClause.push(Q.where('tmid', msg.tmid || msg.id)); diff --git a/app/lib/methods/checkSupportedVersions.ts b/app/lib/methods/checkSupportedVersions.ts index 10e8ddf37af..8f98b1dc950 100644 --- a/app/lib/methods/checkSupportedVersions.ts +++ b/app/lib/methods/checkSupportedVersions.ts @@ -1,7 +1,7 @@ -import moment from 'moment'; import coerce from 'semver/functions/coerce'; import satisfies from 'semver/functions/satisfies'; +import dayjs from '../dayjs'; import { type ISupportedVersionsData, type TSVDictionary, type TSVMessage, type TSVStatus } from '../../definitions'; import builtInSupportedVersions from '../../../app-supportedversions.json'; @@ -12,11 +12,11 @@ export const getMessage = ({ messages?: TSVMessage[]; expiration?: string; }): TSVMessage | undefined => { - if (!messages?.length || !expiration || moment(expiration).diff(new Date(), 'days') < 0) { + if (!messages?.length || !expiration || dayjs(expiration).diff(new Date(), 'days') < 0) { return; } const sortedMessages = messages.sort((a, b) => a.remainingDays - b.remainingDays); - return sortedMessages.find(({ remainingDays }) => moment(expiration).diff(new Date(), 'hours') <= remainingDays * 24); + return sortedMessages.find(({ remainingDays }) => dayjs(expiration).diff(new Date(), 'hours') <= remainingDays * 24); }; const getStatus = ({ expiration, message }: { expiration?: string; message?: TSVMessage }): TSVStatus => { diff --git a/app/lib/methods/getInvitationData.ts b/app/lib/methods/getInvitationData.ts new file mode 100644 index 00000000000..c4028f097a7 --- /dev/null +++ b/app/lib/methods/getInvitationData.ts @@ -0,0 +1,21 @@ +import { type IInviteSubscription } from '../../definitions'; +import I18n from '../../i18n'; +import { getRoomTitle } from './helpers'; +import { replyRoomInvite } from './replyRoomInvite'; + +export const getInvitationData = (room: IInviteSubscription) => { + const title = + room.t === 'd' + ? I18n.t('invited_room_title_dm') + : I18n.t('invited_room_title_channel', { room_name: getRoomTitle(room).slice(0, 30) }); + + const description = room.t === 'd' ? I18n.t('invited_room_description_dm') : I18n.t('invited_room_description_channel'); + + return { + title, + description, + inviter: room.inviter, + accept: () => replyRoomInvite(room.id, 'accept'), + reject: () => replyRoomInvite(room.id, 'reject') + }; +}; diff --git a/app/lib/methods/getPermissions.ts b/app/lib/methods/getPermissions.ts index 8bf2fd21db0..02082089ad1 100644 --- a/app/lib/methods/getPermissions.ts +++ b/app/lib/methods/getPermissions.ts @@ -66,7 +66,9 @@ export const SUPPORTED_PERMISSIONS = [ 'create-team-channel', 'create-team-group', 'delete-team-channel', - 'delete-team-group' + 'delete-team-group', + 'mention-all', + 'mention-here' ] as const; export async function setPermissions(): Promise<void> { diff --git a/app/lib/methods/getQuoteAttachment.test.ts b/app/lib/methods/getQuoteAttachment.test.ts index 792b111ae45..e81e5044f8c 100644 --- a/app/lib/methods/getQuoteAttachment.test.ts +++ b/app/lib/methods/getQuoteAttachment.test.ts @@ -19,7 +19,7 @@ const imageAttachmentWithAQuote = [ ...imageAttachment, { - text: '[ ](https://mobile.rocket.chat/group/channel-etc?msg=cIqhbvkOSgiCOK4Wh) \nhttps://www.youtube.com/watch?v=5yx6BWlEVcY', + text: '[ ](https://mobile.qa.rocket.chat/group/channel-etc?msg=cIqhbvkOSgiCOK4Wh) \nhttps://www.youtube.com/watch?v=5yx6BWlEVcY', md: [ { type: 'PARAGRAPH', @@ -27,7 +27,7 @@ const imageAttachmentWithAQuote = [ { type: 'LINK', value: { - src: { type: 'PLAIN_TEXT', value: 'https://mobile.rocket.chat/group/channel-etc?msg=cIqhbvkOSgiCOK4Wh' }, + src: { type: 'PLAIN_TEXT', value: 'https://mobile.qa.rocket.chat/group/channel-etc?msg=cIqhbvkOSgiCOK4Wh' }, label: [{ type: 'PLAIN_TEXT', value: ' ' }] } }, @@ -47,7 +47,7 @@ const imageAttachmentWithAQuote = [ ] } ], - message_link: 'https://mobile.rocket.chat/group/channel-etc?msg=n5WaK5NRJN42Hg26w', + message_link: 'https://mobile.qa.rocket.chat/group/channel-etc?msg=n5WaK5NRJN42Hg26w', author_name: 'user-two', author_icon: '/avatar/user-two', attachments: [ @@ -67,7 +67,7 @@ const imageAttachmentWithAQuote = [ ] } ], - message_link: 'https://mobile.rocket.chat/group/channel-etc?msg=cIqhbvkOSgiCOK4Wh', + message_link: 'https://mobile.qa.rocket.chat/group/channel-etc?msg=cIqhbvkOSgiCOK4Wh', author_name: 'user-two', author_icon: '/avatar/user-two', ts: '2023-11-23T14:10:18.520Z', @@ -88,7 +88,7 @@ describe('Test the getQuoteMessageLink', () => { expect(getQuoteMessageLink(imageAttachment)).toBe(undefined); }); it('return the message link from an image message with a quote', () => { - const expectedResult = 'https://mobile.rocket.chat/group/channel-etc?msg=n5WaK5NRJN42Hg26w'; + const expectedResult = 'https://mobile.qa.rocket.chat/group/channel-etc?msg=n5WaK5NRJN42Hg26w'; expect(getQuoteMessageLink(imageAttachmentWithAQuote)).toBe(expectedResult); }); }); diff --git a/app/lib/methods/getServerInfo.ts b/app/lib/methods/getServerInfo.ts index b930e383d32..aaf347d0ef1 100644 --- a/app/lib/methods/getServerInfo.ts +++ b/app/lib/methods/getServerInfo.ts @@ -1,6 +1,6 @@ import { KJUR } from 'jsrsasign'; -import moment from 'moment'; +import dayjs from '../dayjs'; import { getSupportedVersionsCloud } from '../services/restApi'; import { type TCloudInfo, @@ -81,7 +81,7 @@ export async function getServerInfo(server: string): Promise<TServerInfoResult> const serverRecord = await getServerById(server); if ( serverRecord?.supportedVersionsUpdatedAt && - moment(new Date()).diff(serverRecord?.supportedVersionsUpdatedAt, 'hours') <= SV_CLOUD_UPDATE_INTERVAL + dayjs(new Date()).diff(serverRecord?.supportedVersionsUpdatedAt, 'hours') <= SV_CLOUD_UPDATE_INTERVAL ) { return { ...serverInfo, diff --git a/app/lib/methods/helpers/getAvatarUrl.test.ts b/app/lib/methods/helpers/getAvatarUrl.test.ts index e778e14505e..635f87b2b2b 100644 --- a/app/lib/methods/helpers/getAvatarUrl.test.ts +++ b/app/lib/methods/helpers/getAvatarUrl.test.ts @@ -4,10 +4,10 @@ jest.mock('react-native', () => ({ PixelRatio: { get: () => 1 } })); describe('formatUrl function', () => { test('formats the default URL to get the user avatar', () => { - const url = 'https://mobile.rocket.chat/avatar/reinaldoneto'; + const url = 'https://mobile.qa.rocket.chat/avatar/reinaldoneto'; const size = 30; const query = '&extraparam=true'; - const expected = 'https://mobile.rocket.chat/avatar/reinaldoneto?format=png&size=30&extraparam=true'; + const expected = 'https://mobile.qa.rocket.chat/avatar/reinaldoneto?format=png&size=30&extraparam=true'; const result = formatUrl(url, size, query); expect(result).toEqual(expected); }); diff --git a/app/lib/methods/helpers/localAuthentication.ts b/app/lib/methods/helpers/localAuthentication.ts index 7059983cf02..8dd1b005f55 100644 --- a/app/lib/methods/helpers/localAuthentication.ts +++ b/app/lib/methods/helpers/localAuthentication.ts @@ -2,8 +2,8 @@ import * as LocalAuthentication from 'expo-local-authentication'; import RNBootSplash from 'react-native-bootsplash'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { sha256 } from 'js-sha256'; -import moment from 'moment'; +import dayjs from '../../dayjs'; import UserPreferences from '../userPreferences'; import { store } from '../../store/auxStore'; import database from '../../database'; @@ -146,7 +146,7 @@ export const localAuthenticate = async (server: string): Promise<void> => { // `checkHasPasscode` results newPasscode = true if a passcode has been set if (!result?.newPasscode) { // diff to last authenticated session - const diffToLastSession = moment(timesync).diff(serverRecord?.lastLocalAuthenticatedSession, 'seconds'); + const diffToLastSession = dayjs(timesync).diff(serverRecord?.lastLocalAuthenticatedSession, 'seconds'); // if it was not possible to get `timesync` from server or the last authenticated session is older than the configured auto lock time, authentication is required if (!timesync || (serverRecord?.autoLockTime && diffToLastSession >= serverRecord.autoLockTime)) { diff --git a/app/lib/methods/helpers/mergeSubscriptionsRooms.ts b/app/lib/methods/helpers/mergeSubscriptionsRooms.ts index a120a8e920c..669c76b91ea 100644 --- a/app/lib/methods/helpers/mergeSubscriptionsRooms.ts +++ b/app/lib/methods/helpers/mergeSubscriptionsRooms.ts @@ -14,6 +14,7 @@ import { } from '../../../definitions'; import { compareServerVersion } from './compareServerVersion'; +// eslint-disable-next-line complexity export const merge = ( subscription: ISubscription | IServerSubscription, room?: IRoom | IServerRoom | IOmnichannelRoom @@ -64,6 +65,9 @@ export const merge = ( mergedSubscription.teamId = room?.teamId; mergedSubscription.teamMain = room?.teamMain; mergedSubscription.federated = room?.federated; + if (room && 'abacAttributes' in room) { + mergedSubscription.abacAttributes = room.abacAttributes || []; + } if (!mergedSubscription.roles || !mergedSubscription.roles.length) { mergedSubscription.roles = []; } @@ -102,6 +106,10 @@ export const merge = ( if (room && 'usersCount' in room) { mergedSubscription.usersCount = room.usersCount; } + + if (room && 'federation' in room) { + mergedSubscription.federation = room.federation; + } } if (!mergedSubscription.name) { @@ -112,6 +120,8 @@ export const merge = ( mergedSubscription.autoTranslate = false; } + mergedSubscription.status = mergedSubscription.status ?? undefined; + mergedSubscription.inviter = mergedSubscription.inviter ?? undefined; mergedSubscription.blocker = !!mergedSubscription.blocker; mergedSubscription.blocked = !!mergedSubscription.blocked; mergedSubscription.hideMentionStatus = !!mergedSubscription.hideMentionStatus; diff --git a/app/lib/methods/helpers/normalizeMessage.ts b/app/lib/methods/helpers/normalizeMessage.ts index 186a7e188dd..e5bf66d0e10 100644 --- a/app/lib/methods/helpers/normalizeMessage.ts +++ b/app/lib/methods/helpers/normalizeMessage.ts @@ -1,5 +1,4 @@ -import moment from 'moment'; - +import dayjs from '../../dayjs'; import parseUrls from './parseUrls'; import type { IAttachment, IMessage, IThreadResult } from '../../../definitions'; @@ -15,7 +14,7 @@ function normalizeAttachments(msg: TMsg) { .map(att => { att.fields = att.fields || []; if (att.ts) { - att.ts = moment(att.ts).toDate(); + att.ts = dayjs(att.ts).toDate(); } att = normalizeAttachments(att as TMsg); return att; diff --git a/app/lib/methods/helpers/room.ts b/app/lib/methods/helpers/room.ts index c4d6d43896a..9f270c3c4e4 100644 --- a/app/lib/methods/helpers/room.ts +++ b/app/lib/methods/helpers/room.ts @@ -1,5 +1,4 @@ -import moment from 'moment'; - +import dayjs from '../../dayjs'; import { themes } from '../../constants/colors'; import I18n from '../../../i18n'; import { type IAttachment, SubscriptionType, type TSubscriptionModel } from '../../../definitions'; @@ -23,7 +22,7 @@ export const capitalize = (s: string): string => { }; export const formatDateAccessibility = (date: string | Date): string => - moment(date).calendar(null, { + dayjs(date).calendar(null, { lastDay: `[${I18n.t('Last_updated')}] [${I18n.t('Yesterday')}]`, sameDay: `[${I18n.t('Last_updated_at')}] LT`, lastWeek: `[${I18n.t('Last_updated_on')}] dddd`, @@ -31,7 +30,7 @@ export const formatDateAccessibility = (date: string | Date): string => }); export const formatDate = (date: string | Date): string => - moment(date).calendar(null, { + dayjs(date).calendar(null, { lastDay: `[${I18n.t('Yesterday')}]`, sameDay: 'LT', lastWeek: 'dddd', @@ -39,7 +38,7 @@ export const formatDate = (date: string | Date): string => }); export const formatDateThreads = (date: string | Date): string => - moment(date).calendar(null, { + dayjs(date).calendar(null, { sameDay: 'LT', lastDay: `[${I18n.t('Yesterday')}] LT`, lastWeek: 'dddd LT', diff --git a/app/lib/methods/helpers/sslPinning.ts b/app/lib/methods/helpers/sslPinning.ts index cc0b42e4ade..d6ab84cb022 100644 --- a/app/lib/methods/helpers/sslPinning.ts +++ b/app/lib/methods/helpers/sslPinning.ts @@ -26,7 +26,10 @@ const persistCertificate = (server: string, name: string, password?: string) => password }; UserPreferences.setMap(name, certificate); - UserPreferences.setMap(extractHostname(server), certificate); + const hostname = extractHostname(server); + if (hostname) { + UserPreferences.setMap(hostname, certificate); + } UserPreferences.setString(`${CERTIFICATE_KEY}-${server}`, name); return certificate; }; diff --git a/app/lib/methods/isInviteSubscription.ts b/app/lib/methods/isInviteSubscription.ts new file mode 100644 index 00000000000..1ded5edcfb8 --- /dev/null +++ b/app/lib/methods/isInviteSubscription.ts @@ -0,0 +1,4 @@ +import { type IInviteSubscription, type ISubscription } from '../../definitions'; + +export const isInviteSubscription = (subscription: ISubscription): subscription is IInviteSubscription => + subscription?.status === 'INVITED' && !!subscription.inviter; diff --git a/app/lib/methods/isRoomFederated.ts b/app/lib/methods/isRoomFederated.ts index 910ae6b7e96..513b8109bf9 100644 --- a/app/lib/methods/isRoomFederated.ts +++ b/app/lib/methods/isRoomFederated.ts @@ -1,8 +1,19 @@ import { type ISubscription } from '../../definitions'; -interface IRoomFederated extends ISubscription { +export interface IRoomFederated extends ISubscription { federated: true; } +export interface IRoomNativeFederated extends IRoomFederated { + federation: { + version: number; + mrid: string; + origin: string; + }; +} + export const isRoomFederated = (room: ISubscription): room is IRoomFederated => 'federated' in room && (room as any).federated === true; + +export const isRoomNativeFederated = (room: ISubscription): room is IRoomNativeFederated => + isRoomFederated(room) && 'federation' in room && !!room.federation; diff --git a/app/lib/methods/loadMessagesForRoom.ts b/app/lib/methods/loadMessagesForRoom.ts index 501ed034f26..747b8b2aad2 100644 --- a/app/lib/methods/loadMessagesForRoom.ts +++ b/app/lib/methods/loadMessagesForRoom.ts @@ -1,5 +1,4 @@ -import moment from 'moment'; - +import dayjs from '../dayjs'; import { MessageTypeLoad } from '../constants/messageTypeLoad'; import { type IMessage, type TMessageModel } from '../../definitions'; import log from './helpers/log'; @@ -82,7 +81,7 @@ export function loadMessagesForRoom(args: { const loadMoreMessage = { _id: generateLoadMoreId(lastMessage._id as string), rid: lastMessage.rid, - ts: moment(lastMessage.ts).subtract(1, 'millisecond').toString(), + ts: dayjs(lastMessage.ts).subtract(1, 'millisecond').toString(), t: MessageTypeLoad.MORE, msg: lastMessage.msg } as IMessage; diff --git a/app/lib/methods/loadNextMessages.ts b/app/lib/methods/loadNextMessages.ts index 47c72c7b43b..3d410e2db1b 100644 --- a/app/lib/methods/loadNextMessages.ts +++ b/app/lib/methods/loadNextMessages.ts @@ -1,7 +1,7 @@ import EJSON from 'ejson'; -import moment from 'moment'; import orderBy from 'lodash/orderBy'; +import dayjs from '../dayjs'; import log from './helpers/log'; import { getMessageById } from '../database/services/Message'; import { MessageTypeLoad } from '../constants/messageTypeLoad'; @@ -31,7 +31,7 @@ export function loadNextMessages(args: ILoadNextMessages): Promise<void> { const loadMoreItem = { _id: generateLoadMoreId(lastMessage._id), rid: lastMessage.rid, - ts: moment(lastMessage.ts).add(1, 'millisecond'), + ts: dayjs(lastMessage.ts).add(1, 'millisecond'), t: MessageTypeLoad.NEXT_CHUNK }; messages.push(loadMoreItem); diff --git a/app/lib/methods/loadSurroundingMessages.ts b/app/lib/methods/loadSurroundingMessages.ts index 7958f761ab1..ecb5b3c7e0f 100644 --- a/app/lib/methods/loadSurroundingMessages.ts +++ b/app/lib/methods/loadSurroundingMessages.ts @@ -1,7 +1,7 @@ import EJSON from 'ejson'; -import moment from 'moment'; import orderBy from 'lodash/orderBy'; +import dayjs from '../dayjs'; import log from './helpers/log'; import { getMessageById } from '../database/services/Message'; import { MessageTypeLoad } from '../constants/messageTypeLoad'; @@ -27,7 +27,7 @@ export function loadSurroundingMessages({ messageId, rid }: { messageId: string; const loadMoreItem = { _id: generateLoadMoreId(firstMessage._id), rid: firstMessage.rid, - ts: moment(firstMessage.ts).subtract(1, 'millisecond').toDate(), + ts: dayjs(firstMessage.ts).subtract(1, 'millisecond').toDate(), t: MessageTypeLoad.PREVIOUS_CHUNK, msg: firstMessage.msg } as IMessage; @@ -42,7 +42,7 @@ export function loadSurroundingMessages({ messageId, rid }: { messageId: string; const loadMoreItem = { _id: generateLoadMoreId(lastMessage._id), rid: lastMessage.rid, - ts: moment(lastMessage.ts).add(1, 'millisecond').toDate(), + ts: dayjs(lastMessage.ts).add(1, 'millisecond').toDate(), t: MessageTypeLoad.NEXT_CHUNK, msg: lastMessage.msg } as IMessage; diff --git a/app/lib/methods/logout.ts b/app/lib/methods/logout.ts index 9fe8b1bd9a5..69a9643ec2d 100644 --- a/app/lib/methods/logout.ts +++ b/app/lib/methods/logout.ts @@ -1,9 +1,8 @@ import { Rocketchat as RocketchatClient } from '@rocket.chat/sdk'; import type Model from '@nozbe/watermelondb/Model'; -import * as Keychain from 'react-native-keychain'; import { getDeviceToken } from '../notifications'; -import { isIOS, isSsl } from './helpers'; +import { isSsl } from './helpers'; import { BASIC_AUTH_KEY } from './helpers/fetch'; import database, { getDatabase } from '../database'; import log from './helpers/log'; @@ -14,7 +13,7 @@ import { removePushToken } from '../services/restApi'; import { roomsSubscription } from './subscriptions/rooms'; import { _activeUsersSubTimeout } from './getUsersPresence'; -async function removeServerKeys({ server, userId }: { server: string; userId?: string | null }) { +function removeServerKeys({ server, userId }: { server: string; userId?: string | null }) { UserPreferences.removeItem(`${TOKEN_KEY}-${server}`); if (userId) { UserPreferences.removeItem(`${TOKEN_KEY}-${userId}`); @@ -23,9 +22,6 @@ async function removeServerKeys({ server, userId }: { server: string; userId?: s UserPreferences.removeItem(`${server}-${E2E_PUBLIC_KEY}`); UserPreferences.removeItem(`${server}-${E2E_PRIVATE_KEY}`); UserPreferences.removeItem(`${server}-${E2E_RANDOM_PASSWORD_KEY}`); - if (isIOS) { - await Keychain.resetInternetCredentials(server); - } } export async function removeServerData({ server }: { server: string }): Promise<void> { @@ -44,7 +40,7 @@ export async function removeServerData({ server }: { server: string }): Promise< batch.push(serverRecord.prepareDestroyPermanently()); await serversDB.write(() => serversDB.batch(batch)); - await removeServerKeys({ server, userId }); + removeServerKeys({ server, userId }); } catch (e) { log(e); } diff --git a/app/lib/methods/replyRoomInvite.ts b/app/lib/methods/replyRoomInvite.ts new file mode 100644 index 00000000000..cadde12b757 --- /dev/null +++ b/app/lib/methods/replyRoomInvite.ts @@ -0,0 +1,13 @@ +import i18n from '../../i18n'; +import { sendInvitationReply } from '../services/restApi'; +import { showErrorAlert } from './helpers'; +import log from './helpers/log'; + +export const replyRoomInvite = async (rid: string, action: 'accept' | 'reject') => { + try { + await sendInvitationReply(rid, action); + } catch (e) { + showErrorAlert(i18n.t('error-invitation-reply-action')); + log(e); + } +}; diff --git a/app/lib/methods/subscriptions/room.ts b/app/lib/methods/subscriptions/room.ts index 004d55cecdc..a0ce1310b24 100644 --- a/app/lib/methods/subscriptions/room.ts +++ b/app/lib/methods/subscriptions/room.ts @@ -261,6 +261,23 @@ export default class RoomSubscription { try { const messageRecord = await getMessageById(message._id); if (messageRecord) { + if (messageRecord.t === 'e2e' && message.attachments) { + message.attachments = message.attachments?.map(att => { + const existing = messageRecord.attachments?.find( + a => + (a.image_url && a.image_url === att.image_url) || + (a.video_url && a.video_url === att.video_url) || + (a.audio_url && a.audio_url === att.audio_url) || + (a.thumb_url && a.thumb_url === att.thumb_url) + ); + + return { + ...att, + e2e: existing?.e2e, + title_link: existing?.e2e === 'done' ? existing?.title_link : att.title_link + }; + }); + } batch.push( messageRecord.prepareUpdate( protectedFunction((m: TMessageModel) => { diff --git a/app/lib/methods/userPreferences.ts b/app/lib/methods/userPreferences.ts index f0552fdf403..8e9a605ee3c 100644 --- a/app/lib/methods/userPreferences.ts +++ b/app/lib/methods/userPreferences.ts @@ -1,63 +1,167 @@ -import { create, MMKVLoader, type MMKVInstance, ProcessingModes, IOSAccessibleStates } from 'react-native-mmkv-storage'; +import { MMKV, Mode, useMMKVString } from 'react-native-mmkv'; +import type { Configuration } from 'react-native-mmkv'; +import { NativeModules } from 'react-native'; -const MMKV = new MMKVLoader() - // MODES.MULTI_PROCESS = ACCESSIBLE BY APP GROUP (iOS) - .setProcessingMode(ProcessingModes.MULTI_PROCESS) - .setAccessibleIOS(IOSAccessibleStates.AFTER_FIRST_UNLOCK) - .withEncryption() - .initialize(); +import { isAndroid } from './helpers'; -export const useUserPreferences = create(MMKV); +/** + * Get the MMKV encryption key from native secure storage. + * This key is managed by: + * - Android: MMKVKeyManager.java (reads from SecureKeystore or generates new) + * - iOS: SecureStorage.m (reads from Keychain or generates new) + */ +const getEncryptionKey = (): string | undefined => { + try { + const { SecureStorage } = NativeModules; + const key = SecureStorage?.getMMKVEncryptionKey?.(); + return key && key !== null ? key : undefined; + } catch (error) { + console.warn('[UserPreferences] Failed to get MMKV encryption key:', error); + return undefined; + } +}; + +const buildConfiguration = (): Configuration => { + const config: Configuration = { + id: 'default' + }; + + const multiProcessMode = (Mode as { MULTI_PROCESS?: Mode })?.MULTI_PROCESS; + if (multiProcessMode) { + config.mode = multiProcessMode; + } + + const appGroupPath = getAppGroupPath(); + if (!isAndroid && appGroupPath) { + config.path = `${appGroupPath}mmkv`; + } + + // Get encryption key from native secure storage + const encryptionKey = getEncryptionKey(); + if (encryptionKey) { + config.encryptionKey = encryptionKey; + } + + return config; +}; + +const getAppGroupPath = (): string => { + if (isAndroid) { + return ''; + } + + try { + const { AppGroup } = NativeModules; + return AppGroup?.path || ''; + } catch { + return ''; + } +}; + +const MMKV_INSTANCE = new MMKV(buildConfiguration()); + +export const useUserPreferences = <T>(key: string, defaultValue?: T): [T | undefined, (value: T | undefined) => void] => { + const [storedValue, setStoredValue] = useMMKVString(key, MMKV_INSTANCE); + + let value: T | undefined = defaultValue; + if (storedValue !== undefined) { + if (typeof defaultValue === 'string' || defaultValue === undefined) { + value = storedValue as T; + } else { + try { + value = JSON.parse(storedValue) as T; + } catch { + value = defaultValue; + } + } + } + + const setValue = (newValue: T | undefined) => { + if (newValue === undefined) { + setStoredValue(undefined); + } else if (typeof newValue === 'string') { + setStoredValue(newValue); + } else { + setStoredValue(JSON.stringify(newValue)); + } + }; + + return [value, setValue]; +}; class UserPreferences { - private mmkv: MMKVInstance; + private mmkv: MMKV; + constructor() { - this.mmkv = MMKV; + this.mmkv = MMKV_INSTANCE; } getString(key: string): string | null { try { - return this.mmkv.getString(key) ?? null; + return this.mmkv.getString(key) || null; } catch { return null; } } - setString(key: string, value: string): boolean | undefined { - return this.mmkv.setString(key, value) ?? undefined; + setString(key: string, value: string): void { + this.mmkv.set(key, value); } getBool(key: string): boolean | null { try { - return this.mmkv.getBool(key) ?? null; + return this.mmkv.getBoolean(key) || null; } catch { return null; } } - setBool(key: string, value: boolean): boolean | undefined { - return this.mmkv.setBool(key, value) ?? undefined; + setBool(key: string, value: boolean): void { + this.mmkv.set(key, value); } getMap(key: string): object | null { try { - return this.mmkv.getMap(key) ?? null; + const jsonString = this.mmkv.getString(key); + return jsonString ? JSON.parse(jsonString) : null; } catch { return null; } } - setMap(key: string, value: object): boolean | undefined { - return this.mmkv.setMap(key, value) ?? undefined; + setMap(key: string, value: object): void { + this.mmkv.set(key, JSON.stringify(value)); } - removeItem(key: string): boolean | undefined { - if (this.getString(key) !== null) { - return this.mmkv.removeItem(key) ?? undefined; + removeItem(key: string): void { + this.mmkv.delete(key); + } + + getNumber(key: string): number | null { + try { + return this.mmkv.getNumber(key) || null; + } catch { + return null; } - return false; + } + + setNumber(key: string, value: number): void { + this.mmkv.set(key, value); + } + + getAllKeys(): string[] { + return this.mmkv.getAllKeys(); + } + + contains(key: string): boolean { + return this.mmkv.contains(key); + } + + clearAll(): void { + this.mmkv.clearAll(); } } const userPreferences = new UserPreferences(); export default userPreferences; +export { MMKV_INSTANCE as initializeStorage }; diff --git a/app/lib/native/NativeVideoConfAndroid.ts b/app/lib/native/NativeVideoConfAndroid.ts new file mode 100644 index 00000000000..90346d97cb8 --- /dev/null +++ b/app/lib/native/NativeVideoConfAndroid.ts @@ -0,0 +1,9 @@ +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; + +export interface Spec extends TurboModule { + getPendingAction(): Promise<string | null>; + clearPendingAction(): void; +} + +export default TurboModuleRegistry.get<Spec>('VideoConfModule'); diff --git a/app/lib/notifications/index.ts b/app/lib/notifications/index.ts index 1d7ad538494..65adab40d62 100644 --- a/app/lib/notifications/index.ts +++ b/app/lib/notifications/index.ts @@ -17,39 +17,47 @@ interface IEjson { export const onNotification = (push: INotification): void => { const identifier = String(push?.payload?.action?.identifier); + + // Handle video conf notification actions (Accept/Decline buttons) if (identifier === 'ACCEPT_ACTION' || identifier === 'DECLINE_ACTION') { - if (push?.payload && push?.payload?.ejson) { - const notification = EJSON.parse(push?.payload?.ejson); + if (push?.payload?.ejson) { + const notification = EJSON.parse(push.payload.ejson); store.dispatch(deepLinkingClickCallPush({ ...notification, event: identifier === 'ACCEPT_ACTION' ? 'accept' : 'decline' })); return; } } - if (push?.payload) { - try { - const notification = push?.payload; - if (notification.ejson) { - const { rid, name, sender, type, host, messageId }: IEjson = EJSON.parse(notification.ejson); - const types: Record<string, string> = { - c: 'channel', - d: 'direct', - p: 'group', - l: 'channels' - }; - let roomName = type === SubscriptionType.DIRECT ? sender.username : name; - if (type === SubscriptionType.OMNICHANNEL) { - roomName = sender.name; - } + if (push?.payload?.ejson) { + try { + const notification = EJSON.parse(push.payload.ejson); - const params = { - host, - rid, - messageId, - path: `${types[type]}/${roomName}` - }; - store.dispatch(deepLinkingOpen(params)); + // Handle video conf notification tap (default action) - treat as accept + if (notification?.notificationType === 'videoconf') { + store.dispatch(deepLinkingClickCallPush({ ...notification, event: 'accept' })); return; } + + // Handle regular message notifications + const { rid, name, sender, type, host, messageId }: IEjson = notification; + const types: Record<string, string> = { + c: 'channel', + d: 'direct', + p: 'group', + l: 'channels' + }; + let roomName = type === SubscriptionType.DIRECT ? sender.username : name; + if (type === SubscriptionType.OMNICHANNEL) { + roomName = sender.name; + } + + const params = { + host, + rid, + messageId, + path: `${types[type]}/${roomName}` + }; + store.dispatch(deepLinkingOpen(params)); + return; } catch (e) { console.warn(e); } @@ -58,12 +66,14 @@ export const onNotification = (push: INotification): void => { }; export const getDeviceToken = (): string => deviceToken; -export const setBadgeCount = (count?: number): void => setNotificationsBadgeCount(count); -export const removeNotificationsAndBadge = () => { - removeAllNotifications(); - setBadgeCount(); +export const setBadgeCount = (count?: number): void => { + setNotificationsBadgeCount(count); +}; +export const removeNotificationsAndBadge = async (): Promise<void> => { + await removeAllNotifications(); + await setNotificationsBadgeCount(); }; -export const initializePushNotifications = (): Promise<INotification | { configured: boolean }> | undefined => { - setBadgeCount(); +export const initializePushNotifications = async (): Promise<INotification | { configured: boolean } | null> => { + await setNotificationsBadgeCount(); return pushNotificationConfigure(onNotification); }; diff --git a/app/lib/notifications/push.ts b/app/lib/notifications/push.ts index 639e83733ef..c5725ec6f4c 100644 --- a/app/lib/notifications/push.ts +++ b/app/lib/notifications/push.ts @@ -1,33 +1,163 @@ -import { - Notifications, - type Registered, - type RegistrationError, - type NotificationCompletion, - type Notification, - NotificationAction, - NotificationCategory -} from 'react-native-notifications'; -import { PermissionsAndroid, Platform } from 'react-native'; +import * as Notifications from 'expo-notifications'; +import * as Device from 'expo-device'; +import { Platform } from 'react-native'; import { type INotification } from '../../definitions'; import { isIOS } from '../methods/helpers'; import { store as reduxStore } from '../store/auxStore'; +import { registerPushToken } from '../services/restApi'; import I18n from '../../i18n'; export let deviceToken = ''; -export const setNotificationsBadgeCount = (count = 0): void => { - if (isIOS) { - Notifications.ios.setBadgeCount(count); +export const setNotificationsBadgeCount = async (count = 0): Promise<void> => { + try { + await Notifications.setBadgeCountAsync(count); + } catch (e) { + console.log('Failed to set badge count:', e); } }; -export const removeAllNotifications = (): void => { - Notifications.removeAllDeliveredNotifications(); +export const removeAllNotifications = async (): Promise<void> => { + try { + await Notifications.dismissAllNotificationsAsync(); + } catch (e) { + console.log('Failed to dismiss notifications:', e); + } }; let configured = false; +/** + * Transform expo-notifications response to the INotification format expected by the app + */ +const transformNotificationResponse = (response: Notifications.NotificationResponse): INotification => { + const { notification, actionIdentifier, userText } = response; + const { trigger, content } = notification.request; + + // Get the raw data from the notification + let payload: Record<string, any> = {}; + + if (trigger && 'type' in trigger && trigger.type === 'push') { + if (Platform.OS === 'android' && 'remoteMessage' in trigger && trigger.remoteMessage) { + // Android: data comes from remoteMessage.data + payload = trigger.remoteMessage.data || {}; + } else if (Platform.OS === 'ios' && 'payload' in trigger && trigger.payload) { + // iOS: data comes from payload (userInfo) + payload = trigger.payload as Record<string, any>; + } + } + + // Fallback to content.data if trigger data is not available + if (Object.keys(payload).length === 0 && content.data) { + payload = content.data as Record<string, any>; + } + + // Add action identifier if it's a specific action (not default tap) + if (actionIdentifier && actionIdentifier !== Notifications.DEFAULT_ACTION_IDENTIFIER) { + payload.action = { identifier: actionIdentifier }; + if (userText) { + payload.action.userText = userText; + } + } + + return { + payload: { + message: content.body || payload.message || '', + style: payload.style || '', + ejson: payload.ejson || '', + collapse_key: payload.collapse_key || '', + notId: payload.notId || notification.request.identifier || '', + msgcnt: payload.msgcnt || '', + title: content.title || payload.title || '', + from: payload.from || '', + image: payload.image || '', + soundname: payload.soundname || '', + action: payload.action + }, + identifier: notification.request.identifier + }; +}; + +/** + * Set up notification categories for iOS (actions like Reply, Accept, Decline) + */ +const setupNotificationCategories = async (): Promise<void> => { + if (!isIOS) { + return; + } + + try { + // Message category with Reply action + await Notifications.setNotificationCategoryAsync('MESSAGE', [ + { + identifier: 'REPLY_ACTION', + buttonTitle: I18n.t('Reply'), + textInput: { + submitButtonTitle: I18n.t('Reply'), + placeholder: I18n.t('Type_message') + }, + options: { + opensAppToForeground: false + } + } + ]); + + // Video conference category with Accept/Decline actions + await Notifications.setNotificationCategoryAsync('VIDEOCONF', [ + { + identifier: 'ACCEPT_ACTION', + buttonTitle: I18n.t('accept'), + options: { + opensAppToForeground: true + } + }, + { + identifier: 'DECLINE_ACTION', + buttonTitle: I18n.t('decline'), + options: { + opensAppToForeground: true + } + } + ]); + } catch (e) { + console.log('Failed to set notification categories:', e); + } +}; + +/** + * Request notification permissions and register for push notifications + */ +const registerForPushNotifications = async (): Promise<string | null> => { + if (!Device.isDevice) { + console.log('Push notifications require a physical device'); + return null; + } + + try { + // Check and request permissions + const { status: existingStatus } = await Notifications.getPermissionsAsync(); + let finalStatus = existingStatus; + + if (existingStatus !== 'granted') { + const { status } = await Notifications.requestPermissionsAsync(); + finalStatus = status; + } + + if (finalStatus !== 'granted') { + console.log('Failed to get push notification permissions'); + return null; + } + + // Get the device push token (FCM for Android, APNs for iOS) + const tokenData = await Notifications.getDevicePushTokenAsync(); + return tokenData.data; + } catch (e) { + console.log('Error registering for push notifications:', e); + return null; + } +}; + export const pushNotificationConfigure = (onNotification: (notification: INotification) => void): Promise<any> => { if (configured) { return Promise.resolve({ configured: true }); @@ -35,50 +165,44 @@ export const pushNotificationConfigure = (onNotification: (notification: INotifi configured = true; - if (isIOS) { - // init - Notifications.ios.registerRemoteNotifications(); - - const notificationAction = new NotificationAction('REPLY_ACTION', 'background', I18n.t('Reply'), true, { - buttonTitle: I18n.t('Reply'), - placeholder: I18n.t('Type_message') - }); - const acceptAction = new NotificationAction('ACCEPT_ACTION', 'foreground', I18n.t('accept'), true); - const rejectAction = new NotificationAction('DECLINE_ACTION', 'foreground', I18n.t('decline'), true); - - const notificationCategory = new NotificationCategory('MESSAGE', [notificationAction]); - const videoConfCategory = new NotificationCategory('VIDEOCONF', [acceptAction, rejectAction]); - - Notifications.setCategories([videoConfCategory, notificationCategory]); - } else if (Platform.OS === 'android' && Platform.constants.Version >= 33) { - // @ts-ignore - PermissionsAndroid.request('android.permission.POST_NOTIFICATIONS').then(permissionStatus => { - if (permissionStatus === 'granted') { - Notifications.registerRemoteNotifications(); - } else { - // TODO: Ask user to enable notifications - } - }); - } else { - Notifications.registerRemoteNotifications(); - } - - Notifications.events().registerRemoteNotificationsRegistered((event: Registered) => { - deviceToken = event.deviceToken; + // Set up how notifications should be handled when the app is in foreground + Notifications.setNotificationHandler({ + handleNotification: () => + Promise.resolve({ + shouldShowAlert: false, + shouldPlaySound: false, + shouldSetBadge: false, + shouldShowBanner: false, + shouldShowList: false + }) }); - Notifications.events().registerRemoteNotificationsRegistrationFailed((event: RegistrationError) => { - // TODO: Handle error - console.log(event); + // Set up notification categories for iOS + setupNotificationCategories(); + + // Register for push notifications and get token + registerForPushNotifications().then(token => { + if (token) { + deviceToken = token; + } }); - Notifications.events().registerNotificationReceivedForeground( - (notification: Notification, completion: (response: NotificationCompletion) => void) => { - completion({ alert: false, sound: false, badge: false }); + // Listen for token updates (FCM can refresh tokens at any time) + Notifications.addPushTokenListener(tokenData => { + deviceToken = tokenData.data; + // Re-register with server if user is logged in + const { isAuthenticated } = reduxStore.getState().login; + if (isAuthenticated) { + registerPushToken().catch(e => { + console.log('Failed to re-register push token after refresh:', e); + }); } - ); + }); + + // Listen for notification responses (when user taps on notification) + Notifications.addNotificationResponseReceivedListener(response => { + const notification = transformNotificationResponse(response); - Notifications.events().registerNotificationOpened((notification: Notification, completion: () => void) => { if (isIOS) { const { background } = reduxStore.getState().app; if (background) { @@ -87,14 +211,13 @@ export const pushNotificationConfigure = (onNotification: (notification: INotifi } else { onNotification(notification); } - completion(); }); - Notifications.events().registerNotificationReceivedBackground( - (notification: Notification, completion: (response: any) => void) => { - completion({ alert: true, sound: true, badge: false }); - } - ); + // Get initial notification (app was opened by tapping a notification) + const lastResponse = Notifications.getLastNotificationResponse(); + if (lastResponse) { + return Promise.resolve(transformNotificationResponse(lastResponse)); + } - return Notifications.getInitialNotification(); + return Promise.resolve(null); }; diff --git a/app/lib/notifications/videoConf/backgroundNotificationHandler.ts b/app/lib/notifications/videoConf/backgroundNotificationHandler.ts deleted file mode 100644 index ca33cc13787..00000000000 --- a/app/lib/notifications/videoConf/backgroundNotificationHandler.ts +++ /dev/null @@ -1,125 +0,0 @@ -import notifee, { AndroidCategory, AndroidFlags, AndroidImportance, AndroidVisibility, type Event } from '@notifee/react-native'; -import { getMessaging as messaging } from '@react-native-firebase/messaging'; -import AsyncStorage from '@react-native-async-storage/async-storage'; -import ejson from 'ejson'; - -import { deepLinkingClickCallPush } from '../../../actions/deepLinking'; -import i18n from '../../../i18n'; -import { colors } from '../../constants/colors'; -import { store } from '../../store/auxStore'; - -const VIDEO_CONF_CHANNEL = 'video-conf-call'; -const VIDEO_CONF_TYPE = 'videoconf'; - -interface Caller { - _id?: string; - name?: string; -} - -interface NotificationData { - notificationType?: string; - status?: number; - rid?: string; - caller?: Caller; -} - -const createChannel = () => - notifee.createChannel({ - id: VIDEO_CONF_CHANNEL, - name: 'Video Call', - lights: true, - vibration: true, - importance: AndroidImportance.HIGH, - sound: 'ringtone' - }); - -const handleBackgroundEvent = async (event: Event) => { - const { pressAction, notification } = event.detail; - const notificationData = notification?.data; - if ( - typeof notificationData?.caller === 'object' && - (notificationData.caller as Caller)?._id && - (event.type === 1 || event.type === 2) - ) { - if (store?.getState()?.app.ready) { - store.dispatch(deepLinkingClickCallPush({ ...notificationData, event: pressAction?.id })); - } else { - AsyncStorage.setItem('pushNotification', JSON.stringify({ ...notificationData, event: pressAction?.id })); - } - await notifee.cancelNotification( - `${notificationData.rid}${(notificationData.caller as Caller)._id}`.replace(/[^A-Za-z0-9]/g, '') - ); - } -}; - -const backgroundNotificationHandler = () => { - notifee.onBackgroundEvent(handleBackgroundEvent); -}; - -const displayVideoConferenceNotification = async (notification: NotificationData) => { - const id = `${notification.rid}${notification.caller?._id}`.replace(/[^A-Za-z0-9]/g, ''); - const actions = [ - { - title: i18n.t('accept'), - pressAction: { - id: 'accept', - launchActivity: 'default' - } - }, - { - title: i18n.t('decline'), - pressAction: { - id: 'decline', - launchActivity: 'default' - } - } - ]; - - await notifee.displayNotification({ - id, - title: i18n.t('conference_call'), - body: `${i18n.t('Incoming_call_from')} ${notification.caller?.name}`, - data: notification as { [key: string]: string | number | object }, - android: { - channelId: VIDEO_CONF_CHANNEL, - category: AndroidCategory.CALL, - visibility: AndroidVisibility.PUBLIC, - importance: AndroidImportance.HIGH, - smallIcon: 'ic_notification', - color: colors.light.badgeBackgroundLevel4, - actions, - lightUpScreen: true, - loopSound: true, - sound: 'ringtone', - autoCancel: false, - ongoing: true, - pressAction: { - id: 'default', - launchActivity: 'default' - }, - flags: [AndroidFlags.FLAG_NO_CLEAR] - } - }); -}; - -const setBackgroundNotificationHandler = () => { - createChannel(); - messaging().setBackgroundMessageHandler(async message => { - if (message?.data?.ejson) { - const notification: NotificationData = ejson.parse(message?.data?.ejson as string); - if (notification?.notificationType === VIDEO_CONF_TYPE) { - if (notification.status === 0) { - await displayVideoConferenceNotification(notification); - } else if (notification.status === 4) { - const id = `${notification.rid}${notification.caller?._id}`.replace(/[^A-Za-z0-9]/g, ''); - await notifee.cancelNotification(id); - } - } - } - - return null; - }); -}; - -setBackgroundNotificationHandler(); -backgroundNotificationHandler(); diff --git a/app/lib/notifications/videoConf/getInitialNotification.ts b/app/lib/notifications/videoConf/getInitialNotification.ts index 5e48a842ce1..b70b45b0adc 100644 --- a/app/lib/notifications/videoConf/getInitialNotification.ts +++ b/app/lib/notifications/videoConf/getInitialNotification.ts @@ -1,15 +1,85 @@ +import * as Notifications from 'expo-notifications'; +import EJSON from 'ejson'; +import { DeviceEventEmitter, Platform } from 'react-native'; + import { deepLinkingClickCallPush } from '../../../actions/deepLinking'; -import { isAndroid } from '../../methods/helpers'; import { store } from '../../store/auxStore'; +import NativeVideoConfModule from '../../native/NativeVideoConfAndroid'; + +/** + * Sets up listener for video conference actions from native side. + * This handles the case when app is in background and user taps Accept/Decline. + */ +export const setupVideoConfActionListener = (): (() => void) | undefined => { + if (Platform.OS === 'android') { + const subscription = DeviceEventEmitter.addListener('VideoConfAction', (actionJson: string) => { + try { + const data = JSON.parse(actionJson); + if (data?.notificationType === 'videoconf') { + store.dispatch(deepLinkingClickCallPush(data)); + } + } catch (error) { + console.log('Error handling video conf action event:', error); + } + }); + + // Return cleanup function + return () => subscription.remove(); + } + return undefined; +}; -export const getInitialNotification = async (): Promise<void> => { - if (isAndroid) { - const notifee = require('@notifee/react-native').default; - const initialNotification = await notifee.getInitialNotification(); - if (initialNotification?.notification?.data?.notificationType === 'videoconf') { - store.dispatch( - deepLinkingClickCallPush({ ...initialNotification?.notification?.data, event: initialNotification?.pressAction?.id }) - ); +/** + * Check for pending video conference actions from native notification handling. + * @returns true if a video conf action was found and dispatched, false otherwise + */ +export const getInitialNotification = async (): Promise<boolean> => { + // Android: Check native module for pending action + if (Platform.OS === 'android' && NativeVideoConfModule) { + try { + const pendingAction = await NativeVideoConfModule.getPendingAction(); + if (pendingAction) { + const data = JSON.parse(pendingAction); + if (data?.notificationType === 'videoconf') { + store.dispatch(deepLinkingClickCallPush(data)); + return true; + } + } + } catch (error) { + console.log('Error getting video conf initial notification:', error); } } + + // iOS: Check expo-notifications for last response with video conf action + if (Platform.OS === 'ios') { + try { + const lastResponse = await Notifications.getLastNotificationResponseAsync(); + if (lastResponse) { + const { actionIdentifier, notification } = lastResponse; + const { trigger } = notification.request; + let payload: Record<string, any> = {}; + + if (trigger && 'type' in trigger && trigger.type === 'push' && 'payload' in trigger && trigger.payload) { + payload = trigger.payload as Record<string, any>; + } + + if (payload.ejson) { + const ejsonData = EJSON.parse(payload.ejson); + if (ejsonData?.notificationType === 'videoconf') { + // Accept/Decline actions or default tap (treat as accept) + let event = 'accept'; + if (actionIdentifier === 'DECLINE_ACTION') { + event = 'decline'; + } + store.dispatch(deepLinkingClickCallPush({ ...ejsonData, event })); + return true; + } + } + } + } catch (error) { + console.log('Error getting iOS video conf initial notification:', error); + } + } + + return false; }; diff --git a/app/lib/services/restApi.ts b/app/lib/services/restApi.ts index 2aaaebd7734..f38c096c315 100644 --- a/app/lib/services/restApi.ts +++ b/app/lib/services/restApi.ts @@ -430,9 +430,16 @@ export const editLivechat = (userData: TParams, roomData: TParams): Promise<{ er return sdk.post('livechat/room.saveInfo', { guestData: userData, roomData }) as any; }; -export const returnLivechat = (rid: string): Promise<boolean> => +export const returnLivechat = (rid: string, departmentId?: string): Promise<any> => { + const serverVersion = reduxStore.getState().server.version; + + if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '7.12.0')) { + return sdk.post('livechat/inquiries.returnAsInquiry', { roomId: rid, departmentId }); + } + // RC 0.72.0 - sdk.methodCallWrapper('livechat:returnAsInquiry', rid); + return sdk.methodCallWrapper('livechat:returnAsInquiry', rid); +}; export const onHoldLivechat = (roomId: string) => sdk.post('livechat/room.onHold', { roomId }); @@ -461,7 +468,7 @@ export const usersAutoComplete = (selector: any) => // RC 2.4.0 sdk.get('users.autocomplete', { selector }); -export const getRoutingConfig = (): Promise<{ +export const getRoutingConfig = async (): Promise<{ previewRoom: boolean; showConnecting: boolean; showQueue: boolean; @@ -469,9 +476,18 @@ export const getRoutingConfig = (): Promise<{ returnQueue: boolean; enableTriggerAction: boolean; autoAssignAgent: boolean; -}> => +}> => { + const serverVersion = reduxStore.getState().server.version; + if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '7.11.0')) { + const result = await sdk.get('livechat/config/routing'); + if (result.success) { + return result.config; + } + } + // RC 2.0.0 - sdk.methodCallWrapper('livechat:getRoutingConfig'); + return sdk.methodCallWrapper('livechat:getRoutingConfig'); +}; export const getTagsList = (): Promise<ILivechatTag[]> => // RC 2.0.0 @@ -515,17 +531,13 @@ export const deleteRoom = (roomId: string, t: RoomTypes) => // RC 0.49.0 sdk.post(`${roomTypeToApiType(t)}.delete`, { roomId }); -export const toggleMuteUserInRoom = ( - rid: string, - username: string, - mute: boolean -): Promise<{ message: { msg: string; result: boolean }; success: boolean }> => { - if (mute) { - // RC 0.51.0 - return sdk.methodCallWrapper('muteUserInRoom', { rid, username }); +export const toggleMuteUserInRoom = (rid: string, username: string, userId: string, mute: boolean) => { + const serverVersion = reduxStore.getState().server.version; + if (compareServerVersion(serverVersion, 'greaterThanOrEqualTo', '6.8.0')) { + return sdk.post(mute ? 'rooms.muteUser' : 'rooms.unmuteUser', { roomId: rid, userId }); } // RC 0.51.0 - return sdk.methodCallWrapper('unmuteUserInRoom', { rid, username }); + return sdk.methodCallWrapper(mute ? 'muteUserInRoom' : 'unmuteUserInRoom', { rid, username }); }; export const toggleRoomOwner = ({ @@ -1088,6 +1100,8 @@ export function getUserInfo(userId: string) { export const toggleFavorite = (roomId: string, favorite: boolean) => sdk.post('rooms.favorite', { roomId, favorite }); +export const sendInvitationReply = (roomId: string, action: 'accept' | 'reject') => sdk.post('rooms.invite', { roomId, action }); + export const videoConferenceJoin = (callId: string, cam?: boolean, mic?: boolean) => sdk.post('video-conference.join', { callId, state: { cam: !!cam, mic: mic === undefined ? true : mic } }); diff --git a/app/lib/store/appStateMiddleware.ts b/app/lib/store/appStateMiddleware.ts index 61da57a6c94..c83d1c9d5d4 100644 --- a/app/lib/store/appStateMiddleware.ts +++ b/app/lib/store/appStateMiddleware.ts @@ -17,7 +17,7 @@ export default () => let type; if (nextAppState === 'active') { type = APP_STATE.FOREGROUND; - removeNotificationsAndBadge(); + removeNotificationsAndBadge().catch(e => console.warn('Failed to clear notifications', e)); } else if (nextAppState === 'background') { type = APP_STATE.BACKGROUND; } diff --git a/app/reducers/server.test.ts b/app/reducers/server.test.ts index 6cc03a2d7d2..f9f8e2b6d5d 100644 --- a/app/reducers/server.test.ts +++ b/app/reducers/server.test.ts @@ -49,7 +49,7 @@ describe('test server reducer', () => { }); it('should return modified store after serverRequestInitAdd', () => { - const previousServer = 'https://mobile.rocket.chat'; + const previousServer = 'https://mobile.qa.rocket.chat'; mockedStore.dispatch(serverInitAdd(previousServer)); const state = mockedStore.getState().server.previousServer; expect(state).toEqual(previousServer); diff --git a/app/sagas/deepLinking.js b/app/sagas/deepLinking.js index abc28aba567..7afcadc7b92 100644 --- a/app/sagas/deepLinking.js +++ b/app/sagas/deepLinking.js @@ -223,7 +223,7 @@ const handleNavigateCallRoom = function* handleNavigateCallRoom({ params }) { if (room) { const isMasterDetail = yield select(state => state.app.isMasterDetail); yield navigateToRoom({ item: room, isMasterDetail }); - const uid = params.caller._id; + const uid = params.caller?._id; const { rid, callId, event } = params; if (event === 'accept') { yield call(notifyUser, `${uid}/video-conference`, { @@ -246,6 +246,10 @@ const handleNavigateCallRoom = function* handleNavigateCallRoom({ params }) { const handleClickCallPush = function* handleClickCallPush({ params }) { let { host } = params; + if (!host) { + return; + } + if (host.slice(-1) === '/') { host = host.slice(0, host.length - 1); } diff --git a/app/sagas/init.js b/app/sagas/init.js index 9e0a88c4ad3..d9d6024abe8 100644 --- a/app/sagas/init.js +++ b/app/sagas/init.js @@ -22,7 +22,6 @@ export const initLocalSettings = function* initLocalSettings() { }; const restore = function* restore() { - console.log('RESTORE'); try { const server = UserPreferences.getString(CURRENT_SERVER); let userId = UserPreferences.getString(`${TOKEN_KEY}-${server}`); diff --git a/app/sagas/login.js b/app/sagas/login.js index d3e37b0e2fa..00b79a37c3d 100644 --- a/app/sagas/login.js +++ b/app/sagas/login.js @@ -2,9 +2,7 @@ import React from 'react'; import { call, cancel, delay, fork, put, race, select, take, takeLatest } from 'redux-saga/effects'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import { Q } from '@nozbe/watermelondb'; -import * as Keychain from 'react-native-keychain'; - -import moment from 'moment'; +import dayjs from '../lib/dayjs'; import * as types from '../actions/actionsTypes'; import { appStart } from '../actions/app'; import { selectServerRequest, serverFinishAdd } from '../actions/server'; @@ -37,7 +35,6 @@ import { connect, loginWithPassword, login } from '../lib/services/connect'; import { saveUserProfile, registerPushToken, getUsersRoles } from '../lib/services/restApi'; import { setUsersRoles } from '../actions/usersRoles'; import { getServerById } from '../lib/database/services/Server'; -import { appGroupSuiteName } from '../lib/methods/appGroup'; import appNavigation from '../lib/navigation/appNavigation'; import { showActionSheetRef } from '../containers/ActionSheet'; import { SupportedVersionsWarning } from '../containers/SupportedVersions'; @@ -55,7 +52,7 @@ const showSupportedVersionsWarning = function* showSupportedVersionsWarning(serv } const serverRecord = yield getServerById(server); const isMasterDetail = yield select(state => state.app.isMasterDetail); - if (!serverRecord || moment(new Date()).diff(serverRecord?.supportedVersionsWarningAt, 'hours') <= 12) { + if (!serverRecord || dayjs(new Date()).diff(serverRecord?.supportedVersionsWarningAt, 'hours') <= 12) { return; } @@ -279,12 +276,6 @@ const handleLoginSuccess = function* handleLoginSuccess({ user }) { UserPreferences.setString(`${TOKEN_KEY}-${server}`, user.id); UserPreferences.setString(`${TOKEN_KEY}-${user.id}`, user.token); UserPreferences.setString(CURRENT_SERVER, server); - if (isIOS) { - yield Keychain.setInternetCredentials(server, user.id, user.token, { - accessGroup: appGroupSuiteName, - securityLevel: Keychain.SECURITY_LEVEL.SECURE_SOFTWARE - }); - } yield put(setUser(user)); EventEmitter.emit('connected'); const currentRoot = yield select(state => state.app.root); diff --git a/app/sagas/troubleshootingNotification.ts b/app/sagas/troubleshootingNotification.ts index 0717c083f19..193568890e9 100644 --- a/app/sagas/troubleshootingNotification.ts +++ b/app/sagas/troubleshootingNotification.ts @@ -1,6 +1,6 @@ import { type Action } from 'redux'; import { call, takeLatest, put } from 'typed-redux-saga'; -import notifee, { AuthorizationStatus } from '@notifee/react-native'; +import * as Notifications from 'expo-notifications'; import { TROUBLESHOOTING_NOTIFICATION } from '../actions/actionsTypes'; import { setTroubleshootingNotification } from '../actions/troubleshootingNotification'; @@ -19,8 +19,8 @@ function* init() { let defaultPushGateway = false; let pushGatewayEnabled = false; try { - const { authorizationStatus } = yield* call(notifee.getNotificationSettings); - deviceNotificationEnabled = authorizationStatus > AuthorizationStatus.DENIED; + const { status } = yield* call(Notifications.getPermissionsAsync); + deviceNotificationEnabled = status === 'granted'; } catch (e) { log(e); } diff --git a/app/stacks/InsideStack.tsx b/app/stacks/InsideStack.tsx index c201424d8b7..a314c801885 100644 --- a/app/stacks/InsideStack.tsx +++ b/app/stacks/InsideStack.tsx @@ -273,7 +273,7 @@ const NewMessageStackNavigator = () => { return ( <NewMessageStack.Navigator screenOptions={{ ...defaultHeader, ...themedHeader(theme) }}> <NewMessageStack.Screen name='NewMessageView' component={NewMessageView} /> - <NewMessageStack.Screen name='SelectedUsersViewCreateChannel' component={SelectedUsersView} /> + <NewMessageStack.Screen name='SelectedUsersView' component={SelectedUsersView} /> <NewMessageStack.Screen name='CreateChannelView' component={CreateChannelView} /> {/* @ts-ignore */} <NewMessageStack.Screen name='CreateDiscussionView' component={CreateDiscussionView} /> diff --git a/app/stacks/MasterDetailStack/index.tsx b/app/stacks/MasterDetailStack/index.tsx index 88512884d15..d4dd3ccc2fa 100644 --- a/app/stacks/MasterDetailStack/index.tsx +++ b/app/stacks/MasterDetailStack/index.tsx @@ -187,7 +187,6 @@ const ModalStackNavigator = React.memo(({ navigation }: INavigation) => { <ModalStack.Screen name='DisplayPrefsView' component={DisplayPrefsView} /> <ModalStack.Screen name='AdminPanelView' component={AdminPanelView} /> <ModalStack.Screen name='NewMessageView' component={NewMessageView} /> - <ModalStack.Screen name='SelectedUsersViewCreateChannel' component={SelectedUsersView} /> <ModalStack.Screen name='CreateChannelView' component={CreateChannelView} /> {/* @ts-ignore */} <ModalStack.Screen name='CreateDiscussionView' component={CreateDiscussionView} /> diff --git a/app/stacks/MasterDetailStack/types.ts b/app/stacks/MasterDetailStack/types.ts index 602d7b5e3b6..70f5726e6de 100644 --- a/app/stacks/MasterDetailStack/types.ts +++ b/app/stacks/MasterDetailStack/types.ts @@ -83,11 +83,12 @@ export type ModalStackParamList = { showCloseModal?: boolean; }; SelectedUsersView: { - maxUsers: number; - showButton: boolean; - title: string; - buttonText: string; - nextAction: Function; + maxUsers?: number; + showButton?: boolean; + title?: string; + buttonText?: string; + showSkipText?: boolean; + nextAction?: Function; }; InviteUsersView: { rid: string; @@ -170,13 +171,6 @@ export type ModalStackParamList = { DisplayPrefsView: undefined; AdminPanelView: undefined; NewMessageView: undefined; - SelectedUsersViewCreateChannel: { - maxUsers: number; - showButton: boolean; - title: string; - buttonText: string; - nextAction: Function; - }; // TODO: Change CreateChannelView: { isTeam?: boolean; // TODO: To check teamId?: string; diff --git a/app/stacks/types.ts b/app/stacks/types.ts index bf7e6708617..c8afff63863 100644 --- a/app/stacks/types.ts +++ b/app/stacks/types.ts @@ -241,12 +241,13 @@ export type DrawerParamList = { export type NewMessageStackParamList = { NewMessageView: undefined; - SelectedUsersViewCreateChannel: { + SelectedUsersView: { maxUsers?: number; showButton?: boolean; title?: string; buttonText?: string; nextAction?: Function; + showSkipText?: boolean; }; // TODO: Change CreateChannelView?: { isTeam?: boolean; // TODO: To check diff --git a/app/views/AccessibilityAndAppearanceView/components/ListPicker.tsx b/app/views/AccessibilityAndAppearanceView/components/ListPicker.tsx index b14e8302461..c3c78054fb7 100644 --- a/app/views/AccessibilityAndAppearanceView/components/ListPicker.tsx +++ b/app/views/AccessibilityAndAppearanceView/components/ListPicker.tsx @@ -100,7 +100,7 @@ const ListPicker = ({ </View> )} rightContainerStyle={styles.rightContainer} - additionalAcessibilityLabel={option?.label} + additionalAccessibilityLabel={option?.label} /> ); }; diff --git a/app/views/AccessibilityAndAppearanceView/index.tsx b/app/views/AccessibilityAndAppearanceView/index.tsx index b5d5b39a7cc..f79cb77bd0a 100644 --- a/app/views/AccessibilityAndAppearanceView/index.tsx +++ b/app/views/AccessibilityAndAppearanceView/index.tsx @@ -23,8 +23,8 @@ export type TAlertDisplayType = 'TOAST' | 'DIALOG'; const AccessibilityAndAppearanceView = () => { const navigation = useNavigation<NativeStackNavigationProp<AccessibilityStackParamList>>(); const isMasterDetail = useAppSelector(state => state.app.isMasterDetail as boolean); - const [mentionsWithAtSymbol, setMentionsWithAtSymbol] = useUserPreferences<boolean>(USER_MENTIONS_PREFERENCES_KEY); - const [roomsWithHashTagSymbol, setRoomsWithHashTagSymbol] = useUserPreferences<boolean>(ROOM_MENTIONS_PREFERENCES_KEY); + const [mentionsWithAtSymbol, setMentionsWithAtSymbol] = useUserPreferences<boolean>(USER_MENTIONS_PREFERENCES_KEY, false); + const [roomsWithHashTagSymbol, setRoomsWithHashTagSymbol] = useUserPreferences<boolean>(ROOM_MENTIONS_PREFERENCES_KEY, false); const [autoplayGifs, setAutoplayGifs] = useUserPreferences<boolean>(AUTOPLAY_GIFS_PREFERENCES_KEY, true); const [alertDisplayType, setAlertDisplayType] = useUserPreferences<TAlertDisplayType>( ALERT_DISPLAY_TYPE_PREFERENCES_KEY, @@ -88,6 +88,7 @@ const AccessibilityAndAppearanceView = () => { title='Autoplay_gifs' right={renderAutoplayGifs} onPress={toggleAutoplayGifs} + accessibilityRole='switch' /> <List.Separator /> <List.Item @@ -95,6 +96,7 @@ const AccessibilityAndAppearanceView = () => { title='Mentions_With_@_Symbol' right={renderMentionsWithAtSymbolSwitch} onPress={toggleMentionsWithAtSymbol} + accessibilityRole='switch' /> <List.Separator /> <List.Item @@ -102,6 +104,7 @@ const AccessibilityAndAppearanceView = () => { title='Rooms_With_#_Symbol' right={renderRoomsWithHashTagSwitch} onPress={toggleRoomsWithHashTag} + accessibilityRole='switch' /> <List.Separator /> </List.Section> @@ -112,7 +115,7 @@ const AccessibilityAndAppearanceView = () => { setAlertDisplayType(value); }} title={I18n.t('A11y_appearance_show_alerts_as')} - value={alertDisplayType} + value={alertDisplayType || 'TOAST'} /> <List.Separator /> </List.Section> diff --git a/app/views/AddChannelTeamView.tsx b/app/views/AddChannelTeamView.tsx index d41d60dcef6..d721b1059bf 100644 --- a/app/views/AddChannelTeamView.tsx +++ b/app/views/AddChannelTeamView.tsx @@ -68,7 +68,7 @@ const AddChannelTeamView = () => { title='Create_New' onPress={() => isMasterDetail - ? navigation.navigate('SelectedUsersViewCreateChannel', { + ? navigation.navigate('SelectedUsersView', { nextAction: () => navigation.navigate('CreateChannelView', { teamId }) }) : navigation.navigate('SelectedUsersView', { diff --git a/app/views/AddExistingChannelView/index.tsx b/app/views/AddExistingChannelView/index.tsx index f16fb14105d..71c2fc68682 100644 --- a/app/views/AddExistingChannelView/index.tsx +++ b/app/views/AddExistingChannelView/index.tsx @@ -168,8 +168,8 @@ const AddExistingChannelView = () => { testID={`add-existing-channel-view-item-${item.name}`} left={() => <List.Icon name={icon} />} right={() => (isChecked(item.rid) ? <List.Icon name='check' color={colors.fontHint} /> : null)} - additionalAcessibilityLabel={isChecked(item.rid)} - additionalAcessibilityLabelCheck + additionalAccessibilityLabel={isChecked(item.rid)} + additionalAccessibilityLabelCheck /> ); }} diff --git a/app/views/AutoTranslateView/index.tsx b/app/views/AutoTranslateView/index.tsx index 6f89a6e19f4..06c6c76ee23 100644 --- a/app/views/AutoTranslateView/index.tsx +++ b/app/views/AutoTranslateView/index.tsx @@ -104,8 +104,8 @@ const AutoTranslateView = (): React.ReactElement => { ) : null } translateTitle={false} - additionalAcessibilityLabel={selectedLanguage === language} - additionalAcessibilityLabelCheck + additionalAccessibilityLabel={selectedLanguage === language} + additionalAccessibilityLabelCheck /> )); @@ -124,7 +124,7 @@ const AutoTranslateView = (): React.ReactElement => { right={() => ( <Switch testID='auto-translate-view-switch' value={enableAutoTranslate} onValueChange={toggleAutoTranslate} /> )} - additionalAcessibilityLabel={enableAutoTranslate} + additionalAccessibilityLabel={enableAutoTranslate} /> <List.Separator /> </> diff --git a/app/views/CreateChannelView/index.tsx b/app/views/CreateChannelView/index.tsx index aca29b5a6cc..37b397088e6 100644 --- a/app/views/CreateChannelView/index.tsx +++ b/app/views/CreateChannelView/index.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useEffect, useLayoutEffect } from 'react'; import { shallowEqual, useDispatch } from 'react-redux'; -import { FlatList, ScrollView, StyleSheet, Text, View } from 'react-native'; +import { ScrollView, StyleSheet, View } from 'react-native'; import { type RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { type NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useForm } from 'react-hook-form'; @@ -18,14 +18,13 @@ import I18n from '../../i18n'; import { useTheme } from '../../theme'; import { Review } from '../../lib/methods/helpers/review'; import SafeAreaView from '../../containers/SafeAreaView'; -import sharedStyles from '../Styles'; import { type ChatsStackParamList } from '../../stacks/types'; import Button from '../../containers/Button'; import { ControlledFormTextInput } from '../../containers/TextInput'; -import Chip from '../../containers/Chip'; import { RoomSettings } from './RoomSettings'; import { type ISelectedUser } from '../../reducers/selectedUsers'; import useA11yErrorAnnouncement from '../../lib/hooks/useA11yErrorAnnouncement'; +import SelectedUsers from '../../containers/SelectedUsers'; const styles = StyleSheet.create({ containerTextInput: { @@ -35,23 +34,6 @@ const styles = StyleSheet.create({ containerStyle: { marginBottom: 16 }, - list: { - width: '100%' - }, - invitedHeader: { - marginVertical: 12, - marginHorizontal: 16, - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center' - }, - invitedCount: { - fontSize: 12, - ...sharedStyles.textRegular - }, - invitedList: { - paddingHorizontal: 16 - }, buttonCreate: { marginTop: 32, marginHorizontal: 16 @@ -172,43 +154,7 @@ const CreateChannelView = () => { e2eEnabledDefaultPrivateRooms={e2eEnabledDefaultPrivateRooms} /> </View> - {users.length > 0 ? ( - <> - <View style={styles.invitedHeader}> - <Text style={[styles.invitedCount, { color: colors.fontSecondaryInfo }]}> - {I18n.t('N_Selected_members', { n: users.length })} - </Text> - </View> - <FlatList - data={users} - extraData={users} - keyExtractor={item => item._id} - style={[ - styles.list, - { - backgroundColor: colors.surfaceTint, - borderColor: colors.strokeLight - } - ]} - contentContainerStyle={styles.invitedList} - renderItem={({ item }) => { - const name = useRealName && item.fname ? item.fname : item.name; - const username = item.name; - - return ( - <Chip - text={name} - avatar={username} - onPress={() => removeUser(item)} - testID={`create-channel-view-item-${item.name}`} - /> - ); - }} - keyboardShouldPersistTaps='always' - horizontal - /> - </> - ) : null} + {users.length > 0 ? <SelectedUsers onPress={removeUser} users={users} useRealName={useRealName} /> : null} <Button title={isTeam ? I18n.t('Create_Team') : I18n.t('Create_Channel')} type='primary' diff --git a/app/views/CreateDiscussionView/SelectUsers.tsx b/app/views/CreateDiscussionView/SelectUsers.tsx deleted file mode 100644 index a5d926470c0..00000000000 --- a/app/views/CreateDiscussionView/SelectUsers.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { Text, View } from 'react-native'; -import { BlockContext } from '@rocket.chat/ui-kit'; - -import { getAvatarURL } from '../../lib/methods/helpers/getAvatarUrl'; -import I18n from '../../i18n'; -import { MultiSelect } from '../../containers/UIKit/MultiSelect'; -import styles from './styles'; -import { type ICreateDiscussionViewSelectUsers } from './interfaces'; -import { SubscriptionType, type IUser } from '../../definitions'; -import { search } from '../../lib/methods/search'; -import { getRoomAvatar, getRoomTitle } from '../../lib/methods/helpers'; -import { useTheme } from '../../theme'; - -const SelectUsers = ({ - server, - token, - userId, - selected, - onUserSelect, - blockUnauthenticatedAccess, - serverVersion -}: ICreateDiscussionViewSelectUsers): React.ReactElement => { - const [users, setUsers] = useState<any[]>([]); - const { colors } = useTheme(); - - const getUsers = async (keyword = '') => { - try { - const res = await search({ text: keyword, filterRooms: false }); - const selectedUsers = users.filter((u: IUser) => selected.includes(u.name)); - const filteredUsers = res.filter(r => !selectedUsers.find((u: IUser) => u.name === r.name)); - const items = [...selectedUsers, ...filteredUsers]; - setUsers(items); - return items.map((user: IUser) => ({ - value: user.name, - text: { text: getRoomTitle(user) }, - imageUrl: getAvatar(user) - })); - } catch { - // do nothing - } - }; - - useEffect(() => { - getUsers(''); - }, []); - - const getAvatar = (item: IUser) => - getAvatarURL({ - text: getRoomAvatar(item), - type: SubscriptionType.DIRECT, - userId, - token, - server, - avatarETag: item.avatarETag, - blockUnauthenticatedAccess, - serverVersion - }); - - return ( - <View accessibilityLabel={I18n.t('Invite_users')}> - <Text style={[styles.label, { color: colors.fontTitlesLabels }]}>{I18n.t('Invite_users')}</Text> - <MultiSelect - inputStyle={styles.inputStyle} - onSearch={getUsers} - onChange={onUserSelect} - options={users.map((user: IUser) => ({ - value: user.name, - text: { text: getRoomTitle(user) }, - imageUrl: getAvatar(user) - }))} - placeholder={{ text: I18n.t('Select_Users') }} - context={BlockContext.FORM} - multiselect - testID='create-discussion-select-users' - /> - </View> - ); -}; - -export default SelectUsers; diff --git a/app/views/CreateDiscussionView/index.tsx b/app/views/CreateDiscussionView/index.tsx index c6c1188631e..80fb919b9d3 100644 --- a/app/views/CreateDiscussionView/index.tsx +++ b/app/views/CreateDiscussionView/index.tsx @@ -15,7 +15,6 @@ import { createDiscussionRequest, type ICreateDiscussionRequestData } from '../. import SafeAreaView from '../../containers/SafeAreaView'; import { events, logEvent } from '../../lib/methods/helpers/log'; import styles from './styles'; -import SelectUsers from './SelectUsers'; import SelectChannel from './SelectChannel'; import { type ICreateChannelViewProps, type IResult, type IError } from './interfaces'; import { type ISearchLocal, type ISubscription } from '../../definitions'; @@ -28,6 +27,8 @@ import { useAppSelector } from '../../lib/hooks/useAppSelector'; import { useTheme } from '../../theme'; import handleSubmitEvent from './utils/handleSubmitEvent'; import useA11yErrorAnnouncement from '../../lib/hooks/useA11yErrorAnnouncement'; +import SelectedUsers from '../../containers/SelectedUsers'; +import { type ISelectedUser } from '../../reducers/selectedUsers'; const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => { const schema = yup.object().shape({ @@ -45,8 +46,11 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => loading, result, serverVersion, - user + user, + selectedUsers, + useRealName } = useAppSelector(state => ({ + selectedUsers: state.selectedUsers.users, user: getUserSelector(state), server: state.server.server, error: state.createDiscussion.error as IError, @@ -56,13 +60,13 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => blockUnauthenticatedAccess: !!(state.settings.Accounts_AvatarBlockUnauthenticatedAccess || true), serverVersion: state.server.version as string, isMasterDetail: state.app.isMasterDetail, - encryptionEnabled: state.encryption.enabled + encryptionEnabled: state.encryption.enabled, + useRealName: state.settings.UI_Use_Real_Name as boolean })); const [channel, setChannel] = useState<ISubscription | ISearchLocal>(route.params?.channel); const [encrypted, setEncrypted] = useState<boolean>(encryptionEnabled); - const [users, setUsers] = useState<string[]>([]); - + const [users, setUsers] = useState<ISelectedUser[]>(selectedUsers); const message = route.params?.message; const { control, @@ -86,16 +90,15 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => setEncrypted(value?.encrypted); }; - const selectUsers = ({ value }: { value: string[] }) => { - logEvent(events.CD_SELECT_USERS); - setUsers(value); - }; - const onEncryptedChange = (value: boolean) => { logEvent(events.CD_TOGGLE_ENCRY); setEncrypted(value); }; + const removeUser = (user: ISelectedUser) => { + setUsers(prevState => prevState.filter(item => item._id !== user._id)); + }; + const submit = () => { const pmid = message?.id; const reply = ''; @@ -110,7 +113,7 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => pmid, t_name, reply, - users + users: users.map(item => item.name) }; if (isEncryptionEnabled) { params.encrypted = encrypted ?? false; @@ -139,8 +142,8 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => }, [navigation, route]); return ( - <KeyboardView style={styles.container} backgroundColor={colors.surfaceHover}> - <SafeAreaView testID='create-discussion-view'> + <KeyboardView style={styles.container} backgroundColor={colors.surfaceTint}> + <SafeAreaView testID='create-discussion-view' style={{ backgroundColor: colors.surfaceTint }}> <ScrollView {...scrollPersistTaps}> <Text style={[styles.description, { color: colors.fontDefault }]}>{I18n.t('Discussion_Desc')}</Text> <View style={styles.form}> @@ -162,15 +165,6 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => testID='multi-select-discussion-name' containerStyle={styles.inputStyle} /> - <SelectUsers - server={server} - userId={user.id} - token={user.token} - selected={users} - onUserSelect={selectUsers} - blockUnauthenticatedAccess={blockUnauthenticatedAccess} - serverVersion={serverVersion} - /> </View> {isEncryptionEnabled ? ( @@ -179,11 +173,13 @@ const CreateDiscussionView = ({ route, navigation }: ICreateChannelViewProps) => title='Encrypted' testID='room-actions-encrypt' right={() => <Switch value={encrypted} onValueChange={onEncryptedChange} />} - additionalAcessibilityLabel={encrypted} + additionalAccessibilityLabel={encrypted} /> </> ) : null} + {users.length > 0 ? <SelectedUsers onPress={removeUser} users={users} useRealName={useRealName} /> : null} + <Button testID='create-discussion-submit' style={{ marginTop: 36 }} diff --git a/app/views/CreateDiscussionView/interfaces.ts b/app/views/CreateDiscussionView/interfaces.ts index 1b41f7c60ee..b50e0725953 100644 --- a/app/views/CreateDiscussionView/interfaces.ts +++ b/app/views/CreateDiscussionView/interfaces.ts @@ -44,13 +44,3 @@ export interface ICreateDiscussionViewSelectChannel { serverVersion: string; required?: boolean; } - -export interface ICreateDiscussionViewSelectUsers { - server: string; - token: string; - userId: string; - selected: any[]; - onUserSelect: ({ value }: { value: string[] }) => void; - blockUnauthenticatedAccess: boolean; - serverVersion: string; -} diff --git a/app/views/CreateDiscussionView/styles.ts b/app/views/CreateDiscussionView/styles.ts index 4a926abff97..d9607f71789 100644 --- a/app/views/CreateDiscussionView/styles.ts +++ b/app/views/CreateDiscussionView/styles.ts @@ -29,5 +29,24 @@ export default StyleSheet.create({ form: { gap: 12, paddingTop: 12 + }, + invitedHeader: { + marginVertical: 12, + marginHorizontal: 16, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center' + }, + invitedCount: { + fontSize: 12, + ...sharedStyles.textRegular + }, + invitedList: { + gap: 8, + paddingHorizontal: 4 + }, + list: { + flex: 1, + maxHeight: '25%' } }); diff --git a/app/views/DefaultBrowserView/Item.tsx b/app/views/DefaultBrowserView/Item.tsx index 37575fc6f36..1dfe9de1ea5 100644 --- a/app/views/DefaultBrowserView/Item.tsx +++ b/app/views/DefaultBrowserView/Item.tsx @@ -27,8 +27,8 @@ const Item = ({ title, value, browser, changeDefaultBrowser }: IRenderItem) => { testID={`default-browser-view-${title}`} right={() => (isSelected ? <List.Icon name='check' color={colors.badgeBackgroundLevel2} /> : null)} translateTitle={false} - additionalAcessibilityLabel={isSelected} - additionalAcessibilityLabelCheck + additionalAccessibilityLabel={isSelected} + additionalAccessibilityLabelCheck /> ); }; diff --git a/app/views/DefaultBrowserView/index.tsx b/app/views/DefaultBrowserView/index.tsx index c63f4a134d9..d16ccb399aa 100644 --- a/app/views/DefaultBrowserView/index.tsx +++ b/app/views/DefaultBrowserView/index.tsx @@ -9,7 +9,6 @@ import { isIOS } from '../../lib/methods/helpers'; import SafeAreaView from '../../containers/SafeAreaView'; import UserPreferences from '../../lib/methods/userPreferences'; import { events, logEvent } from '../../lib/methods/helpers/log'; -import Item from './Item'; export type TValue = 'inApp' | 'systemDefault:' | 'googlechrome:' | 'firefox:' | 'brave:'; @@ -82,7 +81,6 @@ const DefaultBrowserView = () => { logEvent(events.DB_CHANGE_DEFAULT_BROWSER_F); } }, []); - return ( <SafeAreaView testID='default-browser-view'> <FlatList @@ -90,7 +88,15 @@ const DefaultBrowserView = () => { keyExtractor={item => item.value} contentContainerStyle={List.styles.contentContainerStyleFlatList} renderItem={({ item }) => ( - <Item browser={browser} changeDefaultBrowser={changeDefaultBrowser} title={item.title} value={item.value} /> + <List.Radio + isSelected={(!browser && item.value === 'systemDefault:') || item.title === browser} + title={item.title} + value={item.value} + translateTitle={false} + translateSubtitle={false} + onPress={changeDefaultBrowser} + testID={`default-browser-view-${item.value}`} + /> )} ListHeaderComponent={ <> diff --git a/app/views/DirectoryView/Options.tsx b/app/views/DirectoryView/Options.tsx index 2e37baff38d..3171154d7b1 100644 --- a/app/views/DirectoryView/Options.tsx +++ b/app/views/DirectoryView/Options.tsx @@ -2,9 +2,7 @@ import React from 'react'; import { Text, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import Touch from '../../containers/Touch'; import { CustomIcon, type TIconsName } from '../../containers/CustomIcon'; -import Check from '../../containers/Check'; import * as List from '../../containers/List'; import I18n from '../../i18n'; import styles from './styles'; @@ -43,13 +41,13 @@ const DirectoryOptions = ({ } return ( - <Touch onPress={() => changeType(itemType)} style={styles.filterItemButton} accessibilityLabel={I18n.t(text)} accessible> - <View style={styles.filterItemContainer}> - <CustomIcon name={icon} size={22} color={colors.fontDefault} style={styles.filterItemIcon} /> - <Text style={[styles.filterItemText, { color: colors.fontDefault }]}>{I18n.t(text)}</Text> - {propType === itemType ? <Check /> : null} - </View> - </Touch> + <List.Radio + title={text} + value={itemType} + isSelected={propType === itemType} + onPress={() => changeType(itemType)} + left={() => <CustomIcon name={icon} size={22} color={colors.fontDefault} style={styles.filterItemIcon} />} + /> ); }; diff --git a/app/views/DirectoryView/index.tsx b/app/views/DirectoryView/index.tsx index 821c1b14728..e827e732c50 100644 --- a/app/views/DirectoryView/index.tsx +++ b/app/views/DirectoryView/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { FlatList, type ListRenderItem } from 'react-native'; +import { AccessibilityInfo, FlatList, type ListRenderItem } from 'react-native'; import { connect } from 'react-redux'; import { type NativeStackNavigationOptions, type NativeStackNavigationProp } from '@react-navigation/native-stack'; import { type CompositeNavigationProp } from '@react-navigation/native'; @@ -126,6 +126,7 @@ class DirectoryView extends React.Component<IDirectoryViewProps, IDirectoryViewS loading: false, total: directories.total })); + this.announceSearchResults(directories.count); } else { this.setState({ loading: false }); } @@ -139,6 +140,15 @@ class DirectoryView extends React.Component<IDirectoryViewProps, IDirectoryViewS this.load({ newSearch: true }); }; + announceSearchResults = (count: number) => { + if (!count) { + AccessibilityInfo.announceForAccessibility(I18n.t('No_results_found')); + return; + } + const message = count === 1 ? I18n.t('One_result_found') : I18n.t('Search_Results_found', { count: count.toString() }); + AccessibilityInfo.announceForAccessibility(message); + }; + changeType = (type: string) => { this.setState({ type, data: [] }, () => this.search()); diff --git a/app/views/DirectoryView/styles.ts b/app/views/DirectoryView/styles.ts index e8f0592d504..588d8dda6a1 100644 --- a/app/views/DirectoryView/styles.ts +++ b/app/views/DirectoryView/styles.ts @@ -9,10 +9,6 @@ export default StyleSheet.create({ listContainer: { paddingBottom: 30 }, - filterItemButton: { - paddingVertical: 12, - justifyContent: 'center' - }, filterItemContainer: { flex: 1, flexDirection: 'row', diff --git a/app/views/DiscussionsView/Item.tsx b/app/views/DiscussionsView/Item.tsx index 2a711096ea7..143b4da6841 100644 --- a/app/views/DiscussionsView/Item.tsx +++ b/app/views/DiscussionsView/Item.tsx @@ -1,8 +1,8 @@ import React from 'react'; import { StyleSheet, Text, View } from 'react-native'; import Touchable from 'react-native-platform-touchable'; -import moment from 'moment'; +import dayjs from '../../lib/dayjs'; import { useTheme } from '../../theme'; import Avatar from '../../containers/Avatar'; import sharedStyles from '../Styles'; @@ -58,7 +58,7 @@ const Item = ({ item, onPress }: IItem): React.ReactElement => { let messageDate = ''; if (item?.ts) { - messageTime = moment(item.ts).format('LT'); + messageTime = dayjs(item.ts).format('LT'); messageDate = formatDateThreads(item.ts); } diff --git a/app/views/DisplayPrefsView.tsx b/app/views/DisplayPrefsView.tsx index de1fb0e4655..54c00e4a31e 100644 --- a/app/views/DisplayPrefsView.tsx +++ b/app/views/DisplayPrefsView.tsx @@ -83,7 +83,7 @@ const DisplayPrefsView = (): React.ReactElement => { ); const renderAvatarSwitch = (value: boolean) => ( - <Switch value={value} onValueChange={() => toggleAvatar()} testID='display-pref-view-avatar-switch' /> + <Switch accessible={false} value={value} onValueChange={() => toggleAvatar()} testID='display-pref-view-avatar-switch' /> ); const renderRadio = (value: boolean) => <Radio check={value} size={ICON_SIZE} />; @@ -99,7 +99,7 @@ const DisplayPrefsView = (): React.ReactElement => { testID='display-pref-view-expanded' right={() => renderRadio(displayMode === DisplayMode.Expanded)} onPress={displayExpanded} - additionalAcessibilityLabel={displayMode === DisplayMode.Expanded} + additionalAccessibilityLabel={displayMode === DisplayMode.Expanded} accessibilityRole='radio' /> <List.Separator /> @@ -109,7 +109,7 @@ const DisplayPrefsView = (): React.ReactElement => { testID='display-pref-view-condensed' right={() => renderRadio(displayMode === DisplayMode.Condensed)} onPress={displayCondensed} - additionalAcessibilityLabel={displayMode === DisplayMode.Condensed} + additionalAccessibilityLabel={displayMode === DisplayMode.Condensed} accessibilityRole='radio' /> <List.Separator /> @@ -118,7 +118,8 @@ const DisplayPrefsView = (): React.ReactElement => { title='Avatars' testID='display-pref-view-avatars' right={() => renderAvatarSwitch(showAvatar)} - additionalAcessibilityLabel={showAvatar} + additionalAccessibilityLabel={showAvatar} + accessibilityRole='switch' /> <List.Separator /> </List.Section> @@ -131,7 +132,7 @@ const DisplayPrefsView = (): React.ReactElement => { left={() => <List.Icon name='clock' />} onPress={sortByActivity} right={() => renderRadio(sortBy === SortBy.Activity)} - additionalAcessibilityLabel={sortBy === SortBy.Activity} + additionalAccessibilityLabel={sortBy === SortBy.Activity} accessibilityRole='radio' /> <List.Separator /> @@ -141,7 +142,7 @@ const DisplayPrefsView = (): React.ReactElement => { left={() => <List.Icon name='sort-az' />} onPress={sortByName} right={() => renderRadio(sortBy === SortBy.Alphabetical)} - additionalAcessibilityLabel={sortBy === SortBy.Alphabetical} + additionalAccessibilityLabel={sortBy === SortBy.Alphabetical} accessibilityRole='radio' /> <List.Separator /> @@ -155,7 +156,7 @@ const DisplayPrefsView = (): React.ReactElement => { left={() => <List.Icon name='flag' />} onPress={toggleUnread} right={() => renderCheckBox(showUnread)} - additionalAcessibilityLabel={showUnread} + additionalAccessibilityLabel={showUnread} accessibilityRole='checkbox' /> <List.Separator /> @@ -165,7 +166,7 @@ const DisplayPrefsView = (): React.ReactElement => { left={() => <List.Icon name='star' />} onPress={toggleGroupByFavorites} right={() => renderCheckBox(showFavorites)} - additionalAcessibilityLabel={showFavorites} + additionalAccessibilityLabel={showFavorites} accessibilityRole='checkbox' /> <List.Separator /> @@ -175,7 +176,7 @@ const DisplayPrefsView = (): React.ReactElement => { left={() => <List.Icon name='group-by-type' />} onPress={toggleGroupByType} right={() => renderCheckBox(groupByType)} - additionalAcessibilityLabel={groupByType} + additionalAccessibilityLabel={groupByType} accessibilityRole='checkbox' /> <List.Separator /> diff --git a/app/views/InviteUsersView/index.tsx b/app/views/InviteUsersView/index.tsx index c537fa5eae2..95aa027fb5b 100644 --- a/app/views/InviteUsersView/index.tsx +++ b/app/views/InviteUsersView/index.tsx @@ -1,8 +1,8 @@ import React, { useEffect } from 'react'; -import moment from 'moment'; import { ScrollView, Share, View } from 'react-native'; import { useDispatch, useSelector } from 'react-redux'; +import dayjs from '../../lib/dayjs'; import { inviteLinksClear, inviteLinksCreate } from '../../actions/inviteLinks'; import Button from '../../containers/Button'; import Markdown from '../../containers/markdown'; @@ -62,12 +62,12 @@ const InviteUsersView = ({ route, navigation }: IInviteUsersViewProps): React.Re if (invite.maxUses) { const usesLeft = invite.maxUses - invite.uses; return I18n.t('Your_invite_link_will_expire_on__date__or_after__usesLeft__uses', { - date: moment(expiration).format(timeDateFormat), + date: dayjs(expiration).format(timeDateFormat), usesLeft }); } - return I18n.t('Your_invite_link_will_expire_on__date__', { date: moment(expiration).format(timeDateFormat) }); + return I18n.t('Your_invite_link_will_expire_on__date__', { date: dayjs(expiration).format(timeDateFormat) }); } if (invite.maxUses) { diff --git a/app/views/JitsiMeetView/index.tsx b/app/views/JitsiMeetView/index.tsx index 67544b8de63..fe86c05d1c7 100644 --- a/app/views/JitsiMeetView/index.tsx +++ b/app/views/JitsiMeetView/index.tsx @@ -2,7 +2,7 @@ import CookieManager from '@react-native-cookies/cookies'; import { type RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake'; import React, { useCallback, useEffect, useState } from 'react'; -import { ActivityIndicator, BackHandler, Linking, SafeAreaView, StyleSheet, View } from 'react-native'; +import { ActivityIndicator, Linking, SafeAreaView, StyleSheet, View } from 'react-native'; import WebView, { type WebViewNavigation } from 'react-native-webview'; import { userAgent } from '../../lib/constants/userAgent'; @@ -52,8 +52,8 @@ const JitsiMeetView = (): React.ReactElement => { await Linking.openURL(`org.jitsi.meet://${callUrl}`); goBack(); } catch (error) { - // As the jitsi app was not opened, disable the backhandler on android - BackHandler.addEventListener('hardwareBackPress', () => true); + // Jitsi app not installed - will use WebView instead + // No need to block back button as WebView handles navigation } }, [goBack, url]); diff --git a/app/views/LanguageView/LanguageItem.tsx b/app/views/LanguageView/LanguageItem.tsx deleted file mode 100644 index ca5a45e53ea..00000000000 --- a/app/views/LanguageView/LanguageItem.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; - -import * as List from '../../containers/List'; -import { useTheme } from '../../theme'; -import i18n from '../../i18n'; - -const LanguageItem = ({ - item, - language, - submit -}: { - item: { value: string; label: string }; - language: string; - submit: (language: string) => Promise<void>; -}) => { - const { colors } = useTheme(); - - const { value, label } = item; - const isSelected = language === value; - - return ( - <List.Item - title={label} - onPress={() => submit(value)} - testID={`language-view-${value}`} - right={() => (isSelected ? <List.Icon name='check' color={colors.badgeBackgroundLevel2} /> : null)} - translateTitle={false} - additionalAcessibilityLabel={isSelected ? i18n.t('Checked') : i18n.t('Unchecked')} - /> - ); -}; - -export default LanguageItem; diff --git a/app/views/LanguageView/index.tsx b/app/views/LanguageView/index.tsx index cf0e240079f..8aec1f66cb4 100644 --- a/app/views/LanguageView/index.tsx +++ b/app/views/LanguageView/index.tsx @@ -5,6 +5,7 @@ import { useDispatch } from 'react-redux'; import { useNavigation } from '@react-navigation/native'; import { type NativeStackNavigationProp } from '@react-navigation/native-stack'; +import ListRadio from '../../containers/List/ListRadio'; import { useAppSelector } from '../../lib/hooks/useAppSelector'; import { appStart } from '../../actions/app'; import { setUser } from '../../actions/login'; @@ -18,7 +19,6 @@ import { type SettingsStackParamList } from '../../stacks/types'; import { showErrorAlert } from '../../lib/methods/helpers/info'; import log, { events, logEvent } from '../../lib/methods/helpers/log'; import { saveUserPreferences } from '../../lib/services/restApi'; -import LanguageItem from './LanguageItem'; const LanguageView = () => { const { languageDefault, id } = useAppSelector(state => ({ @@ -96,7 +96,16 @@ const LanguageView = () => { ListHeaderComponent={List.Separator} ListFooterComponent={List.Separator} contentContainerStyle={List.styles.contentContainerStyleFlatList} - renderItem={({ item }) => <LanguageItem item={item} language={language} submit={submit} />} + renderItem={({ item }) => ( + <ListRadio + testID={`language-view-${item.value}`} + title={item.label} + value={item.value} + translateTitle={false} + isSelected={item.value === (language || languageDefault)} + onPress={() => submit(item.value)} + /> + )} ItemSeparatorComponent={List.Separator} /> </SafeAreaView> diff --git a/app/views/MediaAutoDownloadView/ListPicker.tsx b/app/views/MediaAutoDownloadView/ListPicker.tsx index 6837a63f31c..b1980731f6d 100644 --- a/app/views/MediaAutoDownloadView/ListPicker.tsx +++ b/app/views/MediaAutoDownloadView/ListPicker.tsx @@ -1,8 +1,8 @@ import React from 'react'; import { StyleSheet, Text, View } from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import { type TActionSheetOptionsItem, useActionSheet } from '../../containers/ActionSheet'; -import { CustomIcon } from '../../containers/CustomIcon'; +import { useActionSheet } from '../../containers/ActionSheet'; import * as List from '../../containers/List'; import I18n from '../../i18n'; import { useTheme } from '../../theme'; @@ -66,24 +66,31 @@ const ListPicker = ({ } & IBaseParams) => { const { showActionSheet, hideActionSheet } = useActionSheet(); const { colors } = useTheme(); + const insets = useSafeAreaInsets(); const option = OPTIONS.find(option => option.value === value) || OPTIONS[2]; - const getOptions = (): TActionSheetOptionsItem[] => - OPTIONS.map(i => ({ - title: I18n.t(i.label, { defaultValue: i.label }), - onPress: () => { - hideActionSheet(); - onChangeValue(i.value); - }, - right: option.value === i.value ? () => <CustomIcon name={'check'} size={20} color={colors.strokeHighlight} /> : undefined - })); + const getOptions = () => ( + <View style={{ backgroundColor: colors.surfaceRoom, marginBottom: insets.bottom }}> + {OPTIONS.map(i => ( + <List.Radio + onPress={() => { + hideActionSheet(); + onChangeValue(i.value); + }} + title={i.label} + value={i.value} + isSelected={option.value === i.value} + /> + ))} + </View> + ); /* when picking an option the label should be Never but when showing among the other settings the label should be Off */ const label = option.label === 'Never' ? I18n.t('Off') : I18n.t(option.label); return ( <List.Item - onPress={() => showActionSheet({ options: getOptions() })} + onPress={() => showActionSheet({ children: getOptions() })} title={() => ( <View style={styles.leftTitleContainer}> <Text style={[styles.leftTitle, { color: colors.fontDefault }]}>{title}</Text> @@ -95,7 +102,7 @@ const ListPicker = ({ </View> )} rightContainerStyle={styles.rightContainer} - additionalAcessibilityLabel={label} + additionalAccessibilityLabel={label} /> ); }; diff --git a/app/views/MediaAutoDownloadView/index.tsx b/app/views/MediaAutoDownloadView/index.tsx index d622f0db6b2..59b1269ce52 100644 --- a/app/views/MediaAutoDownloadView/index.tsx +++ b/app/views/MediaAutoDownloadView/index.tsx @@ -35,11 +35,11 @@ const MediaAutoDownload = () => { <List.Container> <List.Section> <List.Separator /> - <ListPicker onChangeValue={setImagesPreference} value={imagesPreference} title='Image' /> + <ListPicker onChangeValue={setImagesPreference} value={imagesPreference as MediaDownloadOption} title='Image' /> <List.Separator /> - <ListPicker onChangeValue={setVideoPreference} value={videoPreference} title='Video' /> + <ListPicker onChangeValue={setVideoPreference} value={videoPreference as MediaDownloadOption} title='Video' /> <List.Separator /> - <ListPicker onChangeValue={setAudioPreference} value={audioPreference} title='Audio' /> + <ListPicker onChangeValue={setAudioPreference} value={audioPreference as MediaDownloadOption} title='Audio' /> <List.Separator /> </List.Section> </List.Container> diff --git a/app/views/NewMessageView/HeaderNewMessage.tsx b/app/views/NewMessageView/HeaderNewMessage.tsx index c31c7de7ff1..10d29d11bd6 100644 --- a/app/views/NewMessageView/HeaderNewMessage.tsx +++ b/app/views/NewMessageView/HeaderNewMessage.tsx @@ -43,19 +43,19 @@ const HeaderNewMessage = ({ maxUsers, onChangeText }: { maxUsers: number; onChan const createChannel = useCallback(() => { logEvent(events.NEW_MSG_CREATE_CHANNEL); - navigation.navigate('SelectedUsersViewCreateChannel', { nextAction: () => navigation.navigate('CreateChannelView') }); + navigation.navigate('SelectedUsersView', { nextAction: () => navigation.navigate('CreateChannelView') }); }, [navigation]); const createTeam = useCallback(() => { logEvent(events.NEW_MSG_CREATE_TEAM); - navigation.navigate('SelectedUsersViewCreateChannel', { + navigation.navigate('SelectedUsersView', { nextAction: () => navigation.navigate('CreateChannelView', { isTeam: true }) }); }, [navigation]); const createGroupChat = useCallback(() => { logEvent(events.NEW_MSG_CREATE_GROUP_CHAT); - navigation.navigate('SelectedUsersViewCreateChannel', { + navigation.navigate('SelectedUsersView', { nextAction: () => dispatch(createChannelRequest({ group: true })), buttonText: I18n.t('Create'), maxUsers @@ -64,8 +64,12 @@ const HeaderNewMessage = ({ maxUsers, onChangeText }: { maxUsers: number; onChan const createDiscussion = useCallback(() => { logEvent(events.NEW_MSG_CREATE_DISCUSSION); - Navigation.navigate('CreateDiscussionView'); - }, []); + navigation.navigate('SelectedUsersView', { + nextAction: () => Navigation.navigate('CreateDiscussionView'), + title: I18n.t('Create_Discussion'), + buttonText: I18n.t('Next') + }); + }, [navigation]); return ( <> diff --git a/app/views/NewServerView/utils/completeUrl.test.ts b/app/views/NewServerView/utils/completeUrl.test.ts index 07e722fb2c3..2146aeac2d1 100644 --- a/app/views/NewServerView/utils/completeUrl.test.ts +++ b/app/views/NewServerView/utils/completeUrl.test.ts @@ -14,11 +14,11 @@ describe('completeUrl', () => { }); it('should not modify a valid URL', () => { - expect(completeUrl('https://mobile.rocket.chat')).toBe('https://mobile.rocket.chat'); + expect(completeUrl('https://mobile.qa.rocket.chat')).toBe('https://mobile.qa.rocket.chat'); }); it('should add https:// if missing', () => { - expect(completeUrl('mobile.rocket.chat')).toBe('https://mobile.rocket.chat'); + expect(completeUrl('mobile.qa.rocket.chat')).toBe('https://mobile.qa.rocket.chat'); }); it('should handle localhost correctly', () => { @@ -31,6 +31,6 @@ describe('completeUrl', () => { }); it('should remove trailing slashes', () => { - expect(completeUrl('https://mobile.rocket.chat/')).toBe('https://mobile.rocket.chat'); + expect(completeUrl('https://mobile.qa.rocket.chat/')).toBe('https://mobile.qa.rocket.chat'); }); }); diff --git a/app/views/NotificationPreferencesView/index.tsx b/app/views/NotificationPreferencesView/index.tsx index 2d28909c534..4d0bdd72dad 100644 --- a/app/views/NotificationPreferencesView/index.tsx +++ b/app/views/NotificationPreferencesView/index.tsx @@ -67,7 +67,7 @@ const RenderListPicker = ({ testID={testID} onPress={() => showActionSheet({ options })} right={() => <Text style={[{ ...sharedStyles.textRegular, fontSize: 16 }, { color: colors.fontHint }]}>{label}</Text>} - additionalAcessibilityLabel={label} + additionalAccessibilityLabel={label} /> ); }; @@ -146,7 +146,7 @@ const NotificationPreferencesView = (): React.ReactElement => { right={() => ( <RenderSwitch preference='disableNotifications' room={room} onChangeValue={handleSaveNotificationSettings} /> )} - additionalAcessibilityLabel={!room.disableNotifications} + additionalAccessibilityLabel={!room.disableNotifications} /> <List.Separator /> <List.Info info={I18n.t('Receive_notifications_from', { name: room.name })} translateInfo={false} /> @@ -161,7 +161,7 @@ const NotificationPreferencesView = (): React.ReactElement => { <RenderSwitch preference='muteGroupMentions' room={room} onChangeValue={handleSaveNotificationSettings} /> )} // @ts-ignore - additionalAcessibilityLabel={!room.muteGroupMentions} + additionalAccessibilityLabel={!room.muteGroupMentions} /> <List.Separator /> <List.Info info='Receive_Group_Mentions_Info' /> @@ -175,7 +175,7 @@ const NotificationPreferencesView = (): React.ReactElement => { right={() => ( <RenderSwitch preference='hideUnreadStatus' room={room} onChangeValue={handleSaveNotificationSettings} /> )} - additionalAcessibilityLabel={!room.hideUnreadStatus} + additionalAccessibilityLabel={!room.hideUnreadStatus} /> <List.Separator /> <List.Info info='Mark_as_unread_Info' /> @@ -190,7 +190,7 @@ const NotificationPreferencesView = (): React.ReactElement => { right={() => ( <RenderSwitch preference='hideMentionStatus' room={room} onChangeValue={handleSaveNotificationSettings} /> )} - additionalAcessibilityLabel={!room.hideMentionStatus} + additionalAccessibilityLabel={!room.hideMentionStatus} /> <List.Separator /> <List.Info info='Show_badge_for_mentions_Info' /> diff --git a/app/views/PickerView.tsx b/app/views/PickerView.tsx index 86057af9e53..c4075e61b9a 100644 --- a/app/views/PickerView.tsx +++ b/app/views/PickerView.tsx @@ -36,8 +36,8 @@ const Item = ({ item, selected, onItemPress }: IItem) => { right={() => (selected ? <List.Icon name='check' color={colors.badgeBackgroundLevel2} /> : null)} onPress={onItemPress} translateTitle={false} - additionalAcessibilityLabel={selected} - additionalAcessibilityLabelCheck + additionalAccessibilityLabel={selected} + additionalAccessibilityLabelCheck /> ); }; diff --git a/app/views/PushTroubleshootView/components/CommunityEditionPushQuota.tsx b/app/views/PushTroubleshootView/components/CommunityEditionPushQuota.tsx index de81bad97bb..a2ca1ba6c80 100644 --- a/app/views/PushTroubleshootView/components/CommunityEditionPushQuota.tsx +++ b/app/views/PushTroubleshootView/components/CommunityEditionPushQuota.tsx @@ -41,7 +41,7 @@ export default function CommunityEditionPushQuota(): React.ReactElement | null { testID='push-troubleshoot-view-workspace-consumption' onPress={alertWorkspaceConsumption} right={() => <Text style={[styles.pickerText, { color: percentageColor }]}>{percentage}</Text>} - additionalAcessibilityLabel={percentage} + additionalAccessibilityLabel={percentage} /> <List.Separator /> <List.Info info='Workspace_consumption_description' /> diff --git a/app/views/PushTroubleshootView/components/DeviceNotificationSettings.tsx b/app/views/PushTroubleshootView/components/DeviceNotificationSettings.tsx index 9e77e43c47b..0adf5702b9d 100644 --- a/app/views/PushTroubleshootView/components/DeviceNotificationSettings.tsx +++ b/app/views/PushTroubleshootView/components/DeviceNotificationSettings.tsx @@ -1,4 +1,3 @@ -import notifee from '@notifee/react-native'; import React from 'react'; import { Linking } from 'react-native'; @@ -19,7 +18,7 @@ export default function DeviceNotificationSettings(): React.ReactElement { if (isIOS) { Linking.openURL('app-settings:'); } else { - notifee.openNotificationSettings(); + Linking.openSettings(); } }; diff --git a/app/views/ReadReceiptView/index.tsx b/app/views/ReadReceiptView/index.tsx index 9573eed00b7..6df57998f3c 100644 --- a/app/views/ReadReceiptView/index.tsx +++ b/app/views/ReadReceiptView/index.tsx @@ -1,11 +1,11 @@ import React from 'react'; import { FlatList, Text, View, RefreshControl } from 'react-native'; import { dequal } from 'dequal'; -import moment from 'moment'; import { connect } from 'react-redux'; import { type NativeStackNavigationOptions, type NativeStackNavigationProp } from '@react-navigation/native-stack'; import { type RouteProp } from '@react-navigation/core'; +import dayjs from '../../lib/dayjs'; import * as List from '../../containers/List'; import Avatar from '../../containers/Avatar'; import * as HeaderButton from '../../containers/Header/components/HeaderButton'; @@ -112,7 +112,7 @@ class ReadReceiptView extends React.Component<IReadReceiptViewProps, IReadReceip renderItem = ({ item }: { item: IReadReceipts }) => { const { theme, Message_TimeAndDateFormat } = this.props; - const time = moment(item.ts).format(Message_TimeAndDateFormat); + const time = dayjs(item.ts).format(Message_TimeAndDateFormat); if (!item?.user?.username) { return null; } diff --git a/app/views/RegisterView/index.tsx b/app/views/RegisterView/index.tsx index 0159ccd2040..dd1ac096850 100644 --- a/app/views/RegisterView/index.tsx +++ b/app/views/RegisterView/index.tsx @@ -240,7 +240,7 @@ const RegisterView = ({ navigation, route }: IProps) => { error={errors.confirmPassword?.message} required label={I18n.t('Password')} - secureTextEntry + secureTextEntry={process.env.RUNNING_E2E_TESTS !== 'true'} textContentType={isAndroid ? 'newPassword' : undefined} autoComplete={isAndroid ? 'password-new' : undefined} onSubmitEditing={() => setFocus('confirmPassword')} @@ -255,7 +255,7 @@ const RegisterView = ({ navigation, route }: IProps) => { required textContentType={isAndroid ? 'newPassword' : undefined} autoComplete={isAndroid ? 'password-new' : undefined} - secureTextEntry + secureTextEntry={process.env.RUNNING_E2E_TESTS !== 'true'} error={errors.confirmPassword?.message} onSubmitEditing={() => { if (parsedCustomFields) { diff --git a/app/views/RoomActionsView/index.tsx b/app/views/RoomActionsView/index.tsx index 400389faea6..70d06e16fd9 100644 --- a/app/views/RoomActionsView/index.tsx +++ b/app/views/RoomActionsView/index.tsx @@ -447,14 +447,14 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction handleReturnLivechat = () => { const { - room: { rid } + room: { rid, departmentId } } = this.state; showConfirmationAlert({ message: I18n.t('Would_you_like_to_return_the_inquiry'), confirmationText: I18n.t('Yes'), onPress: async () => { try { - await returnLivechat(rid); + await returnLivechat(rid, departmentId); } catch (e: any) { showErrorAlert(e.reason, I18n.t('Oops')); } @@ -795,6 +795,7 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction teamMain={room.teamMain} status={room.visitor?.status} sourceType={source} + abacAttributes={room.abacAttributes} /> <Text style={[styles.roomTitle, { color: themes[theme].fontTitlesLabels }]} numberOfLines={1}> {getRoomTitle(room)} diff --git a/app/views/RoomInfoView/Channel.tsx b/app/views/RoomInfoView/Channel.tsx index ae8bdce74b9..af7f5f4d149 100644 --- a/app/views/RoomInfoView/Channel.tsx +++ b/app/views/RoomInfoView/Channel.tsx @@ -3,6 +3,7 @@ import React from 'react'; import I18n from '../../i18n'; import { type ISubscription } from '../../definitions'; import Item from './Item'; +import { RoomInfoABAC } from './components/RoomInfoABAC'; const Channel = ({ room }: { room?: ISubscription }): React.ReactElement => { const description = room?.description || `__${I18n.t('No_label_provided', { label: 'description' })}__`; @@ -15,6 +16,7 @@ const Channel = ({ room }: { room?: ISubscription }): React.ReactElement => { <Item label={I18n.t('Topic')} content={topic} testID='room-info-view-topic' /> <Item label={I18n.t('Announcement')} content={announcement} testID='room-info-view-announcement' /> <Item label={I18n.t('Broadcast')} content={broadcast} testID='room-info-view-broadcast' /> + <RoomInfoABAC abacAttributes={room?.abacAttributes} teamMain={room?.teamMain} /> </> ); }; diff --git a/app/views/RoomInfoView/Direct.tsx b/app/views/RoomInfoView/Direct.tsx index 065068d9642..40d64c203e4 100644 --- a/app/views/RoomInfoView/Direct.tsx +++ b/app/views/RoomInfoView/Direct.tsx @@ -7,6 +7,7 @@ import CustomFields from './CustomFields'; import Timezone from './Timezone'; import styles from './styles'; import { type IUser } from '../../definitions'; +import { RoomInfoTag, RoomInfoTagContainer } from './components/RoomInfoTag'; const Roles = ({ roles }: { roles?: string[] }) => { const { colors } = useTheme(); @@ -15,18 +16,11 @@ const Roles = ({ roles }: { roles?: string[] }) => { return ( <View style={styles.item} testID='user-roles'> <Text style={[styles.itemLabel, { color: colors.fontTitlesLabels }]}>{I18n.t('Roles')}</Text> - <View style={styles.rolesContainer}> + <RoomInfoTagContainer> {roles.map(role => - role ? ( - <View - style={[styles.roleBadge, { backgroundColor: colors.surfaceSelected }]} - key={role} - testID={`user-role-${role.replace(/ /g, '-')}`}> - <Text style={[styles.role, { color: colors.fontTitlesLabels }]}>{role}</Text> - </View> - ) : null + role ? <RoomInfoTag name={role} key={role} testID={`user-role-${role.replace(/ /g, '-')}`} /> : null )} - </View> + </RoomInfoTagContainer> </View> ); } diff --git a/app/views/RoomInfoView/Item.tsx b/app/views/RoomInfoView/Item.tsx index 3707c365014..45bacc9de89 100644 --- a/app/views/RoomInfoView/Item.tsx +++ b/app/views/RoomInfoView/Item.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { Text, View } from 'react-native'; +import { View } from 'react-native'; import Markdown from '../../containers/markdown'; -import { useTheme } from '../../theme'; import styles from './styles'; +import { ItemLabel } from './components/ItemLabel'; interface IItem { label?: string; @@ -12,15 +12,11 @@ interface IItem { } const Item = ({ label, content, testID }: IItem): React.ReactElement | null => { - const { colors } = useTheme(); - if (!content) return null; return ( <View style={styles.item} testID={testID}> - <Text accessibilityLabel={label} style={[styles.itemLabel, { color: colors.fontTitlesLabels }]}> - {label} - </Text> + {label ? <ItemLabel label={label} testID={testID} /> : null} <Markdown msg={content} /> </View> ); diff --git a/app/views/RoomInfoView/Timezone.tsx b/app/views/RoomInfoView/Timezone.tsx index 73a9af64ad1..ea2d34996a0 100644 --- a/app/views/RoomInfoView/Timezone.tsx +++ b/app/views/RoomInfoView/Timezone.tsx @@ -1,6 +1,6 @@ -import moment from 'moment'; import React from 'react'; +import dayjs from '../../lib/dayjs'; import I18n from '../../i18n'; import { useAppSelector } from '../../lib/hooks/useAppSelector'; import Item from './Item'; @@ -11,7 +11,7 @@ const Timezone = ({ utcOffset }: { utcOffset?: number }): React.ReactElement | n if (!utcOffset) return null; return ( - <Item label={I18n.t('Timezone')} content={`${moment().utcOffset(utcOffset).format(Message_TimeFormat)} (UTC ${utcOffset})`} /> + <Item label={I18n.t('Timezone')} content={`${dayjs().utcOffset(utcOffset).format(Message_TimeFormat)} (UTC ${utcOffset})`} /> ); }; diff --git a/app/views/RoomInfoView/components/ItemLabel.tsx b/app/views/RoomInfoView/components/ItemLabel.tsx new file mode 100644 index 00000000000..50b5c872881 --- /dev/null +++ b/app/views/RoomInfoView/components/ItemLabel.tsx @@ -0,0 +1,18 @@ +import { Text } from 'react-native'; + +import { useTheme } from '../../../theme'; +import styles from '../styles'; + +interface IItemLabel { + label: string; + testID?: string; +} + +export const ItemLabel = ({ label, testID }: IItemLabel) => { + const { colors } = useTheme(); + return ( + <Text accessibilityLabel={label} style={[styles.itemLabel, { color: colors.fontTitlesLabels }]} testID={testID}> + {label} + </Text> + ); +}; diff --git a/app/views/RoomInfoView/components/RoomInfoABAC.stories.tsx b/app/views/RoomInfoView/components/RoomInfoABAC.stories.tsx new file mode 100644 index 00000000000..56e79d09175 --- /dev/null +++ b/app/views/RoomInfoView/components/RoomInfoABAC.stories.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import { ScrollView, View } from 'react-native'; + +import { RoomInfoABAC } from './RoomInfoABAC'; +import type { TSupportedThemes } from '../../../theme'; +import { ThemeContext } from '../../../theme'; +import { colors } from '../../../lib/constants/colors'; + +export default { + title: 'RoomInfoABAC', + component: RoomInfoABAC, + decorators: [ + (Story: any) => ( + <ScrollView> + <Story /> + </ScrollView> + ) + ] +}; + +const Story = () => ( + <> + <RoomInfoABAC abacAttributes={[{ key: 'Chat sensitivity', values: ['Classified', 'Top Secret'] }]} teamMain /> + <RoomInfoABAC + abacAttributes={[ + { key: 'Attribute', values: Array.from({ length: 10 }, (_, index) => `Value ${index + 1}`) }, + { key: 'Chat sensitivity', values: ['Classified', 'Top Secret'] } + ]} + /> + </> +); + +const ThemeProvider = ({ children, theme }: { children: React.ReactNode; theme: TSupportedThemes }) => ( + <ThemeContext.Provider value={{ theme, colors: colors[theme] }}> + <View style={{ backgroundColor: colors[theme].surfaceRoom }}>{children}</View> + </ThemeContext.Provider> +); + +export const Light = () => ( + <ThemeProvider theme='light'> + <Story /> + </ThemeProvider> +); +export const Dark = () => ( + <ThemeProvider theme='dark'> + <Story /> + </ThemeProvider> +); +export const Black = () => ( + <ThemeProvider theme='black'> + <Story /> + </ThemeProvider> +); diff --git a/app/views/RoomInfoView/components/RoomInfoABAC.test.tsx b/app/views/RoomInfoView/components/RoomInfoABAC.test.tsx new file mode 100644 index 00000000000..862228bfbd1 --- /dev/null +++ b/app/views/RoomInfoView/components/RoomInfoABAC.test.tsx @@ -0,0 +1,4 @@ +import { generateSnapshots } from '../../../../.rnstorybook/generateSnapshots'; +import * as stories from './RoomInfoABAC.stories'; + +generateSnapshots(stories); diff --git a/app/views/RoomInfoView/components/RoomInfoABAC.tsx b/app/views/RoomInfoView/components/RoomInfoABAC.tsx new file mode 100644 index 00000000000..4eaf8a85cb2 --- /dev/null +++ b/app/views/RoomInfoView/components/RoomInfoABAC.tsx @@ -0,0 +1,48 @@ +import { Text, View } from 'react-native'; + +import * as List from '../../../containers/List'; +import styles from '../styles'; +import { RoomInfoTag, RoomInfoTagContainer } from './RoomInfoTag'; +import type { ISubscription } from '../../../definitions'; +import { ItemLabel } from './ItemLabel'; +import { useTheme } from '../../../theme'; +import I18n from '../../../i18n'; + +export const RoomInfoABAC = ({ + abacAttributes, + teamMain +}: { + abacAttributes?: ISubscription['abacAttributes']; + teamMain?: boolean; +}) => { + const { colors } = useTheme(); + + if (!abacAttributes?.length) { + return null; + } + + return ( + <View style={styles.item}> + <List.Separator style={{ marginBottom: 20 }} /> + <View style={{ gap: 16 }}> + <RoomInfoTagContainer> + <RoomInfoTag name={I18n.t('ABAC_managed')} icon={teamMain ? 'team-shield' : 'hash-shield'} /> + </RoomInfoTagContainer> + + <Text style={[styles.abacDescription, { color: colors.fontSecondaryInfo }]}>{I18n.t('ABAC_managed_description')}</Text> + + <ItemLabel label={I18n.t('ABAC_room_attributes')} /> + {abacAttributes.map(attribute => ( + <View key={attribute.key} style={{ gap: 8 }}> + <Text style={[styles.abacDescription, { color: colors.fontDefault }]}>{attribute.key}</Text> + <RoomInfoTagContainer> + {attribute.values.map(value => ( + <RoomInfoTag name={value} key={value} /> + ))} + </RoomInfoTagContainer> + </View> + ))} + </View> + </View> + ); +}; diff --git a/app/views/RoomInfoView/components/RoomInfoTag.tsx b/app/views/RoomInfoView/components/RoomInfoTag.tsx new file mode 100644 index 00000000000..a68e27ab8d5 --- /dev/null +++ b/app/views/RoomInfoView/components/RoomInfoTag.tsx @@ -0,0 +1,22 @@ +import { Text, View } from 'react-native'; +import type { ReactNode } from 'react'; + +import { useTheme } from '../../../theme'; +import styles from '../styles'; +import { CustomIcon } from '../../../containers/CustomIcon'; +import type { TIconsName } from '../../../containers/CustomIcon'; + +export const RoomInfoTag = ({ name, icon, testID }: { name: string; icon?: TIconsName; testID?: string }) => { + const { colors } = useTheme(); + + return ( + <View style={[styles.roleBadge, { backgroundColor: colors.surfaceSelected }]} testID={testID}> + {icon ? <CustomIcon name={icon} size={16} /> : null} + <Text style={[styles.role, { color: colors.buttonFontSecondary }]}>{name}</Text> + </View> + ); +}; + +export const RoomInfoTagContainer = ({ children }: { children: ReactNode }) => ( + <View style={styles.rolesContainer}>{children}</View> +); diff --git a/app/views/RoomInfoView/components/RoomInfoViewTitle.tsx b/app/views/RoomInfoView/components/RoomInfoViewTitle.tsx index ebbd409af79..036413c5860 100644 --- a/app/views/RoomInfoView/components/RoomInfoViewTitle.tsx +++ b/app/views/RoomInfoView/components/RoomInfoViewTitle.tsx @@ -63,6 +63,7 @@ const RoomInfoViewTitle = ({ room, name, username, statusText, type }: IRoomInfo key='room-info-type' status={room?.visitor?.status} sourceType={room?.source} + abacAttributes={room?.abacAttributes} /> <Text testID='room-info-view-name' style={[styles.roomTitle, { color: colors.fontTitlesLabels }]} key='room-info-name'> {getRoomTitle(room)} diff --git a/app/views/RoomInfoView/components/__snapshots__/RoomInfoABAC.test.tsx.snap b/app/views/RoomInfoView/components/__snapshots__/RoomInfoABAC.test.tsx.snap new file mode 100644 index 00000000000..50b4c7d7237 --- /dev/null +++ b/app/views/RoomInfoView/components/__snapshots__/RoomInfoABAC.test.tsx.snap @@ -0,0 +1,2755 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Story Snapshots: Black should match snapshot 1`] = ` +<RCTScrollView> + <View> + <View + style={ + { + "backgroundColor": "#000000", + } + } + > + <View + style={ + { + "gap": 8, + "justifyContent": "center", + "paddingHorizontal": 20, + "paddingVertical": 10, + } + } + > + <View + style={ + [ + { + "height": 0.5, + }, + { + "marginBottom": 20, + }, + { + "backgroundColor": "#1f2329", + }, + ] + } + /> + <View + style={ + { + "gap": 16, + } + } + > + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#E4E7EA", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + ABAC managed + </Text> + </View> + </View> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#9EA2A8", + }, + ] + } + > + Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access. + </Text> + <Text + accessibilityLabel="Room attributes" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#F2F3F5", + }, + ] + } + > + Room attributes + </Text> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Chat sensitivity + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Classified + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Top Secret + </Text> + </View> + </View> + </View> + </View> + </View> + <View + style={ + { + "gap": 8, + "justifyContent": "center", + "paddingHorizontal": 20, + "paddingVertical": 10, + } + } + > + <View + style={ + [ + { + "height": 0.5, + }, + { + "marginBottom": 20, + }, + { + "backgroundColor": "#1f2329", + }, + ] + } + /> + <View + style={ + { + "gap": 16, + } + } + > + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#E4E7EA", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + ABAC managed + </Text> + </View> + </View> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#9EA2A8", + }, + ] + } + > + Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access. + </Text> + <Text + accessibilityLabel="Room attributes" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#F2F3F5", + }, + ] + } + > + Room attributes + </Text> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Attribute + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 1 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 2 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 3 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 4 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 5 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 6 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 7 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 8 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 9 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 10 + </Text> + </View> + </View> + </View> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Chat sensitivity + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Classified + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Top Secret + </Text> + </View> + </View> + </View> + </View> + </View> + </View> + </View> +</RCTScrollView> +`; + +exports[`Story Snapshots: Dark should match snapshot 1`] = ` +<RCTScrollView> + <View> + <View + style={ + { + "backgroundColor": "#1F2329", + } + } + > + <View + style={ + { + "gap": 8, + "justifyContent": "center", + "paddingHorizontal": 20, + "paddingVertical": 10, + } + } + > + <View + style={ + [ + { + "height": 0.5, + }, + { + "marginBottom": 20, + }, + { + "backgroundColor": "#333842", + }, + ] + } + /> + <View + style={ + { + "gap": 16, + } + } + > + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#E4E7EA", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + ABAC managed + </Text> + </View> + </View> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#9EA2A8", + }, + ] + } + > + Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access. + </Text> + <Text + accessibilityLabel="Room attributes" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#F2F3F5", + }, + ] + } + > + Room attributes + </Text> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Chat sensitivity + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Classified + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Top Secret + </Text> + </View> + </View> + </View> + </View> + </View> + <View + style={ + { + "gap": 8, + "justifyContent": "center", + "paddingHorizontal": 20, + "paddingVertical": 10, + } + } + > + <View + style={ + [ + { + "height": 0.5, + }, + { + "marginBottom": 20, + }, + { + "backgroundColor": "#333842", + }, + ] + } + /> + <View + style={ + { + "gap": 16, + } + } + > + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#E4E7EA", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + ABAC managed + </Text> + </View> + </View> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#9EA2A8", + }, + ] + } + > + Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access. + </Text> + <Text + accessibilityLabel="Room attributes" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#F2F3F5", + }, + ] + } + > + Room attributes + </Text> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Attribute + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 1 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 2 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 3 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 4 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 5 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 6 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 7 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 8 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 9 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Value 10 + </Text> + </View> + </View> + </View> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Chat sensitivity + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Classified + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#3C3F44", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#E4E7EA", + }, + ] + } + > + Top Secret + </Text> + </View> + </View> + </View> + </View> + </View> + </View> + </View> +</RCTScrollView> +`; + +exports[`Story Snapshots: Light should match snapshot 1`] = ` +<RCTScrollView> + <View> + <View + style={ + { + "backgroundColor": "#FFFFFF", + } + } + > + <View + style={ + { + "gap": 8, + "justifyContent": "center", + "paddingHorizontal": 20, + "paddingVertical": 10, + } + } + > + <View + style={ + [ + { + "height": 0.5, + }, + { + "marginBottom": 20, + }, + { + "backgroundColor": "#CBCED1", + }, + ] + } + /> + <View + style={ + { + "gap": 16, + } + } + > + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#2F343D", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + ABAC managed + </Text> + </View> + </View> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access. + </Text> + <Text + accessibilityLabel="Room attributes" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Room attributes + </Text> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + ] + } + > + Chat sensitivity + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Classified + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Top Secret + </Text> + </View> + </View> + </View> + </View> + </View> + <View + style={ + { + "gap": 8, + "justifyContent": "center", + "paddingHorizontal": 20, + "paddingVertical": 10, + } + } + > + <View + style={ + [ + { + "height": 0.5, + }, + { + "marginBottom": 20, + }, + { + "backgroundColor": "#CBCED1", + }, + ] + } + /> + <View + style={ + { + "gap": 16, + } + } + > + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + allowFontScaling={false} + selectable={false} + style={ + [ + { + "color": "#2F343D", + "fontSize": 16, + }, + [ + { + "lineHeight": 16, + }, + undefined, + ], + { + "fontFamily": "custom", + "fontStyle": "normal", + "fontWeight": "normal", + }, + {}, + ] + } + > +  + </Text> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + ABAC managed + </Text> + </View> + </View> + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#6C727A", + }, + ] + } + > + Only compliant users have access to attribute-based access controlled rooms. Attributes determine room access. + </Text> + <Text + accessibilityLabel="Room attributes" + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 14, + "fontWeight": "500", + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Room attributes + </Text> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + ] + } + > + Attribute + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 1 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 2 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 3 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 4 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 5 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 6 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 7 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 8 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 9 + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Value 10 + </Text> + </View> + </View> + </View> + <View + style={ + { + "gap": 8, + } + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 16, + "fontWeight": "400", + "lineHeight": 22, + "textAlign": "left", + }, + { + "color": "#2F343D", + }, + ] + } + > + Chat sensitivity + </Text> + <View + style={ + { + "flexDirection": "row", + "flexWrap": "wrap", + "gap": 4, + } + } + > + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Classified + </Text> + </View> + <View + style={ + [ + { + "alignItems": "center", + "borderRadius": 4, + "flexDirection": "row", + "gap": 2, + "padding": 4, + }, + { + "backgroundColor": "#D7DBE0", + }, + ] + } + > + <Text + style={ + [ + { + "backgroundColor": "transparent", + "fontFamily": "Inter", + "fontSize": 12, + "fontWeight": "700", + "lineHeight": 16, + "textAlign": "left", + }, + { + "color": "#1F2329", + }, + ] + } + > + Top Secret + </Text> + </View> + </View> + </View> + </View> + </View> + </View> + </View> +</RCTScrollView> +`; diff --git a/app/views/RoomInfoView/index.tsx b/app/views/RoomInfoView/index.tsx index e0f9fa01159..76e6a355c09 100644 --- a/app/views/RoomInfoView/index.tsx +++ b/app/views/RoomInfoView/index.tsx @@ -284,7 +284,7 @@ const RoomInfoView = (): React.ReactElement => { }; return ( - <ScrollView style={[styles.scroll, { backgroundColor: colors.surfaceRoom }]}> + <ScrollView style={[styles.scroll, { backgroundColor: colors.surfaceRoom }]} contentContainerStyle={{ paddingBottom: 30 }}> <SafeAreaView style={{ backgroundColor: colors.surfaceRoom }} testID='room-info-view'> <View style={[styles.avatarContainer, { backgroundColor: colors.surfaceHover }]}> <RoomInfoViewAvatar diff --git a/app/views/RoomInfoView/styles.ts b/app/views/RoomInfoView/styles.ts index 7711e6fcb74..13b0741d5bc 100644 --- a/app/views/RoomInfoView/styles.ts +++ b/app/views/RoomInfoView/styles.ts @@ -13,7 +13,8 @@ export default StyleSheet.create({ item: { paddingVertical: 10, paddingHorizontal: 20, - justifyContent: 'center' + justifyContent: 'center', + gap: 8 }, avatarContainer: { minHeight: 320, @@ -48,7 +49,6 @@ export default StyleSheet.create({ alignItems: 'center' }, itemLabel: { - marginBottom: 10, fontSize: 14, ...sharedStyles.textMedium }, @@ -61,17 +61,20 @@ export default StyleSheet.create({ }, rolesContainer: { flexDirection: 'row', - flexWrap: 'wrap' + flexWrap: 'wrap', + gap: 4 }, roleBadge: { - padding: 6, - borderRadius: 4, - marginRight: 6, - marginBottom: 6 + flexDirection: 'row', + alignItems: 'center', + gap: 2, + padding: 4, + borderRadius: 4 }, role: { - fontSize: 14, - ...sharedStyles.textRegular + fontSize: 12, + lineHeight: 16, + ...sharedStyles.textBold }, roomButtonsContainer: { flexDirection: 'row', @@ -90,5 +93,10 @@ export default StyleSheet.create({ paddingTop: 16, paddingHorizontal: 20, alignItems: 'center' + }, + abacDescription: { + lineHeight: 22, + fontSize: 16, + ...sharedStyles.textRegular } }); diff --git a/app/views/RoomMembersView/components/ActionsSection.tsx b/app/views/RoomMembersView/components/ActionsSection.tsx index 6cbe08571d4..8fb5a74b91d 100644 --- a/app/views/RoomMembersView/components/ActionsSection.tsx +++ b/app/views/RoomMembersView/components/ActionsSection.tsx @@ -23,9 +23,10 @@ interface IActionsSection { rid: TSubscriptionModel['rid']; t: TSubscriptionModel['t']; joined: boolean; + abacAttributes: TSubscriptionModel['abacAttributes']; } -export default function ActionsSection({ rid, t, joined }: IActionsSection): React.ReactElement { +export default function ActionsSection({ rid, t, joined, abacAttributes }: IActionsSection): React.ReactElement { const { navigate, pop } = useNavigation<TNavigation>(); const dispatch = useDispatch(); const [addUserToJoinedRoomPermission, addUserToAnyCRoomPermission, addUserToAnyPRoomPermission, createInviteLinksPermission] = @@ -102,6 +103,8 @@ export default function ActionsSection({ rid, t, joined }: IActionsSection): Rea testID='room-actions-invite-user' left={() => <List.Icon name='user-add' />} showActionIndicator + disabled={!!abacAttributes} + disabledReason={abacAttributes ? i18n.t('ABAC_disabled_action_reason') : undefined} /> <List.Separator /> </> diff --git a/app/views/RoomMembersView/helpers.ts b/app/views/RoomMembersView/helpers.ts index 3f8b5aa072d..df6f27ababd 100644 --- a/app/views/RoomMembersView/helpers.ts +++ b/app/views/RoomMembersView/helpers.ts @@ -49,7 +49,7 @@ export const fetchRoomMembersRoles = async (roomType: TRoomType, rid: string, up export const handleMute = async (user: TUserModel, rid: string) => { try { - await toggleMuteUserInRoom(rid, user?.username, !user.muted); + await toggleMuteUserInRoom(rid, user?.username, user?._id, !user.muted); EventEmitter.emit(LISTENER, { message: I18n.t('User_has_been_key', { key: user?.muted ? I18n.t('unmuted') : I18n.t('muted') }) }); diff --git a/app/views/RoomMembersView/index.tsx b/app/views/RoomMembersView/index.tsx index 60dabe7de70..cacad557b09 100644 --- a/app/views/RoomMembersView/index.tsx +++ b/app/views/RoomMembersView/index.tsx @@ -406,7 +406,12 @@ const RoomMembersView = (): React.ReactElement => { ItemSeparatorComponent={List.Separator} ListHeaderComponent={ <> - <ActionsSection joined={params.joined as boolean} rid={state.room.rid} t={state.room.t} /> + <ActionsSection + joined={params.joined as boolean} + rid={state.room.rid} + t={state.room.t} + abacAttributes={state.room.abacAttributes} + /> <SearchBox onChangeText={text => updateState({ filter: text.trim() })} testID='room-members-view-search' /> </> } diff --git a/app/views/RoomView/RightButtons.tsx b/app/views/RoomView/RightButtons.tsx index a2d8d5c2e59..2ad9a83367e 100644 --- a/app/views/RoomView/RightButtons.tsx +++ b/app/views/RoomView/RightButtons.tsx @@ -232,14 +232,14 @@ class RightButtonsContainer extends Component<IRightButtonsProps, IRigthButtonsS }; returnLivechat = () => { - const { rid } = this.props; + const { rid, departmentId } = this.props; if (rid) { showConfirmationAlert({ message: i18n.t('Would_you_like_to_return_the_inquiry'), confirmationText: i18n.t('Yes'), onPress: async () => { try { - await returnLivechat(rid); + await returnLivechat(rid, departmentId); } catch (e: any) { showErrorAlert(e.reason, i18n.t('Oops')); } @@ -479,6 +479,10 @@ class RightButtonsContainer extends Component<IRightButtonsProps, IRigthButtonsS return null; } + if (status === 'INVITED') { + return null; + } + if (t === 'l') { if (!this.isOmnichannelPreview()) { return ( diff --git a/app/views/RoomView/components/InvitedRoom.tsx b/app/views/RoomView/components/InvitedRoom.tsx new file mode 100644 index 00000000000..68d64863351 --- /dev/null +++ b/app/views/RoomView/components/InvitedRoom.tsx @@ -0,0 +1,100 @@ +import React, { type ReactElement } from 'react'; +import { StyleSheet, Text, View } from 'react-native'; + +import { useTheme } from '../../../theme'; +import { CustomIcon } from '../../../containers/CustomIcon'; +import Button from '../../../containers/Button'; +import sharedStyles from '../../Styles'; +import I18n from '../../../i18n'; +import type { IInviteSubscription } from '../../../definitions'; +import Chip from '../../../containers/Chip'; + +const GAP = 32; + +type InvitedRoomProps = { + title: string; + description: string; + inviter: IInviteSubscription['inviter']; + loading?: boolean; + onAccept: () => Promise<void>; + onReject: () => Promise<void>; +}; + +export const InvitedRoom = ({ title, description, inviter, loading, onAccept, onReject }: InvitedRoomProps): ReactElement => { + const { colors } = useTheme(); + const styles = useStyle(); + + return ( + <View style={styles.root}> + <View style={styles.container}> + <View style={styles.textView}> + <View style={styles.icon}> + <CustomIcon name='mail' size={42} color={colors.fontSecondaryInfo} /> + </View> + <Text style={styles.title}>{title}</Text> + <Text style={styles.description}>{description}</Text> + <View style={styles.username}> + <Chip avatar={inviter.username} text={inviter.name || inviter.username} fullWidth /> + </View> + </View> + <Button title={I18n.t('accept')} loading={loading} onPress={onAccept} /> + <Button + title={I18n.t('reject')} + type='secondary' + loading={loading} + backgroundColor={colors.surfaceTint} + onPress={onReject} + /> + </View> + </View> + ); +}; + +const useStyle = () => { + const { colors } = useTheme(); + const styles = StyleSheet.create({ + root: { + flex: 1, + backgroundColor: colors.surfaceRoom + }, + container: { + flex: 1, + marginHorizontal: 24, + justifyContent: 'center' + }, + textView: { alignItems: 'center' }, + icon: { + width: 58, + height: 58, + borderRadius: 30, + marginBottom: GAP, + backgroundColor: colors.surfaceNeutral, + alignItems: 'center', + justifyContent: 'center' + }, + title: { + ...sharedStyles.textBold, + fontSize: 24, + lineHeight: 32, + textAlign: 'center', + color: colors.fontTitlesLabels, + marginBottom: GAP + }, + description: { + ...sharedStyles.textRegular, + fontSize: 16, + lineHeight: 24, + textAlign: 'center', + color: colors.fontDefault + }, + username: { + ...sharedStyles.textRegular, + fontSize: 16, + lineHeight: 24, + textAlign: 'center', + color: colors.fontDefault, + marginBottom: GAP + } + }); + return styles; +}; diff --git a/app/views/RoomView/constants.ts b/app/views/RoomView/constants.ts index e16cba75cb0..a94401bbc80 100644 --- a/app/views/RoomView/constants.ts +++ b/app/views/RoomView/constants.ts @@ -44,5 +44,7 @@ export const roomAttrsUpdate = [ 'autoTranslateLanguage', 'unmuted', 'E2EKey', - 'encrypted' + 'encrypted', + 'status', + 'inviter' ] as TRoomUpdate[]; diff --git a/app/views/RoomView/definitions.ts b/app/views/RoomView/definitions.ts index 156fbcdcc05..e583db6a387 100644 --- a/app/views/RoomView/definitions.ts +++ b/app/views/RoomView/definitions.ts @@ -32,6 +32,8 @@ export interface IRoomViewProps extends IActionSheetProvider, IBaseScreen<ChatsS inAppFeedback?: { [key: string]: string }; encryptionEnabled: boolean; airGappedRestrictionRemainingDays: number | undefined; + isFederationEnabled: boolean; + isFederationModuleEnabled: boolean; } export type TStateAttrsUpdate = keyof IRoomViewState; diff --git a/app/views/RoomView/index.tsx b/app/views/RoomView/index.tsx index eb152d970fe..a2d595f2d09 100644 --- a/app/views/RoomView/index.tsx +++ b/app/views/RoomView/index.tsx @@ -2,13 +2,13 @@ import React from 'react'; import { AccessibilityInfo, InteractionManager, PixelRatio, Text, View } from 'react-native'; import { connect } from 'react-redux'; import parse from 'url-parse'; -import moment from 'moment'; import { Q } from '@nozbe/watermelondb'; import { dequal } from 'dequal'; import { withSafeAreaInsets } from 'react-native-safe-area-context'; import { type Subscription } from 'rxjs'; import * as Haptics from 'expo-haptics'; +import dayjs from '../../lib/dayjs'; import { getRoutingConfig, getUserInfo, @@ -102,6 +102,10 @@ import UserPreferences from '../../lib/methods/userPreferences'; import { type IRoomViewProps, type IRoomViewState } from './definitions'; import { roomAttrsUpdate, stateAttrsUpdate } from './constants'; import { EncryptedRoom, MissingRoomE2EEKey } from './components'; +import { type IRoomFederated, isRoomFederated, isRoomNativeFederated } from '../../lib/methods/isRoomFederated'; +import { InvitedRoom } from './components/InvitedRoom'; +import { getInvitationData } from '../../lib/methods/getInvitationData'; +import { isInviteSubscription } from '../../lib/methods/isInviteSubscription'; class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { private rid?: string; @@ -328,6 +332,11 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { ) { this.updateE2EEState(); } + + // init() is skipped for invite subscriptions. Initialize when invite has been accepted + if (prevState.roomUpdate.status === 'INVITED' && roomUpdate.status !== 'INVITED') { + this.init(); + } } updateOmnichannel = async () => { @@ -535,6 +544,8 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { onPress={this.goRoomActionsView} testID={`room-view-title-${title}`} sourceType={sourceType} + abacAttributes={iSubRoom.abacAttributes} + disabled={isInviteSubscription(iSubRoom)} /> ), headerRight: () => ( @@ -637,6 +648,12 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { if (!this.rid) { return; } + + if ('id' in room && isInviteSubscription(room)) { + this.setState({ loading: false }); + return; + } + if (this.tmid) { await loadThreadMessages({ tmid: this.tmid, rid: this.rid }); } else { @@ -1088,10 +1105,11 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { logEvent(events.ROOM_JOIN); try { const { room } = this.state; + const { serverVersion } = this.props; if (this.isOmnichannel) { if ('_id' in room) { - await takeInquiry(room._id); + await takeInquiry(room._id, serverVersion as string); } this.onJoin(); } else { @@ -1334,6 +1352,24 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { getText = () => this.messageComposerRef.current?.getText(); + getFederatedFooterDescription = (room: IRoomFederated) => { + const { isFederationEnabled, isFederationModuleEnabled } = this.props; + + if (!isRoomNativeFederated(room)) { + return I18n.t('Federation_Matrix_room_description_invalid_version'); + } + + if (!isFederationEnabled) { + return I18n.t('Federation_Matrix_room_description_disabled'); + } + + if (!isFederationModuleEnabled) { + return I18n.t('Federation_Matrix_room_description_missing_module'); + } + + return undefined; + }; + renderItem = (item: TAnyMessageModel, previousItem: TAnyMessageModel, highlightedMessage?: string) => { const { room, lastOpen, canAutoTranslate } = this.state; const { @@ -1350,14 +1386,18 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { let dateSeparator = null; let showUnreadSeparator = false; const isBeingEdited = action === 'edit' && item.id === selectedMessages[0]; + const federated = 'id' in room && isRoomFederated(room); if (!previousItem) { dateSeparator = item.ts; - showUnreadSeparator = moment(item.ts).isAfter(lastOpen); + showUnreadSeparator = lastOpen ? dayjs(item.ts).isAfter(lastOpen) : false; } else { showUnreadSeparator = - (lastOpen && moment(item.ts).isSameOrAfter(lastOpen) && moment(previousItem.ts).isBefore(lastOpen)) ?? false; - if (!moment(item.ts).isSame(previousItem.ts, 'day')) { + (lastOpen && + (dayjs(item.ts).isSame(lastOpen) || dayjs(item.ts).isAfter(lastOpen)) && + dayjs(previousItem.ts).isBefore(lastOpen)) ?? + false; + if (!dayjs(item.ts).isSame(previousItem.ts, 'day')) { dateSeparator = item.ts; } } @@ -1414,7 +1454,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { Message_GroupingPeriod={Message_GroupingPeriod} timeFormat={Message_TimeFormat} useRealName={useRealName} - isReadReceiptEnabled={Message_Read_Receipt_Enabled} + isReadReceiptEnabled={Message_Read_Receipt_Enabled && !federated} autoTranslateRoom={canAutoTranslate && 'id' in room && room.autoTranslate} autoTranslateLanguage={'id' in room ? room.autoTranslateLanguage : undefined} navToRoomInfo={this.navToRoomInfo} @@ -1500,6 +1540,19 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { </View> ); } + + if ('id' in room && isRoomFederated(room)) { + const description = this.getFederatedFooterDescription(room); + + if (description) { + return ( + <View style={styles.readOnly}> + <Text style={[styles.previewMode, { color: themes[theme].fontTitlesLabels }]}>{description}</Text> + </View> + ); + } + } + return <MessageComposerContainer ref={this.messageComposerRef} />; }; @@ -1559,6 +1612,16 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> { ({ bannerClosed, announcement } = room); } + if ('id' in room && isInviteSubscription(room)) { + const { title, description, inviter, accept, reject } = getInvitationData(room); + + return ( + <SafeAreaView style={{ backgroundColor: themes[theme].surfaceRoom }} testID='room-view-invited'> + <InvitedRoom title={title} description={description} inviter={inviter} onAccept={accept} onReject={reject} /> + </SafeAreaView> + ); + } + if ('encrypted' in room) { // Missing room encryption key if (showMissingE2EEKey) { @@ -1636,7 +1699,9 @@ const mapStateToProps = (state: IApplicationState) => ({ livechatAllowManualOnHold: state.settings.Livechat_allow_manual_on_hold as boolean, airGappedRestrictionRemainingDays: state.settings.Cloud_Workspace_AirGapped_Restrictions_Remaining_Days, inAppFeedback: state.inAppFeedback, - encryptionEnabled: state.encryption.enabled + encryptionEnabled: state.encryption.enabled, + isFederationEnabled: (state.settings.Federation_Matrix_enabled || state.settings.Federation_Service_Enabled) as boolean, + isFederationModuleEnabled: state.enterpriseModules.includes('federation') as boolean }); export default connect(mapStateToProps)(withDimensions(withTheme(withSafeAreaInsets(withActionSheet(RoomView))))); diff --git a/app/views/RoomsListView/hooks/useSearch.ts b/app/views/RoomsListView/hooks/useSearch.ts index 76a63e7bff4..97c7a0d2a12 100644 --- a/app/views/RoomsListView/hooks/useSearch.ts +++ b/app/views/RoomsListView/hooks/useSearch.ts @@ -1,8 +1,10 @@ import { useCallback, useReducer } from 'react'; +import { AccessibilityInfo } from 'react-native'; import { type IRoomItem } from '../../../containers/RoomItem/interfaces'; import { search as searchLib } from '../../../lib/methods/search'; import { useDebounce } from '../../../lib/methods/helpers/debounce'; +import i18n from '../../../i18n'; interface SearchState { searchEnabled: boolean; @@ -58,11 +60,22 @@ export const useSearch = () => { const [state, dispatch] = useReducer(searchReducer, initialState); + const announceSearchResultsForAccessibility = (count: number) => { + if (count < 1) { + AccessibilityInfo.announceForAccessibility(i18n.t('No_results_found')); + return; + } + + const message = count === 1 ? i18n.t('One_result_found') : i18n.t('Search_Results_found', { count }); + AccessibilityInfo.announceForAccessibility(message); + }; + const search = useDebounce(async (text: string) => { if (!state.searchEnabled) return; dispatch({ type: 'SET_SEARCHING' }); const result = await searchLib({ text }); dispatch({ type: 'SEARCH_SUCCESS', payload: result as IRoomItem[] }); + announceSearchResultsForAccessibility(result.length); }, 500); const startSearch = useCallback(() => { diff --git a/app/views/RoomsListView/index.tsx b/app/views/RoomsListView/index.tsx index 773758c9b85..0ec091befb3 100644 --- a/app/views/RoomsListView/index.tsx +++ b/app/views/RoomsListView/index.tsx @@ -1,6 +1,6 @@ import { useNavigation } from '@react-navigation/native'; -import React, { memo, useContext } from 'react'; -import { FlatList, RefreshControl } from 'react-native'; +import React, { memo, useContext, useEffect } from 'react'; +import { BackHandler, FlatList, RefreshControl } from 'react-native'; import { useSafeAreaFrame } from 'react-native-safe-area-context'; import { shallowEqual } from 'react-redux'; @@ -51,6 +51,18 @@ const RoomsListView = memo(function RoomsListView() { const { refreshing, onRefresh } = useRefresh({ searching }); const supportedVersionsStatus = useAppSelector(state => state.supportedVersions.status); + useEffect(() => { + const subscription = BackHandler.addEventListener('hardwareBackPress', () => { + if (searchEnabled) { + stopSearch(); + navigation.goBack(); + return true; + } + return false; + }); + return () => subscription.remove(); + }, [searchEnabled]); + const onPressItem = (item = {} as IRoomItem) => { if (!navigation.isFocused()) { return; diff --git a/app/views/ScreenLockConfigView.tsx b/app/views/ScreenLockConfigView.tsx index 48e63576c95..31011614b81 100644 --- a/app/views/ScreenLockConfigView.tsx +++ b/app/views/ScreenLockConfigView.tsx @@ -193,8 +193,8 @@ class ScreenLockConfigView extends React.Component<IScreenLockConfigViewProps, I right={() => (this.isSelected(value) ? this.renderIcon() : null)} disabled={disabled} translateTitle={false} - additionalAcessibilityLabel={this.isSelected(value)} - additionalAcessibilityLabelCheck + additionalAccessibilityLabel={this.isSelected(value)} + additionalAccessibilityLabelCheck /> <List.Separator /> </> @@ -254,7 +254,7 @@ class ScreenLockConfigView extends React.Component<IScreenLockConfigViewProps, I title={I18n.t('Local_authentication_unlock_with_label', { label: biometryLabel })} right={() => this.renderBiometrySwitch()} translateTitle={false} - additionalAcessibilityLabel={this.state.biometry ? I18n.t('Enabled') : I18n.t('Disabled')} + additionalAccessibilityLabel={this.state.biometry ? I18n.t('Enabled') : I18n.t('Disabled')} /> <List.Separator /> </List.Section> @@ -271,7 +271,7 @@ class ScreenLockConfigView extends React.Component<IScreenLockConfigViewProps, I <List.Item title='Local_authentication_unlock_option' right={() => this.renderAutoLockSwitch()} - additionalAcessibilityLabel={autoLock} + additionalAccessibilityLabel={autoLock} /> {autoLock ? ( <> diff --git a/app/views/SecurityPrivacyView.tsx b/app/views/SecurityPrivacyView.tsx index 63473ef9347..d87ac03a26c 100644 --- a/app/views/SecurityPrivacyView.tsx +++ b/app/views/SecurityPrivacyView.tsx @@ -95,14 +95,14 @@ const SecurityPrivacyView = ({ navigation }: ISecurityPrivacyViewProps): JSX.Ele title='Log_analytics_events' testID='security-privacy-view-analytics-events' right={() => <Switch value={analyticsEventsState} onValueChange={toggleAnalyticsEvents} />} - additionalAcessibilityLabel={analyticsEventsState} + additionalAccessibilityLabel={analyticsEventsState} /> <List.Separator /> <List.Item title='Send_crash_report' testID='security-privacy-view-crash-report' right={() => <Switch value={crashReportState} onValueChange={toggleCrashReport} />} - additionalAcessibilityLabel={analyticsEventsState} + additionalAccessibilityLabel={analyticsEventsState} /> <List.Separator /> <List.Info info='Crash_report_disclaimer' /> diff --git a/app/views/SelectListView.tsx b/app/views/SelectListView.tsx index 30bd2d5bf27..2fe004dbab3 100644 --- a/app/views/SelectListView.tsx +++ b/app/views/SelectListView.tsx @@ -183,7 +183,7 @@ class SelectListView extends React.Component<ISelectListViewProps, ISelectListVi alert={item.alert} left={() => <List.Icon name={icon} color={themes[theme].fontHint} />} right={() => (this.isRadio ? showRadio() : showCheck())} - additionalAcessibilityLabel={handleAcessibilityLabel(item.rid)} + additionalAccessibilityLabel={handleAcessibilityLabel(item.rid)} /> </> ); diff --git a/app/views/SelectedUsersView/index.tsx b/app/views/SelectedUsersView/index.tsx index 0cb9b487290..a96e9e2c7ee 100644 --- a/app/views/SelectedUsersView/index.tsx +++ b/app/views/SelectedUsersView/index.tsx @@ -17,7 +17,8 @@ import database from '../../lib/database'; import UserItem from '../../containers/UserItem'; import { type ISelectedUser } from '../../reducers/selectedUsers'; import { getUserSelector } from '../../selectors/login'; -import { type ChatsStackParamList } from '../../stacks/types'; +import { type ChatsStackParamList, type NewMessageStackParamList } from '../../stacks/types'; +import { type ModalStackParamList } from '../../stacks/MasterDetailStack/types'; import { useTheme } from '../../theme'; import { showErrorAlert } from '../../lib/methods/helpers/info'; import log, { events, logEvent } from '../../lib/methods/helpers/log'; @@ -26,8 +27,11 @@ import { isGroupChat as isGroupChatMethod } from '../../lib/methods/helpers'; import { useAppSelector } from '../../lib/hooks/useAppSelector'; import Header from './Header'; -type TRoute = RouteProp<ChatsStackParamList, 'SelectedUsersView'>; -type TNavigation = NativeStackNavigationProp<ChatsStackParamList, 'SelectedUsersView'>; +type TRoute = RouteProp<ChatsStackParamList & NewMessageStackParamList & ModalStackParamList, 'SelectedUsersView'>; +type TNavigation = NativeStackNavigationProp< + ChatsStackParamList & NewMessageStackParamList & ModalStackParamList, + 'SelectedUsersView' +>; const SelectedUsersView = () => { const [chats, setChats] = useState<ISelectedUser[]>([]); @@ -66,8 +70,8 @@ const SelectedUsersView = () => { useLayoutEffect(() => { const titleHeader = title ?? I18n.t('Select_Members'); - const buttonTextHeader = buttonText ?? I18n.t('Next'); - const nextActionHeader = nextAction ?? (() => {}); + const buttonTextHeader = buttonText || I18n.t('Next'); + const nextActionHeader = nextAction || (() => {}); const buttonTitle = handleButtonTitle(buttonTextHeader); const options = { title: titleHeader, @@ -80,7 +84,7 @@ const SelectedUsersView = () => { ) }; navigation.setOptions(options); - }, [navigation, users.length, maxUsers]); + }, [navigation, users.length, maxUsers, buttonText, nextAction]); useEffect(() => { if (isGroupChat()) { diff --git a/app/views/SidebarView/components/CustomStatus.tsx b/app/views/SidebarView/components/CustomStatus.tsx index 18a5c9796da..f0a0f179c04 100644 --- a/app/views/SidebarView/components/CustomStatus.tsx +++ b/app/views/SidebarView/components/CustomStatus.tsx @@ -72,6 +72,7 @@ const CustomStatus = () => { onPress={() => (presenceBroadcastDisabled ? onPressPresenceLearnMore() : sidebarNavigate('StatusView'))} translateTitle={!statusText} testID={`sidebar-custom-status-${status}`} + numberOfLines={1} /> <List.Separator /> </> diff --git a/app/views/StatusView/index.tsx b/app/views/StatusView/index.tsx index 7bba97360db..b2ab3d9773d 100644 --- a/app/views/StatusView/index.tsx +++ b/app/views/StatusView/index.tsx @@ -23,7 +23,6 @@ import { showErrorAlert } from '../../lib/methods/helpers'; import log, { events, logEvent } from '../../lib/methods/helpers/log'; import { useTheme } from '../../theme'; import Button from '../../containers/Button'; -import Check from '../../containers/Check'; import { USER_STATUS_TEXT_MAX_LENGTH } from '../../lib/constants/maxLength'; interface IStatus { @@ -79,19 +78,20 @@ const Status = ({ const { id, name } = statusType; return ( <> - <List.Item - additionalAcessibilityLabel={`${status === id ? I18n.t('Current_Status') : ''}`} + <List.Radio + isSelected={status === id} + additionalAccessibilityLabel={`${status === id ? I18n.t('Current_Status') : ''}`} title={name} onPress={() => { - const key = `STATUS_${statusType.id.toUpperCase()}` as keyof typeof events; + const key = `STATUS_${id.toUpperCase()}` as keyof typeof events; logEvent(events[key]); - if (status !== statusType.id) { - setStatus(statusType.id); + if (status !== id) { + setStatus(id); } }} testID={`status-view-${id}`} + value={statusType.id} left={() => <StatusIcon size={24} status={statusType.id} />} - right={() => (status === id ? <Check /> : null)} /> <List.Separator /> </> diff --git a/app/views/ThemeView.tsx b/app/views/ThemeView.tsx index 2a1c5bac25a..a744b507ab4 100644 --- a/app/views/ThemeView.tsx +++ b/app/views/ThemeView.tsx @@ -56,32 +56,18 @@ interface ITheme { group: string; } -const Item = ({ - onPress, - label, - value, - isSelected -}: { - onPress: () => void; - label: string; - value: string; - isSelected: boolean; -}) => { - const { colors } = useTheme(); - return ( - <> - <List.Item - title={label} - onPress={onPress} - testID={`theme-view-${value}`} - right={() => (isSelected ? <List.Icon name='check' color={colors.badgeBackgroundLevel2} /> : null)} - additionalAcessibilityLabel={isSelected} - additionalAcessibilityLabelCheck - /> - <List.Separator /> - </> - ); -}; +const Item = ({ onPress, item, isSelected }: { onPress: () => void; item: ITheme; isSelected: boolean }) => ( + <> + <List.Radio + isSelected={isSelected} + title={item.label} + value={item.value} + onPress={onPress} + testID={`theme-view-${item.value}`} + /> + <List.Separator /> + </> +); const ThemeView = (): React.ReactElement => { const { themePreferences, setTheme } = useTheme(); @@ -134,13 +120,7 @@ const ThemeView = (): React.ReactElement => { <List.Separator /> <> {themeGroup.map(theme => ( - <Item - onPress={() => onClick(theme)} - label={theme.label} - value={theme.value} - isSelected={!!isSelected(theme)} - key={theme.label} - /> + <Item onPress={() => onClick(theme)} item={theme} isSelected={!!isSelected(theme)} key={theme.label} /> ))} </> </List.Section> @@ -148,13 +128,7 @@ const ThemeView = (): React.ReactElement => { <List.Separator /> <> {darkGroup.map(theme => ( - <Item - onPress={() => onClick(theme)} - label={theme.label} - value={theme.value} - isSelected={!!isSelected(theme)} - key={theme.label} - /> + <Item onPress={() => onClick(theme)} item={theme} isSelected={!!isSelected(theme)} key={theme.label} /> ))} </> </List.Section> diff --git a/app/views/UserNotificationPreferencesView/ListPicker.tsx b/app/views/UserNotificationPreferencesView/ListPicker.tsx index 8ae7f2d3c2a..d6a6a6260a1 100644 --- a/app/views/UserNotificationPreferencesView/ListPicker.tsx +++ b/app/views/UserNotificationPreferencesView/ListPicker.tsx @@ -1,12 +1,12 @@ import React from 'react'; -import { StyleSheet, Text } from 'react-native'; +import { StyleSheet, Text, View } from 'react-native'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; import * as List from '../../containers/List'; import I18n from '../../i18n'; import { useTheme } from '../../theme'; import sharedStyles from '../Styles'; import { OPTIONS } from './options'; -import { CustomIcon } from '../../containers/CustomIcon'; import { useActionSheet } from '../../containers/ActionSheet'; const styles = StyleSheet.create({ @@ -37,16 +37,27 @@ const ListPicker = ({ const { showActionSheet, hideActionSheet } = useActionSheet(); const { colors } = useTheme(); const option = value ? OPTIONS[preference].find(option => option.value === value) : OPTIONS[preference][0]; + const insets = useSafeAreaInsets(); - const getOptions = () => - OPTIONS[preference].map(i => ({ - title: I18n.t(i.label, { defaultValue: i.label }), - onPress: () => { - hideActionSheet(); - onChangeValue({ [preference]: i.value.toString() }); - }, - right: option?.value === i.value ? () => <CustomIcon name={'check'} size={20} color={colors.fontHint} /> : undefined - })); + const getOptions = (): React.ReactElement => ( + <View style={{ backgroundColor: colors.surfaceRoom, marginBottom: insets.bottom }}> + <List.Separator /> + {OPTIONS[preference].map(i => ( + <React.Fragment key={i.value}> + <List.Radio + title={i.label} + isSelected={option?.value === i.value} + value={i.value} + onPress={() => { + hideActionSheet(); + onChangeValue({ [preference]: i.value.toString() }); + }} + /> + <List.Separator /> + </React.Fragment> + ))} + </View> + ); const label = option?.label ? I18n.t(option?.label, { defaultValue: option?.label }) : option?.label; @@ -54,9 +65,9 @@ const ListPicker = ({ <List.Item title={title} testID={testID} - onPress={() => showActionSheet({ options: getOptions() })} + onPress={() => showActionSheet({ children: getOptions() })} right={() => <Text style={[styles.pickerText, { color: colors.fontInfo }]}>{label}</Text>} - additionalAcessibilityLabel={label} + additionalAccessibilityLabel={label} /> ); }; diff --git a/app/views/UserPreferencesView/ListPicker.tsx b/app/views/UserPreferencesView/ListPicker.tsx index 3e5dc92fcb2..e23c3f9f138 100644 --- a/app/views/UserPreferencesView/ListPicker.tsx +++ b/app/views/UserPreferencesView/ListPicker.tsx @@ -72,7 +72,7 @@ const ListPicker = ({ testID={testID} onPress={() => showActionSheet({ options: getOptions() })} right={() => <Text style={[styles.title, { color: colors.fontHint }]}>{label}</Text>} - additionalAcessibilityLabel={label} + additionalAccessibilityLabel={label} /> ); }; diff --git a/docs/icons.md b/docs/icons.md index e01ac6666aa..b6e4c073bfc 100644 --- a/docs/icons.md +++ b/docs/icons.md @@ -1,6 +1,6 @@ # Icons -Icons are generated using IcoMoon and react-native-vector-icons https://github.com/oblador/react-native-vector-icons#createiconsetfromicomoonconfig-fontfamily-fontfile +Icons are generated using IcoMoon and `@expo/vector-icons` https://docs.expo.dev/guides/icons/#createiconsetfromicomoon # Typescript diff --git a/index.js b/index.js index 4844e1da5dd..778e46478d1 100644 --- a/index.js +++ b/index.js @@ -22,9 +22,8 @@ if (process.env.USE_STORYBOOK) { LogBox.ignoreAllLogs(); - if (isAndroid) { - require('./app/lib/notifications/videoConf/backgroundNotificationHandler'); - } + // Note: Android video conference notifications are now handled natively + // in RCFirebaseMessagingService -> CustomPushNotification -> VideoConfNotification AppRegistry.registerComponent(appName, () => require('./app/index').default); } diff --git a/ios/AppDelegate.swift b/ios/AppDelegate.swift index 386a6feffd6..b0aa0e2851f 100644 --- a/ios/AppDelegate.swift +++ b/ios/AppDelegate.swift @@ -3,7 +3,6 @@ import React import ReactAppDependencyProvider import Firebase import Bugsnag -import MMKV import WatchConnectivity @UIApplicationMain @@ -18,17 +17,13 @@ public class AppDelegate: ExpoAppDelegate { _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { + // IMPORTANT: Initialize MMKV encryption FIRST, before any other initialization + // This reads existing encryption key or generates a new one for fresh installs + // Must run before Firebase, Bugsnag, and React Native start + MMKVKeyManager.initialize() + FirebaseApp.configure() Bugsnag.start() - - // Initialize MMKV with app group - if let appGroup = Bundle.main.object(forInfoDictionaryKey: "AppGroup") as? String, - let groupDir = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroup)?.path { - MMKV.initialize(rootDir: nil, groupDir: groupDir, logLevel: .debug) - } - - // Initialize notifications - RNNotifications.startMonitorNotifications() ReplyNotification.configure() let delegate = ReactNativeDelegate() @@ -63,19 +58,6 @@ public class AppDelegate: ExpoAppDelegate { return result } - // Remote Notification handling - public override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { - RNNotifications.didRegisterForRemoteNotifications(withDeviceToken: deviceToken) - } - - public override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { - RNNotifications.didFailToRegisterForRemoteNotificationsWithError(error) - } - - public override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { - RNNotifications.didReceiveBackgroundNotification(userInfo, withCompletionHandler: completionHandler) - } - // Linking API public override func application( _ app: UIApplication, diff --git a/ios/MMKVKeyManager.h b/ios/MMKVKeyManager.h new file mode 100644 index 00000000000..b5e2058cc34 --- /dev/null +++ b/ios/MMKVKeyManager.h @@ -0,0 +1,19 @@ +// +// MMKVKeyManager.h +// RocketChatRN +// +// MMKV Key Manager - Ensures encryption key exists for MMKV storage +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface MMKVKeyManager : NSObject + ++ (void)initialize; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/ios/MMKVKeyManager.mm b/ios/MMKVKeyManager.mm new file mode 100644 index 00000000000..5a26b2f13f0 --- /dev/null +++ b/ios/MMKVKeyManager.mm @@ -0,0 +1,91 @@ +// +// MMKVKeyManager.mm +// RocketChatRN +// +// MMKV Key Manager - Ensures encryption key exists for MMKV storage +// For existing users: reads the key from Keychain +// For fresh installs: generates a new key and stores it in Keychain +// + +#import "MMKVKeyManager.h" +#import "SecureStorage.h" +#import "Shared/RocketChat/MMKVBridge.h" + +static NSString *toHex(NSString *str) { + if (!str) return @""; + + const char *utf8 = [str UTF8String]; + NSMutableString *hex = [NSMutableString string]; + + while (*utf8) { + [hex appendFormat:@"%02X", (unsigned char)*utf8++]; + } + + return [hex lowercaseString]; +} + +static void Logger(NSString *format, ...) { + va_list args; + va_start(args, format); + NSString *message = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + fprintf(stderr, "[MMKVKeyManager] %s\n", [message UTF8String]); +} + +@implementation MMKVKeyManager + ++ (void)initialize { + @try { + NSString *mmkvPath = [self initializeMMKV]; + if (!mmkvPath) { + Logger(@"Failed to initialize MMKV path"); + return; + } + + SecureStorage *secureStorage = [[SecureStorage alloc] init]; + NSString *alias = toHex(@"com.MMKV.default"); + NSString *password = [secureStorage getSecureKey:alias]; + + if (!password || password.length == 0) { + // Fresh install - generate a new key + password = [[NSUUID UUID] UUIDString]; + [secureStorage setSecureKey:alias value:password options:nil]; + Logger(@"Generated new MMKV encryption key"); + } else { + Logger(@"Existing MMKV encryption key found"); + } + + // Verify MMKV can be opened with this key + NSData *cryptKey = [password dataUsingEncoding:NSUTF8StringEncoding]; + MMKVBridge *mmkv = [[MMKVBridge alloc] initWithID:@"default" + cryptKey:cryptKey + rootPath:mmkvPath]; + + if (mmkv) { + NSUInteger keyCount = [mmkv count]; + Logger(@"MMKV initialized with encryption, %lu keys found", (unsigned long)keyCount); + } else { + Logger(@"MMKV instance is nil after initialization"); + } + } @catch (NSException *exception) { + Logger(@"MMKV initialization error: %@ - %@", exception.name, exception.reason); + } +} + ++ (NSString *)initializeMMKV { + NSString *appGroup = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"]; + if (!appGroup) return nil; + + NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:appGroup]; + if (!groupURL) return nil; + + NSString *mmkvPath = [[groupURL path] stringByAppendingPathComponent:@"mmkv"]; + [[NSFileManager defaultManager] createDirectoryAtPath:mmkvPath + withIntermediateDirectories:YES + attributes:nil + error:nil]; + return mmkvPath; +} + +@end + diff --git a/ios/NotificationService/NotificationService-Bridging-Header.h b/ios/NotificationService/NotificationService-Bridging-Header.h index 0c2809ee172..1d63c024204 100644 --- a/ios/NotificationService/NotificationService-Bridging-Header.h +++ b/ios/NotificationService/NotificationService-Bridging-Header.h @@ -2,8 +2,8 @@ // Use this file to import your target's public headers that you would like to expose to Swift. // -#import <MMKV/MMKV.h> -#import <react-native-mmkv-storage/SecureStorage.h> +#import "SecureStorage.h" +#import "../Shared/RocketChat/MMKVBridge.h" #import <React/RCTBundleURLProvider.h> #import <React/RCTRootView.h> #import <React/RCTViewManager.h> diff --git a/ios/NotificationService/NotificationService.swift b/ios/NotificationService/NotificationService.swift index 1d18a413e39..d337a0061df 100644 --- a/ios/NotificationService/NotificationService.swift +++ b/ios/NotificationService/NotificationService.swift @@ -13,11 +13,18 @@ class NotificationService: UNNotificationServiceExtension { if let bestAttemptContent = bestAttemptContent { let ejson = (bestAttemptContent.userInfo["ejson"] as? String ?? "").data(using: .utf8)! guard let data = try? (JSONDecoder().decode(Payload.self, from: ejson)) else { + contentHandler(bestAttemptContent) return } rocketchat = RocketChat(server: data.host.removeTrailingSlash()) + // Handle video conference notifications + if data.notificationType == .videoconf { + self.processVideoConf(payload: data, request: request) + return + } + // If the notification has the content on the payload, show it if data.notificationType != .messageIdOnly { self.processPayload(payload: data) @@ -35,17 +42,66 @@ class NotificationService: UNNotificationServiceExtension { } // Request the content from server - self.rocketchat?.getPushWithId(data.messageId) { notification in - if let notification = notification { - self.bestAttemptContent?.title = notification.title - self.bestAttemptContent?.body = notification.text - self.processPayload(payload: notification.payload) + if let messageId = data.messageId { + self.rocketchat?.getPushWithId(messageId) { notification in + if let notification = notification { + self.bestAttemptContent?.title = notification.title + self.bestAttemptContent?.body = notification.text + + // Update ejson with full payload from server for correct navigation + if let payloadData = try? JSONEncoder().encode(notification.payload), + let payloadString = String(data: payloadData, encoding: .utf8) { + self.bestAttemptContent?.userInfo["ejson"] = payloadString + } + + self.processPayload(payload: notification.payload) + } else { + // Server returned no notification, deliver as-is + if let bestAttemptContent = self.bestAttemptContent { + self.contentHandler?(bestAttemptContent) + } + } + } + } else { + // No messageId available, deliver the notification as-is + if let bestAttemptContent = self.bestAttemptContent { + self.contentHandler?(bestAttemptContent) } } } } } + func processVideoConf(payload: Payload, request: UNNotificationRequest) { + guard let bestAttemptContent = bestAttemptContent else { + return + } + + // Status 4 means call cancelled/ended - remove any existing notification + if payload.status == 4 { + if let rid = payload.rid, let callerId = payload.caller?._id { + let notificationId = "\(rid)\(callerId)".replacingOccurrences(of: "[^A-Za-z0-9]", with: "", options: .regularExpression) + UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [notificationId]) + } + // Don't show anything for cancelled calls + contentHandler?(UNNotificationContent()) + return + } + + // Status 0 (or nil) means incoming call - show notification with actions + let callerName = payload.caller?.name ?? "Unknown" + + bestAttemptContent.title = NSLocalizedString("Video Call", comment: "") + bestAttemptContent.body = String(format: NSLocalizedString("Incoming call from %@", comment: ""), callerName) + bestAttemptContent.categoryIdentifier = "VIDEOCONF" + bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName("ringtone.mp3")) + if #available(iOS 15.0, *) { + bestAttemptContent.interruptionLevel = .timeSensitive + } + + contentHandler?(bestAttemptContent) + } + func processPayload(payload: Payload) { // If is a encrypted message if payload.messageType == .e2e { diff --git a/ios/Podfile b/ios/Podfile index 693b2016291..4d852a82cd3 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -8,6 +8,7 @@ prepare_react_native_project! def all_pods pod 'simdjson', path: '../node_modules/@nozbe/simdjson', modular_headers: true + pod 'react-native-mmkv', path: '../node_modules/react-native-mmkv', modular_headers: true $RNFirebaseAnalyticsWithoutAdIdSupport = true use_expo_modules! @@ -35,9 +36,7 @@ end $static_framework = [ 'WatermelonDB', - 'simdjson', - 'react-native-mmkv-storage', - 'react-native-notifications' + 'simdjson' ] pre_install do |installer| Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {} @@ -66,6 +65,30 @@ post_install do |installer| config.build_settings['CODE_SIGNING_REQUIRED'] = "NO" config.build_settings['CODE_SIGNING_ALLOWED'] = "NO" config.build_settings['ENABLE_BITCODE'] = "NO" + + # Add SecureStorage headers to search paths for react-native-webview + if target.name == 'react-native-webview' + config.build_settings['HEADER_SEARCH_PATHS'] ||= ['$(inherited)'] + config.build_settings['HEADER_SEARCH_PATHS'] << '$(SRCROOT)/..' + end + + # Add FORCE_POSIX for MMKV to expose C++ API properly + if target.name == 'react-native-mmkv' + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'FORCE_POSIX=1' + end + end + end + + # Add FORCE_POSIX to main project targets that use MMKV C++ API + installer.aggregate_targets.each do |aggregate_target| + aggregate_target.user_project.targets.each do |target| + if ['NotificationService', 'RocketChatRN', 'Rocket.Chat'].include?(target.name) + target.build_configurations.each do |config| + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] + config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'FORCE_POSIX=1' unless config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'].include?('FORCE_POSIX=1') + end + end end end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2d32147c391..34cc3e5cd90 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -27,11 +27,15 @@ PODS: - BVLinearGradient (2.6.2): - React-Core - DoubleConversion (1.1.6) + - EXApplication (7.0.8): + - ExpoModulesCore - EXAV (15.1.3): - ExpoModulesCore - ReactCommon/turbomodule/core - EXConstants (17.1.5): - ExpoModulesCore + - EXNotifications (0.32.11): + - ExpoModulesCore - Expo (53.0.7): - DoubleConversion - ExpoModulesCore @@ -67,6 +71,8 @@ PODS: - ExpoModulesCore - ZXingObjC/OneD - ZXingObjC/PDF417 + - ExpoDevice (8.0.10): + - ExpoModulesCore - ExpoDocumentPicker (13.1.4): - ExpoModulesCore - ExpoFileSystem (18.1.7): @@ -226,9 +232,6 @@ PODS: - libwebp/sharpyuv (1.5.0) - libwebp/webp (1.5.0): - libwebp/sharpyuv - - MMKV (1.3.14): - - MMKVCore (~> 1.3.14) - - MMKVCore (1.3.14) - MobileCrypto (0.2.0): - DoubleConversion - glog @@ -1686,11 +1689,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-mmkv-storage (12.0.0): + - react-native-mmkv (3.3.3): - DoubleConversion - glog - hermes-engine - - MMKV (~> 1.3.14) - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety @@ -1713,8 +1715,6 @@ PODS: - Yoga - react-native-netinfo (11.3.1): - React-Core - - react-native-notifications (5.1.0): - - React-Core - react-native-restart (0.0.22): - React-Core - react-native-safe-area-context (5.4.0): @@ -1820,7 +1820,6 @@ PODS: - DoubleConversion - glog - hermes-engine - - MMKV (~> 1.3.9) - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety @@ -2381,15 +2380,8 @@ PODS: - ReactCommon/turbomodule/core - TOCropViewController (~> 2.7.4) - Yoga - - RNKeychain (8.2.0): - - React-Core - RNLocalize (2.1.1): - React-Core - - RNNotifee (7.8.2): - - React-Core - - RNNotifee/NotifeeCore (= 7.8.2) - - RNNotifee/NotifeeCore (7.8.2): - - React-Core - RNReanimated (3.17.1): - DoubleConversion - glog @@ -2614,8 +2606,6 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNVectorIcons (9.2.0): - - React-Core - SDWebImage (5.21.0): - SDWebImage/Core (= 5.21.0) - SDWebImage/Core (5.21.0) @@ -2645,12 +2635,15 @@ DEPENDENCIES: - "BugsnagReactNative (from `../node_modules/@bugsnag/react-native`)" - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EXApplication (from `../node_modules/expo-application/ios`) - EXAV (from `../node_modules/expo-av/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) + - EXNotifications (from `../node_modules/expo-notifications/ios`) - Expo (from `../node_modules/expo`) - ExpoAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`) - ExpoAsset (from `../node_modules/expo-asset/ios`) - ExpoCamera (from `../node_modules/expo-camera/ios`) + - ExpoDevice (from `../node_modules/expo-device/ios`) - ExpoDocumentPicker (from `../node_modules/expo-document-picker/ios`) - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) - ExpoFont (from `../node_modules/expo-font/ios`) @@ -2706,9 +2699,8 @@ DEPENDENCIES: - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)" - react-native-keyboard-controller (from `../node_modules/react-native-keyboard-controller`) - - react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`) + - react-native-mmkv (from `../node_modules/react-native-mmkv`) - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" - - react-native-notifications (from `../node_modules/react-native-notifications`) - react-native-restart (from `../node_modules/react-native-restart`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - "react-native-slider (from `../node_modules/@react-native-community/slider`)" @@ -2758,13 +2750,10 @@ DEPENDENCIES: - RNFileViewer (from `../node_modules/react-native-file-viewer`) - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`) - - RNKeychain (from `../node_modules/react-native-keychain`) - RNLocalize (from `../node_modules/react-native-localize`) - - "RNNotifee (from `../node_modules/@notifee/react-native`)" - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - RNSVG (from `../node_modules/react-native-svg`) - - RNVectorIcons (from `../node_modules/react-native-vector-icons`) - "simdjson (from `../node_modules/@nozbe/simdjson`)" - "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -2786,8 +2775,6 @@ SPEC REPOS: - libavif - libdav1d - libwebp - - MMKV - - MMKVCore - nanopb - PromisesObjC - PromisesSwift @@ -2808,10 +2795,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-linear-gradient" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EXApplication: + :path: "../node_modules/expo-application/ios" EXAV: :path: "../node_modules/expo-av/ios" EXConstants: :path: "../node_modules/expo-constants/ios" + EXNotifications: + :path: "../node_modules/expo-notifications/ios" Expo: :path: "../node_modules/expo" ExpoAppleAuthentication: @@ -2820,6 +2811,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-asset/ios" ExpoCamera: :path: "../node_modules/expo-camera/ios" + ExpoDevice: + :path: "../node_modules/expo-device/ios" ExpoDocumentPicker: :path: "../node_modules/expo-document-picker/ios" ExpoFileSystem: @@ -2927,12 +2920,10 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-cookies/cookies" react-native-keyboard-controller: :path: "../node_modules/react-native-keyboard-controller" - react-native-mmkv-storage: - :path: "../node_modules/react-native-mmkv-storage" + react-native-mmkv: + :path: "../node_modules/react-native-mmkv" react-native-netinfo: :path: "../node_modules/@react-native-community/netinfo" - react-native-notifications: - :path: "../node_modules/react-native-notifications" react-native-restart: :path: "../node_modules/react-native-restart" react-native-safe-area-context: @@ -3031,20 +3022,14 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-gesture-handler" RNImageCropPicker: :path: "../node_modules/react-native-image-crop-picker" - RNKeychain: - :path: "../node_modules/react-native-keychain" RNLocalize: :path: "../node_modules/react-native-localize" - RNNotifee: - :path: "../node_modules/@notifee/react-native" RNReanimated: :path: "../node_modules/react-native-reanimated" RNScreens: :path: "../node_modules/react-native-screens" RNSVG: :path: "../node_modules/react-native-svg" - RNVectorIcons: - :path: "../node_modules/react-native-vector-icons" simdjson: :path: "../node_modules/@nozbe/simdjson" WatermelonDB: @@ -3057,12 +3042,15 @@ SPEC CHECKSUMS: BugsnagReactNative: 8150cc1facb5c69c7a5d27d614fc50b4ed03c2b8 BVLinearGradient: 7815a70ab485b7b155186dd0cc836363e0288cad DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + EXApplication: 1e98d4b1dccdf30627f92917f4b2c5a53c330e5f EXAV: 90c33266835bf7e61dc0731fa8d82833d22d286f EXConstants: a1112af878fddfe6acc0399473ac56a07ced0f47 + EXNotifications: 7a2975f4e282b827a0bc78bb1d232650cb569bbd Expo: bb70dfd014457bcca19f33e8c783afdc18308434 ExpoAppleAuthentication: b589b71be6bb817decf8f35e92c6281365140289 ExpoAsset: 3bc9adb7dbbf27ae82c18ca97eb988a3ae7e73b1 ExpoCamera: 105a9a963c443a3e112c51dd81290d81cd8da94a + ExpoDevice: 6327c3c200816795708885adf540d26ecab83d1a ExpoDocumentPicker: 344f16224e6a8a088f2693667a8b713160f8f57b ExpoFileSystem: 175267faf2b38511b01ac110243b13754dac57d3 ExpoFont: abbb91a911eb961652c2b0a22eef801860425ed6 @@ -3094,8 +3082,6 @@ SPEC CHECKSUMS: libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 - MMKV: 7b5df6a8bf785c6705cc490c541b9d8a957c4a64 - MMKVCore: 3f40b896e9ab522452df9df3ce983471aa2449ba MobileCrypto: 60a1e43e26a9d6851ae2aa7294b8041c9e9220b7 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 @@ -3136,13 +3122,12 @@ SPEC CHECKSUMS: react-native-cameraroll: 23d28040c32ca8b20661e0c41b56ab041779244b react-native-cookies: d648ab7025833b977c0b19e142503034f5f29411 react-native-keyboard-controller: 9ec7ee23328c30251a399cffd8b54324a00343bf - react-native-mmkv-storage: 9afc38c25213482f668c80bf2f0a50f75dda1777 + react-native-mmkv: ec96a16cd90e0d994d486c3993abf712186f7262 react-native-netinfo: 2e3c27627db7d49ba412bfab25834e679db41e21 - react-native-notifications: 3bafa1237ae8a47569a84801f17d80242fe9f6a5 react-native-restart: f6f591aeb40194c41b9b5013901f00e6cf7d0f29 react-native-safe-area-context: 5928d84c879db2f9eb6969ca70e68f58623dbf25 react-native-slider: 605e731593322c4bb2eb48d7d64e2e4dbf7cbd77 - react-native-webview: e28f476ea60826ef0b1d7297244db1dfbec74acd + react-native-webview: 69c118d283fccfbc4fca0cd680e036ff3bf188fa React-NativeModulesApple: 5b234860053d0dd11f3442f38b99688ff1c9733b React-oscompat: 472a446c740e39ee39cd57cd7bfd32177c763a2b React-perflogger: bbca3688c62f4f39e972d6e21969c95fe441fb6c @@ -3172,7 +3157,7 @@ SPEC CHECKSUMS: React-timing: 2d07431f1c1203c5b0aaa6dc7b5f503704519218 React-utils: 67cf7dcfc18aa4c56bec19e11886033bb057d9fa ReactAppDependencyProvider: bf62814e0fde923f73fc64b7e82d76c63c284da9 - ReactCodegen: df3ff45729335a27d1c85bed1787e79783289968 + ReactCodegen: 8885059f55a205c667f52d6e35877137631116f2 ReactCommon: 177fca841e97b2c0e288e86097b8be04c6e7ae36 RNBootSplash: 1280eeb18d887de0a45bb4923d4fc56f25c8b99c RNCAsyncStorage: edb872909c88d8541c0bfade3f86cd7784a7c6b3 @@ -3188,13 +3173,10 @@ SPEC CHECKSUMS: RNFileViewer: f9424017fa643c115c1444e11292e84fb16ddd68 RNGestureHandler: 8ff2b1434b0ff8bab28c8242a656fb842990bbc8 RNImageCropPicker: b219389d3a300679b396e81d501e8c8169ffa3c0 - RNKeychain: bbe2f6d5cc008920324acb49ef86ccc03d3b38e4 RNLocalize: ca86348d88b9a89da0e700af58d428ab3f343c4e - RNNotifee: 8768d065bf1e2f9f8f347b4bd79147431c7eacd6 RNReanimated: f52ccd5ceea2bae48d7421eec89b3f0c10d7b642 RNScreens: b13e4c45f0406f33986a39c0d8da0324bff94435 RNSVG: 680e961f640e381aab730a04b2371969686ed9f7 - RNVectorIcons: 5784330be9dddb5474e8b378d5f6947996c84e55 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c @@ -3206,6 +3188,6 @@ SPEC CHECKSUMS: Yoga: dfabf1234ccd5ac41d1b1d43179f024366ae9831 ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: 4c73563b34520b90c036817cdb9ccf65fea5f5c5 +PODFILE CHECKSUM: 199f6fbbe6fb415c822cca992e6152000ac55b3e COCOAPODS: 1.15.2 diff --git a/ios/ReplyNotification.swift b/ios/ReplyNotification.swift index cffb486528e..4c3ea7c2183 100644 --- a/ios/ReplyNotification.swift +++ b/ios/ReplyNotification.swift @@ -9,49 +9,110 @@ import Foundation import UserNotifications +// Handles direct reply from iOS notifications. +// Intercepts REPLY_ACTION responses and sends messages natively, +// while forwarding all other notification events to expo-notifications. @objc(ReplyNotification) -class ReplyNotification: RNNotificationEventHandler { - private static let dispatchOnce: Void = { - let instance: AnyClass! = object_getClass(ReplyNotification()) - let originalMethod = class_getInstanceMethod(instance, #selector(didReceive)) - let swizzledMethod = class_getInstanceMethod(instance, #selector(replyNotification_didReceiveNotificationResponse)) - if let originalMethod = originalMethod, let swizzledMethod = swizzledMethod { - method_exchangeImplementations(originalMethod, swizzledMethod) - } - }() +class ReplyNotification: NSObject, UNUserNotificationCenterDelegate { + private static var shared: ReplyNotification? + private weak var originalDelegate: UNUserNotificationCenterDelegate? @objc public static func configure() { - _ = self.dispatchOnce + let instance = ReplyNotification() + shared = instance + + // Store the original delegate (expo-notifications) and set ourselves as the delegate + let center = UNUserNotificationCenter.current() + instance.originalDelegate = center.delegate + center.delegate = instance } - @objc - func replyNotification_didReceiveNotificationResponse(_ response: UNNotificationResponse, completionHandler: @escaping(() -> Void)) { + // MARK: - UNUserNotificationCenterDelegate + + func userNotificationCenter( + _ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void + ) { + // Handle REPLY_ACTION natively if response.actionIdentifier == "REPLY_ACTION" { - if let notification = RCTConvert.unNotificationPayload(response.notification) { - if let data = (notification["ejson"] as? String)?.data(using: .utf8) { - if let payload = try? JSONDecoder().decode(Payload.self, from: data), let rid = payload.rid { - if let msg = (response as? UNTextInputNotificationResponse)?.userText { - let rocketchat = RocketChat(server: payload.host.removeTrailingSlash()) - let backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: nil) - - rocketchat.sendMessage(rid: rid, message: msg, threadIdentifier: payload.tmid) { response in - guard let response = response, response.success else { - let content = UNMutableNotificationContent() - content.body = "Failed to reply message." - let request = UNNotificationRequest(identifier: "replyFailure", content: content, trigger: nil) - UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) - return - } - UIApplication.shared.endBackgroundTask(backgroundTask) - } - } - } + handleReplyAction(response: response, completionHandler: completionHandler) + return + } + + // Forward to original delegate (expo-notifications) + if let originalDelegate = originalDelegate { + originalDelegate.userNotificationCenter?(center, didReceive: response, withCompletionHandler: completionHandler) + } else { + completionHandler() + } + } + + func userNotificationCenter( + _ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void + ) { + // Forward to original delegate (expo-notifications) + if let originalDelegate = originalDelegate { + originalDelegate.userNotificationCenter?(center, willPresent: notification, withCompletionHandler: completionHandler) + } else { + completionHandler([]) + } + } + + func userNotificationCenter( + _ center: UNUserNotificationCenter, + openSettingsFor notification: UNNotification? + ) { + // Forward to original delegate (expo-notifications) + if let originalDelegate = originalDelegate { + if #available(iOS 12.0, *) { + originalDelegate.userNotificationCenter?(center, openSettingsFor: notification) + } + } + } + + // MARK: - Reply Handling + + private func handleReplyAction(response: UNNotificationResponse, completionHandler: @escaping () -> Void) { + guard let textResponse = response as? UNTextInputNotificationResponse else { + completionHandler() + return + } + + let userInfo = response.notification.request.content.userInfo + + guard let ejsonString = userInfo["ejson"] as? String, + let ejsonData = ejsonString.data(using: .utf8), + let payload = try? JSONDecoder().decode(Payload.self, from: ejsonData), + let rid = payload.rid else { + completionHandler() + return + } + + let message = textResponse.userText + let rocketchat = RocketChat(server: payload.host.removeTrailingSlash()) + let backgroundTask = UIApplication.shared.beginBackgroundTask(expirationHandler: nil) + + rocketchat.sendMessage(rid: rid, message: message, threadIdentifier: payload.tmid) { response in + // Ensure we're on the main thread for UI operations + DispatchQueue.main.async { + defer { + UIApplication.shared.endBackgroundTask(backgroundTask) + completionHandler() + } + + guard let response = response, response.success else { + // Show failure notification + let content = UNMutableNotificationContent() + content.body = "Failed to reply message." + let request = UNNotificationRequest(identifier: "replyFailure", content: content, trigger: nil) + UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) + return } } - } else { - let body = RNNotificationParser.parseNotificationResponse(response) - RNEventEmitter.sendEvent(RNNotificationOpened, body: body) } } } diff --git a/ios/RocketChatRN-Bridging-Header.h b/ios/RocketChatRN-Bridging-Header.h index 84cdd29326b..40e9146f471 100644 --- a/ios/RocketChatRN-Bridging-Header.h +++ b/ios/RocketChatRN-Bridging-Header.h @@ -2,14 +2,9 @@ // Use this file to import your target's public headers that you would like to expose to Swift. // -#import <MMKV/MMKV.h> -#import <react-native-mmkv-storage/SecureStorage.h> -#import <react-native-notifications/RNNotificationEventHandler.h> -#import <react-native-notifications/RNNotificationCenter.h> -#import <react-native-notifications/RCTConvert+RNNotifications.h> -#import <react-native-notifications/RNEventEmitter.h> -#import <react-native-notifications/RNNotificationParser.h> -#import <RNNotifications.h> +#import "SecureStorage.h" +#import "MMKVKeyManager.h" +#import "Shared/RocketChat/MMKVBridge.h" #import <RNBootSplash.h> #import <MobileCrypto/RSACrypto.h> #import <MobileCrypto/AESCrypto.h> diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index 16a5f0fe21c..c901848d451 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 0745F30D29A18A45DDDF8568 /* Pods_defaults_NotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5DA03EEFD8CEA0E9578CEFA /* Pods_defaults_NotificationService.framework */; }; 0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 1E01C81C2511208400FEF824 /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C81B2511208400FEF824 /* URL+Extensions.swift */; }; @@ -273,6 +274,10 @@ 1EFEB5982493B6640072EDC0 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFEB5972493B6640072EDC0 /* NotificationService.swift */; }; 1EFEB59C2493B6640072EDC0 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; }; + 3F56D232A9EBA1C9C749F15D /* SecureStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B215A42CFB843397273C7EA /* SecureStorage.m */; }; + 3F56D232A9EBA1C9C749F15E /* MMKVBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B215A44CFB843397273C7EC /* MMKVBridge.mm */; }; + 3F56D232A9EBA1C9C749F15F /* MMKVBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B215A44CFB843397273C7EC /* MMKVBridge.mm */; }; + 3F56D232A9EBA1C9C749F160 /* MMKVBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B215A44CFB843397273C7EC /* MMKVBridge.mm */; }; 4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */; }; 65AD38372BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; 65AD38392BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; @@ -281,6 +286,12 @@ 65AD383C2BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; 65B9A71A2AFC24190088956F /* ringtone.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 65B9A7192AFC24190088956F /* ringtone.mp3 */; }; 65B9A71B2AFC24190088956F /* ringtone.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 65B9A7192AFC24190088956F /* ringtone.mp3 */; }; + 66C2701B2EBBCB570062725F /* MMKVKeyManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 66C2701A2EBBCB570062725F /* MMKVKeyManager.mm */; }; + 66C2701C2EBBCB570062725F /* MMKVKeyManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 66C2701A2EBBCB570062725F /* MMKVKeyManager.mm */; }; + 66C2701D2EBBCB570062725F /* MMKVKeyManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 66C2701A2EBBCB570062725F /* MMKVKeyManager.mm */; }; + 66C270202EBBCB780062725F /* SecureStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C2701F2EBBCB780062725F /* SecureStorage.m */; }; + 66C270212EBBCB780062725F /* SecureStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 66C2701F2EBBCB780062725F /* SecureStorage.m */; }; + 79D8C97F8CE2EC1B6882826B /* SecureStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B215A42CFB843397273C7EA /* SecureStorage.m */; }; 7A006F14229C83B600803143 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7A006F13229C83B600803143 /* GoogleService-Info.plist */; }; 7A0129D42C6E8EC800F84A97 /* ShareRocketChatRN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A0129D22C6E8B5900F84A97 /* ShareRocketChatRN.swift */; }; 7A0129D62C6E8F0700F84A97 /* ShareRocketChatRN.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = 1EC6AD6022CBA20C00A41C61 /* ShareRocketChatRN.entitlements */; }; @@ -348,14 +359,14 @@ 7ACFE7DA2DDE48760090D9BC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ACFE7D82DDE48760090D9BC /* AppDelegate.swift */; }; 7AE10C0628A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; }; 7AE10C0828A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; }; + 815F9657A87D16E93AD8451E /* Pods_defaults_Rocket_Chat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF268DB43E067211CC4AB1D8 /* Pods_defaults_Rocket_Chat.framework */; }; 85160EB6C143E0493FE5F014 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */; }; - 89240CF9E2591164EDB5E5D5 /* Pods_defaults_NotificationService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11BBDDD4BBAEEA60A9ABB37A /* Pods_defaults_NotificationService.framework */; }; + 8BC28DFD84976599F4DD0E1F /* Pods_defaults_RocketChatRN.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C9D354D4BED64C03F5586CC /* Pods_defaults_RocketChatRN.framework */; }; + A2C6E2DD38F8BEE19BFB2E1D /* SecureStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B215A42CFB843397273C7EA /* SecureStorage.m */; }; A48B46D92D3FFBD200945489 /* A11yFlowModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A48B46D82D3FFBD200945489 /* A11yFlowModule.m */; }; A48B46DA2D3FFBD200945489 /* A11yFlowModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A48B46D82D3FFBD200945489 /* A11yFlowModule.m */; }; BC404914E86821389EEB543D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 391C4F7AA7023CD41EEBD106 /* ExpoModulesProvider.swift */; }; - BE6FD5939EC2EE9166A93755 /* Pods_defaults_Rocket_Chat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13A33C9AA4B7B99630814AB5 /* Pods_defaults_Rocket_Chat.framework */; }; DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA7E862283664608B3894E34 /* libWatermelonDB.a */; }; - FCC51A05F6D4B29D88600862 /* Pods_defaults_RocketChatRN.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 275D1FF97F64974B4E72549D /* Pods_defaults_RocketChatRN.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -455,13 +466,10 @@ /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; }; 06BB44DD4855498082A744AD /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 11BBDDD4BBAEEA60A9ABB37A /* Pods_defaults_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_defaults_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 13A33C9AA4B7B99630814AB5 /* Pods_defaults_Rocket_Chat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_defaults_Rocket_Chat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07F961A680F5B00A75B9A /* Rocket.Chat Experimental.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Rocket.Chat Experimental.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RocketChatRN/Images.xcassets; sourceTree = "<group>"; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RocketChatRN/Info.plist; sourceTree = "<group>"; }; 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-NotificationService/ExpoModulesProvider.swift"; sourceTree = "<group>"; }; - 1B8E154274568748124AD479 /* Pods-defaults-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.debug.xcconfig"; sourceTree = "<group>"; }; 1E01C81B2511208400FEF824 /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = "<group>"; }; 1E01C8202511301400FEF824 /* PushResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushResponse.swift; sourceTree = "<group>"; }; 1E01C8242511303100FEF824 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; }; @@ -604,19 +612,24 @@ 1EFEB5972493B6640072EDC0 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; }; 1EFEB5992493B6640072EDC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 1EFEB5A12493B67D0072EDC0 /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = "<group>"; }; - 23CCE114AF2A329EBFA536D1 /* Pods-defaults-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.debug.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.debug.xcconfig"; sourceTree = "<group>"; }; - 275D1FF97F64974B4E72549D /* Pods_defaults_RocketChatRN.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_defaults_RocketChatRN.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 391C4F7AA7023CD41EEBD106 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-Rocket.Chat/ExpoModulesProvider.swift"; sourceTree = "<group>"; }; 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-RocketChatRN/ExpoModulesProvider.swift"; sourceTree = "<group>"; }; + 4C9D354D4BED64C03F5586CC /* Pods_defaults_RocketChatRN.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_defaults_RocketChatRN.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RocketChatRN.entitlements; path = RocketChatRN/RocketChatRN.entitlements; sourceTree = "<group>"; }; 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; 65B9A7192AFC24190088956F /* ringtone.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = ringtone.mp3; sourceTree = "<group>"; }; + 66C270192EBBCB570062725F /* MMKVKeyManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MMKVKeyManager.h; sourceTree = "<group>"; }; + 66C2701A2EBBCB570062725F /* MMKVKeyManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MMKVKeyManager.mm; sourceTree = "<group>"; }; + 66C2701E2EBBCB780062725F /* SecureStorage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SecureStorage.h; sourceTree = "<group>"; }; + 66C2701F2EBBCB780062725F /* SecureStorage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SecureStorage.m; sourceTree = "<group>"; }; + 7065C6880465E9A8735AA5EF /* Pods-defaults-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.release.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.release.xcconfig"; sourceTree = "<group>"; }; 7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; }; 7A0129D22C6E8B5900F84A97 /* ShareRocketChatRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareRocketChatRN.swift; sourceTree = "<group>"; }; 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; }; 7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Experimental.xcassets; sourceTree = "<group>"; }; 7A14FCF3257FEB59005BDCD4 /* Official.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Official.xcassets; sourceTree = "<group>"; }; 7A610CD127ECE38100B8ABDD /* custom.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = custom.ttf; sourceTree = "<group>"; }; + 7A6B8ACA1953C727CACE14EB /* Pods-defaults-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.debug.xcconfig"; sourceTree = "<group>"; }; 7A8B30742BCD9D3F00146A40 /* SSLPinning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSLPinning.h; sourceTree = "<group>"; }; 7A8B30752BCD9D3F00146A40 /* SSLPinning.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SSLPinning.mm; sourceTree = "<group>"; }; 7AAA749C23043B1D00F1ADE9 /* RocketChatRN-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RocketChatRN-Bridging-Header.h"; sourceTree = "<group>"; }; @@ -626,14 +639,19 @@ 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 7ACFE7D82DDE48760090D9BC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; 7AE10C0528A59530003593CB /* Inter.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Inter.ttf; sourceTree = "<group>"; }; - 7B573F5E14B1C36153C67BB7 /* Pods-defaults-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.release.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.release.xcconfig"; sourceTree = "<group>"; }; - 8596BEE43152ACCF33F41AB6 /* Pods-defaults-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.release.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.release.xcconfig"; sourceTree = "<group>"; }; - 8B02168DA5A28406D0331D30 /* Pods-defaults-RocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.release.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.release.xcconfig"; sourceTree = "<group>"; }; + 9B215A42CFB843397273C7EA /* SecureStorage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SecureStorage.m; sourceTree = "<group>"; }; + 9B215A44CFB843397273C7EC /* MMKVBridge.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = MMKVBridge.mm; path = Shared/RocketChat/MMKVBridge.mm; sourceTree = "<group>"; }; A48B46D72D3FFBD200945489 /* A11yFlowModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = A11yFlowModule.h; sourceTree = "<group>"; }; A48B46D82D3FFBD200945489 /* A11yFlowModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = A11yFlowModule.m; sourceTree = "<group>"; }; + B179038FDD7AAF285047814B /* SecureStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SecureStorage.h; sourceTree = "<group>"; }; B37C79D9BD0742CE936B6982 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + B5DA03EEFD8CEA0E9578CEFA /* Pods_defaults_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_defaults_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BA7E862283664608B3894E34 /* libWatermelonDB.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libWatermelonDB.a; sourceTree = "<group>"; }; - EB54E3717238BA2E5971176E /* Pods-defaults-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.debug.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.debug.xcconfig"; sourceTree = "<group>"; }; + CC5834318D0A8AF03D8124DB /* Pods-defaults-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.debug.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.debug.xcconfig"; sourceTree = "<group>"; }; + CF268DB43E067211CC4AB1D8 /* Pods_defaults_Rocket_Chat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_defaults_Rocket_Chat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E023B58716C64D2BFB8C0681 /* Pods-defaults-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.debug.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.debug.xcconfig"; sourceTree = "<group>"; }; + E06AA2822D8D24C3AA3C8711 /* Pods-defaults-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.release.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.release.xcconfig"; sourceTree = "<group>"; }; + F35C8301F7A5B8286AC64516 /* Pods-defaults-RocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.release.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.release.xcconfig"; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -654,7 +672,7 @@ 7ACD4897222860DE00442C55 /* JavaScriptCore.framework in Frameworks */, 24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */, DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */, - FCC51A05F6D4B29D88600862 /* Pods_defaults_RocketChatRN.framework in Frameworks */, + 8BC28DFD84976599F4DD0E1F /* Pods_defaults_RocketChatRN.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -676,7 +694,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 89240CF9E2591164EDB5E5D5 /* Pods_defaults_NotificationService.framework in Frameworks */, + 0745F30D29A18A45DDDF8568 /* Pods_defaults_NotificationService.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -697,7 +715,7 @@ 7AAB3E3D257E6A6E00707CF6 /* JavaScriptCore.framework in Frameworks */, 7AAB3E3E257E6A6E00707CF6 /* libz.tbd in Frameworks */, 7AAB3E3F257E6A6E00707CF6 /* libWatermelonDB.a in Frameworks */, - BE6FD5939EC2EE9166A93755 /* Pods_defaults_Rocket_Chat.framework in Frameworks */, + 815F9657A87D16E93AD8451E /* Pods_defaults_Rocket_Chat.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -707,6 +725,8 @@ 13B07FAE1A68108700A75B9A /* RocketChatRN */ = { isa = PBXGroup; children = ( + 66C2701E2EBBCB780062725F /* SecureStorage.h */, + 66C2701F2EBBCB780062725F /* SecureStorage.m */, 7ACFE7D82DDE48760090D9BC /* AppDelegate.swift */, A48B46D72D3FFBD200945489 /* A11yFlowModule.h */, A48B46D82D3FFBD200945489 /* A11yFlowModule.m */, @@ -724,6 +744,8 @@ 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */, 1ED00BB02513E04400A1331F /* ReplyNotification.swift */, 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */, + 66C270192EBBCB570062725F /* MMKVKeyManager.h */, + 66C2701A2EBBCB570062725F /* MMKVKeyManager.mm */, ); name = RocketChatRN; sourceTree = "<group>"; @@ -1121,12 +1143,12 @@ 7AC2B09613AA7C3FEBAC9F57 /* Pods */ = { isa = PBXGroup; children = ( - 1B8E154274568748124AD479 /* Pods-defaults-NotificationService.debug.xcconfig */, - 8596BEE43152ACCF33F41AB6 /* Pods-defaults-NotificationService.release.xcconfig */, - EB54E3717238BA2E5971176E /* Pods-defaults-Rocket.Chat.debug.xcconfig */, - 7B573F5E14B1C36153C67BB7 /* Pods-defaults-Rocket.Chat.release.xcconfig */, - 23CCE114AF2A329EBFA536D1 /* Pods-defaults-RocketChatRN.debug.xcconfig */, - 8B02168DA5A28406D0331D30 /* Pods-defaults-RocketChatRN.release.xcconfig */, + 7A6B8ACA1953C727CACE14EB /* Pods-defaults-NotificationService.debug.xcconfig */, + E06AA2822D8D24C3AA3C8711 /* Pods-defaults-NotificationService.release.xcconfig */, + E023B58716C64D2BFB8C0681 /* Pods-defaults-Rocket.Chat.debug.xcconfig */, + 7065C6880465E9A8735AA5EF /* Pods-defaults-Rocket.Chat.release.xcconfig */, + CC5834318D0A8AF03D8124DB /* Pods-defaults-RocketChatRN.debug.xcconfig */, + F35C8301F7A5B8286AC64516 /* Pods-defaults-RocketChatRN.release.xcconfig */, ); path = Pods; sourceTree = "<group>"; @@ -1156,6 +1178,8 @@ B8E79A681F3CCC69005B464F /* Recovered References */, 7AC2B09613AA7C3FEBAC9F57 /* Pods */, 7890E71355E6C0A3288089E7 /* ExpoModulesProviders */, + B179038FDD7AAF285047814B /* SecureStorage.h */, + 9B215A42CFB843397273C7EA /* SecureStorage.m */, ); indentWidth = 4; sourceTree = "<group>"; @@ -1203,6 +1227,7 @@ isa = PBXGroup; children = ( BA7E862283664608B3894E34 /* libWatermelonDB.a */, + 9B215A44CFB843397273C7EC /* MMKVBridge.mm */, ); name = "Recovered References"; sourceTree = "<group>"; @@ -1222,9 +1247,9 @@ 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */, B37C79D9BD0742CE936B6982 /* libc++.tbd */, 06BB44DD4855498082A744AD /* libz.tbd */, - 11BBDDD4BBAEEA60A9ABB37A /* Pods_defaults_NotificationService.framework */, - 13A33C9AA4B7B99630814AB5 /* Pods_defaults_Rocket_Chat.framework */, - 275D1FF97F64974B4E72549D /* Pods_defaults_RocketChatRN.framework */, + B5DA03EEFD8CEA0E9578CEFA /* Pods_defaults_NotificationService.framework */, + CF268DB43E067211CC4AB1D8 /* Pods_defaults_Rocket_Chat.framework */, + 4C9D354D4BED64C03F5586CC /* Pods_defaults_RocketChatRN.framework */, ); name = Frameworks; sourceTree = "<group>"; @@ -1244,7 +1269,7 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RocketChatRN" */; buildPhases = ( - E162B0C32CD33B9B9A1F4361 /* [CP] Check Pods Manifest.lock */, + C0B975AF6ED607297F8F55F4 /* [CP] Check Pods Manifest.lock */, 7AA5C63E23E30D110005C4A7 /* Start Packager */, 589729E8381BA997CD19EF19 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, @@ -1257,8 +1282,8 @@ 7AAE9EB32891A0D20024F559 /* Upload source maps to Bugsnag */, 407D3EDE3DABEE15D27BD87D /* ShellScript */, 9C104B12BEE385F7555E641F /* [Expo] Configure project */, - FB9B77136D1334AB107FD00C /* [CP] Embed Pods Frameworks */, - 17344D2847CBD7141D4AF748 /* [CP] Copy Pods Resources */, + 69EE0EAB4655CCB0698B6026 /* [CP] Embed Pods Frameworks */, + 4EF35507D275D88665224EED /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1326,12 +1351,12 @@ isa = PBXNativeTarget; buildConfigurationList = 1EFEB5A02493B6640072EDC0 /* Build configuration list for PBXNativeTarget "NotificationService" */; buildPhases = ( - AE4FAA0798304640E5A8569E /* [CP] Check Pods Manifest.lock */, + EBDF1B5B8303C6FF72717B0B /* [CP] Check Pods Manifest.lock */, 86A998705576AFA7CE938617 /* [Expo] Configure project */, 1EFEB5912493B6640072EDC0 /* Sources */, 1EFEB5922493B6640072EDC0 /* Frameworks */, 1EFEB5932493B6640072EDC0 /* Resources */, - B0026F317D2C2B79CFC7EF36 /* [CP] Copy Pods Resources */, + B4801301A00C50FA3AD72CF9 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1346,7 +1371,7 @@ isa = PBXNativeTarget; buildConfigurationList = 7AAB3E4F257E6A6E00707CF6 /* Build configuration list for PBXNativeTarget "Rocket.Chat" */; buildPhases = ( - 9B389A140FE9388CC31876E6 /* [CP] Check Pods Manifest.lock */, + C32210C70D1F9214A2DE8E19 /* [CP] Check Pods Manifest.lock */, 7AAB3E13257E6A6E00707CF6 /* Start Packager */, 84028E94C77DEBDD5200728D /* [Expo] Configure project */, 7AAB3E14257E6A6E00707CF6 /* Sources */, @@ -1357,8 +1382,8 @@ 7AAB3E4B257E6A6E00707CF6 /* ShellScript */, 1ED1ECE32B8699DD00F6620C /* Embed Watch Content */, 7A10288726B1D15200E47EF8 /* Upload source maps to Bugsnag */, - A7499040756F25E0CD61079D /* [CP] Embed Pods Frameworks */, - 2F74017C365FD1194B768CF7 /* [CP] Copy Pods Resources */, + F55B2F4877AB3302D8608673 /* [CP] Embed Pods Frameworks */, + 7B5EE97580C4626E59AEA53C /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1532,135 +1557,54 @@ shellPath = /bin/sh; shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 17344D2847CBD7141D4AF748 /* [CP] Copy Pods Resources */ = { + 1E1EA8082326CCE300E22452 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/BugsnagReactNative/Bugsnag.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/react-native-cameraroll/RNCameraRollPrivacyInfo.bundle", ); - name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + ); outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Bugsnag.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreInternal_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCrashlytics_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseInstallations_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCameraRollPrivacyInfo.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"Target architectures: $ARCHS\"\n\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\ndo\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\necho \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\necho $(lipo -info \"$FRAMEWORK_EXECUTABLE_PATH\")\n\nFRAMEWORK_TMP_PATH=\"$FRAMEWORK_EXECUTABLE_PATH-tmp\"\n\n# remove simulator's archs if location is not simulator's directory\ncase \"${TARGET_BUILD_DIR}\" in\n*\"iphonesimulator\")\necho \"No need to remove archs\"\n;;\n*)\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"i386\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"i386\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"i386 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"x86_64\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"x86_64\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"x86_64 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\n;;\nesac\n\necho \"Completed for executable $FRAMEWORK_EXECUTABLE_PATH\"\necho $\n\ndone\n"; }; - 1E1EA8082326CCE300E22452 /* ShellScript */ = { + 407D3EDE3DABEE15D27BD87D /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - ); - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"Target architectures: $ARCHS\"\n\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\ndo\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\necho \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\necho $(lipo -info \"$FRAMEWORK_EXECUTABLE_PATH\")\n\nFRAMEWORK_TMP_PATH=\"$FRAMEWORK_EXECUTABLE_PATH-tmp\"\n\n# remove simulator's archs if location is not simulator's directory\ncase \"${TARGET_BUILD_DIR}\" in\n*\"iphonesimulator\")\necho \"No need to remove archs\"\n;;\n*)\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"i386\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"i386\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"i386 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"x86_64\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"x86_64\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"x86_64 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\n;;\nesac\n\necho \"Completed for executable $FRAMEWORK_EXECUTABLE_PATH\"\necho $\n\ndone\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 2F74017C365FD1194B768CF7 /* [CP] Copy Pods Resources */ = { + 4EF35507D275D88665224EED /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/BugsnagReactNative/Bugsnag.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", @@ -1677,22 +1621,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", @@ -1705,8 +1633,11 @@ name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Bugsnag.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", @@ -1723,22 +1654,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", @@ -1750,45 +1665,45 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 407D3EDE3DABEE15D27BD87D /* ShellScript */ = { + 589729E8381BA997CD19EF19 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-RocketChatRN/expo-configure-project.sh\"\n"; }; - 589729E8381BA997CD19EF19 /* [Expo] Configure project */ = { + 69EE0EAB4655CCB0698B6026 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); - name = "[Expo] Configure project"; - outputFileListPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-RocketChatRN/expo-configure-project.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 7A10288726B1D15200E47EF8 /* Upload source maps to Bugsnag */ = { isa = PBXShellScriptBuildPhase; @@ -1895,26 +1810,83 @@ shellPath = /bin/sh; shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n"; }; - 84028E94C77DEBDD5200728D /* [Expo] Configure project */ = { + 7B5EE97580C4626E59AEA53C /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/BugsnagReactNative/Bugsnag.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/react-native-cameraroll/RNCameraRollPrivacyInfo.bundle", ); - name = "[Expo] Configure project"; - outputFileListPaths = ( - ); + name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Bugsnag.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreInternal_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCrashlytics_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseInstallations_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCameraRollPrivacyInfo.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-Rocket.Chat/expo-configure-project.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - 86A998705576AFA7CE938617 /* [Expo] Configure project */ = { + 84028E94C77DEBDD5200728D /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -1931,29 +1903,26 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-NotificationService/expo-configure-project.sh\"\n"; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-Rocket.Chat/expo-configure-project.sh\"\n"; }; - 9B389A140FE9388CC31876E6 /* [CP] Check Pods Manifest.lock */ = { + 86A998705576AFA7CE938617 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "[Expo] Configure project"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-defaults-Rocket.Chat-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-NotificationService/expo-configure-project.sh\"\n"; }; 9C104B12BEE385F7555E641F /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; @@ -1974,47 +1943,7 @@ shellPath = /bin/sh; shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-NotificationService/expo-configure-project.sh\"\n"; }; - A7499040756F25E0CD61079D /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - AE4FAA0798304640E5A8569E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - B0026F317D2C2B79CFC7EF36 /* [CP] Copy Pods Resources */ = { + B4801301A00C50FA3AD72CF9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -2022,8 +1951,11 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/BugsnagReactNative/Bugsnag.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", @@ -2040,22 +1972,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/RNImageCropPickerPrivacyInfo.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", @@ -2068,8 +1984,11 @@ name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Bugsnag.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", @@ -2086,22 +2005,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNImageCropPickerPrivacyInfo.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", @@ -2116,7 +2019,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService-resources.sh\"\n"; showEnvVarsInLog = 0; }; - E162B0C32CD33B9B9A1F4361 /* [CP] Check Pods Manifest.lock */ = { + C0B975AF6ED607297F8F55F4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -2138,13 +2041,57 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - FB9B77136D1334AB107FD00C /* [CP] Embed Pods Frameworks */ = { + C32210C70D1F9214A2DE8E19 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-defaults-Rocket.Chat-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + EBDF1B5B8303C6FF72717B0B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + F55B2F4877AB3302D8608673 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); name = "[CP] Embed Pods Frameworks"; @@ -2153,7 +2100,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -2168,6 +2115,7 @@ 1E5141182B856673007BE94A /* SSLPinning.swift in Sources */, 1E76CBD825152C870067298C /* Request.swift in Sources */, 1E51411C2B85683C007BE94A /* SSLPinning.m in Sources */, + 66C2701B2EBBCB570062725F /* MMKVKeyManager.mm in Sources */, 1ED00BB12513E04400A1331F /* ReplyNotification.swift in Sources */, 1E76CBC2251529560067298C /* Storage.swift in Sources */, 1E76CBD925152C8C0067298C /* Push.swift in Sources */, @@ -2184,6 +2132,7 @@ 7ACFE7DA2DDE48760090D9BC /* AppDelegate.swift in Sources */, 1E9A71742B59F36E00477BA2 /* ClientSSL.swift in Sources */, A48B46D92D3FFBD200945489 /* A11yFlowModule.m in Sources */, + 3F56D232A9EBA1C9C749F15F /* MMKVBridge.mm in Sources */, 7AACF8AC2C94B28B0082844E /* DecryptedContent.swift in Sources */, 1ED038A52B50900800C007D4 /* Bundle+Extensions.swift in Sources */, 1E76CBC325152A460067298C /* String+Extensions.swift in Sources */, @@ -2204,7 +2153,9 @@ 7A8B30762BCD9D3F00146A40 /* SSLPinning.mm in Sources */, 1E76CBCF25152C310067298C /* NotificationType.swift in Sources */, 1E76CBDA25152C8E0067298C /* SendMessage.swift in Sources */, + 66C270212EBBCB780062725F /* SecureStorage.m in Sources */, 4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */, + A2C6E2DD38F8BEE19BFB2E1D /* SecureStorage.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2416,6 +2367,7 @@ 1E01C8212511301400FEF824 /* PushResponse.swift in Sources */, 1E680ED92512990700C9257A /* Request.swift in Sources */, 1E2F61642512955D00871711 /* HTTPMethod.swift in Sources */, + 66C2701D2EBBCB570062725F /* MMKVKeyManager.mm in Sources */, 1E598AE925151A63002BDFBD /* SendMessage.swift in Sources */, 1E2F61662512958900871711 /* Push.swift in Sources */, 1EFEB5982493B6640072EDC0 /* NotificationService.swift in Sources */, @@ -2424,6 +2376,8 @@ 1E2F615B25128F9A00871711 /* API.swift in Sources */, 1E01C8272511303900FEF824 /* Payload.swift in Sources */, 85160EB6C143E0493FE5F014 /* ExpoModulesProvider.swift in Sources */, + 3F56D232A9EBA1C9C749F15D /* SecureStorage.m in Sources */, + 3F56D232A9EBA1C9C749F15E /* MMKVBridge.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2436,6 +2390,7 @@ 1E5141192B856673007BE94A /* SSLPinning.swift in Sources */, 7AAB3E16257E6A6E00707CF6 /* Request.swift in Sources */, 1E51411D2B85683C007BE94A /* SSLPinning.m in Sources */, + 66C2701C2EBBCB570062725F /* MMKVKeyManager.mm in Sources */, 7AAB3E17257E6A6E00707CF6 /* ReplyNotification.swift in Sources */, 7AAB3E18257E6A6E00707CF6 /* Storage.swift in Sources */, 7AAB3E19257E6A6E00707CF6 /* Push.swift in Sources */, @@ -2452,6 +2407,7 @@ 7ACFE7D92DDE48760090D9BC /* AppDelegate.swift in Sources */, 1E9A71752B59F36E00477BA2 /* ClientSSL.swift in Sources */, A48B46DA2D3FFBD200945489 /* A11yFlowModule.m in Sources */, + 3F56D232A9EBA1C9C749F160 /* MMKVBridge.mm in Sources */, 7AACF8AE2C94B28B0082844E /* DecryptedContent.swift in Sources */, 1ED038A72B50900800C007D4 /* Bundle+Extensions.swift in Sources */, 7AAB3E26257E6A6E00707CF6 /* String+Extensions.swift in Sources */, @@ -2472,7 +2428,9 @@ 7A8B30772BCD9D3F00146A40 /* SSLPinning.mm in Sources */, 7AAB3E30257E6A6E00707CF6 /* NotificationType.swift in Sources */, 7AAB3E31257E6A6E00707CF6 /* SendMessage.swift in Sources */, + 66C270202EBBCB780062725F /* SecureStorage.m in Sources */, BC404914E86821389EEB543D /* ExpoModulesProvider.swift in Sources */, + 79D8C97F8CE2EC1B6882826B /* SecureStorage.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2534,7 +2492,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 23CCE114AF2A329EBFA536D1 /* Pods-defaults-RocketChatRN.debug.xcconfig */; + baseConfigurationReference = CC5834318D0A8AF03D8124DB /* Pods-defaults-RocketChatRN.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -2554,11 +2512,15 @@ "$(inherited)", "$(PROJECT_DIR)", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FORCE_POSIX=1", + ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../../../react-native/React/**", "$(SRCROOT)/../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/**", - "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", + "$(SRCROOT)/../node_modules/react-native-mmkv/MMKV/Core/**", ); INFOPLIST_FILE = RocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -2595,7 +2557,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8B02168DA5A28406D0331D30 /* Pods-defaults-RocketChatRN.release.xcconfig */; + baseConfigurationReference = F35C8301F7A5B8286AC64516 /* Pods-defaults-RocketChatRN.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -2616,11 +2578,15 @@ "$(inherited)", "$(PROJECT_DIR)", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FORCE_POSIX=1", + ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../../../react-native/React/**", "$(SRCROOT)/../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/**", - "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", + "$(SRCROOT)/../node_modules/react-native-mmkv/MMKV/Core/**", ); INFOPLIST_FILE = RocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -2699,7 +2665,6 @@ "$(SRCROOT)/../node_modules/rn-extensions-share/ios/**", "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", "$PODS_CONFIGURATION_BUILD_DIR/Firebase", - "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -2776,7 +2741,6 @@ "$(SRCROOT)/../node_modules/rn-extensions-share/ios/**", "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", "$PODS_CONFIGURATION_BUILD_DIR/Firebase", - "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -3008,7 +2972,7 @@ }; 1EFEB59D2493B6640072EDC0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1B8E154274568748124AD479 /* Pods-defaults-NotificationService.debug.xcconfig */; + baseConfigurationReference = 7A6B8ACA1953C727CACE14EB /* Pods-defaults-NotificationService.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(EMBEDDED_CONTENT_CONTAINS_SWIFT)"; CLANG_ANALYZER_NONNULL = YES; @@ -3027,6 +2991,14 @@ ENABLE_USER_SCRIPT_SANDBOXING = NO; EXCLUDED_ARCHS = ""; GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FORCE_POSIX=1", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); INFOPLIST_FILE = NotificationService/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( @@ -3052,7 +3024,7 @@ }; 1EFEB59E2493B6640072EDC0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8596BEE43152ACCF33F41AB6 /* Pods-defaults-NotificationService.release.xcconfig */; + baseConfigurationReference = E06AA2822D8D24C3AA3C8711 /* Pods-defaults-NotificationService.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(EMBEDDED_CONTENT_CONTAINS_SWIFT)"; CLANG_ANALYZER_NONNULL = YES; @@ -3072,6 +3044,14 @@ ENABLE_USER_SCRIPT_SANDBOXING = NO; EXCLUDED_ARCHS = ""; GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FORCE_POSIX=1", + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)", + ); INFOPLIST_FILE = NotificationService/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; LD_RUNPATH_SEARCH_PATHS = ( @@ -3095,7 +3075,7 @@ }; 7AAB3E50257E6A6E00707CF6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB54E3717238BA2E5971176E /* Pods-defaults-Rocket.Chat.debug.xcconfig */; + baseConfigurationReference = E023B58716C64D2BFB8C0681 /* Pods-defaults-Rocket.Chat.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -3115,11 +3095,15 @@ "$(inherited)", "$(PROJECT_DIR)", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FORCE_POSIX=1", + ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../../../react-native/React/**", "$(SRCROOT)/../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/**", - "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", + "$(SRCROOT)/../node_modules/react-native-mmkv/MMKV/Core/**", ); INFOPLIST_FILE = RocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; @@ -3156,7 +3140,7 @@ }; 7AAB3E51257E6A6E00707CF6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B573F5E14B1C36153C67BB7 /* Pods-defaults-Rocket.Chat.release.xcconfig */; + baseConfigurationReference = 7065C6880465E9A8735AA5EF /* Pods-defaults-Rocket.Chat.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -3175,11 +3159,15 @@ "$(inherited)", "$(PROJECT_DIR)", ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FORCE_POSIX=1", + ); HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../../../react-native/React/**", "$(SRCROOT)/../node_modules/@nozbe/watermelondb/native/ios/WatermelonDB/SupportingFiles/**", - "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", + "$(SRCROOT)/../node_modules/react-native-mmkv/MMKV/Core/**", ); INFOPLIST_FILE = RocketChatRN/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; diff --git a/ios/SSLPinning.mm b/ios/SSLPinning.mm index 8037b88b4ed..ef863c3fd22 100644 --- a/ios/SSLPinning.mm +++ b/ios/SSLPinning.mm @@ -8,13 +8,26 @@ #import <objc/runtime.h> #import "SSLPinning.h" -#import <MMKV/MMKV.h> +#import "Shared/RocketChat/MMKVBridge.h" #import <SDWebImage/SDWebImageDownloader.h> #import "SecureStorage.h" #import "SRWebSocket.h" #import "EXSessionTaskDispatcher.h" @implementation Challenge : NSObject + +// Helper method to get MMKVBridge instance ++(MMKVBridge *)getMMKVInstance { + SecureStorage *secureStorage = [[SecureStorage alloc] init]; + NSString *hexKey = [self stringToHex:@"com.MMKV.default"]; + NSString *key = [secureStorage getSecureKey:hexKey]; + + NSData *cryptKey = (key && [key length] > 0) ? [key dataUsingEncoding:NSUTF8StringEncoding] : nil; + MMKVBridge *mmkvBridge = [[MMKVBridge alloc] initWithID:@"default" cryptKey:cryptKey rootPath:nil]; + + return mmkvBridge; +} + +(NSURLCredential *)getUrlCredential:(NSURLAuthenticationChallenge *)challenge path:(NSString *)path password:(NSString *)password { NSString *authMethod = [[challenge protectionSpace] authenticationMethod]; @@ -84,23 +97,17 @@ +(void)runChallenge:(NSURLSession *)session completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { NSString *host = challenge.protectionSpace.host; - - // Read the clientSSL info from MMKV - __block NSString *clientSSL; - SecureStorage *secureStorage = [[SecureStorage alloc] init]; - - // https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/src/loader.js#L31 - NSString *key = [secureStorage getSecureKey:[self stringToHex:@"com.MMKV.default"]]; NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; - if (key == NULL) { + // Read the clientSSL info from MMKV using MMKVBridge + MMKVBridge *mmkvBridge = [self getMMKVInstance]; + + if (!mmkvBridge) { return completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, credential); } - NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; - MMKV *mmkv = [MMKV mmkvWithID:@"default" cryptKey:cryptKey mode:MMKVMultiProcess]; - clientSSL = [mmkv getStringForKey:host]; - + NSString *clientSSL = [mmkvBridge stringForKey:host]; + if (clientSSL) { NSData *data = [clientSSL dataUsingEncoding:NSUTF8StringEncoding]; id dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; @@ -173,20 +180,16 @@ +(void)load - (void)xxx_updateSecureStreamOptions { [self xxx_updateSecureStreamOptions]; - // Read the clientSSL info from MMKV + // Read the clientSSL info from MMKV using MMKVBridge NSMutableDictionary<NSString *, id> *SSLOptions = [NSMutableDictionary new]; - __block NSString *clientSSL; - SecureStorage *secureStorage = [[SecureStorage alloc] init]; - - // https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/src/loader.js#L31 - NSString *key = [secureStorage getSecureKey:[Challenge stringToHex:@"com.MMKV.default"]]; - - if (key != NULL) { - NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; - MMKV *mmkv = [MMKV mmkvWithID:@"default" cryptKey:cryptKey mode:MMKVMultiProcess]; + + MMKVBridge *mmkvBridge = [Challenge getMMKVInstance]; + + if (mmkvBridge) { NSURLRequest *_urlRequest = [self valueForKey:@"_urlRequest"]; - - clientSSL = [mmkv getStringForKey:_urlRequest.URL.host]; + NSString *host = _urlRequest.URL.host; + NSString *clientSSL = [mmkvBridge stringForKey:host]; + if (clientSSL) { NSData *data = [clientSSL dataUsingEncoding:NSUTF8StringEncoding]; id dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; diff --git a/ios/SSLPinning/SSLPinning.swift b/ios/SSLPinning/SSLPinning.swift index d8250a5dbf8..549b23d1927 100644 --- a/ios/SSLPinning/SSLPinning.swift +++ b/ios/SSLPinning/SSLPinning.swift @@ -6,7 +6,7 @@ final class SSLPinning: NSObject { } private let database = Database(name: "default") - private let mmkv = MMKV.build() + private let mmkv = MMKVBridge.build() @objc func setCertificate(_ server: String, _ path: String, _ password: String) { guard FileManager.default.fileExists(atPath: path) else { @@ -17,8 +17,8 @@ final class SSLPinning: NSObject { return } - mmkv.set(Data(referencing: certificate), forKey: Constants.certificateKey.appending(server)) - mmkv.set(password, forKey: Constants.passwordKey.appending(server)) + mmkv.setData(Data(referencing: certificate), forKey: Constants.certificateKey.appending(server)) + mmkv.setString(password, forKey: Constants.passwordKey.appending(server)) } @objc func migrate() { diff --git a/ios/SecureStorage.h b/ios/SecureStorage.h new file mode 100644 index 00000000000..e2dd7f61e5a --- /dev/null +++ b/ios/SecureStorage.h @@ -0,0 +1,27 @@ +#import <React/RCTBridgeModule.h> +#import <Foundation/Foundation.h> +#import <React/RCTBridgeModule.h> + +@interface SecureStorage: NSObject <RCTBridgeModule> + +- (void) setSecureKey: (nonnull NSString *)key value:(nonnull NSString *)value + options: (nonnull NSDictionary *)options; +- (nullable NSString *) getSecureKey:(nonnull NSString *)key; +- (BOOL) deleteSecureKey:(nonnull NSString *)key; + +- (nonnull NSString *)searchKeychainCopyMatching:(nonnull NSString *)identifier; + +- (nonnull NSMutableDictionary *)newSearchDictionary:(nonnull NSString *)identifier; + +- (BOOL)createKeychainValue:(nonnull NSString *)value forIdentifier:(nonnull NSString *)identifier options: (NSDictionary * __nullable)options; + +- (BOOL)updateKeychainValue:(nonnull NSString *)password forIdentifier:(nonnull NSString *)identifier options:(NSDictionary * __nullable)options; + +- (BOOL)deleteKeychainValue:(nonnull NSString *)identifier; + +- (void)handleAppUninstallation; + +// Returns the MMKV encryption key for use by JavaScript +- (nullable NSString *)getMMKVEncryptionKey; + +@end diff --git a/ios/SecureStorage.m b/ios/SecureStorage.m new file mode 100644 index 00000000000..652265ba377 --- /dev/null +++ b/ios/SecureStorage.m @@ -0,0 +1,210 @@ +#import <React/RCTBridgeModule.h> +#import "SecureStorage.h" +#import <UIKit/UIKit.h> + +@implementation SecureStorage : NSObject + +RCT_EXPORT_MODULE(SecureStorage); + ++ (BOOL)requiresMainQueueSetup +{ + return NO; +} + +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getSecureKeySync:(NSString *)key) +{ + NSString *value = [self getSecureKey:key]; + return value ? value : [NSNull null]; +} + +NSString *serviceName = nil; + +- (void) setSecureKey: (NSString *)key value:(NSString *)value + options: (NSDictionary *)options +{ + @try { + [self handleAppUninstallation]; + BOOL status = [self createKeychainValue: value forIdentifier: key options: options]; + if (!status) { + [self updateKeychainValue: value forIdentifier: key options: options]; + } + } + @catch (NSException *exception) { + // Handle exception + } +} + +- (NSString *) getSecureKey:(NSString *)key +{ + @try { + [self handleAppUninstallation]; + NSString *value = [self searchKeychainCopyMatching:key]; + if (value == nil) { + return NULL; + } else { + return value; + } + } + @catch (NSException *exception) { + return NULL; + } +} + +- (BOOL) deleteSecureKey:(NSString *)key +{ + @try { + return [self deleteKeychainValue:key]; + } + @catch (NSException *exception) { + return NO; + } +} + +- (NSMutableDictionary *)newSearchDictionary:(NSString *)identifier { + NSMutableDictionary *searchDictionary = [[NSMutableDictionary alloc] init]; + + // this value is shared by main app and extensions, so, is the best to be used here + serviceName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"]; + + if(serviceName == nil){ + serviceName = [[NSBundle mainBundle] bundleIdentifier]; + } + + [searchDictionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; + + NSData *encodedIdentifier = [identifier dataUsingEncoding:NSUTF8StringEncoding]; + [searchDictionary setObject:encodedIdentifier forKey:(id)kSecAttrGeneric]; + [searchDictionary setObject:encodedIdentifier forKey:(id)kSecAttrAccount]; + [searchDictionary setObject:serviceName forKey:(id)kSecAttrService]; + + return searchDictionary; +} + +- (NSString *)searchKeychainCopyMatching:(NSString *)identifier { + NSMutableDictionary *searchDictionary = [self newSearchDictionary:identifier]; + + // Add search attributes + [searchDictionary setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; + + // Add search return types + [searchDictionary setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; + + NSDictionary *found = nil; + CFTypeRef result = NULL; + OSStatus status = SecItemCopyMatching((CFDictionaryRef)searchDictionary, + (CFTypeRef *)&result); + + NSString *value = nil; + found = (__bridge NSDictionary*)(result); + if (found) { + value = [[NSString alloc] initWithData:found encoding:NSUTF8StringEncoding]; + } + return value; +} + +- (BOOL)createKeychainValue:(NSString *)value forIdentifier:(NSString *)identifier options: (NSDictionary * __nullable)options { + CFStringRef accessibleVal = _accessibleValue(options); + NSMutableDictionary *dictionary = [self newSearchDictionary:identifier]; + + NSData *valueData = [value dataUsingEncoding:NSUTF8StringEncoding]; + [dictionary setObject:valueData forKey:(id)kSecValueData]; + dictionary[(__bridge NSString *)kSecAttrAccessible] = (__bridge id)accessibleVal; + + OSStatus status = SecItemAdd((CFDictionaryRef)dictionary, NULL); + + if (status == errSecSuccess) { + return YES; + } + return NO; +} + +- (BOOL)updateKeychainValue:(NSString *)password forIdentifier:(NSString *)identifier options:(NSDictionary * __nullable)options { + CFStringRef accessibleVal = _accessibleValue(options); + NSMutableDictionary *searchDictionary = [self newSearchDictionary:identifier]; + NSMutableDictionary *updateDictionary = [[NSMutableDictionary alloc] init]; + NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding]; + [updateDictionary setObject:passwordData forKey:(id)kSecValueData]; + updateDictionary[(__bridge NSString *)kSecAttrAccessible] = (__bridge id)accessibleVal; + OSStatus status = SecItemUpdate((CFDictionaryRef)searchDictionary, + (CFDictionaryRef)updateDictionary); + + if (status == errSecSuccess) { + return YES; + } + return NO; +} + +- (BOOL)deleteKeychainValue:(NSString *)identifier { + NSMutableDictionary *searchDictionary = [self newSearchDictionary:identifier]; + OSStatus status = SecItemDelete((CFDictionaryRef)searchDictionary); + if (status == errSecSuccess) { + return YES; + } + return NO; +} + +- (void)handleAppUninstallation +{ + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +CFStringRef _accessibleValue(NSDictionary *options) +{ + if (options && options[@"accessible"] != nil) { + NSDictionary *keyMap = @{ + @"AccessibleWhenUnlocked": (__bridge NSString *)kSecAttrAccessibleWhenUnlocked, + @"AccessibleAfterFirstUnlock": (__bridge NSString *)kSecAttrAccessibleAfterFirstUnlock, + @"AccessibleAlways": (__bridge NSString *)kSecAttrAccessibleAlways, + @"AccessibleWhenPasscodeSetThisDeviceOnly": (__bridge NSString *)kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, + @"AccessibleWhenUnlockedThisDeviceOnly": (__bridge NSString *)kSecAttrAccessibleWhenUnlockedThisDeviceOnly, + @"AccessibleAfterFirstUnlockThisDeviceOnly": (__bridge NSString *)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, + @"AccessibleAlwaysThisDeviceOnly": (__bridge NSString *)kSecAttrAccessibleAlwaysThisDeviceOnly + }; + + NSString *result = keyMap[options[@"accessible"]]; + if (result) { + return (__bridge CFStringRef)result; + } + } + return kSecAttrAccessibleAfterFirstUnlock; +} + +// Helper function to convert string to hex (same as react-native-mmkv-storage) +NSString* toHex(NSString *input) { + NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding]; + NSMutableString *hexString = [NSMutableString stringWithCapacity:data.length * 2]; + const unsigned char *bytes = data.bytes; + for (NSUInteger i = 0; i < data.length; i++) { + [hexString appendFormat:@"%02x", bytes[i]]; + } + return hexString; +} + +/** + * Synchronous method to get the MMKV encryption key. + * - For existing users: returns the key stored in Keychain + * - For fresh installs: generates a new key, stores it, and returns it + * Used by JavaScript to initialize MMKV with the same encryption key as native code. + */ +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getMMKVEncryptionKey) +{ + @try { + NSString *alias = toHex(@"com.MMKV.default"); + NSString *key = [self getSecureKey:alias]; + + if (key == nil || key.length == 0) { + // Fresh install - generate a new key + key = [[NSUUID UUID] UUIDString]; + [self setSecureKey:alias value:key options:nil]; + NSLog(@"[SecureStorage] Generated new MMKV encryption key"); + } + + return key; + } + @catch (NSException *exception) { + NSLog(@"[SecureStorage] Error getting MMKV encryption key: %@", exception.reason); + return [NSNull null]; + } +} + +@end diff --git a/ios/Shared/Models/NotificationType.swift b/ios/Shared/Models/NotificationType.swift index 95e41bed78c..0e769aa0910 100644 --- a/ios/Shared/Models/NotificationType.swift +++ b/ios/Shared/Models/NotificationType.swift @@ -11,4 +11,5 @@ import Foundation enum NotificationType: String, Codable { case message = "message" case messageIdOnly = "message-id-only" + case videoconf = "videoconf" } diff --git a/ios/Shared/Models/Payload.swift b/ios/Shared/Models/Payload.swift index 124ccf612e6..2a91f3a1b38 100644 --- a/ios/Shared/Models/Payload.swift +++ b/ios/Shared/Models/Payload.swift @@ -8,12 +8,17 @@ import Foundation +struct Caller: Codable { + let _id: String? + let name: String? +} + struct Payload: Codable { let host: String let rid: String? let type: RoomType? let sender: Sender? - let messageId: String + let messageId: String? let notificationType: NotificationType? let name: String? let messageType: MessageType? @@ -21,4 +26,9 @@ struct Payload: Codable { let senderName: String? let tmid: String? let content: EncryptedContent? + + // Video conference fields + let caller: Caller? + let callId: String? + let status: Int? } diff --git a/ios/Shared/RocketChat/API/Request.swift b/ios/Shared/RocketChat/API/Request.swift index a1f6a728c57..97c54bf8574 100644 --- a/ios/Shared/RocketChat/API/Request.swift +++ b/ios/Shared/RocketChat/API/Request.swift @@ -55,6 +55,7 @@ extension Request { request.httpMethod = method.rawValue request.httpBody = body() request.addValue(contentType, forHTTPHeaderField: "Content-Type") + request.addValue(userAgent, forHTTPHeaderField: "User-Agent") if let userId = api.credentials?.userId { request.addValue(userId, forHTTPHeaderField: "x-user-id") @@ -69,4 +70,14 @@ extension Request { return request } + + private var userAgent: String { + let osVersion = ProcessInfo.processInfo.operatingSystemVersion + let systemVersion = "\(osVersion.majorVersion).\(osVersion.minorVersion)" + + let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "unknown" + let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "unknown" + + return "RC Mobile; ios \(systemVersion); v\(appVersion) (\(buildNumber))" + } } diff --git a/ios/Shared/RocketChat/ClientSSL.swift b/ios/Shared/RocketChat/ClientSSL.swift index 52d9f842d71..5b6aac67b96 100644 --- a/ios/Shared/RocketChat/ClientSSL.swift +++ b/ios/Shared/RocketChat/ClientSSL.swift @@ -5,7 +5,7 @@ struct ClientSSL: Codable { let password: String } -extension MMKV { +extension MMKVBridge { func clientSSL(for url: URL) -> ClientSSL? { let server = url.absoluteString.removeTrailingSlash() let host = url.host ?? "" diff --git a/ios/Shared/RocketChat/MMKV.swift b/ios/Shared/RocketChat/MMKV.swift index 1359270592d..f825b4d2cfc 100644 --- a/ios/Shared/RocketChat/MMKV.swift +++ b/ios/Shared/RocketChat/MMKV.swift @@ -1,24 +1,27 @@ import Foundation -extension MMKV { - static func build() -> MMKV { +extension MMKVBridge { + static func build() -> MMKVBridge { let password = SecureStorage().getSecureKey("com.MMKV.default".toHex()) let groupDir = FileManager.default.groupDir() - MMKV.initialize(rootDir: nil, groupDir: groupDir, logLevel: MMKVLogLevel.info) - - guard let mmkv = MMKV(mmapID: "default", cryptKey: password?.data(using: .utf8), mode: MMKVMode.multiProcess) else { - fatalError("Could not initialize MMKV instance.") + var mmkvPath: String? + if !groupDir.isEmpty { + mmkvPath = "\(groupDir)/mmkv" + // Ensure the directory exists + if let path = mmkvPath { + try? FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil) + } } - return mmkv + let cryptKey = password?.data(using: .utf8) + return MMKVBridge(id: "default", cryptKey: cryptKey, rootPath: mmkvPath) } func userToken(for userId: String) -> String? { guard let userToken = string(forKey: "reactnativemeteor_usertoken-\(userId)") else { return nil } - return userToken } @@ -26,7 +29,6 @@ extension MMKV { guard let userId = string(forKey: "reactnativemeteor_usertoken-\(server)") else { return nil } - return userId } @@ -34,7 +36,6 @@ extension MMKV { guard let privateKey = string(forKey: "\(server)-RC_E2E_PRIVATE_KEY") else { return nil } - return privateKey } } diff --git a/ios/Shared/RocketChat/MMKVBridge.h b/ios/Shared/RocketChat/MMKVBridge.h new file mode 100644 index 00000000000..1c4cf510cd4 --- /dev/null +++ b/ios/Shared/RocketChat/MMKVBridge.h @@ -0,0 +1,29 @@ +// +// MMKVBridge.h +// RocketChatRN +// +// Bridge to access react-native-mmkv from Swift +// + +#import <Foundation/Foundation.h> + +NS_ASSUME_NONNULL_BEGIN + +@interface MMKVBridge : NSObject + +- (instancetype)initWithID:(NSString *)mmapID + cryptKey:(nullable NSData *)cryptKey + rootPath:(nullable NSString *)rootPath; + +- (nullable NSString *)stringForKey:(NSString *)key; +- (BOOL)setString:(NSString *)value forKey:(NSString *)key; +- (nullable NSData *)dataForKey:(NSString *)key; +- (BOOL)setData:(NSData *)value forKey:(NSString *)key; +- (void)removeValueForKey:(NSString *)key; +- (NSArray<NSString *> *)allKeys; +- (NSUInteger)count; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/ios/Shared/RocketChat/MMKVBridge.mm b/ios/Shared/RocketChat/MMKVBridge.mm new file mode 100644 index 00000000000..eb9e8e64872 --- /dev/null +++ b/ios/Shared/RocketChat/MMKVBridge.mm @@ -0,0 +1,112 @@ +// +// MMKVBridge.mm +// RocketChatRN +// +// Bridge to access react-native-mmkv from Swift +// Requires FORCE_POSIX=1 preprocessor definition +// + +#import "MMKVBridge.h" +#import "MMKV.h" +#import <string> + +@interface MMKVBridge() +@property (nonatomic, assign) MMKV *mmkvInstance; +@end + +@implementation MMKVBridge + +- (instancetype)initWithID:(NSString *)mmapID + cryptKey:(nullable NSData *)cryptKey + rootPath:(nullable NSString *)rootPath { + self = [super init]; + if (self) { + // Initialize MMKV if needed + if (rootPath) { + std::string rootPathStr = [rootPath UTF8String]; + MMKV::initializeMMKV(rootPathStr); + } + + std::string mmapIDStr = [mmapID UTF8String]; + + if (cryptKey && [cryptKey length] > 0) { + std::string cryptKeyStr((const char *)[cryptKey bytes], [cryptKey length]); + _mmkvInstance = MMKV::mmkvWithID(mmapIDStr, MMKV_MULTI_PROCESS, &cryptKeyStr); + } else { + _mmkvInstance = MMKV::mmkvWithID(mmapIDStr, MMKV_MULTI_PROCESS); + } + } + return self; +} + +- (nullable NSString *)stringForKey:(NSString *)key { + if (!_mmkvInstance) return nil; + + std::string keyStr = [key UTF8String]; + std::string valueStr; + bool hasValue = _mmkvInstance->getString(keyStr, valueStr); + + if (hasValue && !valueStr.empty()) { + return [NSString stringWithUTF8String:valueStr.c_str()]; + } + + return nil; +} + +- (BOOL)setString:(NSString *)value forKey:(NSString *)key { + if (!_mmkvInstance) return NO; + + std::string keyStr = [key UTF8String]; + std::string valueStr = [value UTF8String]; + + return _mmkvInstance->set(valueStr, keyStr); +} + +- (nullable NSData *)dataForKey:(NSString *)key { + if (!_mmkvInstance) return nil; + + std::string keyStr = [key UTF8String]; + auto buffer = _mmkvInstance->getBytes(keyStr); + + if (buffer.length() > 0) { + return [NSData dataWithBytes:buffer.getPtr() length:buffer.length()]; + } + + return nil; +} + +- (BOOL)setData:(NSData *)value forKey:(NSString *)key { + if (!_mmkvInstance) return NO; + + std::string keyStr = [key UTF8String]; + mmkv::MMBuffer buffer((void *)[value bytes], (size_t)[value length], mmkv::MMBufferNoCopy); + + return _mmkvInstance->set(buffer, keyStr); +} + +- (void)removeValueForKey:(NSString *)key { + if (!_mmkvInstance) return; + + std::string keyStr = [key UTF8String]; + _mmkvInstance->removeValueForKey(keyStr); +} + +- (NSArray<NSString *> *)allKeys { + if (!_mmkvInstance) return @[]; + + auto cppKeys = _mmkvInstance->allKeys(); + NSMutableArray<NSString *> *keys = [NSMutableArray arrayWithCapacity:cppKeys.size()]; + + for (const auto& key : cppKeys) { + [keys addObject:[NSString stringWithUTF8String:key.c_str()]]; + } + + return keys; +} + +- (NSUInteger)count { + if (!_mmkvInstance) return 0; + return _mmkvInstance->count(); +} + +@end diff --git a/ios/Shared/RocketChat/Storage.swift b/ios/Shared/RocketChat/Storage.swift index 6793ab5c9df..63ce28eeef3 100644 --- a/ios/Shared/RocketChat/Storage.swift +++ b/ios/Shared/RocketChat/Storage.swift @@ -1,5 +1,4 @@ import Foundation -import Security struct Credentials { let userId: String @@ -7,41 +6,16 @@ struct Credentials { } final class Storage { - private let mmkv = MMKV.build() - - private var appGroupIdentifier: String? { - return Bundle.main.object(forInfoDictionaryKey: "AppGroup") as? String - } + private let mmkv = MMKVBridge.build() func getCredentials(server: String) -> Credentials? { - guard let appGroup = appGroupIdentifier else { - return nil - } - - let query: [String: Any] = [ - kSecClass as String: kSecClassInternetPassword, - kSecAttrServer as String: server, - kSecAttrAccessGroup as String: appGroup, - kSecMatchLimit as String: kSecMatchLimitOne, - kSecReturnAttributes as String: true, - kSecReturnData as String: true - ] - - var item: CFTypeRef? - let status = SecItemCopyMatching(query as CFDictionary, &item) - - guard status == errSecSuccess else { - return nil - } - - guard let existingItem = item as? [String: Any], - let account = existingItem[kSecAttrAccount as String] as? String, - let passwordData = existingItem[kSecValueData as String] as? Data, - let password = String(data: passwordData, encoding: .utf8) else { + // Read credentials from MMKV (shared via app group) + // Credentials are stored during login in React Native + guard let userId = mmkv.userId(for: server), + let userToken = mmkv.userToken(for: userId) else { return nil } - - return .init(userId: account, userToken: password) + return Credentials(userId: userId, userToken: userToken) } func getPrivateKey(server: String) -> String? { diff --git a/ios/Watch/WatchConnection.swift b/ios/Watch/WatchConnection.swift index 311d8c4c898..4e7069fff6e 100644 --- a/ios/Watch/WatchConnection.swift +++ b/ios/Watch/WatchConnection.swift @@ -4,7 +4,7 @@ import WatchConnectivity @objc final class WatchConnection: NSObject { private let database = Database(name: "default") - private let mmkv = MMKV.build() + private let mmkv = MMKVBridge.build() private let session: WCSession @objc init(session: WCSession) { diff --git a/ios/custom.ttf b/ios/custom.ttf index 410ec49c029..b0758f2fa60 100644 Binary files a/ios/custom.ttf and b/ios/custom.ttf differ diff --git a/ios/fastlane/Fastfile b/ios/fastlane/Fastfile index f8df411c23d..80a43c7f587 100644 --- a/ios/fastlane/Fastfile +++ b/ios/fastlane/Fastfile @@ -21,7 +21,9 @@ platform :ios do create_keychain( name: ENV["MATCH_KEYCHAIN_NAME"], password: ENV["MATCH_KEYCHAIN_PASSWORD"], - timeout: 1200 + timeout: 0, + lock_when_sleeps: false, + unlock: true ) end @@ -54,11 +56,16 @@ platform :ios do key_filepath: 'fastlane/app_store_connect_api_key.p8', in_house: false ) - match(type: "appstore") - get_provisioning_profile(app_identifier: "chat.rocket.reactnative.ShareExtension") - get_provisioning_profile(app_identifier: "chat.rocket.reactnative.NotificationService") - get_provisioning_profile(app_identifier: "chat.rocket.reactnative.watchkitapp") + match(type: "appstore", platform: "ios") + get_provisioning_profile(app_identifier: "chat.rocket.reactnative.ShareExtension", platform: "ios") + get_provisioning_profile(app_identifier: "chat.rocket.reactnative.NotificationService", platform: "ios") + get_provisioning_profile(app_identifier: "chat.rocket.reactnative.watchkitapp", platform: "ios") # pem(api_key: api_key) # still uses Spaceship http://docs.fastlane.tools/actions/pem/#how-does-it-work + # Allow codesign to access keys without prompting + keychain_path = "~/Library/Keychains/#{ENV['MATCH_KEYCHAIN_NAME']}-db" + sh "security unlock-keychain -p \"#{ENV['MATCH_KEYCHAIN_PASSWORD']}\" #{keychain_path}" + sh "security set-keychain-settings -lut 3600 #{keychain_path}" + sh "security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k \"#{ENV['MATCH_KEYCHAIN_PASSWORD']}\" #{keychain_path}" gym( scheme: "RocketChatRN", workspace: "RocketChatRN.xcworkspace", @@ -72,11 +79,18 @@ platform :ios do match( type: "appstore", + platform: "ios", app_identifier: ["chat.rocket.ios", "chat.rocket.ios.NotificationService", "chat.rocket.ios.Rocket-Chat-ShareExtension", "chat.rocket.ios.watchkitapp"], readonly: true, output_path: './' ) + # Allow codesign to access keys without prompting + keychain_path = "~/Library/Keychains/#{ENV['MATCH_KEYCHAIN_NAME']}-db" + sh "security unlock-keychain -p \"#{ENV['MATCH_KEYCHAIN_PASSWORD']}\" #{keychain_path}" + sh "security set-keychain-settings -lut 3600 #{keychain_path}" + sh "security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k \"#{ENV['MATCH_KEYCHAIN_PASSWORD']}\" #{keychain_path} || true" + update_code_signing_settings( profile_name: "match AppStore chat.rocket.ios.NotificationService", build_configurations: "Release", @@ -122,7 +136,7 @@ platform :ios do build_path: "./fastlane/build", configuration: "Release", derived_data_path: "./fastlane/derived_data", - xcargs: "-parallelizeTargets -jobs 4" + xcargs: "-parallelizeTargets -jobs 4 ARCHS=arm64" ) end diff --git a/jest.setup.js b/jest.setup.js index 6374b2beb62..774f02d2527 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -136,18 +136,23 @@ jest.mock('@react-navigation/native', () => { }; }); -jest.mock('react-native-notifications', () => ({ - Notifications: { - getInitialNotification: jest.fn(() => Promise.resolve()), - registerRemoteNotifications: jest.fn(), - events: () => ({ - registerRemoteNotificationsRegistered: jest.fn(), - registerRemoteNotificationsRegistrationFailed: jest.fn(), - registerNotificationReceivedForeground: jest.fn(), - registerNotificationReceivedBackground: jest.fn(), - registerNotificationOpened: jest.fn() - }) - } +jest.mock('expo-notifications', () => ({ + getDevicePushTokenAsync: jest.fn(() => Promise.resolve({ data: 'mock-token' })), + getPermissionsAsync: jest.fn(() => Promise.resolve({ status: 'granted' })), + requestPermissionsAsync: jest.fn(() => Promise.resolve({ status: 'granted' })), + setBadgeCountAsync: jest.fn(() => Promise.resolve(true)), + dismissAllNotificationsAsync: jest.fn(() => Promise.resolve()), + setNotificationHandler: jest.fn(), + setNotificationCategoryAsync: jest.fn(() => Promise.resolve()), + addNotificationReceivedListener: jest.fn(() => ({ remove: jest.fn() })), + addNotificationResponseReceivedListener: jest.fn(() => ({ remove: jest.fn() })), + addPushTokenListener: jest.fn(() => ({ remove: jest.fn() })), + getLastNotificationResponse: jest.fn(() => null), + DEFAULT_ACTION_IDENTIFIER: 'expo.modules.notifications.actions.DEFAULT' +})); + +jest.mock('expo-device', () => ({ + isDevice: true })); jest.mock('@discord/bottom-sheet', () => { diff --git a/metro.config.js b/metro.config.js index 5cd379b3805..234dd67481b 100644 --- a/metro.config.js +++ b/metro.config.js @@ -12,7 +12,9 @@ const config = { unstable_allowRequireContext: true }, resolver: { - sourceExts: process.env.RUNNING_E2E_TESTS ? ['mock.ts', ...sourceExts] : sourceExts + // When running E2E tests, prioritize .mock.ts files for app code + // Note: react-native-mmkv's internal mock file is disabled via patch-package + sourceExts: process.env.RUNNING_E2E_TESTS === 'true' ? ['mock.ts', ...sourceExts] : sourceExts } }; diff --git a/package.json b/package.json index 0c619384543..2a8e7f22435 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "dependencies": { "@bugsnag/react-native": "8.4.0", "@discord/bottom-sheet": "bluesky-social/react-native-bottom-sheet", + "@expo/vector-icons": "^14.1.0", "@hookform/resolvers": "^2.9.10", - "@notifee/react-native": "7.8.2", "@nozbe/watermelondb": "^0.28.1-0", "@react-native-async-storage/async-storage": "^1.22.3", "@react-native-camera-roll/camera-roll": "^7.10.0", @@ -40,7 +40,6 @@ "@react-native-firebase/analytics": "^21.12.2", "@react-native-firebase/app": "^21.12.2", "@react-native-firebase/crashlytics": "^21.12.2", - "@react-native-firebase/messaging": "^21.12.2", "@react-native-masked-view/masked-view": "^0.3.1", "@react-native-picker/picker": "^2.11.0", "@react-native/codegen": "^0.80.0", @@ -54,6 +53,7 @@ "@rocket.chat/ui-kit": "0.31.19", "bytebuffer": "5.0.1", "color2k": "1.2.4", + "dayjs": "^1.11.18", "dequal": "2.0.3", "ejson": "2.2.3", "eslint-import-resolver-typescript": "^4.4.4", @@ -61,6 +61,7 @@ "expo-apple-authentication": "7.2.3", "expo-av": "15.1.3", "expo-camera": "16.1.5", + "expo-device": "^8.0.10", "expo-document-picker": "13.1.4", "expo-file-system": "18.1.7", "expo-haptics": "14.1.3", @@ -68,6 +69,7 @@ "expo-keep-awake": "14.1.3", "expo-local-authentication": "16.0.3", "expo-navigation-bar": "^4.2.4", + "expo-notifications": "0.32.11", "expo-status-bar": "^2.2.3", "expo-system-ui": "^5.0.7", "expo-video-thumbnails": "9.1.2", @@ -80,7 +82,6 @@ "lint-staged": "11.1.0", "lodash": "4.17.21", "mitt": "3.0.1", - "moment": "2.29.4", "pretty-bytes": "5.6.0", "prop-types": "15.7.2", "react": "19.0.0", @@ -100,14 +101,12 @@ "react-native-image-crop-picker": "RocketChat/react-native-image-crop-picker#5346870b0be10d300dc53924309dc6adc9946d50", "react-native-katex": "git+https://github.com/RocketChat/react-native-katex.git", "react-native-keyboard-controller": "^1.17.1", - "react-native-keychain": "^8.2.0", "react-native-linear-gradient": "2.6.2", "react-native-localize": "2.1.1", "react-native-math-view": "3.9.5", "react-native-mime-types": "2.3.0", - "react-native-mmkv-storage": "^12.0.0", + "react-native-mmkv": "3.3.3", "react-native-modal": "13.0.1", - "react-native-notifications": "5.1.0", "react-native-notifier": "1.6.1", "react-native-picker-select": "9.0.1", "react-native-platform-touchable": "1.1.1", @@ -121,7 +120,6 @@ "react-native-slowlog": "1.0.2", "react-native-svg": "^15.12.1", "react-native-url-polyfill": "2.0.0", - "react-native-vector-icons": "9.2.0", "react-native-webview": "^13.15.0", "react-redux": "8.0.5", "reanimated-tab-view": "^0.3.0", @@ -178,7 +176,6 @@ "@types/react-native-background-timer": "^2.0.2", "@types/react-native-config-reader": "^4.1.3", "@types/react-native-platform-touchable": "^1.1.6", - "@types/react-native-vector-icons": "^6.4.18", "@types/semver": "7.3.13", "@types/ua-parser-js": "^0.7.36", "@types/url-parse": "^1.4.8", @@ -202,7 +199,6 @@ "jest": "^29.7.0", "jest-cli": "^29.7.0", "jest-expo": "^53.0.5", - "otp.js": "1.2.0", "patch-package": "8.0.0", "prettier": "2.8.8", "react-dom": "18.2.0", diff --git a/patches/@notifee+react-native+7.8.2.patch b/patches/@notifee+react-native+7.8.2.patch deleted file mode 100644 index cdb17b7853a..00000000000 --- a/patches/@notifee+react-native+7.8.2.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- a/node_modules/@notifee/react-native/android/src/main/java/io/invertase/notifee/NotifeeApiModule.java -+++ b/node_modules/@notifee/react-native/android/src/main/java/io/invertase/notifee/NotifeeApiModule.java -@@ -238,7 +238,7 @@ public class NotifeeApiModule extends ReactContextBaseJavaModule implements Perm - @ReactMethod - public void requestPermission(Promise promise) { - // For Android 12 and below, we return the notification settings -- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { -+ if (Build.VERSION.SDK_INT < 33) { - Notifee.getInstance() - .getNotificationSettings( - (e, aBundle) -> NotifeeReactUtils.promiseResolver(promise, e, aBundle)); -@@ -265,7 +265,7 @@ public class NotifeeApiModule extends ReactContextBaseJavaModule implements Perm - (e, aBundle) -> NotifeeReactUtils.promiseResolver(promise, e, aBundle)); - - activity.requestPermissions( -- new String[] {Manifest.permission.POST_NOTIFICATIONS}, -+ new String[] {"android.permission.POST_NOTIFICATIONS"}, - Notifee.REQUEST_CODE_NOTIFICATION_PERMISSION, - this); - } -diff --git a/node_modules/@notifee/react-native/ios/NotifeeCore/NotifeeCore+UNUserNotificationCenter.m b/node_modules/@notifee/react-native/ios/NotifeeCore/NotifeeCore+UNUserNotificationCenter.m -index cf8020d..3a1e080 100644 ---- a/node_modules/@notifee/react-native/ios/NotifeeCore/NotifeeCore+UNUserNotificationCenter.m -+++ b/node_modules/@notifee/react-native/ios/NotifeeCore/NotifeeCore+UNUserNotificationCenter.m -@@ -179,11 +179,11 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center - - _notificationOpenedAppID = notifeeNotification[@"id"]; - -- // handle notification outside of notifee -- if (notifeeNotification == nil) { -- notifeeNotification = -- [NotifeeCoreUtil parseUNNotificationRequest:response.notification.request]; -- } -+ // disable notifee handler on ios devices -+ // if (notifeeNotification == nil) { -+ // notifeeNotification = -+ // [NotifeeCoreUtil parseUNNotificationRequest:response.notification.request]; -+ // } - - if (notifeeNotification != nil) { - if ([response.actionIdentifier isEqualToString:UNNotificationDismissActionIdentifier]) { diff --git a/patches/@react-native-firebase+messaging+21.12.2.patch b/patches/@react-native-firebase+messaging+21.12.2.patch deleted file mode 100644 index 34905325f15..00000000000 --- a/patches/@react-native-firebase+messaging+21.12.2.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/node_modules/@react-native-firebase/messaging/android/src/main/AndroidManifest.xml b/node_modules/@react-native-firebase/messaging/android/src/main/AndroidManifest.xml -index 2f6741b..d4f4abb 100644 ---- a/node_modules/@react-native-firebase/messaging/android/src/main/AndroidManifest.xml -+++ b/node_modules/@react-native-firebase/messaging/android/src/main/AndroidManifest.xml -@@ -9,12 +9,12 @@ - <application> - <service android:name=".ReactNativeFirebaseMessagingHeadlessService" - android:exported="false" /> -- <service android:name=".ReactNativeFirebaseMessagingService" -+ <!-- <service android:name=".ReactNativeFirebaseMessagingService" - android:exported="false"> - <intent-filter> - <action android:name="com.google.firebase.MESSAGING_EVENT"/> - </intent-filter> -- </service> -+ </service> --> - <receiver - android:name=".ReactNativeFirebaseMessagingReceiver" - android:exported="true" diff --git a/patches/react-native+0.79.4.patch b/patches/react-native+0.79.4.patch new file mode 100644 index 00000000000..0fd01cf14df --- /dev/null +++ b/patches/react-native+0.79.4.patch @@ -0,0 +1,25 @@ +diff --git a/node_modules/react-native/React/Views/RCTViewManager.m b/node_modules/react-native/React/Views/RCTViewManager.m +index f017cb8..f6aaafb 100644 +--- a/node_modules/react-native/React/Views/RCTViewManager.m ++++ b/node_modules/react-native/React/Views/RCTViewManager.m +@@ -225,7 +225,9 @@ RCT_CUSTOM_VIEW_PROPERTY(accessibilityRole, UIAccessibilityTraits, RCTView) + { + UIAccessibilityTraits accessibilityRoleTraits = + json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; +- if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits) { ++ NSString *roleString = json ? [RCTConvert NSString:json] : nil; ++ if (view.reactAccessibilityElement.accessibilityRoleTraits != accessibilityRoleTraits || view.reactAccessibilityElement.accessibilityRole != roleString) { ++ + view.accessibilityRoleTraits = accessibilityRoleTraits; + view.reactAccessibilityElement.accessibilityRole = json ? [RCTConvert NSString:json] : nil; + [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; +@@ -235,7 +237,8 @@ RCT_CUSTOM_VIEW_PROPERTY(accessibilityRole, UIAccessibilityTraits, RCTView) + RCT_CUSTOM_VIEW_PROPERTY(role, UIAccessibilityTraits, RCTView) + { + UIAccessibilityTraits roleTraits = json ? [RCTConvert UIAccessibilityTraits:json] : UIAccessibilityTraitNone; +- if (view.reactAccessibilityElement.roleTraits != roleTraits) { ++ NSString *roleString = json ? [RCTConvert NSString:json] : nil; ++ if (view.reactAccessibilityElement.roleTraits != roleTraits || view.reactAccessibilityElement.role != roleString) { + view.roleTraits = roleTraits; + view.reactAccessibilityElement.role = json ? [RCTConvert NSString:json] : nil; + [self updateAccessibilityTraitsForRole:view withDefaultView:defaultView]; \ No newline at end of file diff --git a/patches/react-native-mmkv+3.3.3.patch b/patches/react-native-mmkv+3.3.3.patch new file mode 100644 index 00000000000..de7f8be8ce6 --- /dev/null +++ b/patches/react-native-mmkv+3.3.3.patch @@ -0,0 +1,39 @@ +diff --git a/node_modules/react-native-mmkv/android/build/intermediates/aar_metadata/release/writeReleaseAarMetadata/aar-metadata.properties b/node_modules/react-native-mmkv/android/build/intermediates/aar_metadata/release/writeReleaseAarMetadata/aar-metadata.properties +new file mode 100644 +index 0000000..1211b1e +--- /dev/null ++++ b/node_modules/react-native-mmkv/android/build/intermediates/aar_metadata/release/writeReleaseAarMetadata/aar-metadata.properties +@@ -0,0 +1,6 @@ ++aarFormatVersion=1.0 ++aarMetadataVersion=1.0 ++minCompileSdk=1 ++minCompileSdkExtension=0 ++minAndroidGradlePluginVersion=1.0.0 ++coreLibraryDesugaringEnabled=false +diff --git a/node_modules/react-native-mmkv/src/MMKV.ts b/node_modules/react-native-mmkv/src/MMKV.ts +index 5ee1f01..ea3f444 100644 +--- a/node_modules/react-native-mmkv/src/MMKV.ts ++++ b/node_modules/react-native-mmkv/src/MMKV.ts +@@ -1,5 +1,5 @@ + import { createMMKV } from './createMMKV'; +-import { createMockMMKV } from './createMMKV.mock'; ++// import { createMockMMKV } from './createMMKV.mock'; // Disabled via patch-package for E2E tests + import { isTest } from './PlatformChecker'; + import type { + Configuration, +@@ -25,9 +25,8 @@ export class MMKV implements MMKVInterface { + */ + constructor(configuration: Configuration = { id: 'mmkv.default' }) { + this.id = configuration.id; +- this.nativeInstance = isTest() +- ? createMockMMKV() +- : createMMKV(configuration); ++ // Always use real MMKV (mock disabled via patch-package for E2E tests) ++ this.nativeInstance = createMMKV(configuration); + this.functionCache = {}; + + addMemoryWarningListener(this); +diff --git a/node_modules/react-native-mmkv/src/createMMKV.mock.ts b/node_modules/react-native-mmkv/src/createMMKV.mock.ts.disabled +similarity index 100% +rename from node_modules/react-native-mmkv/src/createMMKV.mock.ts +rename to node_modules/react-native-mmkv/src/createMMKV.mock.ts.disabled diff --git a/patches/react-native-mmkv-storage+12.0.0.patch b/patches/react-native-mmkv-storage+12.0.0.patch deleted file mode 100644 index 98703b5791e..00000000000 --- a/patches/react-native-mmkv-storage+12.0.0.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m -index 34703df..a754918 100644 ---- a/node_modules/react-native-mmkv-storage/ios/SecureStorage.m -+++ b/node_modules/react-native-mmkv-storage/ios/SecureStorage.m -@@ -40,14 +40,14 @@ NSString *serviceName = nil; - @try { - [self handleAppUninstallation]; - NSString *value = [self searchKeychainCopyMatching:key]; -- dispatch_sync(dispatch_get_main_queue(), ^{ -- int readAttempts = 0; -- // See: https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/195 -- while (![[UIApplication sharedApplication] isProtectedDataAvailable] && readAttempts++ < 100) { -- // sleep 25ms before another attempt -- usleep(25000); -- } -- }); -+ // dispatch_sync(dispatch_get_main_queue(), ^{ -+ // int readAttempts = 0; -+ // // See: https://github.com/ammarahm-ed/react-native-mmkv-storage/issues/195 -+ // while (![[UIApplication sharedApplication] isProtectedDataAvailable] && readAttempts++ < 100) { -+ // // sleep 25ms before another attempt -+ // usleep(25000); -+ // } -+ // }); - if (value == nil) { - NSString* errorMessage = @"key does not present"; - -@@ -100,6 +100,10 @@ NSString *serviceName = nil; - - - (NSMutableDictionary *)newSearchDictionary:(NSString *)identifier { - NSMutableDictionary *searchDictionary = [[NSMutableDictionary alloc] init]; -+ -+ // this value is shared by main app and extensions, so, is the best to be used here -+ serviceName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppGroup"]; -+ - if(serviceName == nil){ - serviceName = [[NSBundle mainBundle] bundleIdentifier]; - } diff --git a/patches/react-native-notifications+5.1.0.patch b/patches/react-native-notifications+5.1.0.patch deleted file mode 100644 index 57c1f458984..00000000000 --- a/patches/react-native-notifications+5.1.0.patch +++ /dev/null @@ -1,173 +0,0 @@ -diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java -index ac04274..f2cfd00 100644 ---- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java -+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java -@@ -30,7 +30,7 @@ public class PushNotification implements IPushNotification { - final protected AppLifecycleFacade mAppLifecycleFacade; - final protected AppLaunchHelper mAppLaunchHelper; - final protected JsIOHelper mJsIOHelper; -- final protected PushNotificationProps mNotificationProps; -+ protected PushNotificationProps mNotificationProps; - final protected AppVisibilityListener mAppVisibilityListener = new AppVisibilityListener() { - @Override - public void onAppVisible() { -diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmToken.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmToken.java -index 7db6e8d..0127e8a 100644 ---- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmToken.java -+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/fcm/FcmToken.java -@@ -5,11 +5,12 @@ import android.os.Bundle; - import android.util.Log; - - import com.facebook.react.ReactApplication; --import com.facebook.react.ReactInstanceManager; - import com.facebook.react.bridge.ReactContext; - import com.google.firebase.messaging.FirebaseMessaging; - import com.wix.reactnativenotifications.BuildConfig; - import com.wix.reactnativenotifications.core.JsIOHelper; -+import com.wix.reactnativenotifications.core.AppLifecycleFacade; -+import com.wix.reactnativenotifications.core.AppLifecycleFacadeHolder; - - import static com.wix.reactnativenotifications.Defs.LOGTAG; - import static com.wix.reactnativenotifications.Defs.TOKEN_RECEIVED_EVENT_NAME; -@@ -88,8 +89,8 @@ public class FcmToken implements IFcmToken { - } - - protected void sendTokenToJS() { -- final ReactInstanceManager instanceManager = ((ReactApplication) mAppContext).getReactNativeHost().getReactInstanceManager(); -- final ReactContext reactContext = instanceManager.getCurrentReactContext(); -+ AppLifecycleFacade facade = AppLifecycleFacadeHolder.get(); -+ final ReactContext reactContext = facade.getRunningReactContext(); - - // Note: Cannot assume react-context exists cause this is an async dispatched service. - if (reactContext != null && reactContext.hasActiveCatalystInstance()) { -diff --git a/node_modules/react-native-notifications/lib/dist/Notifications.d.ts b/node_modules/react-native-notifications/lib/dist/Notifications.d.ts -index 6e49fd4..5fe9515 100644 ---- a/node_modules/react-native-notifications/lib/dist/Notifications.d.ts -+++ b/node_modules/react-native-notifications/lib/dist/Notifications.d.ts -@@ -32,7 +32,7 @@ export declare class NotificationsRoot { - /** - * setCategories - */ -- setCategories(categories: [NotificationCategory?]): void; -+ setCategories(categories: NotificationCategory[]): void; - /** - * cancelLocalNotification - */ -diff --git a/node_modules/react-native-notifications/lib/ios/RCTConvert+RNNotifications.h b/node_modules/react-native-notifications/lib/ios/RCTConvert+RNNotifications.h -index 8b2c269..8667351 100644 ---- a/node_modules/react-native-notifications/lib/ios/RCTConvert+RNNotifications.h -+++ b/node_modules/react-native-notifications/lib/ios/RCTConvert+RNNotifications.h -@@ -1,5 +1,5 @@ - #import <React/RCTConvert.h> --@import UserNotifications; -+#import <UserNotifications/UserNotifications.h> - - @interface RCTConvert (UIMutableUserNotificationAction) - + (UIMutableUserNotificationAction *)UIMutableUserNotificationAction:(id)json; -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.h b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.h -index 4bc5292..71df0bc 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.h -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.h -@@ -4,7 +4,7 @@ typedef void (^RCTPromiseResolveBlock)(id result); - typedef void (^RCTResponseSenderBlock)(NSArray *response); - typedef void (^RCTPromiseRejectBlock)(NSString *code, NSString *message, NSError *error); - --@import UserNotifications; -+#import <UserNotifications/UserNotifications.h> - - @interface RNNotificationCenter : NSObject - -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m -index afd5c73..ec4dd85 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationCenter.m -@@ -48,14 +48,15 @@ - } - - - (void)setCategories:(NSArray *)json { -- NSMutableSet<UNNotificationCategory *>* categories = nil; -+ NSMutableSet<UNNotificationCategory *>* categories = [NSMutableSet new]; - -- if ([json count] > 0) { -- categories = [NSMutableSet new]; -- for (NSDictionary* categoryJson in json) { -- [categories addObject:[RCTConvert UNMutableUserNotificationCategory:categoryJson]]; -+ for (NSDictionary* categoryJson in json) { -+ UNNotificationCategory *category = [RCTConvert UNMutableUserNotificationCategory:categoryJson]; -+ if (category) { -+ [categories addObject:category]; - } - } -+ - [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:categories]; - } - -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationCenterListener.h b/node_modules/react-native-notifications/lib/ios/RNNotificationCenterListener.h -index 77a67dd..eaf0043 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationCenterListener.h -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationCenterListener.h -@@ -1,5 +1,5 @@ - #import <Foundation/Foundation.h> --@import UserNotifications; -+#import <UserNotifications/UserNotifications.h> - #import "RNNotificationEventHandler.h" - - @interface RNNotificationCenterListener : NSObject <UNUserNotificationCenterDelegate> -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.h b/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.h -index a07c6e9..8e3ca6a 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.h -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationEventHandler.h -@@ -1,5 +1,5 @@ - #import <Foundation/Foundation.h> --@import UserNotifications; -+#import <UserNotifications/UserNotifications.h> - #import "RNNotificationsStore.h" - #import "RNEventEmitter.h" - -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationParser.h b/node_modules/react-native-notifications/lib/ios/RNNotificationParser.h -index 7aa2bfb..c1c019c 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationParser.h -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationParser.h -@@ -1,5 +1,5 @@ - #import <Foundation/Foundation.h> --@import UserNotifications; -+#import <UserNotifications/UserNotifications.h> - - @interface RNNotificationParser : NSObject - -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationParser.m b/node_modules/react-native-notifications/lib/ios/RNNotificationParser.m -index 62f3043..840acda 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationParser.m -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationParser.m -@@ -12,7 +12,18 @@ - } - - + (NSDictionary *)parseNotificationResponse:(UNNotificationResponse *)response { -- NSDictionary* responseDict = @{@"notification": [RCTConvert UNNotificationPayload:response.notification], @"identifier": response.notification.request.identifier, @"action": [self parseNotificationResponseAction:response]}; -+ NSMutableDictionary *notificationPayload = [[RCTConvert UNNotificationPayload:response.notification] mutableCopy]; -+ -+ NSDictionary *responseAction = [self parseNotificationResponseAction:response]; -+ -+ if (responseAction != nil) { -+ [notificationPayload setObject:responseAction forKey:@"action"]; -+ } -+ -+ NSDictionary *responseDict = @{ -+ @"notification": [notificationPayload copy], -+ @"identifier": response.notification.request.identifier -+ }; - - return responseDict; - } -diff --git a/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.h b/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.h -index 4f8a171..7e4f9ca 100644 ---- a/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.h -+++ b/node_modules/react-native-notifications/lib/ios/RNNotificationsStore.h -@@ -1,6 +1,6 @@ - #import <Foundation/Foundation.h> - #import <UIKit/UIKit.h> --@import UserNotifications; -+#import <UserNotifications/UserNotifications.h> - - @interface RNNotificationsStore : NSObject - diff --git a/patches/react-native-webview+13.15.0.patch b/patches/react-native-webview+13.15.0.patch index a026aade098..bbcde36abc5 100644 --- a/patches/react-native-webview+13.15.0.patch +++ b/patches/react-native-webview+13.15.0.patch @@ -1,3 +1,37 @@ +diff --git a/node_modules/react-native-webview/android/.project b/node_modules/react-native-webview/android/.project +new file mode 100644 +index 0000000..122755b +--- /dev/null ++++ b/node_modules/react-native-webview/android/.project +@@ -0,0 +1,28 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<projectDescription> ++ <name>react-native-webview</name> ++ <comment>Project react-native-webview created by Buildship.</comment> ++ <projects> ++ </projects> ++ <buildSpec> ++ <buildCommand> ++ <name>org.eclipse.buildship.core.gradleprojectbuilder</name> ++ <arguments> ++ </arguments> ++ </buildCommand> ++ </buildSpec> ++ <natures> ++ <nature>org.eclipse.buildship.core.gradleprojectnature</nature> ++ </natures> ++ <filteredResources> ++ <filter> ++ <id>1760118463063</id> ++ <name></name> ++ <type>30</type> ++ <matcher> ++ <id>org.eclipse.core.resources.regexFilterMatcher</id> ++ <arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> ++ </matcher> ++ </filter> ++ </filteredResources> ++</projectDescription> diff --git a/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java b/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java index 5932fc1..1ce86e8 100644 --- a/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java @@ -91,14 +125,14 @@ index 251939e..763cc50 100644 public void onPageFinished(WebView webView, String url) { super.onPageFinished(webView, url); diff --git a/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java b/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java -index 951749c..05792b8 100644 +index 951749c..12a0bd2 100644 --- a/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java +++ b/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java @@ -551,4 +551,8 @@ public class RNCWebViewModuleImpl implements ActivityEventListener { } return (PermissionAwareActivity) activity; } -+ ++ + public static void setCertificateAlias(String alias) { + RNCWebViewClient.setCertificateAlias(alias); + } @@ -164,130 +198,3 @@ index 526cc16..8f3318d 100644 @NonNull @Override public String getName() { -diff --git a/node_modules/react-native-webview/apple/RNCWebViewImpl.m b/node_modules/react-native-webview/apple/RNCWebViewImpl.m -index 7f5c24d..8e11e4c 100644 ---- a/node_modules/react-native-webview/apple/RNCWebViewImpl.m -+++ b/node_modules/react-native-webview/apple/RNCWebViewImpl.m -@@ -17,6 +17,9 @@ - - #import "objc/runtime.h" - -+#import "SecureStorage.h" -+#import <MMKV/MMKV.h> -+ - static NSTimer *keyboardTimer; - static NSString *const HistoryShimName = @"ReactNativeHistoryShim"; - static NSString *const MessageHandlerName = @"ReactNativeWebView"; -@@ -1149,6 +1152,68 @@ + (void)setCustomCertificatesForHost:(nullable NSDictionary*)certificates { - customCertificatesForHost = certificates; - } - -+-(NSURLCredential *)getUrlCredential:(NSURLAuthenticationChallenge *)challenge path:(NSString *)path password:(NSString *)password -+{ -+ NSString *authMethod = [[challenge protectionSpace] authenticationMethod]; -+ SecTrustRef serverTrust = challenge.protectionSpace.serverTrust; -+ -+ if ([authMethod isEqualToString:NSURLAuthenticationMethodServerTrust] || path == nil || password == nil) { -+ return [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; -+ } else if (path && password) { -+ NSMutableArray *policies = [NSMutableArray array]; -+ [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)challenge.protectionSpace.host)]; -+ SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); -+ -+ SecTrustResultType result; -+ SecTrustEvaluate(serverTrust, &result); -+ -+ if (![[NSFileManager defaultManager] fileExistsAtPath:path]) -+ { -+ return [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; -+ } -+ -+ NSData *p12data = [NSData dataWithContentsOfFile:path]; -+ NSDictionary* options = @{ (id)kSecImportExportPassphrase:password }; -+ CFArrayRef rawItems = NULL; -+ OSStatus status = SecPKCS12Import((__bridge CFDataRef)p12data, -+ (__bridge CFDictionaryRef)options, -+ &rawItems); -+ -+ if (status != noErr) { -+ return [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; -+ } -+ -+ NSArray* items = (NSArray*)CFBridgingRelease(rawItems); -+ NSDictionary* firstItem = nil; -+ if ((status == errSecSuccess) && ([items count]>0)) { -+ firstItem = items[0]; -+ } -+ -+ SecIdentityRef identity = (SecIdentityRef)CFBridgingRetain(firstItem[(id)kSecImportItemIdentity]); -+ SecCertificateRef certificate = NULL; -+ if (identity) { -+ SecIdentityCopyCertificate(identity, &certificate); -+ if (certificate) { CFRelease(certificate); } -+ } -+ -+ NSMutableArray *certificates = [[NSMutableArray alloc] init]; -+ [certificates addObject:CFBridgingRelease(certificate)]; -+ -+ return [NSURLCredential credentialWithIdentity:identity certificates:certificates persistence:NSURLCredentialPersistenceNone]; -+ } -+ -+ return [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; -+} -+ -+- (NSString *)stringToHex:(NSString *)string -+{ -+ char *utf8 = (char *)[string UTF8String]; -+ NSMutableString *hex = [NSMutableString string]; -+ while (*utf8) [hex appendFormat:@"%02X", *utf8++ & 0x00FF]; -+ -+ return [[NSString stringWithFormat:@"%@", hex] lowercaseString]; -+} -+ - - (void) webView:(WKWebView *)webView - didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable))completionHandler -@@ -1158,7 +1223,31 @@ - (void) webView:(WKWebView *)webView - host = webView.URL.host; - } - if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodClientCertificate) { -- completionHandler(NSURLSessionAuthChallengeUseCredential, clientAuthenticationCredential); -+ NSString *host = challenge.protectionSpace.host; -+ -+ // Read the clientSSL info from MMKV -+ __block NSDictionary *clientSSL; -+ SecureStorage *secureStorage = [[SecureStorage alloc] init]; -+ -+ // https://github.com/ammarahm-ed/react-native-mmkv-storage/blob/master/src/loader.js#L31 -+ NSString *key = [secureStorage getSecureKey:[self stringToHex:@"com.MMKV.default"]]; -+ NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; -+ -+ if (key == NULL) { -+ return completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, credential); -+ } -+ -+ NSData *cryptKey = [key dataUsingEncoding:NSUTF8StringEncoding]; -+ MMKV *mmkv = [MMKV mmkvWithID:@"default" cryptKey:cryptKey mode:MMKVMultiProcess]; -+ clientSSL = [mmkv getObjectOfClass:[NSDictionary class] forKey:host]; -+ -+ if (clientSSL != (id)[NSNull null]) { -+ NSString *path = [clientSSL objectForKey:@"path"]; -+ NSString *password = [clientSSL objectForKey:@"password"]; -+ credential = [self getUrlCredential:challenge path:path password:password]; -+ } -+ -+ completionHandler(NSURLSessionAuthChallengeUseCredential, credential); - return; - } - if ([[challenge protectionSpace] serverTrust] != nil && customCertificatesForHost != nil && host != nil) { -diff --git a/node_modules/react-native-webview/react-native-webview.podspec b/node_modules/react-native-webview/react-native-webview.podspec -index 24e7a13..c7304b0 100644 ---- a/node_modules/react-native-webview/react-native-webview.podspec -+++ b/node_modules/react-native-webview/react-native-webview.podspec -@@ -43,4 +43,6 @@ Pod::Spec.new do |s| - s.dependency "React-Core" - end - end -+ -+ s.dependency 'MMKV', '~> 1.3.9' - end diff --git a/react-native.config.js b/react-native.config.js index 685aec05f4b..5af09eb7525 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -1,9 +1,3 @@ module.exports = { - dependencies: { - '@react-native-firebase/messaging': { - platforms: { - ios: null - } - } - } + dependencies: {} }; diff --git a/yarn.lock b/yarn.lock index c2c81937dc8..5f334cbad37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2750,6 +2750,26 @@ xcode "^3.0.1" xml2js "0.6.0" +"@expo/config-plugins@~54.0.3": + version "54.0.3" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-54.0.3.tgz#2b9ffd68a48e3b51299cdbe3ee777b9f5163fc03" + integrity sha512-tBIUZIxLQfCu5jmqTO+UOeeDUGIB0BbK6xTMkPRObAXRQeTLPPfokZRCo818d2owd+Bcmq1wBaDz0VY3g+glfw== + dependencies: + "@expo/config-types" "^54.0.9" + "@expo/json-file" "~10.0.7" + "@expo/plist" "^0.4.7" + "@expo/sdk-runtime-versions" "^1.0.0" + chalk "^4.1.2" + debug "^4.3.5" + getenv "^2.0.0" + glob "^13.0.0" + resolve-from "^5.0.0" + semver "^7.5.4" + slash "^3.0.0" + slugify "^1.6.6" + xcode "^3.0.1" + xml2js "0.6.0" + "@expo/config-types@^53.0.3": version "53.0.3" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-53.0.3.tgz#d083d9b095972e89eee96c41d085feb5b92d2749" @@ -2760,6 +2780,16 @@ resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-53.0.4.tgz#fe64fac734531ae883d18529b32586c23ffb1ceb" integrity sha512-0s+9vFx83WIToEr0Iwy4CcmiUXa5BgwBmEjylBB2eojX5XAMm9mJvw9KpjAb8m7zq2G0Q6bRbeufkzgbipuNQg== +"@expo/config-types@^54.0.10": + version "54.0.10" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-54.0.10.tgz#688f4338255d2fdea970f44e2dfd8e8d37dec292" + integrity sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA== + +"@expo/config-types@^54.0.9": + version "54.0.9" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-54.0.9.tgz#b9279c47fe249b774fbd3358b6abddea08f1bcec" + integrity sha512-Llf4jwcrAnrxgE5WCdAOxtMf8FGwS4Sk0SSgI0NnIaSyCnmOCAm80GPFvsK778Oj19Ub4tSyzdqufPyeQPksWw== + "@expo/config@~11.0.7", "@expo/config@~11.0.8": version "11.0.8" resolved "https://registry.yarnpkg.com/@expo/config/-/config-11.0.8.tgz#658538d4321cf6edf6741f8b8506fda0046d5e94" @@ -2798,6 +2828,25 @@ slugify "^1.3.4" sucrase "3.35.0" +"@expo/config@~12.0.12": + version "12.0.12" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-12.0.12.tgz#5e26390ec209ee56432e980451c08b361e0f07dd" + integrity sha512-X2MW86+ulLpMGvdgfvpl2EOBAKUlwvnvoPwdaZeeyWufGopn1nTUeh4C9gMsplDaP1kXv9sLXVhOoUoX6g9PvQ== + dependencies: + "@babel/code-frame" "~7.10.4" + "@expo/config-plugins" "~54.0.3" + "@expo/config-types" "^54.0.10" + "@expo/json-file" "^10.0.8" + deepmerge "^4.3.1" + getenv "^2.0.0" + glob "^13.0.0" + require-from-string "^2.0.2" + resolve-from "^5.0.0" + resolve-workspace-root "^2.0.0" + semver "^7.6.0" + slugify "^1.3.4" + sucrase "~3.35.1" + "@expo/devcert@^1.1.2": version "1.1.4" resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.1.4.tgz#d98807802a541847cc42791a606bfdc26e641277" @@ -2827,6 +2876,17 @@ dotenv-expand "~11.0.6" getenv "^1.0.0" +"@expo/env@~2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@expo/env/-/env-2.0.8.tgz#2aea906eed3d297b2e19608dc1a800fba0a3fe03" + integrity sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA== + dependencies: + chalk "^4.0.0" + debug "^4.3.4" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + getenv "^2.0.0" + "@expo/fingerprint@0.12.4": version "0.12.4" resolved "https://registry.yarnpkg.com/@expo/fingerprint/-/fingerprint-0.12.4.tgz#d4cc4de50e7b6d4e03b0d38850d1e4a136b74c8c" @@ -2858,6 +2918,30 @@ temp-dir "~2.0.0" unique-string "~2.0.0" +"@expo/image-utils@^0.8.7": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.8.8.tgz#db5d460fd0c7101b10e9d027ffbe42f9cf115248" + integrity sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA== + dependencies: + "@expo/spawn-async" "^1.7.2" + chalk "^4.0.0" + getenv "^2.0.0" + jimp-compact "0.16.1" + parse-png "^2.1.0" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + semver "^7.6.0" + temp-dir "~2.0.0" + unique-string "~2.0.0" + +"@expo/json-file@^10.0.8", "@expo/json-file@~10.0.7": + version "10.0.8" + resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-10.0.8.tgz#05e524d1ecc0011db0a6d66b525ea2f58cfe6d43" + integrity sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ== + dependencies: + "@babel/code-frame" "~7.10.4" + json5 "^2.2.3" + "@expo/json-file@^9.1.4", "@expo/json-file@~9.1.4": version "9.1.4" resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.1.4.tgz#e719d092c08afb3234643f9285e57c6a24989327" @@ -2920,6 +3004,15 @@ base64-js "^1.2.3" xmlbuilder "^15.1.1" +"@expo/plist@^0.4.7": + version "0.4.8" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.4.8.tgz#e014511a4a5008cf2b832b91caa8e9f2704127cc" + integrity sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ== + dependencies: + "@xmldom/xmldom" "^0.8.8" + base64-js "^1.2.3" + xmlbuilder "^15.1.1" + "@expo/prebuild-config@^9.0.5": version "9.0.5" resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.5.tgz#b8b864b5e19489a1f66442ae30d5d7295f658297" @@ -2953,6 +3046,11 @@ resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.0.0.tgz#48ce0aa5c05873b07c0c78bfe16c870388f4de9a" integrity sha512-5orm59pdnBQlovhU9k4DbjMUZBHNlku7IRgFY56f7pcaaCnXq9yaLJoOQl9sMwNdFzf4gnkTyHmR5uN10mI9rA== +"@expo/vector-icons@^14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.1.0.tgz#d3dddad8b6ea60502e0fe5485b86751827606ce4" + integrity sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ== + "@expo/ws-tunnel@^1.0.1": version "1.0.6" resolved "https://registry.yarnpkg.com/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz#92b70e7264ad42ea07f28a20f2f540b91d07bdd9" @@ -3428,6 +3526,23 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@ide/backoff@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@ide/backoff/-/backoff-1.0.0.tgz#466842c25bd4a4833e0642fab41ccff064010176" + integrity sha512-F0YfUDjvT+Mtt/R4xdl2X0EYCHMMiJqNLdxHD++jDT5ydEFIyqbCHh51Qx2E211dgZprPKhV7sHmnXKpLuvc5g== + +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -3820,11 +3935,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@notifee/react-native@7.8.2": - version "7.8.2" - resolved "https://registry.yarnpkg.com/@notifee/react-native/-/react-native-7.8.2.tgz#72d3199ae830b4128ddaef3c1c2f11604759c9c4" - integrity sha512-VG4IkWJIlOKqXwa3aExC3WFCVCGCC9BA55Ivg0SMRfEs+ruvYy/zlLANcrVGiPtgkUEryXDhA8SXx9+JcO8oLA== - "@nozbe/simdjson@3.9.4": version "3.9.4" resolved "https://registry.yarnpkg.com/@nozbe/simdjson/-/simdjson-3.9.4.tgz#64bb522c54cd22e40ff4a64d8f8e8e9285b123b6" @@ -4276,11 +4386,6 @@ dependencies: stacktrace-js "^2.0.2" -"@react-native-firebase/messaging@^21.12.2": - version "21.12.2" - resolved "https://registry.yarnpkg.com/@react-native-firebase/messaging/-/messaging-21.12.2.tgz#9d8ec5dd21c562a6b5c5d3699fadde419c9f2a75" - integrity sha512-t/MQgqclINESO/1yCbgXTHJxAdxIzAnjtgTw6bj/po/1JRGroT+HG3VDpep9a3Z35S4f6eF90AE5zZzcKu8IjQ== - "@react-native-masked-view/masked-view@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.3.1.tgz#5bd76f17004a6ccbcec03856893777ee91f23d29" @@ -5302,21 +5407,6 @@ "@types/react" "*" react-native "*" -"@types/react-native-vector-icons@^6.4.18": - version "6.4.18" - resolved "https://registry.yarnpkg.com/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.18.tgz#18671c617b9d0958747bc959903470dde91a8c79" - integrity sha512-YGlNWb+k5laTBHd7+uZowB9DpIK3SXUneZqAiKQaj1jnJCZM0x71GDim5JCTMi4IFkhc9m8H/Gm28T5BjyivUw== - dependencies: - "@types/react" "*" - "@types/react-native" "^0.70" - -"@types/react-native@^0.70": - version "0.70.19" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.70.19.tgz#b4e651dcf7f49c69ff3a4c3072584cad93155582" - integrity sha512-c6WbyCgWTBgKKMESj/8b4w+zWcZSsCforson7UdXtXMecG3MxCinYi6ihhrHVPyUrVzORsvEzK8zg32z4pK6Sg== - dependencies: - "@types/react" "*" - "@types/react@*": version "18.2.66" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.66.tgz#d2eafc8c4e70939c5432221adb23d32d76bfe451" @@ -6133,6 +6223,17 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + assertion-error@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" @@ -6416,6 +6517,11 @@ babel-preset-jest@^29.6.3: babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" +badgin@^1.1.5: + version "1.2.3" + resolved "https://registry.yarnpkg.com/badgin/-/badgin-1.2.3.tgz#994b5f519827d7d5422224825b2c8faea2bc43ad" + integrity sha512-NQGA7LcfCpSzIbGRbkgjgdWkjy7HI+Th5VLxTJfW5EeaAf3fnS+xWQaQOCYiny+q6QSvxqoSO04vCx+4u++EJw== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -6460,16 +6566,11 @@ better-opn@^3.0.2, better-opn@~3.0.2: dependencies: open "^8.0.4" -big-integer@1.6.x, big-integer@^1.6.9: +big-integer@1.6.x: version "1.6.52" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== -binstring@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/binstring/-/binstring-0.2.1.tgz#8a174d301f6d54efda550dd98bb4cb524eacd75d" - integrity sha512-YRfQSbLfh9/icoxbrj2SCQFlRgzoaSbfhBgPHlgmnmV7W2IYaYhUimuSXaQglis7E6YDcz3XtQzwMaIkruQDOA== - bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -6610,6 +6711,16 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- es-errors "^1.3.0" function-bind "^1.1.2" +call-bind@^1.0.0, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -6621,16 +6732,6 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" @@ -6834,15 +6935,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -7086,11 +7178,6 @@ content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-base@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/convert-base/-/convert-base-0.1.0.tgz#8da74eb98f1e8b9de76bd92a3dce97f1d37f32b7" - integrity sha512-KzNSGI7AmvaSYCcrZt2LRgT8iGU0GD3sIKOATM48BBI6XWuDxo4i9ZCLem3e9V5qxDL94GhXsylk56vOre7Bhg== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -7275,6 +7362,11 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" +dayjs@^1.11.18: + version "1.11.18" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.18.tgz#835fa712aac52ab9dec8b1494098774ed7070a11" + integrity sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA== + dayjs@^1.8.15: version "1.11.10" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" @@ -8346,6 +8438,11 @@ expo-apple-authentication@7.2.3: resolved "https://registry.yarnpkg.com/expo-apple-authentication/-/expo-apple-authentication-7.2.3.tgz#524817c1b2c0b165343039d183ee91c4674be5fe" integrity sha512-2izNn8qhUUM/gXMxA2byOn4AymUpmhaZlnGZy1vpndT0dMXd3T/Wk8j67rEB0+JhQY11iEQGXBG8cfro7LV0dA== +expo-application@~7.0.7: + version "7.0.8" + resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-7.0.8.tgz#320af0d6c39b331456d3bc833b25763c702d23db" + integrity sha512-qFGyxk7VJbrNOQWBbE09XUuGuvkOgFS9QfToaK2FdagM2aQ+x3CvGV2DuVgl/l4ZxPgIf3b/MNh9xHpwSwn74Q== + expo-asset@~11.1.5: version "11.1.5" resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-11.1.5.tgz#5cad3d781c9d0edec31b9b3adbba574eb4d5dd3e" @@ -8374,6 +8471,21 @@ expo-constants@~17.1.5: "@expo/config" "~11.0.7" "@expo/env" "~1.0.5" +expo-constants@~18.0.8: + version "18.0.12" + resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-18.0.12.tgz#3e67f7109ffd03eaa5514c19875a767c39f5a2ca" + integrity sha512-WzcKYMVNRRu4NcSzfIVRD5aUQFnSpTZgXFrlWmm19xJoDa4S3/PQNi6PNTBRc49xz9h8FT7HMxRKaC8lr0gflA== + dependencies: + "@expo/config" "~12.0.12" + "@expo/env" "~2.0.8" + +expo-device@^8.0.10: + version "8.0.10" + resolved "https://registry.yarnpkg.com/expo-device/-/expo-device-8.0.10.tgz#88be854d6de5568392ed814b44dad0e19d1d50f8" + integrity sha512-jd5BxjaF7382JkDMaC+P04aXXknB2UhWaVx5WiQKA05ugm/8GH5uaz9P9ckWdMKZGQVVEOC8MHaUADoT26KmFA== + dependencies: + ua-parser-js "^0.7.33" + expo-document-picker@13.1.4: version "13.1.4" resolved "https://registry.yarnpkg.com/expo-document-picker/-/expo-document-picker-13.1.4.tgz#f78a91e31dfac8ff26ea065bdc015ce4938eb1cc" @@ -8453,6 +8565,19 @@ expo-navigation-bar@^4.2.4: react-native-edge-to-edge "1.6.0" react-native-is-edge-to-edge "^1.1.6" +expo-notifications@0.32.11: + version "0.32.11" + resolved "https://registry.yarnpkg.com/expo-notifications/-/expo-notifications-0.32.11.tgz#0d90d08efdf4693ceaa32ab8bb7455d56424c441" + integrity sha512-4rLWC9Q4B7aQywXn9cKAlNY4p00CYKLJ23qZ0Pp/whkX0NxmI4MwJ20YhreV08gjHTTTWHpYU7jqYWpsjtPIxA== + dependencies: + "@expo/image-utils" "^0.8.7" + "@ide/backoff" "^1.0.0" + abort-controller "^3.0.0" + assert "^2.0.0" + badgin "^1.1.5" + expo-application "~7.0.7" + expo-constants "~18.0.8" + expo-status-bar@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-2.2.3.tgz#09385a866732328e0af3b4588c4f349a15fd7cd0" @@ -8960,6 +9085,11 @@ getenv@^1.0.0: resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== +getenv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/getenv/-/getenv-2.0.0.tgz#b1698c7b0f29588f4577d06c42c73a5b475c69e0" + integrity sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ== + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -8991,6 +9121,15 @@ glob@^10.3.10, glob@^10.4.2: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" +glob@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.0.tgz#9d9233a4a274fc28ef7adce5508b7ef6237a1be3" + integrity sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA== + dependencies: + minimatch "^10.1.1" + minipass "^7.1.2" + path-scurry "^2.0.0" + glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -9003,6 +9142,13 @@ glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -9218,16 +9364,6 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -hoek@3.x.x: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-3.0.4.tgz#268adff66bb6695c69b4789a88b1e0847c3f3123" - integrity sha512-VIMFzySNWnvVqBZIWJSHzun/dvtgYYxv0DypA8Mr9ue+kjXyf1mkq4/EOU/a33cIoW+fFyk9+t8W6ZSqucKYpA== - -hoek@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.3.1.tgz#1d2ea831857e4ecdce7fd5ffe07acdf8eb368cca" - integrity sha512-v7E+yIjcHECn973i0xHm4kJkEpv3C8sbYS4344WXbzYqRyiDD7rjnnKo4hsJkejQBAFdRMUGNHySeSPKSH9Rqw== - hoist-non-react-statics@3.3.2, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -9418,7 +9554,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -9596,6 +9732,14 @@ is-map@^2.0.3: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" @@ -9762,11 +9906,6 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isemail@2.x.x: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6" - integrity sha512-LPjFxaTatluwGAJlGe4FtRdzg0a9KlXrahHoHAR4HwRNf90Ttwi6sOQ9zj+EoCPmk9yyK+WFUqkm0imUo8UJbw== - iserror@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/iserror/-/iserror-0.0.2.tgz#bd53451fe2f668b9f2402c1966787aaa2c7c0bf5" @@ -10287,16 +10426,6 @@ joi@^17.2.1: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" -joi@^7.0.1: - version "7.3.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-7.3.0.tgz#4d9c9f181830444083665b5b6cd5b8ca6779a5e9" - integrity sha512-7ysLFfGtSg5L1MWnIkJGvJLAsdZPLZK2+qAi+0D9QdsnlPVSk+dBZxEl1ezveJuhEcvZKLK+AZSkmnXeATcB0A== - dependencies: - hoek "3.x.x" - isemail "2.x.x" - moment "2.x.x" - topo "2.x.x" - jpeg-js@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" @@ -10833,6 +10962,11 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^11.0.0: + version "11.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.4.tgz#ecb523ebb0e6f4d837c807ad1abaea8e0619770d" + integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== + lru-cache@^4.1.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11401,6 +11535,13 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" +minimatch@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== + dependencies: + "@isaacs/brace-expansion" "^5.0.0" + minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -11474,16 +11615,6 @@ mkdirp@^3.0.1: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== -moment@2.29.4: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -moment@2.x.x: - version "2.30.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" - integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -11698,6 +11829,14 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -11867,21 +12006,6 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -otp.js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/otp.js/-/otp.js-1.2.0.tgz#51dc13a346313c4912c4fede41d344a40b252efe" - integrity sha512-sBKB9dvJh/WwnqsudtRYmaKpVnhG/MPA7DCtHxfj+CFmehJJzdiz9k3yE3oz4KP0RNNj+4tP547W2GdQCBJx9A== - dependencies: - big-integer "^1.6.9" - binstring "^0.2.1" - convert-base "^0.1.0" - joi "^7.0.1" - pad-component "0.0.1" - qr-image "^3.1.0" - thirty-two "^1.0.1" - uid-safe "^2.0.0" - underscore "^1.8.3" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -11958,11 +12082,6 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pad-component@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac" - integrity sha512-8EKVBxCRSvLnsX1p2LlSFSH3c2/wuhY9/BXXWu8boL78FbVKqn2L5SpURt1x5iw6Gq8PTqJ7MdPoe5nCtX3I+g== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -12074,6 +12193,14 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10" + integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -12348,11 +12475,6 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -qr-image@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/qr-image/-/qr-image-3.2.0.tgz#9fa8295beae50c4a149cf9f909a1db464a8672e8" - integrity sha512-rXKDS5Sx3YipVsqmlMJsJsk6jXylEpiHRC2+nJy66fxA5ExYyGa4PqwteW69SaVmAb2OQ18HbYriT7cGQMbduw== - qrcode-terminal@0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz#ffc6c28a2fc0bfb47052b47e23f4f446a5fbdb9e" @@ -12397,11 +12519,6 @@ queue@6.0.2: dependencies: inherits "~2.0.3" -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -12611,11 +12728,6 @@ react-native-keyboard-controller@^1.17.1: dependencies: react-native-is-edge-to-edge "^1.1.6" -react-native-keychain@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-native-keychain/-/react-native-keychain-8.2.0.tgz#aea82df37aacbb04f8b567a8e0e6d7292025610a" - integrity sha512-SkRtd9McIl1Ss2XSWNLorG+KMEbgeVqX+gV+t3u1EAAqT8q2/OpRmRbxpneT2vnb/dMhiU7g6K/pf3nxLUXRvA== - react-native-linear-gradient@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/react-native-linear-gradient/-/react-native-linear-gradient-2.6.2.tgz#56598a76832724b2afa7889747635b5c80948f38" @@ -12643,10 +12755,10 @@ react-native-mime-types@2.3.0: dependencies: mime-db "~1.37.0" -react-native-mmkv-storage@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/react-native-mmkv-storage/-/react-native-mmkv-storage-12.0.0.tgz#9d15cd6dff8abbb7f52992446eef3954dc8f9c3a" - integrity sha512-sssZInILQBquytDDfjosjEdvevwMPk3fqQQjdjfnH362IcsBsApvtT8yJS406Mz9aJ6VhqVsZw/awltsUuPSYg== +react-native-mmkv@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/react-native-mmkv/-/react-native-mmkv-3.3.3.tgz#1f0326f6314e23725af8145964343224d074e6cd" + integrity sha512-GMsfOmNzx0p5+CtrCFRVtpOOMYNJXuksBVARSQrCFaZwjUyHJdQzcN900GGaFFNTxw2fs8s5Xje//RDKj9+PZA== react-native-modal@13.0.1: version "13.0.1" @@ -12656,11 +12768,6 @@ react-native-modal@13.0.1: prop-types "^15.6.2" react-native-animatable "1.3.3" -react-native-notifications@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/react-native-notifications/-/react-native-notifications-5.1.0.tgz#8cba105fd57ab9d5df9d27284acf1e2b4f3d7ea3" - integrity sha512-laqDSDlCvEASmJR6cXpqaryK855ejQd07vrfYERzhv68YDOoSkKy/URExRP4vAfAOVqHhix80tLbNUcfvZk2VQ== - react-native-notifier@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/react-native-notifier/-/react-native-notifier-1.6.1.tgz#eec07bdebed6c22cd22f5167555b7762e4119552" @@ -12754,14 +12861,6 @@ react-native-url-polyfill@2.0.0, react-native-url-polyfill@^2.0.0: dependencies: whatwg-url-without-unicode "8.0.0-3" -react-native-vector-icons@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-9.2.0.tgz#3c0c82e95defd274d56363cbe8fead8d53167ebd" - integrity sha512-wKYLaFuQST/chH3AJRjmOLoLy3JEs1JR6zMNgTaemFpNoXs0ztRnTxcxFD9xhX7cJe1/zoN5BpQYe7kL0m5yyA== - dependencies: - prop-types "^15.7.2" - yargs "^16.1.1" - react-native-webview@^13.15.0: version "13.15.0" resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.15.0.tgz#b6d2f8d8dd65897db76659ddd8198d2c74ec5a79" @@ -13202,6 +13301,13 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + resolve-pkg-maps@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" @@ -14136,6 +14242,19 @@ sucrase@3.35.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" +sucrase@~3.35.1: + version "3.35.1" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.1.tgz#4619ea50393fe8bd0ae5071c26abd9b2e346bfe1" + integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + tinyglobby "^0.2.11" + ts-interface-checker "^0.1.9" + sudo-prompt@^8.2.0: version "8.2.5" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" @@ -14311,11 +14430,6 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -thirty-two@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thirty-two/-/thirty-two-1.0.2.tgz#4ca2fffc02a51290d2744b9e3f557693ca6b627a" - integrity sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA== - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -14344,7 +14458,7 @@ tiny-invariant@^1.3.3: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== -tinyglobby@^0.2.14: +tinyglobby@^0.2.11, tinyglobby@^0.2.14: version "0.2.15" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== @@ -14403,13 +14517,6 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -topo@2.x.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/topo/-/topo-2.1.1.tgz#d117450d1875f49056fb763a1adfde03c77b67a6" - integrity sha512-ZPrPP5nwzZy1fw9abHQH2k+YarTgp9UMAztcB3MmlcZSif63Eg+az05p6wTDaZmnqpS3Mk7K+2W60iHarlz8Ug== - dependencies: - hoek "4.x.x" - toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -14644,7 +14751,7 @@ typical@^5.2.0: resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -ua-parser-js@1.0.2: +ua-parser-js@1.0.2, ua-parser-js@^0.7.33: version "1.0.2" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775" integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg== @@ -14654,13 +14761,6 @@ ua-parser-js@1.0.33: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.33.tgz#f21f01233e90e7ed0f059ceab46eb190ff17f8f4" integrity sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ== -uid-safe@^2.0.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" - integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== - dependencies: - random-bytes "~1.0.0" - ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -14676,11 +14776,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -underscore@^1.8.3: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" @@ -14850,7 +14945,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4: +util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -15322,11 +15417,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" @@ -15349,19 +15439,6 @@ yargs@^15.1.0: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yargs@^17.3.1, yargs@^17.5.1, yargs@^17.6.2, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"