├── .dockerignore ├── .eslintrc.js ├── .github └── workflows │ └── pubulish-electron.yml ├── .gitignore ├── .yarnrc ├── Dockerfile ├── Makefile ├── README.md ├── apps └── web │ ├── config-overrides.js │ ├── electron-builder.js │ ├── package.json │ ├── public │ ├── audio │ │ ├── call.aac │ │ ├── hangup.wav │ │ └── receive.mp3 │ ├── emoji │ │ ├── 0_0.png │ │ ├── 0_1.png │ │ ├── 0_10.png │ │ ├── 0_100.png │ │ ├── 0_101.png │ │ ├── 0_102.png │ │ ├── 0_103.png │ │ ├── 0_104.png │ │ ├── 0_105.png │ │ ├── 0_106.png │ │ ├── 0_107.png │ │ ├── 0_108.png │ │ ├── 0_109.png │ │ ├── 0_11.png │ │ ├── 0_110.png │ │ ├── 0_111.png │ │ ├── 0_112.png │ │ ├── 0_113.png │ │ ├── 0_114.png │ │ ├── 0_115.png │ │ ├── 0_116.png │ │ ├── 0_117.png │ │ ├── 0_118.png │ │ ├── 0_119.png │ │ ├── 0_12.png │ │ ├── 0_120.png │ │ ├── 0_121.png │ │ ├── 0_122.png │ │ ├── 0_123.png │ │ ├── 0_124.png │ │ ├── 0_125.png │ │ ├── 0_126.png │ │ ├── 0_127.png │ │ ├── 0_128.png │ │ ├── 0_129.png │ │ ├── 0_13.png │ │ ├── 0_130.png │ │ ├── 0_131.png │ │ ├── 0_132.png │ │ ├── 0_133.png │ │ ├── 0_134.png │ │ ├── 0_135.png │ │ ├── 0_136.png │ │ ├── 0_137.png │ │ ├── 0_138.png │ │ ├── 0_139.png │ │ ├── 0_14.png │ │ ├── 0_140.png │ │ ├── 0_141.png │ │ ├── 0_142.png │ │ ├── 0_143.png │ │ ├── 0_144.png │ │ ├── 0_145.png │ │ ├── 0_146.png │ │ ├── 0_147.png │ │ ├── 0_148.png │ │ ├── 0_149.png │ │ ├── 0_15.png │ │ ├── 0_150.png │ │ ├── 0_151.png │ │ ├── 0_16.png │ │ ├── 0_17.png │ │ ├── 0_18.png │ │ ├── 0_19.png │ │ ├── 0_2.png │ │ ├── 0_20.png │ │ ├── 0_21.png │ │ ├── 0_22.png │ │ ├── 0_23.png │ │ ├── 0_24.png │ │ ├── 0_25.png │ │ ├── 0_26.png │ │ ├── 0_27.png │ │ ├── 0_28.png │ │ ├── 0_29.png │ │ ├── 0_3.png │ │ ├── 0_30.png │ │ ├── 0_31.png │ │ ├── 0_32.png │ │ ├── 0_33.png │ │ ├── 0_34.png │ │ ├── 0_35.png │ │ ├── 0_36.png │ │ ├── 0_37.png │ │ ├── 0_38.png │ │ ├── 0_39.png │ │ ├── 0_4.png │ │ ├── 0_40.png │ │ ├── 0_41.png │ │ ├── 0_42.png │ │ ├── 0_43.png │ │ ├── 0_44.png │ │ ├── 0_45.png │ │ ├── 0_46.png │ │ ├── 0_47.png │ │ ├── 0_48.png │ │ ├── 0_49.png │ │ ├── 0_5.png │ │ ├── 0_50.png │ │ ├── 0_51.png │ │ ├── 0_52.png │ │ ├── 0_53.png │ │ ├── 0_54.png │ │ ├── 0_55.png │ │ ├── 0_56.png │ │ ├── 0_57.png │ │ ├── 0_58.png │ │ ├── 0_59.png │ │ ├── 0_6.png │ │ ├── 0_60.png │ │ ├── 0_61.png │ │ ├── 0_62.png │ │ ├── 0_63.png │ │ ├── 0_64.png │ │ ├── 0_65.png │ │ ├── 0_66.png │ │ ├── 0_67.png │ │ ├── 0_68.png │ │ ├── 0_69.png │ │ ├── 0_7.png │ │ ├── 0_70.png │ │ ├── 0_71.png │ │ ├── 0_72.png │ │ ├── 0_73.png │ │ ├── 0_74.png │ │ ├── 0_75.png │ │ ├── 0_76.png │ │ ├── 0_77.png │ │ ├── 0_78.png │ │ ├── 0_79.png │ │ ├── 0_8.png │ │ ├── 0_80.png │ │ ├── 0_81.png │ │ ├── 0_82.png │ │ ├── 0_83.png │ │ ├── 0_84.png │ │ ├── 0_85.png │ │ ├── 0_86.png │ │ ├── 0_87.png │ │ ├── 0_88.png │ │ ├── 0_89.png │ │ ├── 0_9.png │ │ ├── 0_90.png │ │ ├── 0_91.png │ │ ├── 0_92.png │ │ ├── 0_93.png │ │ ├── 0_94.png │ │ ├── 0_95.png │ │ ├── 0_96.png │ │ ├── 0_97.png │ │ ├── 0_98.png │ │ ├── 0_99.png │ │ ├── 1_0.png │ │ ├── 1_1.png │ │ ├── 1_10.png │ │ ├── 1_11.png │ │ ├── 1_12.png │ │ ├── 1_13.png │ │ ├── 1_14.png │ │ ├── 1_15.png │ │ ├── 1_16.png │ │ ├── 1_17.png │ │ ├── 1_18.png │ │ ├── 1_19.png │ │ ├── 1_2.png │ │ ├── 1_20.png │ │ ├── 1_21.png │ │ ├── 1_22.png │ │ ├── 1_23.png │ │ ├── 1_24.png │ │ ├── 1_25.png │ │ ├── 1_26.png │ │ ├── 1_27.png │ │ ├── 1_28.png │ │ ├── 1_29.png │ │ ├── 1_3.png │ │ ├── 1_30.png │ │ ├── 1_31.png │ │ ├── 1_32.png │ │ ├── 1_33.png │ │ ├── 1_4.png │ │ ├── 1_5.png │ │ ├── 1_6.png │ │ ├── 1_7.png │ │ ├── 1_8.png │ │ ├── 1_9.png │ │ ├── 2_0.png │ │ ├── 2_1.png │ │ ├── 2_10.png │ │ ├── 2_11.png │ │ ├── 2_12.png │ │ ├── 2_13.png │ │ ├── 2_14.png │ │ ├── 2_15.png │ │ ├── 2_16.png │ │ ├── 2_17.png │ │ ├── 2_18.png │ │ ├── 2_19.png │ │ ├── 2_2.png │ │ ├── 2_20.png │ │ ├── 2_21.png │ │ ├── 2_22.png │ │ ├── 2_23.png │ │ ├── 2_24.png │ │ ├── 2_25.png │ │ ├── 2_26.png │ │ ├── 2_27.png │ │ ├── 2_28.png │ │ ├── 2_29.png │ │ ├── 2_3.png │ │ ├── 2_30.png │ │ ├── 2_31.png │ │ ├── 2_32.png │ │ ├── 2_33.png │ │ ├── 2_34.png │ │ ├── 2_35.png │ │ ├── 2_4.png │ │ ├── 2_5.png │ │ ├── 2_6.png │ │ ├── 2_7.png │ │ ├── 2_8.png │ │ └── 2_9.png │ ├── favicon.ico │ ├── identity_icon │ │ ├── official.png │ │ └── visitor.png │ ├── index.html │ ├── logo.png │ ├── manifest.json │ ├── owt-min.js │ ├── owt.js │ └── robots.txt │ ├── resources │ ├── app-update.yml │ ├── icons │ │ ├── 1024x1024.png │ │ ├── 128x128.png │ │ ├── 16x16.png │ │ ├── 24x24.png │ │ ├── 256x256.png │ │ ├── 32x32.png │ │ ├── 48x48.png │ │ ├── 512x512.png │ │ ├── 64x64.png │ │ ├── favicon.ico │ │ ├── icon.icns │ │ └── icon.ico │ ├── logo.png │ ├── mac │ │ └── entitlements.mac.plist │ └── tray │ │ ├── 128x128.png │ │ ├── 30x30.png │ │ ├── 32x32.png │ │ └── macTray@3x.png │ ├── src-election │ ├── electron-env.d.ts │ ├── main │ │ ├── confing.ts │ │ ├── index.ts │ │ ├── logo.ts │ │ ├── update.ts │ │ └── utils │ │ │ └── createWindow.ts │ └── preload │ │ └── index.ts │ ├── src-tauri │ ├── .gitignore │ ├── Cargo.lock │ ├── Cargo.toml │ ├── Info.plist │ ├── build.rs │ ├── icons │ │ ├── 128x128.png │ │ ├── 128x128@2x.png │ │ ├── 32x32.png │ │ ├── Square107x107Logo.png │ │ ├── Square142x142Logo.png │ │ ├── Square150x150Logo.png │ │ ├── Square284x284Logo.png │ │ ├── Square30x30Logo.png │ │ ├── Square310x310Logo.png │ │ ├── Square44x44Logo.png │ │ ├── Square71x71Logo.png │ │ ├── Square89x89Logo.png │ │ ├── StoreLogo.png │ │ ├── icon.ico │ │ └── icon.png │ ├── src │ │ ├── main.rs │ │ └── menu.rs │ └── tauri.conf.json │ ├── src │ ├── App │ │ ├── assets │ │ │ ├── ContactsTab.svg │ │ │ ├── ContactsTabSelected.svg │ │ │ ├── HomeTab.svg │ │ │ └── HomeTabSelected.svg │ │ ├── index.css │ │ └── index.tsx │ ├── Layout │ │ └── index.tsx │ ├── Pages │ │ └── Main │ │ │ ├── assets │ │ │ └── start_chat.svg │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── tab_low_screen.css │ │ │ ├── tab_low_screen.tsx │ │ │ ├── tab_normal_screen.css │ │ │ ├── tab_normal_screen.tsx │ │ │ └── vm.ts │ ├── index.css │ ├── index.tsx │ ├── react-app-env.d.ts │ └── reportWebVitals.ts │ ├── tsconfig.e.json │ └── tsconfig.json ├── docker-entrypoint.sh ├── docs ├── pc11.png ├── pc22.png └── pc33.png ├── nginx.conf.template ├── package.json ├── packages ├── eslint-config-custom │ ├── index.js │ └── package.json ├── tsconfig │ ├── base.json │ ├── nextjs.json │ ├── package.json │ └── react-library.json ├── tsdaodaobase │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── Components │ │ │ ├── ChannelAvatar │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── ChannelQRCode │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── vm.tsx │ │ │ ├── ChannelSetting │ │ │ │ ├── context.tsx │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── vm.ts │ │ │ ├── Checkbox │ │ │ │ ├── checked.png │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── uncheck.png │ │ │ ├── ContextMenus │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Conversation │ │ │ │ ├── assets │ │ │ │ │ ├── message_down.png │ │ │ │ │ ├── reminder_member_invite.png │ │ │ │ │ └── reminder_mention.png │ │ │ │ ├── context.ts │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── vm.ts │ │ │ ├── ConversationList │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── ConversationSelect │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── EmojiToolbar │ │ │ │ ├── emoji_tab_icon.png │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── FriendApply │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── GlobalSearch │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── item-contacts.css │ │ │ │ ├── item-contacts.tsx │ │ │ │ ├── item-file.css │ │ │ │ ├── item-file.tsx │ │ │ │ ├── item-group.css │ │ │ │ ├── item-group.tsx │ │ │ │ ├── item-message.css │ │ │ │ ├── item-message.tsx │ │ │ │ ├── section.tsx │ │ │ │ ├── tab-all.css │ │ │ │ ├── tab-all.tsx │ │ │ │ ├── tab-contacts.css │ │ │ │ ├── tab-contacts.tsx │ │ │ │ ├── tab-file.css │ │ │ │ ├── tab-file.tsx │ │ │ │ ├── tab-group.css │ │ │ │ ├── tab-group.tsx │ │ │ │ └── vm.ts │ │ │ ├── IconClick │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── IconListItem │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── ImageToolbar │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── IndexTable │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── InputEdit │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── ListItem │ │ │ │ ├── assets │ │ │ │ │ └── arrow_right.png │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── ListItemAvatar │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── MeInfo │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── vm.tsx │ │ │ ├── MergeforwardMessageList │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── MessageInput │ │ │ │ ├── defaultStyle.ts │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── mention.css │ │ │ │ └── mention.png │ │ │ ├── PopupMenus │ │ │ │ ├── icons │ │ │ │ │ ├── comment-hover.png │ │ │ │ │ ├── comment.png │ │ │ │ │ ├── copy-hover.png │ │ │ │ │ ├── copy.png │ │ │ │ │ ├── delete-hover.png │ │ │ │ │ ├── delete.png │ │ │ │ │ ├── favorites-hover.png │ │ │ │ │ ├── favorites.png │ │ │ │ │ ├── forward-hover.png │ │ │ │ │ ├── forward.png │ │ │ │ │ ├── like-hover.png │ │ │ │ │ ├── like.png │ │ │ │ │ ├── mulselect-hover.png │ │ │ │ │ ├── mulselect.png │ │ │ │ │ ├── revoke-hover.png │ │ │ │ │ └── revoke.png │ │ │ │ ├── index.tsx │ │ │ │ └── style.module.css │ │ │ ├── QRCodeMy │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── RoutePage │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Search │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Sections │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── SexSelect │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── SmallTableEdit │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Subscribers │ │ │ │ ├── assets │ │ │ │ │ ├── icon_add_more_gray.png │ │ │ │ │ └── icon_delete_more_gray.png │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── list.css │ │ │ │ ├── list.tsx │ │ │ │ ├── list_vm.ts │ │ │ │ └── vm.ts │ │ │ ├── Table │ │ │ │ └── index.tsx │ │ │ ├── UserInfo │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── vm.tsx │ │ │ ├── UserSelect │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── WKAvatar │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── WKAvatarEditor │ │ │ │ └── index.tsx │ │ │ ├── WKBase │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── WKLayout │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── WKNavHeader │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── WKViewQueue │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── WKViewQueueHeader │ │ │ │ ├── assets │ │ │ │ │ ├── nav_back.png │ │ │ │ │ └── nav_back_dark.png │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ └── WaveCanvas │ │ │ │ └── index.tsx │ │ ├── EndpointCommon.tsx │ │ ├── Messages │ │ │ ├── ApproveGroupMember │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Base │ │ │ │ ├── MessageSendBubbleFirst.png │ │ │ │ ├── head.tsx │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── msg_status_fail.png │ │ │ │ └── tail.tsx │ │ │ ├── Card │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Flame │ │ │ │ └── index.tsx │ │ │ ├── Gif │ │ │ │ └── index.tsx │ │ │ ├── HistorySplit │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Image │ │ │ │ └── index.tsx │ │ │ ├── JoinOrganization │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Location │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── LottieSticker │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Mergeforward │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── MessageCell.tsx │ │ │ ├── Revoke │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Screenshot │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── SignalMessage │ │ │ │ └── signalmessage.tsx │ │ │ ├── System │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Text │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Time │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Typing │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ ├── Unknown │ │ │ │ └── index.tsx │ │ │ ├── Unsupport │ │ │ │ └── index.tsx │ │ │ ├── Video │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ │ └── Voice │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ ├── Pages │ │ │ └── Chat │ │ │ │ ├── assets │ │ │ │ ├── chat_bg.svg │ │ │ │ └── start_chat.svg │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ └── vm.ts │ │ ├── Service │ │ │ ├── APIClient.ts │ │ │ ├── ChannelSetting.ts │ │ │ ├── Const.ts │ │ │ ├── Context.ts │ │ │ ├── Convert.ts │ │ │ ├── DataSource │ │ │ │ ├── DataProvider.ts │ │ │ │ └── DataSource.ts │ │ │ ├── EmojiService.ts │ │ │ ├── Menus.ts │ │ │ ├── MessageManager.tsx │ │ │ ├── Model.tsx │ │ │ ├── Module.ts │ │ │ ├── ProhibitwordsService.ts │ │ │ ├── Provider.tsx │ │ │ ├── Route.tsx │ │ │ ├── Section.tsx │ │ │ ├── StorageService.tsx │ │ │ └── TypingManager.tsx │ │ ├── Utils │ │ │ ├── const.ts │ │ │ ├── extends │ │ │ │ ├── excel.png │ │ │ │ ├── file.png │ │ │ │ ├── pdf.png │ │ │ │ ├── ppt.png │ │ │ │ ├── rar.png │ │ │ │ ├── word.png │ │ │ │ └── zip.png │ │ │ ├── filehelper.ts │ │ │ ├── pinYin.ts │ │ │ ├── t2s.ts │ │ │ └── time.ts │ │ ├── assets │ │ │ ├── fonts │ │ │ │ └── icomoon.woff2 │ │ │ ├── icon_qrcode.png │ │ │ ├── msg-tip.mp3 │ │ │ ├── popmenus_startchat.png │ │ │ ├── popmenus_startchat_dark.png │ │ │ └── toolbars │ │ │ │ ├── func_face_normal.svg │ │ │ │ ├── func_mention_normal.svg │ │ │ │ ├── func_screenshot.svg │ │ │ │ └── func_upload_image.svg │ │ ├── index.tsx │ │ └── module.tsx │ ├── tsconfig.json │ └── yarn.lock ├── tsdaodaocontacts │ ├── package.json │ ├── src │ │ ├── Blacklist │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── vm.tsx │ │ ├── Contacts │ │ │ ├── index.css │ │ │ └── index.tsx │ │ ├── FriendAdd │ │ │ ├── assets │ │ │ │ └── icon_qrcode.png │ │ │ ├── index.css │ │ │ └── index.tsx │ │ ├── GroupSave │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── vm.tsx │ │ ├── NewFriend │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── vm.tsx │ │ ├── Organizational │ │ │ └── GroupNew │ │ │ │ ├── index.css │ │ │ │ └── index.tsx │ │ ├── Service │ │ │ └── ContactsListManager.tsx │ │ ├── assets │ │ │ ├── blacklist.png │ │ │ ├── friend_new.png │ │ │ ├── icon_group_save.png │ │ │ ├── organizational_new.png │ │ │ ├── popmenus_friendadd.png │ │ │ └── popmenus_friendadd_dark.png │ │ ├── index.tsx │ │ └── module.tsx │ └── tsconfig.json ├── tsdaodaodatasource │ ├── package.json │ ├── src │ │ ├── conversation.ts │ │ ├── datasource.ts │ │ ├── index.tsx │ │ ├── module.ts │ │ └── task.ts │ └── tsconfig.json └── tsdaodaologin │ ├── package.json │ ├── src │ ├── assets │ │ └── refresh.png │ ├── index.tsx │ ├── login.css │ ├── login.tsx │ ├── login_vm.tsx │ ├── module.tsx │ ├── style.module.css │ └── test.ts │ └── tsconfig.json ├── turbo.json └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .git 3 | .gitignore 4 | Dockerfile -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // module.exports = { 2 | // root: true, 3 | // // This tells ESLint to load the config from the package `eslint-config-custom` 4 | // extends: ["custom"], 5 | // settings: { 6 | // next: { 7 | // rootDir: ["apps/*/"], 8 | // }, 9 | // }, 10 | // }; 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | .pnp 6 | .pnp.js 7 | 8 | # testing 9 | coverage 10 | 11 | # next.js 12 | .next/ 13 | out/ 14 | build 15 | 16 | # misc 17 | .DS_Store 18 | *.pem 19 | 20 | # debug 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | # local env files 26 | .env.local 27 | .env.development.local 28 | .env.test.local 29 | .env.production.local 30 | 31 | # turbo 32 | .turbo 33 | 34 | lib/ 35 | out/ 36 | build 37 | out-election/ 38 | dist-ele/ 39 | icon.icns 40 | icons.iconset -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | registry "https://registry.npmmirror.com/" 2 | electron_mirror "https://npmmirror.com/mirrors/electron/" -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:20.9.0 as builder 2 | WORKDIR /app 3 | RUN curl -o- -L https://yarnpkg.com/install.sh | bash 4 | # RUN yarn config set registry https://registry.npm.taobao.org -g 5 | # RUN npm config set registry https://registry.npm.taobao.org 6 | COPY . . 7 | RUN yarn install && yarn build 8 | 9 | FROM nginx:latest 10 | COPY --from=builder /app/docker-entrypoint.sh /docker-entrypoint2.sh 11 | COPY --from=builder /app/nginx.conf.template / 12 | COPY --from=builder /app/apps/web/build /usr/share/nginx/html 13 | ENTRYPOINT ["sh", "/docker-entrypoint2.sh"] 14 | CMD ["nginx","-g","daemon off;"] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | build: 2 | docker build -t tangsengdaodaoweb . 3 | deploy: 4 | docker build -t tangsengdaodaoweb . 5 | docker tag tangsengdaodaoweb registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoweb:latest 6 | docker push registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoweb:latest -------------------------------------------------------------------------------- /apps/web/config-overrides.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | const { override, babelInclude, addWebpackPlugin, overrideDevServer } = require('customize-cra') 3 | const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); 4 | const TerserPlugin = require("terser-webpack-plugin"); 5 | 6 | const addDevServerConfig = () => config => { 7 | return { 8 | ...config, 9 | client: { 10 | overlay: false 11 | } 12 | }; 13 | } 14 | 15 | module.exports = { 16 | webpack: function (config, env) { 17 | if (process.env.NODE_ENV === 'production') { 18 | config.devtool = false; 19 | } 20 | if (env === 'production') { 21 | config.optimization = { 22 | minimize: true, 23 | minimizer: [new TerserPlugin()], 24 | }; 25 | } 26 | return Object.assign( 27 | config, 28 | override( 29 | // 判断环境变量ANALYZER参数的值 30 | process.env.ANALYZER && addWebpackPlugin(new BundleAnalyzerPlugin()), 31 | babelInclude([ 32 | /* transpile (converting to es5) code in src/ and shared component library */ 33 | path.resolve('src'), 34 | path.resolve('../../packages'), 35 | ]) 36 | )(config, env) 37 | ) 38 | }, 39 | devServer: overrideDevServer(addDevServerConfig()) 40 | } -------------------------------------------------------------------------------- /apps/web/public/audio/call.aac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/audio/call.aac -------------------------------------------------------------------------------- /apps/web/public/audio/hangup.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/audio/hangup.wav -------------------------------------------------------------------------------- /apps/web/public/audio/receive.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/audio/receive.mp3 -------------------------------------------------------------------------------- /apps/web/public/emoji/0_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_0.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_1.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_10.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_100.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_101.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_102.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_103.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_104.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_105.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_106.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_107.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_108.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_109.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_11.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_110.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_111.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_112.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_113.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_114.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_115.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_116.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_117.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_118.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_119.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_12.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_120.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_121.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_122.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_123.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_124.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_125.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_126.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_127.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_128.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_129.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_13.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_130.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_131.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_132.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_133.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_134.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_135.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_136.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_137.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_138.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_139.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_14.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_140.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_141.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_142.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_143.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_144.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_145.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_146.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_147.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_148.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_149.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_15.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_150.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_151.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_16.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_17.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_18.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_19.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_2.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_20.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_21.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_22.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_23.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_24.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_25.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_26.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_27.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_28.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_29.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_3.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_30.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_31.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_32.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_33.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_34.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_35.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_36.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_37.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_38.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_39.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_4.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_40.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_41.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_42.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_43.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_44.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_45.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_46.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_47.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_48.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_49.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_5.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_50.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_51.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_52.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_53.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_54.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_55.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_56.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_57.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_58.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_59.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_6.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_60.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_61.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_62.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_63.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_64.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_65.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_66.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_67.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_68.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_69.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_7.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_70.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_71.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_72.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_73.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_74.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_75.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_76.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_77.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_78.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_79.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_8.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_80.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_81.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_82.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_83.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_84.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_85.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_86.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_87.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_88.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_89.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_9.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_90.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_91.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_92.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_93.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_94.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_95.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_96.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_97.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_98.png -------------------------------------------------------------------------------- /apps/web/public/emoji/0_99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/0_99.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_0.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_1.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_10.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_11.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_12.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_13.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_14.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_15.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_16.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_17.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_18.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_19.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_2.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_20.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_21.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_22.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_23.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_24.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_25.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_26.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_27.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_28.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_29.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_3.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_30.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_31.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_32.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_33.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_4.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_5.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_6.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_7.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_8.png -------------------------------------------------------------------------------- /apps/web/public/emoji/1_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/1_9.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_0.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_1.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_10.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_11.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_12.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_13.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_14.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_15.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_16.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_17.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_18.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_19.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_2.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_20.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_21.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_22.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_23.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_24.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_25.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_26.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_27.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_28.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_29.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_3.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_30.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_31.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_32.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_33.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_34.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_35.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_4.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_5.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_6.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_7.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_8.png -------------------------------------------------------------------------------- /apps/web/public/emoji/2_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/emoji/2_9.png -------------------------------------------------------------------------------- /apps/web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/favicon.ico -------------------------------------------------------------------------------- /apps/web/public/identity_icon/official.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/identity_icon/official.png -------------------------------------------------------------------------------- /apps/web/public/identity_icon/visitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/identity_icon/visitor.png -------------------------------------------------------------------------------- /apps/web/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/public/logo.png -------------------------------------------------------------------------------- /apps/web/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /apps/web/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /apps/web/resources/app-update.yml: -------------------------------------------------------------------------------- 1 | provider: generic 2 | url: https://api.botgate.cn/ 3 | updaterCacheDirName: '@tsdaodaoweb-updater' 4 | -------------------------------------------------------------------------------- /apps/web/resources/icons/1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/1024x1024.png -------------------------------------------------------------------------------- /apps/web/resources/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/128x128.png -------------------------------------------------------------------------------- /apps/web/resources/icons/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/16x16.png -------------------------------------------------------------------------------- /apps/web/resources/icons/24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/24x24.png -------------------------------------------------------------------------------- /apps/web/resources/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/256x256.png -------------------------------------------------------------------------------- /apps/web/resources/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/32x32.png -------------------------------------------------------------------------------- /apps/web/resources/icons/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/48x48.png -------------------------------------------------------------------------------- /apps/web/resources/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/512x512.png -------------------------------------------------------------------------------- /apps/web/resources/icons/64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/64x64.png -------------------------------------------------------------------------------- /apps/web/resources/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/favicon.ico -------------------------------------------------------------------------------- /apps/web/resources/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/icon.icns -------------------------------------------------------------------------------- /apps/web/resources/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/icons/icon.ico -------------------------------------------------------------------------------- /apps/web/resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/logo.png -------------------------------------------------------------------------------- /apps/web/resources/mac/entitlements.mac.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.cs.allow-jit 6 | 7 | com.apple.security.cs.allow-unsigned-executable-memory 8 | 9 | com.apple.security.cs.allow-dyld-environment-variables 10 | 11 | com.apple.security.device.audio-input 12 | 13 | com.apple.security.device.camera 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /apps/web/resources/tray/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/tray/128x128.png -------------------------------------------------------------------------------- /apps/web/resources/tray/30x30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/tray/30x30.png -------------------------------------------------------------------------------- /apps/web/resources/tray/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/tray/32x32.png -------------------------------------------------------------------------------- /apps/web/resources/tray/macTray@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/resources/tray/macTray@3x.png -------------------------------------------------------------------------------- /apps/web/src-election/electron-env.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'tmp'; -------------------------------------------------------------------------------- /apps/web/src-election/main/confing.ts: -------------------------------------------------------------------------------- 1 | const TSDD_FONFIG = { 2 | appId: "com.tsdaodao.im", 3 | name: "唐僧叨叨", 4 | updataUrl: 'https://api.botgate.cn/' 5 | }; 6 | 7 | export default TSDD_FONFIG; 8 | -------------------------------------------------------------------------------- /apps/web/src-election/main/logo.ts: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import { app, screen } from "electron"; 3 | 4 | export default path.join(app.getAppPath(), "./resources/logo.png"); 5 | 6 | export function getNoMessageTrayIcon () { 7 | if (process.platform === 'darwin') { 8 | return path.join(app.getAppPath(), './resources/tray/macTray@3x.png') 9 | } else if (process.platform === 'win32') { 10 | return path.join(app.getAppPath(), './resources/tray/128x128.png') 11 | } else if (screen.getPrimaryDisplay().scaleFactor > 1) { 12 | return path.join(app.getAppPath(), './resources/tray/128x128.png') 13 | } else { 14 | return path.join(app.getAppPath(), './resources/tray/128x128.png') 15 | } 16 | } -------------------------------------------------------------------------------- /apps/web/src-election/main/utils/createWindow.ts: -------------------------------------------------------------------------------- 1 | import { BrowserWindow, screen } from "electron"; 2 | import { join } from "path"; 3 | 4 | export function createWindow() { 5 | const NODE_ENV = process.env.NODE_ENV; 6 | const { width, height } = screen.getPrimaryDisplay().workAreaSize; 7 | // 生成窗口实例 8 | const mainWin = new BrowserWindow({ 9 | width, // * 指定启动app时的默认窗口尺寸 10 | height, // * 指定启动app时的默认窗口尺寸 11 | // frame: true, // * app边框(包括关闭,全屏,最小化按钮的导航栏) @false: 隐藏 12 | // titleBarStyle: "hidden", 13 | // transparent: true, // * app 背景透明 14 | hasShadow: false, // * app 边框阴影 15 | show: false, // 启动窗口时隐藏,直到渲染进程加载完成「ready-to-show 监听事件」 再显示窗口,防止加载时闪烁 16 | resizable: true, // 禁止手动修改窗口尺寸 17 | webPreferences: { 18 | // 加载脚本 19 | preload: join(__dirname, "../..", "preload/index"), 20 | nodeIntegration: true, 21 | }, 22 | }); 23 | 24 | // 启动窗口时隐藏,直到渲染进程加载完成「ready-to-show 监听事件」 再显示窗口,防止加载时闪烁 25 | mainWin.once("ready-to-show", () => { 26 | mainWin.show(); // 显示窗口 27 | }); 28 | 29 | if (NODE_ENV === "development") mainWin.loadURL("http://localhost:3000"); 30 | if (NODE_ENV !== "development") { 31 | process.env.DIST_ELECTRON = join(__dirname, '../'); 32 | const WEB_URL = join(process.env.DIST_ELECTRON, "../../build/index.html"); 33 | mainWin.loadFile(WEB_URL); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /apps/web/src-election/preload/index.ts: -------------------------------------------------------------------------------- 1 | import { contextBridge, ipcRenderer } from "electron"; 2 | 3 | contextBridge.exposeInMainWorld("__POWERED_ELECTRON__", true); 4 | 5 | contextBridge.exposeInMainWorld("ipc", { 6 | send: (channel: string, ...args: any[]) => ipcRenderer.send(channel, ...args), 7 | invoke: (channel: string, ...args: any[]): Promise => 8 | ipcRenderer.invoke(channel, ...args), 9 | on: ( 10 | channel: string, 11 | listener: (event: Electron.IpcRendererEvent, ...args: any[]) => void 12 | ) => { 13 | ipcRenderer.on(channel, listener); 14 | }, 15 | once: ( 16 | channel: string, 17 | listener: (event: Electron.IpcRendererEvent, ...args: any[]) => void 18 | ) => { 19 | ipcRenderer.once(channel, listener); 20 | }, 21 | }); 22 | -------------------------------------------------------------------------------- /apps/web/src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | -------------------------------------------------------------------------------- /apps/web/src-tauri/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "app" 3 | version = "0.1.0" 4 | description = "唐僧叨叨即时通讯" 5 | authors = ["you"] 6 | license = "" 7 | repository = "" 8 | default-run = "app" 9 | edition = "2021" 10 | rust-version = "1.57" 11 | 12 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 13 | 14 | [build-dependencies] 15 | tauri-build = { version = "1.0.1", features = [] } 16 | 17 | [dependencies] 18 | serde_json = "1.0" 19 | serde = { version = "1.0", features = ["derive"] } 20 | tauri = { version = "1.0.1", features = ["api-all", "updater"] } 21 | rand = "0.3.17" 22 | 23 | [features] 24 | # by default Tauri runs in production mode 25 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL 26 | default = [ "custom-protocol" ] 27 | # this feature is used used for production builds where `devPath` points to the filesystem 28 | # DO NOT remove this 29 | custom-protocol = [ "tauri/custom-protocol" ] 30 | -------------------------------------------------------------------------------- /apps/web/src-tauri/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | NSCameraUsageDescription 7 | “唐僧叨叨”需要您的同意,才能访问相机,用于音视频通话 8 | NSMicrophoneUsageDescription 9 | “唐僧叨叨”需要您的同意,才能访问麦克风?,用于聊天和视频 10 | 11 | 12 | -------------------------------------------------------------------------------- /apps/web/src-tauri/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | tauri_build::build() 3 | } 4 | -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/128x128.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/128x128@2x.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/32x32.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square107x107Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square107x107Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square142x142Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square142x142Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square150x150Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square150x150Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square284x284Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square284x284Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square30x30Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square30x30Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square310x310Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square310x310Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square44x44Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square44x44Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square71x71Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square71x71Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/Square89x89Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/Square89x89Logo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/StoreLogo.png -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/icon.ico -------------------------------------------------------------------------------- /apps/web/src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/apps/web/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /apps/web/src-tauri/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr( 2 | all(not(debug_assertions), target_os = "windows"), 3 | windows_subsystem = "windows" 4 | )] 5 | 6 | 7 | mod menu; 8 | 9 | fn main() { 10 | let context = tauri::generate_context!(); 11 | tauri::Builder::default() 12 | .menu(menu::init(&context)).on_menu_event(menu::handler) 13 | .run(context) 14 | .expect("error while running tauri application"); 15 | } 16 | -------------------------------------------------------------------------------- /apps/web/src-tauri/src/menu.rs: -------------------------------------------------------------------------------- 1 | extern crate rand; 2 | 3 | use tauri::utils::assets::EmbeddedAssets; 4 | use tauri::{Manager, Context,Wry, CustomMenuItem, Menu , Submenu, WindowMenuEvent}; 5 | 6 | 7 | use rand::Rng; 8 | 9 | pub fn init(_context: &Context) -> Menu { 10 | // 应用名称 11 | // let name = &context.package_info().name; 12 | // tauri::Menu::os_default(name) 13 | 14 | let menu = Submenu::new( 15 | "菜单", 16 | Menu::new() 17 | .add_item(CustomMenuItem::new("new_windows".to_string(), "多开")) 18 | ); 19 | Menu::new() 20 | .add_submenu(menu) 21 | } 22 | 23 | // 应用菜单处理事件 24 | pub fn handler(event: WindowMenuEvent) { 25 | // 匹配菜单 id 26 | match event.menu_item_id() { 27 | "new_windows" => { 28 | let apphandle = event.window().app_handle(); 29 | let mut rng = rand::thread_rng(); 30 | let n2: u32 = rng.gen(); 31 | 32 | std::thread::spawn(move || { 33 | let _newwin = tauri::WindowBuilder::new( 34 | &apphandle, 35 | n2.to_string(), 36 | tauri::WindowUrl::App("/".into()) 37 | ).title("唐僧叨叨").inner_size(1200.0,800.0).build(); 38 | }); 39 | 40 | } 41 | _ => {} 42 | } 43 | } -------------------------------------------------------------------------------- /apps/web/src/App/assets/ContactsTab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | address book_02 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /apps/web/src/App/assets/HomeTab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | home_02 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /apps/web/src/App/assets/HomeTabSelected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | home_01 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /apps/web/src/App/index.css: -------------------------------------------------------------------------------- 1 | 2 | #root { 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | .App { 8 | text-align: center; 9 | } 10 | 11 | .App-logo { 12 | height: 40vmin; 13 | pointer-events: none; 14 | } 15 | 16 | @media (prefers-reduced-motion: no-preference) { 17 | .App-logo { 18 | animation: App-logo-spin infinite 20s linear; 19 | } 20 | } 21 | 22 | .App-header { 23 | background-color: #282c34; 24 | min-height: 100vh; 25 | display: flex; 26 | flex-direction: column; 27 | align-items: center; 28 | justify-content: center; 29 | font-size: calc(10px + 2vmin); 30 | color: white; 31 | } 32 | 33 | .App-link { 34 | color: #61dafb; 35 | } 36 | 37 | @keyframes App-logo-spin { 38 | from { 39 | transform: rotate(0deg); 40 | } 41 | to { 42 | transform: rotate(360deg); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /apps/web/src/Pages/Main/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --sider-width: 60px 3 | } 4 | 5 | .wk-main { 6 | width: 100%; 7 | height: 100%; 8 | display: flex; 9 | } 10 | 11 | .wk-main-content { 12 | width: calc(100% - var(--sider-width)); 13 | height: 100%; 14 | background-color: white; 15 | } 16 | -------------------------------------------------------------------------------- /apps/web/src/Pages/Main/tab_low_screen.css: -------------------------------------------------------------------------------- 1 | .wk-main-tab { 2 | width: 100%; 3 | height: 100%; 4 | background-color: white; 5 | position: relative; 6 | border-top: 1px solid rgb(0 0 0 / 5%); 7 | } 8 | .wk-main-tab-content { 9 | width: 100%; 10 | height: 100%; 11 | } 12 | .wk-main-tab-content ul{ 13 | margin-bottom: 0px; 14 | display: flex; 15 | width: 100%; 16 | height: 100%; 17 | } 18 | 19 | .wk-main-tab-content ul li { 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | flex: 1; 24 | cursor: pointer; 25 | } 26 | 27 | .wk-main-tab-content ul li img { 28 | width: 28px; 29 | } -------------------------------------------------------------------------------- /apps/web/src/Pages/Main/tab_low_screen.tsx: -------------------------------------------------------------------------------- 1 | import { WKApp } from "@tsdaodao/base"; 2 | import React from "react"; 3 | import { Component, ReactNode } from "react"; 4 | import "./tab_low_screen.css" 5 | import MainVM from "./vm"; 6 | 7 | export interface TabLowScreenProps { 8 | vm: MainVM 9 | } 10 | 11 | export class TabLowScreen extends Component { 12 | 13 | render(): ReactNode { 14 | const { vm } = this.props 15 | return
16 |
17 |
    18 | { 19 | vm.menusList.map((menus) => { 20 | return
  • { 21 | vm.currentMenus = menus 22 | if (menus.onPress) { 23 | menus.onPress() 24 | } else { 25 | WKApp.route.push(menus.routePath) 26 | } 27 | }}>{vm.currentMenus?.id === menus.id ? menus.selectedIcon : menus.icon}
  • 28 | }) 29 | } 30 |
31 |
32 |
33 | } 34 | } -------------------------------------------------------------------------------- /apps/web/src/index.css: -------------------------------------------------------------------------------- 1 | /** 2 | * ===================================== 3 | * 滚动条美化 4 | **/ 5 | 6 | /* 亮色 */ 7 | ::-webkit-scrollbar { 8 | width: 8px; 9 | height: 8px; 10 | } 11 | 12 | ::-webkit-scrollbar-thumb { 13 | background-color: #b8b8b8; 14 | background-clip: padding-box; 15 | border-radius: 8px; 16 | } 17 | 18 | ::-webkit-scrollbar-thumb:hover { 19 | background-color: #878787; 20 | } 21 | 22 | /* 暗色 */ 23 | body[theme-mode=dark] ::-webkit-scrollbar-thumb { 24 | background: #565656; 25 | } 26 | 27 | body[theme-mode=dark] ::-webkit-scrollbar-thumb:hover { 28 | background: #424242; /* 更深的灰色 */ 29 | } -------------------------------------------------------------------------------- /apps/web/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare interface Window { 4 | ipc: any; 5 | __POWERED_BY_ZC__: boolean; 6 | } 7 | -------------------------------------------------------------------------------- /apps/web/src/reportWebVitals.ts: -------------------------------------------------------------------------------- 1 | import { ReportHandler } from 'web-vitals'; 2 | 3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => { 4 | if (onPerfEntry && onPerfEntry instanceof Function) { 5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 6 | getCLS(onPerfEntry); 7 | getFID(onPerfEntry); 8 | getFCP(onPerfEntry); 9 | getLCP(onPerfEntry); 10 | getTTFB(onPerfEntry); 11 | }); 12 | } 13 | }; 14 | 15 | export default reportWebVitals; 16 | -------------------------------------------------------------------------------- /apps/web/tsconfig.e.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": ["node_modules", "src"], 3 | "include": ["src-election/**/*"], 4 | "compilerOptions": { 5 | "outDir": "./out-election", 6 | "module": "commonjs", 7 | "moduleResolution": "node", 8 | "resolveJsonModule": true, 9 | "esModuleInterop": true, 10 | "noEmit": false, 11 | "baseUrl": "./", 12 | "skipLibCheck":true, 13 | "sourceMap": false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /apps/web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/nextjs.json", 3 | "include": [ 4 | "next-env.d.ts", 5 | "**/*.ts", 6 | "**/*.tsx" 7 | ], 8 | "exclude": [ 9 | "node_modules", 10 | "src-election" 11 | ], 12 | "compilerOptions": { 13 | "allowSyntheticDefaultImports": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "jsx": "react" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | set -eu 4 | 5 | envsubst '${API_URL}' < /nginx.conf.template > /etc/nginx/conf.d/default.conf 6 | 7 | 8 | exec "$@" -------------------------------------------------------------------------------- /docs/pc11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/docs/pc11.png -------------------------------------------------------------------------------- /docs/pc22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/docs/pc22.png -------------------------------------------------------------------------------- /docs/pc33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/docs/pc33.png -------------------------------------------------------------------------------- /nginx.conf.template: -------------------------------------------------------------------------------- 1 | gzip on; 2 | gzip_min_length 1k; 3 | gzip_disable msie6; 4 | gzip_vary on; 5 | gzip_proxied any; 6 | gzip_comp_level 2; 7 | gzip_buffers 16 8k; 8 | gzip_http_version 1.1; 9 | gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 10 | 11 | 12 | server { 13 | listen 80; 14 | server_name localhost; 15 | 16 | location /api/ { 17 | proxy_pass ${API_URL}; 18 | client_max_body_size 1000m; 19 | client_body_buffer_size 500m; 20 | } 21 | 22 | location / { 23 | root /usr/share/nginx/html; 24 | index index.html index.htm; 25 | } 26 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tsdd", 3 | "private": true, 4 | "version": "1.5.0", 5 | "workspaces": [ 6 | "apps/*", 7 | "packages/*" 8 | ], 9 | "scripts": { 10 | "dev": "turbo run dev --parallel", 11 | "dev-ele": "turbo run dev-ele --parallel", 12 | "build": "turbo run build", 13 | "build-ele": "turbo run build && turbo run build-ele", 14 | "build-ele:mac": "turbo run build && turbo run build-ele:mac", 15 | "build-ele:win": "turbo run build && turbo run build-ele:win", 16 | "build-ele:linux": "turbo run build && turbo run build-ele:linux", 17 | "build-ele:linux-arm64": "turbo run build && turbo run build-ele:linux-arm64", 18 | "bootstrap": "yarn install", 19 | "clean": "turbo run clean && rimraf node_modules .turbo", 20 | "lint": "turbo run lint", 21 | "format": "prettier --write \"**/*.{ts,tsx,md}\"" 22 | }, 23 | "resolutions": { 24 | "react-error-overlay": "6.0.9" 25 | }, 26 | "devDependencies": { 27 | "eslint": "^7.32.0", 28 | "eslint-config-custom": "*", 29 | "prettier": "^2.5.1", 30 | "rimraf": "^5.0.5", 31 | "turbo": "2.2.1" 32 | }, 33 | "packageManager": "yarn@1.22.19", 34 | "engines": { 35 | "node": ">=18.0.0", 36 | "yarn": ">=1.22.19" 37 | }, 38 | "dependencies": { 39 | "@babel/plugin-proposal-private-property-in-object": "^7.21.11" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /packages/eslint-config-custom/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["next", "turbo", "prettier", "@typescript-eslint/parser"], 3 | rules: { 4 | "@next/next/no-html-link-for-pages": "off", 5 | "react/jsx-key": "off", 6 | "@next/next/no-img-element": "off", 7 | "no-template-curly-in-string": "off" 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /packages/eslint-config-custom/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-config-custom", 3 | "version": "0.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "clean": "rimraf node_modules .turbo" 8 | }, 9 | "dependencies": { 10 | "@typescript-eslint/parser": "^6.16.0", 11 | "eslint-config-next": "^12.0.8", 12 | "eslint-config-prettier": "^8.3.0", 13 | "eslint-config-turbo": "latest", 14 | "eslint-plugin-react": "7.28.0" 15 | }, 16 | "publishConfig": { 17 | "access": "public" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/tsconfig/base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Default", 4 | "compilerOptions": { 5 | "composite": false, 6 | "declaration": true, 7 | "declarationMap": true, 8 | "esModuleInterop": true, 9 | "forceConsistentCasingInFileNames": true, 10 | "inlineSources": false, 11 | "isolatedModules": true, 12 | "moduleResolution": "node", 13 | "noUnusedLocals": false, 14 | "noUnusedParameters": false, 15 | "preserveWatchOutput": true, 16 | "skipLibCheck": true, 17 | "strict": true, 18 | "allowJs": true, 19 | "jsx": "react", 20 | "module": "esnext", 21 | "target": "es2019", 22 | "noEmit": true, 23 | "noFallthroughCasesInSwitch": true 24 | }, 25 | "include": [ 26 | "src/**/*" 27 | ], 28 | "exclude": ["node_modules"] 29 | } 30 | -------------------------------------------------------------------------------- /packages/tsconfig/nextjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "Next.js", 4 | "extends": "./base.json", 5 | "compilerOptions": { 6 | "allowJs": true, 7 | "declaration": false, 8 | "declarationMap": false, 9 | "incremental": true, 10 | "lib": ["dom", "dom.iterable", "esnext"], 11 | "noEmit": true, 12 | "resolveJsonModule": true, 13 | "strict": false 14 | }, 15 | "include": ["src", "next-env.d.ts"], 16 | "exclude": ["node_modules"] 17 | } 18 | -------------------------------------------------------------------------------- /packages/tsconfig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tsconfig", 3 | "version": "0.0.0", 4 | "private": true, 5 | "license": "MIT", 6 | "publishConfig": { 7 | "access": "public" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/tsconfig/react-library.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "display": "React Library", 4 | "extends": "./base.json", 5 | "compilerOptions": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tsdaodao/base", 3 | "version": "1.0.0", 4 | "main": "src/index.tsx", 5 | "dependencies": { 6 | "@douyinfe/semi-ui": "^2.24.2", 7 | "@lottiefiles/lottie-player": "^1.5.5", 8 | "@types/qrcode.react": "^1.0.2", 9 | "@types/react-color": "^3.0.6", 10 | "@types/react-mentions": "^4.1.5", 11 | "@types/react-scroll": "^1.8.3", 12 | "animate.css": "^4.1.1", 13 | "axios": "^0.25.0", 14 | "benz-amr-recorder": "^1.1.3", 15 | "classnames": "^2.3.1", 16 | "hotkeys-js": "^3.8.7", 17 | "mitt": "^3.0.1", 18 | "moment": "^2.29.3", 19 | "qrcode.react": "^1.0.1", 20 | "react": "^17.0.2", 21 | "react-avatar-editor": "^13.0.0", 22 | "react-mentions": "^4.3.1", 23 | "react-scroll": "^1.8.4", 24 | "react-spinners": "^0.11.0", 25 | "react-viewer": "^3.2.2", 26 | "sensitive-word-tool": "^1.1.9", 27 | "wukongimjssdk": "^1.2.11" 28 | }, 29 | "devDependencies": { 30 | "@types/react-avatar-editor": "^13.0.0", 31 | "react-dom": "^17.0.2" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/ChannelAvatar/index.css: -------------------------------------------------------------------------------- 1 | .wk-channelavatar { 2 | width: 100%; 3 | height: 100%; 4 | overflow: hidden; 5 | display: flex; 6 | align-items: center; 7 | margin-top: 40px; 8 | flex-direction: column; 9 | } 10 | 11 | .wk-channelavatar-avatar { 12 | width: 200px; 13 | height: 200px; 14 | 15 | } 16 | 17 | .wk-channelavatar-upload { 18 | margin-top: 20px; 19 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/ChannelQRCode/vm.tsx: -------------------------------------------------------------------------------- 1 | import { Channel } from "wukongimjssdk"; 2 | import WKApp from "../../App"; 3 | import { ChannelQrcodeResp } from "../../Service/DataSource/DataSource"; 4 | import { ProviderListener } from "../../Service/Provider"; 5 | import { Toast } from "@douyinfe/semi-ui"; 6 | 7 | 8 | export class ChannelQRCodeVM extends ProviderListener { 9 | channel!:Channel 10 | qrcodeResp?: ChannelQrcodeResp 11 | 12 | constructor(channel:Channel) { 13 | super() 14 | this.channel = channel 15 | } 16 | 17 | didMount(): void { 18 | this.requestQRCode() 19 | } 20 | 21 | requestQRCode() { 22 | WKApp.dataSource.channelDataSource.qrcode(this.channel).then((resp)=>{ 23 | this.qrcodeResp = resp 24 | this.notifyListener() 25 | }).catch((err) => { 26 | Toast.error(err.msg) 27 | }) 28 | 29 | } 30 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/ChannelSetting/context.tsx: -------------------------------------------------------------------------------- 1 | import { Channel, ChannelInfo, Subscriber } from "wukongimjssdk"; 2 | import { GroupRole } from "../../Service/Const"; 3 | import RouteContext, { RouteContextConfig } from "../../Service/Context"; 4 | import ConversationContext from "../Conversation/context"; 5 | 6 | 7 | export class ChannelSettingRouteData { 8 | channel!:Channel 9 | channelInfo?:ChannelInfo 10 | subscribers!:Subscriber[] // 成员列表(所有状态为正常状态的成员) 11 | subscriberOfMe?:Subscriber 12 | subscriberAll!:Subscriber[] //成员列表,所有状态的成员,比如:黑名单内的成员 13 | refresh!:()=>void // 刷新 14 | conversationContext?:ConversationContext 15 | 16 | // 我是否是管理者或创建者 17 | get isManagerOrCreatorOfMe() { 18 | return this.subscriberOfMe?.role === GroupRole.manager || this.subscriberOfMe?.role === GroupRole.owner 19 | } 20 | 21 | } 22 | 23 | // export interface ChannelSettingContext extends RouteContext{ 24 | // channel(): Channel 25 | // channelInfo(): ChannelInfo 26 | // subscribers(): Subscriber[] // 订阅者列表 27 | // subscriberOfMe(): Subscriber | undefined // 当前用户订阅者信息 28 | 29 | // } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Checkbox/checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Checkbox/checked.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Checkbox/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-check { 3 | cursor: pointer; 4 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Checkbox/index.tsx: -------------------------------------------------------------------------------- 1 | 2 | import React, { Component } from 'react'; 3 | import './index.css' 4 | 5 | export interface CheckboxProps { 6 | checked?:boolean 7 | onCheck?:()=>void 8 | } 9 | 10 | export default class Checkbox extends Component { 11 | 12 | render() { 13 | const { checked,onCheck } = this.props; 14 | return ( 15 |
{ 16 | if(onCheck) { 17 | onCheck(); 18 | } 19 | }}> 20 | 21 |
22 | ); 23 | } 24 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Checkbox/uncheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Checkbox/uncheck.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/ContextMenus/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-contextmenus { 4 | position: fixed; 5 | top: 100px; 6 | left: 0px; 7 | background-color: white; 8 | z-index: 99; 9 | 10 | box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(114,114,114,0.25098); 11 | border-radius: 0.75rem; 12 | transform: scale(0.5); 13 | transition: opacity .2s cubic-bezier(0.2, 0, 0.2, 1),transform .2s cubic-bezier(0.2, 0, 0.2, 1) !important; 14 | 15 | visibility: hidden; 16 | padding: 10px 0px; 17 | 18 | min-width: 80px; 19 | } 20 | 21 | body[theme-mode=dark] .wk-contextmenus { 22 | background-color: var(--wk-color-secondary); 23 | box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(0,0,0,0.6); 24 | } 25 | 26 | .wk-contextmenus-open { 27 | transform: scale(1); 28 | visibility: visible; 29 | } 30 | 31 | .wk-contextmenus ul { 32 | margin-top: 0; 33 | margin-bottom: 0; 34 | } 35 | 36 | .wk-contextmenus li { 37 | height: 40px; 38 | display: flex; 39 | align-items: center; 40 | padding: 10px; 41 | cursor: pointer; 42 | } 43 | 44 | body[theme-mode=dark] .wk-contextmenus li { 45 | color: white; 46 | } 47 | 48 | .wk-contextmenus li:hover { 49 | background-color: #eee; 50 | } 51 | 52 | body[theme-mode=dark] .wk-contextmenus li:hover { 53 | background-color: var(--wk-color-secondary-2); 54 | } 55 | 56 | .wk-contextmenus-mask { 57 | width: 100%; 58 | height: 100%; 59 | position: fixed; 60 | top: 0px; 61 | left: 0px; 62 | visibility: hidden; 63 | z-index: 98; 64 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Conversation/assets/message_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Conversation/assets/message_down.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Conversation/assets/reminder_member_invite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Conversation/assets/reminder_member_invite.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Conversation/assets/reminder_mention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Conversation/assets/reminder_mention.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/EmojiToolbar/emoji_tab_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/EmojiToolbar/emoji_tab_icon.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/FriendApply/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-friendapply { 3 | width: 100%; 4 | height: 100%; 5 | background-color:white; 6 | } 7 | 8 | body[theme-mode=dark] .wk-friendapply { 9 | background-color:var(--wk-color-secondary); 10 | } 11 | 12 | .wk-friendapply-content { 13 | padding: 15px; 14 | } 15 | 16 | .wk-friendapply-content-tip { 17 | color: gray; 18 | } 19 | 20 | .wk-friendapply-content-message { 21 | margin-top: 5px; 22 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/FriendApply/index.tsx: -------------------------------------------------------------------------------- 1 | import { TextArea } from "@douyinfe/semi-ui"; 2 | import React from "react"; 3 | import { Component, ReactNode } from "react"; 4 | 5 | import "./index.css" 6 | 7 | export interface FriendApplyUIProps { 8 | onMessage?:(msg:string)=>void 9 | placeholder?:string 10 | } 11 | 12 | export default class FriendApplyUI extends Component { 13 | 14 | render(): ReactNode { 15 | const { onMessage,placeholder } = this.props 16 | console.log("placeholder----->",placeholder) 17 | return
18 |
19 |
20 | 发送添加朋友申请 21 |
22 |
23 | 28 |
29 |
30 |
31 | } 32 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/GlobalSearch/index.css -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-contacts.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-item-contacts { 3 | display: flex; 4 | align-items: center; 5 | padding: 10px; 6 | border-radius: 4px; 7 | cursor: pointer; 8 | 9 | } 10 | 11 | .wk-item-contacts:hover { 12 | background-color: #f0f0f0; /* Change this color to your desired hover color */ 13 | } 14 | 15 | body[theme-mode=dark] .wk-item-contacts:hover { 16 | background-color: #333333; /* Change this color to your desired hover color */ 17 | } 18 | 19 | .wk-item-contacts-name { 20 | margin-left: 15px; 21 | color: var(--wk-text-item); 22 | font-size: 14px; 23 | font-weight: 500; 24 | } 25 | 26 | body[theme-mode=dark] .wk-item-contacts-name { 27 | color: white; 28 | } 29 | 30 | 31 | mark { 32 | background-color: transparent; /* 移除默认背景色 */ 33 | color: var(--wk-color-theme); /* 设置文本颜色为红色,可以根据需要更改 */ 34 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-contacts.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component, ReactNode } from "react"; 3 | import WKAvatar from "../WKAvatar"; 4 | import "./item-contacts.css" 5 | interface ItemContactsProps { 6 | avatar: string; 7 | name: string; 8 | onClick?: () => void; 9 | } 10 | 11 | export default class ItemContacts extends Component { 12 | 13 | render(): ReactNode { 14 | return
{ 15 | if(this.props.onClick){ 16 | this.props.onClick() 17 | } 18 | }}> 19 | 20 |
21 |
22 | } 23 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-file.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-item-file-icon { 4 | width: 42px; 5 | height: 42px; 6 | display: flex; 7 | justify-content: center; 8 | align-items: center; 9 | } 10 | 11 | .wk-item-file { 12 | display: grid; 13 | grid-template-columns: auto 1fr; 14 | grid-template-rows: auto auto; /* 两行 */ 15 | gap: 0px; 16 | padding: 10px; 17 | border-radius: 4px; 18 | } 19 | 20 | .wk-item-file:hover { 21 | background-color: #f0f0f0; /* Change this color to your desired hover color */ 22 | } 23 | 24 | body[theme-mode=dark] .wk-item-file:hover { 25 | background-color: #333333; /* Change this color to your desired hover color */ 26 | } 27 | 28 | 29 | .wk-item-file-icon { 30 | grid-column: 1 / 2; /* 第一列 */ 31 | grid-row: 1 / 3; /* 第一行 */ 32 | } 33 | 34 | .wk-item-file-name { 35 | grid-column: 2 / 3; /* 第二列 */ 36 | grid-row: 1 / 2; /* 第一行 */ 37 | margin-left: 15px; 38 | color: var(--wk-text-item); 39 | font-size: 14px; 40 | font-weight: 500; 41 | } 42 | 43 | .wk-item-file-desc { 44 | grid-row: 2 / 3; /* 第二行 */ 45 | grid-column: 2 / 3; /* 第二列 */ 46 | display: flex; 47 | margin-left: 15px; 48 | color: #666; 49 | font-size: 12px; 50 | align-items: center; 51 | } 52 | 53 | .wk-item-file-line { 54 | width: 1px; 55 | height: 8px; 56 | background-color: #666; 57 | margin-top: 10px; 58 | margin-bottom: 10px; 59 | margin: 4px; 60 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-group.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-item-group { 3 | display: flex; 4 | align-items: center; 5 | padding: 10px; 6 | border-radius: 4px; 7 | cursor: pointer; 8 | } 9 | 10 | 11 | body[theme-mode=dark] .wk-item-group:hover { 12 | background-color: #333333; /* Change this color to your desired hover color */ 13 | } 14 | 15 | .wk-item-group:hover { 16 | background-color: #f0f0f0; /* Change this color to your desired hover color */ 17 | } 18 | 19 | .wk-item-group-name { 20 | margin-left: 15px; 21 | color: #333; 22 | font-size: 14px; 23 | font-weight: 500; 24 | } 25 | 26 | body[theme-mode=dark] .wk-item-group-name { 27 | color: white; 28 | } 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-group.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component, ReactNode } from "react"; 3 | import WKAvatar from "../WKAvatar"; 4 | import "./item-group.css" 5 | interface ItemGroupProps { 6 | avatar: string; 7 | name: string; 8 | onClick?: () => void; 9 | } 10 | 11 | export default class ItemGroup extends Component { 12 | 13 | render(): ReactNode { 14 | return
{ 15 | if(this.props.onClick){ 16 | this.props.onClick() 17 | } 18 | }}> 19 | 20 |
21 |
22 | } 23 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-message.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-item-message { 3 | display: flex; 4 | align-items: center; 5 | padding: 10px; 6 | border-radius: 4px; 7 | cursor: pointer; 8 | 9 | } 10 | 11 | .wk-item-message:hover { 12 | background-color: #f0f0f0; /* Change this color to your desired hover color */ 13 | } 14 | body[theme-mode=dark] .wk-item-message:hover { 15 | background-color: #333333; /* Change this color to your desired hover color */ 16 | } 17 | 18 | .wk-item-message-content { 19 | display: grid; 20 | grid-template-columns: 1fr; /* 两列,左边自适应,右边自动宽度 */ 21 | grid-template-rows: auto auto; /* 两行 */ 22 | gap: 0px; 23 | min-width: 200px; 24 | max-width: 420px; 25 | 26 | } 27 | 28 | .wk-item-message-name { 29 | margin-left: 15px; 30 | color: #333; 31 | font-size: 14px; 32 | font-weight: 500; 33 | grid-column: 1 / 2; /* 第一列 */ 34 | grid-row: 1 / 2; /* 第一行 */ 35 | } 36 | 37 | body[theme-mode=dark] .wk-item-message-name { 38 | color: white; 39 | } 40 | 41 | 42 | .wk-item-message-digest { 43 | margin-left: 15px; 44 | color: #999; 45 | white-space: nowrap; /* 不换行 */ 46 | overflow: hidden; /* 超出部分隐藏 */ 47 | text-overflow: ellipsis; /* 超出部分以省略号显示 */ 48 | } 49 | 50 | mark { 51 | background-color: transparent; /* 移除默认背景色 */ 52 | color: var(--wk-color-theme); /* 设置文本颜色为红色,可以根据需要更改 */ 53 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/item-message.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component, ReactNode } from "react"; 3 | import WKAvatar from "../WKAvatar"; 4 | import "./item-message.css" 5 | interface ItemMessageProps { 6 | avatar: string; // 会话头像 7 | name: string; // 会话名字 8 | digest: string; // 消息摘要 9 | sender?: string; // 发送者 10 | onClick?: () => void; 11 | } 12 | 13 | export default class ItemMessage extends Component { 14 | 15 | render(): ReactNode { 16 | 17 | let digest = this.props?.digest 18 | if(this.props.sender && this.props.sender !== ""){ 19 | digest = this.props.sender + ": " + digest 20 | } 21 | 22 | return
{ 23 | if (this.props.onClick) { 24 | this.props.onClick() 25 | } 26 | } }> 27 | 28 |
29 |
{this.props.name}
30 | {/*
{this.props.time}
*/} 31 |
32 |
33 |
34 | } 35 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/section.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component, ReactNode } from "react"; 3 | 4 | 5 | interface SectionProps { 6 | title: string; 7 | children?: ReactNode; 8 | } 9 | 10 | export default class Section extends Component { 11 | render(): ReactNode { 12 | return
13 |
{this.props.title}
14 | {this.props.children} 15 |
16 | } 17 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/tab-all.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-tab-all { 4 | width: 100%; 5 | height: 50vh; 6 | display: flex; 7 | overflow: auto; 8 | flex-direction: column; 9 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/tab-contacts.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-tab-contacts { 3 | width: 100%; 4 | height: 50vh; 5 | display: flex; 6 | overflow: auto; 7 | flex-direction: column; 8 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/tab-contacts.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { ReactNode } from "react"; 3 | import ItemContacts from "./item-contacts"; 4 | import WKApp from "../../App"; 5 | import "./tab-contacts.css" 6 | 7 | interface TabContactsProps { 8 | keyword?: string; 9 | friends?: any[]; 10 | onClick?: (item: any) => void; 11 | } 12 | 13 | export default class TabContacts extends Component { 14 | 15 | 16 | render(): ReactNode { 17 | return
18 | { 19 | this.props.friends?.map((item: any) => { 20 | if (this.props.keyword && item.channel_name.indexOf(this.props.keyword) !== -1) { 21 | item.channel_name = item.channel_name.replace(this.props.keyword, `${this.props.keyword}`) 22 | } 23 | return { 28 | if(this.props.onClick) { 29 | this.props.onClick(item) 30 | } 31 | }} 32 | /> 33 | }) 34 | } 35 |
36 | } 37 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/tab-file.css: -------------------------------------------------------------------------------- 1 | .wk-tab-file { 2 | width: 100%; 3 | height: 50vh; 4 | display: flex; 5 | overflow: auto; 6 | flex-direction: column; 7 | cursor: pointer; 8 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/tab-group.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-tab-group { 4 | width: 100%; 5 | height: 50vh; 6 | display: flex; 7 | overflow: auto; 8 | flex-direction: column; 9 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/GlobalSearch/tab-group.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { ReactNode } from "react"; 3 | import ItemGroup from "./item-group"; 4 | import WKApp from "../../App"; 5 | import "./tab-group.css" 6 | 7 | interface TabGroupProps { 8 | keyword?: string; 9 | groups?: any[]; 10 | onClick?: (item: any) => void; 11 | } 12 | 13 | export default class TabGroup extends Component { 14 | 15 | 16 | render(): ReactNode { 17 | return
18 | { 19 | this.props.groups?.map((item: any) => { 20 | if (this.props.keyword && item.channel_name.indexOf(this.props.keyword) !== -1) { 21 | item.channel_name = item.channel_name.replace(this.props.keyword, `${this.props.keyword}`) 22 | } 23 | return { 28 | if(this.props.onClick) { 29 | this.props.onClick(item) 30 | } 31 | }} 32 | /> 33 | }) 34 | } 35 |
36 | } 37 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/IconClick/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-iconclick { 3 | padding: 10px; 4 | } 5 | 6 | .wk-iconclick img { 7 | width: 20px; 8 | height: 20px; 9 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/IconClick/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component, ReactNode } from "react"; 3 | import "./index.css" 4 | 5 | export interface IconClickProps { 6 | icon:string 7 | onClick?:()=>void 8 | } 9 | 10 | export default class IconClick extends Component { 11 | render(): ReactNode { 12 | const { icon,onClick } = this.props 13 | return
{ 14 | if(onClick) { 15 | onClick() 16 | } 17 | }}> 18 | 19 |
20 | } 21 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/IconListItem/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-iconlistitem { 3 | background-color: white; 4 | height: 70px; 5 | width: 100%; 6 | cursor: pointer; 7 | position: relative; 8 | } 9 | 10 | .wk-iconlistitem-content { 11 | width: 100%; 12 | height: 100%; 13 | display: flex; 14 | align-items: center; 15 | padding: 0px 20px; 16 | } 17 | 18 | .wk-iconlistitem-content-icon img { 19 | width: 32px; 20 | height: 32px; 21 | } 22 | 23 | .wk-iconlistitem-content-title { 24 | font-size: 14px; 25 | font-weight: 500; 26 | margin-left: 15px; 27 | } 28 | 29 | body[theme-mode=dark] .wk-iconlistitem-content-title { 30 | color: white; 31 | } 32 | 33 | .wk-iconlistitem-content-badge { 34 | position: absolute; 35 | right: 15px; 36 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/IconListItem/index.tsx: -------------------------------------------------------------------------------- 1 | import { Badge } from "@douyinfe/semi-ui"; 2 | import React from "react"; 3 | import { Component, ReactNode } from "react"; 4 | import "./index.css" 5 | 6 | export interface IconListItemProps { 7 | icon: string 8 | title: string 9 | backgroudColor?: string 10 | onClick?: () => void 11 | badge?: number 12 | } 13 | 14 | export default class IconListItem extends Component { 15 | 16 | 17 | render(): ReactNode { 18 | const { icon, title, backgroudColor, onClick, badge } = this.props 19 | return
20 |
21 |
22 | 23 |
24 |
25 | {title} 26 |
27 | { 28 | badge && badge > 0 ?
29 | 30 |
: undefined 31 | } 32 |
33 |
34 | } 35 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/InputEdit/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-inputedit { 3 | width: 100%; 4 | height: 50px; 5 | 6 | } 7 | 8 | .wk-inputedit .semi-input-textarea-wrapper { 9 | background-color: var(--wk-color-item); 10 | } 11 | 12 | .wk-inputedit-placeholder { 13 | font-size: 13px; 14 | color: #999; 15 | margin: 5px 0px 0px 5px; 16 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/InputEdit/index.tsx: -------------------------------------------------------------------------------- 1 | import { TextArea } from "@douyinfe/semi-ui"; 2 | import { Input } from "@douyinfe/semi-ui/lib/es/input"; 3 | import React from "react"; 4 | import { Component } from "react"; 5 | import "./index.css" 6 | 7 | export interface InputEditProps { 8 | // exceeded 表示是否超出最大限制 9 | onChange?:(value:string,exceeded?:boolean)=>void 10 | defaultValue?:string 11 | placeholder?:string 12 | maxCount?:number 13 | allowWrap?:boolean // 是否允许换行 14 | } 15 | 16 | export class InputEdit extends Component{ 17 | 18 | render() { 19 | const {onChange,defaultValue,placeholder,maxCount,allowWrap} = this.props 20 | return
21 | 35 |
{placeholder}
36 |
37 | } 38 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/ListItem/assets/arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/ListItem/assets/arrow_right.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/ListItemAvatar/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/ListItemAvatar/index.css -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/MeInfo/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-meinfo { 3 | background-color: var(--wk-color-secondary); 4 | position: relative; 5 | --wk-height-userInfo-footer: 60px; 6 | --wk-height-userInfo-nav: 44px; 7 | width: 100%; 8 | height: 100%; 9 | } 10 | 11 | .wk-meinfo-sections { 12 | 13 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/MeInfo/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component, ReactNode } from "react"; 2 | import RouteContext from "../../Service/Context"; 3 | import Provider, { IProviderListener } from "../../Service/Provider"; 4 | import RoutePage from "../RoutePage"; 5 | import { MeInfoVM } from "./vm"; 6 | import "./index.css" 7 | import Sections from "../Sections"; 8 | 9 | export interface MeInfoProps { 10 | onClose: ()=>void 11 | } 12 | 13 | export class MeInfo extends Component { 14 | 15 | 16 | render() { 17 | const { onClose } = this.props 18 | return { 22 | if(onClose) { 23 | onClose() 24 | } 25 | }} render={function (context: RouteContext): ReactNode { 26 | 27 | return
28 |
29 | 30 |
31 |
32 | 33 | }}> 34 | }}>
35 | } 36 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/MergeforwardMessageList/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-mergeforwardmessagelist { 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | .wk-mergeforwardmessagelist-content { 8 | width: 100%; 9 | height: 100%; 10 | background-color: var(--wk-color-secondary); 11 | } 12 | 13 | .wk-mergeforwardmessagelist-content-timeline { 14 | display: flex; 15 | align-items: center; 16 | justify-content: center; 17 | } 18 | 19 | .wk-mergeforwardmessagelist-content-msgs { 20 | width: 100%; 21 | height: 100%; 22 | overflow-y: auto; 23 | } 24 | 25 | .wk-mergeforwardmessagelist-content-msg { 26 | display: flex; 27 | width: 100%; 28 | padding: 15px; 29 | background-color: var(--wk-color-item); 30 | } 31 | 32 | .wk-mergeforwardmessagelist-content-msg-info { 33 | display: flex; 34 | width: 100%; 35 | flex-direction: column; 36 | } 37 | 38 | .wk-mergeforwardmessagelist-content-msg-info-first { 39 | display: flex; 40 | width: 100%; 41 | justify-content: space-between; 42 | padding: 0px 15px; 43 | 44 | } 45 | 46 | .wk-mergeforwardmessagelist-content-msg-info-first-name { 47 | font-size: 14px; 48 | color: #999; 49 | } 50 | 51 | .wk-mergeforwardmessagelist-content-msg-info-first-time { 52 | font-size: 12px; 53 | color: #999; 54 | } 55 | 56 | .wk-mergeforwardmessagelist-content-msg-info-second-msgcontent { 57 | padding: 0px 15px; 58 | margin-top: 5px; 59 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/MessageInput/mention.css: -------------------------------------------------------------------------------- 1 | .mentions { 2 | margin: 1em 0; 3 | } 4 | 5 | .mentions--singleLine .mentions__control { 6 | display: inline-block; 7 | width: 130px; 8 | } 9 | .mentions--singleLine .mentions__highlighter { 10 | padding: 1px; 11 | border: 2px inset transparent; 12 | } 13 | .mentions--singleLine .mentions__input { 14 | padding: 1px; 15 | border: 2px inset; 16 | } 17 | 18 | .mentions--multiLine .mentions__control { 19 | font-family: monospace; 20 | font-size: 14pt; 21 | } 22 | .mentions--multiLine .mentions__highlighter { 23 | border: 1px solid transparent; 24 | padding: 9px; 25 | min-height: 63px; 26 | } 27 | .mentions--multiLine .mentions__input { 28 | border: 1px solid silver; 29 | padding: 9px; 30 | outline: 0; 31 | } 32 | 33 | .mentions__suggestions__list { 34 | background-color: white; 35 | border: 1px solid rgba(0, 0, 0, 0.15); 36 | font-size: 10pt; 37 | /* box-shadow: 15px 0px 15px -15px #eee, -15px 0px 15px -15px #eee; */ 38 | } 39 | 40 | .mentions__suggestions__item { 41 | padding: 5px 15px; 42 | border-bottom: 1px solid rgba(0, 0, 0, 0.15); 43 | } 44 | 45 | .mentions__suggestions__item--focused { 46 | background-color: #cee4e5; 47 | } 48 | 49 | .mentions__mention { 50 | position: relative; 51 | z-index: 1; 52 | color: var(--wk-color-theme); 53 | text-shadow: none; 54 | /* text-shadow: 1px 1px 1px white, 1px -1px 1px white, -1px 1px 1px white, 55 | -1px -1px 1px white; */ 56 | /* text-decoration: underline; */ 57 | pointer-events: none; 58 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/MessageInput/mention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/MessageInput/mention.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/comment-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/comment-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/comment.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/copy-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/copy-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/copy.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/delete-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/delete-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/delete.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/favorites-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/favorites-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/favorites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/favorites.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/forward-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/forward-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/forward.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/like-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/like-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/like.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/mulselect-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/mulselect-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/mulselect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/mulselect.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/revoke-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/revoke-hover.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/PopupMenus/icons/revoke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/PopupMenus/icons/revoke.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/QRCodeMy/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-qrcodemy { 4 | width: 100%; 5 | height: 100%; 6 | overflow: hidden; 7 | } 8 | 9 | .wk-qrcodemy-content-qrcodebox { 10 | 11 | width: 100%; 12 | padding: 10px; 13 | display: flex; 14 | align-items: center; 15 | justify-content: center; 16 | 17 | } 18 | 19 | .wk-qrcodemy-content-qrcodeinfo { 20 | background-color: white; 21 | width: 100%; 22 | height: 100%; 23 | border-radius: 8px; 24 | display: flex; 25 | flex-direction: column; 26 | align-items: center; 27 | } 28 | 29 | body[theme-mode=dark] .wk-qrcodemy-content-qrcodeinfo { 30 | background-color: var(--wk-color-secondary-2); 31 | } 32 | 33 | .wk-qrcodemy-content-userinfo { 34 | width: 100%; 35 | display: flex; 36 | align-items: center; 37 | justify-content: center; 38 | flex-direction: column; 39 | padding-top: 15px; 40 | } 41 | 42 | .wk-qrcodemy-content-userinfo-avatar img{ 43 | width: 50px; 44 | height: 50px; 45 | border-radius: 50%; 46 | } 47 | 48 | .wk-qrcodemy-content-qrcode { 49 | width: 100%; 50 | display: flex; 51 | align-items: center; 52 | justify-content: center; 53 | margin-top: 15px; 54 | width: 250px; 55 | height: 250px; 56 | } 57 | 58 | .wk-qrcodemy-content-tip { 59 | font-size: 13px; 60 | text-align: center; 61 | color: #999; 62 | margin: 15px 0px; 63 | } 64 | 65 | .wk-qrcodemy-content-userinfo-name { 66 | font-size: 15px; 67 | font-weight: 500; 68 | } 69 | 70 | body[theme-mode=dark] .wk-qrcodemy-content-userinfo-name { 71 | color: white; 72 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Search/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-search-box { 4 | display: flex; 5 | min-width: 200px; 6 | height: 45px; 7 | background-color: #f4f4f5; 8 | border-radius: 25px; 9 | } 10 | 11 | body[theme-mode=dark] .wk-search-box { 12 | background-color: var(--wk-color-secondary-2); 13 | } 14 | 15 | .wk-search-icon { 16 | display: flex; 17 | align-items: center; 18 | margin-left: 20px; 19 | } 20 | 21 | .wk-search-input { 22 | margin-left: 10px; 23 | max-width: 100px; 24 | } 25 | 26 | .wk-search-input input { 27 | flex: 1 1; 28 | height: 32px; 29 | font-size: 12px; 30 | line-height: 18px; 31 | background-color: transparent; 32 | color: #1f2329; 33 | padding: 0; 34 | outline: none; 35 | border: none; 36 | height: 100%; 37 | } 38 | 39 | body[theme-mode=dark] .wk-search-input input { 40 | color: white; 41 | } 42 | 43 | 44 | .wk-search-input .semi-input-wrapper{ 45 | height: 100%; 46 | background-color: white; 47 | } 48 | 49 | body[theme-mode=dark] .wk-search-input .semi-input-wrapper { 50 | background-color: var(--wk-color-secondary-2); 51 | } 52 | 53 | .wk-search-input .semi-input-wrapper-focus { 54 | border: none !important; 55 | } 56 | 57 | .wk-search-input .semi-input-wrapper-focus:active { 58 | border-color: none !important; 59 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Search/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import "./index.css" 3 | import { Input } from "@douyinfe/semi-ui/lib/es/input"; 4 | import { IconSearchStroked } from '@douyinfe/semi-icons'; 5 | 6 | export interface SearchProps { 7 | placeholder?: string 8 | onChange?:(v:string)=>void 9 | onEnterPress?:()=>void 10 | } 11 | 12 | export default class Search extends Component { 13 | 14 | render() { 15 | const { placeholder,onChange,onEnterPress } = this.props 16 | return
17 |
18 | 19 |
20 |
21 | {/* { 22 | if(onChange) { 23 | onChange(v.target.value) 24 | } 25 | }} placeholder={placeholder} type="text" style={{ fontSize: '17px' }} /> */} 26 | 27 | { 28 | if(onChange) { 29 | onChange(v) 30 | } 31 | }} placeholder={placeholder} style={{ fontSize: '17px' }} onEnterPress={onEnterPress} > 32 |
33 |
34 | } 35 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Sections/index.css: -------------------------------------------------------------------------------- 1 | .wk-sections { 2 | 3 | } 4 | 5 | .wk-section { 6 | margin-top: 10px; 7 | } 8 | 9 | .wk-section:first-child { 10 | margin-top: 0px; 11 | } 12 | 13 | .wk-section-rows { 14 | 15 | } 16 | 17 | .wk-section-title { 18 | padding: 5px 15px; 19 | color: var( --wk-color-font-tip); 20 | font-size: 13px; 21 | } 22 | 23 | .wk-section-row { 24 | 25 | } 26 | 27 | .wk-section-subtitle { 28 | padding: 5px 15px; 29 | color: var( --wk-color-font-tip); 30 | font-size: 13px; 31 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Sections/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import { Section } from "../../Service/Section"; 3 | import "./index.css" 4 | 5 | export interface SectionsProps { 6 | sections: Section[] 7 | } 8 | 9 | export default class Sections extends Component { 10 | 11 | render() { 12 | const { sections } = this.props 13 | return
14 | { 15 | sections.map((section, i) => { 16 | return
17 | { 18 | section.title && section.title !== "" ?
{section.title}
: undefined 19 | } 20 | 21 |
22 | { 23 | section.rows?.map((row, j) => { 24 | return
25 | 26 |
27 | }) 28 | } 29 | 30 |
31 | { 32 | section.subtitle && section.subtitle !== "" ?
33 | {section.subtitle } 34 |
: undefined 35 | } 36 |
37 | }) 38 | } 39 |
40 | } 41 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/SexSelect/index.css: -------------------------------------------------------------------------------- 1 | .wk-sex-select { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | 6 | .wk-sex-select-item { 7 | background-color: white; 8 | height: 50px; 9 | width: 100%; 10 | background-color: var(--wk-color-item); 11 | display: flex; 12 | align-items: center; 13 | cursor: pointer; 14 | } 15 | 16 | .wk-sex-select-item .checked { 17 | color: var(--wk-color-theme); 18 | margin-left: 40px; 19 | } 20 | 21 | .wk-sex-select-item .sex { 22 | margin-left: 20px; 23 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/SexSelect/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component } from "react"; 3 | import { IconCheckboxTick } from '@douyinfe/semi-icons'; 4 | import "./index.css" 5 | 6 | export enum Sex { 7 | Female, 8 | Male 9 | } 10 | 11 | export interface SexSelectProps { 12 | sex: Sex 13 | onSelect?: (sex: Sex) => void 14 | 15 | } 16 | 17 | export interface SexSelectState { 18 | currentSex:Sex 19 | } 20 | 21 | export class SexSelect extends Component{ 22 | 23 | render() { 24 | const { onSelect,sex } = this.props 25 | return
26 |
{ 27 | if (onSelect) { 28 | onSelect(Sex.Male) 29 | } 30 | }}> 31 |
32 |
33 |
34 |
{ 35 | if (onSelect) { 36 | onSelect(Sex.Female) 37 | } 38 | }}> 39 |
40 |
41 |
42 |
43 | } 44 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/SmallTableEdit/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-smalltableedit { 3 | overflow-y: auto; 4 | width: 100%; 5 | height: 100%; 6 | } 7 | 8 | .wk-smalltableedit-content-item{ 9 | display: flex; 10 | padding: 5px 15px; 11 | background-color: var(--wk-color-item); 12 | } 13 | 14 | .wk-smalltableedit-content-item-avatar { 15 | display: flex; 16 | align-items: center; 17 | justify-content: center; 18 | cursor: pointer; 19 | } 20 | 21 | 22 | .wk-smalltableedit-content-item-avatar img { 23 | width: 32px; 24 | height: 32px; 25 | border-radius: 50%; 26 | } 27 | 28 | .wk-smalltableedit-content-item-name { 29 | margin-left: 15px; 30 | max-width: 200px; 31 | line-height: 40px; 32 | color: var(--wk-text-item); 33 | 34 | } 35 | 36 | .wk-smalltableedit-content-item-action { 37 | display: flex; 38 | align-items: center; 39 | padding: 10px; 40 | cursor: pointer; 41 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Subscribers/assets/icon_add_more_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Subscribers/assets/icon_add_more_gray.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Subscribers/assets/icon_delete_more_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/Subscribers/assets/icon_delete_more_gray.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Subscribers/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-subscribers { 4 | width: 100%; 5 | display: flex; 6 | flex-direction: column; 7 | } 8 | 9 | .wk-subscribers-content { 10 | display: flex; 11 | flex-wrap: wrap; 12 | padding-left: 20px; 13 | } 14 | 15 | .wk-subscribers-item { 16 | width: 60px; 17 | height: 80px; 18 | font-size: 12px; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | cursor: pointer; 23 | 24 | } 25 | 26 | .wk-subscribers-item img { 27 | width: 50px; 28 | height: 50px; 29 | border-radius: 40%; 30 | } 31 | 32 | .wk-subscribers-item-name { 33 | font-size: 12px; 34 | color: rgba(9,30,66,.87); 35 | text-overflow: ellipsis; 36 | width: 100%; 37 | height: 14px; 38 | overflow: hidden; 39 | white-space: nowrap; 40 | text-align: center; 41 | margin-top: 5px; 42 | line-height: 12px; 43 | } 44 | 45 | body[theme-mode=dark] .wk-subscribers-item-name { 46 | color: white; 47 | } 48 | 49 | .wk-subscribers-more { 50 | font-size: 14px; 51 | margin-top: 10px; 52 | color: var(--wk-color-theme); 53 | cursor: pointer; 54 | text-align: center; 55 | } 56 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Subscribers/list.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-subscrierlist { 4 | background-color: white; 5 | width: 100%; 6 | height: 100%; 7 | overflow: scroll; 8 | } 9 | 10 | .wk-subscrierlist-list-item { 11 | display: flex; 12 | align-items: center; 13 | padding: 1rem; 14 | cursor: pointer; 15 | } 16 | 17 | .wk-subscrierlist-item-name { 18 | margin-left: 1rem; 19 | text-overflow: ellipsis; 20 | overflow: hidden; 21 | white-space: nowrap; 22 | max-width: 10rem; 23 | } 24 | 25 | .wk-subscrierlist-item-content { 26 | display: flex; 27 | width: 100%; 28 | justify-content: space-between; 29 | } 30 | 31 | .wk-subscrierlist-item-desc { 32 | font-size: 14px; 33 | color: #666; 34 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/Table/index.tsx: -------------------------------------------------------------------------------- 1 | import { Table } from "@douyinfe/semi-ui" 2 | import { TableProps } from "@douyinfe/semi-ui/lib/es/table" 3 | import React,{ Component } from "react" 4 | 5 | export interface WKTableProps extends TableProps { 6 | 7 | } 8 | 9 | export default class WKTable extends Component { 10 | 11 | render() { 12 | const {columns,dataSource} = this.props 13 | return columns={columns} dataSource={dataSource}> 14 | 15 | 16 | } 17 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/UserSelect/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-userselect { 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | .wk-contactsselect { 8 | width: 100%; 9 | height: 100%; 10 | overflow: hidden; 11 | } 12 | 13 | .wk-contactsselect-content { 14 | width: 100%; 15 | height: calc(100% - var(--wk-height-viewqueueheader)); 16 | 17 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKAvatar/index.css: -------------------------------------------------------------------------------- 1 | .wk-avatar { 2 | width: 50px; 3 | height: 50px; 4 | border-radius: 40%; 5 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKAvatarEditor/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { Component } from "react" 3 | import AvatarEditor from "react-avatar-editor" 4 | 5 | 6 | 7 | interface WKAvatarEditorProps { 8 | file: any 9 | } 10 | 11 | export class WKAvatarEditor extends Component { 12 | editor?: AvatarEditor|null 13 | 14 | getImageScaledToCanvas(): HTMLCanvasElement|undefined { 15 | return this.editor?.getImageScaledToCanvas() 16 | } 17 | 18 | render(): React.ReactNode { 19 | const { file } = this.props 20 | return { 22 | this.editor = rf 23 | }} 24 | image={file} 25 | width={262} 26 | height={262} 27 | border={70} 28 | color={[255, 255, 255, 0.6]} // RGBA 29 | borderRadius={280} 30 | scale={1.2} 31 | rotate={0} 32 | /> 33 | } 34 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKBase/index.css: -------------------------------------------------------------------------------- 1 | .wk-base { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | 6 | .wk-base-modal .semi-modal-content { 7 | border: none !important; 8 | padding: 0px !important; 9 | } 10 | 11 | .wk-base-modal .semi-modal-close { 12 | display: none; 13 | } 14 | 15 | .wk-base-modal .semi-modal-body-wrapper { 16 | margin: 0px; 17 | } 18 | 19 | .wk-base-modal-userinfo .semi-modal-body { 20 | height: 500px; 21 | } 22 | 23 | /* 加入组织 */ 24 | .wk-base-modal-join-org .semi-modal-content { 25 | border: none !important; 26 | padding: 12px !important; 27 | } 28 | .wk-base-modal-join-org .semi-modal-header { 29 | margin: 12px !important; 30 | } 31 | .wk-base-modal-join-org .semi-modal-body-wrapper { 32 | margin: 0px; 33 | } 34 | .wk-base-modal-join-org .semi-modal-body { 35 | height: 420px; 36 | } 37 | 38 | .semi-button.semi-button-primary:focus-visible, .semi-button.semi-button-secondary:focus-visible, .semi-button.semi-button-tertiary:focus-visible, .semi-button.semi-button-warning:focus-visible, .semi-button.semi-button-danger:focus-visible { 39 | outline: none; 40 | } 41 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKNavHeader/index.css: -------------------------------------------------------------------------------- 1 | 2 | :root { 3 | --wk-height-navheader: 64px; 4 | } 5 | 6 | .wk-navheader { 7 | 8 | height: var(--wk-height-navheader); 9 | width: 100%; 10 | background-color: var(--wk-color-secondary); 11 | } 12 | 13 | .wk-navheader-content { 14 | padding: 0px 20px; 15 | width: 100%; 16 | height: 100%; 17 | display: flex; 18 | align-items: center; 19 | justify-content: space-between; 20 | } 21 | 22 | .wk-navheader-content-left-title { 23 | font-size: 24px; 24 | font-weight: 500; 25 | } 26 | 27 | body[theme-mode=dark] .wk-navheader-content-left-title { 28 | color: white; 29 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKNavHeader/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Component, ReactNode } from "react"; 3 | import "./index.css" 4 | 5 | export interface WKNavHeaderProps { 6 | title:string 7 | rightView?:JSX.Element 8 | } 9 | 10 | export default class WKNavMainHeader extends Component { 11 | 12 | render(): ReactNode { 13 | const {rightView,title} = this.props 14 | return
15 |
16 |
17 |
18 | {title} 19 |
20 |
21 |
22 | {rightView} 23 |
24 |
25 |
26 | } 27 | } 28 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKViewQueue/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-viewqueue { 3 | width: 100%; 4 | height: 100%; 5 | position: relative; 6 | } 7 | 8 | .wk-viewqueue-route { 9 | width: 100%; 10 | height: 100%; 11 | position: relative; 12 | } 13 | 14 | .wk-viewqueue-view{ 15 | width: 100%; 16 | height: 100%; 17 | position: absolute; 18 | background-color: var(--wk-color-secondary); 19 | transition: transform var(--wk-layer-transition); 20 | overflow: hidden; 21 | } 22 | 23 | .wk-viewqueue-view-in { 24 | 25 | animation: routeAnimationIn 0.25s; 26 | -webkit-animation: routeAnimationIn 0.25s; /* Safari 与 Chrome */ 27 | } 28 | 29 | .wk-viewqueue-view-out { 30 | animation: routeAnimationOut 0.5s; 31 | -webkit-animation: routeAnimationOut 0.5s; /* Safari 与 Chrome */ 32 | } 33 | 34 | @keyframes routeAnimationOut { 35 | from { 36 | transform: translate3d(0, 0, 0); 37 | } 38 | to { 39 | transform: translate3d(100vw, 0, 0); 40 | } 41 | } 42 | 43 | @keyframes routeAnimationIn { 44 | from { 45 | transform: translate3d(100vw, 0, 0); 46 | } 47 | to { 48 | transform: translate3d(0, 0, 0); 49 | } 50 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKViewQueueHeader/assets/nav_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/WKViewQueueHeader/assets/nav_back.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKViewQueueHeader/assets/nav_back_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Components/WKViewQueueHeader/assets/nav_back_dark.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Components/WKViewQueueHeader/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | :root { 4 | --wk-height-viewqueueheader: 50px; 5 | } 6 | 7 | .wk-viewqueueheader { 8 | background-color: var(--wk-color-secondary); 9 | height: var(--wk-height-viewqueueheader); 10 | width: 100%; 11 | position: relative; 12 | } 13 | 14 | .wk-viewqueueheader-content { 15 | width: 100%; 16 | height: 100%; 17 | display: flex; 18 | align-items: center; 19 | justify-content: center; 20 | } 21 | 22 | .wk-viewqueueheader-content-title { 23 | font-size: 17px; 24 | font-weight: 500; 25 | max-width: 200px; 26 | white-space: nowrap; 27 | text-overflow: ellipsis; 28 | overflow: hidden; 29 | } 30 | 31 | body[theme-mode=dark] .wk-viewqueueheader-content-title { 32 | color: white; 33 | } 34 | 35 | .wk-viewqueueheader-back { 36 | position: absolute; 37 | height: 100%; 38 | display: flex; 39 | align-items: center; 40 | cursor: pointer; 41 | padding: 0px 15px; 42 | } 43 | 44 | .wk-viewqueueheader-back img { 45 | width: 10px; 46 | height: 15px; 47 | } 48 | 49 | .wk-viewqueueheader-content-action { 50 | position: absolute; 51 | right: 15px; 52 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/ApproveGroupMember/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-message-system { 3 | padding: 10px 20px; 4 | width: 85%; 5 | margin: 0 auto; 6 | text-align: center; 7 | margin-top: 15px; 8 | font-size: 12px; 9 | color: rgba(9,30,66,.87); 10 | white-space: pre-line; 11 | } 12 | .wk-message-approve { 13 | margin-left: 10px; 14 | color: #f65835; 15 | } 16 | body[theme-mode=dark] .wk-message-system { 17 | color: #999; 18 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/ApproveGroupMember/index.tsx: -------------------------------------------------------------------------------- 1 | import { SystemContent } from "wukongimjssdk" 2 | import React from "react" 3 | import { MessageCell } from "../MessageCell" 4 | import './index.css' 5 | import { MessageWrap } from "../../Service/Model" 6 | import WKApp from "../../App" 7 | 8 | export class ApproveGroupMemberCell extends MessageCell { 9 | 10 | render() { 11 | const { message } = this.props 12 | const content = message.content as SystemContent 13 | return 14 | } 15 | 16 | async goApproval(message: MessageWrap) { 17 | let inviteNo = message.content["content"]["invite_no"] 18 | const resp = await WKApp.apiClient.get(`groups/${message.channel.channelID}/member/h5confirm`, { 19 | param: { invite_no: inviteNo || '' }, 20 | }); 21 | if (resp) { 22 | let url = resp["url"] 23 | if (url) { 24 | window.open(url, '_blank'); 25 | } 26 | } 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Base/MessageSendBubbleFirst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Messages/Base/MessageSendBubbleFirst.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Base/msg_status_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Messages/Base/msg_status_fail.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Base/tail.tsx: -------------------------------------------------------------------------------- 1 | import { MessageStatus } from "wukongimjssdk"; 2 | import moment from "moment"; 3 | import React from "react"; 4 | import { Component, CSSProperties } from "react"; 5 | import { MessageWrap } from "../../Service/Model"; 6 | 7 | interface MessageTrailProps { 8 | message: MessageWrap 9 | timeStyle?: CSSProperties 10 | statusStyle?:CSSProperties 11 | } 12 | 13 | 14 | export default class MessageTrail extends Component { 15 | 16 | getMessageStatusIcon() { 17 | const { message } = this.props 18 | if(!message.send) { 19 | return null 20 | } 21 | if(message.status === MessageStatus.Fail) { 22 | return null 23 | } 24 | if(message.status === MessageStatus.Wait) { 25 | return 26 | } 27 | if(message.readedCount>=1) { 28 | return 29 | } 30 | return 31 | } 32 | 33 | render() { 34 | const { message,timeStyle,statusStyle } = this.props 35 | return 36 | {message.remoteExtra?.isEdit?已编辑:null} 37 | {moment(message.timestamp * 1000).format('HH:mm')} 38 | {message.send? {this.getMessageStatusIcon()}:null} 39 | 40 | } 41 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Card/index.css: -------------------------------------------------------------------------------- 1 | .wk-message-card { 2 | background-color: white; 3 | width: 300px; 4 | cursor: pointer; 5 | border-radius: 8px; 6 | } 7 | 8 | body[theme-mode=dark] .wk-message-card { 9 | background-color: var(--wk-color-secondary); 10 | } 11 | 12 | 13 | .wk-message-card-content { 14 | display: flex; 15 | padding: 10px; 16 | align-items: center; 17 | } 18 | 19 | .wk-message-card-content-name { 20 | margin-left: 20px; 21 | color: var(--wk-text-item); 22 | 23 | } 24 | 25 | .wk-message-card-bottom { 26 | position: relative; 27 | display: flex; 28 | align-items: center; 29 | justify-content: space-between; 30 | padding: 0px 10px 5px 10px; 31 | } 32 | 33 | .wk-message-card-bottom-flag { 34 | font-size: 12px; 35 | color: #999; 36 | } 37 | 38 | .wk-message-card-bottom-time { 39 | position: absolute; 40 | right: 10px; 41 | top: -5px; 42 | color: #999 !important; 43 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Flame/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { MessageWrap } from "../../Service/Model" 3 | import MessageBase from "../Base" 4 | import { MessageCell } from "../MessageCell" 5 | 6 | 7 | 8 | export class FlameMessageCell extends MessageCell { 9 | 10 | render() { 11 | const { message, context } = this.props 12 | return { 13 | }}>
{FlameMessageCell.tip(message)}
14 | } 15 | 16 | static tip(message: MessageWrap) { 17 | return "[此消息为阅后即焚消息,请在手机端查看]" 18 | } 19 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/HistorySplit/index.tsx: -------------------------------------------------------------------------------- 1 | import { MessageContent } from "wukongimjssdk"; 2 | import React from "react"; 3 | import { MessageContentTypeConst } from "../../Service/Const"; 4 | import { MessageCell } from "../MessageCell"; 5 | 6 | import './index.css' 7 | 8 | 9 | export class HistorySplitContent extends MessageContent { 10 | 11 | public get contentType() { 12 | return MessageContentTypeConst.historySplit 13 | } 14 | } 15 | 16 | export class HistorySplitCell extends MessageCell { 17 | 18 | render() { 19 | return
20 |
21 |
以上为历史消息
22 |
23 |
24 | } 25 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/JoinOrganization/index.css: -------------------------------------------------------------------------------- 1 | .wk-join-oraganization { 2 | background-color: white; 3 | cursor: pointer; 4 | border-radius: 8px; 5 | width: 100%; 6 | } 7 | 8 | body[theme-mode=dark] .wk-join-oraganization { 9 | background-color: var(--wk-color-secondary); 10 | } 11 | 12 | 13 | .wk-join-oraganization-content { 14 | display: flex; 15 | padding: 10px; 16 | align-items: center; 17 | } 18 | 19 | .wk-join-oraganization-content-name { 20 | margin-left: 20px; 21 | color: var(--wk-text-item); 22 | } 23 | 24 | .wk-join-oraganization-bottom { 25 | position: relative; 26 | display: flex; 27 | align-items: center; 28 | justify-content: space-between; 29 | padding: 0px 10px 5px 10px; 30 | } 31 | 32 | .wk-join-oraganization-bottom-flag { 33 | font-size: 12px; 34 | color: #999; 35 | } 36 | 37 | .wk-join-oraganization-bottom-time { 38 | position: absolute; 39 | right: 10px; 40 | top: -5px; 41 | color: #999 !important; 42 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Location/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-message-location { 3 | cursor: pointer; 4 | } 5 | 6 | .wk-message-location-content { 7 | width: 250px; 8 | background-color: white; 9 | border-radius: 4px; 10 | } 11 | 12 | body[theme-mode=dark] .wk-message-location-content{ 13 | background-color: var(--wk-color-secondary); 14 | } 15 | 16 | 17 | .wk-message-location-content-title { 18 | color: var(--wk-text-item); 19 | font-size: 16px; 20 | padding: 5px 5px 0px 5px; 21 | } 22 | 23 | .wk-message-location-content-address { 24 | color: #666; 25 | font-size: 12px; 26 | padding: 0px 5px 5px 5px; 27 | } 28 | 29 | .wk-message-location-content-locationimg { 30 | width: 250px; 31 | height: 100px; 32 | overflow: hidden; 33 | background-size: cover; 34 | } 35 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/LottieSticker/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Messages/LottieSticker/index.css -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Mergeforward/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-mergeforwards { 4 | width: 300px; 5 | background-color: var(--wk-message-item); 6 | border-radius: 8px; 7 | cursor: pointer; 8 | } 9 | 10 | 11 | 12 | .wk-mergeforwards-content { 13 | padding: 10px 10px 0px 10px; 14 | color: black; 15 | 16 | } 17 | 18 | .wk-mergeforwards-content-title { 19 | font-size: 15px; 20 | font-weight: 500; 21 | color: var(--wk-message-color); 22 | } 23 | 24 | .wk-mergeforwards-content-items { 25 | padding-bottom: 5px; 26 | } 27 | 28 | .wk-mergeforwards-content-items .wk-mergeforwards-content-item { 29 | white-space: nowrap; 30 | width: 100%; 31 | overflow: hidden; 32 | text-overflow: ellipsis; 33 | font-size: 13px; 34 | color: #999 !important; 35 | } 36 | 37 | .wk-mergeforwards-content-tip { 38 | display: flex; 39 | justify-content: space-between; 40 | color: #999 !important; 41 | font-size: 13px; 42 | padding: 2px 0px; 43 | } 44 | 45 | .wk-mergeforwards-content-tip p { 46 | margin-bottom: 0px; 47 | } 48 | 49 | .wk-mergeforwards-content-tip p:last-child { 50 | margin-top: -4px; 51 | } 52 | 53 | .wk-mergeforwards-content-line { 54 | width: 100%; 55 | background-color: var(--wk-line-color); 56 | height: 1px; 57 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/MessageCell.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import ConversationContext from "../Components/Conversation/context"; 3 | import { MessageWrap } from "../Service/Model"; 4 | 5 | 6 | export interface MessageBaseCellProps { 7 | message: MessageWrap 8 | context: ConversationContext 9 | } 10 | 11 | class MessageBaseCellPropsImp implements MessageBaseCellProps { 12 | message!: MessageWrap; 13 | context!: ConversationContext 14 | 15 | } 16 | export class MessageBaseCell

extends Component { 17 | 18 | 19 | } 20 | 21 | export class MessageCell

extends MessageBaseCell { 22 | 23 | render() { 24 | return

MessageCell
25 | } 26 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Revoke/index.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Screenshot/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Messages/Screenshot/index.css -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Screenshot/index.tsx: -------------------------------------------------------------------------------- 1 | import { Channel, ChannelTypePerson, WKSDK, MessageContent } from "wukongimjssdk"; 2 | import React from "react"; 3 | import WKApp from "../../App"; 4 | import { MessageContentTypeConst } from "../../Service/Const"; 5 | import { MessageCell } from "../MessageCell"; 6 | 7 | 8 | export class ScreenshotContent extends MessageContent { 9 | fromUID!: string 10 | fromName!: string 11 | 12 | 13 | get tip() { 14 | let name = "" 15 | if (this.fromUID == WKApp.loginInfo.uid) { 16 | name = "你" 17 | } else { 18 | let channelInfo = WKSDK.shared().channelManager.getChannelInfo(new Channel(this.fromUID, ChannelTypePerson)) 19 | if (channelInfo) { 20 | name = channelInfo?.orgData.displayName 21 | } else { 22 | name = this.fromName 23 | } 24 | } 25 | return `${name}在聊天中截屏了` 26 | } 27 | 28 | decodeJSON(content: any): void { 29 | this.fromUID = content["from_uid"] 30 | this.fromName = content["from_name"] 31 | } 32 | 33 | get contentType() { 34 | return MessageContentTypeConst.screenshot 35 | } 36 | 37 | get conversationDigest() { 38 | return this.tip 39 | } 40 | 41 | } 42 | 43 | export class ScreenshotCell extends MessageCell { 44 | render() { 45 | const { message } = this.props 46 | let content = message.content as ScreenshotContent 47 | return
{content.tip}
48 | } 49 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/SignalMessage/signalmessage.tsx: -------------------------------------------------------------------------------- 1 | import { MessageSignalContent } from "wukongimjssdk" 2 | import React from "react" 3 | import MessageBase from "../Base" 4 | import { MessageCell } from "../MessageCell" 5 | 6 | export class SignalMessageContent extends MessageSignalContent { 7 | 8 | public get conversationDigest(): string { 9 | return "此消息已采用端对端加密,web端无法解密,请在手机端查看" 10 | } 11 | } 12 | 13 | export class SignalMessageCell extends MessageCell { 14 | 15 | render() { 16 | const { message, context } = this.props 17 | return { 18 | }}>
此消息已采用端对端加密,web端无法解密,请在手机端查看
19 | } 20 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/System/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-message-system { 3 | padding: 10px 20px; 4 | width: 85%; 5 | margin: 0 auto; 6 | text-align: center; 7 | margin-top: 15px; 8 | font-size: 12px; 9 | color: rgba(9,30,66,.87); 10 | white-space: pre-line; 11 | } 12 | body[theme-mode=dark] .wk-message-system { 13 | color: #999; 14 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/System/index.tsx: -------------------------------------------------------------------------------- 1 | import { SystemContent } from "wukongimjssdk" 2 | import React from "react" 3 | import { MessageCell } from "../MessageCell" 4 | import './index.css' 5 | 6 | export class SystemCell extends MessageCell { 7 | 8 | render() { 9 | const {message} = this.props 10 | const content = message.content as SystemContent 11 | return
{content.displayText}
12 | } 13 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Time/index.tsx: -------------------------------------------------------------------------------- 1 | import { MessageContent } from "wukongimjssdk"; 2 | import moment from 'moment' 3 | import React from "react"; 4 | import { MessageContentTypeConst } from "../../Service/Const"; 5 | import { MessageCell } from "../MessageCell"; 6 | 7 | import './index.css' 8 | 9 | 10 | export class TimeContent extends MessageContent { 11 | timestamp?: number 12 | constructor(timestamp?:number) { 13 | super() 14 | this.timestamp = timestamp 15 | } 16 | 17 | public get contentType() { 18 | return MessageContentTypeConst.time 19 | } 20 | } 21 | 22 | export class TimeCell extends MessageCell { 23 | 24 | formatMessageTime(timestamp: number) { 25 | return moment(timestamp * 1000).format('MM月DD日'); 26 | } 27 | 28 | render() { 29 | const { message } = this.props 30 | const content = message.content as TimeContent 31 | return
32 |
33 |
{this.formatMessageTime(content.timestamp||0)}
34 |
35 |
36 | } 37 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Typing/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Messages/Typing/index.css -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Typing/index.tsx: -------------------------------------------------------------------------------- 1 | import { MessageContent } from "wukongimjssdk" 2 | import React from "react" 3 | import { BeatLoader } from "react-spinners" 4 | import { MessageContentTypeConst } from "../../Service/Const" 5 | import MessageBase from "../Base" 6 | import { MessageCell } from "../MessageCell" 7 | 8 | export class TypingContent extends MessageContent { 9 | fromUID: string 10 | fromName: string 11 | 12 | constructor(fromUID: string, fromName: string) { 13 | super() 14 | this.fromUID = fromUID 15 | this.fromName = fromName 16 | } 17 | 18 | public get contentType() { 19 | return MessageContentTypeConst.typing 20 | } 21 | 22 | } 23 | 24 | 25 | export class TypingCell extends MessageCell { 26 | 27 | render() { 28 | const { message,context } = this.props 29 | return 30 |
31 | 32 |
33 |
34 | } 35 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Unknown/index.tsx: -------------------------------------------------------------------------------- 1 | import { UnknownContent } from "wukongimjssdk"; 2 | import React from "react"; 3 | import MessageBase from "../Base"; 4 | import { MessageCell } from "../MessageCell"; 5 | 6 | 7 | export class UnknownCell extends MessageCell { 8 | render() { 9 | const {message,context} = this.props 10 | const content = message.content as UnknownContent 11 | return [此消息不支持查看,请至手机端查看详情({content.realContentType})] 12 | } 13 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Unsupport/index.tsx: -------------------------------------------------------------------------------- 1 | import { MessageContent } from "wukongimjssdk"; 2 | import React from "react"; 3 | import MessageBase from "../Base"; 4 | import { MessageCell } from "../MessageCell"; 5 | 6 | const tip = "[收到一条网页版暂不支持的消息类型,请在手机上查看]" 7 | 8 | export class UnsupportContent extends MessageContent { 9 | 10 | 11 | get conversationDigest() { 12 | return tip 13 | } 14 | 15 | } 16 | 17 | 18 | export class UnsupportCell extends MessageCell { 19 | render() { 20 | const {message,context} = this.props 21 | return {tip} 22 | } 23 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Messages/Video/index.css: -------------------------------------------------------------------------------- 1 | 2 | .wk-message-video-content { 3 | display: flex; 4 | width: 100%; 5 | height: 100%; 6 | flex-direction: column; 7 | } 8 | 9 | .wk-message-video-content-time { 10 | align-items: center; 11 | background-color: rgba(0,0,0,.35); 12 | border-radius: 12px; 13 | color: #fff; 14 | display: flex; 15 | font-size: 12px; 16 | height: 1.125rem; 17 | left: 6px; 18 | line-height: 1; 19 | padding: 0 6px; 20 | position: absolute; 21 | top: 6px; 22 | -webkit-user-select: none; 23 | -moz-user-select: none; 24 | -ms-user-select: none; 25 | user-select: none; 26 | z-index: 2; 27 | } 28 | 29 | .wk-message-video-content-video img { 30 | border-radius: 4px; 31 | cursor: pointer; 32 | } 33 | 34 | .flexible-modal { 35 | position: absolute; 36 | z-index: 1; 37 | border: 1px solid #ccc; 38 | background: white; 39 | } 40 | .flexible-modal-mask { 41 | position: fixed; 42 | height: 100%; 43 | background: rgba(55, 55, 55, 0.6); 44 | top:0; 45 | left:0; 46 | right:0; 47 | bottom:0; 48 | } 49 | .flexible-modal-resizer { 50 | position:absolute; 51 | right:0; 52 | bottom:0; 53 | cursor:se-resize; 54 | margin:5px; 55 | border-bottom: solid 2px #333; 56 | border-right: solid 2px #333; 57 | } 58 | .flexible-modal-drag-area{ 59 | background: rgba(22, 22, 333, 0.2); 60 | height: 50px; 61 | position:absolute; 62 | right:0; 63 | top:0; 64 | cursor:move; 65 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Service/Context.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | export interface FinishButtonContext { 6 | loading(loading:boolean):void 7 | disable(disable:boolean):void 8 | } 9 | 10 | export class RouteContextConfig { 11 | title?: string 12 | showFinishButton?: boolean 13 | finishButtonTitle?: string 14 | onFinish?: () => void 15 | onFinishContext?:(finishButtonContext:FinishButtonContext) => void 16 | 17 | constructor(v: { title?: string, showFinishButton?: boolean, finishButtonTitle?: string, onFinish?: () => void,onFinishContext?:(finishButtonContext:FinishButtonContext) => void }) { 18 | this.title = v.title 19 | this.showFinishButton = v.showFinishButton 20 | this.finishButtonTitle = v.finishButtonTitle 21 | this.onFinish = v.onFinish 22 | this.onFinishContext = v.onFinishContext 23 | } 24 | } 25 | 26 | export default interface RouteContext { 27 | push(view: JSX.Element, config?: RouteContextConfig): void 28 | pop(): void 29 | popToRoot():void 30 | setRouteData(data:T):void 31 | routeData():T 32 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Service/Menus.ts: -------------------------------------------------------------------------------- 1 | import { EndpointCategory, EndpointID } from "./Const"; 2 | import { EndpointManager } from "./Module"; 3 | 4 | 5 | export default class MenusManager { 6 | private constructor() { 7 | } 8 | setRefresh?:()=>void 9 | public static shared = new MenusManager() 10 | register(sid: string, f: (param:any) => Menus,sort?:number) { 11 | EndpointManager.shared.setMethod( 12 | `${EndpointID.menusPrefix}${sid}`, (param) => f(param), 13 | { category: EndpointCategory.menus,sort:sort }); 14 | } 15 | menusList(): Menus[] { 16 | return EndpointManager.shared.invokes(EndpointCategory.menus, {}); 17 | } 18 | 19 | refresh() { 20 | if(this.setRefresh) { 21 | this.setRefresh() 22 | } 23 | } 24 | } 25 | 26 | 27 | export class Menus { 28 | id!: string; 29 | title!: string; 30 | icon!: JSX.Element; 31 | selectedIcon!: JSX.Element 32 | routePath!: string; 33 | onPress?: () => void; 34 | badge?: number 35 | 36 | constructor(id: string, routePath: string, title: string, icon: JSX.Element, selectedIcon: JSX.Element, onPress?: () => void) { 37 | this.id = id 38 | this.title = title 39 | this.icon = icon 40 | this.selectedIcon = selectedIcon 41 | this.routePath = routePath 42 | this.onPress = onPress 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Service/MessageManager.tsx: -------------------------------------------------------------------------------- 1 | import { MessageContentType } from "wukongimjssdk" 2 | import { ElementType } from "react" 3 | 4 | 5 | export default class MessageManager { 6 | cellHandlerMap: Map ElementType> = new Map() 7 | private messageCellFactor?: (contentType: number) => ElementType | undefined 8 | // 注册cell 9 | registerCell(contentType: number, handler: () => ElementType) { 10 | this.cellHandlerMap.set(contentType, handler) 11 | } 12 | registerMessageFactor(messageCellFactor: (contentType: number) => ElementType | undefined) { 13 | this.messageCellFactor = messageCellFactor 14 | } 15 | // 获取cell 16 | getCell(contentType: number) { 17 | const handler = this.cellHandlerMap.get(contentType) 18 | if (handler) { 19 | return handler() 20 | } 21 | if (this.messageCellFactor) { 22 | const cell = this.messageCellFactor(contentType) 23 | if (cell) { 24 | return cell 25 | } 26 | } 27 | 28 | const unknownHandler = this.cellHandlerMap.get(MessageContentType.unknown) 29 | if (unknownHandler) { 30 | return unknownHandler() 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Service/StorageService.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | export default class StorageService { 4 | private constructor() { 5 | } 6 | public static shared = new StorageService() 7 | 8 | setItem(key:string,value:string) { 9 | localStorage.setItem(key, value) 10 | } 11 | 12 | getItem(key:string) { 13 | return localStorage.getItem(key) 14 | } 15 | 16 | removeItem(key:string) { 17 | localStorage.removeItem(key) 18 | } 19 | } -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/const.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | export const SuperGroup = 1 // 超级群 -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/excel.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/file.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/pdf.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/ppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/ppt.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/rar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/rar.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/word.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/word.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/Utils/extends/zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/Utils/extends/zip.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/assets/fonts/icomoon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/assets/fonts/icomoon.woff2 -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/assets/icon_qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/assets/icon_qrcode.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/assets/msg-tip.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/assets/msg-tip.mp3 -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/assets/popmenus_startchat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/assets/popmenus_startchat.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/src/assets/popmenus_startchat_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaobase/src/assets/popmenus_startchat_dark.png -------------------------------------------------------------------------------- /packages/tsdaodaobase/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react-library.json", 3 | "include": ["src"], 4 | "exclude": ["dist", "build", "node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/tsdaodaobase/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "js-tokens@^3.0.0 || ^4.0.0": 6 | version "4.0.0" 7 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 8 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 9 | 10 | loose-envify@^1.1.0: 11 | version "1.4.0" 12 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 13 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 14 | dependencies: 15 | js-tokens "^3.0.0 || ^4.0.0" 16 | 17 | object-assign@^4.1.1: 18 | version "4.1.1" 19 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 20 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 21 | 22 | react@*: 23 | version "17.0.2" 24 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" 25 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 26 | dependencies: 27 | loose-envify "^1.1.0" 28 | object-assign "^4.1.1" 29 | -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tsdaodao/contacts", 3 | "version": "1.0.0", 4 | "main": "src/index.tsx", 5 | "dependencies": { 6 | "@tsdaodao/base": "*", 7 | "axios": "^0.25.0", 8 | "classnames": "^2.3.1" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/Blacklist/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-blacklist { 4 | 5 | } 6 | 7 | .wk-blacklist-content ul li { 8 | height: 80px; 9 | width: 100%; 10 | background-color: var(--wk-color-item); 11 | display: flex; 12 | align-items: center; 13 | cursor: pointer; 14 | } 15 | 16 | 17 | .wk-blacklist-content-avatar { 18 | margin-left: 15px; 19 | } 20 | 21 | .wk-blacklist-content-avatar img{ 22 | width: 50px; 23 | height: 50px; 24 | border-radius: 50%; 25 | } 26 | 27 | .wk-blacklist-content-title { 28 | margin-left: 15px; 29 | font-size: 15px; 30 | font-weight: 500; 31 | color: var(--wk-text-item); 32 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/Blacklist/index.tsx: -------------------------------------------------------------------------------- 1 | import { WKApp, WKViewQueueHeader, Provider } from "@tsdaodao/base"; 2 | import React from "react"; 3 | import { Component, ReactNode } from "react"; 4 | import "./index.css" 5 | import BlacklistVM from "./vm"; 6 | 7 | export default class Blacklist extends Component { 8 | 9 | render(): ReactNode { 10 | 11 | return { 12 | return new BlacklistVM() 13 | }} render={(vm: BlacklistVM) => { 14 | return
15 | { 16 | WKApp.routeLeft.pop() 17 | }}> 18 |
19 |
    20 | { 21 | vm.blacklist().map((b) => { 22 | return
  • { 23 | WKApp.shared.baseContext.showUserInfo(b.uid) 24 | }}> 25 |
    26 | 27 |
    28 |
    {b.name}
    29 |
  • 30 | }) 31 | } 32 | 33 |
34 |
35 |
36 | }}> 37 |
38 | } 39 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/Blacklist/vm.tsx: -------------------------------------------------------------------------------- 1 | import { ContactsChangeListener, WKApp, ProviderListener, UserRelation } from "@tsdaodao/base"; 2 | 3 | 4 | export default class BlacklistVM extends ProviderListener{ 5 | contactsChangeListener!:ContactsChangeListener 6 | didMount(): void { 7 | 8 | this.contactsChangeListener = ()=>{ 9 | this.notifyListener() 10 | } 11 | WKApp.dataSource.addContactsChangeListener(this.contactsChangeListener) 12 | } 13 | 14 | didUnMount(): void { 15 | WKApp.dataSource.removeContactsChangeListener(this.contactsChangeListener) 16 | } 17 | 18 | blacklist() { 19 | return WKApp.dataSource.contactsList.filter((v)=>{ 20 | return v.status === UserRelation.blacklist 21 | }) 22 | } 23 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/FriendAdd/assets/icon_qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/FriendAdd/assets/icon_qrcode.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/FriendAdd/index.css: -------------------------------------------------------------------------------- 1 | .wk-friendadd .wk-search-box { 2 | border-radius: 0px; 3 | background-color: white; 4 | } 5 | 6 | .wk-friendadd .wk-search-input { 7 | max-width: 100%; 8 | } 9 | 10 | .wk-friendadd .wk-search-input input { 11 | width: 250px; 12 | } 13 | 14 | .wk-friendadd-content-qrcode { 15 | margin-top: 10px; 16 | text-align: center; 17 | display: flex; 18 | align-items: center; 19 | justify-content: center; 20 | } 21 | 22 | body[theme-mode="dark"] .wk-friendadd-content-qrcode { 23 | color: white; 24 | } 25 | 26 | .wk-friendadd-content-qrcode img { 27 | margin-left: 4px; 28 | width: 18px; 29 | height: 18px; 30 | cursor: pointer; 31 | } 32 | -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/GroupSave/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-groupsave { 4 | width: 100%; 5 | height: 100%; 6 | border-right: var(--wk-line); 7 | } 8 | 9 | .wk-groupsave-content { 10 | height: calc(100% - var( --wk-height-viewqueueheader)); 11 | width: 100%; 12 | } 13 | 14 | .wk-groupsave-content li { 15 | height: 80px; 16 | background-color: var(--wk-color-item); 17 | display: flex; 18 | align-items: center; 19 | cursor: pointer; 20 | } 21 | 22 | .wk-groupsave-content-avatar { 23 | margin-left: 15px; 24 | } 25 | 26 | .wk-groupsave-content-avatar img{ 27 | width: 50px; 28 | height: 50px; 29 | border-radius: 50%; 30 | } 31 | 32 | .wk-groupsave-content-title { 33 | margin-left: 15px; 34 | font-size: 15px; 35 | font-weight: 500; 36 | color: var(--wk-text-item); 37 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/GroupSave/vm.tsx: -------------------------------------------------------------------------------- 1 | import { WKApp, ProviderListener } from "@tsdaodao/base"; 2 | import { ChannelInfo,WKSDK } from "wukongimjssdk"; 3 | import { ChannelInfoListener } from "wukongimjssdk"; 4 | export class GroupSaveVM extends ProviderListener { 5 | groups:ChannelInfo[] = [] 6 | channelInfoListener!:ChannelInfoListener 7 | 8 | 9 | didMount(): void { 10 | this.request() 11 | 12 | this.channelInfoListener = (channelInfo:ChannelInfo) => { 13 | if(this.groups.length > 0) { 14 | for (const group of this.groups) { 15 | if(group.channel.isEqual(channelInfo.channel)) { 16 | this.request() 17 | break 18 | } 19 | } 20 | } 21 | } 22 | 23 | WKSDK.shared().channelManager.addListener(this.channelInfoListener) 24 | } 25 | 26 | didUnMount(): void { 27 | WKSDK.shared().channelManager.removeListener(this.channelInfoListener) 28 | } 29 | 30 | async request() { 31 | this.groups = await WKApp.dataSource.channelDataSource.groupSaveList() 32 | this.notifyListener() 33 | } 34 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/NewFriend/index.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | .wk-newfriend { 4 | width: 100%; 5 | height: 100%; 6 | border-right: var(--wk-line); 7 | } 8 | 9 | .wk-newfriend-content { 10 | height: calc(100% - var( --wk-height-viewqueueheader)); 11 | width: 100%; 12 | overflow-y: auto; 13 | } 14 | 15 | .wk-newfriend-content li { 16 | display: flex; 17 | width: 100%; 18 | height: 80px; 19 | background-color: var(--wk-color-item); 20 | align-items: center; 21 | } 22 | 23 | 24 | .wk-newfriend-content-avatar { 25 | margin-left: 15px; 26 | } 27 | 28 | .wk-newfriend-content-avatar img{ 29 | width: 50px; 30 | height: 50px; 31 | border-radius: 50%; 32 | } 33 | 34 | .wk-newfriend-content-title { 35 | margin-left: 15px; 36 | font-size: 15px; 37 | font-weight: 500; 38 | color: var(--wk-text-item); 39 | } 40 | 41 | .wk-newfriend-content-title-remark { 42 | font-size: 12px; 43 | color: #666; 44 | margin-top: 5px; 45 | } 46 | 47 | .wk-newfriend-content-action { 48 | margin-right: 10px; 49 | margin-left: auto; 50 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/Service/ContactsListManager.tsx: -------------------------------------------------------------------------------- 1 | 2 | export class ContactsListManager { 3 | 4 | private constructor() { 5 | } 6 | public static shared = new ContactsListManager() 7 | 8 | setRefreshList?:()=>void 9 | refreshList() { 10 | if(this.setRefreshList) { 11 | this.setRefreshList() 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/assets/blacklist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/assets/blacklist.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/assets/friend_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/assets/friend_new.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/assets/icon_group_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/assets/icon_group_save.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/assets/organizational_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/assets/organizational_new.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/assets/popmenus_friendadd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/assets/popmenus_friendadd.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/assets/popmenus_friendadd_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaocontacts/src/assets/popmenus_friendadd_dark.png -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/src/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as ContactsModule } from "./module"; 2 | 3 | export { default as ContactsList } from "./Contacts"; 4 | 5 | export { OrganizationalGroupNew } from "./Organizational/GroupNew/index"; 6 | -------------------------------------------------------------------------------- /packages/tsdaodaocontacts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react-library.json", 3 | "include": ["."], 4 | "exclude": ["dist", "build", "node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/tsdaodaodatasource/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tsdaodao/datasource", 3 | "version": "1.0.0", 4 | "main": "src/index.tsx", 5 | "dependencies": { 6 | "@tsdaodao/base": "*", 7 | "axios": "^0.25.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/tsdaodaodatasource/src/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as DataSourceModule } from "./module" -------------------------------------------------------------------------------- /packages/tsdaodaodatasource/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react-library.json", 3 | "include": ["."], 4 | "exclude": ["dist", "build", "node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/tsdaodaologin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tsdaodao/login", 3 | "version": "1.0.0", 4 | "main": "src/index.tsx", 5 | "dependencies": { 6 | "@tsdaodao/base": "*", 7 | "@types/node-forge": "^1.0.0", 8 | "@types/qrcode.react": "^1.0.2", 9 | "axios": "^0.25.0", 10 | "keypair": "^1.0.4", 11 | "qrcode.react": "^1.0.1" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/tsdaodaologin/src/assets/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TangSengDaoDao/TangSengDaoDaoWeb/8083c867db35f19206402c9a758d5488485919ed/packages/tsdaodaologin/src/assets/refresh.png -------------------------------------------------------------------------------- /packages/tsdaodaologin/src/index.tsx: -------------------------------------------------------------------------------- 1 | export { default as LoginModule } from "./module" -------------------------------------------------------------------------------- /packages/tsdaodaologin/src/module.tsx: -------------------------------------------------------------------------------- 1 | 2 | import {WKApp} from '@tsdaodao/base' 3 | import { IModule } from '@tsdaodao/base' 4 | import React from 'react' 5 | import Login from './login' 6 | export default class LoginModule implements IModule { 7 | 8 | id(): string { 9 | return "LoginModule" 10 | } 11 | init(): void { 12 | console.log("【LoginModule】初始化") 13 | WKApp.route.register("/login",(param:any):JSX.Element =>{ 14 | return 15 | }) 16 | } 17 | } -------------------------------------------------------------------------------- /packages/tsdaodaologin/src/style.module.css: -------------------------------------------------------------------------------- 1 | 2 | .dddBox { 3 | width: 100px; 4 | } -------------------------------------------------------------------------------- /packages/tsdaodaologin/src/test.ts: -------------------------------------------------------------------------------- 1 | 2 | export default class Test { 3 | constructor() { 4 | console.log("-----test") 5 | } 6 | test():string { 7 | console.log("dddd----") 8 | return "zz" 9 | } 10 | } -------------------------------------------------------------------------------- /packages/tsdaodaologin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tsconfig/react-library.json", 3 | "include": ["."], 4 | "exclude": ["dist", "build", "node_modules"] 5 | } 6 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turborepo.org/schema.json", 3 | "tasks": { 4 | "dev": { 5 | "cache": false 6 | }, 7 | "dev-ele": { 8 | "dependsOn": ["^dev"], 9 | "cache": false 10 | }, 11 | "build": { 12 | "outputs": ["build/**"] 13 | }, 14 | "build-ele": { 15 | "outputs": ["dist-ele/**"], 16 | "dependsOn": ["^build"] 17 | }, 18 | "build-ele:mac": { 19 | "outputs": ["dist-ele/**"], 20 | "dependsOn": ["^build"] 21 | }, 22 | "build-ele:win": { 23 | "outputs": ["dist-ele/**"], 24 | "dependsOn": ["^build"] 25 | }, 26 | "build-ele:linux": { 27 | "outputs": ["dist-ele/**"], 28 | "dependsOn": ["^build"] 29 | }, 30 | "build-ele:linux-arm64": { 31 | "outputs": ["dist-ele/**"], 32 | "dependsOn": ["^build"] 33 | }, 34 | "lint": { 35 | "outputs": [] 36 | }, 37 | "clean": { 38 | "dependsOn": ["^clean"] 39 | } 40 | }, 41 | "ui": "stream" 42 | } 43 | --------------------------------------------------------------------------------