├── .dockerignore
├── .env
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── config-overrides.js
├── package-lock.json
├── package.json
├── public
├── 1.b70ef2d8bc9dee22cf58.worker.js
├── 2.b70ef2d8bc9dee22cf58.worker.js
├── 2a79a539dfbe607fd685d6ccdd16b5df.wasm
├── Android_2x.jpg
├── Manytabs_2x.png
├── WP_2x.jpg
├── b70ef2d8bc9dee22cf58.worker.js
├── custom-service-worker.js
├── d6e29502cb97a72c1880.worker.js
├── data
│ ├── Folders_1.json
│ ├── Folders_2.json
│ ├── TwoFactorSetupMonkeyClose.json
│ ├── TwoFactorSetupMonkeyIdle.json
│ ├── TwoFactorSetupMonkeyPeek.json
│ ├── TwoFactorSetupMonkeyTracking.json
│ └── countries.txt
├── emoji-mart.dark.css
├── emoji-mart.light.css
├── f7f259048a4d8cf2a7bdbd5f51f742cd.mem
├── fa6295f8bac86fc2c967.worker.js
├── favicon.ico
├── favicon_unread.ico
├── iOS_2x.jpg
├── img
│ └── icons
│ │ ├── icon.svg
│ │ ├── icon120.png
│ │ ├── icon128.png
│ │ ├── icon16.png
│ │ ├── icon192.png
│ │ ├── icon32.png
│ │ ├── icon512.png
│ │ ├── icon60.png
│ │ ├── icon64.png
│ │ └── icon90.png
├── index.html
├── libwebp
│ ├── webp_wasm.js
│ ├── webp_wasm.wasm
│ └── webp_wasm.worker.js
├── manifest.json
├── opus-media-recorder
├── rlottie
│ ├── pako-inflate.min.js
│ ├── rlottie-wasm.js
│ ├── rlottie-wasm.wasm
│ └── rlottie-wasm.worker.js
├── sounds
│ ├── group_call_connect.mp3
│ ├── group_call_end.mp3
│ ├── group_call_start.mp3
│ └── sound_a.mp3
├── tdweb.js
└── tgsticker.js
├── service-worker.tmpl
├── src
├── Actions
│ ├── Call.js
│ ├── Chat.js
│ ├── Client.js
│ ├── InstantView.js
│ ├── Message.js
│ └── Poll.js
├── Assets
│ ├── Bubbles.svg
│ ├── Icons
│ │ ├── Add.js
│ │ ├── AddImage.js
│ │ ├── AddMember.js
│ │ ├── AlertOctagon.js
│ │ ├── Archive.js
│ │ ├── Archived.js
│ │ ├── ArrowTopRight.js
│ │ ├── Attach.js
│ │ ├── Back.js
│ │ ├── Block.js
│ │ ├── Bots.js
│ │ ├── Broom.js
│ │ ├── CallEnd.js
│ │ ├── Channel.js
│ │ ├── Check.js
│ │ ├── Close.js
│ │ ├── Colorize.js
│ │ ├── Copy.js
│ │ ├── Data.js
│ │ ├── Delete.js
│ │ ├── DeletedAccount.js
│ │ ├── Device.js
│ │ ├── Document.js
│ │ ├── Document2.js
│ │ ├── Done.js
│ │ ├── Download.js
│ │ ├── Edit.js
│ │ ├── Error.js
│ │ ├── Folder.js
│ │ ├── FrameCheck.js
│ │ ├── FullScreen.js
│ │ ├── Group.js
│ │ ├── Help.js
│ │ ├── Language.js
│ │ ├── Left.js
│ │ ├── LogOut.js
│ │ ├── Menu.js
│ │ ├── Message.js
│ │ ├── Mic.js
│ │ ├── MicOff.js
│ │ ├── MicOffOutlined.js
│ │ ├── MicOutlined.js
│ │ ├── Microphone.js
│ │ ├── More.js
│ │ ├── Mute.js
│ │ ├── NewChannel.js
│ │ ├── NewGroup.js
│ │ ├── NewPrivate.js
│ │ ├── NonContacts.js
│ │ ├── Pause.js
│ │ ├── Pending.js
│ │ ├── Phone.js
│ │ ├── Pin.js
│ │ ├── Pin2.js
│ │ ├── PinFilled.js
│ │ ├── PinOff.js
│ │ ├── PlayArrow.js
│ │ ├── PlaylistEdit.js
│ │ ├── ReadChats.js
│ │ ├── RemoveCheck.js
│ │ ├── RemoveMember.js
│ │ ├── Saved.js
│ │ ├── Search.js
│ │ ├── Send.js
│ │ ├── Sent.js
│ │ ├── Settings.js
│ │ ├── Share.js
│ │ ├── ShareFilled.js
│ │ ├── SharedMedia.js
│ │ ├── Smile.js
│ │ ├── Stop.js
│ │ ├── Succeeded.js
│ │ ├── Tune.js
│ │ ├── Unarchive.js
│ │ ├── Unblock.js
│ │ ├── Unmute.js
│ │ ├── Unpin.js
│ │ ├── Unread.js
│ │ ├── User.js
│ │ ├── Verified.js
│ │ └── check.svg
│ ├── Screenshots
│ │ ├── 1x_Group.png
│ │ └── 1x_Group_Profile.png
│ ├── bg.jpg
│ ├── bg_initial.jpg
│ ├── bubble-tail-left.svg
│ ├── camomile_blurred.jpg
│ └── telegram-logo.svg
├── Calls
│ ├── LocalConferenceDescription.js
│ ├── P2P
│ │ ├── ChromeP2PSdpBuilder.js
│ │ ├── FirefoxP2PSdpBuilder.js
│ │ ├── P2PEncryptor.js
│ │ ├── P2PSdpBuilder.js
│ │ └── SafariP2PSdpBuilder.js
│ ├── SdpBuilder.js
│ ├── StreamManager.js
│ └── Utils.js
├── Components
│ ├── Actions.js
│ ├── Additional
│ │ ├── AnimatedWrapPanel.css
│ │ ├── AnimatedWrapPanel.js
│ │ ├── AppInactive.css
│ │ ├── AppInactive.js
│ │ ├── IframeResizer.js
│ │ ├── KeyboardManager.js
│ │ ├── MentionLink.css
│ │ ├── MentionLink.js
│ │ ├── NativeApp.css
│ │ ├── NativeApp.js
│ │ ├── NotificationTimer.css
│ │ ├── NotificationTimer.js
│ │ ├── SafeLink.css
│ │ ├── SafeLink.js
│ │ ├── VirtualizedList.css
│ │ └── VirtualizedList.js
│ ├── Auth
│ │ ├── AuthErrorDialog.js
│ │ ├── AuthForm.css
│ │ ├── AuthForm.js
│ │ ├── Caption.css
│ │ ├── Caption.js
│ │ ├── Code.css
│ │ ├── Code.js
│ │ ├── Country.css
│ │ ├── Country.js
│ │ ├── Password.css
│ │ ├── Password.js
│ │ ├── Phone.css
│ │ ├── Phone.js
│ │ ├── QRCode.css
│ │ ├── QRCode.js
│ │ └── TestPage.js
│ ├── Calls
│ │ ├── BlobDrawable.js
│ │ ├── Button.js
│ │ ├── Call.js
│ │ ├── CallPanel.css
│ │ ├── CallPanel.js
│ │ ├── CallSettingsVideoPreview.css
│ │ ├── CallSettingsVideoPreview.js
│ │ ├── GroupCall.css
│ │ ├── GroupCall.js
│ │ ├── GroupCallJoinPanel.css
│ │ ├── GroupCallJoinPanel.js
│ │ ├── GroupCallJoinPanelSubtitle.css
│ │ ├── GroupCallJoinPanelSubtitle.js
│ │ ├── GroupCallMicAmplitude.css
│ │ ├── GroupCallMicAmplitude.js
│ │ ├── GroupCallMicButton.css
│ │ ├── GroupCallMicButton.js
│ │ ├── GroupCallMicButtonHint.css
│ │ ├── GroupCallMicButtonHint.js
│ │ ├── GroupCallPanel.css
│ │ ├── GroupCallPanel.js
│ │ ├── GroupCallPanelButtons.css
│ │ ├── GroupCallPanelButtons.js
│ │ ├── GroupCallParticipant.css
│ │ ├── GroupCallParticipant.js
│ │ ├── GroupCallParticipants.css
│ │ ├── GroupCallParticipants.js
│ │ ├── GroupCallRecentParticipants.css
│ │ ├── GroupCallRecentParticipants.js
│ │ ├── GroupCallSettings.css
│ │ ├── GroupCallSettings.js
│ │ ├── GroupCallSettingsButton.css
│ │ ├── GroupCallSettingsButton.js
│ │ ├── GroupCallStatus.css
│ │ ├── GroupCallStatus.js
│ │ ├── GroupCallTopPanel.css
│ │ ├── GroupCallTopPanel.js
│ │ ├── LineBlobDrawable.js
│ │ └── TopBar.js
│ ├── ColumnLeft
│ │ ├── AddParticipants.css
│ │ ├── AddParticipants.js
│ │ ├── Archive.js
│ │ ├── Contacts.css
│ │ ├── Contacts.js
│ │ ├── Dialogs.css
│ │ ├── Dialogs.js
│ │ ├── DialogsHeader.js
│ │ ├── DialogsList.css
│ │ ├── DialogsList.js
│ │ ├── Filters.css
│ │ ├── Filters.js
│ │ ├── Language.css
│ │ ├── Language.js
│ │ ├── MainMenuButton.css
│ │ ├── MainMenuButton.js
│ │ ├── NewChannel.css
│ │ ├── NewChannel.js
│ │ ├── NewChatPhoto.css
│ │ ├── NewChatPhoto.js
│ │ ├── NewGroup.css
│ │ ├── NewGroup.js
│ │ ├── NewGroupParams.css
│ │ ├── NewGroupParams.js
│ │ ├── Search
│ │ │ ├── Search.css
│ │ │ ├── Search.js
│ │ │ ├── SearchInput.css
│ │ │ └── SearchInput.js
│ │ ├── SectionHeader.css
│ │ ├── SectionHeader.js
│ │ ├── Settings
│ │ │ ├── ActiveSessions.css
│ │ │ ├── ActiveSessions.js
│ │ │ ├── BlockedUsers.css
│ │ │ ├── BlockedUsers.js
│ │ │ ├── ChatBackground.css
│ │ │ ├── ChatBackground.js
│ │ │ ├── CreateFilter.css
│ │ │ ├── CreateFilter.js
│ │ │ ├── EditFilterChats.css
│ │ │ ├── EditFilterChats.js
│ │ │ ├── EditProfile.css
│ │ │ ├── EditProfile.js
│ │ │ ├── Filters.css
│ │ │ ├── Filters.js
│ │ │ ├── General.css
│ │ │ ├── General.js
│ │ │ ├── Main.css
│ │ │ ├── Main.js
│ │ │ ├── Notifications.css
│ │ │ ├── Notifications.js
│ │ │ ├── PrivacyCalls.css
│ │ │ ├── PrivacyCalls.js
│ │ │ ├── PrivacySecurity.css
│ │ │ ├── PrivacySecurity.js
│ │ │ ├── Settings.css
│ │ │ ├── Settings.js
│ │ │ └── SettingsMenuButton.js
│ │ ├── Sidebar.css
│ │ ├── Sidebar.js
│ │ ├── SidebarPage.css
│ │ ├── SidebarPage.js
│ │ ├── ThemePicker.css
│ │ ├── ThemePicker.js
│ │ ├── UpdatePanel.css
│ │ └── UpdatePanel.js
│ ├── ColumnMiddle
│ │ ├── ActionBar.css
│ │ ├── ActionBar.js
│ │ ├── AnimatedCounter.css
│ │ ├── AnimatedCounter.js
│ │ ├── AnimatedItem.css
│ │ ├── AnimatedItem.js
│ │ ├── AnimationPreview.css
│ │ ├── AnimationPreview.js
│ │ ├── AttachButton.css
│ │ ├── AttachButton.js
│ │ ├── DialogDetails.css
│ │ ├── DialogDetails.js
│ │ ├── EmojiPickerButton.css
│ │ ├── EmojiPickerButton.js
│ │ ├── FilesDropTarget.css
│ │ ├── FilesDropTarget.js
│ │ ├── Footer.css
│ │ ├── Footer.js
│ │ ├── FooterCommand.css
│ │ ├── FooterCommand.js
│ │ ├── GifsPicker.css
│ │ ├── GifsPicker.js
│ │ ├── Header.css
│ │ ├── Header.js
│ │ ├── HeaderCommand.css
│ │ ├── HeaderCommand.js
│ │ ├── HeaderProgress.css
│ │ ├── HeaderProgress.js
│ │ ├── InputBox.css
│ │ ├── InputBox.js
│ │ ├── InputBoxHeader.css
│ │ ├── InputBoxHeader.js
│ │ ├── InputBoxHints.css
│ │ ├── InputBoxHints.js
│ │ ├── MainMenuButton.css
│ │ ├── MainMenuButton.js
│ │ ├── MessagesList.css
│ │ ├── MessagesList.js
│ │ ├── Notifications.js
│ │ ├── NotificationsCommand.js
│ │ ├── PinnedMessage.css
│ │ ├── PinnedMessage.js
│ │ ├── PinnedMessageBorder.css
│ │ ├── PinnedMessageBorder.js
│ │ ├── PinnedMessages.css
│ │ ├── PinnedMessages.js
│ │ ├── PinnedMessagesHeader.css
│ │ ├── PinnedMessagesHeader.js
│ │ ├── Placeholder.css
│ │ ├── Placeholder.js
│ │ ├── RecordTimer.css
│ │ ├── RecordTimer.js
│ │ ├── ScrollDownButton.css
│ │ ├── ScrollDownButton.js
│ │ ├── SelectChatPlaceholder.css
│ │ ├── SelectChatPlaceholder.js
│ │ ├── StickerPreview.css
│ │ ├── StickerPreview.js
│ │ ├── StickerSet.css
│ │ ├── StickerSet.js
│ │ ├── StickersHint.css
│ │ ├── StickersHint.js
│ │ ├── StickersPicker.css
│ │ ├── StickersPicker.js
│ │ ├── StickersPickerHeader.css
│ │ └── StickersPickerHeader.js
│ ├── ColumnRight
│ │ ├── AudioTabControl.js
│ │ ├── ChatDetails.css
│ │ ├── ChatDetails.js
│ │ ├── ChatDetailsHeader.css
│ │ ├── ChatDetailsHeader.js
│ │ ├── ChatInfo.css
│ │ ├── ChatInfo.js
│ │ ├── ChatMedia.css
│ │ ├── ChatMedia.js
│ │ ├── DocumentsTabControl.js
│ │ ├── GroupsInCommon.css
│ │ ├── GroupsInCommon.js
│ │ ├── GroupsInCommonHeader.css
│ │ ├── GroupsInCommonHeader.js
│ │ ├── LinksTabControl.js
│ │ ├── MediaTabControl.js
│ │ ├── MoreListItem.css
│ │ ├── MoreListItem.js
│ │ ├── NotificationsListItem.css
│ │ ├── NotificationsListItem.js
│ │ ├── SharedMedia.css
│ │ ├── SharedMedia.js
│ │ ├── SharedMedia
│ │ │ ├── SharedAudios.css
│ │ │ ├── SharedAudios.js
│ │ │ ├── SharedDocuments.css
│ │ │ ├── SharedDocuments.js
│ │ │ ├── SharedLinks.css
│ │ │ ├── SharedLinks.js
│ │ │ ├── SharedMediaBase.css
│ │ │ ├── SharedMediaBase.js
│ │ │ ├── SharedMediaContent.css
│ │ │ ├── SharedMediaContent.js
│ │ │ ├── SharedMediaHeader.css
│ │ │ ├── SharedMediaHeader.js
│ │ │ ├── SharedMediaTabs.css
│ │ │ ├── SharedMediaTabs.js
│ │ │ ├── SharedPhotos.css
│ │ │ ├── SharedPhotos.js
│ │ │ ├── SharedVideos.css
│ │ │ ├── SharedVideos.js
│ │ │ ├── SharedVoiceNotes.css
│ │ │ └── SharedVoiceNotes.js
│ │ ├── SharedMediaHeader.css
│ │ ├── SharedMediaHeader.js
│ │ └── UsersList.js
│ ├── Footer.css
│ ├── Footer.js
│ ├── InactivePage.js
│ ├── InstantView
│ │ ├── Article.css
│ │ ├── Article.js
│ │ ├── Blocks
│ │ │ ├── Anchor.js
│ │ │ ├── Animation.js
│ │ │ ├── Audio.js
│ │ │ ├── AuthorDate.js
│ │ │ ├── Blockquote.js
│ │ │ ├── Caption.js
│ │ │ ├── ChatLink.js
│ │ │ ├── Collage.js
│ │ │ ├── Cover.js
│ │ │ ├── Details.js
│ │ │ ├── Divider.js
│ │ │ ├── Embedded.js
│ │ │ ├── EmbeddedPost.js
│ │ │ ├── ErrorHandler.css
│ │ │ ├── ErrorHandler.js
│ │ │ ├── Footer.js
│ │ │ ├── Header.js
│ │ │ ├── Kicker.js
│ │ │ ├── List.js
│ │ │ ├── ListItem.js
│ │ │ ├── Map.js
│ │ │ ├── Paragraph.js
│ │ │ ├── Photo.js
│ │ │ ├── Preformatted.js
│ │ │ ├── PullQuote.js
│ │ │ ├── RelatedArticle.js
│ │ │ ├── RelatedArticles.js
│ │ │ ├── Slideshow.js
│ │ │ ├── Subheader.js
│ │ │ ├── Subtitle.js
│ │ │ ├── Table.js
│ │ │ ├── TableCell.js
│ │ │ ├── Title.js
│ │ │ ├── Video.js
│ │ │ └── VoiceNote.js
│ │ ├── IVContext.js
│ │ ├── InstantViewer.css
│ │ ├── InstantViewer.js
│ │ └── RichText
│ │ │ ├── Anchor.js
│ │ │ ├── Bold.js
│ │ │ ├── EmailAddress.js
│ │ │ ├── Fixed.js
│ │ │ ├── Icon.js
│ │ │ ├── Italic.js
│ │ │ ├── Marked.js
│ │ │ ├── PhoneNumber.js
│ │ │ ├── Plain.js
│ │ │ ├── RichText.js
│ │ │ ├── Strikethrough.js
│ │ │ ├── Subscript.js
│ │ │ ├── Superscript.js
│ │ │ ├── Texts.js
│ │ │ ├── Underline.js
│ │ │ └── Url.js
│ ├── MainPage.js
│ ├── Message
│ │ ├── Album
│ │ │ ├── Album.css
│ │ │ ├── Album.js
│ │ │ ├── AlbumItem.css
│ │ │ ├── AlbumItem.js
│ │ │ ├── DocumentAlbum.css
│ │ │ ├── DocumentAlbum.js
│ │ │ └── GroupedMessages.js
│ │ ├── DayMeta.css
│ │ ├── DayMeta.js
│ │ ├── Forward.css
│ │ ├── Forward.js
│ │ ├── Markup
│ │ │ ├── KeyboardButton.css
│ │ │ ├── KeyboardButton.js
│ │ │ ├── KeyboardRow.css
│ │ │ ├── KeyboardRow.js
│ │ │ ├── ReplyMarkup.css
│ │ │ └── ReplyMarkup.js
│ │ ├── Media
│ │ │ ├── Animation.css
│ │ │ ├── Animation.js
│ │ │ ├── Audio.css
│ │ │ ├── Audio.js
│ │ │ ├── AudioAction.css
│ │ │ ├── AudioAction.js
│ │ │ ├── Call.css
│ │ │ ├── Call.js
│ │ │ ├── Contact.css
│ │ │ ├── Contact.js
│ │ │ ├── Document.css
│ │ │ ├── Document.js
│ │ │ ├── DocumentAction.css
│ │ │ ├── DocumentAction.js
│ │ │ ├── FireworksControl.js
│ │ │ ├── Game.css
│ │ │ ├── Game.js
│ │ │ ├── Invoice.css
│ │ │ ├── Invoice.js
│ │ │ ├── Location.css
│ │ │ ├── Location.js
│ │ │ ├── MediaStatus.js
│ │ │ ├── Photo.css
│ │ │ ├── Photo.js
│ │ │ ├── Poll.css
│ │ │ ├── Poll.js
│ │ │ ├── PollOption.css
│ │ │ ├── PollOption.js
│ │ │ ├── PollPercentage.css
│ │ │ ├── PollPercentage.js
│ │ │ ├── PollRadio.css
│ │ │ ├── PollRadio.js
│ │ │ ├── Sticker.css
│ │ │ ├── Sticker.js
│ │ │ ├── Venue.css
│ │ │ ├── Venue.js
│ │ │ ├── Video.css
│ │ │ ├── Video.js
│ │ │ ├── VideoNote.css
│ │ │ ├── VideoNote.js
│ │ │ ├── VoiceNote.css
│ │ │ ├── VoiceNote.js
│ │ │ ├── VoiceNoteSlider.css
│ │ │ ├── VoiceNoteSlider.js
│ │ │ ├── Waveform.css
│ │ │ ├── Waveform.js
│ │ │ ├── WebPage.css
│ │ │ └── WebPage.js
│ │ ├── Message.css
│ │ ├── Message.js
│ │ ├── MessageAuthor.css
│ │ ├── MessageAuthor.js
│ │ ├── MessageContext.js
│ │ ├── MessageGroup.css
│ │ ├── MessageGroup.js
│ │ ├── MessageMenu.css
│ │ ├── MessageMenu.js
│ │ ├── Meta.css
│ │ ├── Meta.js
│ │ ├── Reply.css
│ │ ├── Reply.js
│ │ ├── ServiceMessage.css
│ │ ├── ServiceMessage.js
│ │ ├── Status.css
│ │ ├── Status.js
│ │ ├── StubMessage.css
│ │ ├── StubMessage.js
│ │ ├── UnreadSeparator.css
│ │ └── UnreadSeparator.js
│ ├── NativeAppPage.js
│ ├── Player
│ │ ├── HeaderPlayer.css
│ │ ├── HeaderPlayer.js
│ │ ├── Hint.css
│ │ ├── Hint.js
│ │ ├── PipPlayer.css
│ │ ├── PipPlayer.js
│ │ ├── PlaybackRateButton.js
│ │ ├── Player.css
│ │ ├── Player.js
│ │ ├── Playlist.css
│ │ ├── Playlist.js
│ │ ├── Progress.css
│ │ ├── Progress.js
│ │ ├── RepeatButton.js
│ │ ├── ShuffleButton.js
│ │ ├── Steaming
│ │ │ ├── MP3
│ │ │ │ ├── ID3Parser.js
│ │ │ │ ├── ID3v1
│ │ │ │ │ ├── ID3v1Parser.js
│ │ │ │ │ └── ID3v1Token.js
│ │ │ │ ├── ID3v2
│ │ │ │ │ ├── FrameParser.js
│ │ │ │ │ ├── ID3v2Parser.js
│ │ │ │ │ └── ID3v2Token.js
│ │ │ │ ├── MP3Parser.js
│ │ │ │ └── MP3Source.js
│ │ │ ├── MP4
│ │ │ │ └── MP4Source.js
│ │ │ └── Utils
│ │ │ │ ├── Common.js
│ │ │ │ └── Token.js
│ │ ├── Time.css
│ │ ├── Time.js
│ │ ├── VolumeButton.css
│ │ └── VolumeButton.js
│ ├── Popup
│ │ ├── AlertDialog.css
│ │ ├── AlertDialog.js
│ │ ├── BlockSenderDialog.css
│ │ ├── BlockSenderDialog.js
│ │ ├── ChatInfoDialog.css
│ │ ├── ChatInfoDialog.js
│ │ ├── ClearHistoryDialog.js
│ │ ├── CreatePollDialog.css
│ │ ├── CreatePollDialog.js
│ │ ├── CreatePollOption.css
│ │ ├── CreatePollOption.js
│ │ ├── DeleteMessagesDialog.css
│ │ ├── DeleteMessagesDialog.js
│ │ ├── EditMediaDialog.css
│ │ ├── EditMediaDialog.js
│ │ ├── EditUrlDialog.css
│ │ ├── EditUrlDialog.js
│ │ ├── ForwardDialog.css
│ │ ├── ForwardDialog.js
│ │ ├── InputPasswordDialog.css
│ │ ├── InputPasswordDialog.js
│ │ ├── LeaveChatDialog.js
│ │ ├── LeaveVoiceChatDialog.css
│ │ ├── LeaveVoiceChatDialog.js
│ │ ├── OpenGameDialog.css
│ │ ├── OpenGameDialog.js
│ │ ├── OpenUrlDialog.css
│ │ ├── OpenUrlDialog.js
│ │ ├── PasteFilesDialog.css
│ │ ├── PasteFilesDialog.js
│ │ ├── PinMessageDialog.css
│ │ ├── PinMessageDialog.js
│ │ ├── PollOptionResult.css
│ │ ├── PollOptionResult.js
│ │ ├── PollOptionResults.css
│ │ ├── PollOptionResults.js
│ │ ├── PollResultsDialog.css
│ │ ├── PollResultsDialog.js
│ │ ├── ReportChatDialog.css
│ │ ├── ReportChatDialog.js
│ │ ├── RequestUrlDialog.css
│ │ ├── RequestUrlDialog.js
│ │ ├── ShareStickerSetButton.js
│ │ ├── SidebarDialog.css
│ │ ├── SidebarDialog.js
│ │ ├── StickerSetDialog.css
│ │ ├── StickerSetDialog.js
│ │ ├── UnpinMessageDialog.css
│ │ ├── UnpinMessageDialog.js
│ │ ├── UpdateDraftDialog.css
│ │ └── UpdateDraftDialog.js
│ ├── StubPage.js
│ ├── Tile
│ │ ├── Archive.css
│ │ ├── Archive.js
│ │ ├── Chat.css
│ │ ├── Chat.js
│ │ ├── ChatChip.css
│ │ ├── ChatChip.js
│ │ ├── ChatStatus.css
│ │ ├── ChatStatus.js
│ │ ├── ChatTile.css
│ │ ├── ChatTile.js
│ │ ├── Chip.css
│ │ ├── Chip.js
│ │ ├── Dialog.css
│ │ ├── Dialog.js
│ │ ├── DialogBadge.css
│ │ ├── DialogBadge.js
│ │ ├── DialogContent.css
│ │ ├── DialogContent.js
│ │ ├── DialogMeta.css
│ │ ├── DialogMeta.js
│ │ ├── DialogPlaceholder.css
│ │ ├── DialogPlaceholder.js
│ │ ├── DialogStatus.css
│ │ ├── DialogStatus.js
│ │ ├── DialogTitle.css
│ │ ├── DialogTitle.js
│ │ ├── DocumentTile.css
│ │ ├── DocumentTile.js
│ │ ├── EmptyTile.css
│ │ ├── EmptyTile.js
│ │ ├── Filter.css
│ │ ├── Filter.js
│ │ ├── FilterChat.css
│ │ ├── FilterChat.js
│ │ ├── FilterText.css
│ │ ├── FilterText.js
│ │ ├── ForwardTargetChat.css
│ │ ├── ForwardTargetChat.js
│ │ ├── FoundMessage.css
│ │ ├── FoundMessage.js
│ │ ├── FoundPublicChat.css
│ │ ├── FoundPublicChat.js
│ │ ├── HeaderChat.css
│ │ ├── HeaderChat.js
│ │ ├── HeaderChatSubtitle.css
│ │ ├── HeaderChatSubtitle.js
│ │ ├── MediaInfo.css
│ │ ├── MediaInfo.js
│ │ ├── OnlineStatus.css
│ │ ├── OnlineStatus.js
│ │ ├── ProfileMediaInfo.js
│ │ ├── RecentlyFoundChat.css
│ │ ├── RecentlyFoundChat.js
│ │ ├── RecommendedFilter.css
│ │ ├── RecommendedFilter.js
│ │ ├── ReplyTile.css
│ │ ├── ReplyTile.js
│ │ ├── Session.css
│ │ ├── Session.js
│ │ ├── SharedMedia
│ │ │ ├── ContextMenu.css
│ │ │ ├── ContextMenu.js
│ │ │ ├── SharedAudio.css
│ │ │ ├── SharedAudio.js
│ │ │ ├── SharedDocument.css
│ │ │ ├── SharedDocument.js
│ │ │ ├── SharedLink.css
│ │ │ ├── SharedLink.js
│ │ │ ├── SharedLinkTile.css
│ │ │ ├── SharedLinkTile.js
│ │ │ ├── SharedPhoto.css
│ │ │ ├── SharedPhoto.js
│ │ │ ├── SharedVideo.css
│ │ │ ├── SharedVideo.js
│ │ │ ├── SharedVoiceNote.css
│ │ │ └── SharedVoiceNote.js
│ │ ├── TopChat.css
│ │ ├── TopChat.js
│ │ ├── User.css
│ │ ├── User.js
│ │ ├── UserChip.css
│ │ ├── UserChip.js
│ │ ├── UserPlaceholder.css
│ │ ├── UserPlaceholder.js
│ │ ├── UserStatus.css
│ │ ├── UserStatus.js
│ │ ├── UserTile.css
│ │ ├── UserTile.js
│ │ ├── UserTitle.css
│ │ ├── UserTitle.js
│ │ ├── VoiceNoteTile.css
│ │ ├── VoiceNoteTile.js
│ │ ├── Wallpaper.css
│ │ └── Wallpaper.js
│ └── Viewer
│ │ ├── FileProgress.css
│ │ ├── FileProgress.js
│ │ ├── InstantViewMediaViewer.css
│ │ ├── InstantViewMediaViewer.js
│ │ ├── InstantViewMediaViewerContent.js
│ │ ├── MediaCaption.css
│ │ ├── MediaCaption.js
│ │ ├── MediaViewer.css
│ │ ├── MediaViewer.js
│ │ ├── MediaViewerButton.css
│ │ ├── MediaViewerButton.js
│ │ ├── MediaViewerContent.css
│ │ ├── MediaViewerContent.js
│ │ ├── MediaViewerDownloadButton.js
│ │ ├── MediaViewerFooterButton.css
│ │ ├── MediaViewerFooterButton.js
│ │ ├── MediaViewerFooterText.css
│ │ ├── MediaViewerFooterText.js
│ │ ├── ProfileMediaViewer.css
│ │ ├── ProfileMediaViewer.js
│ │ ├── ProfileMediaViewerContent.css
│ │ ├── ProfileMediaViewerContent.js
│ │ ├── RLottie.css
│ │ └── RLottie.js
├── Constants.js
├── Controllers
│ └── TdLibController.js
├── Language.js
├── Localization
│ └── Cache.js
├── Notifications.js
├── Resources
│ ├── en
│ │ └── translation.json
│ ├── es
│ │ └── translation.json
│ ├── it
│ │ └── translation.json
│ ├── pl
│ │ └── translation.json
│ └── ru
│ │ └── translation.json
├── Stores
│ ├── AnimationStore.js
│ ├── ApplicationStore.js
│ ├── AuthorizationStore.js
│ ├── BasicGroupStore.js
│ ├── CacheStore.js
│ ├── CallStore.js
│ ├── ChatStore.js
│ ├── EventEmitter.js
│ ├── FileStore.js
│ ├── FilterStore.js
│ ├── InstantViewStore.js
│ ├── LocalizationStore.js
│ ├── MessageStore.js
│ ├── NotificationStore.js
│ ├── OptionStore.js
│ ├── PlayerStore.js
│ ├── PollStore.js
│ ├── StickerStore.js
│ ├── SupergroupStore.js
│ ├── UserStore.js
│ └── WebpManager.js
├── TelegramApp.css
├── TelegramApp.js
├── Theme.js
├── Utils
│ ├── ActionScheduler.js
│ ├── Animatior.js
│ ├── Archive.js
│ ├── BasicGroup.js
│ ├── Channel.js
│ ├── Chat.js
│ ├── Color.js
│ ├── Common.js
│ ├── Component.js
│ ├── Currency.js
│ ├── DOM.js
│ ├── Date.js
│ ├── File.js
│ ├── Filter.js
│ ├── Game.js
│ ├── HOC.js
│ ├── InputTypingManager.js
│ ├── InstantView.js
│ ├── Key.js
│ ├── Language.js
│ ├── Localization.js
│ ├── Media.js
│ ├── Message.js
│ ├── Modal.js
│ ├── OutputTypingManager.js
│ ├── Phone.js
│ ├── Player.js
│ ├── Poll.js
│ ├── Punycode.js
│ ├── ServiceMessage.js
│ ├── Store.js
│ ├── Supergroup.js
│ ├── Text.js
│ ├── Url.js
│ └── User.js
├── Workers
│ ├── BlobInflator.js
│ ├── CacheManager.js
│ ├── Helpers.js
│ ├── cache.worker.js
│ └── pako.worker.js
├── index.css
├── index.js
└── registerServiceWorker.js
└── sw-config.js
/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | node_modules
3 | .env
4 | .idea
5 | Dockerfile
6 |
--------------------------------------------------------------------------------
/.env:
--------------------------------------------------------------------------------
1 | REACT_APP_TELEGRAM_API_ID=
2 | REACT_APP_TELEGRAM_API_HASH=
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | .idea
3 | build
4 | node_modules
5 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:14 AS build
2 |
3 | WORKDIR /app/
4 |
5 | # Copy over package.json and package-lock.json and install dependencies first,
6 | # so that we don't need to re-download dependencies if they have not been modified.
7 | COPY package.json package-lock.json ./
8 | RUN npm ci
9 |
10 | COPY . .
11 | RUN cp -v node_modules/tdweb/dist/* public/
12 |
13 | ARG TELEGRAM_API_ID
14 | ENV REACT_APP_TELEGRAM_API_ID=${TELEGRAM_API_ID}
15 | ARG TELEGRAM_API_HASH
16 | ENV REACT_APP_TELEGRAM_API_HASH=${TELEGRAM_API_HASH}
17 |
18 | RUN npm run build
19 |
20 | FROM nginx:stable
21 |
22 | WORKDIR /usr/share/nginx/html/
23 | COPY --from=build /app/build/ .
24 |
25 | # Hack to get around the hardcoded folder structure without requiring the user to
26 | # go to /telegram-react in their browser
27 | RUN ln -s . telegram-react
28 |
--------------------------------------------------------------------------------
/public/2a79a539dfbe607fd685d6ccdd16b5df.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/2a79a539dfbe607fd685d6ccdd16b5df.wasm
--------------------------------------------------------------------------------
/public/Android_2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/Android_2x.jpg
--------------------------------------------------------------------------------
/public/Manytabs_2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/Manytabs_2x.png
--------------------------------------------------------------------------------
/public/WP_2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/WP_2x.jpg
--------------------------------------------------------------------------------
/public/f7f259048a4d8cf2a7bdbd5f51f742cd.mem:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/f7f259048a4d8cf2a7bdbd5f51f742cd.mem
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/favicon.ico
--------------------------------------------------------------------------------
/public/favicon_unread.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/favicon_unread.ico
--------------------------------------------------------------------------------
/public/iOS_2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/iOS_2x.jpg
--------------------------------------------------------------------------------
/public/img/icons/icon120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon120.png
--------------------------------------------------------------------------------
/public/img/icons/icon128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon128.png
--------------------------------------------------------------------------------
/public/img/icons/icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon16.png
--------------------------------------------------------------------------------
/public/img/icons/icon192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon192.png
--------------------------------------------------------------------------------
/public/img/icons/icon32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon32.png
--------------------------------------------------------------------------------
/public/img/icons/icon512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon512.png
--------------------------------------------------------------------------------
/public/img/icons/icon60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon60.png
--------------------------------------------------------------------------------
/public/img/icons/icon64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon64.png
--------------------------------------------------------------------------------
/public/img/icons/icon90.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/img/icons/icon90.png
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Telegram Web
18 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/public/libwebp/webp_wasm.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/libwebp/webp_wasm.wasm
--------------------------------------------------------------------------------
/public/opus-media-recorder:
--------------------------------------------------------------------------------
1 | ../node_modules/opus-media-recorder
--------------------------------------------------------------------------------
/public/rlottie/rlottie-wasm.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/rlottie/rlottie-wasm.wasm
--------------------------------------------------------------------------------
/public/sounds/group_call_connect.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/sounds/group_call_connect.mp3
--------------------------------------------------------------------------------
/public/sounds/group_call_end.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/sounds/group_call_end.mp3
--------------------------------------------------------------------------------
/public/sounds/group_call_start.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/sounds/group_call_start.mp3
--------------------------------------------------------------------------------
/public/sounds/sound_a.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/public/sounds/sound_a.mp3
--------------------------------------------------------------------------------
/src/Actions/Call.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import TdLibController from '../Controllers/TdLibController';
9 |
10 | export function openGroupCallPanel() {
11 | TdLibController.clientUpdate({
12 | '@type': 'clientUpdateGroupCallPanel',
13 | opened: true
14 | });
15 | }
16 |
17 | export function closeGroupCallPanel() {
18 | TdLibController.clientUpdate({
19 | '@type': 'clientUpdateGroupCallPanel',
20 | opened: false
21 | });
22 | }
23 |
24 | export function openCallPanel(id) {
25 | TdLibController.clientUpdate({
26 | '@type': 'clientUpdateCallPanel',
27 | callId: id,
28 | opened: true
29 | });
30 | }
31 |
32 | export function closeCallPanel() {
33 | TdLibController.clientUpdate({
34 | '@type': 'clientUpdateCallPanel',
35 | opened: false
36 | });
37 | }
--------------------------------------------------------------------------------
/src/Actions/Poll.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import TdLibController from '../Controllers/TdLibController';
9 |
10 | export function setPollAnswer(chatId, messageId, optionIds) {
11 | TdLibController.send({
12 | '@type': 'setPollAnswer',
13 | chat_id: chatId,
14 | message_id: messageId,
15 | option_ids: optionIds
16 | });
17 | }
18 |
19 | export function cancelPollAnswer(chatId, messageId) {
20 | TdLibController.send({
21 | '@type': 'setPollAnswer',
22 | chat_id: chatId,
23 | message_id: messageId,
24 | option_ids: []
25 | });
26 | }
27 |
28 | export function stopPoll(chatId, messageId) {
29 | TdLibController.send({
30 | '@type': 'stopPoll',
31 | chat_id: chatId,
32 | message_id: messageId,
33 | reply_markup: null
34 | });
35 | }
36 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Add.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Add'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/AlertOctagon.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'AlertOctagon'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/ArrowTopRight.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
10 |
11 | export default createSvgIcon(
12 | ,
13 | 'ArrowTopRight'
14 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/Block.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Block'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/Broom.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
10 |
11 | export default createSvgIcon(
12 | ,
13 | 'Broom'
14 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/CallEnd.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'CallEnd'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/Check.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Check'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Copy.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Copy'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/DeletedAccount.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 |
12 |
19 |
20 |
21 | ,
22 | 'DeletedAccount'
23 | );
24 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Document2.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Document2'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Done.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
10 |
11 | export default createSvgIcon(
12 | ,
13 | 'Done'
14 | );
15 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Edit.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Edit'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Left.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Left'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Menu.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Menu'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Message.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Message'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Mic.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Mic'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/MicOff.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'MicOff'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/MicOffOutlined.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'MicOffOutlined'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/MicOutlined.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'MicOutlined'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/More.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'More'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Pause.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
15 | 'Pause'
16 | );
17 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Pending.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
10 |
11 | export default createSvgIcon(
12 |
13 |
14 |
15 |
16 |
17 |
18 | ,
19 | 'Pending'
20 | );
21 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Phone.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Phone'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/PinFilled.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'PinFilled'
13 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/PlayArrow.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
15 | 'PlayArrow'
16 | );
17 |
--------------------------------------------------------------------------------
/src/Assets/Icons/RemoveCheck.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 |
12 |
13 |
14 |
15 | ,
16 | 'RemoveCheck'
17 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/Saved.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Saved'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Search.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Search'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Sent.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
15 | 'Sent'
16 | );
17 |
--------------------------------------------------------------------------------
/src/Assets/Icons/ShareFilled.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'ShareFilled'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Stop.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 |
12 |
13 | ,
14 | 'Stop'
15 | );
16 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Tune.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
10 |
11 | export default createSvgIcon(
12 | ,
13 | 'Tune'
14 | );
--------------------------------------------------------------------------------
/src/Assets/Icons/Unmute.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Unmute'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/Verified.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import React from 'react';
8 | import createSvgIcon from '@material-ui/core/esm/utils/createSvgIcon';
9 |
10 | export default createSvgIcon(
11 | ,
12 | 'Verified'
13 | );
14 |
--------------------------------------------------------------------------------
/src/Assets/Icons/check.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/Assets/Screenshots/1x_Group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/src/Assets/Screenshots/1x_Group.png
--------------------------------------------------------------------------------
/src/Assets/Screenshots/1x_Group_Profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/src/Assets/Screenshots/1x_Group_Profile.png
--------------------------------------------------------------------------------
/src/Assets/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/src/Assets/bg.jpg
--------------------------------------------------------------------------------
/src/Assets/bg_initial.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/src/Assets/bg_initial.jpg
--------------------------------------------------------------------------------
/src/Assets/bubble-tail-left.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/src/Assets/camomile_blurred.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evgeny-nadymov/telegram-react/2f372ab6f4bf0495cf1cd56ed8350d64a897d95d/src/Assets/camomile_blurred.jpg
--------------------------------------------------------------------------------
/src/Components/Additional/AnimatedWrapPanel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Additional/AnimatedWrapPanel.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 |
11 | class AnimatedWrapPanel extends React.Component {
12 |
13 | render() {
14 | return null;
15 | }
16 |
17 | }
18 |
19 | AnimatedWrapPanel.propTypes = {};
20 |
21 | export default AnimatedWrapPanel;
--------------------------------------------------------------------------------
/src/Components/Additional/AppInactive.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .app-inactive {
9 | display: flex;
10 | height: 100%;
11 | width: 100%;
12 | overflow-y: auto;
13 | -webkit-overflow-scrolling: touch;
14 | }
15 |
16 | .app-inactive-wrapper {
17 | max-width: 420px;
18 | margin: auto auto;
19 | padding: 24px;
20 | text-align: center;
21 | }
22 |
23 | .app-inactive-image {
24 | width: 100%;
25 | max-width: 320px;
26 | margin: 0 auto;
27 | cursor: pointer;
28 | }
29 |
30 | .app-inactive-title {
31 | font-size: 18px;
32 | margin-top: 20px;
33 | margin-bottom: 10px;
34 | font-weight: 500;
35 | line-height: 1.1;
36 | }
37 |
38 | .app-inactive-description {
39 | color: #666;
40 | font-size: 15px;
41 | line-height: 150%;
42 | }
43 |
44 | .app-inactive-actions {
45 | margin: 20px;
46 | }
47 |
--------------------------------------------------------------------------------
/src/Components/Additional/MentionLink.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Additional/NativeApp.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Additional/NotificationTimer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .notification-timer {
9 | max-height: 32px;
10 | position: relative;
11 | }
12 |
13 | .notification-timer-text {
14 | position: absolute;
15 | left: 0;
16 | top: 0;
17 | right: 0;
18 | bottom: 0;
19 | display: flex;
20 | align-items: center;
21 | justify-content: center;
22 | text-align: center;
23 | }
24 |
25 | .notification-timer-progress {
26 | transform: scaleX(-1);
27 | }
28 |
--------------------------------------------------------------------------------
/src/Components/Additional/SafeLink.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .safe-link-content-root {
9 | min-width: 300px;
10 | white-space: pre-wrap;
11 | word-wrap: break-word;
12 | word-break: break-word;
13 | }
14 |
--------------------------------------------------------------------------------
/src/Components/Additional/VirtualizedList.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .vlist {
9 | position: relative;
10 | }
11 |
12 | .vlist-top-border {
13 | position: absolute;
14 | top: 0;
15 | right: 0;
16 | left: 0;
17 | height: 3px;
18 | background-image: linear-gradient(var(--border), transparent);;
19 | }
--------------------------------------------------------------------------------
/src/Components/Auth/AuthForm.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .authorization-form {
9 | overflow-y: auto;
10 | -webkit-overflow-scrolling: touch;
11 | overflow-x: hidden;
12 | height: 100%;
13 | }
14 |
15 | .authorization-form-content {
16 | margin: 0 auto 0;
17 | max-width: 360px;
18 | height: 100%;
19 | display: flex;
20 | flex-direction: column;
21 | }
22 |
23 | .authorization-form-content .footer-wrapper {
24 | margin-top: auto;
25 | }
26 |
27 | .authorization-header {
28 | font-size: 22px;
29 | font-family: 'Product Sans', 'Roboto', sans-serif;
30 | padding: 22px 0;
31 | text-overflow: ellipsis;
32 | overflow: hidden;
33 | }
34 |
35 | .authorization-header-content {
36 | word-wrap: break-word;
37 | white-space: nowrap;
38 | }
39 |
40 | .authorization-actions {
41 | text-align: center;
42 | display: flex;
43 | }
44 |
--------------------------------------------------------------------------------
/src/Components/Auth/Caption.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .auth-caption {
9 | min-height: 311px;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | }
14 |
15 | .auth-caption-telegram-logo {
16 | width: 160px;
17 | height: 160px;
18 | margin: 107px auto 44px;
19 | fill: var(--color-accent-main);
20 | }
21 |
--------------------------------------------------------------------------------
/src/Components/Auth/Code.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .confirm-code-wrapper {
9 | display: flex;
10 | flex-direction: column;
11 | align-items: center;
12 | }
13 |
14 | .code-title {
15 | display: flex;
16 | flex-direction: row;
17 | align-items: center;
18 | }
19 |
--------------------------------------------------------------------------------
/src/Components/Auth/Country.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .country {
9 | width: 100%;
10 | display: flex;
11 | flex-direction: row;
12 | align-items: center;
13 | height: 56px;
14 | padding: 0 16px 0 14px;
15 | }
16 |
17 | .country-emoji {
18 | font-size: 26px;
19 | flex-shrink: 0;
20 | flex-grow: 0;
21 | }
22 |
23 | .country-name {
24 | margin: 0 16px 0 32px;
25 | flex-grow: 1;
26 | flex-shrink: 1;
27 | }
28 |
29 | .country-phone {
30 | color: #707579;
31 | flex-shrink: 0;
32 | flex-grow: 0;
33 | }
34 |
--------------------------------------------------------------------------------
/src/Components/Auth/Country.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import './Country.css';
11 |
12 | function Country({ emoji, name, phone }) {
13 | return (
14 |
15 | {emoji}
16 | {name}
17 | {phone}
18 |
19 | );
20 | }
21 |
22 | Country.propTypes = {
23 | emoji: PropTypes.string,
24 | name: PropTypes.string,
25 | phone: PropTypes.string
26 | };
27 |
28 | export default Country;
29 |
--------------------------------------------------------------------------------
/src/Components/Auth/Password.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .password-wrapper {
9 | /*display: flex;
10 | flex-direction: column;
11 | align-items: center;*/
12 | padding: 8px 0 0 0;
13 | }
14 |
15 | .password-actions {
16 | text-align: center;
17 | }
18 |
19 | .password-hint-label {
20 | /*color: black;*/
21 | }
22 |
--------------------------------------------------------------------------------
/src/Components/Auth/TestPage.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 |
11 | class TestPage extends React.Component {
12 | render() {
13 | return 'Test Page';
14 | }
15 | }
16 |
17 | TestPage.propTypes = {};
18 |
19 | export default TestPage;
20 |
--------------------------------------------------------------------------------
/src/Components/Calls/CallPanel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .call-video-inactive {
9 | display: none;
10 | }
11 |
12 | .call-panel-microphone-hint {
13 | display: flex;
14 | align-items: center;
15 | justify-content: center;
16 | bottom: 182px;
17 | position: absolute;
18 | left: 0;
19 | right: 0;
20 | z-index: 1;
21 | }
22 |
23 | .call-panel-microphone-hint-wrapper {
24 | min-height: 38px;
25 | border-radius: 19px;
26 | background: #00000077;
27 | display: flex;
28 | align-items: center;
29 | justify-content: center;
30 | padding: 0 12px;
31 | }
32 |
33 | .call-panel-microphone-hint-text {
34 | margin-left: 12px;
35 | }
--------------------------------------------------------------------------------
/src/Components/Calls/CallSettingsVideoPreview.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallJoinPanel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .group-call-join-panel {
9 | position: relative;
10 | height: 60px;
11 | background: var(--panel-background);
12 | border-bottom: 1px solid var(--border);
13 | display: flex;
14 | align-items: center;
15 | padding: 0 12px;
16 | cursor: pointer;
17 | }
18 |
19 | .group-call-join-panel-content {
20 | flex: 1 1 auto;
21 | margin-left: 12px;
22 | }
23 |
24 | .group-call-join-panel-title {
25 | color: var(--dialog-color);
26 | }
27 |
28 | .group-call-join-panel-subtitle {
29 | font-size: 14px;
30 | line-height: 19px;
31 | color: var(--header-subtle-color);
32 | overflow: hidden;
33 | text-overflow: ellipsis;
34 | white-space: nowrap;
35 | user-select: text;
36 | }
37 |
38 | .group-call-join-panel-button {
39 | padding: 8px 16px 7px;
40 | color: white;
41 | }
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallJoinPanelSubtitle.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallMicAmplitude.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .group-call-mic-amplitude {
9 | width: 275px;
10 | height: 18px;
11 | margin: 10px 22px;
12 | position: relative;
13 | color: #91979E;
14 | }
15 |
16 | .group-call-mic-amplitude-bars {
17 | width: 275px;
18 | height: 18px;
19 | stroke: currentColor;
20 | stroke-width: 3px;
21 | stroke-linecap: round;
22 | stroke-linejoin: round;
23 | }
24 |
25 | .group-call-mic-amplitude-bars-accent {
26 | color: var(--group-call-status-listening);
27 | position: absolute;
28 | left: 0;
29 | top: 0;
30 | width: 100%;
31 | height: 100%;
32 | overflow: hidden;
33 | will-change: width;
34 | transition: width ease-in-out 0.1s;
35 | }
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallMicButtonHint.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
9 |
10 | .group-call-mic-button-hint {
11 | position: absolute;
12 | bottom: 10px;
13 | left: auto;
14 | right: auto;
15 | display: flex;
16 | flex-direction: column;
17 | align-items: center;
18 | justify-content: center;
19 | min-height: 37px;
20 | white-space: nowrap;
21 | text-overflow: ellipsis;
22 | text-align: center;
23 | }
24 |
25 | .group-call-mic-button-hint-title {
26 | font-size: 18px;
27 | }
28 |
29 | .group-call-mic-button-hint-subtitle {
30 | margin-top: -5px;
31 | font-size: 12px;
32 | }
33 |
34 | .group-call-mic-button-hint-item {
35 | height: 37px;
36 | width: 200px;
37 | display: flex;
38 | flex-direction: column;
39 | align-items: center;
40 | justify-content: center;
41 | }
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallPanelButtons.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallParticipants.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .group-call-participants {
9 | overflow: hidden;
10 | min-height: 50px;
11 | display: flex;
12 | flex-direction: column;
13 | color: var(--group-call-text-secondary);
14 | background: var(--group-call-participants-panel);
15 | border-radius: 5px;
16 | }
17 |
18 | .group-call-participants-invite {
19 | height: 50px;
20 | display: flex;
21 | flex-direction: row;
22 | align-items: center;
23 | cursor: pointer;
24 | user-select: none;
25 | padding: 0 17px;
26 | font-size: 14px;
27 | line-height: normal;
28 | }
29 |
30 | .group-call-participants-invite:hover {
31 | background: var(--group-call-participants-item-hover);
32 | }
33 |
34 | .group-call-participants-invite-text {
35 | margin-left: 22px;
36 | }
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallRecentParticipants.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .group-call-recent-participants {
9 | position: absolute;
10 | left: 0;
11 | right: 0;
12 | top: auto;
13 | bottom: auto;
14 | width: auto;
15 | height: auto;
16 | display: flex;
17 | flex-direction: row-reverse;
18 | align-items: center;
19 | justify-content: center;
20 | }
21 |
22 | .group-call-recent-participants .user-tile {
23 | border: 2px solid var(--panel-background);
24 | margin-left: -16px;
25 | }
--------------------------------------------------------------------------------
/src/Components/Calls/GroupCallSettingsButton.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import TuneIcon from '../../Assets/Icons/Tune';
11 | import { stopPropagation } from '../../Utils/Message';
12 | import './GroupCallSettingsButton.css';
13 |
14 | class GroupCallSettingsButton extends React.Component {
15 | render() {
16 | const { onClick } = this.props;
17 |
18 | return (
19 |
20 |
21 |
22 | );
23 | }
24 | }
25 |
26 | GroupCallSettingsButton.propTypes = {
27 | groupCallId: PropTypes.number,
28 | onClick: PropTypes.func
29 | };
30 |
31 | export default GroupCallSettingsButton;
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/AddParticipants.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Dialogs.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .dialogs {
9 | max-width: 25%;
10 | flex: 1 1 25%;
11 | margin: 0;
12 | box-sizing: border-box;
13 | border-right: 1px solid var(--border);
14 | background: var(--panel-background);
15 | height: 100%;
16 | display: flex;
17 | flex-direction: column;
18 | position: relative;
19 | }
20 |
21 | .dialogs-content {
22 | overflow: hidden;
23 | flex-grow: 1;
24 | flex-shrink: 1;
25 | position: relative;
26 | }
27 |
28 | .dialogs-content-internal {
29 | position: absolute;
30 | top: 0;
31 | right: 0;
32 | bottom: 0;
33 | left: 0;
34 | display: flex;
35 | flex-direction: column;
36 | }
37 |
38 | .page-third-column .dialogs {
39 | max-width: 25%;
40 | flex: 1 1 25%;
41 | }
42 |
43 | .page-small .dialogs {
44 | flex: 0 0 94px;
45 | max-width: 94px;
46 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/DialogsList.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .dialogs-list {
9 | /*margin-top: -3px;*/
10 | background: var(--panel-background);
11 | overflow-y: scroll;
12 | -webkit-overflow-scrolling: touch;
13 | overflow-x: hidden;
14 | height: 100%;
15 | transform: translateZ(0);
16 | will-change: transform;
17 | /*position: absolute;*/
18 | /*top: 0;*/
19 | /*right: 0;*/
20 | /*bottom: 0;*/
21 | /*left: 0;*/
22 | padding: 4px 8px 8px;
23 | }
24 |
25 | .dialogs-list-item {
26 | margin: 2px 0;
27 | }
28 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Language.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .language-list-item {
9 | padding: 8px 12px;
10 | border-radius: 10px;
11 | }
12 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/MainMenuButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .page-small .main-menu-button {
9 | margin-left: 12px;
10 | margin-right: 12px;
11 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/NewChannel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/NewGroup.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .new-chat-content {
9 | min-height: 800px;
10 | }
11 |
12 | .new-chat-title {
13 | padding: 12px 12px 0;
14 | }
15 |
16 | .new-chat-input {
17 | margin: 12px 0 8px;
18 | }
19 |
20 | .new-chat-bottom-button {
21 | border-radius: 50%;
22 | background: var(--color-accent-main);
23 | color: white;
24 | width: 48px;
25 | height: 48px;
26 | position: absolute;
27 | bottom: 20px;
28 | right: 20px;
29 | cursor: pointer;
30 | display: flex;
31 | align-items: center;
32 | justify-content: center;
33 | transform: scaleX(-1);
34 | z-index: 1;
35 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/NewGroupParams.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/SectionHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .section-header {
9 | padding: 17px 16px 18px;
10 | display: flex;
11 | flex-direction: row;
12 | }
13 |
14 | .section-header-title {
15 | color: var(--header-subtle-color);
16 | flex-grow: 1;
17 | flex-shrink: 1;
18 | user-select: none;
19 | word-wrap: break-word;
20 | white-space: nowrap;
21 | overflow: hidden;
22 | text-overflow: ellipsis;
23 | }
24 |
25 | .section-header-title-multiline {
26 | white-space: normal;
27 | }
28 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/SectionHeader.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import classNames from 'classnames';
11 | import './SectionHeader.css';
12 |
13 | function SectionHeader({ command, multiline, onClick, children }) {
14 | return (
15 |
16 |
{children}
17 | {Boolean(command) &&
{command}}
18 |
19 | );
20 | }
21 |
22 | SectionHeader.propTypes = {
23 | command: PropTypes.string,
24 | multiline: PropTypes.bool,
25 | onClick: PropTypes.func
26 | };
27 |
28 | export default SectionHeader;
29 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/ActiveSessions.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/BlockedUsers.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/ChatBackground.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/CreateFilter.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .create-filter-title {
9 | padding: 12px 8px 18px;
10 | }
11 |
12 | .create-filter-add-chats {
13 | color: var(--color-accent-main)
14 | }
15 |
16 | .create-filter-remove-chats {
17 | color: var(--error);
18 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/EditFilterChats.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .edit-filter-chats-search {
9 | position: absolute;
10 | top: 0;
11 | right: 0;
12 | bottom: 0;
13 | left: 0;
14 | overflow-y: auto;
15 | -webkit-overflow-scrolling: touch;
16 | background: var(--background);
17 | z-index: 1;
18 | padding: 8px;
19 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/EditProfile.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .edit-profile-name {
9 | padding: 12px 24px 18px;
10 | }
11 |
12 | .edit-profile-username {
13 | padding: 12px 24px 18px;
14 | }
15 |
16 | .edit-profile-input {
17 | margin: 12px 0;
18 | }
19 |
20 | .edit-profile-hint {
21 | margin-top: 4px;
22 | color: var(--text-secondary);
23 | font-size: 14px;
24 | line-height: normal;
25 | }
26 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/Filters.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .filters-create {
9 | display: flex;
10 | flex-direction: column;
11 | align-items: center;
12 | user-select: none;
13 | }
14 |
15 | .filters-create-animation {
16 | width: 80px;
17 | height: 80px;
18 | margin: 0 auto;
19 | }
20 |
21 | .filters-create-hint {
22 | color: var(--text-secondary);
23 | font-size: 14px;
24 | line-height: normal;
25 | margin: 40px 40px 0 40px;
26 | text-align: center;
27 | }
28 |
29 | .filters-create-button {
30 | color: white;
31 | padding: 9px 16px 10px;
32 | text-transform: none;
33 | border-radius: 20px;
34 | margin: 16px 0;
35 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/General.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/Main.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .settings-main-content {
9 | flex: 1 1 auto;
10 | display: flex;
11 | flex-direction: column;
12 | }
13 |
14 | .settings-main-footer {
15 | color: var(--dialog-subtle-color);
16 | font-size: 12px;
17 | line-height: normal;
18 | flex: 1 1 auto;
19 | display: flex;
20 | align-items: flex-end;
21 | justify-content: center;
22 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/Notifications.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .settings-item {
9 | display: flex;
10 | flex-direction: row;
11 | align-items: center;
12 | height: 72px;
13 | background: transparent;
14 | cursor: pointer;
15 | user-select: none;
16 | }
17 |
18 | .settings-item-control {
19 | align-self: flex-start;
20 | margin: 4px 20px 4px 4px;
21 | }
22 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/PrivacyCalls.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .privacy-calls-item {
9 | margin: 0 7px;
10 | }
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/PrivacySecurity.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Settings/Settings.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .settings {
9 | position: absolute;
10 | top: 0;
11 | right: 0;
12 | bottom: 0;
13 | left: 0;
14 | }
15 |
16 | .settings-content {
17 | width: 100%;
18 | height: 100%;
19 | position: relative;
20 | }
21 |
22 | .settings-list-item {
23 | padding: 12px;
24 | border-radius: 10px;
25 | }
26 |
27 | .settings-list-item2 {
28 | padding: 12px;
29 | border-radius: 10px;
30 | }
31 |
32 | .settings-list-item-icon {
33 | margin: 4px 0 4px 4px;
34 | align-self: flex-start;
35 | }
36 |
37 | .settings-list-item-text {
38 | margin-top: 2px;
39 | margin-bottom: 2px;
40 | }
41 |
42 | .settings-list-item-text2 {
43 | margin: 2px 4px;
44 | }
45 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Sidebar.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/Sidebar.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import './Sidebar.css';
11 |
12 | class Sidebar extends React.Component {
13 | render() {
14 | const { children } = this.props;
15 |
16 | return {children}
;
17 | }
18 | }
19 |
20 | Sidebar.propTypes = {};
21 |
22 | export default Sidebar;
23 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/SidebarPage.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .sidebar-page {
9 | position: absolute;
10 | top: 0;
11 | right: 0;
12 | bottom: 0;
13 | left: 0;
14 | background: var(--panel-background);
15 | display: flex;
16 | flex-direction: column;
17 | z-index: 1;
18 | will-change: transform;
19 | backface-visibility: hidden;
20 | }
21 |
22 | .sidebar-page-top-divider {
23 | min-height: 3px;
24 | background: linear-gradient(0deg, transparent 0%, var(--border) 100%);;
25 | }
26 |
27 | .sidebar-page-content {
28 | padding: 0 8px 8px;
29 | overflow-y: auto;
30 | -webkit-overflow-scrolling: touch;
31 | transform: translateZ(0);
32 | }
33 |
34 | .sidebar-page-section {
35 | padding: 8px 0;
36 | }
37 |
38 | .sidebar-page-section-divider {
39 | margin: 0 -8px;
40 | width: calc(100% + 16px);
41 | border-bottom: 1px solid var(--border);
42 | }
43 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/ThemePicker.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .theme-picker-form {
9 | margin: 24px;
10 | }
11 |
12 | .theme-picker-group {
13 | margin: 8px 0;
14 | }
15 |
16 | .theme-picker-red,
17 | .theme-picker-red:checked {
18 | color: #f44336;
19 | }
20 |
21 | .theme-picker-orange,
22 | .theme-picker-orange:checked {
23 | color: #fb8c00;
24 | }
25 |
26 | .theme-picker-amber,
27 | .theme-picker-amber:checked {
28 | color: #ffb300;
29 | }
30 |
31 | .theme-picker-green,
32 | .theme-picker-green:checked {
33 | color: #43a047;
34 | }
35 |
36 | .theme-picker-blue,
37 | .theme-picker-blue:checked {
38 | color: #50a2e9;
39 | }
40 |
41 | .theme-picker-indigo,
42 | .theme-picker-indigo:checked {
43 | color: #3949ab;
44 | }
45 |
46 | .theme-picker-deep-purple,
47 | .theme-picker-deep-purple:checked {
48 | color: #5e35b1;
49 | }
50 |
--------------------------------------------------------------------------------
/src/Components/ColumnLeft/UpdatePanel.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .update-button {
9 | margin: 0;
10 | padding: 24px;
11 | width: calc(100% + 1px);
12 | border-radius: 0;
13 | color: white;
14 | max-height: 65px;
15 | }
16 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/ActionBar.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .action-bar {
9 | height: 60px;
10 | background: var(--panel-background);
11 | border-bottom: 1px solid var(--border);
12 | display: flex;
13 | flex-direction: row;
14 | align-items: center;
15 | padding: 0 12px;
16 | }
17 |
18 | .action-bar-content {
19 | flex-grow: 1;
20 | flex-shrink: 1;
21 | display: flex;
22 | flex-direction: row;
23 | align-items: center;
24 | justify-content: space-around;
25 | }
26 |
27 | .action-bar-close-button {
28 | }
29 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/AnimatedCounter.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .animated-counter {
9 | line-height: normal;
10 | font-size: 16px;
11 | display: flex;
12 | flex-direction: row-reverse;
13 | }
14 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/AnimatedItem.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .animated-item {
9 | position: relative;
10 | }
11 |
12 | .animated-item-placeholder {
13 | color: transparent;
14 | }
15 |
16 | .animated-item-wrapper {
17 | position: absolute;
18 | left: 0;
19 | top: 0;
20 | width: 100%;
21 | height: 100%;
22 | will-change: transform;
23 | }
24 |
25 | .animated-item-1,
26 | .animated-item-2 {
27 | will-change: opacity;
28 | }
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/AnimationPreview.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/AnimationPreview.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import Animation from '../Message/Media/Animation';
11 | import './StickerPreview.css';
12 |
13 | class AnimationPreview extends React.Component {
14 | render() {
15 | const { animation } = this.props;
16 | if (!animation) return null;
17 |
18 | return (
19 |
27 | );
28 | }
29 | }
30 |
31 | AnimationPreview.propTypes = {
32 | animation: PropTypes.object
33 | };
34 |
35 | export default AnimationPreview;
36 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/AttachButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .attach-button-paper {
9 | transform: translate(9px, -13px) !important;
10 | }
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/FilesDropTarget.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .files-drop-target{
9 | position: absolute;
10 | top: 0;
11 | right: 0;
12 | bottom: 0;
13 | left: 0;
14 | background: transparent;
15 | padding: 12px;
16 | }
17 |
18 | .files-drop-target-wrapper{
19 | background: var(--panel-background);
20 | border-radius: 10px;
21 | pointer-events: none;
22 | width: 100%;
23 | height: 100%;
24 | border: 1px solid var(--border);
25 | display: flex;
26 | align-items: center;
27 | justify-content: center;
28 | }
29 |
30 | .files-drop-target-text{
31 | text-align: center;
32 | }
33 |
34 | .files-drop-target-title{
35 | font-size: 48px;
36 | line-height: normal;
37 | }
38 |
39 | .files-drop-target-subtitle{
40 | font-size: 24px;
41 | line-height: normal;
42 | }
43 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/Footer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/FooterCommand.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .footer-command .inputbox-bubble {
9 | margin: 0;
10 | border-radius: 12px;
11 | display: flex;
12 | align-items: center;
13 | justify-content: center;
14 | padding: 0;
15 | }
16 |
17 | .footer-command .inputbox-bubble::after {
18 | display: none;
19 | }
20 |
21 | .footer-command-button {
22 | margin: 10px;
23 | min-width: 100px;
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/FooterCommand.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import Button from '@material-ui/core/Button/Button';
10 | import './FooterCommand.css';
11 |
12 | class FooterCommand extends React.Component {
13 | render() {
14 | const { command, onCommand } = this.props;
15 |
16 | return (
17 |
18 |
19 |
20 |
23 |
24 |
25 |
26 | );
27 | }
28 | }
29 |
30 | export default FooterCommand;
31 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/GifsPicker.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .gifs-picker {
9 | width: 338px;
10 | height: 358px;
11 | background: transparent;
12 | display: flex;
13 | flex-direction: column;
14 | }
15 |
16 | .gifs-picker-scroll {
17 | background: transparent;
18 | padding: 6px;
19 | height: 356px;
20 | overflow-y: auto;
21 | -webkit-overflow-scrolling: touch;
22 | transform: translateZ(0);
23 |
24 | display: flex;
25 | flex-wrap: wrap;
26 | justify-content: flex-start;
27 | align-items: flex-start;
28 | align-content: flex-start;
29 | }
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/HeaderCommand.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .header-command {
9 | height: 60px;
10 | padding: 0 7px;
11 | display: flex;
12 | flex-direction: row;
13 | align-items: center;
14 | overflow: hidden;
15 | }
16 |
17 | .header-command-button {
18 | margin: 0 7px;
19 | }
20 |
21 | .header-command-space {
22 | flex-grow: 1;
23 | flex-shrink: 1;
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/HeaderProgress.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | @keyframes blink {
9 | 0% {
10 | opacity: 0;
11 | }
12 | 20% {
13 | opacity: 1;
14 | }
15 | 100% {
16 | opacity: 0;
17 | }
18 | }
19 |
20 | .header-progress {
21 | animation-name: blink;
22 | animation-duration: 1s;
23 | animation-iteration-count: infinite;
24 | animation-fill-mode: both;
25 | }
26 |
27 | .header-progress:nth-of-type(3) {
28 | animation-delay: 0.15s;
29 | }
30 |
31 | .header-progress:nth-of-type(4) {
32 | animation-delay: 0.3s;
33 | }
34 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/HeaderProgress.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import './HeaderProgress.css';
10 |
11 | class HeaderProgress extends React.Component {
12 | render() {
13 | return (
14 | <>
15 | .
16 | .
17 | .
18 | >
19 | );
20 | }
21 | }
22 |
23 | export default HeaderProgress;
24 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/InputBoxHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .inputbox-header {
9 | display: flex;
10 | flex-direction: row;
11 | align-items: center;
12 | margin-bottom: -18px;
13 | }
14 |
15 | .inputbox-header-left-column {
16 |
17 | }
18 |
19 | .inputbox-header-middle-column {
20 | flex-grow: 1;
21 | flex-shrink: 1;
22 | overflow: hidden;
23 | }
24 |
25 | .inputbox-header-right-column {
26 | min-width: 54px;
27 | }
28 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/InputBoxHints.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/MainMenuButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .main-menu-button {
9 | /*margin: 6px 12px 6px 0;*/
10 | }
11 |
12 | .delete-dialog-content {
13 | display: flex;
14 | flex-direction: row;
15 | }
16 |
17 | #delete-dialog-description {
18 | margin-left: 12px;
19 | }
20 |
21 | .progress-button {
22 | margin-right: 12px !important;
23 | padding: 0 !important;
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/NotificationsCommand.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import { withTranslation } from 'react-i18next';
10 | import FooterCommand from './FooterCommand';
11 | import Notifications from './Notifications';
12 |
13 | class NotificationsCommand extends Notifications {
14 | render() {
15 | const { t } = this.props;
16 | const { isMuted } = this.state;
17 | const command = isMuted ? t('ChatsUnmute') : t('ChatsMute');
18 |
19 | return ;
20 | }
21 | }
22 |
23 | export default withTranslation()(NotificationsCommand);
24 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/PinnedMessages.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .pinned-messages {
9 | position: absolute;
10 | left: 0;
11 | top: 0;
12 | width: 100%;
13 | height: 100%;
14 | display: flex;
15 | flex-direction: column;
16 | z-index: 10;
17 | margin-right: 20px;
18 | }
19 |
20 | .pinned-messages-wrapper {
21 | width: 100%;
22 | height: 100%;
23 | position: relative;
24 | }
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/PinnedMessagesHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/RecordTimer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .record-timer {
9 | display: flex;
10 | align-items: center;
11 | }
12 |
13 | .record-timer-icon {
14 | width: 10px;
15 | height: 10px;
16 | background: red;
17 | border-radius: 50%;
18 | margin: 0 18px;
19 | animation: blinker .5s cubic-bezier(.5, 0, 1, 1) infinite alternate;
20 | }
21 |
22 | .Blink {
23 |
24 | }
25 |
26 | @keyframes blinker {
27 | from { opacity: 1; }
28 | to { opacity: 0; }
29 | }
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/ScrollDownButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .scroll-down-button {
9 | border: 1px solid var(--border);
10 | background: var(--panel-background);
11 | position: absolute;
12 | right: 24px;
13 | bottom: 12px;
14 | border-radius: 50%;
15 | }
16 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/ScrollDownButton.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';
11 | import IconButton from '@material-ui/core/IconButton';
12 | import './ScrollDownButton.css';
13 |
14 | class ScrollDownButton extends React.Component {
15 | render() {
16 | const { onClick } = this.props;
17 |
18 | return (
19 |
24 | );
25 | }
26 | }
27 |
28 | ScrollDownButton.propTypes = {
29 | onClick: PropTypes.func.isRequired
30 | };
31 |
32 | export default ScrollDownButton;
33 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/SelectChatPlaceholder.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .switch-inline-placeholder {
9 | position: absolute;
10 | left: 0;
11 | top: 0;
12 | width: 100%;
13 | height: 100%;
14 | background: rgba(0, 0, 0, 0.45);
15 | display: flex;
16 | align-items: center;
17 | justify-content: center;
18 | z-index: 1;
19 | }
20 |
21 | .switch-inline-text {
22 | background: rgba(0, 0, 0, 0.5);
23 | color: white;
24 | padding: 12px 18px;
25 | border-radius: 6px;
26 | }
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/SelectChatPlaceholder.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { withTranslation } from 'react-i18next';
11 | import { closeChatSelect } from '../../Actions/Message';
12 | import './SelectChatPlaceholder.css';
13 |
14 | class SelectChatPlaceholder extends React.Component {
15 |
16 | handleClick = () => {
17 | closeChatSelect();
18 | }
19 |
20 | render() {
21 | const { t } = this.props;
22 |
23 | return (
24 |
25 |
{t('SelectChat') + '...'}
26 |
27 | );
28 | }
29 |
30 | }
31 |
32 | SelectChatPlaceholder.propTypes = {};
33 |
34 | export default withTranslation()(SelectChatPlaceholder);
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/StickerPreview.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .sticker-preview {
9 | pointer-events: none;
10 | position: fixed;
11 | top: 0;
12 | right: 0;
13 | bottom: 0;
14 | left: 0;
15 | background-color: rgba(0, 0, 0, 0.5);
16 | z-index: calc(var(--z-index-modal) + 1);
17 |
18 | display: flex;
19 | flex-direction: column;
20 | align-items: center;
21 | justify-content: center;
22 | }
23 |
24 | .sticker-preview-emoji {
25 | margin-bottom: 12px;
26 | font-size: 21px;
27 | line-height: normal;
28 | min-height: 30px;
29 | }
30 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/StickersHint.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .stickers-hint {
9 | max-width: 695px;
10 | margin: 0 auto;
11 | border-radius: 12px;
12 | /* overflow: hidden; */
13 | width: calc(100% - 22px);
14 | /*border-top: 1px solid var(--border);*/
15 | background: var(--panel-background);
16 | position: absolute;
17 | left: 0;
18 | right: 0;
19 | bottom: 4px;
20 | max-height: 190px;
21 | overflow-y: auto;
22 | -webkit-overflow-scrolling: touch;
23 | display: flex;
24 | flex-wrap: wrap;
25 | z-index: 2;
26 | }
27 |
28 | .sticker-hints-item {
29 | padding: 6px;
30 | }
31 |
--------------------------------------------------------------------------------
/src/Components/ColumnMiddle/StickersPicker.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .stickers-picker {
9 | width: 338px;
10 | height: 358px;
11 | overflow-x: hidden;
12 | background: transparent;
13 | display: flex;
14 | flex-direction: column;
15 | }
16 |
17 | .stickers-picker-scroll {
18 | background: transparent;
19 | padding: 0 6px 6px;
20 | height: 356px;
21 | overflow-y: auto;
22 | -webkit-overflow-scrolling: touch;
23 | transform: translateZ(0);
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/AudioTabControl.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React, { PropTypes } from 'react';
9 |
10 | class AudioTabControl extends React.Component {
11 |
12 | render() {
13 |
14 | }
15 |
16 | }
17 |
18 | AudioTabControl.propTypes = {};
19 |
20 | AudioTabControl.defaultProps = {};
21 |
22 | export default AudioTabControl;
--------------------------------------------------------------------------------
/src/Components/ColumnRight/ChatDetails.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .chat-details {
9 | margin: 0;
10 | box-sizing: border-box;
11 | height: 100%;
12 | width: 100%;
13 | display: flex;
14 | flex-direction: column;
15 | }
16 |
17 | .chat-details-info {
18 | margin: 0;
19 | padding: 0 8px;
20 | }
21 |
22 | .chat-details-list {
23 | overflow-x: hidden;
24 | overflow-y: auto;
25 | -webkit-overflow-scrolling: touch;
26 | flex-grow: 1;
27 | flex-shrink: 1;
28 | will-change: transform;
29 | }
30 |
31 | .chat-details-info-icon {
32 | transform: rotateZ(180deg);
33 | }
34 |
35 | .chat-details-icon {
36 | }
37 |
38 | .shared-media-list {
39 | min-height: 100%;
40 | box-sizing: border-box;
41 | }
42 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/ChatDetailsHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/ChatInfo.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .chat-info {
9 | border-left: 1px solid var(--border);
10 | background: var(--panel-background);
11 | }
12 |
13 | .right-column {
14 | position: relative;
15 | max-width: 25%;
16 | flex: 1 1 25%;
17 | margin: 0;
18 | box-sizing: border-box;
19 | height: 100%;
20 | display: flex;
21 | flex-direction: column;
22 | }
23 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/ChatMedia.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/DocumentsTabControl.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React, { PropTypes } from 'react';
9 |
10 | class DocumentsTabControl extends React.Component {
11 |
12 | render() {
13 |
14 | }
15 |
16 | }
17 |
18 | DocumentsTabControl.propTypes = {};
19 |
20 | DocumentsTabControl.defaultProps = {};
21 |
22 | export default DocumentsTabControl;
--------------------------------------------------------------------------------
/src/Components/ColumnRight/GroupsInCommon.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .groups-in-common {
9 | margin: 0;
10 | box-sizing: border-box;
11 | height: 100%;
12 | width: 100%;
13 | display: flex;
14 | flex-direction: column;
15 | }
16 |
17 | .groups-in-common-list {
18 | overflow-y: auto;
19 | -webkit-overflow-scrolling: touch;
20 | flex-grow: 1;
21 | flex-shrink: 1;
22 | transform: translateZ(0);
23 | }
24 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/GroupsInCommonHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/LinksTabControl.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React, { PropTypes } from 'react';
9 |
10 | class LinksTabControl extends React.Component {
11 |
12 | render() {
13 |
14 | }
15 |
16 | }
17 |
18 | LinksTabControl.propTypes = {};
19 |
20 | LinksTabControl.defaultProps = {};
21 |
22 | export default LinksTabControl;
--------------------------------------------------------------------------------
/src/Components/ColumnRight/MediaTabControl.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 |
10 | class MediaTabControl extends React.Component {
11 |
12 | render() {
13 |
14 | }
15 | }
16 |
17 | export default MediaTabControl;
--------------------------------------------------------------------------------
/src/Components/ColumnRight/MoreListItem.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .list-item {
9 | padding: 11px 22px;
10 | }
11 |
12 | .list-item-rounded {
13 | padding: 11px 22px;
14 | border-radius: 8px;
15 | }
16 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/NotificationsListItem.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .notifications-checkbox {
9 | transform: translate(0px, -10px);
10 | }
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .shared-media {
9 | margin: 0;
10 | box-sizing: border-box;
11 | height: 100%;
12 | width: 100%;
13 | display: flex;
14 | flex-direction: column;
15 | }
16 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedAudios.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedDocuments.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedLinks.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedMediaContent.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .shared-media-content {
9 | transform: translateZ(0);
10 | will-change: transform;
11 | padding: 8px;
12 | min-height: calc(100% - 44px - 2 * 8px);
13 | }
14 |
15 | .shared-media-virt-content {
16 | transform: translateZ(0);
17 | will-change: transform;
18 | position: relative;
19 | min-height: calc(100% - 44px - 2 * 8px);
20 | margin: 8px 0;
21 | }
22 |
23 | .shared-media-virt-item {
24 | position: absolute;
25 | left: 8px;
26 | right: 8px;
27 | }
28 |
29 | .groups-in-common-item {
30 | padding: 12px;
31 | margin-bottom: 4px;
32 | border-radius: 10px;
33 | }
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedMediaHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedMediaTabs.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .tabs.shared-media-tabs {
9 | position: sticky;
10 | top: 0;
11 | background: var(--panel-background);
12 | /*border-bottom: 1px solid var(--border);*/
13 | z-index: 2;
14 | overflow: hidden;
15 | }
16 |
17 | .chat-info-dialog-paper .shared-media-tabs {
18 | background: var(--background-paper);
19 | }
20 |
21 | .shared-media-tabs-container {
22 | justify-content: flex-start;
23 | }
24 |
25 | .shared-media-tab {
26 | flex: 1 1 auto;
27 | }
28 |
29 | .filter span {
30 | /*margin: 0 19px;*/
31 | }
32 |
33 | .tabs-bottom-border {
34 | position: absolute;
35 | top: 43px;
36 | height: 1px;
37 | width: 100%;
38 | background: var(--border);
39 | }
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedPhotos.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedVideos.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMedia/SharedVoiceNotes.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/SharedMediaHeader.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/ColumnRight/UsersList.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 |
10 | class UsersList extends React.Component {
11 |
12 | render() {
13 |
14 | }
15 | }
16 |
17 | export default UsersList;
--------------------------------------------------------------------------------
/src/Components/Footer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .footer-wrapper {
9 | text-align: center;
10 | color: var(--dialog-subtle-color);
11 | font-size: 12px;
12 | line-height: normal;
13 | padding: 8px;
14 | }
15 |
--------------------------------------------------------------------------------
/src/Components/Footer.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import packageJson from '../../package.json';
10 | import './Footer.css';
11 |
12 | class Footer extends React.PureComponent {
13 | render() {
14 | return (
15 |
16 | {packageJson.version}
17 |
18 | );
19 | }
20 | }
21 |
22 | export default Footer;
23 |
--------------------------------------------------------------------------------
/src/Components/InactivePage.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import AppInactive from './Additional/AppInactive';
10 | import Footer from './Footer';
11 |
12 | class InactivePage extends React.Component {
13 | render() {
14 | return (
15 | <>
16 |
17 |
20 |
21 | >
22 | );
23 | }
24 | }
25 |
26 | export default InactivePage;
27 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Anchor.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Anchor(props) {
13 | return ;
14 | }
15 |
16 | Anchor.propTypes = {
17 | name: PropTypes.string.isRequired
18 | };
19 |
20 | export default Anchor;
21 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Audio.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import MediaAudio from '../../Message/Media/Audio';
11 | import Caption from './Caption';
12 |
13 | function Audio(props) {
14 | const { audio, block, caption, openMedia } = props;
15 |
16 | return (
17 |
18 |
19 |
20 |
21 | );
22 | }
23 |
24 | Audio.propTypes = {
25 | block: PropTypes.object.isRequired,
26 | audio: PropTypes.object,
27 | caption: PropTypes.object.isRequired,
28 | openMedia: PropTypes.func
29 | };
30 |
31 | export default Audio;
32 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Blockquote.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Blockquote(props) {
13 | const { text, credit } = props;
14 | return (
15 |
16 |
17 | {credit && (
18 |
19 |
20 |
21 | )}
22 |
23 | );
24 | }
25 |
26 | Blockquote.propTypes = {
27 | text: PropTypes.object.isRequired,
28 | credit: PropTypes.object.isRequired
29 | };
30 |
31 | export default Blockquote;
32 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/ChatLink.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 |
11 | function ChatLink(props) {
12 | return ;
13 | }
14 |
15 | ChatLink.propTypes = {
16 | title: PropTypes.string.isRequired,
17 | photo: PropTypes.object,
18 | username: PropTypes.string.isRequired
19 | };
20 |
21 | export default ChatLink;
22 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Collage.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { withIV } from '../IVContext';
11 | import Caption from './Caption';
12 | import { getPageBlock } from '../../../Utils/InstantView';
13 |
14 | function Collage(props) {
15 | const { pageBlocks, caption, iv } = props;
16 |
17 | return (
18 |
19 | {pageBlocks.map((x, index) => getPageBlock(x, iv, index))}
20 |
21 |
22 | );
23 | }
24 |
25 | Collage.propTypes = {
26 | pageBlocks: PropTypes.array.isRequired,
27 | caption: PropTypes.object.isRequired
28 | };
29 |
30 | export default withIV(Collage);
31 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Cover.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { withIV } from '../IVContext';
11 | import { getPageBlock } from '../../../Utils/InstantView';
12 |
13 | function Cover(props) {
14 | return getPageBlock(props.cover, props.iv);
15 | }
16 |
17 | Cover.propTypes = {
18 | cover: PropTypes.object.isRequired
19 | };
20 |
21 | export default withIV(Cover);
22 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Details.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { withIV } from '../IVContext';
11 | import RichText from '../RichText/RichText';
12 | import { getPageBlock } from '../../../Utils/InstantView';
13 |
14 | function Details(props) {
15 | const { header, pageBlocks, isOpen, iv } = props;
16 |
17 | return (
18 |
19 |
20 |
21 |
22 | {pageBlocks.map((x, index) => getPageBlock(x, iv, index))}
23 |
24 | );
25 | }
26 |
27 | Details.propTypes = {
28 | header: PropTypes.object.isRequired,
29 | pageBlocks: PropTypes.array.isRequired,
30 | isOpen: PropTypes.bool.isRequired
31 | };
32 |
33 | export default withIV(Details);
34 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Divider.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Divider() {
13 | return
;
14 | }
15 |
16 | export default Divider;
17 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/ErrorHandler.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .error-handler {
9 | white-space: pre-wrap;
10 | word-wrap: break-word;
11 | word-break: break-word;
12 | }
13 |
14 | .error-handler pre {
15 | background-color: rgba(206, 17, 38, 0.05);
16 | color: rgb(206, 17, 38);
17 | border: 0;
18 | max-height: 150px;
19 | width: 100%;
20 | overflow-y: auto;
21 | overflow-x: hidden;
22 | }
23 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Footer.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Footer(props) {
13 | return (
14 |
17 | );
18 | }
19 |
20 | Footer.propTypes = {
21 | footer: PropTypes.object.isRequired
22 | };
23 |
24 | export default Footer;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Header.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Header(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Header.propTypes = {
21 | header: PropTypes.object.isRequired
22 | };
23 |
24 | export default Header;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Kicker.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Kicker(props) {
13 | const { kicker } = props;
14 | return (
15 |
16 |
17 |
18 | );
19 | }
20 |
21 | Kicker.propTypes = {
22 | kicker: PropTypes.object.isRequired
23 | };
24 |
25 | export default Kicker;
26 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/List.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import ListItem from './ListItem';
11 |
12 | function List(props) {
13 | return (
14 |
15 | {props.items.map((x, index) => (
16 |
17 | ))}
18 |
19 | );
20 | }
21 |
22 | List.propTypes = {
23 | items: PropTypes.array.isRequired
24 | };
25 |
26 | export default List;
27 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/ListItem.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { withIV } from '../IVContext';
11 | import { getPageBlock } from '../../../Utils/InstantView';
12 |
13 | function ListItem(props) {
14 | return {props.pageBlocks.map((x, index) => getPageBlock(x, props.iv, index))};
15 | }
16 |
17 | ListItem.propTypes = {
18 | label: PropTypes.string.isRequired,
19 | pageBlocks: PropTypes.array.isRequired
20 | };
21 |
22 | export default withIV(ListItem);
23 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Map.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import Caption from './Caption';
11 | import Location from '../../Message/Media/Location';
12 | import { IV_LOCATION_HEIGHT, IV_LOCATION_WIDTH } from '../../../Constants';
13 |
14 | function Map(props) {
15 | const { location, caption } = props;
16 |
17 | return (
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
25 | Map.propTypes = {
26 | location: PropTypes.object.isRequired,
27 | zoom: PropTypes.number.isRequired,
28 | width: PropTypes.number.isRequired,
29 | height: PropTypes.number.isRequired,
30 | caption: PropTypes.object.isRequired
31 | };
32 |
33 | export default Map;
34 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Paragraph.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Paragraph(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Paragraph.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Paragraph;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Photo.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import Caption from './Caption';
11 | import MediaPhoto from '../../../Components/Message/Media/Photo';
12 | import { IV_PHOTO_DISPLAY_SIZE, IV_PHOTO_SIZE } from '../../../Constants';
13 |
14 | function Photo(props) {
15 | const { photo, caption, url, openMedia } = props;
16 |
17 | return (
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
25 | Photo.propTypes = {
26 | photo: PropTypes.object,
27 | caption: PropTypes.object.isRequired,
28 | url: PropTypes.string.isRequired,
29 | openMedia: PropTypes.func
30 | };
31 |
32 | export default Photo;
33 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Preformatted.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Preformatted(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Preformatted.propTypes = {
21 | text: PropTypes.object.isRequired,
22 | language: PropTypes.string.isRequired
23 | };
24 |
25 | export default Preformatted;
26 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/PullQuote.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function PullQuote(props) {
13 | const { text, credit } = props;
14 | return (
15 |
23 | );
24 | }
25 |
26 | PullQuote.propTypes = {
27 | text: PropTypes.object.isRequired,
28 | credit: PropTypes.object.isRequired
29 | };
30 |
31 | PullQuote.propTypes = {};
32 |
33 | export default PullQuote;
34 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Slideshow.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { withIV } from '../IVContext';
11 | import Caption from './Caption';
12 | import { getPageBlock } from '../../../Utils/InstantView';
13 |
14 | function Slideshow(props) {
15 | const { pageBlocks, caption, iv } = props;
16 |
17 | return (
18 |
19 | {pageBlocks.map((x, index) => getPageBlock(x, iv, index))}
20 |
21 |
22 | );
23 | }
24 |
25 | Slideshow.propTypes = {
26 | pageBlocks: PropTypes.array.isRequired,
27 | caption: PropTypes.object.isRequired
28 | };
29 |
30 | export default withIV(Slideshow);
31 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Subheader.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Subheader(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Subheader.propTypes = {
21 | subheader: PropTypes.object.isRequired
22 | };
23 |
24 | export default Subheader;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Subtitle.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Subtitle(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Subtitle.propTypes = {
21 | subtitle: PropTypes.object.isRequired
22 | };
23 |
24 | export default Subtitle;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/Title.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from '../RichText/RichText';
11 |
12 | function Title(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Title.propTypes = {
21 | title: PropTypes.object.isRequired
22 | };
23 |
24 | export default Title;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/Blocks/VoiceNote.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import MediaVoiceNote from '../../Message/Media/VoiceNote';
11 | import Caption from './Caption';
12 |
13 | function VoiceNote(props) {
14 | const { voiceNote, block, caption, openMedia } = props;
15 |
16 | return (
17 |
18 |
19 |
20 |
21 | );
22 | }
23 |
24 | VoiceNote.propTypes = {
25 | block: PropTypes.object.isRequired,
26 | voiceNote: PropTypes.object,
27 | caption: PropTypes.object.isRequired,
28 | openMedia: PropTypes.func
29 | };
30 |
31 | export default VoiceNote;
--------------------------------------------------------------------------------
/src/Components/InstantView/IVContext.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import { getDisplayName } from '../../Utils/HOC';
10 |
11 | const IVContext = React.createContext(null);
12 |
13 | export default IVContext;
14 |
15 | export function withIV(Component) {
16 | class IVComponent extends React.Component {
17 | render() {
18 | return {value => };
19 | }
20 | }
21 | IVComponent.displayName = `WithIV(${getDisplayName(Component)})`;
22 |
23 | return IVComponent;
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Anchor.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Anchor(props) {
13 | const { name, text } = props;
14 |
15 | return (
16 |
17 | {text && }
18 |
19 | );
20 | }
21 |
22 | Anchor.propTypes = {
23 | name: PropTypes.string.isRequired,
24 | text: PropTypes.object
25 | };
26 |
27 | export default Anchor;
28 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Bold.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Bold(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Bold.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Bold;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/EmailAddress.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function EmailAddress(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | EmailAddress.propTypes = {
21 | emailAddress: PropTypes.string.isRequired,
22 | text: PropTypes.object.isRequired
23 | };
24 |
25 | export default EmailAddress;
26 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Fixed.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Fixed(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Fixed.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Fixed;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Italic.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Italic(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Italic.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Italic;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Marked.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Marked(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Marked.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Marked;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/PhoneNumber.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function PhoneNumber(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | PhoneNumber.propTypes = {
21 | phoneNumber: PropTypes.string.isRequired,
22 | text: PropTypes.object.isRequired
23 | };
24 |
25 | export default PhoneNumber;
26 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Plain.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 |
11 | function Plain(props) {
12 | return props.text;
13 | }
14 |
15 | Plain.propTypes = {
16 | text: PropTypes.string.isRequired
17 | };
18 |
19 | export default Plain;
20 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/RichText.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import { getRichText } from '../../../Utils/InstantView';
11 |
12 | function RichText(props) {
13 | return getRichText(props.text);
14 | }
15 |
16 | RichText.propTypes = {
17 | text: PropTypes.object.isRequired
18 | };
19 |
20 | export default RichText;
21 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Strikethrough.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Strikethrough(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Strikethrough.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Strikethrough;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Subscript.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Subscript(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Subscript.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Subscript;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Superscript.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Superscript(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Superscript.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Superscript;
25 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Texts.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Texts(props) {
13 | return (
14 | <>
15 | {props.texts.map((x, index) => (
16 |
17 | ))}
18 | >
19 | );
20 | }
21 |
22 | Texts.propTypes = {
23 | texts: PropTypes.arrayOf(PropTypes.object).isRequired
24 | };
25 |
26 | export default Texts;
27 |
--------------------------------------------------------------------------------
/src/Components/InstantView/RichText/Underline.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import RichText from './RichText';
11 |
12 | function Underline(props) {
13 | return (
14 |
15 |
16 |
17 | );
18 | }
19 |
20 | Underline.propTypes = {
21 | text: PropTypes.object.isRequired
22 | };
23 |
24 | export default Underline;
25 |
--------------------------------------------------------------------------------
/src/Components/Message/Album/DocumentAlbum.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Message/DayMeta.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .day-meta {
9 | padding: 5px 0;
10 | user-select: none;
11 | display: flex;
12 | align-items: center;
13 | justify-content: center;
14 | }
15 |
16 | .day-meta-wrapper {
17 | font-size: 15px;
18 | line-height: normal;
19 | height: 24px;
20 | border-radius: 12px;
21 | color: var(--message-service-color);
22 | background: var(--message-service-background);
23 | padding: 0 6px;
24 | display: flex;
25 | align-items: center;
26 | justify-content: center;
27 | }
28 |
--------------------------------------------------------------------------------
/src/Components/Message/Markup/KeyboardButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .keyboard-button {
9 | justify-content: center;
10 | white-space: nowrap;
11 | text-overflow: ellipsis;
12 | border-radius: 6px;
13 | margin: 3px;
14 | background: var(--message-keyboard-button);
15 | color: white;
16 | overflow: hidden;
17 | }
18 |
19 | .keyboard-button:hover {
20 | background: var(--message-keyboard-button-hover);
21 | }
22 |
23 | .keyboard-button-content {
24 | position: relative;
25 | }
26 |
27 | .keyboard-button-progress {
28 | position: absolute;
29 | right: 1px;
30 | bottom: 2px;
31 | stroke: currentColor;
32 | width: 12px;
33 | height: 9px;
34 | }
35 |
36 | .keyboard-button-icon {
37 | position: absolute;
38 | right: 2px;
39 | top: 2px;
40 | stroke: currentColor;
41 | width: 12px;
42 | height: 12px;
43 | }
--------------------------------------------------------------------------------
/src/Components/Message/Markup/KeyboardRow.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .keyboard-row {
9 | display: flex;
10 | flex-direction: row;
11 | }
--------------------------------------------------------------------------------
/src/Components/Message/Markup/KeyboardRow.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import KeyboardButton from './KeyboardButton';
11 | import './KeyboardRow.css';
12 |
13 | class KeyboardRow extends React.Component {
14 | render() {
15 | const { row } = this.props;
16 | if (!row) return null;
17 | if (!row.length) return null;
18 |
19 | return (
20 |
21 | {row.map((x, i) => ())}
22 |
23 | );
24 | }
25 | }
26 |
27 | KeyboardRow.propTypes = {
28 | row: PropTypes.array
29 | };
30 |
31 | export default KeyboardRow;
--------------------------------------------------------------------------------
/src/Components/Message/Markup/ReplyMarkup.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .reply-markup {
9 | margin: 3px 2px -3px;
10 | }
11 |
12 | .message-short .reply-markup {
13 | margin-left: 35px;
14 | margin-right: 35px;
15 | }
--------------------------------------------------------------------------------
/src/Components/Message/Media/Audio.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .audio-content {
9 | flex-grow: 1;
10 | flex-shrink: 1;
11 | padding: 0 9px;
12 | margin-right: -9px;
13 | overflow: hidden;
14 | min-width: 200px;
15 | position: relative;
16 | }
17 |
18 | .audio-slider {
19 | position: absolute;
20 | left: 9px;
21 | top: 12px;
22 | right: 9px;
23 | }
--------------------------------------------------------------------------------
/src/Components/Message/Media/AudioAction.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .audio-action {
9 | margin-top: 2px;
10 | font-size: 14px;
11 | line-height: 19px;
12 | color: var(--message-in-subtle-color);
13 | user-select: none;
14 | overflow: hidden;
15 | display: flex;
16 | }
17 |
18 | .audio-action span {
19 | word-wrap: break-word;
20 | white-space: nowrap;
21 | overflow: hidden;
22 | text-overflow: ellipsis;
23 | }
24 |
25 | .message-out .audio-action {
26 | color: var(--message-out-subtle-color);
27 | }
28 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/Contact.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .contact {
9 | display: flex;
10 | flex-direction: row;
11 | align-items: center;
12 | }
13 |
14 | .media-title {
15 | margin-top: 7px;
16 | }
17 |
18 | .contact-tile {
19 | margin-right: 9px;
20 | }
21 |
22 | .contact-name {
23 | white-space: nowrap;
24 | }
25 |
26 | .contact-phone {
27 | margin-top: 2px;
28 | font-size: 14px;
29 | line-height: normal;
30 | color: var(--message-in-subtle-color);
31 | }
32 |
33 | .message-out .contact-phone {
34 | color: var(--message-out-subtle-color);
35 | }
36 |
37 | .contact-content {
38 | flex-grow: 1;
39 | flex-shrink: 1;
40 | }
41 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/DocumentAction.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .document-action {
9 | margin-top: 2px;
10 | font-size: 14px;
11 | line-height: normal;
12 | color: var(--message-in-subtle-color);
13 | }
14 |
15 | .message-out .document-action {
16 | color: var(--message-out-subtle-color);
17 | }
18 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/Game.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .game {
9 | display: flex;
10 | flex-direction: row;
11 | margin-top: 5px;
12 | font-size: 14px;
13 | line-height: normal;
14 | }
15 |
16 | .game-wrapper {
17 | flex-grow: 1;
18 | flex-shrink: 1;
19 | margin-left: 8px;
20 | overflow: hidden;
21 | }
22 |
23 | .game-border {
24 | min-width: 2px;
25 | border-radius: 1px;
26 | }
27 |
28 | .game-title {
29 | color: var(--color-accent-main);
30 | }
31 |
32 | .message-bubble-out .game-title {
33 | color: var(--message-out-reply-title);
34 | }
35 |
36 | .game-text {
37 | }
38 |
39 | .game-description {
40 | }
41 |
42 | .game-photo {
43 | margin-top: 6px;
44 | border-radius: 4px;
45 | transform: translateZ(0);
46 | overflow: hidden;
47 | cursor: pointer;
48 | }
49 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/Invoice.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .invoice-photo {
9 | margin: 2px -9px -6px;
10 | position: relative;
11 | }
12 |
13 | .invoice-meta {
14 | position: absolute;
15 | }
16 |
17 | .invoice .photo {
18 | border-radius: 0;
19 | }
--------------------------------------------------------------------------------
/src/Components/Message/Media/PollPercentage.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .poll-percentage {
9 | width: 38px;
10 | /*position: fixed;*/
11 | transform: translateX(-4px);
12 | text-align: right;
13 | transition: opacity 0.2s linear;
14 | font-weight: bold;
15 | }
16 |
17 | .poll-percentage-action {
18 | color: inherit;
19 | }
20 |
21 | .poll-option-unselected .poll-percentage {
22 | opacity: 0;
23 | }
24 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/PollRadio.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .poll-radio {
9 | display: flex;
10 | align-items: center;
11 | margin-left: -8px;
12 | margin-right: -12px;
13 | margin-top: -8px;
14 | position: fixed;
15 | }
16 |
17 | .poll-radio-root {
18 | padding: 6px;
19 | }
20 |
21 | .poll-radio-icon {
22 | color: transparent;
23 | }
24 |
25 | .poll-radio-hidden {
26 | pointer-events: none;
27 | opacity: 0;
28 | }
29 |
30 | .poll-radio-progress-root {
31 | position: absolute;
32 | top: 8px;
33 | left: 8px;
34 | pointer-events: none;
35 | }
36 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/Venue.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .venue {
9 | display: flex;
10 | flex-direction: column;
11 | }
12 |
13 | .venue-content {
14 | margin-top: 6px;
15 | font-size: 14px;
16 | line-height: normal;
17 | }
18 |
19 | .venue-title {
20 | display: inline-block;
21 | max-width: 300px;
22 | overflow: hidden;
23 | vertical-align: text-top;
24 | white-space: nowrap;
25 | text-overflow: ellipsis;
26 | }
27 |
28 | .venue-subtitle {
29 | }
30 |
--------------------------------------------------------------------------------
/src/Components/Message/Media/VoiceNote.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .voice-note-content {
9 | flex-grow: 1;
10 | flex-shrink: 1;
11 | margin-left: 9px;
12 | /*pointer-events: none;*/
13 | min-width: 200px;
14 | overflow: hidden;
15 | }
16 |
17 | .voice-note-meta {
18 | font-size: 14px;
19 | line-height: normal;
20 | user-select: none;
21 | display: flex;
22 | align-items: center;
23 | color: var(--message-in-subtle-color);
24 | }
25 |
26 | .voice-note-meta-unread {
27 | margin-left: 6px;
28 | margin-top: 2px;
29 | background: currentColor;
30 | width: 6px;
31 | height: 6px;
32 | border-radius: 50%;
33 | }
34 |
35 | .message-out .voice-note-meta {
36 | color: var(--message-out-subtle-color);
37 | }
38 |
--------------------------------------------------------------------------------
/src/Components/Message/MessageContext.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import { getDisplayName } from '../../Utils/HOC';
10 |
11 | const MessageContext = React.createContext({
12 | chatId: 0,
13 | messageId: 0
14 | });
15 |
16 | export default MessageContext;
17 |
18 | export function withMessage(Component) {
19 | class MessageComponent extends React.Component {
20 | render() {
21 | return {value => };
22 | }
23 | }
24 | MessageComponent.displayName = `WithMessage(${getDisplayName(Component)})`;
25 |
26 | return MessageComponent;
27 | }
--------------------------------------------------------------------------------
/src/Components/Message/MessageGroup.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .group-content {
9 | border: 0px solid red;
10 | margin: 10px;
11 | flex-grow: 1;
12 | }
13 |
14 | .group-sender {
15 | width: 48px;
16 | margin-top: 18px;
17 | margin-bottom: 18px;
18 | }
19 |
20 | .group-wrapper {
21 | display: flex;
22 | padding: 0 15px;
23 | max-width: 560px;
24 | margin: 0 auto;
25 | }
26 |
27 | .group-tile {
28 | width: 48px;
29 | height: 48px;
30 | position: sticky;
31 | top: 18px;
32 | }
33 |
--------------------------------------------------------------------------------
/src/Components/Message/MessageMenu.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Message/Status.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .status {
9 | margin: 0 1px;
10 | font-size: inherit;
11 | }
12 |
--------------------------------------------------------------------------------
/src/Components/Message/StubMessage.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .stub-message {
9 | width: 300px;
10 | /*min-height: 150px;*/
11 | margin: 5px;
12 | overflow: hidden;
13 | background: #6ac9cc;
14 | }
--------------------------------------------------------------------------------
/src/Components/Message/StubMessage.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import './StubMessage.css';
11 |
12 | class StubMessage extends React.Component {
13 |
14 | render() {
15 |
16 | return (
17 |
18 | {this.props.children}
19 |
20 | );
21 | }
22 |
23 | }
24 |
25 | StubMessage.propTypes = {};
26 |
27 | export default StubMessage;
--------------------------------------------------------------------------------
/src/Components/Message/UnreadSeparator.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .unread-separator {
9 | user-select: none;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | color: var(--message-service-color);
14 | background: var(--message-service-background);
15 | min-height: 24px;
16 | font-size: 15px;
17 | line-height: normal;
18 | padding: 0 12px;
19 | }
20 |
--------------------------------------------------------------------------------
/src/Components/Message/UnreadSeparator.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import { withTranslation } from 'react-i18next';
10 | import './UnreadSeparator.css';
11 |
12 | function UnreadSeparator(props) {
13 | const { t } = props;
14 |
15 | return {t('UnreadMessages')}
;
16 | }
17 |
18 | export default withTranslation()(UnreadSeparator);
19 |
--------------------------------------------------------------------------------
/src/Components/NativeAppPage.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import Footer from './Footer';
10 | import NativeApp from './Additional/NativeApp';
11 |
12 | class NativeAppPage extends React.Component {
13 | render() {
14 | return (
15 | <>
16 |
17 |
23 |
24 |
25 |
26 | >
27 | );
28 | }
29 | }
30 |
31 | export default NativeAppPage;
32 |
--------------------------------------------------------------------------------
/src/Components/Player/Hint.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .player-hint {
9 | color: white;
10 | }
11 |
12 | @keyframes player-hint-animation {
13 | 0% { opacity: 1; }
14 | 100% { opacity: 0; }
15 | }
16 |
17 | .player-hint-animated {
18 | animation: 1s ease-out 1s both player-hint-animation;
19 | }
--------------------------------------------------------------------------------
/src/Components/Player/Playlist.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .playlist {
9 | position: relative;
10 | top: 21px;
11 | box-sizing: border-box;
12 | /*z-index: 2;*/
13 | }
14 |
15 | .playlist-wrapper {
16 | border: 1px solid var(--border);
17 | background: var(--panel-background);
18 | position: absolute;
19 | }
20 |
21 | .playlist-items {
22 | width: 300px;
23 | max-height: 330px;
24 | padding: 0 12px;
25 | overflow-x: hidden;
26 | overflow-y: auto;
27 | -webkit-overflow-scrolling: touch;
28 | box-sizing: border-box;
29 | }
30 |
31 | .playlist-item {
32 | padding: 6px 0;
33 | }
34 |
--------------------------------------------------------------------------------
/src/Components/Player/Progress.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .player-progress {
9 | position: absolute;
10 | margin: auto;
11 | left: 0;
12 | top: 0;
13 | right: 0;
14 | bottom: 0;
15 | width: 54px;
16 | height: 54px;
17 | border-radius: 50%;
18 | background: rgba(0, 0, 0, 0.4);
19 | pointer-events: none;
20 | }
21 |
22 | .player-progress::after{
23 | content: '';
24 | position: absolute;
25 | width: 13px;
26 | height: 13px;
27 | background-color: rgb(255, 255, 255);
28 | left: 50%;
29 | top: 50%;
30 | transform: translate3d(-50%, -50%, 0px);
31 | border-radius: 2px;
32 | }
33 |
34 | @keyframes player-spin { 100% { transform: rotate(360deg); } }
35 |
36 | .player-progress svg {
37 | animation: player-spin 3s linear infinite;
38 | }
--------------------------------------------------------------------------------
/src/Components/Player/Steaming/MP3/ID3v1/ID3v1Parser.js:
--------------------------------------------------------------------------------
1 | import {ID3v1Header} from './ID3v1Token';
2 | import {Id3v1StringType} from '../../Utils/Token';
3 |
4 | export class ID3v1Parser {
5 | parse(buffer) {
6 | if (buffer.length < 128) {
7 | console.log('[ID3v1Parser] Skip checking for ID3v1 because the file-size is less than 128 bytes');
8 | return null;
9 | }
10 |
11 | return ID3v1Header.get(buffer, buffer.length - ID3v1Header.len);
12 | }
13 | }
14 |
15 | export function hasID3v1Header(buffer) {
16 | if (buffer.length >= 128) {
17 | const tag = Id3v1StringType.get(buffer, buffer.length - 128, 3);
18 | return tag === 'TAG';
19 | }
20 | return false;
21 | }
--------------------------------------------------------------------------------
/src/Components/Player/Time.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .header-player-time {
9 | background: transparent;
10 | cursor: pointer;
11 | user-select: none;
12 | padding: 4px 12px;
13 | }
--------------------------------------------------------------------------------
/src/Components/Player/VolumeButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .volume-button-panel {
9 | margin-top: 7px;
10 | border: 1px solid var(--border);
11 | background: var(--panel-background);
12 | display: flex;
13 | height: 100px;
14 | width: 28px;
15 | padding: 13px 0;
16 | }
17 |
--------------------------------------------------------------------------------
/src/Components/Popup/AlertDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .alert-dialog {
9 | min-width: 256px;
10 | }
--------------------------------------------------------------------------------
/src/Components/Popup/BlockSenderDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .block-sender-params {
9 | display: flex;
10 | flex-direction: column;
11 | }
--------------------------------------------------------------------------------
/src/Components/Popup/ChatInfoDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .chat-info-dialog-content {
9 | width: 336px;
10 | }
11 |
12 | .chat-info-dialog-root {
13 | align-items: start;
14 | }
15 |
16 | .chat-info-dialog-container {
17 | color: var(--text-primary);
18 | z-index: var(--z-index-modal);
19 | }
20 |
21 | .chat-info-dialog-paper {
22 | width: 336px;
23 | align-self: flex-start;
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/Popup/DeleteMessagesDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/EditUrlDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Popup/InputPasswordDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .input-password-dialog-content {
9 | display: flex;
10 | flex-direction: row;
11 | }
--------------------------------------------------------------------------------
/src/Components/Popup/LeaveVoiceChatDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/OpenGameDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/OpenUrlDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/PasteFilesDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Popup/PinMessageDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/PollOptionResult.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Popup/PollOptionResults.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | .poll-option-results-caption {
8 | position: sticky;
9 | top: 0;
10 | padding: 12px;
11 | color: var(--text-secondary);
12 | background: var(--background-paper);
13 | display: flex;
14 | flex-direction: row;
15 | z-index: 2;
16 | font-size: 14px;
17 | line-height: normal;
18 | }
19 |
20 | .poll-option-results-answer {
21 | flex-grow: 1;
22 | flex-shrink: 1;
23 | }
24 |
25 | .poll-option-results-count {
26 | margin-left: 9px;
27 | flex-grow: 0;
28 | flex-shrink: 0;
29 | }
30 |
31 | .poll-option-results-button {
32 | border-radius: 0;
33 | padding: 12px 8px;
34 | margin: 0 -8px;
35 | width: calc(100% + 16px);
36 | }
37 |
--------------------------------------------------------------------------------
/src/Components/Popup/PollResultsDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .poll-results-content {
9 | padding: 0 8px 8px;
10 | }
11 |
12 | .poll-results-question {
13 | margin: 0 12px;
14 | font-size: 20px;
15 | line-height: normal;
16 | }
17 |
--------------------------------------------------------------------------------
/src/Components/Popup/ReportChatDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .report-chat-dialog-content {
9 | min-width: 300px;
10 | padding: 0 8px;
11 | }
12 |
13 | .report-chat-dialog-item {
14 | border-radius: 10px;
15 | }
--------------------------------------------------------------------------------
/src/Components/Popup/RequestUrlDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/SidebarDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/UnpinMessageDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Popup/UpdateDraftDialog.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Tile/Archive.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .archive-tile-background {
9 | background: var(--badge-muted);
10 | }
11 |
--------------------------------------------------------------------------------
/src/Components/Tile/Chat.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .chat {
9 | width: 100%;
10 | height: 100%;
11 | }
12 |
13 | .chat-wrapper {
14 | display: flex;
15 | align-items: center;
16 | user-select: none;
17 | }
18 |
19 | .chat-big .chat-wrapper {
20 | flex-direction: column;
21 | }
22 |
23 | .chat-inner-wrapper {
24 | margin-left: 12px;
25 | overflow: hidden;
26 | flex-grow: 1;
27 | z-index: 1;
28 | }
29 |
--------------------------------------------------------------------------------
/src/Components/Tile/ChatChip.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Tile/ChatStatus.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Tile/ChatStatus.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 |
11 | class ChatStatus extends React.Component {
12 | render() {
13 | return null;
14 | }
15 | }
16 |
17 | ChatStatus.propTypes = {};
18 |
19 | export default ChatStatus;
20 |
--------------------------------------------------------------------------------
/src/Components/Tile/Chip.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Tile/DialogContent.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .dialog-content {
9 | word-wrap: break-word;
10 | white-space: nowrap;
11 | overflow: hidden;
12 | text-overflow: ellipsis;
13 | flex-grow: 1;
14 | color: var(--dialog-subtle-color);
15 | }
16 |
17 | .dialog-content-accent {
18 | color: var(--dialog-color);
19 | }
20 |
21 | .dialog.item-selected .dialog-content,
22 | .dialog.item-selected .dialog-content-accent,
23 | .dialog.item-selected .dialog-content-draft,
24 | .dialog.item-selected .dialog-badge-pinned {
25 | /*color: #fff;*/
26 | }
27 |
28 | .dialog-content-draft {
29 | color: #c05f5a;
30 | }
31 |
--------------------------------------------------------------------------------
/src/Components/Tile/DialogMeta.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .dialog-meta {
9 | font-size: 12px;
10 | white-space: nowrap;
11 | margin: 1px 0 -1px 6px;
12 | color: var(--dialog-meta-color);
13 | }
14 |
15 | .dialog-meta .status {
16 | color: var(--dialog-meta-read-color);
17 | }
18 |
--------------------------------------------------------------------------------
/src/Components/Tile/DialogStatus.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .dialog-status {
9 | word-wrap: break-word;
10 | white-space: nowrap;
11 | overflow: hidden;
12 | text-overflow: ellipsis;
13 | flex-grow: 1;
14 | font-size: 14px;
15 | color: var(--dialog-subtle-color);
16 | }
17 |
18 | .dialog-status-accent {
19 | color: var(--color-accent-dark);
20 | }
21 |
--------------------------------------------------------------------------------
/src/Components/Tile/DialogTitle.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .dialog-title {
9 | word-wrap: break-word;
10 | white-space: nowrap;
11 | overflow: hidden;
12 | text-overflow: ellipsis;
13 | flex-grow: 1;
14 | display: flex;
15 | align-items: center;
16 | color: var(--dialog-color);
17 | }
18 |
19 | .chat-big .dialog-title {
20 | font-size: 24px;
21 | line-height: normal;
22 | }
23 |
24 | .dialog-title-span {
25 | word-wrap: break-word;
26 | white-space: nowrap;
27 | overflow: hidden;
28 | text-overflow: ellipsis;
29 | }
30 |
31 | .dialog-title-icon {
32 | height: 16px;
33 | color: var(--color-accent-main);
34 | }
35 |
--------------------------------------------------------------------------------
/src/Components/Tile/EmptyTile.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Tile/EmptyTile.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import PropTypes from 'prop-types';
10 | import classNames from 'classnames';
11 | import './EmptyTile.css';
12 |
13 | function EmptyTile(props) {
14 | const { dialog, small, big, style } = props;
15 |
16 | return (
17 |
25 | );
26 | }
27 |
28 | EmptyTile.propTypes = {};
29 |
30 | export default EmptyTile;
--------------------------------------------------------------------------------
/src/Components/Tile/Filter.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .settings-filter {
9 | padding: 3px 4px;
10 | width: 100%;
11 | height: 100%;
12 | }
13 |
14 | .settings-filter-subtitle {
15 | color: var(--text-secondary);
16 | margin-top: 1px;
17 | font-size: 14px;
18 | line-height: normal;
19 | overflow: hidden;
20 | text-overflow: ellipsis;
21 | white-space: nowrap;
22 | }
--------------------------------------------------------------------------------
/src/Components/Tile/FilterChat.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .filter-chat-tile {
9 | margin-right: 28px;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | min-width: 33px;
14 | min-height: 33px;
15 | }
16 |
17 | .filter-chat-content {
18 | flex-grow: 1;
19 | flex-shrink: 1;
20 | overflow: hidden;
21 | }
22 |
23 | .filter-chat-title {
24 | overflow: hidden;
25 | white-space: nowrap;
26 | text-overflow: ellipsis;
27 | }
28 |
29 | .filter-chat-subtitle {
30 | color: var(--text-secondary);
31 | font-size: 14px;
32 | line-height: normal;
33 | }
34 |
35 | .filter-chat-checkbox {
36 |
37 | }
--------------------------------------------------------------------------------
/src/Components/Tile/FilterText.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .filter-chat-text {
9 | display: flex;
10 | flex-direction: row;
11 | }
12 |
13 | .filter-text-subtle-icon {
14 | color: var(--header-subtle-color);
15 | }
--------------------------------------------------------------------------------
/src/Components/Tile/FoundMessage.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .found-message {
9 | box-sizing: border-box;
10 | padding: 0;
11 | border-radius: 10px;
12 | margin-bottom: 4px;
13 | }
14 |
15 | .found-message.item-selected .dialog-wrapper {
16 | background: var(--color-hover);
17 | border-radius: 10px;
18 | }
19 |
--------------------------------------------------------------------------------
/src/Components/Tile/FoundPublicChat.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | .found-public-chat {
8 | padding: 0;
9 | box-sizing: border-box;
10 | border-radius: 10px;
11 | margin-bottom: 4px;
12 | }
13 |
14 | .found-public-chat-wrapper {
15 | box-sizing: border-box;
16 | padding: 12px;
17 | width: 100%;
18 | height: 100%;
19 | border-radius: 10px;
20 | }
21 |
22 | .item-selected .found-public-chat-wrapper {
23 | background: var(--color-hover);
24 | color: #fff;
25 | }
26 |
--------------------------------------------------------------------------------
/src/Components/Tile/HeaderChat.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .header-chat {
9 | margin-left: 12px;
10 | display: flex;
11 | flex-direction: row;
12 | align-items: center;
13 | overflow: hidden;
14 | }
15 |
16 | .header-chat-content {
17 | margin-left: 16px;
18 | overflow: hidden;
19 | user-select: none;
20 | }
21 |
--------------------------------------------------------------------------------
/src/Components/Tile/HeaderChatSubtitle.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .header-chat-subtitle {
9 | font-size: 14px;
10 | line-height: 19px;
11 | color: var(--header-subtle-color);
12 | overflow: hidden;
13 | text-overflow: ellipsis;
14 | white-space: nowrap;
15 | }
16 |
17 | .header-chat-subtitle-accent {
18 | color: var(--color-accent-dark);
19 | }
20 |
--------------------------------------------------------------------------------
/src/Components/Tile/MediaInfo.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .media-info {
9 | min-width: 256px;
10 | opacity: 0.5;
11 | }
12 |
13 | .media-info-wrapper {
14 | padding: 8px 20px;
15 | display: flex;
16 | flex-direction: row;
17 | align-items: center;
18 | }
19 |
20 | .media-info-content {
21 | margin-left: 12px;
22 | flex-grow: 1;
23 | flex-shrink: 1;
24 | }
25 |
26 | .media-info-row {
27 | overflow: hidden;
28 | }
29 |
--------------------------------------------------------------------------------
/src/Components/Tile/OnlineStatus.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .user-status {
9 | width: 8px;
10 | height: 8px;
11 | background: var(--online-indicator);
12 | border-radius: 50%;
13 | border: 2px solid;
14 | }
15 |
16 | .user-status-inner {
17 | width: 4px;
18 | height: 4px;
19 | padding: 2px;
20 | }
21 |
22 | .online-status {
23 | border-radius: 50%;
24 | overflow: hidden;
25 | background: var(--panel-background);
26 | position: absolute;
27 | right: 1px;
28 | bottom: 1px;
29 | }
30 |
31 | .online-status-icon {
32 | background: transparent;
33 | width: 100%;
34 | height: 100%;
35 | box-sizing: border-box;
36 | }
37 |
38 | .online-status-indicator {
39 | width: 100%;
40 | height: 100%;
41 | border-radius: 50%;
42 | background: var(--online-indicator);
43 | }
44 |
--------------------------------------------------------------------------------
/src/Components/Tile/RecentlyFoundChat.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .recently-found-chat {
9 | padding: 12px;
10 | box-sizing: border-box;
11 | border-radius: 10px;
12 | margin-bottom: 4px;
13 | }
14 |
15 | .recently-found-chat-content {
16 | width: 100%;
17 | height: 100%;
18 | padding: 12px;
19 | box-sizing: border-box;
20 | }
21 |
--------------------------------------------------------------------------------
/src/Components/Tile/RecommendedFilter.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .recommended-filter-add {
9 | color: white;
10 | border-radius: 15px;
11 | text-transform: none;
12 | padding: 5px 12px 6px;
13 | font-size: 14px;
14 | line-height: normal;
15 | min-width: 0;
16 | }
17 |
--------------------------------------------------------------------------------
/src/Components/Tile/ReplyTile.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .reply-tile {
9 | margin-left: 4px;
10 | width: 32px;
11 | height: 32px;
12 | min-height: 32px;
13 | min-width: 32px;
14 | border-radius: 5px;
15 | overflow: hidden;
16 | position: relative;
17 | }
18 |
19 | .reply-tile-photo {
20 | user-select: none;
21 | display: block;
22 | object-fit: cover;
23 | object-position: center;
24 | border-radius: 5px;
25 | position: absolute;
26 | left: 0;
27 | top: 0;
28 | width: 100%;
29 | height: 100%;
30 | }
31 |
32 | .reply-tile-photo-round {
33 | border-radius: 50%;
34 | }
--------------------------------------------------------------------------------
/src/Components/Tile/SharedMedia/ContextMenu.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Tile/SharedMedia/SharedAudio.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Tile/SharedMedia/SharedDocument.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .shared-document {
9 | position: relative;
10 | background: transparent;
11 | padding: 10px 12px;
12 | }
13 |
14 | .shared-document .document {
15 | max-width: unset;
16 | min-width: unset;
17 | margin: 0;
18 | }
19 |
20 | .shared-document .audio-content {
21 | min-width: unset;
22 | }
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/Components/Tile/SharedMedia/SharedLinkTile.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .shared-link-tile {
9 | text-align: center;
10 | text-transform: uppercase;
11 | color: #ffffff;
12 | line-height: 48px;
13 | font-size: 19px;
14 | /*margin-left: 4px;*/
15 | width: 48px;
16 | height: 48px;
17 | min-height: 48px;
18 | min-width: 48px;
19 | border-radius: 5px;
20 | overflow: hidden;
21 | }
22 |
23 | .shared-link-tile-photo {
24 | user-select: none;
25 | display: block;
26 | width: 100%;
27 | height: 100%;
28 | object-fit: cover;
29 | object-position: center;
30 | border-radius: 5px;
31 | }
32 |
33 | .shared-link-tile-photo-round {
34 | border-radius: 50%;
35 | }
--------------------------------------------------------------------------------
/src/Components/Tile/SharedMedia/SharedVideo.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .shared-video-meta {
9 | position: absolute;
10 | left: 12px;
11 | bottom: 12px;
12 | border-radius: 13px;
13 | padding: 0 5px;
14 | background: rgba(0, 0, 0, 0.5);
15 | font-size: 13px;
16 | line-height: normal;
17 | user-select: none;
18 | color: #ffffff;
19 | }
20 |
21 | .shared-video-wrapper {
22 | overflow: hidden;
23 | flex-grow: 1;
24 | }
25 |
26 | .shared-video-content {
27 | height: 100%;
28 | background-color: black;
29 | background-size: cover;
30 | background-position: 50%;
31 | }
32 |
--------------------------------------------------------------------------------
/src/Components/Tile/SharedMedia/SharedVoiceNote.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .shared-voice-note {
9 | position: relative;
10 | background: transparent;
11 | padding: 12px;
12 | display: flex;
13 | flex-direction: row;
14 | overflow: hidden;
15 | }
16 |
17 | .shared-voice-note .voice-note-content {
18 | min-width: unset;
19 | }
20 |
--------------------------------------------------------------------------------
/src/Components/Tile/TopChat.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .top-chat {
9 | padding: 12px 12px 8px;
10 | box-sizing: border-box;
11 | max-width: 72px;
12 | display: flex;
13 | flex-direction: column;
14 | border-radius: 10px;
15 | margin-right: 5px;
16 | }
17 |
18 | .top-chat:hover .online-status-icon,
19 | .top-chat:hover .group-call-status-icon {
20 | background: var(--color-hover);
21 | }
22 |
23 | .top-chat-title {
24 | text-align: center;
25 | overflow: hidden;
26 | text-overflow: ellipsis;
27 | white-space: nowrap;
28 | margin: 8px -12px 2px;
29 | font-size: 12px;
30 | line-height: normal;
31 | user-select: none;
32 | }
33 |
--------------------------------------------------------------------------------
/src/Components/Tile/User.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | /*.user:hover{*/
9 | /*background: #f2f6fa;*/
10 | /*}*/
11 |
12 | .user {
13 | width: 100%;
14 | height: 100%;
15 | overflow: hidden;
16 | }
17 |
18 | .user-wrapper {
19 | display: flex;
20 | align-items: center;
21 | user-select: none;
22 | }
23 |
24 | .user-inner-wrapper {
25 | overflow: hidden;
26 | flex-grow: 1;
27 | margin-left: 12px;
28 | z-index: 1;
29 | }
30 |
31 | .user-placeholder-tile {
32 | width: var(--tile-size-normal);
33 | height: var(--tile-size-normal);
34 | border-radius: 50%;
35 | flex-shrink: 0;
36 | background: var(--dialog-subtle-color);
37 | }
38 |
39 | .user-list-item {
40 | padding: 12px;
41 | border-radius: 10px;
42 | }
43 |
44 | .user-list-item-checkbox {
45 | margin: 0 15px 0 -5px;
46 | }
--------------------------------------------------------------------------------
/src/Components/Tile/UserPlaceholder.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .user-placeholder {
9 | opacity: 0.2;
10 | will-change: opacity;
11 | animation: dialog-placeholder-animation 2s ease-in-out infinite;
12 | width: 100%;
13 | height: 100%;
14 | }
15 |
16 | .user-placeholder-inner-wrapper {
17 | flex-grow: 1;
18 | margin-left: 12px;
19 | }
20 |
--------------------------------------------------------------------------------
/src/Components/Tile/UserStatus.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .user-content {
9 | font-size: 14px;
10 | line-height: normal;
11 | }
12 |
13 | .user-status-accent {
14 | color: var(--color-accent-dark);
15 | }
16 |
--------------------------------------------------------------------------------
/src/Components/Tile/UserTitle.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .user-title {
9 | word-wrap: break-word;
10 | white-space: nowrap;
11 | overflow: hidden;
12 | text-overflow: ellipsis;
13 | flex-grow: 1;
14 | align-items: center;
15 | color: var(--dialog-color);
16 | }
--------------------------------------------------------------------------------
/src/Components/Tile/VoiceNoteTile.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Tile/Wallpaper.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .wallpaper {
9 | overflow: hidden;
10 | width: 100px;
11 | height: 100px;
12 | margin: 6px;
13 | background: aliceblue;
14 | }
15 |
16 | .wallpaper-photo {
17 | width: 100%;
18 | }
19 |
20 | .wallpaper-selected {
21 | position: absolute;
22 | top: 2px;
23 | right: 2px;
24 | bottom: 2px;
25 | left: 2px;
26 | border: 3px solid var(--color-accent-main);
27 | }
28 |
29 | .wallpaper-selected-inner {
30 | position: absolute;
31 | top: 5px;
32 | right: 5px;
33 | bottom: 5px;
34 | left: 5px;
35 | border: 3px solid white;
36 | }
--------------------------------------------------------------------------------
/src/Components/Viewer/InstantViewMediaViewer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .instant-view-media-viewer {
9 | z-index: 10;
10 | position: fixed;
11 | top: 0;
12 | right: 0;
13 | bottom: 0;
14 | left: 0;
15 | background: rgba(26, 26, 26, 0.7);
16 | display: flex;
17 | flex-direction: column;
18 | }
19 |
--------------------------------------------------------------------------------
/src/Components/Viewer/MediaViewerButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .media-viewer-button {
9 | cursor: pointer;
10 | display: flex;
11 | align-items: center;
12 | justify-content: center;
13 | opacity: 0.5;
14 | padding: 20px;
15 | }
16 |
17 | .media-viewer-button-disabled {
18 | cursor: default;
19 | display: flex;
20 | align-items: center;
21 | justify-content: center;
22 | opacity: 0.15;
23 | padding: 20px;
24 | }
25 |
26 | .media-viewer-button:hover {
27 | opacity: 1;
28 | background: rgba(0, 0, 0, 0.2);
29 | }
30 |
--------------------------------------------------------------------------------
/src/Components/Viewer/MediaViewerFooterButton.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .media-viewer-footer-button {
9 | cursor: pointer;
10 | opacity: 0.5;
11 | padding: 20px;
12 | }
13 |
14 | .media-viewer-footer-button-checked {
15 | color: var(--color-accent-main);
16 | }
17 |
18 | .media-viewer-footer-button-disabled {
19 | cursor: default;
20 | opacity: 0.25;
21 | }
22 |
23 | .media-viewer-footer-button:hover:not(.media-viewer-footer-button-disabled) {
24 | opacity: 1;
25 | background: rgba(0, 0, 0, 0.2);
26 | }
27 |
--------------------------------------------------------------------------------
/src/Components/Viewer/MediaViewerFooterText.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .media-viewer-footer-text-wrapper {
9 | opacity: 0.5;
10 | overflow: hidden;
11 | text-overflow: ellipsis;
12 | white-space: nowrap;
13 | }
14 |
15 | .media-viewer-footer-text {
16 | flex-grow: 1;
17 | flex-shrink: 1;
18 | display: flex;
19 | align-items: center;
20 | justify-content: center;
21 | pointer-events: none;
22 | user-select: none;
23 | overflow: hidden;
24 | }
25 |
--------------------------------------------------------------------------------
/src/Components/Viewer/ProfileMediaViewer.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 |
--------------------------------------------------------------------------------
/src/Components/Viewer/ProfileMediaViewerContent.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
--------------------------------------------------------------------------------
/src/Components/Viewer/RLottie.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | .lottie-svg {
9 | pointer-events: none;
10 | }
11 |
--------------------------------------------------------------------------------
/src/Language.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import { I18nextProvider } from 'react-i18next';
10 | import { getDisplayName } from './Utils/HOC';
11 | import LocalizationStore from './Stores/LocalizationStore';
12 |
13 | function withLanguage(WrappedComponent) {
14 | class LanguageWrapper extends React.Component {
15 | render() {
16 | const i18n = LocalizationStore.i18n;
17 |
18 | return (
19 |
20 |
21 |
22 | );
23 | }
24 | }
25 | LanguageWrapper.displayName = `WithLanguage(${getDisplayName(WrappedComponent)})`;
26 |
27 | return LanguageWrapper;
28 | }
29 |
30 | export default withLanguage;
31 |
--------------------------------------------------------------------------------
/src/Notifications.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 | import { SnackbarProvider } from 'notistack';
10 | import { getDisplayName } from './Utils/HOC';
11 | import { MAX_SNACK } from './Constants';
12 |
13 | function withSnackbarNotifications(WrappedComponent) {
14 | class NotificationsWrapper extends React.Component {
15 | render() {
16 | return (
17 |
18 |
19 |
20 | );
21 | }
22 | }
23 | NotificationsWrapper.displayName = `WithSnackbarNotifications(${getDisplayName(WrappedComponent)})`;
24 |
25 | return NotificationsWrapper;
26 | }
27 |
28 | export default withSnackbarNotifications;
29 |
--------------------------------------------------------------------------------
/src/Utils/Component.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | export function focusNode(node, toEnd = false) {
8 | if (!node) return;
9 |
10 | if (toEnd && node.childNodes && node.childNodes.length > 0) {
11 | const lastNode = node.childNodes[node.childNodes.length - 1];
12 | const range = document.createRange();
13 | range.setStart(lastNode, lastNode.length);
14 | range.collapse(true);
15 |
16 | const selection = window.getSelection();
17 | selection.removeAllRanges();
18 | selection.addRange(range);
19 |
20 | node.scrollTop = node.scrollHeight;
21 | }
22 |
23 | node.focus();
24 | }
25 |
--------------------------------------------------------------------------------
/src/Utils/HOC.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | import React from 'react';
9 |
10 | export function compose(...funcs) {
11 | return funcs.reduce((a, b) => (...args) => a(b(...args)), arg => arg);
12 | }
13 |
14 | export function withSaveRef() {
15 | return Component => {
16 | return React.forwardRef((props, ref) => );
17 | };
18 | }
19 |
20 | export function withRestoreRef() {
21 | return Component => {
22 | return class extends React.Component {
23 | render() {
24 | const { forwardedRef, ...rest } = this.props;
25 |
26 | return ;
27 | }
28 | };
29 | };
30 | }
31 |
32 | export function getDisplayName(WrappedComponent) {
33 | return WrappedComponent.displayName || WrappedComponent.name || 'Component';
34 | }
35 |
--------------------------------------------------------------------------------
/src/Utils/Modal.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 | import ModalManager from '@material-ui/core/Modal/ModalManager';
8 |
9 | const modalManager = new ModalManager();
10 |
11 | export { modalManager };
--------------------------------------------------------------------------------
/src/Workers/CacheManager.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | class CacheManager {
9 | async load(key) {
10 | const value = localStorage.getItem(key);
11 | if (!value) return null;
12 |
13 | try {
14 | return JSON.parse(value);
15 | } catch {
16 | return null;
17 | }
18 | }
19 |
20 | async save(key, value) {
21 | localStorage.setItem(key, JSON.stringify(value));
22 | }
23 |
24 | async remove(key) {
25 | localStorage.removeItem(key);
26 | }
27 |
28 | async clear() {
29 | localStorage.clear();
30 | }
31 | }
32 |
33 | const manager = new CacheManager();
34 | export default manager;
35 |
--------------------------------------------------------------------------------
/src/Workers/Helpers.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | export function randomString() {
9 | return (
10 | '$' +
11 | Math.random()
12 | .toString(36)
13 | .slice(2, 10)
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/Workers/pako.worker.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2018-present, Evgeny Nadymov
3 | *
4 | * This source code is licensed under the GPL v.3.0 license found in the
5 | * LICENSE file in the root directory of this source tree.
6 | */
7 |
8 | // /* eslint-disable */
9 | // import pako from 'pako';
10 | //
11 | // self.addEventListener('message', ({ data: { key, blob } }) => {
12 | // const reader = new FileReader();
13 | // reader.onload = async e => {
14 | // try {
15 | // const result = pako.inflate(e.target.result, { to: 'string' });
16 | // postMessage({ key, result });
17 | // } catch (err) {
18 | // postMessage({ key, error: true, msg: err.toString() });
19 | // }
20 | // };
21 | // reader.readAsArrayBuffer(blob);
22 | // });
23 |
--------------------------------------------------------------------------------