├── .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 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | 5 | 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 |
20 | 26 |
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 |
20 | 21 | 22 | 23 |
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 |
18 | 19 |
20 |