From 8a3ddd8596e6ffabf9882275f7edd457c49437a8 Mon Sep 17 00:00:00 2001 From: Bettenbuk Zoltan Date: Fri, 30 Aug 2019 18:39:06 +0200 Subject: [PATCH] feat: SVG icons --- android/app/proguard-rules.pro | 3 + android/sdk/build.gradle | 9 +- .../meet/sdk/ReactInstanceManagerHolder.java | 2 +- android/settings.gradle | 4 +- css/_base.scss | 4 + css/_font.scss | 235 --- css/_toolbars.scss | 166 +- css/_videolayout_default.scss | 7 +- css/main.scss | 6 - doc/adding-an-icon.md | 12 - fonts/jitsi.eot | Bin 11300 -> 0 bytes fonts/jitsi.svg | 79 - fonts/jitsi.ttf | Bin 11144 -> 0 bytes fonts/jitsi.woff | Bin 11220 -> 0 bytes fonts/selection.json | 1 - ios/Podfile | 2 +- ios/Podfile.lock | 12 +- ios/sdk/sdk.xcodeproj/project.pbxproj | 51 - metro.config.js | 36 +- package-lock.json | 1342 ++++++++++++++++- package.json | 4 +- .../components/AbstractStatelessAvatar.js | 14 +- .../features/base/avatar/components/Avatar.js | 3 +- .../components/native/StatelessAvatar.js | 16 +- .../avatar/components/web/StatelessAvatar.js | 9 +- .../dialog/components/native/BaseDialog.js | 4 +- react/features/base/font-icons/Icon.js | 18 - react/features/base/font-icons/index.js | 1 - react/features/base/icons/components/Icon.js | 81 + react/features/base/icons/components/index.js | 3 + react/features/base/icons/index.js | 4 + react/features/base/icons/svg/AUD.svg | 5 + react/features/base/icons/svg/HD.svg | 5 + react/features/base/icons/svg/LD.svg | 5 + react/features/base/icons/svg/SD.svg | 5 + react/features/base/icons/svg/add.svg | 5 + react/features/base/icons/svg/arrow_back.svg | 5 + react/features/base/icons/svg/bluetooth.svg | 5 + .../base/icons/svg/blur-background.svg | 16 + .../base/icons/svg/camera-disabled.svg | 5 + .../base/icons/svg/camera-take-picture.svg | 6 + react/features/base/icons/svg/camera.svg | 5 + react/features/base/icons/svg/cancel.svg | 5 + react/features/base/icons/svg/chat-unread.svg | 5 + react/features/base/icons/svg/chat.svg | 5 + react/features/base/icons/svg/check.svg | 5 + react/features/base/icons/svg/close.svg | 5 + .../base/icons/svg/closed_caption.svg | 5 + .../base/icons/svg/dominant-speaker.svg | 5 + react/features/base/icons/svg/enlarge.svg | 5 + react/features/base/icons/svg/event_note.svg | 5 + .../base/icons/svg/exit-full-screen.svg | 5 + react/features/base/icons/svg/feedback.svg | 5 + react/features/base/icons/svg/full-screen.svg | 5 + react/features/base/icons/svg/gsm-bars.svg | 5 + react/features/base/icons/svg/hangup.svg | 5 + react/features/base/icons/svg/headset.svg | 5 + react/features/base/icons/svg/index.js | 69 + react/features/base/icons/svg/info.svg | 5 + react/features/base/icons/svg/invite.svg | 5 + react/features/base/icons/svg/kick.svg | 5 + react/features/base/icons/svg/link.svg | 5 + react/features/base/icons/svg/menu-down.svg | 5 + react/features/base/icons/svg/menu-up.svg | 5 + react/features/base/icons/svg/menu.svg | 5 + .../base/icons/svg/mic-camera-combined.svg | 5 + .../features/base/icons/svg/mic-disabled.svg | 5 + react/features/base/icons/svg/microphone.svg | 5 + .../features/base/icons/svg/navigate_next.svg | 5 + react/features/base/icons/svg/ninja.svg | 5 + react/features/base/icons/svg/open_in_new.svg | 5 + react/features/base/icons/svg/phone-talk.svg | 5 + react/features/base/icons/svg/phone.svg | 5 + react/features/base/icons/svg/play.svg | 5 + .../features/base/icons/svg/presentation.svg | 8 + react/features/base/icons/svg/public.svg | 5 + .../base/icons/svg/radio_button_checked.svg | 5 + .../base/icons/svg/radio_button_unchecked.svg | 5 + react/features/base/icons/svg/raised-hand.svg | 5 + react/features/base/icons/svg/rec.svg | 5 + react/features/base/icons/svg/restore.svg | 5 + react/features/base/icons/svg/search.svg | 5 + .../base/icons/svg/security-locked.svg | 5 + react/features/base/icons/svg/security.svg | 5 + react/features/base/icons/svg/send.svg | 5 + react/features/base/icons/svg/settings.svg | 5 + .../features/base/icons/svg/share-desktop.svg | 5 + react/features/base/icons/svg/share-doc.svg | 5 + .../features/base/icons/svg/shared-video.svg | 5 + .../base/icons/svg/signal_cellular_0.svg | 5 + .../base/icons/svg/signal_cellular_1.svg | 5 + .../base/icons/svg/signal_cellular_2.svg | 5 + react/features/base/icons/svg/speaker.svg | 5 + react/features/base/icons/svg/star.svg | 5 + react/features/base/icons/svg/stop.svg | 5 + .../features/base/icons/svg/switch-camera.svg | 5 + react/features/base/icons/svg/thumb-menu.svg | 5 + react/features/base/icons/svg/tiles-many.svg | 5 + .../base/icons/svg/visibility-off.svg | 5 + react/features/base/icons/svg/visibility.svg | 5 + react/features/base/icons/svg/volume.svg | 5 + react/features/base/participants/constants.js | 6 +- react/features/base/participants/functions.js | 8 +- .../base/participants/preloadImage.native.js | 4 +- .../base/participants/preloadImage.web.js | 4 +- react/features/base/react/base.js | 8 + .../react/components/AbstractContainer.js | 5 + .../base/react/components/base.native.js | 3 + .../base/react/components/base.web.js | 3 + .../react/components/native/BackButton.js | 4 +- .../react/components/native/BaseIndicator.js | 4 +- .../NavigateSectionListEmptyComponent.js | 4 +- .../base/react/components/native/PagedList.js | 4 +- .../base/react/components/native/styles.js | 6 +- .../react/components/web/BaseIndicator.js | 22 +- react/features/base/styles/functions.any.js | 25 + .../components/AbstractAudioMuteButton.js | 6 +- .../base/toolbox/components/AbstractButton.js | 20 +- .../components/AbstractHangupButton.js | 4 +- .../toolbox/components/AbstractToolboxItem.js | 9 +- .../components/AbstractVideoMuteButton.js | 6 +- .../components/OverflowMenuItem.web.js | 21 +- .../toolbox/components/ToolboxItem.native.js | 17 +- .../toolbox/components/ToolboxItem.web.js | 12 +- .../blur/components/VideoBlurButton.js | 3 +- .../components/AddMeetingUrlButton.web.js | 3 +- .../ConferenceNotification.native.js | 4 +- .../chat/components/native/ChatButton.js | 5 +- .../chat/components/native/ChatInputBar.js | 4 +- .../components/native/ConnectionIndicator.js | 9 +- .../components/web/ConnectionIndicator.js | 16 +- .../components/native/AudioMutedIndicator.js | 3 +- .../native/DominantSpeakerIndicator.js | 3 +- .../components/native/ModeratorIndicator.js | 3 +- .../components/native/RaisedHandIndicator.js | 3 +- .../components/native/VideoMutedIndicator.js | 3 +- .../components/web/AudioMutedIndicator.js | 4 +- .../web/DominantSpeakerIndicator.js | 4 +- .../filmstrip/components/web/Filmstrip.js | 5 +- .../components/web/ModeratorIndicator.js | 3 +- .../components/web/RaisedHandIndicator.js | 4 +- .../components/web/VideoMutedIndicator.js | 4 +- .../native/AddPeopleDialog.js | 12 +- .../add-people-dialog/native/InviteButton.js | 3 +- .../add-people-dialog/web/AddPeopleDialog.js | 5 +- .../info-dialog/native/InfoDialogButton.js | 3 +- .../components/info-dialog/web/InfoDialog.js | 4 +- .../info-dialog/web/InfoDialogButton.js | 4 +- .../components/LocalRecordingButton.js | 7 +- .../audio-mode/components/AudioRouteButton.js | 3 +- .../components/AudioRoutePickerDialog.js | 24 +- .../incoming-call/components/AnswerButton.js | 3 +- .../incoming-call/components/DeclineButton.js | 3 +- .../components/PictureInPictureButton.js | 3 +- .../components/native/Notification.js | 4 +- .../LiveStream/native/LiveStreamButton.js | 4 +- .../LiveStream/web/LiveStreamButton.js | 4 +- .../Recording/native/RecordButton.js | 4 +- .../components/Recording/web/RecordButton.js | 4 +- .../components/AbstractKickButton.js | 3 +- .../components/AbstractMuteButton.js | 3 +- .../components/native/PinButton.js | 3 +- .../components/web/KickButton.js | 3 +- .../components/web/MuteButton.js | 3 +- .../components/web/RemoteControlButton.js | 9 +- .../components/web/RemoteVideoMenuButton.js | 10 +- .../web/RemoteVideoMenuTriggerButton.js | 6 +- .../components/web/VolumeSlider.js | 4 +- .../room-lock/components/RoomLockButton.js | 6 +- .../settings/components/web/SettingsButton.js | 3 +- .../components/ClosedCaptionButton.native.js | 5 +- .../components/ClosedCaptionButton.web.js | 4 +- .../components/AbstractToolbarButton.js | 35 +- .../components/native/AudioOnlyButton.js | 5 +- .../components/native/OverflowMenuButton.js | 3 +- .../components/native/RaiseHandButton.js | 4 +- .../components/native/ToggleCameraButton.js | 3 +- .../components/web/OverflowMenuButton.js | 5 +- .../toolbox/components/web/ToolbarButton.js | 6 +- .../toolbox/components/web/Toolbox.js | 58 +- .../video-layout/components/TileViewButton.js | 4 +- .../OverflowMenuVideoQualityItem.web.js | 17 +- .../welcome/components/SideBarItem.js | 6 +- .../welcome/components/WelcomePage.native.js | 4 +- .../welcome/components/WelcomePageLists.js | 5 +- .../components/WelcomePageSideBar.native.js | 9 +- react/features/welcome/components/styles.js | 6 +- webpack.config.js | 9 + 188 files changed, 2332 insertions(+), 848 deletions(-) delete mode 100644 css/_font.scss delete mode 100644 doc/adding-an-icon.md delete mode 100755 fonts/jitsi.eot delete mode 100755 fonts/jitsi.svg delete mode 100755 fonts/jitsi.ttf delete mode 100755 fonts/jitsi.woff delete mode 100755 fonts/selection.json delete mode 100644 react/features/base/font-icons/Icon.js delete mode 100644 react/features/base/font-icons/index.js create mode 100644 react/features/base/icons/components/Icon.js create mode 100644 react/features/base/icons/components/index.js create mode 100644 react/features/base/icons/index.js create mode 100755 react/features/base/icons/svg/AUD.svg create mode 100755 react/features/base/icons/svg/HD.svg create mode 100755 react/features/base/icons/svg/LD.svg create mode 100755 react/features/base/icons/svg/SD.svg create mode 100755 react/features/base/icons/svg/add.svg create mode 100755 react/features/base/icons/svg/arrow_back.svg create mode 100755 react/features/base/icons/svg/bluetooth.svg create mode 100755 react/features/base/icons/svg/blur-background.svg create mode 100755 react/features/base/icons/svg/camera-disabled.svg create mode 100755 react/features/base/icons/svg/camera-take-picture.svg create mode 100755 react/features/base/icons/svg/camera.svg create mode 100755 react/features/base/icons/svg/cancel.svg create mode 100755 react/features/base/icons/svg/chat-unread.svg create mode 100755 react/features/base/icons/svg/chat.svg create mode 100755 react/features/base/icons/svg/check.svg create mode 100755 react/features/base/icons/svg/close.svg create mode 100755 react/features/base/icons/svg/closed_caption.svg create mode 100755 react/features/base/icons/svg/dominant-speaker.svg create mode 100755 react/features/base/icons/svg/enlarge.svg create mode 100755 react/features/base/icons/svg/event_note.svg create mode 100755 react/features/base/icons/svg/exit-full-screen.svg create mode 100755 react/features/base/icons/svg/feedback.svg create mode 100755 react/features/base/icons/svg/full-screen.svg create mode 100755 react/features/base/icons/svg/gsm-bars.svg create mode 100755 react/features/base/icons/svg/hangup.svg create mode 100755 react/features/base/icons/svg/headset.svg create mode 100644 react/features/base/icons/svg/index.js create mode 100755 react/features/base/icons/svg/info.svg create mode 100755 react/features/base/icons/svg/invite.svg create mode 100755 react/features/base/icons/svg/kick.svg create mode 100755 react/features/base/icons/svg/link.svg create mode 100755 react/features/base/icons/svg/menu-down.svg create mode 100755 react/features/base/icons/svg/menu-up.svg create mode 100755 react/features/base/icons/svg/menu.svg create mode 100755 react/features/base/icons/svg/mic-camera-combined.svg create mode 100755 react/features/base/icons/svg/mic-disabled.svg create mode 100755 react/features/base/icons/svg/microphone.svg create mode 100755 react/features/base/icons/svg/navigate_next.svg create mode 100755 react/features/base/icons/svg/ninja.svg create mode 100755 react/features/base/icons/svg/open_in_new.svg create mode 100755 react/features/base/icons/svg/phone-talk.svg create mode 100755 react/features/base/icons/svg/phone.svg create mode 100755 react/features/base/icons/svg/play.svg create mode 100755 react/features/base/icons/svg/presentation.svg create mode 100755 react/features/base/icons/svg/public.svg create mode 100755 react/features/base/icons/svg/radio_button_checked.svg create mode 100755 react/features/base/icons/svg/radio_button_unchecked.svg create mode 100755 react/features/base/icons/svg/raised-hand.svg create mode 100755 react/features/base/icons/svg/rec.svg create mode 100755 react/features/base/icons/svg/restore.svg create mode 100755 react/features/base/icons/svg/search.svg create mode 100755 react/features/base/icons/svg/security-locked.svg create mode 100755 react/features/base/icons/svg/security.svg create mode 100755 react/features/base/icons/svg/send.svg create mode 100755 react/features/base/icons/svg/settings.svg create mode 100755 react/features/base/icons/svg/share-desktop.svg create mode 100755 react/features/base/icons/svg/share-doc.svg create mode 100755 react/features/base/icons/svg/shared-video.svg create mode 100755 react/features/base/icons/svg/signal_cellular_0.svg create mode 100755 react/features/base/icons/svg/signal_cellular_1.svg create mode 100755 react/features/base/icons/svg/signal_cellular_2.svg create mode 100755 react/features/base/icons/svg/speaker.svg create mode 100755 react/features/base/icons/svg/star.svg create mode 100755 react/features/base/icons/svg/stop.svg create mode 100755 react/features/base/icons/svg/switch-camera.svg create mode 100755 react/features/base/icons/svg/thumb-menu.svg create mode 100755 react/features/base/icons/svg/tiles-many.svg create mode 100755 react/features/base/icons/svg/visibility-off.svg create mode 100755 react/features/base/icons/svg/visibility.svg create mode 100755 react/features/base/icons/svg/volume.svg create mode 100644 react/features/base/react/base.js create mode 100644 react/features/base/react/components/base.native.js create mode 100644 react/features/base/react/components/base.web.js diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index 00c636bfcb..261aca42ab 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -83,3 +83,6 @@ -dontwarn javax.servlet.** # ^^^ We added the above when we switched minifyEnabled on. + +# Rule to avoid build errors related to SVGs. +-keep public class com.horcrux.svg.** {*;} \ No newline at end of file diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle index af5620f635..58224331fb 100644 --- a/android/sdk/build.gradle +++ b/android/sdk/build.gradle @@ -62,7 +62,7 @@ dependencies { implementation project(':react-native-keep-awake') implementation project(':react-native-linear-gradient') implementation project(':react-native-sound') - implementation project(':react-native-vector-icons') + implementation project(':react-native-svg') implementation project(':react-native-webrtc') implementation project(':react-native-webview') @@ -140,13 +140,6 @@ android.libraryVariants.all { def variant -> mergeAssetsTask.doLast { def assetsDir = mergeAssetsTask.outputDir - // Bundle fonts - // - copy { - from("${projectDir}/../../fonts/jitsi.ttf") - into("${assetsDir}/fonts") - } - // Bundle sounds // copy { diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java index 9c3e68b799..4c04571136 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java @@ -192,7 +192,7 @@ class ReactInstanceManagerHolder { new com.calendarevents.CalendarEventsPackage(), new com.corbt.keepawake.KCKeepAwakePackage(), new com.facebook.react.shell.MainReactPackage(), - new com.oblador.vectoricons.VectorIconsPackage(), + new com.horcrux.svg.SvgPackage(), new com.ocetnik.timer.BackgroundTimerPackage(), new com.reactnativecommunity.asyncstorage.AsyncStoragePackage(), new com.reactnativecommunity.netinfo.NetInfoPackage(), diff --git a/android/settings.gradle b/android/settings.gradle index 4aaedbdb1a..3afe34e33b 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -19,8 +19,8 @@ include ':react-native-linear-gradient' project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') include ':react-native-sound' project(':react-native-sound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound/android') -include ':react-native-vector-icons' -project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') +include ':react-native-svg' +project(':react-native-svg').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-svg/android') include ':react-native-webrtc' project(':react-native-webrtc').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webrtc/android') include ':react-native-webview' diff --git a/css/_base.scss b/css/_base.scss index 21da8b2879..119db372ea 100644 --- a/css/_base.scss +++ b/css/_base.scss @@ -33,6 +33,10 @@ body { } } +svg { + fill: white; +} + /** * AtlasKitThemeProvider sets a background color on an app-wrapping div, thereby * preventing transparency in filmstrip-only mode. The selector chosen to diff --git a/css/_font.scss b/css/_font.scss deleted file mode 100644 index 3fb86859c0..0000000000 --- a/css/_font.scss +++ /dev/null @@ -1,235 +0,0 @@ -@font-face { - font-family: 'jitsi'; - src: url('../fonts/jitsi.eot?icrce1'); - src: url('../fonts/jitsi.eot?icrce1#iefix') format('embedded-opentype'), - url('../fonts/jitsi.ttf?icrce1') format('truetype'), - url('../fonts/jitsi.woff?icrce1') format('woff'), - url('../fonts/jitsi.svg?icrce1#jitsi') format('svg'); - font-weight: normal; - font-style: normal; -} - -[class^="icon-"], [class*=" icon-"] { - font-family: 'jitsi'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1.22em; - font-size: 1.22em; - cursor: default; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.icon-cancel:before { - content: "\e91c"; -} -.icon-check:before { - content: "\e91b"; -} -.icon-send:before { - content: "\e911"; -} -.icon-blur-background:before { - content: "\e90f"; - color: #a4b8d1; -} -.icon-speaker:before { - content: "\e92d"; -} -.icon-rec:before { - content: "\e92b"; -} -.icon-camera-take-picture:before { - content: "\e92a"; -} -.icon-AUD:before { - content: "\e900"; -} -.icon-HD:before { - content: "\e927"; -} -.icon-LD:before { - content: "\e928"; -} -.icon-SD:before { - content: "\e929"; -} -.icon-gsm-bars:before { - content: "\e926"; -} -.icon-info:before { - content: "\e922"; -} -.icon-mic-camera-combined:before { - content: "\e903"; -} -.icon-feedback:before { - content: "\e91d"; -} -.icon-hangup:before { - content: "\e905"; -} -.icon-chat:before { - content: "\e906"; -} -.icon-share-doc:before { - content: "\e908"; -} -.icon-kick:before { - content: "\e904"; -} -.icon-menu-up:before { - content: "\e91f"; -} -.icon-menu-down:before { - content: "\e920"; -} -.icon-full-screen:before { - content: "\e90b"; -} -.icon-exit-full-screen:before { - content: "\e90c"; -} -.icon-security:before { - content: "\e90d"; -} -.icon-security-locked:before { - content: "\e90e"; -} -.icon-microphone:before { - content: "\e910"; -} -.icon-mic-disabled:before { - content: "\e912"; -} -.icon-raised-hand:before { - content: "\e91e"; -} -.icon-link:before { - content: "\e913"; -} -.icon-shared-video:before { - content: "\e914"; -} -.icon-settings:before { - content: "\e915"; -} -.icon-star:before { - content: "\e916"; -} -.icon-switch-camera:before { - content: "\e921"; -} -.icon-share-desktop:before { - content: "\e917"; -} -.icon-camera:before { - content: "\e918"; -} -.icon-camera-disabled:before { - content: "\e919"; -} -.icon-volume:before { - content: "\e91a"; -} -.icon-presentation:before { - content: "\e603"; -} -.icon-visibility:before { - content: "\e923"; -} -.icon-visibility-off:before { - content: "\e924"; -} -.icon-enlarge:before { - content: "\e90a"; -} -.icon-signal_cellular_0:before { - content: "\e901"; -} -.icon-signal_cellular_1:before { - content: "\e902"; -} -.icon-signal_cellular_2:before { - content: "\e907"; -} -.icon-phone:before { - content: "\e0cd"; -} -.icon-radio_button_unchecked:before { - content: "\e836"; -} -.icon-radio_button_checked:before { - content: "\e837"; -} -.icon-search:before { - content: "\e8b6"; -} -.icon-chat-unread:before { - content: "\e0b7"; -} -.icon-closed_caption:before { - content: "\e930"; -} -.icon-tiles-many:before { - content: "\e92e"; -} -.icon-close:before { - content: "\e5cd"; -} -.icon-open_in_new:before { - content: "\e89e"; -} -.icon-restore:before { - content: "\e8b3"; -} -.icon-navigate_next:before { - content: "\e409"; -} -.icon-menu:before { - content: "\e5d2"; -} -.icon-arrow_back:before { - content: "\e5c4"; -} -.icon-public:before { - content: "\e80b"; -} -.icon-event_note:before { - content: "\e616"; -} -.icon-bluetooth:before { - content: "\e1aa"; -} -.icon-headset:before { - content: "\e310"; -} -.icon-phone-talk:before { - content: "\e61d"; -} -.icon-thumb-menu:before { - content: "\e5d4"; -} -.icon-ninja:before { - content: "\e909"; -} -.icon-invite:before { - content: "\e145"; -} -.icon-add:before { - content: "\e146"; -} -.icon-play:before { - content: "\f04b"; -} -.icon-stop:before { - content: "\f04d"; -} -.icon-dominant-speaker:before { - content: "\f0a1"; -} diff --git a/css/_toolbars.scss b/css/_toolbars.scss index 70b78532a3..d217895065 100644 --- a/css/_toolbars.scss +++ b/css/_toolbars.scss @@ -73,8 +73,62 @@ .button-group-center { justify-content: center; - .toolbox-icon { - margin: 0px 4px; + + .toolbox-button { + + .toolbox-icon { + background-color: #fff; + border-radius: 50%; + border: 1px solid #d1dbe8; + margin: 0px 4px; + width: 38px; + height: 38px; + + &:hover { + background-color: #daebfa; + border: 1px solid #daebfa; + } + + &.toggled { + background: #2a3a4b; + border: 1px solid #5e6d7a; + + svg { + fill: #fff; + } + + &:hover { + background-color: #5e6d7a; + } + } + + &.disabled, .disabled & { + cursor: initial; + color: #fff; + background-color: #a4b8d1; + } + + svg { + fill: #5e6d7a; + } + } + + &:nth-child(2) { + .toolbox-icon { + background-color: $hangupColor; + border: 1px solid $hangupColor; + width: 40px; + height: 40px; + + &:hover { + background-color: $hangupColor; + } + + svg { + fill: #fff; + } + } + } } } @@ -82,75 +136,6 @@ justify-content: flex-end; } - i { - border-radius: 5px; - cursor: pointer; - display: block; - font-size: inherit; - height: 100%; - line-height: inherit; - width: 100%; - } - - i:hover { - background: $newToolbarButtonHoverColor; - } - - i.toggled { - background: $newToolbarButtonToggleColor; - } - - i.toggled:hover { - background: $newToolbarButtonHoverColor; - } - - .icon-hangup { - background-color: #e12d2d; - color: #fff; - border-radius: 50%; - width: 40px; - height: 40px; - - &:hover { - background-color: #e54b4b; - } - } - i.disabled, .disabled i { - cursor: initial !important; - color: #fff !important; - background-color: #a4b8d1 !important; - } - - .icon-mic-disabled, .icon-microphone, .icon-camera-disabled, .icon-camera { - background-color: #fff; - color: #5e6d7a; - border-radius: 50%; - border: 1px solid #d1dbe8; - width: 38px; - height: 38px; - - &:hover { - background-color: #daebfa; - border: 1px solid #daebfa; - } - - &.toggled { - background: #2a3a4b; - color: #fff; - border: 1px solid #5e6d7a; - - &:hover { - background-color: #5e6d7a; - } - } - - &.disabled, .disabled & { - cursor: initial; - color: #fff; - background-color: #a4b8d1; - } - } - .overflow-menu { font-size: 1.2em; list-style-type: none; @@ -191,14 +176,6 @@ cursor: initial; color: #3b475c; } - - i.toggled { - background: inherit; - } - - i.toggled:hover { - background: inherit; - } } .beta-tag { @@ -227,6 +204,10 @@ max-width: 24px; max-height: 24px; } + + svg { + fill: #B8C7E0 !important; + } } .profile-text { @@ -265,9 +246,26 @@ } .toolbox-icon { - height: $newToolbarSize; + display: flex; + border-radius: 5px; + flex-direction: column; font-size: 24px; + height: $newToolbarSize; + justify-content: center; width: $newToolbarSize; + + &:hover, &.toggled { + background: $newToolbarButtonHoverColor; + } + + &.disabled { + cursor: initial !important; + background-color: #a4b8d1 !important; + + svg { + fill: #fff !important; + } + } } } } @@ -297,10 +295,6 @@ background-color: $AOTToolbarButtonHoverColor; } - .icon-hangup { - color: $hangupColor; - } - .toolbox-button { color: $toolbarButtonColor; cursor: pointer; @@ -325,10 +319,6 @@ width: $newToolbarSize; } - .icon-hangup { - font-size: $newToolbarHangupFontSize; - } - .disabled { cursor: initial; } diff --git a/css/_videolayout_default.scss b/css/_videolayout_default.scss index 6fcdb2a3d2..34007992b7 100644 --- a/css/_videolayout_default.scss +++ b/css/_videolayout_default.scss @@ -344,8 +344,11 @@ /** * Toolbar icon internal i elements (font icons). */ -.toolbar-icon>i { - line-height: $thumbnailToolbarHeight; +.toolbar-icon>div { + height: $thumbnailToolbarHeight; + display: flex; + flex-direction: column; + justify-content: center; } /** diff --git a/css/main.scss b/css/main.scss index cc7b86f8b2..93d38b1acb 100644 --- a/css/main.scss +++ b/css/main.scss @@ -23,12 +23,6 @@ $flagsImagePath: "../images/"; @import "../node_modules/bc-css-flags/dist/css/bc-css-flags.scss"; /* Flags END */ -/* Fonts BEGIN */ - -@import 'font'; - -/* Fonts END */ - /* Modules BEGIN */ @import 'aui_reset'; diff --git a/doc/adding-an-icon.md b/doc/adding-an-icon.md deleted file mode 100644 index 9d97cc6548..0000000000 --- a/doc/adding-an-icon.md +++ /dev/null @@ -1,12 +0,0 @@ -### Adding an icon to the font file (e.g. for the floating menu) -1. Go to https://icomoon.io/app/ -2. Go to "Manage Projects" from the menu on the top left. -3. Use "Import project" and select fonts/selection.json from Jitsi Meet. -4. Click "load". -5. Add the new icons using the "Add icons from library" button... -6. Go to "generate font" and make sure the identifiers for the new icons are correct. -7. Download the result in a zip file using the "download" button. -8. Copy selection.json and fonts/jitsi.* from the zip file to fonts/ in Jitsi Meet -9. Copy the class for the new icon from style.css in the zip file to css/_font.scss in Jitsi Meet (do *not* copy the whole file) - -Sample commit: https://github.com/jitsi/jitsi-meet/commit/68bc819b89aec12364fcf07b81efa83a1900eed6 diff --git a/fonts/jitsi.eot b/fonts/jitsi.eot deleted file mode 100755 index fb4a119951d2ae372c9174d2914bc4d103742e7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11300 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 P;p19e#Jw?_>t6p4F - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/jitsi.ttf b/fonts/jitsi.ttf deleted file mode 100755 index 1b238bd0809ab0340294a033d1c8f519687073cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11144 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 Q*6<0fF5=!;%?+Rb2hq|#A#`(j=3_wIin))zjLo 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 h@eg2PhoQ&%UR#i{6F7ALT>;7 diff --git a/fonts/selection.json b/fonts/selection.json deleted file mode 100755 index cb063e42d9..0000000000 --- a/fonts/selection.json +++ /dev/null @@ -1 +0,0 @@ -{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M726 666l-154-154 154-154-60-60-154 154-154-154-60 60 154 154-154 154 60 60 154-154 154 154zM512 86q176 0 301 125t125 301-125 301-301 125-301-125-125-301 125-301 301-125z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cancel"],"grid":24},"attrs":[],"properties":{"order":1393,"ligatures":"cancel","id":594,"prevSize":24,"code":59676,"name":"cancel"},"setIdx":0,"setId":2,"iconIdx":594},{"icon":{"paths":["M384 690l452-452 60 60-512 512-238-238 60-60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["check"],"grid":24},"attrs":[],"properties":{"order":1392,"ligatures":"check","id":595,"prevSize":24,"code":59675,"name":"check"},"setIdx":0,"setId":2,"iconIdx":595},{"icon":{"paths":["M86 896v-298l640-86-640-86v-298l896 384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":[],"grid":24},"attrs":[],"properties":{"order":1391,"ligatures":"send","name":"send","id":174,"prevSize":24,"code":59665},"setIdx":1,"setId":1,"iconIdx":0},{"icon":{"paths":["M896 812v-600h-768v600h768zM896 128q34 0 60 26t26 60v596q0 34-26 60t-60 26h-768q-34 0-60-26t-26-60v-596q0-34 26-60t60-26h768zM598 682l-86 108-86-108h172zM256 426v172l-106-86zM768 426l106 86-106 86v-172zM512 234l86 108h-172z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":[],"grid":24},"attrs":[],"properties":{"order":1389,"ligatures":"settings_overscan","name":"enlarge","id":801,"prevSize":24,"code":59658},"setIdx":1,"setId":1,"iconIdx":1},{"icon":{"paths":["M938 86v852h-852zM854 292l-562 562h562v-562z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["signal_cellular_0"],"grid":24},"attrs":[{}],"properties":{"order":1,"id":2,"name":"signal_cellular_0","prevSize":24,"code":59649},"setIdx":1,"setId":1,"iconIdx":2},{"icon":{"paths":["M86 938l852-852v256h-170v596h-682zM854 938v-84h84v84h-84zM854 768v-342h84v342h-84z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["signal_cellular_1"],"grid":24},"attrs":[{}],"properties":{"order":2,"id":1,"name":"signal_cellular_1","prevSize":24,"code":59650},"setIdx":1,"setId":1,"iconIdx":3},{"icon":{"paths":["M86 938l852-852v852h-852z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["signal_cellular_2"],"grid":24},"attrs":[{}],"properties":{"order":3,"id":0,"name":"signal_cellular_2","prevSize":24,"code":59655},"setIdx":1,"setId":1,"iconIdx":4},{"icon":{"paths":["M282 460c62 120 162 220 282 282l94-94c12-12 30-16 44-10 48 16 100 24 152 24 24 0 42 18 42 42v150c0 24-18 42-42 42-400 0-726-326-726-726 0-24 18-42 42-42h150c24 0 42 18 42 42 0 54 8 104 24 152 4 14 2 32-10 44z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["phone"],"defaultCode":57549,"grid":24},"attrs":[],"properties":{"ligatures":"call, local_phone, phone","id":120,"order":1388,"prevSize":24,"code":57549,"name":"phone"},"setIdx":1,"setId":1,"iconIdx":5},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio_button_unchecked"],"defaultCode":59446,"grid":24},"attrs":[],"properties":{"ligatures":"panorama_fish_eye, radio_button_unchecked","id":540,"order":1385,"prevSize":24,"code":59446,"name":"radio_button_unchecked"},"setIdx":1,"setId":1,"iconIdx":6},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426zM512 298c118 0 214 96 214 214s-96 214-214 214-214-96-214-214 96-214 214-214z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio_button_checked"],"defaultCode":59447,"grid":24},"attrs":[],"properties":{"ligatures":"radio_button_checked","id":610,"order":1386,"prevSize":24,"code":59447,"name":"radio_button_checked"},"setIdx":1,"setId":1,"iconIdx":7},{"icon":{"paths":["M406 598c106 0 192-86 192-192s-86-192-192-192-192 86-192 192 86 192 192 192zM662 598l212 212-64 64-212-212v-34l-12-12c-48 42-112 66-180 66-154 0-278-122-278-276s124-278 278-278 276 124 276 278c0 68-24 132-66 180l12 12h34z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["search"],"defaultCode":59574,"grid":24},"attrs":[],"properties":{"ligatures":"search","id":655,"order":1387,"prevSize":24,"code":59574,"name":"search"},"setIdx":1,"setId":1,"iconIdx":8},{"icon":{"paths":["M768 342v-86h-512v86h512zM598 598v-86h-342v86h342zM256 384v86h512v-86h-512zM854 86c46 0 84 38 84 84v512c0 46-38 86-84 86h-598l-170 170v-768c0-46 38-84 84-84h684z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chat"],"defaultCode":57527,"grid":24},"attrs":[],"properties":{"ligatures":"chat","id":145,"order":1382,"prevSize":24,"code":57527,"name":"chat-unread"},"setIdx":1,"setId":1,"iconIdx":9},{"icon":{"paths":["M768 470v-44c0-24-18-42-42-42h-128c-24 0-44 18-44 42v172c0 24 20 42 44 42h128c24 0 42-18 42-42v-44h-64v22h-86v-128h86v22h64zM470 470v-44c0-24-20-42-44-42h-128c-24 0-42 18-42 42v172c0 24 18 42 42 42h128c24 0 44-18 44-42v-44h-64v22h-86v-128h86v22h64zM810 170c46 0 86 40 86 86v512c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-512c0-46 38-86 86-86h596z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["closed_caption"],"grid":24},"attrs":[{}],"properties":{"order":1,"id":0,"prevSize":24,"code":59696,"name":"closed_caption"},"setIdx":1,"setId":1,"iconIdx":10},{"icon":{"paths":["M113.778 0h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM170.667 113.778c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM113.778 568.889h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM170.667 682.667c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM682.667 0h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM739.556 113.778c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778zM682.667 568.889h227.556c62.838 0 113.778 50.94 113.778 113.778v227.556c0 62.838-50.94 113.778-113.778 113.778h-227.556c-62.838 0-113.778-50.94-113.778-113.778v-227.556c0-62.838 50.94-113.778 113.778-113.778zM739.556 682.667c-31.419 0-56.889 25.47-56.889 56.889v113.778c0 31.419 25.47 56.889 56.889 56.889h113.778c31.419 0 56.889-25.47 56.889-56.889v-113.778c0-31.419-25.47-56.889-56.889-56.889h-113.778z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":24,"tags":["tiles-many"]},"attrs":[{}],"properties":{"order":1377,"id":1065,"name":"tiles-many","prevSize":24,"code":59694},"setIdx":1,"setId":1,"iconIdx":11},{"icon":{"paths":["M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["close"],"defaultCode":58829,"grid":24},"attrs":[],"properties":{"ligatures":"clear, close","id":157,"order":1313,"prevSize":24,"code":58829,"name":"close"},"setIdx":1,"setId":1,"iconIdx":12},{"icon":{"paths":["M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["open_in_new"],"defaultCode":59550,"grid":24},"attrs":[],"properties":{"ligatures":"launch, open_in_new","id":1047,"order":1314,"prevSize":24,"name":"open_in_new","code":59550},"setIdx":1,"setId":1,"iconIdx":13},{"icon":{"paths":["M512 342h64v180l150 90-32 52-182-110v-212zM554 128c212 0 384 172 384 384s-172 384-384 384c-106 0-200-42-270-112l60-62c54 54 128 88 210 88 166 0 300-132 300-298s-134-298-300-298-298 132-298 298h128l-172 172-4-6-166-166h128c0-212 172-384 384-384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["restore"],"defaultCode":59571,"grid":24},"attrs":[],"properties":{"ligatures":"history, restore","id":1048,"order":1315,"prevSize":24,"code":59571,"name":"restore"},"setIdx":1,"setId":1,"iconIdx":14},{"icon":{"paths":["M426 256l256 256-256 256-60-60 196-196-196-196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate_next"],"defaultCode":58377,"grid":24},"attrs":[],"properties":{"ligatures":"chevron_right, navigate_next","id":1049,"order":1316,"prevSize":24,"code":58377,"name":"navigate_next"},"setIdx":1,"setId":1,"iconIdx":15},{"icon":{"paths":["M128 256h768v86h-768v-86zM128 554v-84h768v84h-768zM128 768v-86h768v86h-768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["menu"],"defaultCode":58834,"grid":24},"attrs":[],"properties":{"ligatures":"menu","id":1050,"order":1317,"prevSize":24,"code":58834,"name":"menu"},"setIdx":1,"setId":1,"iconIdx":16},{"icon":{"paths":["M854 470v84h-520l238 240-60 60-342-342 342-342 60 60-238 240h520z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_back"],"defaultCode":58820,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_back","id":1051,"order":1318,"prevSize":24,"code":58820,"name":"arrow_back"},"setIdx":1,"setId":1,"iconIdx":17},{"icon":{"paths":["M764 742c56-60 90-142 90-230 0-142-88-266-214-316v18c0 46-40 84-86 84h-84v86c0 24-20 42-44 42h-84v86h256c24 0 42 18 42 42v128h42c38 0 70 26 82 60zM470 850v-82c-46 0-86-40-86-86v-42l-204-204c-6 24-10 50-10 76 0 174 132 318 300 338zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["public"],"defaultCode":59403,"grid":24},"attrs":[],"properties":{"ligatures":"public","id":1053,"order":1320,"prevSize":24,"code":59403,"name":"public"},"setIdx":1,"setId":1,"iconIdx":18},{"icon":{"paths":["M598 598v84h-300v-84h300zM810 810v-468h-596v468h596zM810 128c46 0 86 40 86 86v596c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h42v-86h86v86h340v-86h86v86h42zM726 426v86h-428v-86h428z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["event_note"],"defaultCode":58902,"grid":24},"attrs":[],"properties":{"ligatures":"event_note","id":1054,"order":1321,"prevSize":24,"code":58902,"name":"event_note"},"setIdx":1,"setId":1,"iconIdx":19},{"icon":{"paths":["M550 696l-80-82v162zM470 248v162l80-82zM670 328l-184 184 184 184-244 242h-42v-324l-196 196-60-60 238-238-238-238 60-60 196 196v-324h42zM834 286c40 64 62 142 62 222 0 84-24 160-66 226l-50-50c26-52 42-110 42-172s-16-120-42-172zM608 512l98-98c12 30 20 64 20 98s-8 70-20 100z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bluetooth_searching"],"defaultCode":57770,"grid":24},"attrs":[],"properties":{"ligatures":"bluetooth_audio, bluetooth_searching","id":1056,"order":1323,"prevSize":24,"code":57770,"name":"bluetooth"},"setIdx":1,"setId":1,"iconIdx":20},{"icon":{"paths":["M512 42c212 0 384 172 384 384v300c0 70-58 128-128 128h-128v-342h170v-86c0-166-132-298-298-298s-298 132-298 298v86h170v342h-128c-70 0-128-58-128-128v-300c0-212 172-384 384-384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["headset"],"defaultCode":58128,"grid":24},"attrs":[],"properties":{"ligatures":"headset","id":1057,"order":1324,"prevSize":24,"code":58128,"name":"headset"},"setIdx":1,"setId":1,"iconIdx":21},{"icon":{"paths":["M640 512c0-70-58-128-128-128v-86c118 0 214 96 214 214h-86zM810 512c0-166-132-298-298-298v-86c212 0 384 172 384 384h-86zM854 662c24 0 42 18 42 42v150c0 24-18 42-42 42-400 0-726-326-726-726 0-24 18-42 42-42h150c24 0 42 18 42 42 0 54 8 104 24 152 4 14 2 32-10 44l-94 94c62 122 162 220 282 282l94-94c12-12 30-14 44-10 48 16 98 24 152 24z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["phone_in_talk"],"defaultCode":58909,"grid":24},"attrs":[],"properties":{"ligatures":"phone_in_talk","id":1058,"order":1325,"prevSize":24,"code":58909,"name":"phone-talk"},"setIdx":1,"setId":1,"iconIdx":22},{"icon":{"paths":["M512 682c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 342c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["more_vert"],"defaultCode":58836,"grid":24},"attrs":[],"properties":{"ligatures":"more_vert","id":1059,"order":1326,"prevSize":24,"code":58836,"name":"thumb-menu"},"setIdx":1,"setId":1,"iconIdx":23},{"icon":{"paths":["M330.667 554.667c-0.427-14.933 6.4-29.44 17.92-39.253 32 6.827 61.867 20.053 88.747 39.253 0 29.013-23.893 52.907-53.333 52.907s-52.907-23.467-53.333-52.907zM586.667 554.667c26.88-18.773 56.747-32 88.747-38.827 11.52 9.813 18.347 24.32 17.92 38.827 0 29.867-23.893 53.76-53.333 53.76s-53.333-23.893-53.333-53.76v0zM512 384c-118.187-1.707-234.667 27.733-338.347 85.333l-2.987 42.667c0 52.48 12.373 104.107 35.84 151.040 101.12-15.36 203.093-23.040 305.493-23.040s204.373 7.68 305.493 23.040c23.467-46.933 35.84-98.56 35.84-151.040l-2.987-42.667c-103.68-57.6-220.16-87.040-338.347-85.333zM512 85.333c235.641 0 426.667 191.025 426.667 426.667s-191.025 426.667-426.667 426.667c-235.641 0-426.667-191.025-426.667-426.667s191.025-426.667 426.667-426.667z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ninja"],"grid":24},"attrs":[{}],"properties":{"order":1327,"id":1060,"name":"ninja","prevSize":24,"code":59657},"setIdx":1,"setId":1,"iconIdx":24},{"icon":{"paths":["M810 554h-256v256h-84v-256h-256v-84h256v-256h84v256h256v84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["invite"],"defaultCode":57669,"grid":24},"attrs":[],"properties":{"ligatures":"add","id":1062,"order":1329,"prevSize":24,"code":57669,"name":"invite"},"setIdx":1,"setId":1,"iconIdx":25},{"icon":{"paths":["M810 554h-256v256h-84v-256h-256v-84h256v-256h84v256h256v84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["add"],"defaultCode":57669,"grid":24},"attrs":[],"properties":{"order":1383,"id":1066,"prevSize":24,"code":57670,"name":"add"},"setIdx":1,"setId":1,"iconIdx":26},{"icon":{"paths":["M469.333 384c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z","M725.333 384c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z","M469.333 640c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z","M426.667 853.333c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M682.667 853.333c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M213.333 640c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M213.333 384c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M896 640c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M896 384c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M426.667 170.667c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M682.667 170.667c0 23.564-19.103 42.667-42.667 42.667s-42.667-19.103-42.667-42.667c0-23.564 19.103-42.667 42.667-42.667s42.667 19.103 42.667 42.667z","M725.333 640c0 47.128-38.205 85.333-85.333 85.333s-85.333-38.205-85.333-85.333c0-47.128 38.205-85.333 85.333-85.333s85.333 38.205 85.333 85.333z"],"attrs":[{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["blur-background"]},"attrs":[{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"},{"fill":"rgb(164, 184, 209)"}],"properties":{"order":1390,"id":0,"name":"blur-background","prevSize":32,"code":59663},"setIdx":1,"setId":1,"iconIdx":27},{"icon":{"paths":["M0 512c0 282.795 229.205 512 512 512s512-229.205 512-512c0-282.795-229.205-512-512-512s-512 229.205-512 512zM525.005 264.638c-20.475-24.944-16.326-61.342 9.268-81.297s62.94-15.911 83.416 9.033c16.036 19.536 38.593 52.97 60.894 97.797 81.621 164.065 89.461 340.992-26.857 506.352-8.384 11.919-17.386 23.69-27.012 35.307-20.593 24.851-57.959 28.727-83.458 8.657s-29.476-56.487-8.882-81.338c7.686-9.275 14.833-18.621 21.455-28.035 88.66-126.041 82.71-260.306 17.953-390.475-10.599-21.305-21.94-40.51-33.198-57.196-6.515-9.657-11.322-16.057-13.578-18.805zM353.479 376.54c-19.353-24.679-15.129-60.448 9.434-79.893s60.164-15.2 79.517 9.479c9.635 12.287 22.577 32.644 35.209 60.034 50.35 109.176 50.35 231.689-33.639 349.612-18.198 25.551-53.566 31.441-78.997 13.157s-31.294-53.819-13.096-79.37c57.564-80.822 57.564-160.581 22.983-235.565-8.601-18.65-16.892-31.691-21.412-37.455z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["speaker"]},"attrs":[{}],"properties":{"order":1312,"id":1063,"name":"speaker","prevSize":32,"code":59693},"setIdx":1,"setId":1,"iconIdx":28},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM581.333 590.218h-110.595v-59.233h104.338v-40.332h-104.338v-56.87h110.595v-43.539h-161.665v243.512h161.665v-43.539zM738.771 640c58.849 0 101.802-36.282 106.029-88.933h-49.717c-4.904 26.832-26.888 44.045-56.143 44.045-38.556 0-62.4-31.895-62.4-83.196s23.844-83.027 62.231-83.027c29.086 0 51.239 18.394 56.143 46.407h49.717c-3.72-52.989-48.026-91.296-105.86-91.296-70.855 0-114.485 48.77-114.485 127.916 0 79.314 43.798 128.084 114.485 128.084zM230.27 545.498h41.769l45.489 88.258h57.834l-51.408-96.19c28.072-11.138 44.306-38.138 44.306-69.189 0-48.432-32.976-78.133-86.582-78.133h-102.478v243.512h51.070v-88.258zM230.27 431.42v74.927h44.813c25.704 0 40.754-13.838 40.754-37.295 0-23.119-15.896-37.632-41.262-37.632h-44.306z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["rec"]},"attrs":[{}],"properties":{"order":1331,"id":1001,"name":"rec","prevSize":32,"code":59691},"setIdx":1,"setId":1,"iconIdx":29},{"icon":{"paths":["M725.333 512c0 117.821-95.513 213.333-213.333 213.333s-213.333-95.513-213.333-213.333c0-117.821 95.513-213.333 213.333-213.333s213.333 95.513 213.333 213.333z","M512 768c141.385 0 256-114.615 256-256s-114.615-256-256-256v0c-141.385 0-256 114.615-256 256s114.615 256 256 256v0zM512 810.667c-164.949 0-298.667-133.718-298.667-298.667s133.718-298.667 298.667-298.667v0c164.949 0 298.667 133.718 298.667 298.667s-133.718 298.667-298.667 298.667v0z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["camera-take-picture"]},"attrs":[{},{}],"properties":{"order":1332,"id":1002,"name":"camera-take-picture","prevSize":32,"code":59690},"setIdx":1,"setId":1,"iconIdx":30},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM308.25 636.7h57.225l-87.675-252.525h-62.125l-87.675 252.525h53.025l19.425-60.2h88.725l19.075 60.2zM461.9 384.175h-52.85v165.375c0 56 41.125 93.625 105.7 93.625 64.75 0 105.875-37.625 105.875-93.625v-165.375h-52.85v159.95c0 31.85-19.075 52.15-53.025 52.15-33.775 0-52.85-20.3-52.85-52.15v-159.95zM682.225 384v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM735.075 429.15v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15zM243.5 436.675l-31.675 99.050h66.15l-31.325-99.050h-3.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["AUD"]},"attrs":[{}],"properties":{"order":1333,"id":1003,"name":"AUD","prevSize":32,"code":59648},"setIdx":1,"setId":1,"iconIdx":31},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM481.359 640v-255.823h-54.273v103.18h-116.813v-103.18h-54.273v255.823h54.273v-106.903h116.813v106.903h54.273zM544.258 384v256h102.077c77.636 0 121.665-46.626 121.665-129.773 0-80.133-44.569-126.227-121.665-126.227h-102.077zM598.531 429.74v164.521h39.177c47.983 0 74.94-29.075 74.94-83.147 0-51.767-27.855-81.374-74.94-81.374h-39.177z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["HD"]},"attrs":[{}],"properties":{"order":1334,"id":1004,"name":"HD","prevSize":32,"code":59687},"setIdx":1,"setId":1,"iconIdx":32},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM472.4 590.675h-112.35v-206.5h-52.85v252.525h165.2v-46.025zM520.35 384v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM573.2 429.15v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["LD"]},"attrs":[{}],"properties":{"order":1335,"id":1005,"name":"LD","prevSize":32,"code":59688},"setIdx":1,"setId":1,"iconIdx":33},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM281.6 572.825c1.925 47.075 40.95 76.65 101.15 76.65 63.35 0 102.375-31.15 102.375-82.075 0-39.2-21.875-61.075-72.625-71.75l-30.45-6.475c-29.575-6.3-41.65-15.225-41.65-30.8 0-19.25 17.5-31.5 43.925-31.5 25.55 0 44.1 13.3 46.55 33.25h49.7c-1.575-44.975-40.95-76.125-96.6-76.125-58.275 0-96.6 31.325-96.6 78.925 0 38.5 22.575 62.475 68.6 72.1l32.9 7c30.975 6.65 43.575 15.925 43.575 32.025 0 19.075-19.425 32.375-46.9 32.375-29.75 0-50.4-13.125-52.85-33.6h-51.1zM535 390.3v252.7h99.4c75.6 0 118.475-46.025 118.475-128.1 0-79.1-43.4-124.6-118.475-124.6h-99.4zM587.85 435.45v162.4h38.15c46.725 0 72.975-28.7 72.975-82.075 0-51.1-27.125-80.325-72.975-80.325h-38.15z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["SD"]},"attrs":[{}],"properties":{"order":1336,"id":1006,"name":"SD","prevSize":32,"code":59689},"setIdx":1,"setId":1,"iconIdx":34},{"icon":{"paths":["M896 0c70.692 0 128 57.308 128 128v768c0 70.692-57.308 128-128 128s-128-57.308-128-128v-768c0-70.692 57.308-128 128-128zM512 256c70.692 0 128 57.308 128 128v512c0 70.692-57.308 128-128 128s-128-57.308-128-128v-512c0-70.692 57.308-128 128-128zM128 640v0c70.692 0 128 57.308 128 128v128c0 70.692-57.308 128-128 128s-128-57.308-128-128v-128c0-70.692 57.308-128 128-128v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["gsm-bars-black"]},"attrs":[{}],"properties":{"order":1384,"id":1007,"name":"gsm-bars","prevSize":32,"code":59686},"setIdx":1,"setId":1,"iconIdx":35},{"icon":{"paths":["M512 85.333c-235.52 0-426.667 191.147-426.667 426.667s191.147 426.667 426.667 426.667 426.667-191.147 426.667-426.667-191.147-426.667-426.667-426.667zM554.667 725.333h-85.333v-256h85.333v256zM554.667 384h-85.333v-85.333h85.333v85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["ic_info_black_24px"]},"attrs":[{}],"properties":{"order":1338,"id":1008,"name":"info","prevSize":32,"code":59682},"setIdx":1,"setId":1,"iconIdx":36},{"icon":{"paths":["M756.704 395.862l267.296-202.213v635.075l-267.296-202.213v191.923c0 12.085-11.296 21.863-25.216 21.863h-706.272c-13.92 0-25.216-9.777-25.216-21.863v-612.25c0-12.085 11.296-21.863 25.216-21.863h706.272c13.92 0 25.216 9.777 25.216 21.863v189.679zM371.338 647.772c47.817 0 86.529-40.232 86.529-89.811v-184.835c0-49.651-38.713-89.883-86.529-89.883-47.788 0-86.515 40.232-86.515 89.883v184.835c0 49.579 38.756 89.811 86.515 89.811v0zM356.754 709.93v32.78h33.718v-33.412c73.858-9.606 131.235-73.73 131.235-151.351v-88.232h-30.636v88.232c0 67.57-53.696 122.534-119.734 122.534-66.024 0-119.691-54.964-119.691-122.534v-88.232h-30.636v88.232c0 79.215 59.674 144.502 135.744 151.969v0.014z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["Combined Shape"],"grid":0},"attrs":[{}],"properties":{"order":1339,"id":1009,"name":"mic-camera-combined","prevSize":32,"code":59651},"setIdx":1,"setId":1,"iconIdx":37},{"icon":{"paths":["M42.667 896h170.667v-512h-170.667v512zM981.333 426.667c0-46.933-38.4-85.333-85.333-85.333h-269.227l40.533-194.987 1.28-13.653c0-17.493-7.253-33.707-18.773-45.227l-45.227-44.8-280.747 281.173c-15.787 15.36-25.173 36.693-25.173 60.16v426.667c0 46.933 38.4 85.333 85.333 85.333h384c35.413 0 65.707-21.333 78.507-52.053l128.853-300.8c3.84-9.813 5.973-20.053 5.973-31.147v-81.493l-0.427-0.427 0.427-3.413z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["ic_thumb_up_black_24px"],"grid":0},"attrs":[{}],"properties":{"order":1340,"id":1010,"name":"feedback","prevSize":32,"code":59677},"setIdx":1,"setId":1,"iconIdx":38},{"icon":{"paths":["M512 384c-68 0-134 10-196 30v132c0 16-10 34-24 40-42 20-80 46-114 78-8 8-18 12-30 12s-22-4-30-12l-106-106c-8-8-12-18-12-30s4-22 12-30c130-124 306-200 500-200s370 76 500 200c8 8 12 18 12 30s-4 22-12 30l-106 106c-8 8-18 12-30 12s-22-4-30-12c-34-32-72-58-114-78-14-6-24-20-24-38v-132c-62-20-128-32-196-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["call_end"],"grid":0},"attrs":[],"properties":{"id":1013,"order":1343,"ligatures":"call_end","prevSize":32,"code":59653,"name":"hangup"},"setIdx":1,"setId":1,"iconIdx":39},{"icon":{"paths":["M854 682v-512h-684v598l86-86h598zM854 86c46 0 84 38 84 84v512c0 46-38 86-84 86h-598l-170 170v-768c0-46 38-84 84-84h684z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chat_bubble_outline"],"grid":0},"attrs":[],"properties":{"id":1014,"order":1344,"ligatures":"chat_bubble_outline","prevSize":32,"code":59654,"name":"chat"},"setIdx":1,"setId":1,"iconIdx":40},{"icon":{"paths":["M554 384h236l-236-234v234zM682 598v-86h-340v86h340zM682 768v-86h-340v86h340zM598 86l256 256v512c0 46-40 84-86 84h-512c-46 0-86-38-86-84l2-684c0-46 38-84 84-84h342z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["description"],"grid":0},"attrs":[],"properties":{"id":1017,"order":1347,"ligatures":"description","prevSize":32,"code":59656,"name":"share-doc"},"setIdx":1,"setId":1,"iconIdx":41},{"icon":{"paths":["M512 214l284 426h-568zM214 726h596v84h-596v-84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["eject"],"grid":0},"attrs":[],"properties":{"id":1018,"order":1348,"ligatures":"eject","prevSize":32,"code":59652,"name":"kick"},"setIdx":1,"setId":1,"iconIdx":42},{"icon":{"paths":["M512 342l256 256-60 60-196-196-196 196-60-60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["expand_less"],"grid":0},"attrs":[],"properties":{"id":1019,"order":1349,"ligatures":"expand_less","prevSize":32,"code":59679,"name":"menu-up"},"setIdx":1,"setId":1,"iconIdx":43},{"icon":{"paths":["M708 366l60 60-256 256-256-256 60-60 196 196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["expand_more"],"grid":0},"attrs":[],"properties":{"id":1020,"order":1350,"ligatures":"expand_more","prevSize":32,"code":59680,"name":"menu-down"},"setIdx":1,"setId":1,"iconIdx":44},{"icon":{"paths":["M598 214h212v212h-84v-128h-128v-84zM726 726v-128h84v212h-212v-84h128zM214 426v-212h212v84h-128v128h-84zM298 598v128h128v84h-212v-212h84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fullscreen"],"grid":0},"attrs":[],"properties":{"id":1021,"order":1351,"ligatures":"fullscreen","prevSize":32,"code":59659,"name":"full-screen"},"setIdx":1,"setId":1,"iconIdx":45},{"icon":{"paths":["M682 342h128v84h-212v-212h84v128zM598 810v-212h212v84h-128v128h-84zM342 342v-128h84v212h-212v-84h128zM214 682v-84h212v212h-84v-128h-128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fullscreen_exit"],"grid":0},"attrs":[],"properties":{"id":1022,"order":1352,"ligatures":"fullscreen_exit","prevSize":32,"code":59660,"name":"exit-full-screen"},"setIdx":1,"setId":1,"iconIdx":46},{"icon":{"paths":["M768 854v-428h-512v428h512zM768 342c46 0 86 38 86 84v428c0 46-40 84-86 84h-512c-46 0-86-38-86-84v-428c0-46 40-84 86-84h388v-86c0-72-60-132-132-132s-132 60-132 132h-82c0-118 96-214 214-214s214 96 214 214v86h42zM512 726c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lock_open"],"grid":0},"attrs":[],"properties":{"id":1024,"order":1354,"ligatures":"lock_open","prevSize":32,"code":59661,"name":"security"},"setIdx":1,"setId":1,"iconIdx":47},{"icon":{"paths":["M768 854v-428h-512v428h512zM380 256v86h264v-86c0-72-60-132-132-132s-132 60-132 132zM768 342c46 0 86 38 86 84v428c0 46-40 84-86 84h-512c-46 0-86-38-86-84v-428c0-46 40-84 86-84h42v-86c0-118 96-214 214-214s214 96 214 214v86h42zM512 726c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lock_outline"],"grid":0},"attrs":[],"properties":{"id":1025,"order":1355,"ligatures":"lock_outline","prevSize":32,"code":59662,"name":"security-locked"},"setIdx":1,"setId":1,"iconIdx":48},{"icon":{"paths":["M738 470h72c0 146-116 266-256 286v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216s226-88 226-216zM512 598c-70 0-128-58-128-128v-256c0-70 58-128 128-128s128 58 128 128v256c0 70-58 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic"],"grid":0},"attrs":[],"properties":{"id":1027,"order":1357,"ligatures":"mic","prevSize":32,"code":59664,"name":"microphone"},"setIdx":1,"setId":1,"iconIdx":49},{"icon":{"paths":["M182 128l714 714-54 54-178-178c-32 20-72 32-110 38v140h-84v-140c-140-20-256-140-256-286h72c0 128 108 216 226 216 34 0 68-8 98-22l-70-70c-8 2-18 4-28 4-70 0-128-58-128-128v-32l-256-256zM640 476l-256-254v-8c0-70 58-128 128-128s128 58 128 128v262zM810 470c0 50-14 98-38 140l-52-54c12-26 18-54 18-86h72z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mic_off"],"grid":0},"attrs":[],"properties":{"id":1029,"order":1359,"ligatures":"mic_off","prevSize":32,"code":59666,"name":"mic-disabled"},"setIdx":1,"setId":1,"iconIdx":50},{"icon":{"paths":["M982 234v620c0 94-78 170-172 170h-310c-46 0-90-18-122-50l-336-342s54-52 56-52c10-8 22-12 34-12 10 0 18 2 26 6 2 0 184 104 184 104v-508c0-36 28-64 64-64s64 28 64 64v300h42v-406c0-36 28-64 64-64s64 28 64 64v406h42v-364c0-36 28-64 64-64s64 28 64 64v364h44v-236c0-36 28-64 64-64s64 28 64 64z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pan_tool"],"grid":0},"attrs":[],"properties":{"id":1030,"order":1360,"ligatures":"pan_tool","prevSize":32,"code":59678,"name":"raised-hand"},"setIdx":1,"setId":1,"iconIdx":51},{"icon":{"paths":["M640 598c114 0 342 56 342 170v86h-684v-86c0-114 228-170 342-170zM256 426h128v86h-128v128h-86v-128h-128v-86h128v-128h86v128zM640 512c-94 0-170-76-170-170s76-172 170-172 170 78 170 172-76 170-170 170z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["person_add"],"grid":0},"attrs":[],"properties":{"id":1032,"order":1362,"ligatures":"person_add","prevSize":32,"code":59667,"name":"link"},"setIdx":1,"setId":1,"iconIdx":52},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426zM426 704v-384l256 192z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play_circle_outline"],"grid":0},"attrs":[],"properties":{"id":1033,"order":1363,"ligatures":"play_circle_outline","prevSize":32,"code":59668,"name":"shared-video"},"setIdx":1,"setId":1,"iconIdx":53},{"icon":{"paths":["M512 662c82 0 150-68 150-150s-68-150-150-150-150 68-150 150 68 150 150 150zM830 554l90 70c8 6 10 18 4 28l-86 148c-6 10-16 12-26 8l-106-42c-22 16-46 32-72 42l-16 112c-2 10-10 18-20 18h-172c-10 0-18-8-20-18l-16-112c-26-10-50-24-72-42l-106 42c-10 4-20 2-26-8l-86-148c-6-10-4-22 4-28l90-70c-2-14-2-28-2-42s0-28 2-42l-90-70c-8-6-10-18-4-28l86-148c6-10 16-12 26-8l106 42c22-16 46-32 72-42l16-112c2-10 10-18 20-18h172c10 0 18 8 20 18l16 112c26 10 50 24 72 42l106-42c10-4 20-2 26 8l86 148c6 10 4 22-4 28l-90 70c2 14 2 28 2 42s0 28-2 42z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["settings"],"grid":0},"attrs":[],"properties":{"id":1034,"order":1364,"ligatures":"settings","prevSize":32,"code":59669,"name":"settings"},"setIdx":1,"setId":1,"iconIdx":54},{"icon":{"paths":["M512 658l160 96-42-182 142-124-188-16-72-172-72 172-188 16 142 124-42 182zM938 394l-232 202 70 300-264-160-264 160 70-300-232-202 306-26 120-282 120 282z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["star_border"],"grid":0},"attrs":[],"properties":{"id":1035,"order":1365,"ligatures":"star_border","prevSize":32,"code":59670,"name":"star"},"setIdx":1,"setId":1,"iconIdx":55},{"icon":{"paths":["M640 662l150-150-150-150v108h-256v-108l-150 150 150 150v-108h256v108zM854 170c46 0 84 40 84 86v512c0 46-38 86-84 86h-684c-46 0-84-40-84-86v-512c0-46 38-86 84-86h136l78-84h256l78 84h136z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["switch_camera"],"grid":0},"attrs":[],"properties":{"id":1036,"order":1366,"ligatures":"switch_camera","prevSize":32,"code":59681,"name":"switch-camera"},"setIdx":1,"setId":1,"iconIdx":56},{"icon":{"paths":["M896 726v-512h-768v512h768zM896 128c46 0 86 40 86 86l-2 512c0 46-38 84-84 84h-214v86h-340v-86h-214c-46 0-86-38-86-84v-512c0-46 40-86 86-86h768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tv"],"grid":0},"attrs":[],"properties":{"id":1037,"order":1367,"ligatures":"tv","prevSize":32,"code":59671,"name":"share-desktop"},"setIdx":1,"setId":1,"iconIdx":57},{"icon":{"paths":["M726 448l170-170v468l-170-170v150c0 24-20 42-44 42h-512c-24 0-42-18-42-42v-428c0-24 18-42 42-42h512c24 0 44 18 44 42v150z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["videocam"],"grid":0},"attrs":[],"properties":{"id":1038,"order":1368,"ligatures":"videocam","prevSize":32,"code":59672,"name":"camera"},"setIdx":1,"setId":1,"iconIdx":58},{"icon":{"paths":["M140 86l756 756-54 54-136-136c-6 4-16 8-24 8h-512c-24 0-42-18-42-42v-428c0-24 18-42 42-42h32l-116-116zM896 278v456l-478-478h264c24 0 44 18 44 42v150z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["videocam_off"],"grid":0},"attrs":[],"properties":{"id":1039,"order":1369,"ligatures":"videocam_off","prevSize":32,"code":59673,"name":"camera-disabled"},"setIdx":1,"setId":1,"iconIdx":59},{"icon":{"paths":["M598 138c172 38 298 192 298 374s-126 336-298 374v-88c124-36 212-150 212-286s-88-250-212-286v-88zM704 512c0 76-42 140-106 172v-344c64 32 106 96 106 172zM128 384h170l214-214v684l-214-214h-170v-256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume_up"],"grid":0},"attrs":[],"properties":{"id":1040,"order":1370,"ligatures":"volume_up","prevSize":32,"code":59674,"name":"volume"},"setIdx":1,"setId":1,"iconIdx":60},{"icon":{"paths":["M952.495 4.935h-818.689c-72.81 0-132.183 60.63-132.183 135.162v750.719c0 74.473 59.372 135.101 132.183 135.101h818.686c72.936 0 132.314-60.625 132.314-135.101v-750.722c0.003-74.532-59.378-135.159-132.311-135.159zM946.346 884.349h-806.14v-737.822h806.015l0.126 737.822z","M685.753 285.456h216.911v566.758h-216.911v-566.758z","M428.672 413.998h216.911v438.216h-216.911v-438.216z","M172.339 542.54h216.161v309.677h-216.161v-309.677z"],"width":1088,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["presentation"],"grid":0},"attrs":[],"properties":{"order":1373,"id":1043,"prevSize":32,"code":58883,"name":"presentation","ligatures":""},"setIdx":1,"setId":1,"iconIdx":61},{"icon":{"paths":["M512 384c70 0 128 58 128 128s-58 128-128 128-128-58-128-128 58-128 128-128zM512 726c118 0 214-96 214-214s-96-214-214-214-214 96-214 214 96 214 214 214zM512 192c214 0 396 132 470 320-74 188-256 320-470 320s-396-132-470-320c74-188 256-320 470-320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["visibility"],"grid":0},"attrs":[],"properties":{"order":1375,"ligatures":"remove_red_eye, visibility","id":1045,"prevSize":32,"code":59683,"name":"visibility"},"setIdx":1,"setId":1,"iconIdx":62},{"icon":{"paths":["M506 384h6c70 0 128 58 128 128v8zM322 418c-14 28-24 60-24 94 0 118 96 214 214 214 34 0 66-10 94-24l-66-66c-8 2-18 4-28 4-70 0-128-58-128-128 0-10 2-20 4-28zM86 182l54-54 756 756-54 54c-47.968-47.365-96.266-94.401-144-142-58 24-120 36-186 36-214 0-396-132-470-320 34-84 90-156 160-212-39.017-38.983-77.307-78.693-116-118zM512 298c-28 0-54 6-78 16l-92-92c52-20 110-30 170-30 214 0 394 132 468 320-32 80-82 148-146 202l-124-124c10-24 16-50 16-78 0-118-96-214-214-214z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["visibility_off"],"grid":0},"attrs":[],"properties":{"order":1376,"ligatures":"visibility_off","id":1046,"prevSize":32,"code":59684,"name":"visibility-off"},"setIdx":1,"setId":1,"iconIdx":63},{"icon":{"paths":["M790.857 529.714l-758.857 421.714c-17.714 9.714-32 1.143-32-18.857v-841.143c0-20 14.286-28.571 32-18.857l758.857 421.714c17.714 9.714 17.714 25.714 0 35.429z"],"width":808.5942857142857,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play"],"defaultCode":61515,"grid":14},"attrs":[],"properties":{"name":"play","id":75,"order":1380,"prevSize":28,"code":61515},"setIdx":1,"setId":1,"iconIdx":64},{"icon":{"paths":["M877.714 109.714v804.571c0 20-16.571 36.571-36.571 36.571h-804.571c-20 0-36.571-16.571-36.571-36.571v-804.571c0-20 16.571-36.571 36.571-36.571h804.571c20 0 36.571 16.571 36.571 36.571z"],"width":877.7142857142857,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["stop"],"defaultCode":61517,"grid":14},"attrs":[],"properties":{"name":"stop","id":77,"order":1381,"prevSize":28,"code":61517},"setIdx":1,"setId":1,"iconIdx":65},{"icon":{"paths":["M950.857 365.714c40.571 0 73.143 32.571 73.143 73.143s-32.571 73.143-73.143 73.143v219.429c0 40-33.143 73.143-73.143 73.143-101.714-84.571-265.714-200.571-464-217.143-68 22.857-91.429 102.286-46.857 148-40 65.714 11.429 112 72 159.429-35.429 69.714-182.857 70.857-235.429 22.286-33.143-101.714-82.286-203.429-42.286-332h-69.714c-50.286 0-91.429-41.143-91.429-91.429v-109.714c0-50.286 41.143-91.429 91.429-91.429h274.286c219.429 0 402.286-128 512-219.429 40 0 73.143 33.143 73.143 73.143v219.429zM877.714 710.857v-545.143c-149.143 114.286-293.714 180-438.857 196v154.286c145.143 16 289.714 80.571 438.857 194.857z"],"width":1024,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bullhorn"],"defaultCode":61601,"grid":14},"attrs":[],"properties":{"name":"dominant-speaker","id":152,"order":1379,"prevSize":28,"code":61601},"setIdx":1,"setId":1,"iconIdx":66}],"height":1024,"metadata":{"name":"jitsi"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"jitsi","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":0},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"classSelector":".icon","name":"icomoon"},"historySize":100,"showCodes":false,"search":"","showLiga":false,"gridSize":16}} \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile index e7b21ac991..070784d9a3 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -54,7 +54,7 @@ target 'JitsiMeet' do pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-community/async-storage' pod 'RNGoogleSignin', :path => '../node_modules/react-native-google-signin' pod 'RNSound', :path => '../node_modules/react-native-sound' - pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + pod 'RNSVG', :path => '../node_modules/react-native-svg' pod 'RNWatch', :path => '../node_modules/react-native-watch-connectivity' # Native pod dependencies diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 88b1fc8b9d..0bb54f44b2 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -181,7 +181,7 @@ PODS: - RNSound/Core (= 0.11.0) - RNSound/Core (0.11.0): - React - - RNVectorIcons (6.0.2): + - RNSVG (9.7.1): - React - RNWatch (0.2.0): - React @@ -225,7 +225,7 @@ DEPENDENCIES: - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)" - RNGoogleSignin (from `../node_modules/react-native-google-signin`) - RNSound (from `../node_modules/react-native-sound`) - - RNVectorIcons (from `../node_modules/react-native-vector-icons`) + - RNSVG (from `../node_modules/react-native-svg`) - RNWatch (from `../node_modules/react-native-watch-connectivity`) - yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -311,8 +311,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-google-signin" RNSound: :path: "../node_modules/react-native-sound" - RNVectorIcons: - :path: "../node_modules/react-native-vector-icons" + RNSVG: + :path: "../node_modules/react-native-svg" RNWatch: :path: "../node_modules/react-native-watch-connectivity" yoga: @@ -367,10 +367,10 @@ SPEC CHECKSUMS: RNCAsyncStorage: 8e31405a9f12fbf42c2bb330e4560bfd79c18323 RNGoogleSignin: d030c6c6591db24c3cee649f64c7babf0a1699a0 RNSound: c980916b596cc15c8dcd2f6ecd3b13c4881dbe20 - RNVectorIcons: d819334932bcda3332deb3d2c8ea4d069e0b98f9 + RNSVG: aac12785382e8fd4f28d072fe640612e34914631 RNWatch: 09738b339eceb66e4d80a2371633ca5fb380fa42 yoga: 312528f5bbbba37b4dcea5ef00e8b4033fdd9411 -PODFILE CHECKSUM: 0e3406a4217cc348dcadad5b016e8d939d4aa61f +PODFILE CHECKSUM: 86bb4d2bc94c6c76b971b9a33e5b2ced9bbfb09f COCOAPODS: 1.7.2 diff --git a/ios/sdk/sdk.xcodeproj/project.pbxproj b/ios/sdk/sdk.xcodeproj/project.pbxproj index 6524aef79a..8067a92161 100644 --- a/ios/sdk/sdk.xcodeproj/project.pbxproj +++ b/ios/sdk/sdk.xcodeproj/project.pbxproj @@ -23,7 +23,6 @@ 0BCA495F1EC4B6C600B793EE /* AudioMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495C1EC4B6C600B793EE /* AudioMode.m */; }; 0BCA49601EC4B6C600B793EE /* POSIX.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495D1EC4B6C600B793EE /* POSIX.m */; }; 0BCA49611EC4B6C600B793EE /* Proximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BCA495E1EC4B6C600B793EE /* Proximity.m */; }; - 0BCA496C1EC4BBF900B793EE /* jitsi.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0BCA496B1EC4BBF900B793EE /* jitsi.ttf */; }; 0BD906EA1EC0C00300C8C18E /* JitsiMeet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD906E81EC0C00300C8C18E /* JitsiMeet.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0F65EECE1D95DA94561BB47E /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 03F2ADC957FF109849B7FCA1 /* libPods-JitsiMeet.a */; }; 6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6C31EDC720C06D490089C899 /* recordingOn.mp3 */; }; @@ -319,7 +318,6 @@ 0BD906E31EC0C00300C8C18E /* Resources */, 0BCA49651EC4B77500B793EE /* Package React bundle */, C7BC10B338C94EEB98048E64 /* [CP] Copy Pods Resources */, - 0B64F7BE2175DFEA005009CD /* Remove unneeded fonts */, ); buildRules = ( ); @@ -376,7 +374,6 @@ 6C31EDCA20C06D530089C899 /* recordingOff.mp3 in Resources */, A4414AE020B37F1A003546E6 /* rejected.wav in Resources */, 0B49424620AD8DBD00BD2DE0 /* outgoingRinging.wav in Resources */, - 0BCA496C1EC4BBF900B793EE /* jitsi.ttf in Resources */, C6245F5D2053091D0040BE68 /* image-resize@2x.png in Resources */, 6C31EDC820C06D490089C899 /* recordingOn.mp3 in Resources */, 0BC4B8691F8C03A700CE8B21 /* CallKitIcon.png in Resources */, @@ -389,24 +386,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0B64F7BE2175DFEA005009CD /* Remove unneeded fonts */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "Remove unneeded fonts"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# We need to manually do this because react-native-vecotr-icons lists fonts as resources in the Pod spec file\n# so they are automatically added.\n\nshopt -s extglob\n\nrm -f ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/!(jitsi).ttf\n"; - }; 0BCA49651EC4B77500B793EE /* Package React bundle */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -451,21 +430,6 @@ "${PODS_ROOT}/Amplitude-iOS/Amplitude/ComodoRsaCA.der", "${PODS_ROOT}/Amplitude-iOS/Amplitude/ComodoRsaDomainValidationCA.der", "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.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/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", ); name = "[CP] Copy Pods Resources"; outputPaths = ( @@ -474,21 +438,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaCA.der", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ComodoRsaDomainValidationCA.der", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.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}/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", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; diff --git a/metro.config.js b/metro.config.js index e05e0a54c9..aa2663956e 100644 --- a/metro.config.js +++ b/metro.config.js @@ -7,13 +7,29 @@ * @format */ -module.exports = { - transformer: { - getTransformOptions: async () => ({ - transform: { - experimentalImportSupport: false, - inlineRequires: false, - }, - }), - }, -}; +const { getDefaultConfig } = require('metro-config'); + +module.exports = (async () => { + const { + resolver: { + sourceExts, + assetExts + } + } = await getDefaultConfig(); + + return { + transformer: { + babelTransformerPath: require.resolve('react-native-svg-transformer'), + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, + resolver: { + assetExts: assetExts.filter(ext => ext !== 'svg'), + sourceExts: [...sourceExts, 'svg'] + } + } +})(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1ba70219f3..41ffbf831e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1808,6 +1808,15 @@ "@babel/plugin-syntax-class-properties": "^7.0.0" } }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, "@babel/plugin-proposal-export-default-from": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz", @@ -2182,6 +2191,14 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", + "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "requires": { + "regexp-tree": "^0.1.6" + } + }, "@babel/plugin-transform-new-target": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", @@ -2226,6 +2243,15 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.5.0.tgz", + "integrity": "sha512-c5Ba8cpybZFp1Izkf2sWGuNjOxoQ32tFgBvvYvwGhi4+9f6vGiSK9Gex4uVuO/Va6YJFu41aAh1MzMjUWkp0IQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/plugin-transform-react-display-name": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz", @@ -2248,7 +2274,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz", "integrity": "sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-syntax-jsx": "^7.0.0" @@ -2271,6 +2296,14 @@ "regenerator-transform": "^0.13.3" } }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/plugin-transform-runtime": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", @@ -2440,7 +2473,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-transform-react-display-name": "^7.0.0", @@ -3069,6 +3101,911 @@ "component-url": "^0.2.1" } }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", + "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", + "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", + "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.1.tgz", + "integrity": "sha512-p6z6JJroP989jHWcuraeWpzdejehTmLUpyC9smhTBWyPN0VVGe2phbYxpPTV7Vh8XzmFrcG55idrnfWn/2oQEw==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", + "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", + "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", + "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" + }, + "@svgr/babel-preset": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.1.tgz", + "integrity": "sha512-rPFKLmyhlh6oeBv3j2vEAj2nd2QbWqpoJLKzBLjwQVt+d9aeXajVaPNEqrES2spjXKR4OxfgSs7U0NtmAEkr0Q==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", + "@svgr/babel-plugin-svg-dynamic-title": "^4.3.1", + "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", + "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", + "@svgr/babel-plugin-transform-svg-component": "^4.2.0" + } + }, + "@svgr/core": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.2.tgz", + "integrity": "sha512-N+tP5CLFd1hP9RpO83QJPZY3NL8AtrdqNbuhRgBkjE/49RnMrrRsFm1wY8pueUfAGvzn6tSXUq29o6ah8RuR5w==", + "requires": { + "@svgr/plugin-jsx": "^4.3.2", + "camelcase": "^5.3.1", + "cosmiconfig": "^5.2.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", + "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", + "requires": { + "@babel/types": "^7.4.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@svgr/plugin-jsx": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.2.tgz", + "integrity": "sha512-+1GW32RvmNmCsOkMoclA/TppNjHPLMnNZG3/Ecscxawp051XJ2MkO09Hn11VcotdC2EPrDfT8pELGRo+kbZ1Eg==", + "requires": { + "@babel/core": "^7.4.5", + "@svgr/babel-preset": "^4.3.1", + "@svgr/hast-util-to-babel-ast": "^4.3.2", + "svg-parser": "^2.0.0" + } + }, + "@svgr/plugin-svgo": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", + "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", + "requires": { + "cosmiconfig": "^5.2.1", + "merge-deep": "^3.0.2", + "svgo": "^1.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.33", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } + } + }, + "@svgr/webpack": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz", + "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==", + "requires": { + "@babel/core": "^7.4.5", + "@babel/plugin-transform-react-constant-elements": "^7.0.0", + "@babel/preset-env": "^7.4.5", + "@babel/preset-react": "^7.0.0", + "@svgr/core": "^4.3.2", + "@svgr/plugin-jsx": "^4.3.2", + "@svgr/plugin-svgo": "^4.3.1", + "loader-utils": "^1.2.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "requires": { + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + } + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", + "requires": { + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + }, + "dependencies": { + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + } + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } + }, + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "requires": { + "private": "^0.1.6" + } + }, + "regexpu-core": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "requires": { + "jsesc": "~0.5.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + } + } + }, "@tensorflow-models/body-pix": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@tensorflow-models/body-pix/-/body-pix-1.1.1.tgz", @@ -3172,6 +4109,11 @@ "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" + }, "@types/seedrandom": { "version": "2.4.27", "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", @@ -4209,6 +5151,14 @@ "util.promisify": "^1.0.0" } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, "babel-plugin-emotion": { "version": "9.2.11", "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz", @@ -4525,6 +5475,11 @@ "multicast-dns-service-types": "^1.1.0" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, "bowser": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.1.tgz", @@ -4667,6 +5622,31 @@ "pako": "~1.0.5" } }, + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + }, + "dependencies": { + "electron-to-chromium": { + "version": "1.3.245", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.245.tgz", + "integrity": "sha512-W1Tjm8VhabzYmiqLUD/sT/KTKkvZ8QpSkbTfLELBrFdnrolfkCgcbxFE3NXAxL5xedWXF74wWn0j6oVrgBdemw==" + }, + "node-releases": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz", + "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==", + "requires": { + "semver": "^5.3.0" + } + } + } + }, "bser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", @@ -4821,6 +5801,11 @@ "integrity": "sha1-vSWDDEHvq2Qzmi44H0lnc0PIRQk=", "dev": true }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==" + }, "capture-exit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", @@ -5149,6 +6134,18 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "requires": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -5520,6 +6517,22 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" }, + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", + "requires": { + "browserslist": "^4.6.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -5697,6 +6710,33 @@ "source-list-map": "^2.0.0" } }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + }, + "dependencies": { + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + } + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, "css-selector-tokenizer": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", @@ -5721,6 +6761,20 @@ } } }, + "css-tree": { + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.5.3" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -5884,7 +6938,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, "requires": { "foreach": "^2.0.5", "object-keys": "^1.0.8" @@ -6050,7 +7103,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, "requires": { "domelementtype": "~1.1.1", "entities": "~1.1.1" @@ -6059,14 +7111,12 @@ "domelementtype": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" }, "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" } } }, @@ -6084,8 +7134,7 @@ "domelementtype": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, "domhandler": { "version": "2.3.0", @@ -6215,8 +7264,7 @@ "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "emotion": { "version": "9.2.12", @@ -6329,7 +7377,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", - "dev": true, "requires": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", @@ -6342,7 +7389,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, "requires": { "is-callable": "^1.1.1", "is-date-object": "^1.0.1", @@ -7476,11 +8522,18 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "^1.0.1" + } + }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "forever-agent": { "version": "0.6.1", @@ -9417,8 +10470,7 @@ "is-callable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" }, "is-ci": { "version": "2.0.0", @@ -9569,8 +10621,7 @@ "is-symbol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" }, "is-typedarray": { "version": "1.0.0", @@ -10401,8 +11452,7 @@ "js-levenshtein": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz", - "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==", - "dev": true + "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==" }, "js-md5": { "version": "0.6.1", @@ -10615,6 +11665,11 @@ "graceful-fs": "^4.1.9" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", @@ -10971,6 +12026,11 @@ } } }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -11125,6 +12185,23 @@ } } }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "requires": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "dependencies": { + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -11823,6 +12900,22 @@ } } }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -12313,6 +13406,14 @@ "gauge": "~1.2.5" } }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, "nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -12368,8 +13469,7 @@ "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" }, "object-visit": { "version": "1.0.1", @@ -12379,6 +13479,17 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "object.entries": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", @@ -12453,7 +13564,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.5.1" @@ -12467,6 +13577,76 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "^1.0.0" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + } + } + }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -13716,8 +14896,7 @@ "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { "version": "6.5.2", @@ -14297,6 +15476,27 @@ "resolved": "https://registry.npmjs.org/react-native-sound/-/react-native-sound-0.11.0.tgz", "integrity": "sha512-4bGAZfni6E2L695NQjOZwNLBQGXgBGYC4Sy+h99K5h0HqNZjCqR0+aLel+ezASxEJDpaH83gylNObXpiqJgdwg==" }, + "react-native-svg": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.7.1.tgz", + "integrity": "sha512-Yr54SyLPCdovLCJ08V7syJUe1iKrTYG9V5wB08z6lh/9FdC2R9CtBnMyz83GDLKfzUONqqH9nN1l+o61CgD3tg==" + }, + "react-native-svg-transformer": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/react-native-svg-transformer/-/react-native-svg-transformer-0.13.0.tgz", + "integrity": "sha512-tfcnIDC2Q6FN8+g/BXPootZtb+sWLzKJde3o5jSuUJdXSmKwwSazAbk+V808n/Ez5kd2arzsuPTKONT66qx5Xw==", + "requires": { + "@svgr/core": "^4.1.0", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, "react-native-swipeout": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/react-native-swipeout/-/react-native-swipeout-2.3.6.tgz", @@ -14307,47 +15507,6 @@ "react-tween-state": "^0.1.5" } }, - "react-native-vector-icons": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.0.2.tgz", - "integrity": "sha512-Zo0Jo4pIGDVvSrtvgRtaphz77H1RUF3nPxJXbwS/HzUtfOpMzLmjmezYQceWcrAhVimP1VvXeGQ/sSwnl5TgEw==", - "requires": { - "lodash": "^4.0.0", - "prop-types": "^15.6.2", - "yargs": "^8.0.2" - }, - "dependencies": { - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - } - } - }, "react-native-watch-connectivity": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/react-native-watch-connectivity/-/react-native-watch-connectivity-0.2.0.tgz", @@ -15036,6 +16195,11 @@ } } }, + "regexp-tree": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.12.tgz", + "integrity": "sha512-TsXZ8+cv2uxMEkLfgwO0E068gsNMLfuYwMMhiUxf0Kw2Vcgzq93vgl6wIlIYuPmfMqMjfQ9zAporiozqCnwLuQ==" + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -15802,6 +16966,32 @@ "safe-buffer": "^5.0.1" } }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "requires": { + "is-buffer": "^1.0.2" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + } + } + }, "shallow-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.1.0.tgz", @@ -16224,6 +17414,11 @@ "tweetnacl": "~0.14.0" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", @@ -16606,6 +17801,11 @@ "has-flag": "^1.0.0" } }, + "svg-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz", + "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==" + }, "svgo": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", @@ -17412,6 +18612,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -17542,7 +18747,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, "requires": { "define-properties": "^1.1.2", "object.getownpropertydescriptors": "^2.0.3" diff --git a/package.json b/package.json index 18d63cba20..4b1f2bd475 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "@microsoft/microsoft-graph-client": "1.1.0", "@react-native-community/async-storage": "1.3.4", "@react-native-community/netinfo": "4.1.5", + "@svgr/webpack": "4.3.2", "@tensorflow-models/body-pix": "^1.0.1", "@tensorflow/tfjs": "^1.1.2", "@webcomponents/url": "0.7.1", @@ -75,8 +76,9 @@ "react-native-keep-awake": "4.0.0", "react-native-linear-gradient": "2.5.6", "react-native-sound": "0.11.0", + "react-native-svg": "9.7.1", + "react-native-svg-transformer": "0.13.0", "react-native-swipeout": "2.3.6", - "react-native-vector-icons": "6.0.2", "react-native-watch-connectivity": "0.2.0", "react-native-webrtc": "github:react-native-webrtc/react-native-webrtc#b1275ccf1e0e083d2a5c238e7d21c37657766463", "react-native-webview": "5.8.1", diff --git a/react/features/base/avatar/components/AbstractStatelessAvatar.js b/react/features/base/avatar/components/AbstractStatelessAvatar.js index e4ba7128c5..53d21bd064 100644 --- a/react/features/base/avatar/components/AbstractStatelessAvatar.js +++ b/react/features/base/avatar/components/AbstractStatelessAvatar.js @@ -27,7 +27,7 @@ export type Props = { /** * The URL of the avatar to render. */ - url?: ?string + url?: ?string | Object }; /** @@ -36,14 +36,12 @@ export type Props = { */ export default class AbstractStatelessAvatar extends PureComponent

{ /** - * Parses an icon out of a specially constructed icon URL and returns the icon name. + * Checks if the passed prop is a loaded icon or not. * - * @param {string?} url - The url to parse. - * @returns {string?} + * @param {string? | Object?} iconProp - The prop to check. + * @returns {boolean} */ - _parseIconUrl(url: ?string): ?string { - const match = url && url.match(/icon:\/\/(.+)/i); - - return (match && match[1]) || undefined; + _isIcon(iconProp: ?string | ?Object): boolean { + return Boolean(iconProp) && typeof iconProp === 'object'; } } diff --git a/react/features/base/avatar/components/Avatar.js b/react/features/base/avatar/components/Avatar.js index ef80d0105a..9b08feba87 100644 --- a/react/features/base/avatar/components/Avatar.js +++ b/react/features/base/avatar/components/Avatar.js @@ -2,6 +2,7 @@ import React, { PureComponent } from 'react'; +import { IconShareDesktop } from '../../icons'; import { getParticipantById } from '../../participants'; import { connect } from '../../redux'; @@ -183,7 +184,7 @@ export function _mapStateToProps(state: Object, ownProps: Props) { let _loadableAvatarUrl = _participant?.loadableAvatarUrl; if (participantId && screenShares.includes(participantId)) { - _loadableAvatarUrl = 'icon://share-desktop'; + _loadableAvatarUrl = IconShareDesktop; } return { diff --git a/react/features/base/avatar/components/native/StatelessAvatar.js b/react/features/base/avatar/components/native/StatelessAvatar.js index 64975a6320..08008c7e5f 100644 --- a/react/features/base/avatar/components/native/StatelessAvatar.js +++ b/react/features/base/avatar/components/native/StatelessAvatar.js @@ -3,12 +3,12 @@ import React from 'react'; import { Image, Text, View } from 'react-native'; +import { Icon } from '../../../icons'; import { type StyleType } from '../../../styles'; import AbstractStatelessAvatar, { type Props as AbstractProps } from '../AbstractStatelessAvatar'; import styles from './styles'; -import { Icon } from '../../../font-icons'; type Props = AbstractProps & { @@ -35,10 +35,8 @@ export default class StatelessAvatar extends AbstractStatelessAvatar { let avatar; - const icon = this._parseIconUrl(url); - - if (icon) { - avatar = this._renderIconAvatar(icon); + if (this._isIcon(url)) { + avatar = this._renderIconAvatar(url); } else if (url) { avatar = this._renderURLAvatar(); } else if (initials) { @@ -58,7 +56,7 @@ export default class StatelessAvatar extends AbstractStatelessAvatar { ); } - _parseIconUrl: ?string => ?string + _isIcon: (?string | ?Object) => boolean /** * Renders the default avatar. @@ -79,9 +77,9 @@ export default class StatelessAvatar extends AbstractStatelessAvatar { } /** - * Renders the initials-based avatar. + * Renders the icon avatar. * - * @param {string} icon - The icon name to render. + * @param {Object} icon - The icon component to render. * @returns {React$Element<*>} */ _renderIconAvatar(icon) { @@ -96,7 +94,7 @@ export default class StatelessAvatar extends AbstractStatelessAvatar { } ] }> ); diff --git a/react/features/base/avatar/components/web/StatelessAvatar.js b/react/features/base/avatar/components/web/StatelessAvatar.js index 70d8163dc3..547d5c3514 100644 --- a/react/features/base/avatar/components/web/StatelessAvatar.js +++ b/react/features/base/avatar/components/web/StatelessAvatar.js @@ -2,6 +2,8 @@ import React from 'react'; +import { Icon } from '../../../icons'; + import AbstractStatelessAvatar, { type Props as AbstractProps } from '../AbstractStatelessAvatar'; type Props = AbstractProps & { @@ -34,15 +36,14 @@ export default class StatelessAvatar extends AbstractStatelessAvatar { */ render() { const { initials, url } = this.props; - const icon = this._parseIconUrl(url); - if (icon) { + if (this._isIcon(url)) { return (

- +
); } @@ -119,5 +120,5 @@ export default class StatelessAvatar extends AbstractStatelessAvatar { return `avatar ${additional || ''} ${this.props.className || ''}`; } - _parseIconUrl: ?string => ?string + _isIcon: (?string | ?Object) => boolean } diff --git a/react/features/base/dialog/components/native/BaseDialog.js b/react/features/base/dialog/components/native/BaseDialog.js index 0a45a58076..a544cc4808 100644 --- a/react/features/base/dialog/components/native/BaseDialog.js +++ b/react/features/base/dialog/components/native/BaseDialog.js @@ -8,7 +8,7 @@ import { View } from 'react-native'; -import { Icon } from '../../../font-icons'; +import { Icon, IconClose } from '../../../icons'; import { StyleType } from '../../../styles'; import AbstractDialog, { @@ -68,7 +68,7 @@ class BaseDialog extends AbstractDialog { onPress = { this._onCancel } style = { styles.closeWrapper }> { this._renderContent() } diff --git a/react/features/base/font-icons/Icon.js b/react/features/base/font-icons/Icon.js deleted file mode 100644 index 538bdd199a..0000000000 --- a/react/features/base/font-icons/Icon.js +++ /dev/null @@ -1,18 +0,0 @@ -import { Platform } from 'react-native'; - -// FIXME The import of react-native-vector-icons makes the file native-specific -// but the file's name and/or location (within the directory structure) don't -// reflect that, it suggests the file is platform-independent. -import { createIconSetFromIcoMoon } from 'react-native-vector-icons'; - -import icoMoonConfig from '../../../../fonts/selection.json'; - -/** - * Creates the Jitsi icon set from the ico moon project config file. - */ -export const Icon = createIconSetFromIcoMoon(icoMoonConfig); - -// Dynamically load font on iOS -if (Platform.OS === 'ios') { - Icon.loadFont('jitsi.ttf'); -} diff --git a/react/features/base/font-icons/index.js b/react/features/base/font-icons/index.js deleted file mode 100644 index e263cc0e6d..0000000000 --- a/react/features/base/font-icons/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './Icon'; diff --git a/react/features/base/icons/components/Icon.js b/react/features/base/icons/components/Icon.js new file mode 100644 index 0000000000..243677144b --- /dev/null +++ b/react/features/base/icons/components/Icon.js @@ -0,0 +1,81 @@ +// @flow + +import React from 'react'; + +import { styleTypeToObject } from '../../styles'; + +import { Container } from '../../react/base'; + +type Props = { + + /** + * Class name for the web platform, if any. + */ + className?: string, + + /** + * Color of the icon (if not provided by the style object). + */ + color?: string, + + /** + * Id prop (mainly for autotests). + */ + id?: string, + + /** + * The size of the icon (if not provided by the style object). + */ + size?: number | string, + + /** + * The preloaded icon component to render. + */ + src: Function, + + /** + * Style object to be applied. + */ + style?: Object +}; + +export const DEFAULT_COLOR = navigator.product === 'ReactNative' ? 'white' : undefined; +export const DEFAULT_SIZE = navigator.product === 'ReactNative' ? 36 : 24; + +/** + * Implements an Icon component that takes a loaded SVG file as prop and renders it as an icon. + * + * @param {Props} props - The props of the component. + * @returns {Reactelement} + */ +export default function Icon(props: Props) { + const { + className, + color, + id, + size, + src: IconComponent, + style + } = props; + + const { + color: styleColor, + fontSize: styleSize, + ...restStyle + } = styleTypeToObject(style ?? {}); + const calculatedColor = color ?? styleColor ?? DEFAULT_COLOR; + const calculatedSize = size ?? styleSize ?? DEFAULT_SIZE; + + return ( + + + + ); +} + diff --git a/react/features/base/icons/components/index.js b/react/features/base/icons/components/index.js new file mode 100644 index 0000000000..b8de446c6b --- /dev/null +++ b/react/features/base/icons/components/index.js @@ -0,0 +1,3 @@ +// @flow + +export { default as Icon } from './Icon'; diff --git a/react/features/base/icons/index.js b/react/features/base/icons/index.js new file mode 100644 index 0000000000..a4d827d14a --- /dev/null +++ b/react/features/base/icons/index.js @@ -0,0 +1,4 @@ +// @flow + +export * from './components'; +export * from './svg'; diff --git a/react/features/base/icons/svg/AUD.svg b/react/features/base/icons/svg/AUD.svg new file mode 100755 index 0000000000..409dd9f8bc --- /dev/null +++ b/react/features/base/icons/svg/AUD.svg @@ -0,0 +1,5 @@ + + +AUD + + diff --git a/react/features/base/icons/svg/HD.svg b/react/features/base/icons/svg/HD.svg new file mode 100755 index 0000000000..0de7d12964 --- /dev/null +++ b/react/features/base/icons/svg/HD.svg @@ -0,0 +1,5 @@ + + +HD + + diff --git a/react/features/base/icons/svg/LD.svg b/react/features/base/icons/svg/LD.svg new file mode 100755 index 0000000000..e76ec42061 --- /dev/null +++ b/react/features/base/icons/svg/LD.svg @@ -0,0 +1,5 @@ + + +LD + + diff --git a/react/features/base/icons/svg/SD.svg b/react/features/base/icons/svg/SD.svg new file mode 100755 index 0000000000..0141a6eb96 --- /dev/null +++ b/react/features/base/icons/svg/SD.svg @@ -0,0 +1,5 @@ + + +SD + + diff --git a/react/features/base/icons/svg/add.svg b/react/features/base/icons/svg/add.svg new file mode 100755 index 0000000000..3877065307 --- /dev/null +++ b/react/features/base/icons/svg/add.svg @@ -0,0 +1,5 @@ + + +add + + diff --git a/react/features/base/icons/svg/arrow_back.svg b/react/features/base/icons/svg/arrow_back.svg new file mode 100755 index 0000000000..7ab68d689c --- /dev/null +++ b/react/features/base/icons/svg/arrow_back.svg @@ -0,0 +1,5 @@ + + +arrow_back + + diff --git a/react/features/base/icons/svg/bluetooth.svg b/react/features/base/icons/svg/bluetooth.svg new file mode 100755 index 0000000000..a3dabb5c8e --- /dev/null +++ b/react/features/base/icons/svg/bluetooth.svg @@ -0,0 +1,5 @@ + + +bluetooth + + diff --git a/react/features/base/icons/svg/blur-background.svg b/react/features/base/icons/svg/blur-background.svg new file mode 100755 index 0000000000..80302df908 --- /dev/null +++ b/react/features/base/icons/svg/blur-background.svg @@ -0,0 +1,16 @@ + + +blur-background + + + + + + + + + + + + + diff --git a/react/features/base/icons/svg/camera-disabled.svg b/react/features/base/icons/svg/camera-disabled.svg new file mode 100755 index 0000000000..7c5ed160c5 --- /dev/null +++ b/react/features/base/icons/svg/camera-disabled.svg @@ -0,0 +1,5 @@ + + +camera-disabled + + diff --git a/react/features/base/icons/svg/camera-take-picture.svg b/react/features/base/icons/svg/camera-take-picture.svg new file mode 100755 index 0000000000..b5299b4bdf --- /dev/null +++ b/react/features/base/icons/svg/camera-take-picture.svg @@ -0,0 +1,6 @@ + + +camera-take-picture + + + diff --git a/react/features/base/icons/svg/camera.svg b/react/features/base/icons/svg/camera.svg new file mode 100755 index 0000000000..323146107b --- /dev/null +++ b/react/features/base/icons/svg/camera.svg @@ -0,0 +1,5 @@ + + +camera + + diff --git a/react/features/base/icons/svg/cancel.svg b/react/features/base/icons/svg/cancel.svg new file mode 100755 index 0000000000..59e5990986 --- /dev/null +++ b/react/features/base/icons/svg/cancel.svg @@ -0,0 +1,5 @@ + + +cancel + + diff --git a/react/features/base/icons/svg/chat-unread.svg b/react/features/base/icons/svg/chat-unread.svg new file mode 100755 index 0000000000..cb78e1ccb2 --- /dev/null +++ b/react/features/base/icons/svg/chat-unread.svg @@ -0,0 +1,5 @@ + + +chat-unread + + diff --git a/react/features/base/icons/svg/chat.svg b/react/features/base/icons/svg/chat.svg new file mode 100755 index 0000000000..5804886e8b --- /dev/null +++ b/react/features/base/icons/svg/chat.svg @@ -0,0 +1,5 @@ + + +chat + + diff --git a/react/features/base/icons/svg/check.svg b/react/features/base/icons/svg/check.svg new file mode 100755 index 0000000000..23ee1d1040 --- /dev/null +++ b/react/features/base/icons/svg/check.svg @@ -0,0 +1,5 @@ + + +check + + diff --git a/react/features/base/icons/svg/close.svg b/react/features/base/icons/svg/close.svg new file mode 100755 index 0000000000..fb4be45bbe --- /dev/null +++ b/react/features/base/icons/svg/close.svg @@ -0,0 +1,5 @@ + + +close + + diff --git a/react/features/base/icons/svg/closed_caption.svg b/react/features/base/icons/svg/closed_caption.svg new file mode 100755 index 0000000000..14b66b1849 --- /dev/null +++ b/react/features/base/icons/svg/closed_caption.svg @@ -0,0 +1,5 @@ + + +closed_caption + + diff --git a/react/features/base/icons/svg/dominant-speaker.svg b/react/features/base/icons/svg/dominant-speaker.svg new file mode 100755 index 0000000000..a3f64ad485 --- /dev/null +++ b/react/features/base/icons/svg/dominant-speaker.svg @@ -0,0 +1,5 @@ + + +dominant-speaker + + diff --git a/react/features/base/icons/svg/enlarge.svg b/react/features/base/icons/svg/enlarge.svg new file mode 100755 index 0000000000..2a6b52c6d0 --- /dev/null +++ b/react/features/base/icons/svg/enlarge.svg @@ -0,0 +1,5 @@ + + +enlarge + + diff --git a/react/features/base/icons/svg/event_note.svg b/react/features/base/icons/svg/event_note.svg new file mode 100755 index 0000000000..b5775fee93 --- /dev/null +++ b/react/features/base/icons/svg/event_note.svg @@ -0,0 +1,5 @@ + + +event_note + + diff --git a/react/features/base/icons/svg/exit-full-screen.svg b/react/features/base/icons/svg/exit-full-screen.svg new file mode 100755 index 0000000000..feb7cc4edd --- /dev/null +++ b/react/features/base/icons/svg/exit-full-screen.svg @@ -0,0 +1,5 @@ + + +exit-full-screen + + diff --git a/react/features/base/icons/svg/feedback.svg b/react/features/base/icons/svg/feedback.svg new file mode 100755 index 0000000000..46b15d1ee0 --- /dev/null +++ b/react/features/base/icons/svg/feedback.svg @@ -0,0 +1,5 @@ + + +feedback + + diff --git a/react/features/base/icons/svg/full-screen.svg b/react/features/base/icons/svg/full-screen.svg new file mode 100755 index 0000000000..e98e8d906a --- /dev/null +++ b/react/features/base/icons/svg/full-screen.svg @@ -0,0 +1,5 @@ + + +full-screen + + diff --git a/react/features/base/icons/svg/gsm-bars.svg b/react/features/base/icons/svg/gsm-bars.svg new file mode 100755 index 0000000000..34d4e9fef3 --- /dev/null +++ b/react/features/base/icons/svg/gsm-bars.svg @@ -0,0 +1,5 @@ + + +gsm-bars + + diff --git a/react/features/base/icons/svg/hangup.svg b/react/features/base/icons/svg/hangup.svg new file mode 100755 index 0000000000..73a0e41399 --- /dev/null +++ b/react/features/base/icons/svg/hangup.svg @@ -0,0 +1,5 @@ + + +hangup + + diff --git a/react/features/base/icons/svg/headset.svg b/react/features/base/icons/svg/headset.svg new file mode 100755 index 0000000000..3a8a6422a9 --- /dev/null +++ b/react/features/base/icons/svg/headset.svg @@ -0,0 +1,5 @@ + + +headset + + diff --git a/react/features/base/icons/svg/index.js b/react/features/base/icons/svg/index.js new file mode 100644 index 0000000000..984d469b7c --- /dev/null +++ b/react/features/base/icons/svg/index.js @@ -0,0 +1,69 @@ +// @flow + +export { default as IconAdd } from './add.svg'; +export { default as IconAddPeople } from './link.svg'; +export { default as IconArrowBack } from './arrow_back.svg'; +export { default as IconAudioOnly } from './visibility.svg'; +export { default as IconAudioOnlyOff } from './visibility-off.svg'; +export { default as IconAudioRoute } from './volume.svg'; +export { default as IconBlurBackground } from './blur-background.svg'; +export { default as IconCamera } from './camera.svg'; +export { default as IconCameraDisabled } from './camera-disabled.svg'; +export { default as IconCancelSelection } from './cancel.svg'; +export { default as IconChat } from './chat.svg'; +export { default as IconChatSend } from './send.svg'; +export { default as IconChatUnread } from './chat-unread.svg'; +export { default as IconCheck } from './check.svg'; +export { default as IconClose } from './close.svg'; +export { default as IconClosedCaption } from './closed_caption.svg'; +export { default as IconConnectionActive } from './gsm-bars.svg'; +export { default as IconConnectionInactive } from './ninja.svg'; +export { default as IconDeviceBluetooth } from './bluetooth.svg'; +export { default as IconDeviceEarpiece } from './phone-talk.svg'; +export { default as IconDeviceHeadphone } from './headset.svg'; +export { default as IconDeviceSpeaker } from './volume.svg'; +export { default as IconDominantSpeaker } from './dominant-speaker.svg'; +export { default as IconEventNote } from './event_note.svg'; +export { default as IconExitFullScreen } from './exit-full-screen.svg'; +export { default as IconFeedback } from './feedback.svg'; +export { default as IconFullScreen } from './full-screen.svg'; +export { default as IconHangup } from './hangup.svg'; +export { default as IconInfo } from './info.svg'; +export { default as IconInvite } from './invite.svg'; +export { default as IconKick } from './kick.svg'; +export { default as IconLiveStreaming } from './public.svg'; +export { default as IconMenu } from './menu.svg'; +export { default as IconMenuDown } from './menu-down.svg'; +export { default as IconMenuThumb } from './thumb-menu.svg'; +export { default as IconMenuUp } from './menu-up.svg'; +export { default as IconMicDisabled } from './mic-disabled.svg'; +export { default as IconMicrophone } from './microphone.svg'; +export { default as IconModerator } from './star.svg'; +export { default as IconNotificationJoin } from './navigate_next.svg'; +export { default as IconOpenInNew } from './open_in_new.svg'; +export { default as IconPhone } from './phone.svg'; +export { default as IconPin } from './enlarge.svg'; +export { default as IconPresentation } from './presentation.svg'; +export { default as IconRaisedHand } from './raised-hand.svg'; +export { default as IconRec } from './rec.svg'; +export { default as IconRemoteControlStart } from './play.svg'; +export { default as IconRemoteControlStop } from './stop.svg'; +export { default as IconRestore } from './restore.svg'; +export { default as IconRoomLock } from './security.svg'; +export { default as IconRoomUnlock } from './security-locked.svg'; +export { default as IconSearch } from './search.svg'; +export { default as IconSettings } from './settings.svg'; +export { default as IconSignalLevel0 } from './signal_cellular_0.svg'; +export { default as IconSignalLevel1 } from './signal_cellular_1.svg'; +export { default as IconSignalLevel2 } from './signal_cellular_2.svg'; +export { default as IconShareDesktop } from './share-desktop.svg'; +export { default as IconShareDoc } from './share-doc.svg'; +export { default as IconShareVideo } from './shared-video.svg'; +export { default as IconSwitchCamera } from './switch-camera.svg'; +export { default as IconTileView } from './tiles-many.svg'; +export { default as IconToggleRecording } from './camera-take-picture.svg'; +export { default as IconVideoQualityAudioOnly } from './AUD.svg'; +export { default as IconVideoQualityHD } from './HD.svg'; +export { default as IconVideoQualityLD } from './LD.svg'; +export { default as IconVideoQualitySD } from './SD.svg'; +export { default as IconVolume } from './volume.svg'; diff --git a/react/features/base/icons/svg/info.svg b/react/features/base/icons/svg/info.svg new file mode 100755 index 0000000000..160dc4233d --- /dev/null +++ b/react/features/base/icons/svg/info.svg @@ -0,0 +1,5 @@ + + +info + + diff --git a/react/features/base/icons/svg/invite.svg b/react/features/base/icons/svg/invite.svg new file mode 100755 index 0000000000..2dd258cafe --- /dev/null +++ b/react/features/base/icons/svg/invite.svg @@ -0,0 +1,5 @@ + + +invite + + diff --git a/react/features/base/icons/svg/kick.svg b/react/features/base/icons/svg/kick.svg new file mode 100755 index 0000000000..7bae6c62b3 --- /dev/null +++ b/react/features/base/icons/svg/kick.svg @@ -0,0 +1,5 @@ + + +kick + + diff --git a/react/features/base/icons/svg/link.svg b/react/features/base/icons/svg/link.svg new file mode 100755 index 0000000000..70729fd734 --- /dev/null +++ b/react/features/base/icons/svg/link.svg @@ -0,0 +1,5 @@ + + +link + + diff --git a/react/features/base/icons/svg/menu-down.svg b/react/features/base/icons/svg/menu-down.svg new file mode 100755 index 0000000000..24608babc6 --- /dev/null +++ b/react/features/base/icons/svg/menu-down.svg @@ -0,0 +1,5 @@ + + +menu-down + + diff --git a/react/features/base/icons/svg/menu-up.svg b/react/features/base/icons/svg/menu-up.svg new file mode 100755 index 0000000000..cb1a57089b --- /dev/null +++ b/react/features/base/icons/svg/menu-up.svg @@ -0,0 +1,5 @@ + + +menu-up + + diff --git a/react/features/base/icons/svg/menu.svg b/react/features/base/icons/svg/menu.svg new file mode 100755 index 0000000000..620494ef8d --- /dev/null +++ b/react/features/base/icons/svg/menu.svg @@ -0,0 +1,5 @@ + + +menu + + diff --git a/react/features/base/icons/svg/mic-camera-combined.svg b/react/features/base/icons/svg/mic-camera-combined.svg new file mode 100755 index 0000000000..2138da718a --- /dev/null +++ b/react/features/base/icons/svg/mic-camera-combined.svg @@ -0,0 +1,5 @@ + + +mic-camera-combined + + diff --git a/react/features/base/icons/svg/mic-disabled.svg b/react/features/base/icons/svg/mic-disabled.svg new file mode 100755 index 0000000000..83ed7ef6ef --- /dev/null +++ b/react/features/base/icons/svg/mic-disabled.svg @@ -0,0 +1,5 @@ + + +mic-disabled + + diff --git a/react/features/base/icons/svg/microphone.svg b/react/features/base/icons/svg/microphone.svg new file mode 100755 index 0000000000..59cfcfb3d3 --- /dev/null +++ b/react/features/base/icons/svg/microphone.svg @@ -0,0 +1,5 @@ + + +microphone + + diff --git a/react/features/base/icons/svg/navigate_next.svg b/react/features/base/icons/svg/navigate_next.svg new file mode 100755 index 0000000000..a16065471d --- /dev/null +++ b/react/features/base/icons/svg/navigate_next.svg @@ -0,0 +1,5 @@ + + +navigate_next + + diff --git a/react/features/base/icons/svg/ninja.svg b/react/features/base/icons/svg/ninja.svg new file mode 100755 index 0000000000..f28d4a739e --- /dev/null +++ b/react/features/base/icons/svg/ninja.svg @@ -0,0 +1,5 @@ + + +ninja + + diff --git a/react/features/base/icons/svg/open_in_new.svg b/react/features/base/icons/svg/open_in_new.svg new file mode 100755 index 0000000000..ea59a1cb2d --- /dev/null +++ b/react/features/base/icons/svg/open_in_new.svg @@ -0,0 +1,5 @@ + + +open_in_new + + diff --git a/react/features/base/icons/svg/phone-talk.svg b/react/features/base/icons/svg/phone-talk.svg new file mode 100755 index 0000000000..7ccc949f4d --- /dev/null +++ b/react/features/base/icons/svg/phone-talk.svg @@ -0,0 +1,5 @@ + + +phone-talk + + diff --git a/react/features/base/icons/svg/phone.svg b/react/features/base/icons/svg/phone.svg new file mode 100755 index 0000000000..9c066b98f0 --- /dev/null +++ b/react/features/base/icons/svg/phone.svg @@ -0,0 +1,5 @@ + + +phone + + diff --git a/react/features/base/icons/svg/play.svg b/react/features/base/icons/svg/play.svg new file mode 100755 index 0000000000..fcc33c6eca --- /dev/null +++ b/react/features/base/icons/svg/play.svg @@ -0,0 +1,5 @@ + + +play + + diff --git a/react/features/base/icons/svg/presentation.svg b/react/features/base/icons/svg/presentation.svg new file mode 100755 index 0000000000..7434101602 --- /dev/null +++ b/react/features/base/icons/svg/presentation.svg @@ -0,0 +1,8 @@ + + +presentation + + + + + diff --git a/react/features/base/icons/svg/public.svg b/react/features/base/icons/svg/public.svg new file mode 100755 index 0000000000..1461b340ae --- /dev/null +++ b/react/features/base/icons/svg/public.svg @@ -0,0 +1,5 @@ + + +public + + diff --git a/react/features/base/icons/svg/radio_button_checked.svg b/react/features/base/icons/svg/radio_button_checked.svg new file mode 100755 index 0000000000..1a3ac0747a --- /dev/null +++ b/react/features/base/icons/svg/radio_button_checked.svg @@ -0,0 +1,5 @@ + + +radio_button_checked + + diff --git a/react/features/base/icons/svg/radio_button_unchecked.svg b/react/features/base/icons/svg/radio_button_unchecked.svg new file mode 100755 index 0000000000..1adabaef79 --- /dev/null +++ b/react/features/base/icons/svg/radio_button_unchecked.svg @@ -0,0 +1,5 @@ + + +radio_button_unchecked + + diff --git a/react/features/base/icons/svg/raised-hand.svg b/react/features/base/icons/svg/raised-hand.svg new file mode 100755 index 0000000000..86f003db8a --- /dev/null +++ b/react/features/base/icons/svg/raised-hand.svg @@ -0,0 +1,5 @@ + + +raised-hand + + diff --git a/react/features/base/icons/svg/rec.svg b/react/features/base/icons/svg/rec.svg new file mode 100755 index 0000000000..61d2021461 --- /dev/null +++ b/react/features/base/icons/svg/rec.svg @@ -0,0 +1,5 @@ + + +rec + + diff --git a/react/features/base/icons/svg/restore.svg b/react/features/base/icons/svg/restore.svg new file mode 100755 index 0000000000..f24d895a15 --- /dev/null +++ b/react/features/base/icons/svg/restore.svg @@ -0,0 +1,5 @@ + + +restore + + diff --git a/react/features/base/icons/svg/search.svg b/react/features/base/icons/svg/search.svg new file mode 100755 index 0000000000..b94264f81d --- /dev/null +++ b/react/features/base/icons/svg/search.svg @@ -0,0 +1,5 @@ + + +search + + diff --git a/react/features/base/icons/svg/security-locked.svg b/react/features/base/icons/svg/security-locked.svg new file mode 100755 index 0000000000..a52d99560d --- /dev/null +++ b/react/features/base/icons/svg/security-locked.svg @@ -0,0 +1,5 @@ + + +security-locked + + diff --git a/react/features/base/icons/svg/security.svg b/react/features/base/icons/svg/security.svg new file mode 100755 index 0000000000..261f1c22d7 --- /dev/null +++ b/react/features/base/icons/svg/security.svg @@ -0,0 +1,5 @@ + + +security + + diff --git a/react/features/base/icons/svg/send.svg b/react/features/base/icons/svg/send.svg new file mode 100755 index 0000000000..83c6f37825 --- /dev/null +++ b/react/features/base/icons/svg/send.svg @@ -0,0 +1,5 @@ + + +send + + diff --git a/react/features/base/icons/svg/settings.svg b/react/features/base/icons/svg/settings.svg new file mode 100755 index 0000000000..301b6f1ebe --- /dev/null +++ b/react/features/base/icons/svg/settings.svg @@ -0,0 +1,5 @@ + + +settings + + diff --git a/react/features/base/icons/svg/share-desktop.svg b/react/features/base/icons/svg/share-desktop.svg new file mode 100755 index 0000000000..a495afc0c6 --- /dev/null +++ b/react/features/base/icons/svg/share-desktop.svg @@ -0,0 +1,5 @@ + + +share-desktop + + diff --git a/react/features/base/icons/svg/share-doc.svg b/react/features/base/icons/svg/share-doc.svg new file mode 100755 index 0000000000..d6505fe6d2 --- /dev/null +++ b/react/features/base/icons/svg/share-doc.svg @@ -0,0 +1,5 @@ + + +share-doc + + diff --git a/react/features/base/icons/svg/shared-video.svg b/react/features/base/icons/svg/shared-video.svg new file mode 100755 index 0000000000..aa9325db93 --- /dev/null +++ b/react/features/base/icons/svg/shared-video.svg @@ -0,0 +1,5 @@ + + +shared-video + + diff --git a/react/features/base/icons/svg/signal_cellular_0.svg b/react/features/base/icons/svg/signal_cellular_0.svg new file mode 100755 index 0000000000..dae3fcb0bb --- /dev/null +++ b/react/features/base/icons/svg/signal_cellular_0.svg @@ -0,0 +1,5 @@ + + +signal_cellular_0 + + diff --git a/react/features/base/icons/svg/signal_cellular_1.svg b/react/features/base/icons/svg/signal_cellular_1.svg new file mode 100755 index 0000000000..e0848e4ca5 --- /dev/null +++ b/react/features/base/icons/svg/signal_cellular_1.svg @@ -0,0 +1,5 @@ + + +signal_cellular_1 + + diff --git a/react/features/base/icons/svg/signal_cellular_2.svg b/react/features/base/icons/svg/signal_cellular_2.svg new file mode 100755 index 0000000000..b92292b075 --- /dev/null +++ b/react/features/base/icons/svg/signal_cellular_2.svg @@ -0,0 +1,5 @@ + + +signal_cellular_2 + + diff --git a/react/features/base/icons/svg/speaker.svg b/react/features/base/icons/svg/speaker.svg new file mode 100755 index 0000000000..f6a2ac481f --- /dev/null +++ b/react/features/base/icons/svg/speaker.svg @@ -0,0 +1,5 @@ + + +speaker + + diff --git a/react/features/base/icons/svg/star.svg b/react/features/base/icons/svg/star.svg new file mode 100755 index 0000000000..8d567e44a8 --- /dev/null +++ b/react/features/base/icons/svg/star.svg @@ -0,0 +1,5 @@ + + +star + + diff --git a/react/features/base/icons/svg/stop.svg b/react/features/base/icons/svg/stop.svg new file mode 100755 index 0000000000..a4916dec33 --- /dev/null +++ b/react/features/base/icons/svg/stop.svg @@ -0,0 +1,5 @@ + + +stop + + diff --git a/react/features/base/icons/svg/switch-camera.svg b/react/features/base/icons/svg/switch-camera.svg new file mode 100755 index 0000000000..521a4abf3a --- /dev/null +++ b/react/features/base/icons/svg/switch-camera.svg @@ -0,0 +1,5 @@ + + +switch-camera + + diff --git a/react/features/base/icons/svg/thumb-menu.svg b/react/features/base/icons/svg/thumb-menu.svg new file mode 100755 index 0000000000..91dad7a9fe --- /dev/null +++ b/react/features/base/icons/svg/thumb-menu.svg @@ -0,0 +1,5 @@ + + +thumb-menu + + diff --git a/react/features/base/icons/svg/tiles-many.svg b/react/features/base/icons/svg/tiles-many.svg new file mode 100755 index 0000000000..8af02a24a6 --- /dev/null +++ b/react/features/base/icons/svg/tiles-many.svg @@ -0,0 +1,5 @@ + + +tiles-many + + diff --git a/react/features/base/icons/svg/visibility-off.svg b/react/features/base/icons/svg/visibility-off.svg new file mode 100755 index 0000000000..5fca7d7f23 --- /dev/null +++ b/react/features/base/icons/svg/visibility-off.svg @@ -0,0 +1,5 @@ + + +visibility-off + + diff --git a/react/features/base/icons/svg/visibility.svg b/react/features/base/icons/svg/visibility.svg new file mode 100755 index 0000000000..413fbd49f1 --- /dev/null +++ b/react/features/base/icons/svg/visibility.svg @@ -0,0 +1,5 @@ + + +visibility + + diff --git a/react/features/base/icons/svg/volume.svg b/react/features/base/icons/svg/volume.svg new file mode 100755 index 0000000000..305282c6d5 --- /dev/null +++ b/react/features/base/icons/svg/volume.svg @@ -0,0 +1,5 @@ + + +volume + + diff --git a/react/features/base/participants/constants.js b/react/features/base/participants/constants.js index 34319d219b..0d90ef1caf 100644 --- a/react/features/base/participants/constants.js +++ b/react/features/base/participants/constants.js @@ -1,3 +1,7 @@ +// @flow + +import { IconPhone } from '../icons'; + /** * The relative path to the default/stock avatar (image) file used on both * Web/React and mobile/React Native (for the purposes of consistency). @@ -18,7 +22,7 @@ export const DEFAULT_AVATAR_RELATIVE_PATH = 'images/avatar.png'; * * @type {string} */ -export const JIGASI_PARTICIPANT_ICON = 'icon://phone'; +export const JIGASI_PARTICIPANT_ICON = IconPhone; /** * The local participant might not have real ID until she joins a conference, diff --git a/react/features/base/participants/functions.js b/react/features/base/participants/functions.js index 1d89bd460b..a3c6801928 100644 --- a/react/features/base/participants/functions.js +++ b/react/features/base/participants/functions.js @@ -262,13 +262,13 @@ export function isEveryoneModerator(stateful: Object | Function) { } /** - * Checks a URL string and returns true if it's an icon url. + * Checks a value and returns true if it's a preloaded icon object. * - * @param {string?} url - The URL string to check. + * @param {?string | ?Object} icon - The icon to check. * @returns {boolean} */ -export function isIconUrl(url: ?string) { - return Boolean(url && url.match(/icon:\/\/(.+)/i)); +export function isIconUrl(icon: ?string | ?Object) { + return Boolean(icon) && typeof icon === 'object'; } /** diff --git a/react/features/base/participants/preloadImage.native.js b/react/features/base/participants/preloadImage.native.js index 4cd2683a2f..186b5efe0c 100644 --- a/react/features/base/participants/preloadImage.native.js +++ b/react/features/base/participants/preloadImage.native.js @@ -8,10 +8,10 @@ import { isIconUrl } from './functions'; /** * Tries to preload an image. * - * @param {string} src - Source of the avatar. + * @param {string | Object} src - Source of the avatar. * @returns {Promise} */ -export function preloadImage(src: string): Promise { +export function preloadImage(src: string | Object): Promise { if (isIconUrl(src)) { return Promise.resolve(src); } diff --git a/react/features/base/participants/preloadImage.web.js b/react/features/base/participants/preloadImage.web.js index c4b6fcc40e..8e1efd5fb3 100644 --- a/react/features/base/participants/preloadImage.web.js +++ b/react/features/base/participants/preloadImage.web.js @@ -8,10 +8,10 @@ declare var config: Object; /** * Tries to preload an image. * - * @param {string} src - Source of the avatar. + * @param {string | Object} src - Source of the avatar. * @returns {Promise} */ -export function preloadImage(src: string): Promise { +export function preloadImage(src: string | Object): Promise { if (isIconUrl(src)) { return Promise.resolve(src); } diff --git a/react/features/base/react/base.js b/react/features/base/react/base.js new file mode 100644 index 0000000000..ee42a7e846 --- /dev/null +++ b/react/features/base/react/base.js @@ -0,0 +1,8 @@ +// @flow + +/** + * A list of base components to be exported without all the components being exported from + * this feature to reduce package size of libraries. + */ + +export * from './components/base'; diff --git a/react/features/base/react/components/AbstractContainer.js b/react/features/base/react/components/AbstractContainer.js index 932f74d53a..cb3fe4f389 100644 --- a/react/features/base/react/components/AbstractContainer.js +++ b/react/features/base/react/components/AbstractContainer.js @@ -24,6 +24,11 @@ export type Props = { */ children: React$Node, + /** + * Class names of the component (for web). + */ + className?: string, + /** * The event handler/listener to be invoked when this * {@code AbstractContainer} is clicked on Web or pressed on React diff --git a/react/features/base/react/components/base.native.js b/react/features/base/react/components/base.native.js new file mode 100644 index 0000000000..5eaaba670c --- /dev/null +++ b/react/features/base/react/components/base.native.js @@ -0,0 +1,3 @@ +// @flow + +export { default as Container } from './native/Container'; diff --git a/react/features/base/react/components/base.web.js b/react/features/base/react/components/base.web.js new file mode 100644 index 0000000000..8504922d1d --- /dev/null +++ b/react/features/base/react/components/base.web.js @@ -0,0 +1,3 @@ +// @flow + +export { default as Container } from './web/Container'; diff --git a/react/features/base/react/components/native/BackButton.js b/react/features/base/react/components/native/BackButton.js index 6cbd866e68..4afa6279d8 100644 --- a/react/features/base/react/components/native/BackButton.js +++ b/react/features/base/react/components/native/BackButton.js @@ -4,7 +4,7 @@ import React, { Component } from 'react'; import { TouchableOpacity } from 'react-native'; import { ColorSchemeRegistry } from '../../../color-scheme'; -import { Icon } from '../../../font-icons'; +import { Icon, IconArrowBack } from '../../../icons'; import { connect } from '../../../redux'; /** @@ -44,7 +44,7 @@ class BackButton extends Component { accessibilityLabel = { 'Back' } onPress = { this.props.onPress }> { return ( { { t('sectionList.pullToRefresh') } ); diff --git a/react/features/base/react/components/native/PagedList.js b/react/features/base/react/components/native/PagedList.js index 47d9359a36..b57f7d4b5e 100644 --- a/react/features/base/react/components/native/PagedList.js +++ b/react/features/base/react/components/native/PagedList.js @@ -3,7 +3,7 @@ import React, { Component } from 'react'; import { SafeAreaView, Text, TouchableOpacity, View } from 'react-native'; -import { Icon } from '../../../font-icons'; +import { Icon } from '../../../icons'; import { connect } from '../../../redux'; import styles from './styles'; @@ -252,7 +252,7 @@ class PagedList extends Component { style = { styles.pageIndicator } > { */ static defaultProps = { className: '', - iconClassName: '', - iconSize: 'auto', + iconSize: 13, id: '', tooltipPosition: 'top' }; @@ -76,7 +86,9 @@ class BaseIndicator extends Component { render() { const { className, + icon, iconClassName, + iconId, iconSize, id, t, @@ -94,8 +106,10 @@ class BaseIndicator extends Component { - diff --git a/react/features/base/styles/functions.any.js b/react/features/base/styles/functions.any.js index 1e4703bddd..3964240f51 100644 --- a/react/features/base/styles/functions.any.js +++ b/react/features/base/styles/functions.any.js @@ -37,6 +37,31 @@ const RGBA_COLOR_FORMAT */ const _WELL_KNOWN_NUMBER_PROPERTIES = [ 'height', 'width' ]; +/** + * Function to convert complex StyleType styles into a single flat object, + * so then they can be deconstructed for further processing. + * + * @param {Styletype} st - The complex style type. + * @returns {Object} + */ +export function styleTypeToObject(st: StyleType): Object { + if (!st) { + return {}; + } + + if (Array.isArray(st)) { + const flatStyle = {}; + + for (const styleElement of st) { + Object.assign(flatStyle, styleTypeToObject(styleElement)); + } + + return flatStyle; + } + + return st; +} + /** * Combines the given 2 styles into a single one. * diff --git a/react/features/base/toolbox/components/AbstractAudioMuteButton.js b/react/features/base/toolbox/components/AbstractAudioMuteButton.js index 2c202c64de..a9ccea0bca 100644 --- a/react/features/base/toolbox/components/AbstractAudioMuteButton.js +++ b/react/features/base/toolbox/components/AbstractAudioMuteButton.js @@ -1,5 +1,7 @@ // @flow +import { IconMicDisabled, IconMicrophone } from '../../icons'; + import AbstractButton from './AbstractButton'; import type { Props } from './AbstractButton'; @@ -9,8 +11,8 @@ import type { Props } from './AbstractButton'; export default class AbstractAudioMuteButton extends AbstractButton { - iconName = 'icon-microphone'; - toggledIconName = 'icon-mic-disabled toggled'; + icon = IconMicrophone; + toggledIcon = IconMicDisabled; /** * Handles clicking / pressing the button, and toggles the audio mute state diff --git a/react/features/base/toolbox/components/AbstractButton.js b/react/features/base/toolbox/components/AbstractButton.js index 9d54188a6b..ded2269d53 100644 --- a/react/features/base/toolbox/components/AbstractButton.js +++ b/react/features/base/toolbox/components/AbstractButton.js @@ -83,11 +83,11 @@ export default class AbstractButton extends Component { accessibilityLabel: string; /** - * The name of the icon of this button. + * The icon of this button. * * @abstract */ - iconName: string; + icon: Object; /** * The text associated with this button. When `showLabel` is set to @@ -103,11 +103,11 @@ export default class AbstractButton extends Component { toggledLabel: string; /** - * The name of the icon of this button, when toggled. + * The icon of this button, when toggled. * * @abstract */ - toggledIconName: string; + toggledIcon: Object; /** * The text to display in the tooltip. Used only on web. @@ -152,17 +152,17 @@ export default class AbstractButton extends Component { } /** - * Gets the current icon name, taking the toggled state into account. If no + * Gets the current icon, taking the toggled state into account. If no * toggled icon is provided, the regular icon will also be used in the * toggled state. * * @private * @returns {string} */ - _getIconName() { + _getIcon() { return ( - this._isToggled() ? this.toggledIconName : this.iconName - ) || this.iconName; + this._isToggled() ? this.toggledIcon : this.icon + ) || this.icon; } /** @@ -265,10 +265,12 @@ export default class AbstractButton extends Component { const props = { ...this.props, accessibilityLabel: this.accessibilityLabel, + disabled: this._isDisabled(), elementAfter: this._getElementAfter(), - iconName: this._getIconName(), + icon: this._getIcon(), label: this._getLabel(), styles: this._getStyles(), + toggled: this._isToggled(), tooltip: this._getTooltip() }; diff --git a/react/features/base/toolbox/components/AbstractHangupButton.js b/react/features/base/toolbox/components/AbstractHangupButton.js index 9b82e46ffb..f8ada8a503 100644 --- a/react/features/base/toolbox/components/AbstractHangupButton.js +++ b/react/features/base/toolbox/components/AbstractHangupButton.js @@ -1,5 +1,7 @@ // @flow +import { IconHangup } from '../../icons'; + import AbstractButton from './AbstractButton'; import type { Props } from './AbstractButton'; @@ -9,7 +11,7 @@ import type { Props } from './AbstractButton'; export default class AbstractHangupButton

extends AbstractButton { - iconName = 'icon-hangup'; + icon = IconHangup; /** * Handles clicking / pressing the button, and disconnects the conference. diff --git a/react/features/base/toolbox/components/AbstractToolboxItem.js b/react/features/base/toolbox/components/AbstractToolboxItem.js index 0e53c770be..e2bfad02f7 100644 --- a/react/features/base/toolbox/components/AbstractToolboxItem.js +++ b/react/features/base/toolbox/components/AbstractToolboxItem.js @@ -47,9 +47,9 @@ export type Props = { elementAfter?: React$Node, /** - * The name of the icon of this {@code ToolboxItem}. + * The icon to render for this {@code ToolboxItem}. */ - iconName: string, + icon: Object, /** * The text associated with this item. When `showLabel` is set to @@ -77,6 +77,11 @@ export type Props = { */ t: ?Function, + /** + * True if the item is toggled, false otherwise. + */ + toggled: boolean, + /** * The text to display in the tooltip. Used only on web. */ diff --git a/react/features/base/toolbox/components/AbstractVideoMuteButton.js b/react/features/base/toolbox/components/AbstractVideoMuteButton.js index 9cf7e0aee9..15049ce80f 100644 --- a/react/features/base/toolbox/components/AbstractVideoMuteButton.js +++ b/react/features/base/toolbox/components/AbstractVideoMuteButton.js @@ -1,5 +1,7 @@ // @flow +import { IconCamera, IconCameraDisabled } from '../../icons'; + import AbstractButton from './AbstractButton'; import type { Props } from './AbstractButton'; @@ -9,8 +11,8 @@ import type { Props } from './AbstractButton'; export default class AbstractVideoMuteButton

extends AbstractButton { - iconName = 'icon-camera'; - toggledIconName = 'icon-camera-disabled toggled'; + icon = IconCamera; + toggledIcon = IconCameraDisabled; /** * Handles clicking / pressing the button, and toggles the video mute state diff --git a/react/features/base/toolbox/components/OverflowMenuItem.web.js b/react/features/base/toolbox/components/OverflowMenuItem.web.js index 3834d0a4b5..f2f1636f6d 100644 --- a/react/features/base/toolbox/components/OverflowMenuItem.web.js +++ b/react/features/base/toolbox/components/OverflowMenuItem.web.js @@ -3,6 +3,8 @@ import Tooltip from '@atlaskit/tooltip'; import React, { Component } from 'react'; +import { Icon } from '../../icons'; + /** * The type of the React {@code Component} props of {@link OverflowMenuItem}. */ @@ -27,7 +29,12 @@ type Props = { /** * The icon class to use for displaying an icon before the link text. */ - icon: string, + icon: Object, + + /** + * Id of the icon to be rendered. + */ + iconId?: string, /** * The callback to invoke when {@code OverflowMenuItem} is clicked. @@ -74,21 +81,25 @@ class OverflowMenuItem extends Component { * @returns {ReactElement} */ render() { + const { accessibilityLabel, disabled, elementAfter, icon, iconId, onClick } = this.props; + let className = 'overflow-menu-item'; className += this.props.disabled ? ' disabled' : ''; return (

  • + onClick = { disabled ? null : onClick }> - + { this._renderText() } { - this.props.elementAfter || null + elementAfter || null }
  • ); diff --git a/react/features/base/toolbox/components/ToolboxItem.native.js b/react/features/base/toolbox/components/ToolboxItem.native.js index 89efc205ac..9bc7c6c491 100644 --- a/react/features/base/toolbox/components/ToolboxItem.native.js +++ b/react/features/base/toolbox/components/ToolboxItem.native.js @@ -3,7 +3,7 @@ import React from 'react'; import { Text, TouchableHighlight, View } from 'react-native'; -import { Icon } from '../../../base/font-icons'; +import { Icon } from '../../icons'; import AbstractToolboxItem from './AbstractToolboxItem'; import type { Props } from './AbstractToolboxItem'; @@ -12,19 +12,6 @@ import type { Props } from './AbstractToolboxItem'; * Native implementation of {@code AbstractToolboxItem}. */ export default class ToolboxItem extends AbstractToolboxItem { - /** - * Transform the given (web) icon name into a name that works with - * {@code Icon}. - * - * @private - * @returns {string} - */ - _getIconName() { - const { iconName } = this.props; - - return iconName.replace('icon-', '').split(' ')[0]; - } - /** * Renders the {@code Icon} part of this {@code ToolboxItem}. * @@ -36,7 +23,7 @@ export default class ToolboxItem extends AbstractToolboxItem { return ( ); } diff --git a/react/features/base/toolbox/components/ToolboxItem.web.js b/react/features/base/toolbox/components/ToolboxItem.web.js index ff8bcddfe8..7fdd225c0f 100644 --- a/react/features/base/toolbox/components/ToolboxItem.web.js +++ b/react/features/base/toolbox/components/ToolboxItem.web.js @@ -3,6 +3,8 @@ import Tooltip from '@atlaskit/tooltip'; import React, { Fragment } from 'react'; +import { Icon } from '../../icons'; + import AbstractToolboxItem from './AbstractToolboxItem'; import type { Props } from './AbstractToolboxItem'; @@ -65,12 +67,12 @@ export default class ToolboxItem extends AbstractToolboxItem { * @returns {ReactElement} */ _renderIcon() { - const { iconName, showLabel } = this.props; - const icon = ; + const { disabled, icon, showLabel, toggled } = this.props; + const iconComponent = ; const elementType = showLabel ? 'span' : 'div'; - const className - = showLabel ? 'overflow-menu-item-icon' : 'toolbox-icon'; + const className = `${showLabel ? 'overflow-menu-item-icon' : 'toolbox-icon'} ${ + toggled ? 'toggled' : ''} ${disabled ? 'disabled' : ''}`; - return React.createElement(elementType, { className }, icon); + return React.createElement(elementType, { className }, iconComponent); } } diff --git a/react/features/blur/components/VideoBlurButton.js b/react/features/blur/components/VideoBlurButton.js index cbe95612b2..ed2a39072c 100644 --- a/react/features/blur/components/VideoBlurButton.js +++ b/react/features/blur/components/VideoBlurButton.js @@ -4,6 +4,7 @@ import React from 'react'; import { createVideoBlurEvent, sendAnalytics } from '../../analytics'; import { translate } from '../../base/i18n'; +import { IconBlurBackground } from '../../base/icons'; import { connect } from '../../base/redux'; import { AbstractButton, BetaTag } from '../../base/toolbox'; import type { AbstractButtonProps } from '../../base/toolbox'; @@ -32,7 +33,7 @@ type Props = AbstractButtonProps & { */ class VideoBlurButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.videoblur'; - iconName = 'icon-blur-background'; + icon = IconBlurBackground; label = 'toolbar.startvideoblur'; tooltip = 'toolbar.startvideoblur'; toggledLabel = 'toolbar.stopvideoblur'; diff --git a/react/features/calendar-sync/components/AddMeetingUrlButton.web.js b/react/features/calendar-sync/components/AddMeetingUrlButton.web.js index 774b5d49a2..7694b36aff 100644 --- a/react/features/calendar-sync/components/AddMeetingUrlButton.web.js +++ b/react/features/calendar-sync/components/AddMeetingUrlButton.web.js @@ -9,6 +9,7 @@ import { sendAnalytics } from '../../analytics'; import { translate } from '../../base/i18n'; +import { Icon, IconAdd } from '../../base/icons'; import { connect } from '../../base/redux'; import { updateCalendarEvent } from '../actions'; @@ -68,7 +69,7 @@ class AddMeetingUrlButton extends Component {
    - +
    ); diff --git a/react/features/calendar-sync/components/ConferenceNotification.native.js b/react/features/calendar-sync/components/ConferenceNotification.native.js index 8af365cedc..e9cd4ae9ea 100644 --- a/react/features/calendar-sync/components/ConferenceNotification.native.js +++ b/react/features/calendar-sync/components/ConferenceNotification.native.js @@ -5,8 +5,8 @@ import { Text, TouchableOpacity, View } from 'react-native'; import { appNavigate } from '../../app'; import { getURLWithoutParamsNormalized } from '../../base/connection'; -import { Icon } from '../../base/font-icons'; import { getLocalizedDateFormatter, translate } from '../../base/i18n'; +import { Icon, IconNotificationJoin } from '../../base/icons'; import { connect } from '../../base/redux'; import { ASPECT_RATIO_NARROW } from '../../base/responsive-ui'; @@ -155,7 +155,7 @@ class ConferenceNotification extends Component { styles.notificationIconContainer }>
    diff --git a/react/features/chat/components/native/ChatButton.js b/react/features/chat/components/native/ChatButton.js index 2461d31277..9b71459d91 100644 --- a/react/features/chat/components/native/ChatButton.js +++ b/react/features/chat/components/native/ChatButton.js @@ -1,5 +1,6 @@ // @flow +import { IconChat, IconChatUnread } from '../../../base/icons'; import { getLocalParticipant } from '../../../base/participants'; import { connect } from '../../../base/redux'; import { @@ -42,9 +43,9 @@ type Props = AbstractButtonProps & { */ class ChatButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.chat'; - iconName = 'chat'; + icon = IconChat; label = 'toolbar.chat'; - toggledIconName = 'chat-unread'; + toggledIcon = IconChatUnread; /** * Handles clicking / pressing the button, and opens the appropriate dialog. diff --git a/react/features/chat/components/native/ChatInputBar.js b/react/features/chat/components/native/ChatInputBar.js index 3a88b27606..047fe28c05 100644 --- a/react/features/chat/components/native/ChatInputBar.js +++ b/react/features/chat/components/native/ChatInputBar.js @@ -3,7 +3,7 @@ import React, { Component } from 'react'; import { TextInput, TouchableOpacity, View } from 'react-native'; -import { Icon } from '../../../base/font-icons'; +import { Icon, IconChatSend } from '../../../base/icons'; import { Platform } from '../../../base/react'; import styles from './styles'; @@ -82,7 +82,7 @@ export default class ChatInputBar extends Component { { this.state.showSend && } diff --git a/react/features/connection-indicator/components/native/ConnectionIndicator.js b/react/features/connection-indicator/components/native/ConnectionIndicator.js index 474b6dc71c..8f8b8c449d 100644 --- a/react/features/connection-indicator/components/native/ConnectionIndicator.js +++ b/react/features/connection-indicator/components/native/ConnectionIndicator.js @@ -2,6 +2,7 @@ import React from 'react'; +import { IconSignalLevel0, IconSignalLevel1, IconSignalLevel2 } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; import { connect } from '../../../base/redux'; @@ -12,6 +13,12 @@ import AbstractConnectionIndicator, { import { CONNECTOR_INDICATOR_COLORS } from './styles'; +const ICONS = [ + IconSignalLevel0, + IconSignalLevel1, + IconSignalLevel2 +]; + /** * Implements an indicator to show the quality of the connection of a participant. */ @@ -50,7 +57,7 @@ class ConnectionIndicator extends AbstractConnectionIndicator { return ( diff --git a/react/features/connection-indicator/components/web/ConnectionIndicator.js b/react/features/connection-indicator/components/web/ConnectionIndicator.js index b0dbcfff65..813037019b 100644 --- a/react/features/connection-indicator/components/web/ConnectionIndicator.js +++ b/react/features/connection-indicator/components/web/ConnectionIndicator.js @@ -3,6 +3,7 @@ import React from 'react'; import { translate } from '../../../base/i18n'; +import { Icon, IconConnectionActive, IconConnectionInactive } from '../../../base/icons'; import { JitsiParticipantConnectionStatus } from '../../../base/lib-jitsi-meet'; import { Popover } from '../../../base/popover'; import { ConnectionStatsTable } from '../../../connection-stats'; @@ -283,7 +284,10 @@ class ConnectionIndicator extends AbstractConnectionIndicator { === JitsiParticipantConnectionStatus.INACTIVE) { return ( - + ); } @@ -310,13 +314,19 @@ class ConnectionIndicator extends AbstractConnectionIndicator { - + , - + ]; } diff --git a/react/features/filmstrip/components/native/AudioMutedIndicator.js b/react/features/filmstrip/components/native/AudioMutedIndicator.js index 6909761015..642f8b08bb 100644 --- a/react/features/filmstrip/components/native/AudioMutedIndicator.js +++ b/react/features/filmstrip/components/native/AudioMutedIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconMicDisabled } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -17,7 +18,7 @@ export default class AudioMutedIndicator extends Component<{}> { return ( + icon = { IconMicDisabled } /> ); } } diff --git a/react/features/filmstrip/components/native/DominantSpeakerIndicator.js b/react/features/filmstrip/components/native/DominantSpeakerIndicator.js index ffcb6567bd..6c6f4873f9 100644 --- a/react/features/filmstrip/components/native/DominantSpeakerIndicator.js +++ b/react/features/filmstrip/components/native/DominantSpeakerIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconDominantSpeaker } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -18,7 +19,7 @@ export default class DominantSpeakerIndicator extends Component<{}> { return ( + icon = { IconDominantSpeaker } /> ); } } diff --git a/react/features/filmstrip/components/native/ModeratorIndicator.js b/react/features/filmstrip/components/native/ModeratorIndicator.js index 952f0e7a71..7b196e808c 100644 --- a/react/features/filmstrip/components/native/ModeratorIndicator.js +++ b/react/features/filmstrip/components/native/ModeratorIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconModerator } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -17,7 +18,7 @@ export default class ModeratorIndicator extends Component<{}> { return ( + icon = { IconModerator } /> ); } } diff --git a/react/features/filmstrip/components/native/RaisedHandIndicator.js b/react/features/filmstrip/components/native/RaisedHandIndicator.js index 1a643b029f..9834e2990e 100644 --- a/react/features/filmstrip/components/native/RaisedHandIndicator.js +++ b/react/features/filmstrip/components/native/RaisedHandIndicator.js @@ -2,6 +2,7 @@ import React from 'react'; +import { IconRaisedHand } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; import { connect } from '../../../base/redux'; @@ -25,7 +26,7 @@ class RaisedHandIndicator extends AbstractRaisedHandIndicator { return ( + icon = { IconRaisedHand } /> ); } } diff --git a/react/features/filmstrip/components/native/VideoMutedIndicator.js b/react/features/filmstrip/components/native/VideoMutedIndicator.js index d457b13341..c3fad9e955 100644 --- a/react/features/filmstrip/components/native/VideoMutedIndicator.js +++ b/react/features/filmstrip/components/native/VideoMutedIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconCameraDisabled } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -17,7 +18,7 @@ export default class VideoMutedIndicator extends Component<{}> { return ( + icon = { IconCameraDisabled } /> ); } } diff --git a/react/features/filmstrip/components/web/AudioMutedIndicator.js b/react/features/filmstrip/components/web/AudioMutedIndicator.js index 2a6faca867..c9d1eecebe 100644 --- a/react/features/filmstrip/components/web/AudioMutedIndicator.js +++ b/react/features/filmstrip/components/web/AudioMutedIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconMicDisabled } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -31,7 +32,8 @@ class AudioMutedIndicator extends Component { return ( ); diff --git a/react/features/filmstrip/components/web/DominantSpeakerIndicator.js b/react/features/filmstrip/components/web/DominantSpeakerIndicator.js index 04f25a79ca..a1e16c35c7 100644 --- a/react/features/filmstrip/components/web/DominantSpeakerIndicator.js +++ b/react/features/filmstrip/components/web/DominantSpeakerIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconDominantSpeaker } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -37,7 +38,8 @@ class DominantSpeakerIndicator extends Component { return ( { * @returns {ReactElement} */ _renderToggleButton() { - const icon = this.props._visible ? 'icon-menu-down' : 'icon-menu-up'; + const icon = this.props._visible ? IconMenuDown : IconMenuUp; return (
    ); diff --git a/react/features/filmstrip/components/web/ModeratorIndicator.js b/react/features/filmstrip/components/web/ModeratorIndicator.js index daafb03ac2..1356dc407d 100644 --- a/react/features/filmstrip/components/web/ModeratorIndicator.js +++ b/react/features/filmstrip/components/web/ModeratorIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconModerator } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -32,7 +33,7 @@ class ModeratorIndicator extends Component {
    diff --git a/react/features/filmstrip/components/web/RaisedHandIndicator.js b/react/features/filmstrip/components/web/RaisedHandIndicator.js index f48cf95c36..ecc00f8175 100644 --- a/react/features/filmstrip/components/web/RaisedHandIndicator.js +++ b/react/features/filmstrip/components/web/RaisedHandIndicator.js @@ -2,6 +2,7 @@ import React from 'react'; +import { IconRaisedHand } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; import { connect } from '../../../base/redux'; @@ -41,7 +42,8 @@ class RaisedHandIndicator extends AbstractRaisedHandIndicator { return ( diff --git a/react/features/filmstrip/components/web/VideoMutedIndicator.js b/react/features/filmstrip/components/web/VideoMutedIndicator.js index 7204ce44c6..bf0e2d136d 100644 --- a/react/features/filmstrip/components/web/VideoMutedIndicator.js +++ b/react/features/filmstrip/components/web/VideoMutedIndicator.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { IconCameraDisabled } from '../../../base/icons'; import { BaseIndicator } from '../../../base/react'; /** @@ -30,7 +31,8 @@ class VideoMutedIndicator extends Component { return ( ); diff --git a/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js b/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js index 11c3b59578..2ed74f58d5 100644 --- a/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js +++ b/react/features/invite/components/add-people-dialog/native/AddPeopleDialog.js @@ -14,8 +14,8 @@ import { } from 'react-native'; import { AlertDialog, openDialog } from '../../../../base/dialog'; -import { Icon } from '../../../../base/font-icons'; import { translate } from '../../../../base/i18n'; +import { Icon, IconCancelSelection, IconCheck, IconClose, IconPhone, IconSearch } from '../../../../base/icons'; import { AvatarListItem, HeaderWithNavigation, @@ -172,7 +172,7 @@ class AddPeopleDialog extends AbstractAddPeopleDialog { color = { DARK_GREY } size = 'small' /> : } { switch (item.type) { case 'phone': return { - avatar: 'icon://phone', + avatar: IconPhone, key: item.number, title: item.number }; @@ -414,7 +414,7 @@ class AddPeopleDialog extends AbstractAddPeopleDialog { style = { styles.clearButton }> @@ -450,7 +450,7 @@ class AddPeopleDialog extends AbstractAddPeopleDialog { linesStyle = { styles.itemLinesStyle } titleStyle = { styles.itemText } /> @@ -504,7 +504,7 @@ class AddPeopleDialog extends AbstractAddPeopleDialog { linesStyle = { styles.itemLinesStyle } titleStyle = { styles.itemText } /> { selected && } diff --git a/react/features/invite/components/add-people-dialog/native/InviteButton.js b/react/features/invite/components/add-people-dialog/native/InviteButton.js index 2dfafecf23..ce46d982f9 100644 --- a/react/features/invite/components/add-people-dialog/native/InviteButton.js +++ b/react/features/invite/components/add-people-dialog/native/InviteButton.js @@ -3,6 +3,7 @@ import type { Dispatch } from 'redux'; import { translate } from '../../../../base/i18n'; +import { IconAddPeople } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import { AbstractButton } from '../../../../base/toolbox'; import type { AbstractButtonProps } from '../../../../base/toolbox'; @@ -24,7 +25,7 @@ type Props = AbstractButtonProps & { */ class InviteButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.shareRoom'; - iconName = 'icon-link'; + icon = IconAddPeople; label = 'toolbar.shareRoom'; /** diff --git a/react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js b/react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js index 17de2d2e75..b7536ec7e4 100644 --- a/react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js +++ b/react/features/invite/components/add-people-dialog/web/AddPeopleDialog.js @@ -8,6 +8,7 @@ import type { Dispatch } from 'redux'; import { createInviteDialogEvent, sendAnalytics } from '../../../../analytics'; import { Dialog, hideDialog } from '../../../../base/dialog'; import { translate, translateToHTML } from '../../../../base/i18n'; +import { Icon, IconPhone } from '../../../../base/icons'; import { getLocalParticipant } from '../../../../base/participants'; import { MultiSelectAutocomplete } from '../../../../base/react'; import { connect } from '../../../../base/redux'; @@ -166,7 +167,7 @@ class AddPeopleDialog extends AbstractAddPeopleDialog { content:
    - +
    { translateToHTML(t, 'addPeople.footerText') } @@ -388,7 +389,7 @@ class AddPeopleDialog extends AbstractAddPeopleDialog { _renderTelephoneIcon() { return ( - + ); } diff --git a/react/features/invite/components/info-dialog/native/InfoDialogButton.js b/react/features/invite/components/info-dialog/native/InfoDialogButton.js index 19f7312b0e..b954c506ba 100644 --- a/react/features/invite/components/info-dialog/native/InfoDialogButton.js +++ b/react/features/invite/components/info-dialog/native/InfoDialogButton.js @@ -3,6 +3,7 @@ import type { Dispatch } from 'redux'; import { translate } from '../../../../base/i18n'; +import { IconInfo } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import { AbstractButton } from '../../../../base/toolbox'; import type { AbstractButtonProps } from '../../../../base/toolbox'; @@ -21,7 +22,7 @@ type Props = AbstractButtonProps & { */ class InfoDialogButton extends AbstractButton { accessibilityLabel = 'info.accessibilityLabel'; - iconName = 'icon-info'; + icon = IconInfo; label = 'info.label'; /** diff --git a/react/features/invite/components/info-dialog/web/InfoDialog.js b/react/features/invite/components/info-dialog/web/InfoDialog.js index cb327104b9..9131edb78b 100644 --- a/react/features/invite/components/info-dialog/web/InfoDialog.js +++ b/react/features/invite/components/info-dialog/web/InfoDialog.js @@ -7,6 +7,7 @@ import { setPassword } from '../../../../base/conference'; import { getInviteURL } from '../../../../base/connection'; import { Dialog } from '../../../../base/dialog'; import { translate } from '../../../../base/i18n'; +import { Icon, IconInfo } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import { isLocalParticipantModerator, @@ -22,6 +23,7 @@ import logger from '../../../logger'; import DialInNumber from './DialInNumber'; import PasswordForm from './PasswordForm'; + /** * The type of the React {@code Component} props of {@link InfoDialog}. */ @@ -223,7 +225,7 @@ class InfoDialog extends Component { onMouseOver = { onMouseOver } >

    - +

    diff --git a/react/features/invite/components/info-dialog/web/InfoDialogButton.js b/react/features/invite/components/info-dialog/web/InfoDialogButton.js index 333fe5547f..8a590adf0c 100644 --- a/react/features/invite/components/info-dialog/web/InfoDialogButton.js +++ b/react/features/invite/components/info-dialog/web/InfoDialogButton.js @@ -7,6 +7,7 @@ import type { Dispatch } from 'redux'; import { createToolbarEvent, sendAnalytics } from '../../../../analytics'; import { openDialog } from '../../../../base/dialog'; import { translate } from '../../../../base/i18n'; +import { IconInfo } from '../../../../base/icons'; import { JitsiRecordingConstants } from '../../../../base/lib-jitsi-meet'; import { getParticipantCount } from '../../../../base/participants'; import { OverflowMenuItem } from '../../../../base/toolbox'; @@ -153,7 +154,6 @@ class InfoDialogButton extends Component { render() { const { _dialIn, _liveStreamViewURL, showLabel, t } = this.props; const { showDialog } = this.state; - const iconClass = `icon-info ${showDialog ? 'toggled' : ''}`; if (showLabel) { return ( @@ -180,7 +180,7 @@ class InfoDialogButton extends Component { position = { 'top right' }> diff --git a/react/features/local-recording/components/LocalRecordingButton.js b/react/features/local-recording/components/LocalRecordingButton.js index 7d8a18577a..aeb61fc0e4 100644 --- a/react/features/local-recording/components/LocalRecordingButton.js +++ b/react/features/local-recording/components/LocalRecordingButton.js @@ -3,6 +3,7 @@ import React, { Component } from 'react'; import { translate } from '../../base/i18n'; +import { IconRec } from '../../base/icons'; import { ToolbarButton } from '../../toolbox'; /** @@ -56,16 +57,14 @@ class LocalRecordingButton extends Component { */ render() { const { isDialogShown, t } = this.props; - const iconClasses - = `icon-thumb-menu ${isDialogShown - ? 'icon-rec toggled' : 'icon-rec'}`; return ( ); } diff --git a/react/features/mobile/audio-mode/components/AudioRouteButton.js b/react/features/mobile/audio-mode/components/AudioRouteButton.js index a75c37603e..a5207b079d 100644 --- a/react/features/mobile/audio-mode/components/AudioRouteButton.js +++ b/react/features/mobile/audio-mode/components/AudioRouteButton.js @@ -2,6 +2,7 @@ import { openDialog } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; +import { IconAudioRoute } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -23,7 +24,7 @@ type Props = AbstractButtonProps & { */ class AudioRouteButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.audioRoute'; - iconName = 'icon-volume'; + icon = IconAudioRoute; label = 'toolbar.audioRoute'; /** diff --git a/react/features/mobile/audio-mode/components/AudioRoutePickerDialog.js b/react/features/mobile/audio-mode/components/AudioRoutePickerDialog.js index 1bc2d546a5..406e0f001d 100644 --- a/react/features/mobile/audio-mode/components/AudioRoutePickerDialog.js +++ b/react/features/mobile/audio-mode/components/AudioRoutePickerDialog.js @@ -7,7 +7,13 @@ import { NativeModules, Text, TouchableHighlight, View } from 'react-native'; import { ColorSchemeRegistry } from '../../../base/color-scheme'; import { hideDialog, BottomSheet } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; -import { Icon } from '../../../base/font-icons'; +import { + Icon, + IconDeviceBluetooth, + IconDeviceEarpiece, + IconDeviceHeadphone, + IconDeviceSpeaker +} from '../../../base/icons'; import { connect } from '../../../base/redux'; import { ColorPalette, type StyleType } from '../../../base/styles'; @@ -23,7 +29,7 @@ type Device = { /** * Name of the icon which will be rendered on the right. */ - iconName: string, + icon: Object, /** * True if the element is selected (will be highlighted in blue), @@ -115,22 +121,22 @@ type State = { */ const deviceInfoMap = { BLUETOOTH: { - iconName: 'bluetooth', + icon: IconDeviceBluetooth, text: 'audioDevices.bluetooth', type: 'BLUETOOTH' }, EARPIECE: { - iconName: 'phone-talk', + icon: IconDeviceEarpiece, text: 'audioDevices.phone', type: 'EARPIECE' }, HEADPHONES: { - iconName: 'headset', + icon: IconDeviceHeadphone, text: 'audioDevices.headphones', type: 'HEADPHONES' }, SPEAKER: { - iconName: 'volume', + icon: IconDeviceSpeaker, text: 'audioDevices.speaker', type: 'SPEAKER' } @@ -253,7 +259,7 @@ class AudioRoutePickerDialog extends Component { */ _renderDevice(device: Device) { const { _bottomSheetStyles } = this.props; - const { iconName, selected, text } = device; + const { icon, selected, text } = device; const selectedStyle = selected ? styles.selectedText : {}; return ( @@ -263,7 +269,7 @@ class AudioRoutePickerDialog extends Component { underlayColor = { ColorPalette.overflowMenuItemUnderlay } > { text } @@ -285,7 +291,7 @@ class AudioRoutePickerDialog extends Component { return ( { t('audioDevices.none') } diff --git a/react/features/mobile/incoming-call/components/AnswerButton.js b/react/features/mobile/incoming-call/components/AnswerButton.js index 0127362c6c..1d4d9cba26 100644 --- a/react/features/mobile/incoming-call/components/AnswerButton.js +++ b/react/features/mobile/incoming-call/components/AnswerButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../base/i18n'; +import { IconHangup } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -23,7 +24,7 @@ type Props = AbstractButtonProps & { */ class AnswerButton extends AbstractButton { accessibilityLabel = 'incomingCall.answer'; - iconName = 'hangup'; + icon = IconHangup; label = 'incomingCall.answer'; /** diff --git a/react/features/mobile/incoming-call/components/DeclineButton.js b/react/features/mobile/incoming-call/components/DeclineButton.js index cb036cacd2..988c4c5ecc 100644 --- a/react/features/mobile/incoming-call/components/DeclineButton.js +++ b/react/features/mobile/incoming-call/components/DeclineButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../base/i18n'; +import { IconHangup } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -23,7 +24,7 @@ type Props = AbstractButtonProps & { */ class DeclineButton extends AbstractButton { accessibilityLabel = 'incomingCall.decline'; - iconName = 'hangup'; + icon = IconHangup; label = 'incomingCall.decline'; /** diff --git a/react/features/mobile/picture-in-picture/components/PictureInPictureButton.js b/react/features/mobile/picture-in-picture/components/PictureInPictureButton.js index 24a2b87cf9..61a54dd60c 100644 --- a/react/features/mobile/picture-in-picture/components/PictureInPictureButton.js +++ b/react/features/mobile/picture-in-picture/components/PictureInPictureButton.js @@ -2,6 +2,7 @@ import { PIP_ENABLED, getFeatureFlag } from '../../../base/flags'; import { translate } from '../../../base/i18n'; +import { IconMenuDown } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -26,7 +27,7 @@ type Props = AbstractButtonProps & { */ class PictureInPictureButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.pip'; - iconName = 'icon-menu-down'; + icon = IconMenuDown; label = 'toolbar.pip'; /** diff --git a/react/features/notifications/components/native/Notification.js b/react/features/notifications/components/native/Notification.js index 7c89f869d0..6b36ccac7c 100644 --- a/react/features/notifications/components/native/Notification.js +++ b/react/features/notifications/components/native/Notification.js @@ -3,8 +3,8 @@ import React from 'react'; import { Text, TouchableOpacity, View } from 'react-native'; -import { Icon } from '../../../base/font-icons'; import { translate } from '../../../base/i18n'; +import { Icon, IconClose } from '../../../base/icons'; import AbstractNotification, { type Props @@ -46,7 +46,7 @@ class Notification extends AbstractNotification { isDismissAllowed && } diff --git a/react/features/recording/components/LiveStream/native/LiveStreamButton.js b/react/features/recording/components/LiveStream/native/LiveStreamButton.js index 6e5d7c2e51..e3035eadd5 100644 --- a/react/features/recording/components/LiveStream/native/LiveStreamButton.js +++ b/react/features/recording/components/LiveStream/native/LiveStreamButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../../base/i18n'; +import { IconLiveStreaming } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import AbstractLiveStreamButton, { @@ -12,8 +13,7 @@ import AbstractLiveStreamButton, { * An implementation of a button for starting and stopping live streaming. */ class LiveStreamButton extends AbstractLiveStreamButton { - iconName = 'public'; - toggledIconName = 'public'; + icon = IconLiveStreaming; } export default translate(connect(_mapStateToProps)(LiveStreamButton)); diff --git a/react/features/recording/components/LiveStream/web/LiveStreamButton.js b/react/features/recording/components/LiveStream/web/LiveStreamButton.js index 127f22dfa2..3da3c34b90 100644 --- a/react/features/recording/components/LiveStream/web/LiveStreamButton.js +++ b/react/features/recording/components/LiveStream/web/LiveStreamButton.js @@ -3,6 +3,7 @@ import React from 'react'; import { translate } from '../../../../base/i18n'; +import { IconLiveStreaming } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import { BetaTag } from '../../../../base/toolbox'; @@ -34,8 +35,7 @@ type Props = AbstractProps & { * An implementation of a button for starting and stopping live streaming. */ class LiveStreamButton extends AbstractLiveStreamButton { - iconName = 'icon-public'; - toggledIconName = 'icon-public'; + icon = IconLiveStreaming; /** * Helper function to be implemented by subclasses, which returns diff --git a/react/features/recording/components/Recording/native/RecordButton.js b/react/features/recording/components/Recording/native/RecordButton.js index 3fd9e61686..ffeb6a200f 100644 --- a/react/features/recording/components/Recording/native/RecordButton.js +++ b/react/features/recording/components/Recording/native/RecordButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../../base/i18n'; +import { IconToggleRecording } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import AbstractRecordButton, { @@ -12,8 +13,7 @@ import AbstractRecordButton, { * An implementation of a button for starting and stopping recording. */ class RecordButton extends AbstractRecordButton { - iconName = 'camera-take-picture'; - toggledIconName = 'camera-take-picture'; + icon = IconToggleRecording; } export default translate(connect(_mapStateToProps)(RecordButton)); diff --git a/react/features/recording/components/Recording/web/RecordButton.js b/react/features/recording/components/Recording/web/RecordButton.js index 244dcdc937..3fb8de6181 100644 --- a/react/features/recording/components/Recording/web/RecordButton.js +++ b/react/features/recording/components/Recording/web/RecordButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../../base/i18n'; +import { IconToggleRecording } from '../../../../base/icons'; import { connect } from '../../../../base/redux'; import AbstractRecordButton, { @@ -31,8 +32,7 @@ type Props = AbstractProps & { * An implementation of a button for starting and stopping recording. */ class RecordButton extends AbstractRecordButton { - iconName = 'icon-camera-take-picture'; - toggledIconName = 'icon-camera-take-picture'; + icon = IconToggleRecording; /** * Returns the tooltip that should be displayed when the button is disabled. diff --git a/react/features/remote-video-menu/components/AbstractKickButton.js b/react/features/remote-video-menu/components/AbstractKickButton.js index 2364ef5237..c71c20bf40 100644 --- a/react/features/remote-video-menu/components/AbstractKickButton.js +++ b/react/features/remote-video-menu/components/AbstractKickButton.js @@ -1,6 +1,7 @@ // @flow import { openDialog } from '../../base/dialog'; +import { IconKick } from '../../base/icons'; import { AbstractButton } from '../../base/toolbox'; import type { AbstractButtonProps } from '../../base/toolbox'; @@ -29,7 +30,7 @@ export type Props = AbstractButtonProps & { */ export default class AbstractKickButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.kick'; - iconName = 'icon-kick'; + icon = IconKick; label = 'videothumbnail.kick'; /** diff --git a/react/features/remote-video-menu/components/AbstractMuteButton.js b/react/features/remote-video-menu/components/AbstractMuteButton.js index 748a9fe7db..edee3b4e9d 100644 --- a/react/features/remote-video-menu/components/AbstractMuteButton.js +++ b/react/features/remote-video-menu/components/AbstractMuteButton.js @@ -5,6 +5,7 @@ import { sendAnalytics } from '../../analytics'; import { openDialog } from '../../base/dialog'; +import { IconMicDisabled } from '../../base/icons'; import { MEDIA_TYPE } from '../../base/media'; import { AbstractButton, @@ -44,7 +45,7 @@ export type Props = AbstractButtonProps & { */ export default class AbstractMuteButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.remoteMute'; - iconName = 'icon-mic-disabled'; + icon = IconMicDisabled; label = 'videothumbnail.domute'; toggledLabel = 'videothumbnail.muted'; diff --git a/react/features/remote-video-menu/components/native/PinButton.js b/react/features/remote-video-menu/components/native/PinButton.js index 411a666ac2..fc29208b5d 100644 --- a/react/features/remote-video-menu/components/native/PinButton.js +++ b/react/features/remote-video-menu/components/native/PinButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../base/i18n'; +import { IconPin } from '../../../base/icons'; import { pinParticipant } from '../../../base/participants'; import { connect } from '../../../base/redux'; import { AbstractButton, type AbstractButtonProps } from '../../../base/toolbox'; @@ -33,7 +34,7 @@ export type Props = AbstractButtonProps & { */ class PinButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.show'; - iconName = 'icon-enlarge'; + icon = IconPin; label = 'videothumbnail.show'; /** diff --git a/react/features/remote-video-menu/components/web/KickButton.js b/react/features/remote-video-menu/components/web/KickButton.js index 1cc30f172f..e687372b09 100644 --- a/react/features/remote-video-menu/components/web/KickButton.js +++ b/react/features/remote-video-menu/components/web/KickButton.js @@ -3,6 +3,7 @@ import React from 'react'; import { translate } from '../../../base/i18n'; +import { IconKick } from '../../../base/icons'; import { connect } from '../../../base/redux'; import AbstractKickButton, { @@ -46,7 +47,7 @@ class KickButton extends AbstractKickButton { diff --git a/react/features/remote-video-menu/components/web/MuteButton.js b/react/features/remote-video-menu/components/web/MuteButton.js index 66044326ef..45e8b0c1df 100644 --- a/react/features/remote-video-menu/components/web/MuteButton.js +++ b/react/features/remote-video-menu/components/web/MuteButton.js @@ -3,6 +3,7 @@ import React from 'react'; import { translate } from '../../../base/i18n'; +import { IconMicDisabled } from '../../../base/icons'; import { connect } from '../../../base/redux'; import AbstractMuteButton, { @@ -54,7 +55,7 @@ class MuteButton extends AbstractMuteButton { diff --git a/react/features/remote-video-menu/components/web/RemoteControlButton.js b/react/features/remote-video-menu/components/web/RemoteControlButton.js index 3d8111ceff..83f5ad5ca1 100644 --- a/react/features/remote-video-menu/components/web/RemoteControlButton.js +++ b/react/features/remote-video-menu/components/web/RemoteControlButton.js @@ -7,6 +7,7 @@ import { sendAnalytics } from '../../../analytics'; import { translate } from '../../../base/i18n'; +import { IconRemoteControlStart, IconRemoteControlStop } from '../../../base/icons'; import RemoteVideoMenuButton from './RemoteVideoMenuButton'; @@ -84,14 +85,14 @@ class RemoteControlButton extends Component { switch (remoteControlState) { case REMOTE_CONTROL_MENU_STATES.NOT_STARTED: - icon = 'icon-play'; + icon = IconRemoteControlStart; break; case REMOTE_CONTROL_MENU_STATES.REQUESTING: className = ' disabled'; - icon = 'icon-play'; + icon = IconRemoteControlStart; break; case REMOTE_CONTROL_MENU_STATES.STARTED: - icon = 'icon-stop'; + icon = IconRemoteControlStop; break; case REMOTE_CONTROL_MENU_STATES.NOT_SUPPORTED: @@ -104,7 +105,7 @@ class RemoteControlButton extends Component { ); diff --git a/react/features/remote-video-menu/components/web/RemoteVideoMenuButton.js b/react/features/remote-video-menu/components/web/RemoteVideoMenuButton.js index d1b89a5373..c5536f9f75 100644 --- a/react/features/remote-video-menu/components/web/RemoteVideoMenuButton.js +++ b/react/features/remote-video-menu/components/web/RemoteVideoMenuButton.js @@ -2,6 +2,8 @@ import React, { Component } from 'react'; +import { Icon } from '../../../base/icons'; + /** * The type of the React {@code Component} props of * {@link RemoteVideoMenuButton}. @@ -19,9 +21,9 @@ type Props = { displayClass?: string, /** - * The CSS classes for the icon that will display within the component. + * The icon that will display within the component. */ - iconClass: string, + icon: Object, /** * The id attribute to be added to the component's DOM for retrieval when @@ -51,7 +53,7 @@ export default class RemoteVideoMenuButton extends Component { const { buttonText, displayClass, - iconClass, + icon, id, onClick } = this.props; @@ -65,7 +67,7 @@ export default class RemoteVideoMenuButton extends Component { id = { id } onClick = { onClick }> - + { buttonText } diff --git a/react/features/remote-video-menu/components/web/RemoteVideoMenuTriggerButton.js b/react/features/remote-video-menu/components/web/RemoteVideoMenuTriggerButton.js index 0686873f25..665d0f60a6 100644 --- a/react/features/remote-video-menu/components/web/RemoteVideoMenuTriggerButton.js +++ b/react/features/remote-video-menu/components/web/RemoteVideoMenuTriggerButton.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; +import { Icon, IconMenuThumb } from '../../../base/icons'; import { Popover } from '../../../base/popover'; import { @@ -122,8 +123,9 @@ class RemoteVideoMenuTriggerButton extends Component { position = { this.props.menuPosition }> - diff --git a/react/features/remote-video-menu/components/web/VolumeSlider.js b/react/features/remote-video-menu/components/web/VolumeSlider.js index 75c562a83e..965b9d6a66 100644 --- a/react/features/remote-video-menu/components/web/VolumeSlider.js +++ b/react/features/remote-video-menu/components/web/VolumeSlider.js @@ -2,6 +2,8 @@ import React, { Component } from 'react'; +import { Icon, IconVolume } from '../../../base/icons'; + /** * Used to modify initialValue, which is expected to be a decimal value between * 0 and 1, and converts it to a number representable by an input slider, which @@ -74,7 +76,7 @@ class VolumeSlider extends Component {
  • - +
    { accessibilityLabel = 'toolbar.accessibilityLabel.lockRoom'; - iconName = 'security'; + icon = IconRoomLock; label = 'dialog.lockRoom'; - toggledIconName = 'security-locked'; + toggledIcon = IconRoomUnlock; toggledLabel = 'dialog.unlockRoom'; /** diff --git a/react/features/settings/components/web/SettingsButton.js b/react/features/settings/components/web/SettingsButton.js index 8ed70ceeab..e8be346574 100644 --- a/react/features/settings/components/web/SettingsButton.js +++ b/react/features/settings/components/web/SettingsButton.js @@ -2,6 +2,7 @@ import { createToolbarEvent, sendAnalytics } from '../../../analytics'; import { translate } from '../../../base/i18n'; +import { IconSettings } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -38,7 +39,7 @@ type Props = AbstractButtonProps & { */ class SettingsButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.Settings'; - iconName = 'icon-settings'; + icon = IconSettings; label = 'toolbar.Settings'; tooltip = 'toolbar.Settings'; diff --git a/react/features/subtitles/components/ClosedCaptionButton.native.js b/react/features/subtitles/components/ClosedCaptionButton.native.js index 1da94e4797..7be1d19dcb 100644 --- a/react/features/subtitles/components/ClosedCaptionButton.native.js +++ b/react/features/subtitles/components/ClosedCaptionButton.native.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../base/i18n'; +import { IconClosedCaption } from '../../base/icons'; import { connect } from '../../base/redux'; import { @@ -13,11 +14,9 @@ import { */ class ClosedCaptionButton extends AbstractClosedCaptionButton { - accessibilityLabel = 'toolbar.accessibilityLabel.cc'; - iconName = 'closed_caption'; + icon = IconClosedCaption; label = 'transcribing.start'; - toggledIconName = 'closed_caption'; toggledLabel = 'transcribing.stop'; } diff --git a/react/features/subtitles/components/ClosedCaptionButton.web.js b/react/features/subtitles/components/ClosedCaptionButton.web.js index 99cc8d5530..482d548aab 100644 --- a/react/features/subtitles/components/ClosedCaptionButton.web.js +++ b/react/features/subtitles/components/ClosedCaptionButton.web.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../base/i18n'; +import { IconClosedCaption } from '../../base/icons'; import { connect } from '../../base/redux'; import { @@ -15,8 +16,7 @@ class ClosedCaptionButton extends AbstractClosedCaptionButton { accessibilityLabel = 'toolbar.accessibilityLabel.cc'; - iconName = 'icon-closed_caption'; - toggledIconName = 'icon-closed_caption toggled'; + icon = IconClosedCaption; tooltip = 'transcribing.ccButtonTooltip'; label = 'toolbar.startSubtitles'; toggledLabel = 'toolbar.stopSubtitles'; diff --git a/react/features/toolbox/components/AbstractToolbarButton.js b/react/features/toolbox/components/AbstractToolbarButton.js index 9bad279751..50dc1d6fe0 100644 --- a/react/features/toolbox/components/AbstractToolbarButton.js +++ b/react/features/toolbox/components/AbstractToolbarButton.js @@ -1,6 +1,6 @@ /* @flow */ -import React, { Component } from 'react'; +import { Component } from 'react'; /** * The type of the React {@code Component} props of @@ -15,9 +15,9 @@ export type Props = { accessibilityLabel: string, /** - * The name of the Icon of this {@code AbstractToolbarButton}. + * The Icon of this {@code AbstractToolbarButton}. */ - iconName: string, + icon: Object, /** * The style of the Icon of this {@code AbstractToolbarButton}. @@ -34,6 +34,11 @@ export type Props = { */ style?: Array | Object, + /** + * An optional modifier to render the button toggled. + */ + toggled?: boolean, + /** * The color underlaying the button. */ @@ -85,27 +90,7 @@ export default class AbstractToolbarButton extends Component

    { return this._renderButton(this._renderIcon()); } - _renderButton: (React$Element<*> | null) => React$Element<*>; + _renderButton: (React$Element | null) => React$Element; - /** - * Renders the icon of this {@code AbstractToolbarButton}. - * - * @param {string|ReactClass} type - The React Component type of the icon to - * be rendered. - * @protected - * @returns {ReactElement|null} The icon of this - * {@code AbstractToolbarButton}. - */ - _renderIcon(type) { - if (!type) { - return null; - } - - const props = {}; - - 'iconName' in this.props && (props.name = this.props.iconName); - 'iconStyle' in this.props && (props.style = this.props.iconStyle); - - return React.createElement(type, props); - } + _renderIcon: () => React$Element | null; } diff --git a/react/features/toolbox/components/native/AudioOnlyButton.js b/react/features/toolbox/components/native/AudioOnlyButton.js index fcc355ef6d..49def738bb 100644 --- a/react/features/toolbox/components/native/AudioOnlyButton.js +++ b/react/features/toolbox/components/native/AudioOnlyButton.js @@ -2,6 +2,7 @@ import { toggleAudioOnly } from '../../../base/audio-only'; import { translate } from '../../../base/i18n'; +import { IconAudioOnly, IconAudioOnlyOff } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -27,9 +28,9 @@ type Props = AbstractButtonProps & { */ class AudioOnlyButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.audioOnly'; - iconName = 'visibility'; + icon = IconAudioOnly; label = 'toolbar.audioOnlyOn'; - toggledIconName = 'visibility-off'; + toggledIcon = IconAudioOnlyOff; toggledLabel = 'toolbar.audioOnlyOff'; /** diff --git a/react/features/toolbox/components/native/OverflowMenuButton.js b/react/features/toolbox/components/native/OverflowMenuButton.js index a366b4f59b..9f7487771f 100644 --- a/react/features/toolbox/components/native/OverflowMenuButton.js +++ b/react/features/toolbox/components/native/OverflowMenuButton.js @@ -2,6 +2,7 @@ import { openDialog } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; +import { IconMenuThumb } from '../../../base/icons'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; import type { AbstractButtonProps } from '../../../base/toolbox'; @@ -24,7 +25,7 @@ type Props = AbstractButtonProps & { */ class OverflowMenuButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.moreActions'; - iconName = 'icon-thumb-menu'; + icon = IconMenuThumb; label = 'toolbar.moreActions'; /** diff --git a/react/features/toolbox/components/native/RaiseHandButton.js b/react/features/toolbox/components/native/RaiseHandButton.js index dc2b5049d9..3d5c1c77b1 100644 --- a/react/features/toolbox/components/native/RaiseHandButton.js +++ b/react/features/toolbox/components/native/RaiseHandButton.js @@ -7,6 +7,7 @@ import { sendAnalytics } from '../../../analytics'; import { translate } from '../../../base/i18n'; +import { IconRaisedHand } from '../../../base/icons'; import { getLocalParticipant, participantUpdated @@ -41,9 +42,8 @@ type Props = AbstractButtonProps & { */ class RaiseHandButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.raiseHand'; - iconName = 'raised-hand'; + icon = IconRaisedHand; label = 'toolbar.raiseYourHand'; - toggledIconName = 'raised-hand'; toggledLabel = 'toolbar.lowerYourHand'; /** diff --git a/react/features/toolbox/components/native/ToggleCameraButton.js b/react/features/toolbox/components/native/ToggleCameraButton.js index 99ddbfbeb3..f5ec0a2c7c 100644 --- a/react/features/toolbox/components/native/ToggleCameraButton.js +++ b/react/features/toolbox/components/native/ToggleCameraButton.js @@ -1,6 +1,7 @@ // @flow import { translate } from '../../../base/i18n'; +import { IconSwitchCamera } from '../../../base/icons'; import { MEDIA_TYPE, toggleCameraFacingMode } from '../../../base/media'; import { connect } from '../../../base/redux'; import { AbstractButton } from '../../../base/toolbox'; @@ -33,7 +34,7 @@ type Props = AbstractButtonProps & { */ class ToggleCameraButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.toggleCamera'; - iconName = 'icon-switch-camera'; + icon = IconSwitchCamera; label = 'toolbar.toggleCamera'; /** diff --git a/react/features/toolbox/components/web/OverflowMenuButton.js b/react/features/toolbox/components/web/OverflowMenuButton.js index 98401da932..80fc5b5c04 100644 --- a/react/features/toolbox/components/web/OverflowMenuButton.js +++ b/react/features/toolbox/components/web/OverflowMenuButton.js @@ -5,6 +5,7 @@ import React, { Component } from 'react'; import { createToolbarEvent, sendAnalytics } from '../../../analytics'; import { translate } from '../../../base/i18n'; +import { IconMenuThumb } from '../../../base/icons'; import ToolbarButton from './ToolbarButton'; @@ -63,7 +64,6 @@ class OverflowMenuButton extends Component { */ render() { const { children, isOpen, t } = this.props; - const iconClasses = `icon-thumb-menu ${isOpen ? 'toggled' : ''}`; return (

    @@ -75,8 +75,9 @@ class OverflowMenuButton extends Component {
    diff --git a/react/features/toolbox/components/web/ToolbarButton.js b/react/features/toolbox/components/web/ToolbarButton.js index 724cd5fd2e..5b779d5304 100644 --- a/react/features/toolbox/components/web/ToolbarButton.js +++ b/react/features/toolbox/components/web/ToolbarButton.js @@ -3,6 +3,8 @@ import Tooltip from '@atlaskit/tooltip'; import React from 'react'; +import { Icon } from '../../../base/icons'; + import AbstractToolbarButton from '../AbstractToolbarButton'; import type { Props as AbstractToolbarButtonProps } from '../AbstractToolbarButton'; @@ -71,8 +73,8 @@ class ToolbarButton extends AbstractToolbarButton { */ _renderIcon() { return ( -
    - +
    +
    ); } diff --git a/react/features/toolbox/components/web/Toolbox.js b/react/features/toolbox/components/web/Toolbox.js index b0ae372611..929bdd0d6d 100644 --- a/react/features/toolbox/components/web/Toolbox.js +++ b/react/features/toolbox/components/web/Toolbox.js @@ -10,6 +10,20 @@ import { } from '../../../analytics'; import { openDialog, toggleDialog } from '../../../base/dialog'; import { translate } from '../../../base/i18n'; +import { + IconChat, + IconExitFullScreen, + IconFeedback, + IconFullScreen, + IconInvite, + IconOpenInNew, + IconPresentation, + IconRaisedHand, + IconRec, + IconShareDesktop, + IconShareDoc, + IconShareVideo +} from '../../../base/icons'; import { getLocalParticipant, getParticipants, @@ -900,7 +914,8 @@ class Toolbox extends Component { accessibilityLabel = { t('toolbar.accessibilityLabel.shareYourScreen') } disabled = { _desktopSharingEnabled } - icon = { 'icon-share-desktop' } + icon = { IconShareDesktop } + iconId = 'share-desktop' key = 'desktop' onClick = { this._onToolbarToggleScreenshare } text = { @@ -912,9 +927,6 @@ class Toolbox extends Component { ); } - const classNames = `icon-share-desktop ${ - _screensharing ? 'toggled' : ''} ${ - _desktopSharingEnabled ? '' : 'disabled'}`; const tooltip = t( _desktopSharingEnabled ? 'dialog.shareYourScreen' : _desktopSharingDisabledTooltipKey); @@ -923,8 +935,10 @@ class Toolbox extends Component { ); } @@ -969,8 +983,8 @@ class Toolbox extends Component { accessibilityLabel = { t('toolbar.accessibilityLabel.fullScreen') } icon = { _fullScreen - ? 'icon-exit-full-screen' - : 'icon-full-screen' } + ? IconExitFullScreen + : IconFullScreen } key = 'fullscreen' onClick = { this._onToolbarToggleFullScreen } text = { _fullScreen @@ -986,7 +1000,7 @@ class Toolbox extends Component { && { && { && , @@ -1024,7 +1038,7 @@ class Toolbox extends Component { && , @@ -1032,7 +1046,7 @@ class Toolbox extends Component { && @@ -1063,7 +1077,7 @@ class Toolbox extends Component { { { @@ -1108,7 +1122,7 @@ class Toolbox extends Component { { { t('toolbar.accessibilityLabel.raiseHand') } - iconName = { _raisedHand - ? 'icon-raised-hand toggled' - : 'icon-raised-hand' } + icon = { IconRaisedHand } onClick = { this._onToolbarToggleRaiseHand } + toggled = { _raisedHand } tooltip = { t('toolbar.raiseHand') } /> } { buttonsLeft.indexOf('chat') !== -1 &&
    } @@ -1266,7 +1278,7 @@ class Toolbox extends Component { && } { diff --git a/react/features/video-layout/components/TileViewButton.js b/react/features/video-layout/components/TileViewButton.js index e5272ce706..66827b5fd4 100644 --- a/react/features/video-layout/components/TileViewButton.js +++ b/react/features/video-layout/components/TileViewButton.js @@ -7,6 +7,7 @@ import { sendAnalytics } from '../../analytics'; import { translate } from '../../base/i18n'; +import { IconTileView } from '../../base/icons'; import { connect } from '../../base/redux'; import { AbstractButton, @@ -39,10 +40,9 @@ type Props = AbstractButtonProps & { */ class TileViewButton extends AbstractButton { accessibilityLabel = 'toolbar.accessibilityLabel.tileView'; - iconName = 'icon-tiles-many'; + icon = IconTileView; label = 'toolbar.enterTileView'; toggledLabel = 'toolbar.exitTileView'; - toggledIconName = 'icon-tiles-many toggled'; tooltip = 'toolbar.tileViewToggle'; /** diff --git a/react/features/video-quality/components/OverflowMenuVideoQualityItem.web.js b/react/features/video-quality/components/OverflowMenuVideoQualityItem.web.js index 3dbace7477..1c390c71a8 100644 --- a/react/features/video-quality/components/OverflowMenuVideoQualityItem.web.js +++ b/react/features/video-quality/components/OverflowMenuVideoQualityItem.web.js @@ -4,6 +4,13 @@ import React, { Component } from 'react'; import { VIDEO_QUALITY_LEVELS } from '../../base/conference'; import { translate } from '../../base/i18n'; +import { + Icon, + IconVideoQualityAudioOnly, + IconVideoQualityHD, + IconVideoQualityLD, + IconVideoQualitySD +} from '../../base/icons'; import { connect } from '../../base/redux'; /** @@ -13,9 +20,9 @@ import { connect } from '../../base/redux'; * @type {Object} */ const VIDEO_QUALITY_TO_ICON = { - [VIDEO_QUALITY_LEVELS.HIGH]: 'icon-HD', - [VIDEO_QUALITY_LEVELS.STANDARD]: 'icon-SD', - [VIDEO_QUALITY_LEVELS.LOW]: 'icon-LD' + [VIDEO_QUALITY_LEVELS.HIGH]: IconVideoQualityHD, + [VIDEO_QUALITY_LEVELS.STANDARD]: IconVideoQualitySD, + [VIDEO_QUALITY_LEVELS.LOW]: IconVideoQualityLD }; /** @@ -63,7 +70,7 @@ class OverflowMenuVideoQualityItem extends Component { render() { const { _audioOnly, _receiverVideoQuality } = this.props; const icon = _audioOnly || !_receiverVideoQuality - ? 'icon-AUD' + ? IconVideoQualityAudioOnly : VIDEO_QUALITY_TO_ICON[_receiverVideoQuality]; return ( @@ -73,7 +80,7 @@ class OverflowMenuVideoQualityItem extends Component { className = 'overflow-menu-item' onClick = { this.props.onClick }> - + { this.props.t('toolbar.callQuality') } diff --git a/react/features/welcome/components/SideBarItem.js b/react/features/welcome/components/SideBarItem.js index 842bb43d98..f693aeeb2b 100644 --- a/react/features/welcome/components/SideBarItem.js +++ b/react/features/welcome/components/SideBarItem.js @@ -3,8 +3,8 @@ import React, { Component } from 'react'; import { Linking, Text, TouchableOpacity, View } from 'react-native'; -import { Icon } from '../../base/font-icons'; import { translate } from '../../base/i18n'; +import { Icon } from '../../base/icons'; import styles from './styles'; @@ -13,7 +13,7 @@ type Props = { /** * The icon of the item. */ - icon: string, + icon: Object, /** * The i18n label of the item. @@ -71,7 +71,7 @@ class SideBarItem extends Component { style = { styles.sideBarItem }> { t(label) } diff --git a/react/features/welcome/components/WelcomePage.native.js b/react/features/welcome/components/WelcomePage.native.js index e3205e441a..f2c7ce1e15 100644 --- a/react/features/welcome/components/WelcomePage.native.js +++ b/react/features/welcome/components/WelcomePage.native.js @@ -13,7 +13,7 @@ import { getName } from '../../app'; import { ColorSchemeRegistry } from '../../base/color-scheme'; import { translate } from '../../base/i18n'; -import { Icon } from '../../base/font-icons'; +import { Icon, IconMenu } from '../../base/icons'; import { MEDIA_TYPE } from '../../base/media'; import { Header, LoadingIndicator, Text } from '../../base/react'; import { connect } from '../../base/redux'; @@ -261,7 +261,7 @@ class WelcomePage extends AbstractWelcomePage {
    diff --git a/react/features/welcome/components/WelcomePageLists.js b/react/features/welcome/components/WelcomePageLists.js index 48e04015da..09edef6e6e 100644 --- a/react/features/welcome/components/WelcomePageLists.js +++ b/react/features/welcome/components/WelcomePageLists.js @@ -3,6 +3,7 @@ import React, { Component } from 'react'; import { translate } from '../../base/i18n'; +import { IconEventNote, IconRestore } from '../../base/icons'; import { PagedList } from '../../base/react'; import { connect } from '../../base/redux'; import { CalendarList, isCalendarEnabled } from '../../calendar-sync'; @@ -72,7 +73,7 @@ class WelcomePageLists extends Component { const pages = [ { component: RecentList, - icon: 'restore', + icon: IconRestore, title: t('welcomepage.recentList') } ]; @@ -81,7 +82,7 @@ class WelcomePageLists extends Component { pages.push( { component: CalendarList, - icon: 'event_note', + icon: IconEventNote, title: t('welcomepage.calendar') } ); diff --git a/react/features/welcome/components/WelcomePageSideBar.native.js b/react/features/welcome/components/WelcomePageSideBar.native.js index 761e975208..f6f9393926 100644 --- a/react/features/welcome/components/WelcomePageSideBar.native.js +++ b/react/features/welcome/components/WelcomePageSideBar.native.js @@ -4,6 +4,7 @@ import React, { Component } from 'react'; import { SafeAreaView, ScrollView, Text } from 'react-native'; import { Avatar } from '../../base/avatar'; +import { IconInfo, IconSettings } from '../../base/icons'; import { getLocalParticipant, getParticipantDisplayName @@ -99,19 +100,19 @@ class WelcomePageSideBar extends Component { diff --git a/react/features/welcome/components/styles.js b/react/features/welcome/components/styles.js index b30e571737..c3e62a789d 100644 --- a/react/features/welcome/components/styles.js +++ b/react/features/welcome/components/styles.js @@ -1,6 +1,6 @@ // @flow -import { BoxModel, ColorPalette, createStyleSheet } from '../../base/styles'; +import { BoxModel, ColorPalette } from '../../base/styles'; export const PLACEHOLDER_TEXT_COLOR = 'rgba(255, 255, 255, 0.3)'; @@ -21,7 +21,7 @@ const TEXT_COLOR = ColorPalette.white; * The styles of the React {@code Components} of the feature welcome including * {@code WelcomePage} and {@code BlankPage}. */ -export default createStyleSheet({ +export default { /** * The audio-video switch itself. @@ -276,4 +276,4 @@ export default createStyleSheet({ backgroundColor: ColorPalette.blue, overflow: 'hidden' } -}); +}; diff --git a/webpack.config.js b/webpack.config.js index 7b3d1f9d0f..fe1057f207 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -120,6 +120,15 @@ const config = { 'react-focus-lock': `${__dirname}/node_modules/react-focus-lock` } } + }, { + test: /\.svg$/, + use: [ { + loader: '@svgr/webpack', + options: { + dimensions: false, + expandProps: 'start' + } + } ] } ] }, node: {