├── .agignore ├── .babelrc.for_prod ├── .env ├── .env.production ├── .eslintignore ├── .eslintrc.js ├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ └── ci.yml ├── .gitignore ├── .graphqlconfig ├── .huskyrc ├── .jest.config.js ├── .jest.setup.js ├── .prettierignore ├── .prettierrc ├── CHANGELOG.md ├── LICENSE ├── Makefile ├── Makefile.include.mk ├── README.md ├── README.zh-CN.md ├── air-balloon.svg ├── commitlint.config.js ├── config ├── config.ci.json ├── config.dev.json ├── config.json ├── config.prod.json ├── index.ts ├── label_pool.ts ├── next_seo.ts └── version.ts ├── cypress.json ├── cypress ├── fixtures │ └── example.json ├── integration │ ├── 404 │ │ ├── community.spec.js │ │ └── user.spec.js │ ├── cool-guide │ │ └── layout.spec.js │ ├── drawer │ │ └── action.spec.js │ ├── explore │ │ └── layout.spec.js │ ├── friends │ │ └── layout.spec.js │ ├── home │ │ └── layout.spec.js │ ├── membership │ │ └── layout.spec.js │ ├── recipes │ │ └── layout.spec.js │ ├── sponsor │ │ └── layout.spec.js │ └── subscribe │ │ └── layout.spec.js ├── plugins │ └── index.js └── support │ ├── commands.js │ └── index.js ├── deploy ├── dev │ ├── Dockerfile │ ├── loader.sh │ ├── packer.sh │ └── web.tar.gz └── production │ ├── Dockerfile │ ├── loader.sh │ ├── packer.sh │ └── web.tar.gz ├── docs ├── Contributing.md ├── FAQ.md ├── FAQ.zh-CN.md ├── README.md ├── README.zh-CN.md ├── Roadmap.md ├── Roadmap.zh-CN.md ├── Troubleshooting.md ├── analysis │ ├── apollo-engine.md │ ├── apollo-engine.zh-CN.md │ ├── error-tracking.md │ ├── error-tracking.zh-CN.md │ ├── google-analysis.md │ └── google-analysis.zh-CN.md ├── architecture │ ├── convention.md │ ├── convention.zh-CN.md │ ├── intro.md │ └── intro.zh-CN.md ├── contributing.zh-CN.md ├── general │ ├── cache.md │ ├── cache.zh-CN.md │ ├── debugging.md │ ├── debugging.zh-CN.md │ ├── deployment.md │ ├── deployment.zh-CN.md │ ├── develop.md │ ├── develop.zh-CN.md │ ├── generator.md │ ├── generator.zh-CN.md │ ├── pwa.md │ ├── pwa.zh-CN.md │ ├── seo.md │ └── seo.zh-CN.md ├── js │ ├── async.md │ ├── async.zh-CN.md │ ├── auth.md │ ├── auth.zh-CN.md │ ├── graphql.md │ ├── graphql.zh-CN.md │ ├── i18n.md │ ├── i18n.zh-CN.md │ ├── routing.md │ ├── routing.zh-CN.md │ ├── state-management.md │ └── state-management.zh-CN.md ├── styling │ ├── intro.md │ ├── intro.zh-CN.md │ ├── styled-component.md │ ├── styled-component.zh-CN.md │ ├── theming.md │ └── theming.zh-CN.md ├── testing │ ├── e2e-testing.md │ ├── e2e-testing.zh-CN.md │ ├── unit-testing.md │ └── unit-testing.zh-CN.md └── troubeshooting.zh-CN.md ├── global.d.ts ├── i18n.js ├── jsconfig.json ├── next-env.d.ts ├── next.config.js ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── icons │ └── static │ │ ├── article │ │ ├── action-record.svg │ │ ├── author_upvoted.svg │ │ ├── cc-by.svg │ │ ├── cc-nc.svg │ │ ├── cc-nd.svg │ │ ├── cc-raw.svg │ │ ├── cc.svg │ │ ├── clipboard.svg │ │ ├── collect-bookmark.svg │ │ ├── collect-modeline.svg │ │ ├── collect-solid-modeline.svg │ │ ├── collect-solid.svg │ │ ├── collect.svg │ │ ├── comment-modeline.svg │ │ ├── comment-reply-mode.svg │ │ ├── comment-timeline-mode.svg │ │ ├── comment.svg │ │ ├── copyright-approve.svg │ │ ├── copyright-forbid.svg │ │ ├── copyright-printer.svg │ │ ├── copyright.svg │ │ ├── export.svg │ │ ├── heart-solid.svg │ │ ├── heart.svg │ │ ├── import.svg │ │ ├── notify-off.svg │ │ ├── notify-on.svg │ │ ├── outline.svg │ │ ├── reference-action.svg │ │ ├── reference.svg │ │ ├── reply.svg │ │ ├── report-solid.svg │ │ ├── report.svg │ │ ├── share-solid.svg │ │ ├── share.svg │ │ ├── tag.svg │ │ ├── unpin.svg │ │ ├── viewed.svg │ │ └── wing.svg │ │ ├── discover.svg │ │ ├── edit │ │ ├── publish-pen.svg │ │ ├── publish-rocket.svg │ │ ├── publish-typewriter-solid.svg │ │ ├── publish-typewriter.svg │ │ └── publish-write.svg │ │ ├── emotion │ │ ├── alien-fill.svg │ │ ├── beer.png │ │ ├── biceps.png │ │ ├── confused.png │ │ ├── downvote.png │ │ ├── emotion.svg │ │ ├── heart.png │ │ ├── pao.png │ │ ├── pill.png │ │ ├── popcorn.png │ │ └── tada.png │ │ ├── filter.svg │ │ ├── hash-solid.svg │ │ ├── help.svg │ │ ├── magic-stick.svg │ │ ├── menu │ │ ├── Q-A.svg │ │ ├── chart.svg │ │ ├── ear.svg │ │ ├── feedback.svg │ │ ├── github.svg │ │ ├── hot.svg │ │ ├── makers.svg │ │ ├── shop.svg │ │ ├── snippets.svg │ │ ├── sponsor.svg │ │ ├── subscribe.svg │ │ ├── trending.svg │ │ └── vip.svg │ │ ├── pulse.svg │ │ ├── radio-checked.svg │ │ ├── route │ │ ├── cool-guide.svg │ │ ├── cup.svg │ │ ├── job.svg │ │ ├── job_cn.svg │ │ ├── light.svg │ │ └── meetup.svg │ │ ├── search.svg │ │ ├── shape │ │ ├── about.svg │ │ ├── activity.svg │ │ ├── add-square.svg │ │ ├── add.svg │ │ ├── air-balloon.svg │ │ ├── android.svg │ │ ├── apple.svg │ │ ├── arrow-circle.svg │ │ ├── arrow-simple.svg │ │ ├── arrow-solid.svg │ │ ├── arrow.svg │ │ ├── candy.svg │ │ ├── checked.svg │ │ ├── close-circle.svg │ │ ├── close.svg │ │ ├── crown.svg │ │ ├── curly-arrow.svg │ │ ├── delete-solid.svg │ │ ├── delete.svg │ │ ├── double-arrow.svg │ │ ├── ear.svg │ │ ├── expand-all.svg │ │ ├── feedback.svg │ │ ├── fold-all.svg │ │ ├── girl-mark.svg │ │ ├── grow-up.svg │ │ ├── handshake.svg │ │ ├── home.svg │ │ ├── image.svg │ │ ├── link-hint.svg │ │ ├── link-outside.svg │ │ ├── link.svg │ │ ├── locate-solid.svg │ │ ├── locate.svg │ │ ├── lock.svg │ │ ├── menu-closed.svg │ │ ├── menu-opened.svg │ │ ├── more-3.svg │ │ ├── more-box.svg │ │ ├── more-l.svg │ │ ├── more.svg │ │ ├── navi-back.svg │ │ ├── next-article-solid.svg │ │ ├── next-article.svg │ │ ├── planet.svg │ │ ├── plus.svg │ │ ├── previous-article-solid.svg │ │ ├── previous-article.svg │ │ ├── question.svg │ │ ├── quote.svg │ │ ├── reset.svg │ │ ├── setting.svg │ │ ├── settings.svg │ │ ├── star.svg │ │ ├── t.svg │ │ ├── tail.svg │ │ ├── upvote-ship.svg │ │ ├── video.svg │ │ ├── vote-up-solid.svg │ │ ├── vote-up.svg │ │ └── warning.svg │ │ ├── sidebar-menu.svg │ │ ├── social │ │ ├── QQ-share.png │ │ ├── douban-share.png │ │ ├── douban.svg │ │ ├── dribble.svg │ │ ├── embed-share.svg │ │ ├── facebook-share.png │ │ ├── facebook.svg │ │ ├── github.svg │ │ ├── global.svg │ │ ├── huaban.svg │ │ ├── instagram.svg │ │ ├── mail-share.svg │ │ ├── pinterest.svg │ │ ├── qq.svg │ │ ├── reddit-share.png │ │ ├── telegram-share.png │ │ ├── twitter-share.png │ │ ├── twitter.svg │ │ ├── wechat-share.png │ │ ├── wechat-solid.svg │ │ ├── wechat.svg │ │ ├── weibo-share.png │ │ ├── weibo.svg │ │ ├── weichat.svg │ │ ├── zhihu-share.jpeg │ │ └── zhihu.svg │ │ ├── subscribe │ │ ├── email-box.svg │ │ ├── email-envelope.svg │ │ └── email-solid.svg │ │ └── user │ │ ├── account-circle.svg │ │ └── account-solid.svg ├── locales │ ├── en │ │ ├── community.json │ │ └── general.json │ └── zh │ │ ├── community.json │ │ └── general.json ├── manifest.json ├── pwa │ ├── icon-192x192.png │ ├── icon-256x256.png │ ├── icon-384x384.png │ └── icon-512x512.png ├── robots.txt ├── sitemap.xml ├── wallpaper │ ├── bubbles.png │ ├── cartoon.jpeg │ ├── co2.jpeg │ ├── code.jpg │ ├── curves.png │ ├── earth.jpg │ ├── elec.jpg │ ├── fishes.jpeg │ ├── istanbul.jpeg │ ├── limones.jpeg │ ├── mataura.png │ ├── newspaper.jpeg │ ├── patterns │ │ └── 1.png │ ├── rainbow.jpeg │ ├── space.svg │ └── tg-green.jpg └── workbox-a7787ddd.js.map ├── server ├── app.js ├── helper.js ├── index.js └── routes.js ├── size-limit.config.json ├── src ├── containers │ ├── Route │ │ ├── index.js │ │ ├── logic.js │ │ ├── store.ts │ │ ├── styles │ │ │ └── index.js │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ ├── content │ │ ├── ArticleContent │ │ │ ├── DesktopView │ │ │ │ ├── ArticleLayout.tsx │ │ │ │ ├── BlogLayout │ │ │ │ │ ├── ArticleTab.tsx │ │ │ │ │ ├── AuthorTab.tsx │ │ │ │ │ ├── FeedsTab.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── WorksLayout │ │ │ │ │ ├── ArticleTab.tsx │ │ │ │ │ ├── TechStackTab.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── MobileView │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── desktop_view │ │ │ │ │ ├── article_layout.ts │ │ │ │ │ ├── blog_layout │ │ │ │ │ │ ├── article_tab.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── works_layout │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── techstack_tab.ts │ │ │ │ ├── index.ts │ │ │ │ └── mobile_view.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── CommunitiesContent │ │ │ └── store.js │ │ ├── CommunityContent │ │ │ ├── AboutContent.tsx │ │ │ ├── ChangeLogContent.tsx │ │ │ ├── DashboardContent.tsx │ │ │ ├── HelpContent.tsx │ │ │ ├── KanbanContent.tsx │ │ │ ├── PostContent.tsx │ │ │ ├── SubscribedList │ │ │ │ ├── ExpandButton.tsx │ │ │ │ ├── ItemMenu.tsx │ │ │ │ └── index.tsx │ │ │ ├── ThreadContent.tsx │ │ │ ├── WipThread.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ ├── subscribed_list │ │ │ │ │ ├── expand_button.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── item_menu.ts │ │ │ │ └── wip_thread.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── CoolGuideContent │ │ │ ├── Content.tsx │ │ │ ├── FilterBar.tsx │ │ │ ├── Footer │ │ │ │ └── index.tsx │ │ │ ├── HomeCover │ │ │ │ ├── InputBox.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── content.ts │ │ │ │ ├── filter_bar.ts │ │ │ │ ├── footer │ │ │ │ │ └── index.ts │ │ │ │ ├── home_cover │ │ │ │ │ ├── index.ts │ │ │ │ │ └── input_box.ts │ │ │ │ ├── index.ts │ │ │ │ └── metric.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── ExploreContent │ │ │ ├── Banner.tsx │ │ │ ├── CommunityCard.tsx │ │ │ ├── CommunityList.tsx │ │ │ ├── NotFound.tsx │ │ │ ├── SearchBox.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── SloganText.tsx │ │ │ ├── SubscribeBtn.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.tsx │ │ │ ├── styles │ │ │ │ ├── banner.ts │ │ │ │ ├── community_card.ts │ │ │ │ ├── community_list.ts │ │ │ │ ├── hinter.ts │ │ │ │ ├── index.ts │ │ │ │ ├── not_found.ts │ │ │ │ ├── search_box.ts │ │ │ │ └── sidebar.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── FriendsContent │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── HaveADrinkContent │ │ │ ├── Body │ │ │ │ ├── About.tsx │ │ │ │ ├── Catalog.tsx │ │ │ │ ├── Content │ │ │ │ │ ├── ImageLayout.tsx │ │ │ │ │ ├── NumberLayout.tsx │ │ │ │ │ ├── TitleLayout.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Publish.tsx │ │ │ │ ├── Setting.tsx │ │ │ │ └── index.tsx │ │ │ ├── Footer │ │ │ │ ├── Contributor.tsx │ │ │ │ ├── Feature.tsx │ │ │ │ ├── Share.tsx │ │ │ │ └── index.tsx │ │ │ ├── Header │ │ │ │ ├── IndexStatus.tsx │ │ │ │ ├── Reaction.tsx │ │ │ │ ├── RunningTimer.tsx │ │ │ │ ├── Timer.tsx │ │ │ │ └── index.tsx │ │ │ ├── constant.ts │ │ │ ├── demo.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── body │ │ │ │ │ ├── about.ts │ │ │ │ │ ├── catalog.ts │ │ │ │ │ ├── content │ │ │ │ │ │ ├── image_layout.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── number_layout.ts │ │ │ │ │ │ └── title_layout.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── setting.ts │ │ │ │ ├── footer │ │ │ │ │ ├── contributor.ts │ │ │ │ │ ├── feature.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── share.ts │ │ │ │ ├── header │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index_status.ts │ │ │ │ │ ├── reaction.ts │ │ │ │ │ ├── running_timer.ts │ │ │ │ │ └── timer.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── HelpCenterContent │ │ │ ├── Cover.tsx │ │ │ ├── Detail.tsx │ │ │ ├── Digest.tsx │ │ │ ├── Footer │ │ │ │ ├── HelpInfo.tsx │ │ │ │ ├── Reaction.tsx │ │ │ │ └── index.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── cover.ts │ │ │ │ ├── detail.ts │ │ │ │ ├── digest.ts │ │ │ │ ├── footer │ │ │ │ │ ├── help_info.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── reaction.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── MeetupsContent │ │ │ ├── About.tsx │ │ │ ├── ActivityCard.tsx │ │ │ ├── Card │ │ │ │ ├── Date.tsx │ │ │ │ └── index.tsx │ │ │ ├── DateSelector │ │ │ │ ├── CalendarCard.tsx │ │ │ │ ├── Cell.tsx │ │ │ │ └── index.tsx │ │ │ ├── FilterBar │ │ │ │ └── index.tsx │ │ │ ├── fakeFiltersItems.ts │ │ │ ├── fakeMeetups.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── about.ts │ │ │ │ ├── activity_card.ts │ │ │ │ ├── card │ │ │ │ │ ├── date.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── date_selector │ │ │ │ │ ├── calendar_card.ts │ │ │ │ │ ├── cell.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── filter_bar │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── MembershipContent │ │ │ ├── Illustrations │ │ │ │ ├── AirBalloon.tsx │ │ │ │ ├── Rocket.tsx │ │ │ │ ├── UFO.tsx │ │ │ │ └── index.tsx │ │ │ ├── InviteBox │ │ │ │ ├── QA.tsx │ │ │ │ └── index.tsx │ │ │ ├── MonthlyWarning.tsx │ │ │ ├── PriceTag.tsx │ │ │ ├── QA.tsx │ │ │ ├── Support.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── illustrations │ │ │ │ │ ├── air_balloon.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── rocket.ts │ │ │ │ │ └── ufo.ts │ │ │ │ ├── index.ts │ │ │ │ ├── invite_box │ │ │ │ │ ├── index.ts │ │ │ │ │ └── qa.ts │ │ │ │ ├── monthly_warning.ts │ │ │ │ ├── price_tag.ts │ │ │ │ ├── qa.ts │ │ │ │ └── support.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── RecipesContent │ │ │ ├── Cheatsheets │ │ │ │ └── index.js │ │ │ ├── FilterBar.js │ │ │ ├── Footer │ │ │ │ └── index.js │ │ │ ├── SearchBox.js │ │ │ ├── Snippets │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ │ ├── cheatsheets │ │ │ │ │ └── index.ts │ │ │ │ ├── filter_bar.ts │ │ │ │ ├── footer │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── metric.js │ │ │ │ ├── search_box.ts │ │ │ │ └── snippets │ │ │ │ │ └── index.ts │ │ │ ├── tempData.js │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── SponsorContent │ │ │ ├── Banner.tsx │ │ │ ├── SponsorTypeTitle.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── banner.ts │ │ │ │ ├── index.ts │ │ │ │ ├── metric.ts │ │ │ │ └── sponsor_type_title.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── SubscribeContent │ │ │ ├── Actions │ │ │ │ ├── Detail.tsx │ │ │ │ └── index.tsx │ │ │ ├── Content │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── actions │ │ │ │ │ ├── detail.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── content │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── TrendingContent │ │ │ ├── NewsBoard.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.tsx │ │ │ ├── styles │ │ │ │ ├── footer │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── news_board.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── UserContent │ │ │ ├── MobileBanner.tsx │ │ │ ├── Sidebar │ │ │ │ ├── CommunityEditorInfo.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ ├── mobile_banner.ts │ │ │ │ └── sidebar │ │ │ │ │ ├── community_editor_info.ts │ │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ └── WorksContent │ │ │ ├── Brand.tsx │ │ │ ├── FilterBar.tsx │ │ │ ├── MileStone │ │ │ ├── Detail.tsx │ │ │ ├── Intro.tsx │ │ │ └── index.tsx │ │ │ ├── RightSidebar │ │ │ ├── InterviewsList.tsx │ │ │ ├── Linkers.tsx │ │ │ └── index.tsx │ │ │ ├── WorksList │ │ │ ├── OptionTab.tsx │ │ │ ├── Trending.tsx │ │ │ └── index.tsx │ │ │ ├── constant.ts │ │ │ ├── fakeFilterItems.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ ├── banner │ │ │ │ └── index.ts │ │ │ ├── brand.ts │ │ │ ├── filter_bar.ts │ │ │ ├── index.ts │ │ │ ├── mile_stone │ │ │ │ ├── detail.ts │ │ │ │ ├── index.ts │ │ │ │ └── intro.ts │ │ │ ├── right_sidebar │ │ │ │ ├── index.ts │ │ │ │ ├── interviews_list.ts │ │ │ │ └── linkers.ts │ │ │ └── works_list │ │ │ │ ├── index.ts │ │ │ │ ├── option_tab.ts │ │ │ │ └── trending.ts │ │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ ├── digest │ │ ├── ArticleDigest │ │ │ ├── DesktopView │ │ │ │ ├── BlogLayout.tsx │ │ │ │ ├── FixedHeader.tsx │ │ │ │ ├── JobLayout.tsx │ │ │ │ ├── Layout.tsx │ │ │ │ ├── PostLayout.tsx │ │ │ │ ├── WorksLayout.tsx │ │ │ │ ├── dynamic.tsx │ │ │ │ └── index.tsx │ │ │ ├── MobileView │ │ │ │ ├── Layout.tsx │ │ │ │ ├── PostLayout.tsx │ │ │ │ ├── WorksLayout.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── desktop_view │ │ │ │ │ ├── blog_layout.ts │ │ │ │ │ ├── fixed_header.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── job_layout.ts │ │ │ │ │ ├── metric.ts │ │ │ │ │ ├── post_layout.ts │ │ │ │ │ └── works_layout.ts │ │ │ │ └── mobile_view │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post_layout.ts │ │ │ │ │ └── works_layout.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ └── CommunityDigest │ │ │ ├── ClassicLayout │ │ │ ├── AccountUnit.tsx │ │ │ ├── CommunityBrief.tsx │ │ │ └── index.tsx │ │ │ ├── SimpleLayout │ │ │ ├── AccountUnit.tsx │ │ │ ├── CommunityBrief.tsx │ │ │ ├── ThreadTab.tsx │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ ├── classic_layout │ │ │ │ ├── account_unit.ts │ │ │ │ ├── community_brief.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── simple_layout │ │ │ │ ├── account_unit.ts │ │ │ │ ├── community_brief.ts │ │ │ │ ├── index.ts │ │ │ │ └── thread_tab.ts │ │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ ├── dynamic │ │ └── index.tsx │ ├── editor │ │ ├── AccountEditor │ │ │ ├── SexInputer.tsx │ │ │ ├── SocialInputer.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.tsx │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.tsx │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ ├── sex_inputer.ts │ │ │ │ └── social_inputer.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── ArticleEditor │ │ │ ├── AddOn │ │ │ │ ├── JobAddOn.tsx │ │ │ │ ├── PostAddOn.tsx │ │ │ │ ├── RadarAddOn.tsx │ │ │ │ └── index.tsx │ │ │ ├── Footer.tsx │ │ │ ├── PublishRules │ │ │ │ ├── JobRules.tsx │ │ │ │ ├── PostRules.tsx │ │ │ │ ├── RadarRules.tsx │ │ │ │ └── index.tsx │ │ │ ├── TitleInput │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── addon │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── job_addon.ts │ │ │ │ │ ├── post_addon.ts │ │ │ │ │ └── radar_addon.ts │ │ │ │ ├── editor │ │ │ │ │ ├── header │ │ │ │ │ │ ├── adder.ts │ │ │ │ │ │ ├── deleter.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── footer.ts │ │ │ │ ├── index.ts │ │ │ │ ├── publish_rules.ts │ │ │ │ └── title_input.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── BlogEditor │ │ │ ├── CommunityBadge.tsx │ │ │ ├── Content │ │ │ │ ├── AuthorInputer.tsx │ │ │ │ ├── FeedItem.tsx │ │ │ │ ├── FeedList.tsx │ │ │ │ ├── RSSInputer.tsx │ │ │ │ ├── TheRSSItem.tsx │ │ │ │ └── index.tsx │ │ │ ├── Footer.tsx │ │ │ ├── PublishRules.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── community_badge.ts │ │ │ │ ├── content │ │ │ │ │ ├── author_inputer.ts │ │ │ │ │ ├── feed_item.ts │ │ │ │ │ ├── feed_list.ts │ │ │ │ │ ├── rss_inputer.ts │ │ │ │ │ └── rss_item.ts │ │ │ │ ├── footer.ts │ │ │ │ ├── index.ts │ │ │ │ └── publish_rules.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── CommunityEditor │ │ │ ├── Banner │ │ │ │ ├── Finished.tsx │ │ │ │ ├── InputBox.tsx │ │ │ │ ├── MoreInfo.tsx │ │ │ │ ├── SelectType │ │ │ │ │ ├── TypeBoxes.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── SetupDomain.tsx │ │ │ │ ├── SetupInfo.tsx │ │ │ │ └── index.tsx │ │ │ ├── Content │ │ │ │ ├── DemoCommunity.tsx │ │ │ │ ├── FakeBrowser │ │ │ │ │ ├── Content.tsx │ │ │ │ │ ├── Favicon.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── MoreInfo.tsx │ │ │ │ ├── SelectType.tsx │ │ │ │ ├── SetupDomain.tsx │ │ │ │ ├── SetupInfo.tsx │ │ │ │ ├── communityIntros.tsx │ │ │ │ └── index.tsx │ │ │ ├── Hinter.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── banner │ │ │ │ │ ├── finished.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── input_box.ts │ │ │ │ │ ├── more_info.ts │ │ │ │ │ ├── select_type │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── type_boxes.ts │ │ │ │ │ ├── setup_domain.ts │ │ │ │ │ └── setup_info.ts │ │ │ │ ├── content │ │ │ │ │ ├── demo_community.ts │ │ │ │ │ ├── fake_browser │ │ │ │ │ │ ├── content.ts │ │ │ │ │ │ ├── favicon.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── more_info.ts │ │ │ │ │ ├── select_type.ts │ │ │ │ │ └── setup_domain.ts │ │ │ │ ├── hinter.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── RepoEditor │ │ │ ├── SearchInputer.js │ │ │ ├── SearchMan.js │ │ │ ├── TokenSetter.js │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ │ ├── index.js │ │ │ │ └── search_man.js │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── RichEditor │ │ │ ├── Menu.tsx │ │ │ ├── Options.tsx │ │ │ ├── RealEditor.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ ├── metric.ts │ │ │ │ ├── options.ts │ │ │ │ └── overwrite.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── WallpaperEditor │ │ │ ├── BuildIn │ │ │ │ ├── AnglePanel.tsx │ │ │ │ ├── GradientGroup.tsx │ │ │ │ ├── PatternGroup.tsx │ │ │ │ └── index.tsx │ │ │ ├── Custom │ │ │ │ ├── UploadBox.tsx │ │ │ │ └── index.tsx │ │ │ ├── Footer.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── build_in │ │ │ │ │ ├── angle_panel.ts │ │ │ │ │ ├── gradient_group.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── pattern_group.ts │ │ │ │ ├── custom │ │ │ │ │ ├── index.ts │ │ │ │ │ └── upload_box.ts │ │ │ │ ├── footer.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ └── WorksEditor │ │ │ ├── Content │ │ │ ├── ArticlePart.tsx │ │ │ ├── BasicInfoPart │ │ │ │ ├── ContactField.tsx │ │ │ │ ├── CoverUploader.tsx │ │ │ │ └── index.tsx │ │ │ ├── LaunchPart.tsx │ │ │ ├── NamePart.tsx │ │ │ ├── PublishRules.tsx │ │ │ ├── TechStackPart.tsx │ │ │ └── index.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Preview.tsx │ │ │ ├── StepsBar.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ ├── content │ │ │ │ ├── article_part │ │ │ │ │ └── index.ts │ │ │ │ ├── basic_info_part │ │ │ │ │ ├── contract_field.ts │ │ │ │ │ ├── cover_uploader.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── launch_part.ts │ │ │ │ ├── name_part.ts │ │ │ │ ├── publish_rules.ts │ │ │ │ └── techstack_part.ts │ │ │ ├── footer.ts │ │ │ ├── index.ts │ │ │ ├── metric.ts │ │ │ ├── preview.ts │ │ │ └── steps_bar.ts │ │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ ├── layout │ │ ├── GlobalLayout │ │ │ ├── Addon.tsx │ │ │ ├── SEO.tsx │ │ │ ├── Wallpaper.tsx │ │ │ ├── dynamic.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ └── wallpaper.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ └── ThemePalette │ │ │ ├── CodeSyxHighlight.ts │ │ │ ├── GlobalStyle.ts │ │ │ ├── MarkDownStyle.ts │ │ │ ├── ScrollBarStyle.ts │ │ │ ├── ThirdPartyOverWrite.ts │ │ │ ├── dynamic.tsx │ │ │ ├── index.tsx │ │ │ └── normalize.ts │ ├── thread │ │ ├── AboutThread │ │ │ ├── BasicStates │ │ │ │ └── index.tsx │ │ │ ├── Members │ │ │ │ ├── AdminMember.tsx │ │ │ │ └── index.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── SocialList.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── basic_states │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── members │ │ │ │ │ ├── admin_member.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── sidebar.ts │ │ │ │ └── social_list.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── ArticlesThread │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── ChangelogThread │ │ │ ├── Filters.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── filters.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── CperMapThread │ │ │ ├── GeoMap.js │ │ │ ├── MapLoading.tsx │ │ │ ├── RankingBoard.tsx │ │ │ ├── geo_data.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ ├── map_loading.ts │ │ │ │ └── raning_board.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── DashboardThread │ │ │ ├── Admin │ │ │ │ ├── Adder.tsx │ │ │ │ ├── List.tsx │ │ │ │ └── index.tsx │ │ │ ├── Alias │ │ │ │ ├── Item.tsx │ │ │ │ ├── Suggestion.tsx │ │ │ │ └── index.tsx │ │ │ ├── BasicInfo │ │ │ │ └── index.tsx │ │ │ ├── Domain │ │ │ │ └── index.tsx │ │ │ ├── Portal.tsx │ │ │ ├── SavingBar.tsx │ │ │ ├── SectionLabel.tsx │ │ │ ├── SideMenu │ │ │ │ ├── Group.tsx │ │ │ │ └── index.tsx │ │ │ ├── Tags │ │ │ │ ├── CategorySelector.tsx │ │ │ │ ├── TagBar.tsx │ │ │ │ ├── ThreadSelector.tsx │ │ │ │ └── index.tsx │ │ │ ├── ThirdPart │ │ │ │ └── index.tsx │ │ │ ├── Threads │ │ │ │ ├── HelpThread.tsx │ │ │ │ └── index.tsx │ │ │ ├── UI │ │ │ │ ├── BannerLayout.tsx │ │ │ │ ├── BannerNotifyLayout.tsx │ │ │ │ ├── BrandLayout.tsx │ │ │ │ ├── ChangelogLayout.tsx │ │ │ │ ├── PostListLayout.tsx │ │ │ │ ├── PrimaryColor.tsx │ │ │ │ ├── Wallpaper.tsx │ │ │ │ └── index.tsx │ │ │ ├── Widgets │ │ │ │ ├── BaseSetting.tsx │ │ │ │ ├── CodeArea.tsx │ │ │ │ └── index.tsx │ │ │ ├── constant.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── admin │ │ │ │ │ ├── adder.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── list.ts │ │ │ │ ├── alias │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── item.ts │ │ │ │ │ └── suggestion.ts │ │ │ │ ├── basic_info │ │ │ │ │ └── index.ts │ │ │ │ ├── domain │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── portal.ts │ │ │ │ ├── saving_bar.ts │ │ │ │ ├── section_label.ts │ │ │ │ ├── side_menu │ │ │ │ │ ├── group.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── tags │ │ │ │ │ ├── category_selector.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tag_bar.ts │ │ │ │ │ └── thread_selector.ts │ │ │ │ ├── third_part │ │ │ │ │ └── index.ts │ │ │ │ ├── threads │ │ │ │ │ ├── help_thread.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── ui │ │ │ │ │ ├── banner_layout.ts │ │ │ │ │ ├── banner_notify_layout.ts │ │ │ │ │ ├── brand_layout.ts │ │ │ │ │ ├── changelog_layout.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── post_list_layout.ts │ │ │ │ │ ├── primary_color.ts │ │ │ │ │ └── wallpaper.ts │ │ │ │ └── widgets │ │ │ │ │ ├── base_setting.ts │ │ │ │ │ ├── code_area.ts │ │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── HelpThread │ │ │ ├── Category.tsx │ │ │ ├── FaqLayout.tsx │ │ │ ├── FullLayout.tsx │ │ │ ├── HelpCenterLayout.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── category.ts │ │ │ │ ├── faq_layout.ts │ │ │ │ ├── full_layout.ts │ │ │ │ ├── helpcenter_layout.ts │ │ │ │ ├── index.ts │ │ │ │ └── sidebar.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── KanbanThread │ │ │ ├── Actions.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── actions.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── ReposThread │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ └── ThreadSidebar │ │ │ ├── ClassicLayout │ │ │ ├── DynamicPart.tsx │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ └── classic_layout.ts │ │ │ └── tests │ │ │ ├── index.test.js │ │ │ └── store.test.js │ ├── tool │ │ ├── AbuseReport │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ ├── ReportContent │ │ │ │ ├── Detail.tsx │ │ │ │ ├── Main.tsx │ │ │ │ └── index.tsx │ │ │ ├── defaults │ │ │ │ ├── article.ts │ │ │ │ ├── comment.ts │ │ │ │ ├── community.ts │ │ │ │ └── user.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ ├── index.ts │ │ │ │ └── report_content │ │ │ │ │ ├── detail.tsx │ │ │ │ │ └── main.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── ArticleSticker │ │ │ ├── CommentSticker.tsx │ │ │ ├── CommunitySticker.tsx │ │ │ ├── LeftSticker │ │ │ │ └── index.tsx │ │ │ ├── RightSticker │ │ │ │ ├── Toc.tsx │ │ │ │ ├── WorkSticker.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── comment_sticker.ts │ │ │ │ ├── community_sticker.ts │ │ │ │ ├── index.ts │ │ │ │ ├── left_sticker │ │ │ │ │ └── index.ts │ │ │ │ └── right_sticker │ │ │ │ │ ├── toc.ts │ │ │ │ │ └── works_sticker.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── AvatarAdder │ │ │ ├── AdderPanel.js │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ │ ├── adder_panel.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── C11NSettingPanel │ │ │ ├── GeneralSettings.tsx │ │ │ ├── ThemeSettings.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── gerneral_settings.ts │ │ │ │ ├── index.ts │ │ │ │ └── theme_settings.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── Cashier │ │ │ ├── Content.tsx │ │ │ ├── PaymentConfirm.tsx │ │ │ ├── PaymentContent.tsx │ │ │ ├── PaymentSidebar.tsx │ │ │ ├── QuestionContent.tsx │ │ │ ├── QuestionSidebar.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── content.ts │ │ │ │ ├── index.ts │ │ │ │ ├── payment_confirm.ts │ │ │ │ ├── payment_content.ts │ │ │ │ ├── payment_sidebar.ts │ │ │ │ ├── question_content.ts │ │ │ │ ├── question_sidebar.ts │ │ │ │ └── sidebar.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── CollectionFolder │ │ │ ├── Creator.tsx │ │ │ ├── Setter.tsx │ │ │ ├── Updater.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── box_view.ts │ │ │ │ ├── editor.ts │ │ │ │ ├── index.ts │ │ │ │ ├── metric.ts │ │ │ │ └── setter.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── CommunityJoinBadge │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── CommunityTagSetter │ │ │ ├── CommunitySetter │ │ │ │ ├── Body.tsx │ │ │ │ ├── CommunityCard │ │ │ │ │ ├── Normal.tsx │ │ │ │ │ ├── Simple.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Footer.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── List.tsx │ │ │ │ ├── SearchBox.tsx │ │ │ │ └── index.tsx │ │ │ ├── TagSetter │ │ │ │ ├── Body.tsx │ │ │ │ ├── Creator.tsx │ │ │ │ ├── Footer.tsx │ │ │ │ ├── GroupTags.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── Tag.tsx │ │ │ │ └── index.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── community_setter │ │ │ │ │ ├── body.ts │ │ │ │ │ ├── community_card │ │ │ │ │ │ ├── normal.ts │ │ │ │ │ │ └── simple.ts │ │ │ │ │ ├── footer.ts │ │ │ │ │ ├── header.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list.ts │ │ │ │ │ └── search_box.ts │ │ │ │ ├── index.ts │ │ │ │ └── tag_setter │ │ │ │ │ ├── body.ts │ │ │ │ │ ├── creator.ts │ │ │ │ │ ├── footer.ts │ │ │ │ │ ├── group_tags.ts │ │ │ │ │ ├── header.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tag.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ ├── Doraemon │ │ │ ├── AlertBar.js │ │ │ ├── InputEditor.js │ │ │ ├── InputPrefix.js │ │ │ ├── ResultsList.js │ │ │ ├── SuggestIcon.js │ │ │ ├── ThreadSelectBar.js │ │ │ ├── UtilsBar.js │ │ │ ├── index.js │ │ │ ├── logic │ │ │ │ ├── Pocket.js │ │ │ │ ├── advisor.js │ │ │ │ ├── defaultSuggestion.ts │ │ │ │ ├── index.js │ │ │ │ ├── jumper.js │ │ │ │ ├── oauth │ │ │ │ │ ├── github_handler.ts │ │ │ │ │ └── oauth_window.js │ │ │ │ ├── search.js │ │ │ │ └── swissArmyKnife.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ │ ├── alert_bar.ts │ │ │ │ ├── index.ts │ │ │ │ ├── input_editor.ts │ │ │ │ ├── input_prefix.ts │ │ │ │ ├── results_list.ts │ │ │ │ ├── suggest_icon.ts │ │ │ │ ├── thread_select_bar.ts │ │ │ │ └── utils_bar.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── Drawer │ │ │ ├── AddOn │ │ │ │ ├── ArticleNavi.tsx │ │ │ │ ├── CloseButton.tsx │ │ │ │ └── index.tsx │ │ │ ├── Content │ │ │ │ ├── DesktopView.tsx │ │ │ │ ├── MobileView.tsx │ │ │ │ ├── PlaceHolder.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── renderContent.tsx │ │ │ ├── Header │ │ │ │ ├── CloseLine.tsx │ │ │ │ └── index.tsx │ │ │ ├── Viewer │ │ │ │ ├── DesktopView.tsx │ │ │ │ ├── MobileView.tsx │ │ │ │ └── index.tsx │ │ │ ├── constant.ts │ │ │ ├── dynamics.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── add_on │ │ │ │ │ ├── article_navi.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── content │ │ │ │ │ ├── index.ts │ │ │ │ │ └── place_holder.ts │ │ │ │ ├── header │ │ │ │ │ ├── close_line.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── metrics.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── ErrorBox │ │ │ ├── Details.tsx │ │ │ ├── Footer.tsx │ │ │ ├── GraphqlDetail.tsx │ │ │ ├── GraphqlTitle.tsx │ │ │ ├── Header.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── details.ts │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── JoinModal │ │ │ ├── Content.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Groups.tsx │ │ │ ├── Header.tsx │ │ │ ├── constant.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── footer.ts │ │ │ │ ├── groups.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── MailBox │ │ │ ├── MailLists.js │ │ │ ├── MailsPanel.js │ │ │ ├── MentionList.js │ │ │ ├── NotificationList.js │ │ │ ├── SysNotificationList.js │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ ├── mails_panel.ts │ │ │ │ └── mention_list.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ └── Share │ │ │ ├── Panel │ │ │ ├── IFrameBoard.tsx │ │ │ ├── InfoPanel.tsx │ │ │ ├── LinkBoard.tsx │ │ │ ├── Platforms.tsx │ │ │ ├── WechatBoard.tsx │ │ │ └── index.tsx │ │ │ ├── constant.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ ├── index.ts │ │ │ ├── metric.ts │ │ │ └── panel │ │ │ │ ├── iframe_board.ts │ │ │ │ ├── index.ts │ │ │ │ ├── info_panel.ts │ │ │ │ ├── link_board.ts │ │ │ │ ├── platform.ts │ │ │ │ └── wechat_board.ts │ │ │ └── tests │ │ │ ├── index.test.js │ │ │ └── store.test.js │ ├── unit │ │ ├── ArticleFooter │ │ │ ├── Panel │ │ │ │ ├── ActivityInfo │ │ │ │ │ ├── ActionItem.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── AuthorInfo │ │ │ │ │ ├── SocialList.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── ReferenceInfo │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ └── panel │ │ │ │ │ ├── activity_info │ │ │ │ │ ├── action_item.ts │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── author_info │ │ │ │ │ ├── index.ts │ │ │ │ │ └── social_list.ts │ │ │ │ │ └── index.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── Comments │ │ │ ├── Comment │ │ │ │ ├── Actions.tsx │ │ │ │ ├── DesktopView │ │ │ │ │ ├── DefaultLayout.tsx │ │ │ │ │ ├── FoldLayout.tsx │ │ │ │ │ ├── IllegalBar.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Footer.tsx │ │ │ │ ├── Header │ │ │ │ │ ├── Article.tsx │ │ │ │ │ ├── UserPublished.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── MobileView │ │ │ │ │ ├── Header.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── ReplyBar.tsx │ │ │ │ └── index.tsx │ │ │ ├── Editor │ │ │ │ ├── BodyEditor.tsx │ │ │ │ ├── Footer.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── PublishEditor.tsx │ │ │ │ ├── ReplyEditor.tsx │ │ │ │ ├── UpdateEditor.tsx │ │ │ │ └── index.tsx │ │ │ ├── HeadBar │ │ │ │ ├── PublishBar.tsx │ │ │ │ ├── StateBar │ │ │ │ │ ├── Actions.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── List │ │ │ │ ├── DateDivider.tsx │ │ │ │ ├── List.tsx │ │ │ │ ├── RepliesList.tsx │ │ │ │ ├── TogglerButton.tsx │ │ │ │ └── index.tsx │ │ │ ├── LockedMessage.tsx │ │ │ ├── ReplyToBar.tsx │ │ │ ├── constant.ts │ │ │ ├── helper.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── comment │ │ │ │ │ ├── actions.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── desktop_view │ │ │ │ │ │ ├── fold_layout.ts │ │ │ │ │ │ ├── illegal_bar.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── footer.ts │ │ │ │ │ ├── header │ │ │ │ │ │ ├── article.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── user_published.tsx │ │ │ │ │ ├── mobile_view │ │ │ │ │ │ ├── header.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── reply_bar.ts │ │ │ │ ├── comment_header.ts │ │ │ │ ├── comment_reply_bar.ts │ │ │ │ ├── editor │ │ │ │ │ ├── footer.ts │ │ │ │ │ ├── header.ts │ │ │ │ │ ├── publish_editor.ts │ │ │ │ │ ├── reply_editor.ts │ │ │ │ │ └── update_editor.ts │ │ │ │ ├── head_bar │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── publish_bar.ts │ │ │ │ │ └── state_bar │ │ │ │ │ │ ├── actions.ts │ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── list │ │ │ │ │ ├── date_divider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list.ts │ │ │ │ │ ├── replies_list.ts │ │ │ │ │ └── toggler_button.ts │ │ │ │ ├── locked_message.ts │ │ │ │ └── reply_to_bar.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── Footer │ │ │ ├── ContactList.tsx │ │ │ ├── DesktopView │ │ │ │ ├── ArticleLayout.tsx │ │ │ │ ├── BottomInfo.tsx │ │ │ │ ├── GeneralLayout.tsx │ │ │ │ ├── HomeLayout.tsx │ │ │ │ ├── HostingCommunityView.tsx │ │ │ │ ├── SimpleLayout.tsx │ │ │ │ ├── TopInfo │ │ │ │ │ ├── Article.tsx │ │ │ │ │ ├── Community.tsx │ │ │ │ │ ├── General.tsx │ │ │ │ │ ├── HomeCommunity.tsx │ │ │ │ │ ├── WorksArticle.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── WorksArticleLayout.tsx │ │ │ │ └── index.tsx │ │ │ ├── MobileView │ │ │ │ └── index.tsx │ │ │ ├── constants.ts │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── contact_list.ts │ │ │ │ ├── desktop_view │ │ │ │ │ ├── article_layout.ts │ │ │ │ │ ├── bottom_info.ts │ │ │ │ │ ├── community_layout.ts │ │ │ │ │ ├── general_layout.ts │ │ │ │ │ ├── home_layout.ts │ │ │ │ │ ├── hosting_community_view.ts │ │ │ │ │ ├── simple_layout.ts │ │ │ │ │ ├── top_info │ │ │ │ │ │ ├── article.ts │ │ │ │ │ │ ├── community.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── works_article_layout.ts │ │ │ │ ├── index.ts │ │ │ │ └── mobile_view.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── Header │ │ │ ├── AddOns.tsx │ │ │ ├── DesktopView │ │ │ │ ├── ArticleEditorView.tsx │ │ │ │ ├── ArticleView.tsx │ │ │ │ ├── CommunityView.tsx │ │ │ │ └── index.tsx │ │ │ ├── ThreadsNav.tsx │ │ │ ├── UserAccount.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── addons.ts │ │ │ │ ├── desktop_view │ │ │ │ │ ├── article_editor_view.ts │ │ │ │ │ ├── article_view.ts │ │ │ │ │ ├── community_view.ts │ │ │ │ │ └── metric.ts │ │ │ │ ├── index.ts │ │ │ │ ├── threads_nav.ts │ │ │ │ └── user_account.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── ModeLine │ │ │ ├── BottomBar │ │ │ │ ├── ArrowBlock.tsx │ │ │ │ ├── CommunityInfo.tsx │ │ │ │ ├── MainBlockInfo.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── menus.tsx │ │ │ ├── TopBar │ │ │ │ ├── DesktopView.js │ │ │ │ ├── MobileView │ │ │ │ │ ├── ArticleBar │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── CommunityBar │ │ │ │ │ │ ├── TagBlock.js │ │ │ │ │ │ └── index.js │ │ │ │ │ └── index.js │ │ │ │ └── index.js │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── bottom_bar │ │ │ │ │ ├── arrow_block.ts │ │ │ │ │ ├── community_info.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── main_block_info.ts │ │ │ │ ├── metrics │ │ │ │ │ └── top_bar.js │ │ │ │ └── top_bar │ │ │ │ │ ├── desktop_view.ts │ │ │ │ │ └── mobile_view │ │ │ │ │ ├── article_bar │ │ │ │ │ └── index.ts │ │ │ │ │ └── community_bar │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tag_block.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── ModeLineMenu │ │ │ ├── CollectMenu.tsx │ │ │ ├── CommunityMenu.tsx │ │ │ ├── ExploreMenu.tsx │ │ │ ├── FilterMenu │ │ │ │ ├── Content.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── SortColumn │ │ │ │ │ ├── Options.tsx │ │ │ │ │ ├── ToggleIcon.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── GlobalMenu │ │ │ │ ├── HomeNavi.tsx │ │ │ │ └── index.tsx │ │ │ ├── MoreMenu │ │ │ │ ├── ArticleLayout.tsx │ │ │ │ ├── CommunityLayout.tsx │ │ │ │ └── index.tsx │ │ │ ├── NaviButton.tsx │ │ │ ├── ReportMenu.tsx │ │ │ ├── SearchMenu.tsx │ │ │ ├── ShareMenu.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── spec.d.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── community_menu.ts │ │ │ │ ├── explore_menu.ts │ │ │ │ ├── filter_menu │ │ │ │ │ ├── content.ts │ │ │ │ │ ├── header.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── sort_column │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── options.ts │ │ │ │ ├── global_menu │ │ │ │ │ ├── home_navi.ts │ │ │ │ │ └── main_menu.ts │ │ │ │ ├── index.ts │ │ │ │ ├── metrics │ │ │ │ │ ├── filter_menu.js │ │ │ │ │ └── index.js │ │ │ │ ├── more_menu │ │ │ │ │ └── index.ts │ │ │ │ ├── navi_button.ts │ │ │ │ ├── search_menu.ts │ │ │ │ └── share_menu.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── Sidebar │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ ├── LoadingBlocks.tsx │ │ │ ├── MenuList │ │ │ │ ├── MenuBar.tsx │ │ │ │ ├── NormalMenuList.tsx │ │ │ │ ├── SortableMenuList.tsx.bak │ │ │ │ └── index.tsx │ │ │ ├── PullButton.tsx │ │ │ ├── RealSidebar.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ ├── index.ts │ │ │ │ ├── loading_blocks.ts │ │ │ │ ├── menu_list │ │ │ │ │ ├── index.ts │ │ │ │ │ └── menu_bar.ts │ │ │ │ ├── metric.ts │ │ │ │ └── pull_button.ts │ │ │ └── tests │ │ │ │ └── index.test.ts │ │ └── TagsBar │ │ │ ├── DesktopView │ │ │ ├── Folder.tsx │ │ │ ├── GobackTag.tsx │ │ │ ├── TagCount.tsx │ │ │ ├── TagItem.tsx │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ ├── desktop_view │ │ │ │ ├── folder.ts │ │ │ │ ├── goback_tag.ts │ │ │ │ ├── index.ts │ │ │ │ ├── tag_count.ts │ │ │ │ └── tag_item.ts │ │ │ └── metric.ts │ │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ ├── user │ │ ├── UserBilling │ │ │ ├── BillsTable.js │ │ │ ├── GirlsCodeTooPlan.js │ │ │ ├── SeniorPlan.js │ │ │ ├── SponsorPlan.js │ │ │ ├── TableSectionDesc.js │ │ │ ├── TipsForDeveloperPlan.js │ │ │ ├── UpgradeMenu.js │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ │ ├── bills_table.ts │ │ │ │ ├── index.ts │ │ │ │ ├── table_section_desc.ts │ │ │ │ ├── upgrade_menu.ts │ │ │ │ └── xxx_plan.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── UserLister │ │ │ ├── HeaderInfo.tsx │ │ │ ├── List │ │ │ │ ├── EditorLayout.tsx │ │ │ │ ├── NormalLayout.tsx │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── header_info.ts │ │ │ │ ├── index.ts │ │ │ │ ├── list │ │ │ │ │ ├── editor_layout.ts │ │ │ │ │ └── normal_layout.ts │ │ │ │ └── user_list.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── UserProfile │ │ │ ├── Activities │ │ │ │ ├── BriefInfo.tsx │ │ │ │ ├── DetailInfo.tsx │ │ │ │ ├── EventBlock.tsx │ │ │ │ └── index.tsx │ │ │ ├── ContributeMap.tsx │ │ │ ├── NumbersPad.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.tsx │ │ │ ├── styles │ │ │ │ ├── activities │ │ │ │ │ ├── brief_info.ts │ │ │ │ │ ├── detail_info.ts │ │ │ │ │ ├── event_block.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── contribute_map.ts │ │ │ │ ├── index.ts │ │ │ │ └── numbers_pad.ts │ │ │ └── tests │ │ │ │ ├── index.test.ts │ │ │ │ └── store.test.ts │ │ ├── UserPublishedArticles │ │ │ ├── ThreadSelector.tsx │ │ │ ├── index.tsx │ │ │ ├── logic.ts │ │ │ ├── schema.ts │ │ │ ├── store.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ └── thread_selector.ts │ │ │ └── tests │ │ │ │ ├── index.test.js │ │ │ │ └── store.test.js │ │ └── UserSettings │ │ │ ├── index.js │ │ │ ├── logic.js │ │ │ ├── schema.ts │ │ │ ├── store.js │ │ │ ├── styles │ │ │ └── index.ts │ │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ └── viewer │ │ ├── ArticleViewer │ │ ├── BlogViewer │ │ │ ├── ArticleInfo.tsx │ │ │ ├── Content.tsx │ │ │ ├── FixedHeader.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ ├── PostViewer │ │ │ ├── ArticleInfo.tsx │ │ │ ├── FixedHeader.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ ├── Viewer.tsx │ │ ├── WorksViewer │ │ │ ├── ArticleInfo.tsx │ │ │ ├── Content.tsx │ │ │ ├── FixedHeader.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── logic.ts │ │ ├── schema.ts │ │ ├── store.ts │ │ ├── styles │ │ │ ├── blog_viewer │ │ │ │ ├── article_info.ts │ │ │ │ ├── fixed_header.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.tsx │ │ │ ├── index.ts │ │ │ ├── post_viewer │ │ │ │ ├── article_info.ts │ │ │ │ ├── fixed_header.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.tsx │ │ │ └── works_viewer │ │ │ │ ├── article_info.ts │ │ │ │ ├── basic_info.ts │ │ │ │ ├── fixed_header.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ └── tests │ │ │ ├── index.test.js │ │ │ └── store.test.js │ │ ├── MailsViewer │ │ ├── MailLists.js │ │ ├── MentionList.js │ │ ├── NotificationList.js │ │ ├── SysNotificationList.js │ │ ├── ToggleInfo.js │ │ ├── ToggleReadButton.js │ │ ├── index.js │ │ ├── logic.js │ │ ├── schema.ts │ │ ├── store.js │ │ ├── styles │ │ │ ├── mention_list.ts │ │ │ ├── toggle_info.ts │ │ │ └── toggle_read_button.ts │ │ └── tests │ │ │ ├── index.test.ts │ │ │ └── store.test.ts │ │ └── RepoViewer │ │ ├── index.js │ │ ├── logic.js │ │ ├── schema.ts │ │ ├── store.js │ │ ├── styles │ │ └── index.js │ │ └── tests │ │ ├── index.test.ts │ │ └── store.test.ts ├── hoc │ ├── index.js │ └── withGuardian.js ├── hooks │ ├── useAccount.ts │ ├── useClipboard.ts │ ├── useCustomScroll.ts │ ├── useInterval.ts │ ├── useLangPress.ts │ ├── useOutsideClick.ts │ ├── usePlatform.ts │ ├── useResize.ts │ ├── useScript.ts │ ├── useScroll.ts │ ├── useShortcut.ts │ ├── useSwipe.ts │ ├── useTrans.ts │ └── useViewing.ts ├── pages │ ├── 404.tsx │ ├── [community] │ │ ├── about.tsx │ │ ├── changelog.tsx │ │ ├── help.tsx │ │ ├── index.tsx │ │ ├── kanban.tsx │ │ ├── post.tsx │ │ └── thread-bak.tsx │ ├── _app.tsx │ ├── _document.tsx │ ├── _error.js │ ├── apply │ │ └── community.tsx │ ├── blog │ │ └── [id].tsx │ ├── cool-guide.tsx │ ├── friends.tsx │ ├── have-a-drink.tsx │ ├── help-center.tsx │ ├── index.tsx │ ├── job │ │ └── [id].tsx │ ├── meetups.tsx │ ├── membership.tsx │ ├── oauth.tsx │ ├── oops.tsx │ ├── post │ │ └── [id].tsx │ ├── publish │ │ ├── blog.tsx │ │ ├── job.tsx │ │ ├── post.tsx │ │ ├── radar.tsx │ │ └── works.tsx │ ├── radar │ │ └── [id].tsx │ ├── recipes.js │ ├── sponsor.tsx │ ├── subscribe.tsx │ ├── support-us.tsx │ ├── topics.tsx │ ├── trending.tsx │ ├── update │ │ ├── job │ │ │ └── [id].tsx │ │ ├── post │ │ │ └── [id].tsx │ │ ├── radar │ │ │ └── [id].tsx │ │ ├── rss.tsx │ │ └── works │ │ │ └── [id].tsx │ ├── user │ │ └── [login].tsx │ ├── w │ │ └── [id].tsx │ └── works.tsx ├── schemas │ ├── fragments │ │ ├── base.ts │ │ ├── index.ts │ │ └── paged.ts │ ├── index.ts │ └── pages │ │ ├── action.ts │ │ ├── blog.ts │ │ ├── comment.ts │ │ ├── community.ts │ │ ├── index.ts │ │ ├── job.ts │ │ ├── mail.ts │ │ ├── meetup.ts │ │ ├── misc.ts │ │ ├── post.ts │ │ ├── radar.ts │ │ ├── repo.ts │ │ ├── user.ts │ │ └── works.ts ├── services │ ├── github_api │ │ ├── client.js │ │ ├── config.js │ │ ├── index.js │ │ ├── repo_search.js │ │ ├── schema.ts │ │ └── user_search.js │ └── index.js ├── spec │ ├── account.d.ts │ ├── article.d.ts │ ├── c11n.d.ts │ ├── color.d.ts │ ├── community.d.ts │ ├── comp.d.ts │ ├── emotion.d.ts │ ├── enhance.d.ts │ ├── gallery.d.ts │ ├── graphql.d.ts │ ├── index.ts │ ├── metric.d.ts │ ├── size.d.ts │ ├── store.d.ts │ ├── theme.d.ts │ ├── thread.d.ts │ ├── utils.d.ts │ └── wallpaper.d.ts ├── stores │ ├── AccountStore │ │ ├── index.ts │ │ └── test │ │ │ └── index.test.ts │ ├── Model │ │ ├── Article.ts │ │ ├── ArticlesFilter.ts │ │ ├── Blog.ts │ │ ├── Category.ts │ │ ├── Comment.ts │ │ ├── Community.ts │ │ ├── FavoriteCategory.ts │ │ ├── GithubUser.ts │ │ ├── Job.ts │ │ ├── Mail.ts │ │ ├── Meetup.ts │ │ ├── Post.ts │ │ ├── Radar.ts │ │ ├── Repo.ts │ │ ├── Tag.ts │ │ ├── User.ts │ │ ├── Works.ts │ │ ├── helper │ │ │ ├── article.ts │ │ │ └── common.ts │ │ └── index.ts │ ├── RootStore │ │ ├── index.ts │ │ └── test │ │ │ └── index.test.ts │ ├── ThemeStore │ │ ├── index.ts │ │ └── test │ │ │ └── index.test.ts │ ├── ViewingStore │ │ ├── index.ts │ │ └── test │ │ │ └── index.test.ts │ ├── index.ts │ └── init.ts └── widgets │ ├── AdminAvatar │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── AnimatedCount │ ├── AnimatedCount.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── ArchiveAlert │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArchivedSign │ ├── DetailPanel.tsx │ ├── index.tsx │ ├── styles │ │ ├── detail_panel.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleActionsPanel │ ├── DeleteOption.js │ ├── EditOption.js │ ├── PinOption.js │ ├── RefineOption.js │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleBaseStats │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleBelongCommunity │ ├── MirrorHint.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── mirror_hint.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleCard │ ├── Footer.tsx │ ├── Header.tsx │ ├── index.tsx │ ├── styles │ │ ├── footer.ts │ │ ├── header.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleCatState │ ├── Label.tsx │ ├── State.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ ├── label.ts │ │ ├── metric.ts │ │ └── state.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleEditFooter │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleImgWindow │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleMenu │ ├── RealArticleMenu.tsx │ ├── helper.ts │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticlePinLabel │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticleReadLabel │ ├── ReadLabel.tsx │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ArticlesFilter │ ├── CatFilterButton.tsx │ ├── DesktopView.tsx │ ├── FilterButton.tsx │ ├── FilterPanel │ │ ├── CatFilter.tsx │ │ ├── LengthFilter.tsx │ │ ├── RepoSortFilter.tsx │ │ ├── SortFilter.tsx │ │ ├── TimeFilter.tsx │ │ ├── ViewedFilter.tsx │ │ └── index.tsx │ ├── FilterResult.tsx │ ├── SearchBox.tsx │ ├── SelectedFilters.tsx │ ├── index.tsx │ ├── styles │ │ ├── cat_filter_button.ts │ │ ├── filter_button.ts │ │ ├── filter_result.ts │ │ ├── index.ts │ │ ├── search_box.ts │ │ └── selected_filters.ts │ └── tests │ │ └── index.test.ts │ ├── ArtimentBody │ ├── FoldBox.tsx │ ├── index.tsx │ ├── styles │ │ ├── fold_box.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── BannerNotify │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── BlinkCursor │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── BlogAuthorInfo │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── BlogFeedsList │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── BlogItem │ ├── DesktopView │ │ ├── AuthorIntro.tsx │ │ ├── Body.tsx │ │ ├── Header.tsx │ │ └── index.tsx │ ├── MobileView │ │ ├── Body.tsx │ │ ├── Footer.tsx │ │ ├── Header.tsx │ │ └── index.tsx │ ├── index.tsx │ ├── styles │ │ ├── desktop_view │ │ │ ├── active_badge.ts │ │ │ ├── author_intro.ts │ │ │ ├── body.ts │ │ │ ├── header.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── list_view.ts │ │ ├── metrics.ts │ │ └── mobile_view │ │ │ ├── body.ts │ │ │ ├── footer.ts │ │ │ ├── header.ts │ │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── BrandTitle │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Buttons │ ├── AddButton.tsx │ ├── ArrowButton.tsx │ ├── ArrowLink.tsx │ ├── Button.tsx │ ├── CopyButton │ │ ├── Animate.tsx │ │ └── index.tsx │ ├── DebugSizeButton.tsx │ ├── DropdownButton │ │ └── index.tsx │ ├── FancyPublishButton.tsx │ ├── FollowButton │ │ ├── FollowedBtn.tsx │ │ ├── FollowingBtn.tsx │ │ └── index.tsx │ ├── IconButton.tsx │ ├── MenuButton │ │ ├── Menu.tsx │ │ └── index.tsx │ ├── NotifyButton │ │ └── index.tsx │ ├── OrButton │ │ ├── HorizontalButton.tsx │ │ ├── VerticalButton.tsx │ │ └── index.tsx │ ├── PublishButton │ │ ├── PostLayout.tsx │ │ ├── WorksLayout.tsx │ │ ├── constant.ts │ │ ├── helper.ts │ │ └── index.tsx │ ├── SubmitButton.tsx │ ├── ToggleSwitch.tsx │ ├── YesOrNoButtons.tsx │ ├── index.tsx │ ├── styles │ │ ├── add_button.ts │ │ ├── arrow_button.ts │ │ ├── arrow_link.ts │ │ ├── button.ts │ │ ├── copy_button │ │ │ └── index.ts │ │ ├── dropdown_button │ │ │ ├── index.ts │ │ │ └── option_panel.ts │ │ ├── fancy_publish_button.ts │ │ ├── follow_button │ │ │ └── index.ts │ │ ├── icon_button.ts │ │ ├── menu_button │ │ │ ├── index.ts │ │ │ └── menu.ts │ │ ├── metircs │ │ │ ├── arrow_button.ts │ │ │ ├── arrow_link.ts │ │ │ └── button.ts │ │ ├── notify_button │ │ │ └── index.ts │ │ ├── or_button │ │ │ ├── horizontal_button.ts │ │ │ ├── index.ts │ │ │ └── vertical_button.ts │ │ ├── publish_button │ │ │ ├── index.ts │ │ │ ├── post_layout.ts │ │ │ └── works_layout.ts │ │ ├── submit_button.ts │ │ ├── toggle_switch.ts │ │ └── yes_or_no_buttons.ts │ └── tests │ │ └── index.test.ts │ ├── BuyMeChuanChuan │ ├── ChuanSelector.tsx │ ├── PaymentFooter.tsx │ ├── UnLoginNote.tsx │ ├── index.tsx │ ├── styles │ │ ├── chuan_selector.ts │ │ ├── index.ts │ │ ├── payment_footer.ts │ │ └── unlogin_note.ts │ └── tests │ │ └── index.test.ts │ ├── Cards │ ├── CommunityCard.tsx │ ├── JobCard.tsx │ ├── UserCard.tsx │ ├── WorksCard.tsx │ └── styles │ │ ├── community_card.ts │ │ ├── job_card.ts │ │ ├── user_card.ts │ │ └── works_card.ts │ ├── ChangelogItem │ ├── OutlineLayout │ │ ├── Cover.tsx │ │ └── index.tsx │ ├── PreviewtLayout │ │ ├── ArticleLayout.tsx │ │ ├── BonusButton.tsx │ │ ├── DefaultLayout.tsx │ │ └── index.tsx │ ├── constant.ts │ ├── index.tsx │ ├── styles │ │ ├── outline_layout │ │ │ ├── cover.ts │ │ │ └── index.ts │ │ └── preview_layout │ │ │ ├── article_layout.ts │ │ │ ├── bonus_button.ts │ │ │ └── default_layout.ts │ └── tests │ │ └── index.test.ts │ ├── Charger │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CheckLabel │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Checker │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── CollapseMenu │ ├── Group.js │ ├── Item.js │ ├── index.js │ ├── styles │ │ ├── group.ts │ │ ├── index.ts │ │ └── item.ts │ └── tests │ │ └── index.test.ts │ ├── ColorSelector │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Common │ └── index.ts │ ├── CommunityBadgeSelector │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CommunityFaceLogo │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CommunityJoinSign │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CommunityList │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CommunityStatesPad │ ├── ContentStatus.tsx │ ├── ModelineView.tsx │ ├── SubscribeStatus.tsx │ ├── VolunteerStatus.tsx │ ├── helper.ts │ ├── index.tsx │ ├── styles │ │ ├── content_status.ts │ │ ├── index.ts │ │ ├── modeline_view.ts │ │ ├── subscribe_status.ts │ │ ├── subscribed_title.ts │ │ └── volunteer_status.ts │ └── tests │ │ └── index.test.ts │ ├── ConstructingThread │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ContentBanner │ ├── ReactionNumbers.js │ ├── index.js │ ├── styles │ │ ├── index.ts │ │ └── reaction_numbers.ts │ └── tests │ │ └── index.test.ts │ ├── ContributorList │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Copyright │ ├── Label.tsx │ ├── ReadOnlyPanel.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ ├── label.ts │ │ └── readonly_panel.ts │ └── tests │ │ └── index.test.ts │ ├── CoverImage │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CrashErrorHint │ ├── Header.js │ ├── executes.js │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── CustomScroller │ ├── HorizontalScroller.tsx │ ├── VerticalScroller.tsx │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── horizontal_scroller.ts │ │ ├── index.ts │ │ ├── metrics.ts │ │ └── vertical_scroller.ts │ └── tests │ │ └── index.test.ts │ ├── DashboardDesc │ ├── PostListExample │ │ ├── Desktop.tsx │ │ ├── Mobile.tsx │ │ └── index.tsx │ ├── constant.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── index.ts │ │ └── post_list_example │ │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── DigestSentence │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── DiscussLinker │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── DivideText │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── DotDivider │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Dropdown │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── EmailSubscriber │ ├── DefaultLayout │ │ ├── ActiveView.js │ │ ├── InActiveView.js │ │ └── index.js │ ├── EmailHintIcon.js │ ├── SimpleLayout.js │ ├── index.js │ ├── styles │ │ ├── default_layout │ │ │ ├── active_view.ts │ │ │ ├── inactive_view.ts │ │ │ └── index.ts │ │ ├── email_hint_icon.ts │ │ ├── index.ts │ │ └── simple_layout.ts │ └── tests │ │ └── index.test.ts │ ├── EmotionSelector │ ├── Panel.tsx │ ├── SelectedEmotions │ │ ├── EmotionIcon.tsx │ │ ├── EmotionUnit.tsx │ │ ├── UsersPanel.tsx │ │ └── index.tsx │ ├── helper.ts │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ ├── panel.ts │ │ └── selected_emotions │ │ │ ├── emotion_icon.ts │ │ │ ├── emotion_unit.ts │ │ │ └── users_panel.ts │ └── tests │ │ └── index.test.ts │ ├── EmptyLabel │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── EmptyThread │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── EnterHint │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ErrorPage │ ├── CodeSnippets.js │ ├── ErrorDesc.tsx │ ├── NotFoundMessage.tsx │ ├── SpinPlanet.tsx │ ├── index.tsx │ ├── styles │ │ ├── code_snippets.ts │ │ ├── index.ts │ │ └── spin_planet.ts │ └── tests │ │ └── index.test.ts │ ├── ExpandIcon │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── Facepile │ ├── MoreItem.tsx │ ├── RealAvatar.tsx │ ├── RealNumber.tsx │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── index.ts │ │ ├── metric.ts │ │ ├── more_item.ts │ │ ├── real_avatar.ts │ │ └── real_number.ts │ └── tests │ │ └── index.test.ts │ ├── FaqList │ ├── Collapse │ │ ├── Banner.tsx │ │ ├── Section.tsx │ │ ├── constant.ts │ │ └── index.tsx │ ├── SearchHint.tsx │ ├── Sidebar.tsx │ ├── index.tsx │ ├── styles │ │ ├── collapse │ │ │ ├── banner.ts │ │ │ ├── index.ts │ │ │ └── section.ts │ │ ├── index.ts │ │ ├── search_hint.ts │ │ └── sidebar.ts │ └── tests │ │ └── index.test.ts │ ├── FaqPeekList │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── FeedsBar │ ├── List.tsx │ ├── SourceSelector.tsx │ ├── index.tsx │ ├── mock.ts │ ├── styles │ │ ├── index.ts │ │ ├── list.ts │ │ └── source_selector.ts │ └── tests │ │ └── index.test.ts │ ├── FiltersMenu │ ├── Filter │ │ ├── ExpandTag.tsx │ │ ├── SelectedTag.tsx │ │ └── index.tsx │ ├── Header.tsx │ ├── helper.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── filter │ │ │ ├── index.ts │ │ │ └── tag.ts │ │ ├── header.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── FocusLine │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Folder │ ├── Content.tsx │ ├── DetailInfo.tsx │ ├── Footer.tsx │ ├── index.tsx │ ├── styles │ │ ├── content.ts │ │ ├── detail_info.ts │ │ ├── footer.ts │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── FormItem │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── GalleryHub │ ├── DirectoryGallery.js │ ├── FriendsGallery.tsx │ ├── ImageGallery │ │ ├── MainColumnGallery.js │ │ ├── MasonryGallery.js │ │ ├── ThreeColumnGallery.js │ │ ├── TwoColumnGallery.js │ │ └── index.js │ ├── InlineTags.tsx │ ├── PeopleGallery │ │ ├── CardHeader.tsx │ │ ├── DeveloperGallery.tsx │ │ ├── FamePeopleGallery.tsx │ │ └── index.tsx │ ├── ProductGallery.tsx │ ├── SnippetGallery.js │ ├── SponsorGallery │ │ ├── Patterns.tsx │ │ └── index.tsx │ ├── index.tsx │ ├── mock.ts │ ├── styles │ │ ├── directory_gallery.ts │ │ ├── friends_gallery.ts │ │ ├── image_gallery │ │ │ ├── index.ts │ │ │ ├── main_column_gallery.ts │ │ │ ├── masonry_gallery.ts │ │ │ ├── three_column_gallery.ts │ │ │ └── two_column_gallery.ts │ │ ├── inline_tags.ts │ │ ├── people_gallery │ │ │ ├── card_header.ts │ │ │ ├── developer_gallery.ts │ │ │ ├── fame_people_gallery.ts │ │ │ └── index.ts │ │ ├── product_gallery.ts │ │ ├── snippet_gallery.ts │ │ └── sponsor_gallery │ │ │ ├── index.ts │ │ │ └── patterns.ts │ └── tests │ │ └── index.test.ts │ ├── GithubRepoPage │ ├── Header.js │ ├── StatesContainers.js │ ├── index.js │ ├── styles │ │ ├── header.ts │ │ ├── index.ts │ │ └── states_containers.ts │ └── tests │ │ └── index.test.ts │ ├── GithubSyncWarning │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── GithubUserCard │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── GotoTop │ ├── RealGotoTop.tsx │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Header │ ├── AddOns.tsx │ ├── DesktopView │ │ ├── ArticleEditorLayout.tsx │ │ ├── ArticleLayout.tsx │ │ ├── CommunityLayout.tsx │ │ ├── GeneralLayout.tsx │ │ ├── WorksLayout.tsx │ │ └── index.tsx │ ├── ThreadsNav.tsx │ ├── UserAccount.tsx │ ├── index.tsx │ ├── styles │ │ ├── addons.ts │ │ ├── desktop_view │ │ │ ├── article_editor_layout.ts │ │ │ ├── article_layout.ts │ │ │ ├── community_layout.ts │ │ │ ├── general_layout.ts │ │ │ ├── metric.ts │ │ │ └── works_layout.ts │ │ ├── index.ts │ │ ├── threads_nav.ts │ │ └── user_account.ts │ └── tests │ │ ├── index.test.ts │ │ └── store.test.ts │ ├── IconText │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── Icons │ ├── Acount.tsx │ ├── AdminStar.tsx │ ├── AirBalloon.tsx │ ├── Android.tsx │ ├── Apple.tsx │ ├── Apply.tsx │ ├── Archived.tsx │ ├── Arrow.tsx │ ├── ArrowSimple.tsx │ ├── ArrowSolid.tsx │ ├── ArticleMirror.tsx │ ├── Billing.tsx │ ├── Bind.tsx │ ├── Blog.tsx │ ├── Bot.tsx │ ├── Brand.tsx │ ├── Bug.tsx │ ├── CPLogo.tsx │ ├── CPer.tsx │ ├── Calendar.tsx │ ├── Checked.tsx │ ├── City.tsx │ ├── CloseCross.tsx │ ├── CloseLight.tsx │ ├── Code.tsx │ ├── CollectionBookmark.tsx │ ├── CollectionFolder.tsx │ ├── Comment.tsx │ ├── CommentReplyMode.tsx │ ├── CommentTimelineMode.tsx │ ├── Company.tsx │ ├── Copy.tsx │ ├── CopyrightCC.tsx │ ├── Dashboard.tsx │ ├── Database.tsx │ ├── Delete.tsx │ ├── DeleteSolid.tsx │ ├── Design.tsx │ ├── Desktop.tsx │ ├── Devops.tsx │ ├── Domain.tsx │ ├── EditPen.tsx │ ├── EditPublish.tsx │ ├── Emoji.tsx │ ├── Emotion.tsx │ ├── Enter.tsx │ ├── Expand.tsx │ ├── FAQ.tsx │ ├── Fold.tsx │ ├── ForbidImg.tsx │ ├── Framework.tsx │ ├── GeoMap.tsx │ ├── Gift.tsx │ ├── Github8.tsx │ ├── GithubCat.tsx │ ├── GotoTop.tsx │ ├── GtdDone.tsx │ ├── GtdTodo.tsx │ ├── GtdWip.tsx │ ├── HashTag.tsx │ ├── HeaderSearch.tsx │ ├── Heart.tsx │ ├── Hook.tsx │ ├── ImgUpload.tsx │ ├── Info.tsx │ ├── InternalLink.tsx │ ├── Job.tsx │ ├── JoinEye.tsx │ ├── Kanban.tsx │ ├── Laptop.tsx │ ├── Light.tsx │ ├── Link.tsx │ ├── Lock.tsx │ ├── MagicStick.tsx │ ├── Mail.tsx │ ├── Man.tsx │ ├── Management.tsx │ ├── Mobile.tsx │ ├── Notice.tsx │ ├── Notify.tsx │ ├── Pin.tsx │ ├── Plus.tsx │ ├── Post.tsx │ ├── Publish.tsx │ ├── PublishRocket.tsx │ ├── PullShape.tsx │ ├── Pulse.tsx │ ├── Question.tsx │ ├── Radar.tsx │ ├── ReplyMode.tsx │ ├── Report.tsx │ ├── Setting.tsx │ ├── Sex.tsx │ ├── Share.tsx │ ├── Star.tsx │ ├── Thunder.tsx │ ├── TimelineMode.tsx │ ├── Trumpet.tsx │ ├── Turbo.tsx │ ├── Twitter.tsx │ ├── UpdateTime.tsx │ ├── Upload.tsx │ ├── Upvote.tsx │ ├── User.tsx │ ├── UserBadge.tsx │ ├── Users.tsx │ ├── Video.tsx │ ├── View.tsx │ ├── Warning.tsx │ ├── Wip.tsx │ ├── Woman.tsx │ ├── Works.tsx │ ├── WorksHolder.tsx │ ├── article │ │ ├── Activity.tsx │ │ ├── Archived.tsx │ │ ├── CC.tsx │ │ ├── CCApprove.tsx │ │ ├── CCForbid.tsx │ │ └── Viewed.tsx │ ├── index.ts │ ├── menu │ │ ├── Chart.tsx │ │ ├── Copy.tsx │ │ ├── Feedback.tsx │ │ ├── Hot.tsx │ │ ├── Makers.tsx │ │ ├── More.tsx │ │ ├── MoreDot.tsx │ │ ├── MoreL.tsx │ │ ├── Piece.tsx │ │ ├── QRCode.tsx │ │ ├── Report.tsx │ │ ├── Sponsor.tsx │ │ ├── Subscribe.tsx │ │ ├── Vip.tsx │ │ └── Volunteer.tsx │ └── social │ │ ├── BiliBili.tsx │ │ ├── Douban.tsx │ │ ├── Email.tsx │ │ ├── Github.tsx │ │ ├── Global.tsx │ │ ├── QQ.tsx │ │ ├── Steam.tsx │ │ ├── Telegram.tsx │ │ ├── Twitter.tsx │ │ ├── WeChat.tsx │ │ ├── Weibo.tsx │ │ └── Zhihu.tsx │ ├── IllegalWarning │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Img │ ├── LazyLoadImg.tsx │ ├── NextImg.tsx │ ├── NormalImg.tsx │ ├── SvgLoader.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── lazy_load_image.ts │ └── tests │ │ └── index.test.tsx │ ├── ImgFallback │ ├── Avatar.tsx │ ├── Work.tsx │ ├── index.tsx │ ├── styles │ │ ├── avatar.ts │ │ ├── index.ts │ │ ├── metric │ │ │ └── avatar.ts │ │ └── work.ts │ └── tests │ │ └── index.test.ts │ ├── InlineCommunities │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Input │ ├── Textarea.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── textarea.ts │ └── tests │ │ └── index.test.ts │ ├── JobItem │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── KanbanItem │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Linker │ ├── ExternalLink.tsx │ ├── InternalLink.tsx │ ├── index.tsx │ ├── styles │ │ ├── external_link.ts │ │ ├── index.ts │ │ └── internal_link.ts │ └── tests │ │ └── index.test.ts │ ├── LinksCard │ ├── Item.js │ ├── index.js │ ├── styles │ │ ├── index.ts │ │ └── item.ts │ └── tests │ │ └── index.test.ts │ ├── Loading │ ├── ArticleContentLoading.tsx │ ├── CheatSheetLoading.tsx │ ├── CommentLoading.tsx │ ├── CommunityHolder.tsx │ ├── EditorLoading.tsx │ ├── JobItemLoading.tsx │ ├── LavaLampLoading.tsx │ ├── PostItemLoading.tsx │ ├── RepoItemLoading.tsx │ ├── TagsLoading.tsx │ ├── index.tsx │ ├── styles │ │ ├── article_content_loading.ts │ │ ├── community_holder.ts │ │ ├── index.ts │ │ ├── lava_lamp_loading.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── MarkDownRender │ ├── MathVersion.js │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── MasonryCards │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Maybe │ ├── index.tsx │ └── tests │ │ └── index.test.ts │ ├── MobileMockup │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Modal │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── NaviCatalog │ ├── Dashboard.tsx │ ├── Header.tsx │ ├── List │ │ └── index.tsx │ ├── PinNumber.tsx │ ├── constant.ts │ ├── helper.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── dashboard.ts │ │ ├── header.ts │ │ ├── index.ts │ │ ├── list │ │ │ └── index.ts │ │ ├── metric.ts │ │ └── pin_number.ts │ └── tests │ │ └── index.test.ts │ ├── NaviIntro │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Navigator │ ├── BriefView.tsx │ ├── CardPopover.tsx │ ├── DigestView.tsx │ ├── MainEntries │ │ ├── DesktopView.tsx │ │ ├── MobileView.tsx │ │ ├── MoreLink.tsx │ │ └── index.tsx │ ├── MorePanel │ │ ├── DesktopView.tsx │ │ ├── Footer.tsx │ │ ├── MobileView.tsx │ │ └── index.tsx │ ├── index.tsx │ ├── styles │ │ ├── brief_view.ts │ │ ├── card_popover.ts │ │ ├── index.ts │ │ ├── main_entries.ts │ │ ├── more_links.ts │ │ └── more_panel │ │ │ ├── footer.ts │ │ │ ├── index.ts │ │ │ └── mobile_view.ts │ └── tests │ │ └── index.test.ts │ ├── NotFound │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── NoticeBar │ ├── Icon.tsx │ ├── constant.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── icon.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── OSSUploader │ ├── helper.ts │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── OauthHinter │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── PagedArticles │ ├── ArticleList.tsx │ ├── CommunityRecommends.tsx │ ├── dynamic.tsx │ ├── index.tsx │ ├── styles │ │ └── community_recommends.ts │ └── tests │ │ └── index.test.ts │ ├── Pagi │ ├── Next │ │ ├── Bottom.tsx │ │ ├── Center.tsx │ │ └── index.tsx │ ├── Perv │ │ ├── Bottom.tsx │ │ ├── Center.tsx │ │ └── index.tsx │ ├── RealPagi.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ ├── next │ │ │ ├── bottom.ts │ │ │ └── center.ts │ │ └── perv │ │ │ ├── bottom.ts │ │ │ └── center.ts │ └── tests │ │ └── index.test.ts │ ├── PostItem │ ├── CommentFirstLayout │ │ ├── DesktopView │ │ │ ├── ActiveBadge.tsx │ │ │ ├── Body.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ ├── MobileView │ │ │ ├── Body.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── CommentsCount.tsx │ ├── UpvoteFirstLayout │ │ ├── DesktopView │ │ │ ├── ActiveBadge.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ ├── MobileView │ │ │ ├── Body.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── ViewingSign.tsx │ ├── ViewsCount.tsx │ ├── index.tsx │ ├── styles │ │ ├── comment_fist_layout │ │ │ ├── desktop_view │ │ │ │ ├── active_badge.ts │ │ │ │ ├── body.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── mobile_view │ │ │ │ ├── body.ts │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ ├── comments_count.ts │ │ ├── upvote_fist_layout │ │ │ ├── desktop_view │ │ │ │ ├── active_badge.ts │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── mobile_view │ │ │ │ ├── body.ts │ │ │ │ ├── footer.ts │ │ │ │ ├── header.ts │ │ │ │ └── index.ts │ │ ├── viewing_sign.ts │ │ └── views_count.ts │ └── tests │ │ └── index.test.ts │ ├── PromotionList │ ├── Spotlight.tsx │ ├── WaitList.tsx │ ├── fakeItems.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── index.ts │ │ ├── spotlight.ts │ │ └── wait_list.ts │ └── tests │ │ └── index.test.ts │ ├── PromptIcon │ ├── PlanetDriver.tsx │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── RadarItem │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── ReadableDate │ ├── AbsoluteFmt.tsx │ ├── index.tsx │ ├── styles │ │ ├── absolute_fmt.tsx │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── RepoItem │ ├── Footer.js │ ├── Header.js │ ├── helper.js │ ├── index.js │ ├── styles │ │ ├── footer.ts │ │ ├── header.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── SearchingLabel │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── SectionLabel │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Select │ ├── components.tsx │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── index.ts │ │ └── metric.ts │ └── tests │ │ └── index.test.ts │ ├── SettingMenu │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── SocialEditor │ ├── InputBar.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ └── input_bar.ts │ └── tests │ │ └── index.test.ts │ ├── SocialList │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── StatusBox │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Sticky │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── SubTitle │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── SupportUs │ ├── Blocks.tsx │ ├── index.tsx │ ├── styles │ │ ├── blocks.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── SvgIcons │ ├── HashTagSVG.tsx │ ├── HeaderMailSVG.tsx │ ├── HeaderStatesSVG.tsx │ ├── TabAISVG.tsx │ ├── TabBackendSVG.tsx │ ├── TabBlockChainSVG.tsx │ ├── TabCheatsheetSVG.tsx │ ├── TabCitySVG.tsx │ ├── TabCommentsSVG.tsx │ ├── TabDesignSVG.tsx │ ├── TabFavoritesSVG.tsx │ ├── TabFrontendSVG.tsx │ ├── TabLikesSVG.tsx │ ├── TabMobileSVG.tsx │ ├── TabPlSVG.tsx │ ├── TabRepoSVG.tsx │ ├── TabShareSVG.tsx │ ├── TabTechSVG.tsx │ └── TabWikiSVG.tsx │ ├── Switcher │ ├── IconSwitcher.tsx │ ├── PagiOptionSwitcher │ │ ├── MainColumn.js │ │ ├── MasonryColumn.js │ │ ├── ThreeColumn.js │ │ ├── TwoColumn.js │ │ └── index.js │ ├── Radio.tsx │ ├── Tabs │ │ ├── DesktopView.tsx │ │ ├── DrawerView.tsx │ │ ├── LocalIcon.tsx │ │ ├── MobileView │ │ │ ├── ExpandView.tsx │ │ │ ├── NormalView.tsx │ │ │ └── index.tsx │ │ ├── ModelineView.tsx │ │ ├── TabIcon.tsx │ │ ├── TabItem.tsx │ │ └── index.tsx │ ├── index.tsx │ ├── styles │ │ ├── icon_selector.ts │ │ ├── metric │ │ │ ├── radio.ts │ │ │ └── tabs.ts │ │ ├── pagi_option_selector │ │ │ ├── gallery_base.ts │ │ │ ├── index.ts │ │ │ ├── main_column.ts │ │ │ ├── masonry_column.ts │ │ │ ├── three_column.ts │ │ │ └── two_column.ts │ │ ├── radio.ts │ │ └── tabs │ │ │ ├── drawer_view.ts │ │ │ ├── index.ts │ │ │ ├── local_icon.ts │ │ │ ├── mobile_view │ │ │ ├── expand_view.ts │ │ │ └── normal_view.ts │ │ │ ├── tab_icon.ts │ │ │ └── tab_item.ts │ └── tests │ │ └── index.test.ts │ ├── TabBar │ ├── DesktopView │ │ ├── BriefView.tsx │ │ ├── NormalView.tsx │ │ └── index.tsx │ ├── MobileView.tsx │ ├── alias.tsx │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ └── desktop_view │ │ │ └── brief_view.ts │ └── tests │ │ └── index.test.ts │ ├── TabSelector │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── Tag │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── TagsList │ ├── FullList.tsx │ ├── Setter.tsx │ ├── index.tsx │ ├── styles │ │ ├── index.ts │ │ ├── metric.ts │ │ └── setter.ts │ └── tests │ │ └── index.test.ts │ ├── TeamList │ ├── List │ │ ├── EditWorksLayout.tsx │ │ ├── GuideLayout.tsx │ │ ├── WorksLayout.tsx │ │ └── index.tsx │ ├── Setter │ │ ├── Header.tsx │ │ ├── List.tsx │ │ ├── SearchBox.tsx │ │ └── index.tsx │ ├── UserItem.tsx │ ├── constant.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── list │ │ │ ├── edit_works_layout.ts │ │ │ ├── guide_layout.ts │ │ │ └── works_layout.ts │ │ ├── setter │ │ │ ├── header.ts │ │ │ ├── index.ts │ │ │ ├── list.ts │ │ │ └── search_box.ts │ │ └── user_item.ts │ └── tests │ │ └── index.test.ts │ ├── TechStacks │ ├── Category.tsx │ ├── InteractiveRow.tsx │ ├── ReadOnlyRow.tsx │ ├── constant.ts │ ├── index.tsx │ ├── styles │ │ ├── category.ts │ │ ├── index.ts │ │ └── row.ts │ └── tests │ │ └── index.test.ts │ ├── TheAvatar │ ├── ArticleAuthorAvatar.tsx │ ├── PostItemAvatar.tsx │ ├── constant.ts │ ├── index.tsx │ ├── spec.d.ts │ ├── styles │ │ ├── article_author_avatar.ts │ │ ├── index.ts │ │ └── post_item_avatar.ts │ └── tests │ │ └── index.test.ts │ ├── ThemeSelector │ ├── CardSelector.tsx │ ├── DotSelector.tsx │ ├── GallerySelector.tsx │ ├── index.tsx │ ├── styles │ │ ├── card_selector.ts │ │ ├── dot_selector.ts │ │ ├── gallery_selector.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ThreadSelector │ ├── Panel.js │ ├── index.js │ ├── styles │ │ ├── index.ts │ │ └── panel.ts │ └── tests │ │ └── index.test.ts │ ├── Tooltip │ ├── ConfirmFooter.tsx │ ├── RealTooltip.tsx │ ├── constant.ts │ ├── index.tsx │ ├── styles │ │ ├── confirm_footer.ts │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── TrendLine │ ├── index.tsx │ └── tests │ │ └── index.test.ts │ ├── Upvote │ ├── ArticleLayout.tsx │ ├── BlogListLayout.tsx │ ├── CommentLayout.tsx │ ├── DefaultLayout.tsx │ ├── Desc.tsx │ ├── FixedHeaderLayout.tsx │ ├── GuideListLayout.tsx │ ├── KanbanLayout.tsx │ ├── PostListLayout.tsx │ ├── StickerLayout.tsx │ ├── UpvoteBtn.tsx │ ├── WorksArticleLayout.tsx │ ├── WorksCardLayout.tsx │ ├── index.tsx │ ├── styles │ │ ├── article_layout.ts │ │ ├── blog_list_layout.ts │ │ ├── comment_layout.ts │ │ ├── default_layout.ts │ │ ├── fixed_header_layout.ts │ │ ├── guide_list_layout.ts │ │ ├── index.ts │ │ ├── kanban_layout.ts │ │ ├── metric.ts │ │ ├── post_list_layout.ts │ │ ├── sticker_layout.ts │ │ ├── upvote_btn.ts │ │ ├── works_article_layout.ts │ │ └── works_card_layout.ts │ └── tests │ │ └── index.test.ts │ ├── UserBrief │ ├── Avatar.tsx │ ├── BadgeInfo.js │ ├── CommunityEditorInfo.js │ ├── ExtraInfo.tsx │ ├── Footer.tsx │ ├── Operators.tsx │ ├── VolunteersBadge.tsx │ ├── WorksBadge.tsx │ ├── index.tsx │ ├── styles │ │ ├── avatar.ts │ │ ├── badge_info.ts │ │ ├── community_editor_info.ts │ │ ├── extra_info.ts │ │ ├── footer.ts │ │ ├── index.ts │ │ ├── operators.ts │ │ ├── social_icons.ts │ │ ├── volunteers_badge.ts │ │ └── works_badge.ts │ └── tests │ │ └── index.test.ts │ ├── UserCell │ ├── index.js │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── VerifiedSign │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── ViewportTracker │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── WordsCounter │ ├── helper.ts │ ├── index.tsx │ ├── styles │ │ └── index.ts │ └── tests │ │ └── index.test.ts │ ├── WorksInfoCard │ ├── About │ │ ├── Download.tsx │ │ └── index.tsx │ ├── Contact.tsx │ ├── Others.tsx │ ├── Teams.tsx │ ├── index.tsx │ ├── styles │ │ ├── about │ │ │ ├── download.ts │ │ │ └── index.ts │ │ ├── contact.ts │ │ ├── index.ts │ │ ├── others.ts │ │ └── teams.ts │ └── tests │ │ └── index.test.ts │ └── dynamic.tsx ├── tsconfig.json └── utils ├── analytics.ts ├── async ├── config.ts ├── gq_client.js ├── handler.js ├── index.ts ├── methods.js ├── setup_apollo.js └── sr71.js ├── bin ├── jq-linux ├── jq-mac └── jq-win64.exe ├── bstore.ts ├── constant ├── action.ts ├── alias.ts ├── anchor.ts ├── article.ts ├── article_cat_state.ts ├── c11n.ts ├── colors.ts ├── emotion.ts ├── err.ts ├── event.ts ├── filter.ts ├── gallery.ts ├── guide.ts ├── index.ts ├── layout.ts ├── metric.ts ├── payment.ts ├── publish.ts ├── recipe.ts ├── report.ts ├── route.ts ├── size.ts ├── social.ts ├── svg.ts ├── tab.ts ├── tag.ts ├── thread.ts ├── toast.ts ├── type.ts ├── url_query.ts ├── user_thread.ts ├── view.ts └── wallpaper.ts ├── css ├── animations.ts ├── flex.ts ├── index.ts ├── media.ts ├── metric.ts ├── shape.ts └── zindex.ts ├── dom.ts ├── errors └── index.js ├── graphql.ts ├── helper.ts ├── i18n └── index.js ├── index.ts ├── logger.ts ├── macros.ts ├── mobx.ts ├── mock.ts ├── route.js ├── scripts ├── checkmark.js ├── clean.js └── generators │ ├── container │ ├── class.js.hbs │ ├── hooks.tsx.hbs │ ├── index.js │ ├── logic.ts.hbs │ ├── schema.ts.hbs │ ├── store.test.js.hbs │ ├── store.ts.hbs │ ├── styles.ts.hbs │ └── test.js.hbs │ ├── helper │ ├── container_exists.js │ ├── container_scopes.js │ └── widget_exists.js │ ├── index.js │ ├── store │ ├── index.js │ ├── store.test.js.hbs │ └── store.ts.hbs │ └── widget │ ├── class.js.hbs │ ├── index.js │ ├── stateless.tsx.hbs │ ├── styles.ts.hbs │ └── test.ts.hbs ├── seo.ts ├── ssr.js ├── themes ├── index.ts ├── skins │ ├── cyan.ts │ ├── github.ts │ ├── green.ts │ ├── index.ts │ ├── iron_green.ts │ ├── monokai.ts │ ├── purple.ts │ ├── solarized_dark.ts │ └── yellow.ts └── theme_meta.ts ├── toast.ts ├── uid.ts ├── validator.ts └── wallpaper.ts /.agignore: -------------------------------------------------------------------------------- 1 | 2 | yarn.lock 3 | coverage 4 | ./build 5 | ./bin 6 | ./npm-debug.log 7 | .next 8 | -------------------------------------------------------------------------------- /.babelrc.for_prod: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["next/babel"], 3 | "plugins": [ 4 | [ 5 | "babel-plugin-styled-components", 6 | { 7 | "ssr": true, 8 | "displayName": true, 9 | "pure": true, 10 | "preprocess": false 11 | } 12 | ] 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | # .env 2 | SERVE_PORT=3000 3 | # google analysis 4 | NEXT_PUBLIC_GA_TRACING_ID=UA-39874160-3 5 | # github 6 | NEXT_PUBLIC_GITHUB_CLIENT_ID=3b4281c5e54ffd801f85 7 | 8 | -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | // .env 2 | SERVE_PORT=8002 3 | // google analysis 4 | NEXT_PUBLIC_GA_TRACING_ID=G-9DTJQP43E2 5 | // github 6 | NEXT_PUBLIC_GITHUB_CLIENT_ID=3b4281c5e54ffd801f85 7 | 8 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | !.eslintrc.js 2 | .gitignore 3 | next-env.d.ts 4 | tsconfig.tsbuildinfo 5 | *.json 6 | *.lock 7 | *.hbs 8 | *.svg 9 | *.png 10 | *.jpeg 11 | *.txt 12 | *.md 13 | *.ico 14 | *.hbs 15 | *.css 16 | ./deploy* 17 | *.tar.gz 18 | *.xml 19 | public/* 20 | Makefile 21 | config/version.ts -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .next/ 2 | node_modules/ 3 | npm-debug.log 4 | build 5 | 6 | coverage/ 7 | .coveralls.yml 8 | yarn-error.log 9 | .env.local 10 | schema.graphql 11 | cypress//integration/examples 12 | .vscode/ 13 | .DS_Store 14 | .eslintcache 15 | 16 | cypress/videos/* 17 | tsconfig.tsbuildinfopublic/sw.js 18 | public/sw.js 19 | public/sw.js.map 20 | public/workbox-* 21 | tsconfig.tsbuildinfo 22 | -------------------------------------------------------------------------------- /.graphqlconfig: -------------------------------------------------------------------------------- 1 | { 2 | "schemaPath": "schema.graphql", 3 | "extensions": { 4 | "endpoints": { 5 | "mastani": "http://0.0.0.0:4001/graphiql" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /.huskyrc: -------------------------------------------------------------------------------- 1 | { 2 | "hooks": { 3 | "pre-commit": "pretty-quick --staged && npm run lint:staged", 4 | "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.jest.setup.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import { configure } from 'enzyme' 3 | import Adapter from '@cfaester/enzyme-adapter-react-18' 4 | 5 | configure({ adapter: new Adapter() }) 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.hbs -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "semi": false 7 | } 8 | -------------------------------------------------------------------------------- /config/config.ci.json: -------------------------------------------------------------------------------- 1 | { 2 | "//--- endpoint configs ---//": "", 3 | "// GRAPHQL_ENDPOINT": "http://localhost:4001/graphiql", 4 | "GRAPHQL_ENDPOINT": "https://api.groupher.com/graphiql" 5 | } 6 | -------------------------------------------------------------------------------- /config/config.dev.json: -------------------------------------------------------------------------------- 1 | { 2 | "//--- endpoint configs ---//": "", 3 | "GRAPHQL_ENDPOINT": "http://localhost:4001/graphiql", 4 | "// GRAPHQL_ENDPOINT": "https://api.groupher.com/graphiql" 5 | } 6 | -------------------------------------------------------------------------------- /config/config.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "//--- endpoint configs ---//": "", 3 | "GRAPHQL_ENDPOINT": "https://api.groupher.com/graphiql" 4 | } 5 | -------------------------------------------------------------------------------- /config/label_pool.ts: -------------------------------------------------------------------------------- 1 | import CONFIG from './config.json' 2 | 3 | const { ICON_CMD } = CONFIG 4 | 5 | const LABEL_POOL = { 6 | default: { 7 | iconSrc: `${ICON_CMD}/extra_tag.svg`, 8 | }, 9 | city: { 10 | iconSrc: `${ICON_CMD}/city_map.svg`, 11 | }, 12 | } 13 | 14 | export default LABEL_POOL 15 | -------------------------------------------------------------------------------- /config/version.ts: -------------------------------------------------------------------------------- 1 | export const APP_VERSION = "1.0.13" 2 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3000", 3 | "projectId": "w5dkjg", 4 | "pageLoadTimeout": 1000000, 5 | "blockHosts": "www.googletagmanager.com", 6 | 7 | "viewportWidth": 1200, 8 | "viewportHeight": 2500 9 | } 10 | -------------------------------------------------------------------------------- /cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /cypress/integration/drawer/action.spec.js: -------------------------------------------------------------------------------- 1 | describe('drawer action: ', () => { 2 | before(() => { 3 | cy.visit('/home/posts') 4 | }) 5 | }) 6 | -------------------------------------------------------------------------------- /deploy/dev/loader.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /root/web/ 4 | # npm run serve:dev & 5 | pm2-runtime start npm --name "coderplanets_web" -- run serve:dev & 6 | 7 | while true 8 | do 9 | sleep 100 10 | done 11 | -------------------------------------------------------------------------------- /deploy/dev/web.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/deploy/dev/web.tar.gz -------------------------------------------------------------------------------- /deploy/production/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16.13.0 2 | 3 | RUN mkdir /root/web 4 | 5 | ADD web.tar.gz /root/web 6 | RUN npm i -g pm2 7 | RUN cd /root/web/ && npm i --production 8 | RUN cd /root/web/ && npm i typescript --save-dev 9 | RUN cd /root/web/ && make build.prod 10 | 11 | ADD loader.sh /usr/local/bin/loader.sh 12 | RUN chmod +x /usr/local/bin/loader.sh 13 | CMD ["/usr/local/bin/loader.sh"] -------------------------------------------------------------------------------- /deploy/production/loader.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /root/web/ 4 | 5 | # make build.prod 6 | pm2-runtime start --max-memory-restart 1G npm --name "coderplanets_web" -- run serve.prod & 7 | 8 | while true 9 | do 10 | sleep 100 11 | done 12 | -------------------------------------------------------------------------------- /deploy/production/web.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/deploy/production/web.tar.gz -------------------------------------------------------------------------------- /docs/Contributing.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/docs/Contributing.md -------------------------------------------------------------------------------- /docs/FAQ.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/docs/FAQ.md -------------------------------------------------------------------------------- /docs/FAQ.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/Roadmap.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/docs/Roadmap.md -------------------------------------------------------------------------------- /docs/Roadmap.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/Troubleshooting.md: -------------------------------------------------------------------------------- 1 | ## 热加载导致代码错误 2 | 3 | 新的 react-hot-loader v4 在代码热加载的时候并不会像以前一样重新触发 4 | componentDidMount 系列钩子函数, 见 [issues 5 | 771](https://github.com/gaearon/react-hot-loader/issues/771) [issue 6 | 64](https://github.com/gaearon/react-hot-loader/issues/64)。所以截止目前,如果你改动了 logic 7 | 层,你需要重新刷新页面。。 8 | -------------------------------------------------------------------------------- /docs/analysis/apollo-engine.md: -------------------------------------------------------------------------------- 1 | ![image](https://user-images.githubusercontent.com/6184465/51664223-e5893800-1ff3-11e9-9f33-8cf1e5849585.png) 2 | 3 | TODO 4 | -------------------------------------------------------------------------------- /docs/analysis/apollo-engine.zh-CN.md: -------------------------------------------------------------------------------- 1 | ![image](https://user-images.githubusercontent.com/6184465/51664223-e5893800-1ff3-11e9-9f33-8cf1e5849585.png) 2 | 3 | TODO 4 | -------------------------------------------------------------------------------- /docs/analysis/error-tracking.md: -------------------------------------------------------------------------------- 1 | [sentry sexample](https://www.jianshu.com/p/66e00077fac3) 2 | -------------------------------------------------------------------------------- /docs/analysis/error-tracking.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/analysis/google-analysis.md: -------------------------------------------------------------------------------- 1 | todo 2 | -------------------------------------------------------------------------------- /docs/analysis/google-analysis.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/contributing.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/general/debugging.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | -------------------------------------------------------------------------------- /docs/general/debugging.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/general/generator.md: -------------------------------------------------------------------------------- 1 | todo 2 | -------------------------------------------------------------------------------- /docs/general/generator.zh-CN.md: -------------------------------------------------------------------------------- 1 | 在项目根目录下执行 `make gen` 脚本, 可以按照提示生成各种手脚架,以避免手写样板代码。 2 | 3 | ![image](https://user-images.githubusercontent.com/6184465/51660778-c4bbe500-1fe9-11e9-8fce-6c1f826a32b7.png) 4 | 5 | ![image](https://user-images.githubusercontent.com/6184465/51660650-6858c580-1fe9-11e9-85b5-b6e23e15cad9.png) 6 | 7 | 当前共支持 容器/组件/根 Store 三种样板。 8 | -------------------------------------------------------------------------------- /docs/general/pwa.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/general/pwa.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/general/seo.md: -------------------------------------------------------------------------------- 1 | todo 2 | -------------------------------------------------------------------------------- /docs/js/i18n.md: -------------------------------------------------------------------------------- 1 | ### i18n 2 | 3 | 0. 修改创建组件的模板 4 | 1. 初始加载使用浏览器默认语言 (通过: accept.language(['en', 'zh']), 见官方例子) 5 | 1. 后续过程中如果前端 locale 手动改变,则单独请求 locale 文件 (server.js 需要单 6 | 独的 locale 路由) 7 | 1. build 的时候用 default-lang.js 脚本生成 en/zh.json 文件, messages 导出后 key/id 不能重复 8 | 1. 逻辑合并到数据流 9 | -------------------------------------------------------------------------------- /docs/styling/styled-component.md: -------------------------------------------------------------------------------- 1 | This project uses [styled-component](https://www.styled-components.com/) as the css scheme, and each container or component corresponds to a `styled/` directory, which corresponds to the components in the same directory. . 2 | 3 | Please refer to [Documentation](https://www.styled-components.com/docs) for more details 4 | -------------------------------------------------------------------------------- /docs/styling/styled-component.zh-CN.md: -------------------------------------------------------------------------------- 1 | 本项目全站使用 [styled-component](https://www.styled-components.com/) 作为 css 方案, 每个容器或组件对应一个 `styled/` 目录, 与同目录下的组件一一对应。 2 | 3 | 更多详情请查阅[文档](https://www.styled-components.com/docs) 4 | -------------------------------------------------------------------------------- /docs/testing/e2e-testing.md: -------------------------------------------------------------------------------- 1 | The current project uses [cypress](https://www.cypress.io/) for e2e testing, in addition to local and travis ci, you can also use [cypress dashboard](https://dashboard.cypress.io/#/projects/w5dkjg/runs) Visually view recent test results. 2 | 3 | ![image](https://user-images.githubusercontent.com/6184465/56291494-f7442c80-6157-11e9-84d4-d7af7c5728ee.png) 4 | -------------------------------------------------------------------------------- /docs/testing/e2e-testing.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /docs/testing/unit-testing.md: -------------------------------------------------------------------------------- 1 | todo 2 | -------------------------------------------------------------------------------- /docs/testing/unit-testing.zh-CN.md: -------------------------------------------------------------------------------- 1 | 当前项目使用 [cypress](https://www.cypress.io/) 进行 e2e 测试, 除了在本地和 travis ci 以外,你还可以在 [cypress dashboard](https://dashboard.cypress.io/#/projects/w5dkjg/runs) 可视化的查看最近的测试结果。 2 | 3 | ![image](https://user-images.githubusercontent.com/6184465/56291494-f7442c80-6157-11e9-84d4-d7af7c5728ee.png) 4 | -------------------------------------------------------------------------------- /docs/troubeshooting.zh-CN.md: -------------------------------------------------------------------------------- 1 | TODO 2 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/favicon.ico -------------------------------------------------------------------------------- /public/icons/static/article/cc-by.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/article/cc-nd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/article/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/article/copyright-forbid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/article/share-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/article/unpin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/emotion/beer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/beer.png -------------------------------------------------------------------------------- /public/icons/static/emotion/biceps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/biceps.png -------------------------------------------------------------------------------- /public/icons/static/emotion/confused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/confused.png -------------------------------------------------------------------------------- /public/icons/static/emotion/downvote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/downvote.png -------------------------------------------------------------------------------- /public/icons/static/emotion/emotion.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/emotion/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/heart.png -------------------------------------------------------------------------------- /public/icons/static/emotion/pao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/pao.png -------------------------------------------------------------------------------- /public/icons/static/emotion/pill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/pill.png -------------------------------------------------------------------------------- /public/icons/static/emotion/popcorn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/popcorn.png -------------------------------------------------------------------------------- /public/icons/static/emotion/tada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/emotion/tada.png -------------------------------------------------------------------------------- /public/icons/static/shape/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/shape/link-outside.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/shape/more-l.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/shape/next-article-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/shape/next-article.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/shape/previous-article-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/shape/previous-article.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/social/QQ-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/QQ-share.png -------------------------------------------------------------------------------- /public/icons/static/social/douban-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/douban-share.png -------------------------------------------------------------------------------- /public/icons/static/social/embed-share.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/icons/static/social/facebook-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/facebook-share.png -------------------------------------------------------------------------------- /public/icons/static/social/reddit-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/reddit-share.png -------------------------------------------------------------------------------- /public/icons/static/social/telegram-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/telegram-share.png -------------------------------------------------------------------------------- /public/icons/static/social/twitter-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/twitter-share.png -------------------------------------------------------------------------------- /public/icons/static/social/wechat-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/wechat-share.png -------------------------------------------------------------------------------- /public/icons/static/social/weibo-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/weibo-share.png -------------------------------------------------------------------------------- /public/icons/static/social/zhihu-share.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/icons/static/social/zhihu-share.jpeg -------------------------------------------------------------------------------- /public/locales/en/community.json: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "hello" 3 | } 4 | -------------------------------------------------------------------------------- /public/locales/en/general.json: -------------------------------------------------------------------------------- 1 | { 2 | "all": "all", 3 | "filter:myFavorite": "my favorite", 4 | "filter:latestUpdate": "latest updated" 5 | } 6 | -------------------------------------------------------------------------------- /public/locales/zh/community.json: -------------------------------------------------------------------------------- 1 | { 2 | "hello": "你好" 3 | } 4 | -------------------------------------------------------------------------------- /public/locales/zh/general.json: -------------------------------------------------------------------------------- 1 | { 2 | "all": "全部", 3 | "filter:myFavorite": "我的收藏", 4 | "filter:latestUpdate": "最近更新" 5 | } 6 | -------------------------------------------------------------------------------- /public/pwa/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/pwa/icon-192x192.png -------------------------------------------------------------------------------- /public/pwa/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/pwa/icon-256x256.png -------------------------------------------------------------------------------- /public/pwa/icon-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/pwa/icon-384x384.png -------------------------------------------------------------------------------- /public/pwa/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/pwa/icon-512x512.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # robots.txt 2 | User-agent: * 3 | Disallow: 4 | Disallow: /blockhole 5 | -------------------------------------------------------------------------------- /public/wallpaper/bubbles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/bubbles.png -------------------------------------------------------------------------------- /public/wallpaper/cartoon.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/cartoon.jpeg -------------------------------------------------------------------------------- /public/wallpaper/co2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/co2.jpeg -------------------------------------------------------------------------------- /public/wallpaper/code.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/code.jpg -------------------------------------------------------------------------------- /public/wallpaper/curves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/curves.png -------------------------------------------------------------------------------- /public/wallpaper/earth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/earth.jpg -------------------------------------------------------------------------------- /public/wallpaper/elec.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/elec.jpg -------------------------------------------------------------------------------- /public/wallpaper/fishes.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/fishes.jpeg -------------------------------------------------------------------------------- /public/wallpaper/istanbul.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/istanbul.jpeg -------------------------------------------------------------------------------- /public/wallpaper/limones.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/limones.jpeg -------------------------------------------------------------------------------- /public/wallpaper/mataura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/mataura.png -------------------------------------------------------------------------------- /public/wallpaper/newspaper.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/newspaper.jpeg -------------------------------------------------------------------------------- /public/wallpaper/patterns/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/patterns/1.png -------------------------------------------------------------------------------- /public/wallpaper/rainbow.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/rainbow.jpeg -------------------------------------------------------------------------------- /public/wallpaper/tg-green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/public/wallpaper/tg-green.jpg -------------------------------------------------------------------------------- /server/app.js: -------------------------------------------------------------------------------- 1 | const dev = 2 | process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'ci' 3 | 4 | const next = require('next') 5 | 6 | const app = next({ dev, quiet: false }) 7 | 8 | module.exports = app 9 | -------------------------------------------------------------------------------- /src/containers/Route/styles/index.js: -------------------------------------------------------------------------------- 1 | // import styled from 'styled-components' 2 | -------------------------------------------------------------------------------- /src/containers/Route/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Route from '../index' 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/Route/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * RouteStore store test 3 | * 4 | */ 5 | 6 | // import RouteStore from '../index' 7 | 8 | it('RouteStore todo: 1 + 1 = 2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | import { P } from '@/schemas' 3 | 4 | const post = gql` 5 | ${P.post} 6 | ` 7 | const schema = { 8 | post, 9 | } 10 | 11 | export default schema 12 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/styles/desktop_view/article_layout.ts: -------------------------------------------------------------------------------- 1 | export { 2 | Wrapper, 3 | InnerWrapper, 4 | MainWrapper, 5 | SidebarWrapper, 6 | ArticleWrapper, 7 | CommentsWrapper, 8 | } from './index' 9 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/styles/desktop_view/blog_layout/article_tab.ts: -------------------------------------------------------------------------------- 1 | export { MainWrapper, ArticleWrapper, CommentsWrapper } from '../index' 2 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/styles/desktop_view/blog_layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Wrapper, InnerWrapper, SidebarWrapper } from '../index' 2 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/styles/desktop_view/works_layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Wrapper, InnerWrapper, SidebarWrapper } from '../index' 2 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/styles/desktop_view/works_layout/techstack_tab.ts: -------------------------------------------------------------------------------- 1 | export { MainWrapper, ArticleWrapper } from '../index' 2 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | 5 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 6 | 'data-test-id': testid, 7 | }))` 8 | // 9 | ` 10 | export const Title = styled.div`` 11 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/ArticleContent/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticleContent store test 3 | * 4 | */ 5 | 6 | // import ArticleContent from '../index' 7 | 8 | it('TODO: store test ArticleContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/CommunityContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/CommunityContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * CommunityContent store test 3 | * 4 | */ 5 | 6 | // import CommunityContent from '../index' 7 | 8 | it('TODO: store test CommunityContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/CoolGuideContent/styles/metric.ts: -------------------------------------------------------------------------------- 1 | export const SIDEBAR_WIDTH = '200px' 2 | export const holder = 1 3 | -------------------------------------------------------------------------------- /src/containers/content/CoolGuideContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CoolGuideContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/CoolGuideContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * CoolGuideContent store test 3 | * 4 | */ 5 | 6 | // import CoolGuideContent from '../index' 7 | 8 | it('TODO: store test CoolGuideContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/ExploreContent/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TSearchState = { 2 | isSearchMode?: boolean 3 | searchValue: string 4 | showSearchMask: boolean 5 | showCreateHint: boolean 6 | showSearchHint: boolean 7 | showSearchResultHint: boolean 8 | searchResultCount: number 9 | searchfocused?: boolean 10 | } 11 | -------------------------------------------------------------------------------- /src/containers/content/ExploreContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ExploreContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/ExploreContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ExploreContentStore store test 3 | * 4 | */ 5 | 6 | // import ExploreContentStore from '../index' 7 | 8 | it('TODO: test ExploreContentStore', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/FriendsContent/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import FriendsContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/FriendsContent/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * FriendsContent store test 3 | * 4 | */ 5 | 6 | // import FriendsContent from '../index' 7 | 8 | it('TODO: store test FriendsContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/HaveADrinkContent/constant.ts: -------------------------------------------------------------------------------- 1 | // class name of the animate timer components 2 | export const ANIMATE_TIMER_CLASS = 'animate-timer' 3 | export const VIEW = { 4 | DEFAULT: 'default', 5 | CATALOG: 'catalog', 6 | SETTING: 'setting', 7 | ABOUT: 'about', 8 | EDIT: 'edit', 9 | SHARE: 'share', 10 | COMMENT: 'comment', 11 | } 12 | -------------------------------------------------------------------------------- /src/containers/content/HaveADrinkContent/styles/body/content/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn('align-both')}; 7 | ` 8 | 9 | export const TextWrapper = styled.div`` 10 | -------------------------------------------------------------------------------- /src/containers/content/HaveADrinkContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import HaveADrinkContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/HaveADrinkContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * HaveADrinkContent store test 3 | * 4 | */ 5 | 6 | // import HaveADrinkContent from '../index' 7 | 8 | it('TODO: store test HaveADrinkContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/HelpCenterContent/constant.ts: -------------------------------------------------------------------------------- 1 | export const VIEW = { 2 | COVER: 'cover', 3 | DETAIL: 'detail', 4 | } 5 | 6 | export const holder = 1 7 | -------------------------------------------------------------------------------- /src/containers/content/HelpCenterContent/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type { TCommunity } from '@/spec' 2 | 3 | export type THelpArticle = { 4 | id: string 5 | title: string 6 | } 7 | 8 | export type TVisibles = { 9 | showReaction: boolean 10 | showHelpInfo: boolean 11 | uselessClicked: boolean 12 | } 13 | -------------------------------------------------------------------------------- /src/containers/content/HelpCenterContent/styles/cover.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | background: ${theme('thread.bg')}; 7 | padding: 60px 30px; 8 | padding-right: 10px; 9 | ` 10 | export const ContentWrapper = styled.div` 11 | ${css.flex()}; 12 | flex-wrap: wrap; 13 | ` 14 | -------------------------------------------------------------------------------- /src/containers/content/HelpCenterContent/styles/footer/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | color: ${theme('banner.desc')}; 8 | margin-top: 10%; 9 | margin-left: 24px; 10 | ` 11 | export const holder = 1 12 | -------------------------------------------------------------------------------- /src/containers/content/HelpCenterContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import HelpCenterContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/HelpCenterContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * HelpCenterContent store test 3 | * 4 | */ 5 | 6 | // import HelpCenterContent from '../index' 7 | 8 | it('TODO: store test HelpCenterContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/MeetupsContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MeetupsContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/MeetupsContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * MeetupsContent store test 3 | * 4 | */ 5 | 6 | // import MeetupsContent from '../index' 7 | 8 | it('TODO: store test MeetupsContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/MembershipContent/constant.ts: -------------------------------------------------------------------------------- 1 | import type { TPay, TPackage } from './spec' 2 | 3 | export const PAY = { 4 | YEARLY: 'yearly' as TPay, 5 | MONTHLY: 'monthly' as TPay, 6 | } 7 | 8 | export const PACKAGE = { 9 | GIRL: 'girl' as TPackage, 10 | FREE: 'free' as TPackage, 11 | ADVANCE: 'advance' as TPackage, 12 | TEAM: 'team' as TPackage, 13 | } 14 | -------------------------------------------------------------------------------- /src/containers/content/MembershipContent/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TPay = 'yearly' | 'monthly' 2 | export type TPackage = 'girl' | 'free' | 'advance' | 'team' 3 | -------------------------------------------------------------------------------- /src/containers/content/MembershipContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MembershipContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/MembershipContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * MembershipContent store test 3 | * 4 | */ 5 | 6 | // import MembershipContent from '../index' 7 | 8 | it('TODO: store test MembershipContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/RecipesContent/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const simpleQuery = gql` 4 | query($filter: filter!) { 5 | post(id: $id) { 6 | id 7 | } 8 | } 9 | ` 10 | 11 | const schema = { 12 | simpleQuery, 13 | } 14 | 15 | export default schema 16 | -------------------------------------------------------------------------------- /src/containers/content/RecipesContent/styles/metric.js: -------------------------------------------------------------------------------- 1 | export const SIDEBAR_WIDTH = '200px' 2 | export const SIDEBAR_MARGIN = '25px' 3 | -------------------------------------------------------------------------------- /src/containers/content/RecipesContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import RecipesContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/RecipesContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * RecipesContent store test 3 | * 4 | */ 5 | 6 | // import RecipesContent from '../index' 7 | 8 | it('TODO: store test RecipesContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/SponsorContent/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const simpleQuery = gql` 4 | query($filter: filter!) { 5 | post(id: $id) { 6 | id 7 | } 8 | } 9 | ` 10 | 11 | const schema = { 12 | simpleQuery, 13 | } 14 | 15 | export default schema 16 | -------------------------------------------------------------------------------- /src/containers/content/SponsorContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import SponsorContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/SponsorContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * SponsorContent store test 3 | * 4 | */ 5 | 6 | // import SponsorContent from '../index' 7 | 8 | it('TODO: store test SponsorContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/SubscribeContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import SubscribeContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/SubscribeContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * SubscribeContent store test 3 | * 4 | */ 5 | 6 | // import SubscribeContent from '../index' 7 | 8 | it('TODO: store test SubscribeContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/TrendingContent/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const simpleQuery = gql` 4 | query($filter: filter!) { 5 | post(id: $id) { 6 | id 7 | } 8 | } 9 | ` 10 | 11 | const schema = { 12 | simpleQuery, 13 | } 14 | 15 | export default schema 16 | -------------------------------------------------------------------------------- /src/containers/content/TrendingContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import TrendingContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/TrendingContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * TrendingContent store test 3 | * 4 | */ 5 | 6 | // import TrendingContent from '../index' 7 | 8 | it('TODO: store test TrendingContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/UserContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import UserContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/UserContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * UserContent store test 3 | * 4 | */ 5 | 6 | // import UserContent from '../index' 7 | 8 | it('TODO: store test UserContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/WorksContent/constant.ts: -------------------------------------------------------------------------------- 1 | export const VIEW = { 2 | WORKS: 'works', 3 | DISCUSS: 'discuss', 4 | MAKERS: 'makers', 5 | RELEASE: 'release', 6 | } 7 | 8 | export const BEST = { 9 | MONTH: 'month', 10 | WEEK: 'week', 11 | } 12 | -------------------------------------------------------------------------------- /src/containers/content/WorksContent/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const simpleQuery = gql` 4 | query($filter: filter!) { 5 | post(id: $id) { 6 | id 7 | } 8 | } 9 | ` 10 | 11 | const schema = { 12 | simpleQuery, 13 | } 14 | 15 | export default schema 16 | -------------------------------------------------------------------------------- /src/containers/content/WorksContent/styles/filter_bar.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | ` 8 | export const FilterWrapper = styled.div` 9 | /* border: 1px solid #0a4253; */ 10 | /* border-radius: 5px; */ 11 | ` 12 | -------------------------------------------------------------------------------- /src/containers/content/WorksContent/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import WorksContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/content/WorksContent/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * WorksContent store test 3 | * 4 | */ 5 | 6 | // import WorksContent from '../index' 7 | 8 | it('TODO: store test WorksContent', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/digest/ArticleDigest/DesktopView/dynamic.tsx: -------------------------------------------------------------------------------- 1 | import dynamic from 'next/dynamic' 2 | 3 | export const CollectionFolder = dynamic( 4 | () => import('@/containers/tool/CollectionFolder'), 5 | { 6 | ssr: false, 7 | }, 8 | ) 9 | 10 | export const FixedHeader = dynamic(() => import('./FixedHeader'), { 11 | ssr: false, 12 | }) 13 | -------------------------------------------------------------------------------- /src/containers/digest/ArticleDigest/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleDigest from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/digest/ArticleDigest/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticleDigest store test 3 | * 4 | */ 5 | 6 | // import ArticleDigest from '../index' 7 | 8 | it('TODO: store test ArticleDigest', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/digest/CommunityDigest/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityDigest from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/digest/CommunityDigest/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * CommunityDigest store test 3 | * 4 | */ 5 | 6 | // import CommunityDigest from '../index' 7 | 8 | it('TODO: store test CommunityDigest', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/AccountEditor/constant.ts: -------------------------------------------------------------------------------- 1 | export const SEX = { 2 | DUDE: 'dude', 3 | GIRL: 'girl', 4 | } 5 | 6 | export const holder = 1 7 | -------------------------------------------------------------------------------- /src/containers/editor/AccountEditor/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TEditData = { 2 | profile: { 3 | avatar: string 4 | nickname: string 5 | bio: string 6 | shortbio: string 7 | sex: string 8 | location: string 9 | email: string 10 | } 11 | social: { 12 | github: string 13 | twitter: string 14 | company: string 15 | blog: string 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/containers/editor/AccountEditor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import AccountEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/AccountEditor/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * AccountEditorStore store test 3 | * 4 | */ 5 | 6 | // import AccountEditorStore from '../index' 7 | 8 | it('TODO: test AccountEditorStore', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/ArticleEditor/styles/addon/radar_addon.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export { LinkIcon, LinkInput } from './index' 6 | 7 | export const Wrapper = styled.div` 8 | ${css.flex('align-center')}; 9 | ` 10 | export const LinkWrapper = styled.div` 11 | ${css.flex('align-center')}; 12 | position: relative; 13 | ` 14 | -------------------------------------------------------------------------------- /src/containers/editor/ArticleEditor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/ArticleEditor/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticleEditor store test 3 | * 4 | */ 5 | 6 | // import ArticleEditor from '../index' 7 | 8 | it('TODO: store test ArticleEditor', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/BlogEditor/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TValidState = { 2 | rss: boolean 3 | } 4 | 5 | export type TStep = 'STEP_1' | 'STEP_2' | 'STEP_3' 6 | -------------------------------------------------------------------------------- /src/containers/editor/BlogEditor/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BlogEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/BlogEditor/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * BlogEditor store test 3 | * 4 | */ 5 | 6 | // import BlogEditor from '../index' 7 | 8 | it('TODO: store test BlogEditor', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/CommunityEditor/styles/content/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('justify-center')}; 7 | min-height: calc(100vh - 350px); /* 350 is the banner max height */ 8 | ` 9 | export const holder = 1 10 | -------------------------------------------------------------------------------- /src/containers/editor/CommunityEditor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ExploreContent from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/CommunityEditor/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ExploreContentStore store test 3 | * 4 | */ 5 | 6 | // import ExploreContentStore from '../index' 7 | 8 | it('TODO: test ExploreContentStore', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/RepoEditor/styles/index.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | // import Img from '@/Img' 3 | 4 | export const Wrapper = styled.div`` 5 | export const Holder = styled.div`` 6 | -------------------------------------------------------------------------------- /src/containers/editor/RepoEditor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import RepoEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/RepoEditor/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * RepoEditor store test 3 | * 4 | */ 5 | 6 | // import RepoEditor from '../index' 7 | 8 | it('TODO: store test RepoEditor', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/RichEditor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import RichEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/RichEditor/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * RichEditor store test 3 | * 4 | */ 5 | 6 | // import RichEditor from '../index' 7 | 8 | it('TODO: store test RichEditor', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/WallpaperEditor/Custom/index.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | 3 | import UploadBox from './UploadBox' 4 | import { Wrapper } from '../styles/custom' 5 | 6 | const Custom: FC = () => { 7 | return ( 8 | 9 | 10 | 11 | ) 12 | } 13 | 14 | export default memo(Custom) 15 | -------------------------------------------------------------------------------- /src/containers/editor/WallpaperEditor/constant.ts: -------------------------------------------------------------------------------- 1 | import type { TTab } from './spec' 2 | 3 | export const TAB = { 4 | BUILDIN: 'buildin', 5 | CUSTOM: 'custom', 6 | } as Record, TTab> 7 | 8 | export const TAB_OPTIONS = [ 9 | { 10 | title: '内置壁纸', 11 | raw: TAB.BUILDIN, 12 | }, 13 | { 14 | title: '上传壁纸', 15 | raw: TAB.CUSTOM, 16 | }, 17 | ] 18 | -------------------------------------------------------------------------------- /src/containers/editor/WallpaperEditor/styles/custom/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | margin-top: 15px; 8 | ` 9 | export const holder = 1 10 | -------------------------------------------------------------------------------- /src/containers/editor/WallpaperEditor/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import WallpaperEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/WallpaperEditor/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * WallpaperEditor store test 3 | * 4 | */ 5 | 6 | // import WallpaperEditor from '../index' 7 | 8 | it('TODO: store test WallpaperEditor', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/WorksEditor/styles/metric.ts: -------------------------------------------------------------------------------- 1 | export const CONTENT_WIDTH = 570 2 | export const CONTENT_NARROW_WIDTH = 500 3 | -------------------------------------------------------------------------------- /src/containers/editor/WorksEditor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import WorksEditor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/editor/WorksEditor/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * WorksEditor store test 3 | * 4 | */ 5 | 6 | // import WorksEditor from '../index' 7 | 8 | it('TODO: store test WorksEditor', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/layout/GlobalLayout/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import GlobalLayout from '../index' 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/layout/GlobalLayout/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * GlobalLayoutStore store test 3 | * 4 | */ 5 | 6 | // import GlobalLayoutStore from '../index' 7 | 8 | it('GlobalLayoutStore 1 + 1 = 2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/layout/ThemePalette/dynamic.tsx: -------------------------------------------------------------------------------- 1 | import dynamic from 'next/dynamic' 2 | 3 | export const NextNprogress = dynamic(() => import('nextjs-progressbar'), { 4 | ssr: false, 5 | }) 6 | 7 | export const CodeSyxHighlight = dynamic(() => import('./CodeSyxHighlight'), { 8 | ssr: false, 9 | }) 10 | -------------------------------------------------------------------------------- /src/containers/thread/AboutThread/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import AboutThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/AboutThread/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * AboutThread store test 3 | * 4 | */ 5 | 6 | // import AboutThread from '../index' 7 | 8 | it('TODO: store test AboutThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ArticlesThread/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticlesThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ArticlesThread/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticlesThread store test 3 | * 4 | */ 5 | 6 | // import ArticlesThread from '../index' 7 | 8 | it('TODO: store test ArticlesThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ChangelogThread/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ChangelogThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ChangelogThread/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ChangelogThread store test 3 | * 4 | */ 5 | 6 | // import ChangelogThread from '../index' 7 | 8 | it('TODO: store test ChangelogThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/CperMapThread/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const communityGeoInfo = gql` 4 | query($id: ID) { 5 | communityGeoInfo(id: $id) { 6 | city 7 | long 8 | lant 9 | value 10 | } 11 | } 12 | ` 13 | 14 | const schema = { 15 | communityGeoInfo, 16 | } 17 | 18 | export default schema 19 | -------------------------------------------------------------------------------- /src/containers/thread/CperMapThread/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CperMapThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/CperMapThread/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * CperMapThread store test 3 | * 4 | */ 5 | 6 | // import CperMapThread from '../index' 7 | 8 | it('TODO: store test CperMapThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/Domain/index.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | 3 | import { Wrapper } from '../styles/domain' 4 | 5 | type TProps = { 6 | testid?: string 7 | } 8 | 9 | const Domain: FC = ({ testid = 'domain' }) => { 10 | return ( 11 | 12 |
Domain
13 |
14 | ) 15 | } 16 | 17 | export default memo(Domain) 18 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/styles/admin/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | padding: 0 120px; 8 | padding-left: 80px; 9 | ` 10 | 11 | export const Title = styled.div`` 12 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/styles/alias/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | padding: 20px 80px; 8 | padding-right: 120px; 9 | ` 10 | 11 | export const Title = styled.div`` 12 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/styles/domain/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex()}; 7 | ` 8 | 9 | export const Title = styled.div`` 10 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/styles/third_part/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex()}; 7 | ` 8 | 9 | export const Title = styled.div`` 10 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/styles/threads/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | padding: 0; 7 | padding-left: 80px; 8 | padding-right: 120px; 9 | ` 10 | export const Desc = styled.div` 11 | width: 80%; 12 | line-height: 1.65; 13 | ` 14 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import DashboardThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/DashboardThread/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * DashboardThread store test 3 | * 4 | */ 5 | 6 | // import DashboardThread from '../index' 7 | 8 | it('TODO: store test DashboardThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/HelpThread/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import HelpThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/HelpThread/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * HelpThread store test 3 | * 4 | */ 5 | 6 | // import HelpThread from '../index' 7 | 8 | it('TODO: store test HelpThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/KanbanThread/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import KanbanThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/KanbanThread/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * KanbanThread store test 3 | * 4 | */ 5 | 6 | // import KanbanThread from '../index' 7 | 8 | it('TODO: store test KanbanThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ReposThread/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | import { P } from '@/schemas' 3 | 4 | const schema = { 5 | pagedRepos: gql` 6 | ${P.pagedRepos} 7 | `, 8 | pagedArticleTags: gql` 9 | ${P.pagedArticleTags} 10 | `, 11 | } 12 | 13 | export default schema 14 | -------------------------------------------------------------------------------- /src/containers/thread/ReposThread/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ReposThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ReposThread/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ReposThread store test 3 | * 4 | */ 5 | 6 | // import ReposThread from '../index' 7 | 8 | it('TODO: store test ReposThread', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ThreadSidebar/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ThreadSidebar from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/thread/ThreadSidebar/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ThreadSidebar store test 3 | * 4 | */ 5 | 6 | // import ThreadSidebar from '../index' 7 | 8 | it('TODO: store test ThreadSidebar', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/AbuseReport/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TREPORT_ITEM = { 2 | title: string 3 | raw: string 4 | checked: boolean 5 | info?: string 6 | detail: string 7 | } 8 | 9 | export type TView = 'main' | 'detail' 10 | -------------------------------------------------------------------------------- /src/containers/tool/AbuseReport/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import AbuseReport from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/AbuseReport/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * AbuseReport store test 3 | * 4 | */ 5 | 6 | // import AbuseReport from '../index' 7 | 8 | it('TODO: store test AbuseReport', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/ArticleSticker/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleSticker from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/ArticleSticker/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticleSticker store test 3 | * 4 | */ 5 | 6 | // import ArticleSticker from '../index' 7 | 8 | it('TODO: store test ArticleSticker', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/AvatarAdder/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import AvatarAdder from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/AvatarAdder/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * AvatarAdder store test 3 | * 4 | */ 5 | 6 | // import AvatarAdder from '../index' 7 | 8 | it('TODO: store test AvatarAdder', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/C11NSettingPanel/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const simpleQuery = gql` 4 | query($filter: filter!) { 5 | post(id: $id) { 6 | id 7 | } 8 | } 9 | ` 10 | 11 | const schema = { 12 | simpleQuery, 13 | } 14 | 15 | export default schema 16 | -------------------------------------------------------------------------------- /src/containers/tool/C11NSettingPanel/styles/theme_settings.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | 5 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 6 | 'data-test-id': testid, 7 | }))` 8 | margin-top: 16px; 9 | /* margin-left: 30px; */ 10 | ` 11 | export const Title = styled.div`` 12 | -------------------------------------------------------------------------------- /src/containers/tool/C11NSettingPanel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import C11NSettingPanel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/C11NSettingPanel/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * C11NSettingPanel store test 3 | * 4 | */ 5 | 6 | // import C11NSettingPanel from '../index' 7 | 8 | it('TODO: store test C11NSettingPanel', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Cashier/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TContentView = 'pay' | 'question' 2 | export type TSubContentView = 'pay' | 'confirm' 3 | export type TAmount = '10.24' | '51.2' | '102.4' | '512' | '1024' 4 | -------------------------------------------------------------------------------- /src/containers/tool/Cashier/styles/content.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div` 7 | ${css.flexColumnGrow('align-center')}; 8 | ` 9 | 10 | export const holder = 1 11 | -------------------------------------------------------------------------------- /src/containers/tool/Cashier/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | // import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div` 7 | display: flex; 8 | padding: 20px; 9 | ` 10 | 11 | export const holder = 1 12 | -------------------------------------------------------------------------------- /src/containers/tool/Cashier/styles/sidebar.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | 5 | export const Wrapper = styled.div`` 6 | export const Holder = 1 7 | -------------------------------------------------------------------------------- /src/containers/tool/Cashier/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Cashier from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Cashier/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Cashier store test 3 | * 4 | */ 5 | 6 | // import Cashier from '../index' 7 | 8 | it('TODO: store test Cashier', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/CollectionFolder/styles/box_view.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div`` 7 | export const MsgWrapper = styled.div` 8 | ${css.flex('justify-center')}; 9 | width: 90%; 10 | ` 11 | -------------------------------------------------------------------------------- /src/containers/tool/CollectionFolder/styles/metric.ts: -------------------------------------------------------------------------------- 1 | export const MODAL_MIN_HEIGHT = '48vh' 2 | export const holder = 1 3 | -------------------------------------------------------------------------------- /src/containers/tool/CollectionFolder/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CollectionFolder from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/CollectionFolder/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * CollectionFolder store test 3 | * 4 | */ 5 | 6 | // import CollectionFolder from '../index' 7 | 8 | it('TODO: store test CollectionFolder', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityJoinBadge/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityJoinBadge from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityJoinBadge/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * CommunityJoinBadge store test 3 | * 4 | */ 5 | 6 | // import CommunityJoinBadge from '../index' 7 | 8 | it('TODO: store test CommunityJoinBadge', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityTagSetter/styles/community_setter/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | background: ${theme('modal.subPanel')}; 7 | min-height: 35vh; 8 | ` 9 | 10 | export const holder = 1 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityTagSetter/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | 5 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 6 | 'data-test-id': testid, 7 | }))` 8 | // 9 | ` 10 | export const Title = styled.div`` 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityTagSetter/styles/tag_setter/creator.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | width: 100%; 7 | padding: 20px; 8 | min-height: 300px; 9 | ` 10 | export const InnerWrapper = styled.div` 11 | color: ${theme('thread.articleDigest')}; 12 | /* ${css.flex()}; */ 13 | ` 14 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityTagSetter/styles/tag_setter/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | background: ${theme('modal.subPanel')}; 7 | min-height: 35vh; 8 | ` 9 | 10 | export const holder = 1 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityTagSetter/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityTagSetter from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/CommunityTagSetter/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * CommunityTagSetter store test 3 | * 4 | */ 5 | 6 | // import CommunityTagSetter from '../index' 7 | 8 | it('TODO: store test CommunityTagSetter', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Doraemon/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Doraemon from '../index' 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Doraemon/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * DoraemonStore store test 3 | * 4 | */ 5 | 6 | // import DoraemonStore from '../index' 7 | 8 | it('1 + 1 = 2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Drawer/AddOn/CloseButton.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | 3 | import IconButton from '@/widgets/Buttons/IconButton' 4 | import { closeDrawer } from '../logic' 5 | 6 | const CloseButton: FC = () => { 7 | return ( 8 | 9 | ) 10 | } 11 | 12 | export default memo(CloseButton) 13 | -------------------------------------------------------------------------------- /src/containers/tool/Drawer/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Preview from '../index' 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Drawer/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * DrawerStore store test 3 | * 4 | */ 5 | // import DrawerStore from '../index' 6 | 7 | it('1 + 1 = 2', () => { 8 | expect(1 + 1).toBe(2) 9 | }) 10 | -------------------------------------------------------------------------------- /src/containers/tool/ErrorBox/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div` 7 | ${css.flexColumn()}; 8 | min-height: 320px; 9 | max-height: 400px; 10 | overflow-y: hidden; 11 | ` 12 | export const Title = styled.div`` 13 | -------------------------------------------------------------------------------- /src/containers/tool/ErrorBox/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ErrorBox from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/ErrorBox/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ErrorBox store test 3 | * 4 | */ 5 | 6 | // import ErrorBox from '../index' 7 | 8 | it('TODO: store test ErrorBox', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/JoinModal/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | 3 | const simpleQuery = gql` 4 | query($filter: filter!) { 5 | post(id: $id) { 6 | id 7 | } 8 | } 9 | ` 10 | 11 | const schema = { 12 | simpleQuery, 13 | } 14 | 15 | export default schema 16 | -------------------------------------------------------------------------------- /src/containers/tool/JoinModal/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import JoinModal from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/JoinModal/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * JoinModal store test 3 | * 4 | */ 5 | 6 | // import JoinModal from '../index' 7 | 8 | it('TODO: store test JoinModal', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/MailBox/NotificationList.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { isEmpty } from 'ramda' 3 | 4 | import EmptyLabel from '@/widgets/EmptyLabel' 5 | 6 | const NotificationList = ({ data }) => { 7 | if (isEmpty(data)) return 8 | 9 | return

NotificationList

10 | } 11 | 12 | export default React.memo(NotificationList) 13 | -------------------------------------------------------------------------------- /src/containers/tool/MailBox/SysNotificationList.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { isEmpty } from 'ramda' 3 | 4 | import EmptyLabel from '@/widgets/EmptyLabel' 5 | 6 | const SysNotificationList = ({ data }) => { 7 | if (isEmpty(data)) return 8 | 9 | return

SysNotificationList

10 | } 11 | 12 | export default React.memo(SysNotificationList) 13 | -------------------------------------------------------------------------------- /src/containers/tool/MailBox/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MailBox from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/MailBox/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * MailBox store test 3 | * 4 | */ 5 | 6 | // import MailBox from '../index' 7 | 8 | it('TODO: store test MailBox', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Share/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TLinksData = { 2 | link: string 3 | html: string 4 | md: string 5 | orgMode: string 6 | } 7 | 8 | export type TShareData = { 9 | url: string 10 | title: string 11 | digest: string 12 | } 13 | 14 | export type TMenu = 'copy-link' | 'email' | 'wechat' | 'more' 15 | -------------------------------------------------------------------------------- /src/containers/tool/Share/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Share from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/tool/Share/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Share store test 3 | * 4 | */ 5 | 6 | // import Share from '../index' 7 | 8 | it('TODO: store test Share', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/ArticleFooter/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleFooter from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/ArticleFooter/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticleFooter store test 3 | * 4 | */ 5 | 6 | // import ArticleFooter from '../index' 7 | 8 | it('TODO: store test ArticleFooter', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Comments/styles/comment/footer.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div` 7 | ${css.flex('align-center')}; 8 | margin-bottom: 5px; 9 | margin-top: -10px; 10 | margin-left: -3px; 11 | ` 12 | export const holder = 1 13 | -------------------------------------------------------------------------------- /src/containers/unit/Comments/styles/comment_reply_bar.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import { ReplyBarBase, ReplyToBodyBase, ReplyToFloorBase } from './index' 4 | 5 | export const ReplyBar = styled(ReplyBarBase)` 6 | margin-left: -2px; 7 | ` 8 | export const ReplyToBody = styled(ReplyToBodyBase)`` 9 | export const ReplyToFloor = styled(ReplyToFloorBase)`` 10 | -------------------------------------------------------------------------------- /src/containers/unit/Comments/styles/editor/footer.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // import Img from '@/Img' 4 | import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div` 7 | ${css.flex('align-center', 'justify-between')}; 8 | margin-bottom: 8px; 9 | padding: 0 30px; 10 | ` 11 | 12 | export const holder = 1 13 | -------------------------------------------------------------------------------- /src/containers/unit/Comments/styles/head_bar/state_bar/actions.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('align-center')}; 7 | ` 8 | export const holder = 1 9 | -------------------------------------------------------------------------------- /src/containers/unit/Comments/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Comments from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Comments/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * CommentsStore store test 3 | * 4 | */ 5 | 6 | // import CommentsStore from '../index' 7 | 8 | it('TODO: test CommentsStore', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Footer/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Footer2 from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Footer/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Footer2 store test 3 | * 4 | */ 5 | 6 | // import Footer2 from '../index' 7 | 8 | it('TODO: store test Footer2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Header/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Header from '../index' 5 | 6 | describe('
', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Header/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * HeaderStore store test 3 | * 4 | */ 5 | 6 | // import HeaderStore from '../index' 7 | 8 | it('HeaderStore todo: 1 + 1 = 2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLine/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ModeLine from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLine/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ModeLine store test 3 | * 4 | */ 5 | 6 | // import ModeLine from '../index' 7 | 8 | it('TODO: store test ModeLine', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/ReportMenu.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | 3 | import AbuseReport from '@/containers/tool/AbuseReport' 4 | 5 | import { Wrapper } from './styles/share_menu' 6 | 7 | const ReportMenu: FC = () => { 8 | return ( 9 | 10 | 11 | 12 | ) 13 | } 14 | 15 | export default memo(ReportMenu) 16 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/ShareMenu.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | 3 | import Share from '@/containers/tool/Share' 4 | 5 | import { Wrapper } from './styles/share_menu' 6 | 7 | const ShareMenu: FC = () => { 8 | return ( 9 | 10 | 11 | 12 | ) 13 | } 14 | 15 | export default memo(ShareMenu) 16 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/spec.d.ts: -------------------------------------------------------------------------------- 1 | import type { TCommunity, TThread, TArticle } from '@/spec' 2 | 3 | export type TCurActive = { 4 | community: TCommunity 5 | thread: TThread 6 | article: TArticle 7 | } 8 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/styles/metrics/filter_menu.js: -------------------------------------------------------------------------------- 1 | import { M_MENU_HEIGHT } from './index' 2 | 3 | export const getFilterMenuScrollHeight = () => { 4 | const SCROLL_BUTTOM_OFFSET = '100px' 5 | 6 | return `calc(${M_MENU_HEIGHT} - ${SCROLL_BUTTOM_OFFSET})` 7 | } 8 | 9 | export const holder = 1 10 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/styles/metrics/index.js: -------------------------------------------------------------------------------- 1 | import { 2 | L_HEIGHT, 3 | M_HEIGHT, 4 | H_HEIGHT, 5 | } from '@/containers/tool/Drawer/styles/metrics' 6 | 7 | export const L_MENU_HEIGHT = L_HEIGHT 8 | export const H_MENU_HEIGHT = H_HEIGHT 9 | export const M_MENU_HEIGHT = M_HEIGHT 10 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ModeLineMenu from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/ModeLineMenu/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ModeLineMenu store test 3 | * 4 | */ 5 | 6 | // import ModeLineMenu from '../index' 7 | 8 | it('TODO: store test ModeLineMenu', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/Sidebar/styles/menu_list/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const Wrapper = styled.div` 4 | left: 0; 5 | position: relative; 6 | height: 100%; 7 | transition: left 0.2s; 8 | ` 9 | export const holder = 1 10 | -------------------------------------------------------------------------------- /src/containers/unit/Sidebar/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Sidebar from '../index' 5 | 6 | describe('', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/TagsBar/styles/desktop_view/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | position: relative; 7 | ${css.flexColumn()}; 8 | ` 9 | export const TagsWrapper = styled.div`` 10 | -------------------------------------------------------------------------------- /src/containers/unit/TagsBar/styles/metric.ts: -------------------------------------------------------------------------------- 1 | import { nilOrEmpty } from '@/utils/validator' 2 | 3 | export const getActiveColor = ( 4 | active: boolean, 5 | color: string, 6 | activeid: string | null, 7 | ): string => { 8 | if (!nilOrEmpty(activeid)) return active ? color : '#497684' 9 | 10 | return !active ? color : '#497684' 11 | } 12 | 13 | export const holder = 1 14 | -------------------------------------------------------------------------------- /src/containers/unit/TagsBar/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import TagsBar from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/unit/TagsBar/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * TagsBar store test 3 | * 4 | */ 5 | 6 | // import TagsBar from '../index' 7 | 8 | it('TODO: store test TagsBar', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserBilling/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | ` 8 | 9 | export const ErrText = styled.div` 10 | color: ${theme('baseColor.red')}; 11 | ` 12 | -------------------------------------------------------------------------------- /src/containers/user/UserBilling/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import UserBilling from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserBilling/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * UserBilling store test 3 | * 4 | */ 5 | 6 | // import UserBilling from '../index' 7 | 8 | it('TODO: store test UserBilling', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserLister/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | height: 600px; 7 | padding: 20px; 8 | ` 9 | export const MsgWrapper = styled.div` 10 | ${css.flex('align-both')}; 11 | width: 90%; 12 | height: 180px; 13 | ` 14 | -------------------------------------------------------------------------------- /src/containers/user/UserLister/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import UserLister from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserLister/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * UserLister store test 3 | * 4 | */ 5 | 6 | // import UserLister from '../index' 7 | 8 | it('TODO: store test UserLister', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserProfile/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import UserProfile from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserProfile/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * UserProfile store test 3 | * 4 | */ 5 | 6 | // import UserProfile from '../index' 7 | 8 | it('TODO: store test UserProfile', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserPublishedArticles/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import UserPublishedArticles from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserPublishedArticles/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * UserPublishedArticles store test 3 | * 4 | */ 5 | 6 | // import UserPublishedArticles from '../index' 7 | 8 | it('TODO: store test UserPublishedArticles', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserSettings/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import UserSettings from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/user/UserSettings/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * UserSettings store test 3 | * 4 | */ 5 | 6 | // import UserSettings from '../index' 7 | 8 | it('TODO: store test UserSettings', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/viewer/ArticleViewer/styles/works_viewer/basic_info.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumn()}; 7 | width: 100%; 8 | ` 9 | export const TabWrapper = styled.div` 10 | ${css.flex('align-center')}; 11 | position: absolute; 12 | left: 0; 13 | bottom: -1px; 14 | ` 15 | -------------------------------------------------------------------------------- /src/containers/viewer/ArticleViewer/styles/works_viewer/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | padding: 0 8px; 7 | ` 8 | export const ContentWrapper = styled.div` 9 | ${css.flexColumn()}; 10 | min-height: 200px; 11 | margin-top: 26px; 12 | ` 13 | -------------------------------------------------------------------------------- /src/containers/viewer/ArticleViewer/tests/index.test.js: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleViewer from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/viewer/ArticleViewer/tests/store.test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * ArticleViewer store test 3 | * 4 | */ 5 | 6 | // import ArticleViewer from '../index' 7 | 8 | it('TODO: store test ArticleViewer', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/viewer/MailsViewer/NotificationList.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { isEmpty } from 'ramda' 3 | 4 | import EmptyLabel from '@/widgets/EmptyLabel' 5 | 6 | const NotificationList = ({ data }) => { 7 | if (isEmpty(data)) return 8 | 9 | return

NotificationList

10 | } 11 | 12 | export default React.memo(NotificationList) 13 | -------------------------------------------------------------------------------- /src/containers/viewer/MailsViewer/schema.ts: -------------------------------------------------------------------------------- 1 | import { gql } from '@urql/core' 2 | import { P } from '@/schemas' 3 | 4 | const mentions = gql` 5 | ${P.mentions} 6 | ` 7 | 8 | const schema = { 9 | mentions, 10 | } 11 | 12 | export default schema 13 | -------------------------------------------------------------------------------- /src/containers/viewer/MailsViewer/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MailsViewer from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/viewer/MailsViewer/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * MailsViewer store test 3 | * 4 | */ 5 | 6 | // import MailsViewer from '../index' 7 | 8 | it('TODO: store test MailsViewer', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/viewer/RepoViewer/styles/index.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const Wrapper = styled.div`` 4 | 5 | export const CommentsWrapper = styled.div` 6 | min-height: 200px; 7 | margin-top: 30px; 8 | margin-left: 3%; 9 | margin-right: 3%; 10 | margin-bottom: 10%; 11 | border-radius: 5px; 12 | ` 13 | -------------------------------------------------------------------------------- /src/containers/viewer/RepoViewer/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import RepoViewer from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/containers/viewer/RepoViewer/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * RepoViewer store test 3 | * 4 | */ 5 | 6 | // import RepoViewer from '../index' 7 | 8 | it('TODO: store test RepoViewer', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/hoc/index.js: -------------------------------------------------------------------------------- 1 | export { default as withGuardian } from './withGuardian' 2 | export const holder = 1 3 | -------------------------------------------------------------------------------- /src/hooks/useClipboard.ts: -------------------------------------------------------------------------------- 1 | import useCopyToClipboard from 'react-use/lib/useCopyToClipboard' 2 | 3 | export type { CopyToClipboardState as TCopyToClipboardState } from 'react-use/lib/useCopyToClipboard' 4 | 5 | // export type TCopyToClipboardState = CopyToClipboardState 6 | 7 | export default useCopyToClipboard 8 | -------------------------------------------------------------------------------- /src/hooks/useInterval.ts: -------------------------------------------------------------------------------- 1 | import useInterval from 'react-use/lib/useInterval' 2 | 3 | export default useInterval 4 | -------------------------------------------------------------------------------- /src/hooks/useSwipe.ts: -------------------------------------------------------------------------------- 1 | import { useSwipeable } from 'react-swipeable' 2 | 3 | const useSwipe = useSwipeable 4 | 5 | export default useSwipe 6 | -------------------------------------------------------------------------------- /src/hooks/useTrans.ts: -------------------------------------------------------------------------------- 1 | import { useTranslation } from '@/i18n' 2 | 3 | const useTrans = useTranslation 4 | 5 | export default useTrans 6 | -------------------------------------------------------------------------------- /src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | 3 | const NotFoundPage: FC = () => { 4 | return ( 5 |
6 |
404 | NotFoundPage
7 |
8 | ) 9 | } 10 | 11 | export default memo(NotFoundPage) 12 | -------------------------------------------------------------------------------- /src/pages/oops.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | 3 | import ErrorPage from '@/widgets/ErrorPage' 4 | import ThemePalette from '@/containers/layout/ThemePalette' 5 | 6 | const Oops: FC = () => { 7 | return ( 8 | 9 | 10 | 11 | ) 12 | } 13 | 14 | export default Oops 15 | -------------------------------------------------------------------------------- /src/services/github_api/config.js: -------------------------------------------------------------------------------- 1 | // github v4 api endpoint 2 | export const graphqlEndpoint = 'https://api.github.com/graphql' 3 | // github v3 api endpoint 4 | export const restEndpoint = 'https://api.github.com' 5 | // github content endpoint 6 | export const contentEndpoint = 'https://raw.githubusercontent.com/coderplanets' 7 | // timeout sec 8 | export const TIMEOUT_SEC = 5 * 1000 9 | -------------------------------------------------------------------------------- /src/services/index.js: -------------------------------------------------------------------------------- 1 | export { default as githubAPI } from './github_api' 2 | export const holder = 1 3 | -------------------------------------------------------------------------------- /src/spec/c11n.d.ts: -------------------------------------------------------------------------------- 1 | export type TC11NLayout = 'classic' | 'simple' 2 | export type holder = string 3 | -------------------------------------------------------------------------------- /src/spec/color.d.ts: -------------------------------------------------------------------------------- 1 | export type TColorName = 2 | | 'BLACK' 3 | | 'PINK' 4 | | 'RED' 5 | | 'ORANGE' 6 | | 'YELLOW' 7 | | 'BROWN' 8 | | 'GREEN_LIGHT' 9 | | 'GREEN' 10 | | 'CYAN' 11 | | 'CYAN_LIGHT' 12 | | 'BLUE' 13 | | 'PURPLE' 14 | -------------------------------------------------------------------------------- /src/spec/enhance.d.ts: -------------------------------------------------------------------------------- 1 | // see: https://github.com/sindresorhus/type-fest#template-literal-types 2 | // eslint-disable-next-line import/no-unresolved 3 | export type { ScreamingSnakeCase as SnakeUpperCase } from 'type-fest' 4 | export type holder = 1 5 | -------------------------------------------------------------------------------- /src/spec/graphql.d.ts: -------------------------------------------------------------------------------- 1 | export type TGQLError = { 2 | type: string 3 | path: string 4 | operation?: string 5 | details?: any // TODO 6 | } 7 | -------------------------------------------------------------------------------- /src/spec/store.d.ts: -------------------------------------------------------------------------------- 1 | // common used store types in hooks 2 | 3 | export type { TStore as TAccountStore } from '@/stores/AccountStore' 4 | export type { TStore as TViewingStore } from '@/stores/ViewingStore' 5 | -------------------------------------------------------------------------------- /src/stores/AccountStore/test/index.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * AccountStore store test 3 | * 4 | */ 5 | 6 | // import AccountStore from '../index' 7 | 8 | it('TODO: test AccountStore', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/stores/Model/Article.ts: -------------------------------------------------------------------------------- 1 | import { types as T } from 'mobx-state-tree' 2 | 3 | const Article = T.model('Article', { 4 | id: T.maybeNull(T.string), 5 | title: T.maybeNull(T.string), 6 | desc: T.optional(T.string, ''), 7 | }) 8 | 9 | export default Article 10 | -------------------------------------------------------------------------------- /src/stores/RootStore/test/index.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * RootStore store test 3 | * 4 | */ 5 | 6 | it('TODO mini test', () => { 7 | /* const app = RootStore.create({ catalogItems: [] }) */ 8 | expect(1 + 1).toBe(2) 9 | }) 10 | -------------------------------------------------------------------------------- /src/stores/ThemeStore/test/index.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ThemeStore store test 3 | * 4 | */ 5 | 6 | // import ThemeStore from '../index' 7 | 8 | it('1 + 1 = 2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/stores/ViewingStore/test/index.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * ViewingStore store test 3 | * 4 | */ 5 | 6 | // import ViewingStore from '../index' 7 | 8 | it('TODO: test ViewingStore', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/AdminAvatar/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import AdminAvatar from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/AnimatedCount/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import AnimatedCount from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArchiveAlert/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | 5 | // import Img from '@/Img' 6 | 7 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 8 | 'data-test-id': testid, 9 | }))`` 10 | 11 | export const Title = styled.div`` 12 | -------------------------------------------------------------------------------- /src/widgets/ArchiveAlert/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArchiveAlert from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArchivedSign/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArchivedSign from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleActionsPanel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleActionsPanel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleBaseStats/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleBaseStats from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleBelongCommunity/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleBlongCommunity from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleCard/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleCard from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleCatState/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleCatState from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleEditFooter/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleEditFooter from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleImgWindow/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleImgWindow from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleMenu/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleMenu from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticlePinLabel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticlePinLabel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticleReadLabel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticleReadLabel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArticlesFilter/styles/cat_filter_button.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('align-center')}; 7 | color: ${theme('thread.articleDigest')}; 8 | margin-right: -12px; 9 | font-size: 13px; 10 | ` 11 | export const Label = styled.div` 12 | opacity: 0.7; 13 | ` 14 | -------------------------------------------------------------------------------- /src/widgets/ArticlesFilter/styles/filter_button.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('align-center')}; 7 | color: ${theme('thread.articleDigest')}; 8 | font-size: 13px; 9 | ` 10 | export const Label = styled.div` 11 | opacity: 0.7; 12 | ` 13 | -------------------------------------------------------------------------------- /src/widgets/ArticlesFilter/styles/filter_result.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('align-center')}; 7 | ` 8 | export const ResultText = styled.div` 9 | color: ${theme('thread.extraInfo')}; 10 | ` 11 | -------------------------------------------------------------------------------- /src/widgets/ArticlesFilter/styles/selected_filters.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex()}; 7 | flex-wrap: wrap; 8 | 9 | margin-left: 15px; 10 | margin-top: -1px; 11 | max-width: 80%; 12 | ` 13 | export const TagWrapper = styled.div` 14 | margin-bottom: 2px; 15 | ` 16 | -------------------------------------------------------------------------------- /src/widgets/ArticlesFilter/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArticlesFilter from '../index' 5 | 6 | describe('', () => { 7 | it('TODO: Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ArtimentBody/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ArtimentBody from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BannerNotify/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BannerNotify from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BlinkCursor/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BlinkCursor from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BlogAuthorInfo/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BlogAuthorInfo from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BlogFeedsList/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BlogFeedsList from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BlogItem/styles/metrics.ts: -------------------------------------------------------------------------------- 1 | import type { TBlog, TC11N } from '@/spec' 2 | 3 | export const getOpacity = (entry: TBlog, c11n: TC11N): number => { 4 | const { viewerHasViewed } = entry 5 | 6 | if (c11n.isLogin && c11n.markViewed && viewerHasViewed) { 7 | return 0.85 8 | } 9 | 10 | return 1 11 | } 12 | 13 | export const holder = 1 14 | -------------------------------------------------------------------------------- /src/widgets/BlogItem/styles/mobile_view/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumnGrow()}; 7 | ` 8 | export const holder = 1 9 | -------------------------------------------------------------------------------- /src/widgets/BlogItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BlogItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BrandTitle/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BrandTitle from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Buttons/styles/menu_button/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('align-center')}; 7 | width: 100%; 8 | position: relative; 9 | ` 10 | export const Holder = 1 11 | -------------------------------------------------------------------------------- /src/widgets/Buttons/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Buttons from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/BuyMeChuanChuan/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import BuyMeChuanChuan from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ChangelogItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ChangelogItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Charger/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Charger from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CheckLabel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CheckLabel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Checker/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Checker from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CollapseMenu/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CollapseMenu from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ColorSelector/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ColorSelector from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CommunityBadgeSelector/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityBadgeSelector from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CommunityFaceLogo/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityFaceLogo from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CommunityJoinSign/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import VerifiedSign from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CommunityList/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityList from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CommunityStatesPad/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CommunityStatesPad from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ConstructingThread/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ConstructingThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ContentBanner/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ContentBanner from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ContributorList/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ContributorList from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Copyright/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Copyright from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CoverImage/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CoverImage from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CrashErrorHint/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CrashErrorHint from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/CustomScroller/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TDirection = 'vertical' | 'horizontal' 2 | 3 | export type TScrollDirection = 'up' | 'down' 4 | -------------------------------------------------------------------------------- /src/widgets/CustomScroller/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import CustomScroller from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/DashboardDesc/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TPreviewDevice = 'desktop' | 'mobile' 2 | -------------------------------------------------------------------------------- /src/widgets/DashboardDesc/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import DashboardDesc from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/DigestSentence/styles/metric.ts: -------------------------------------------------------------------------------- 1 | import type { TSizeSM } from '@/spec' 2 | import { SIZE } from '@/constant' 3 | 4 | export const getFontSize = (size: TSizeSM): string => { 5 | switch (size) { 6 | case SIZE.MEDIUM: { 7 | return '15px' 8 | } 9 | 10 | default: 11 | return '14px' 12 | } 13 | } 14 | 15 | export const holder = 1 16 | -------------------------------------------------------------------------------- /src/widgets/DigestSentence/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import DigestSentence from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/DiscussLinker/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import DiscussLinker from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/DivideText/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import DivideText from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/DotDivider/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import DotDivider from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Dropdown/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Dropdown from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/EmailSubscriber/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | 5 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 6 | 'data-test-id': testid, 7 | }))`` 8 | 9 | export const holder = 1 10 | -------------------------------------------------------------------------------- /src/widgets/EmailSubscriber/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import EmailSubscriber from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/EmotionSelector/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import EmojiSelector from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/EmptyLabel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import EmptyLabel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/EmptyThread/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import EmptyThread from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/EnterHint/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import EnterHint from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ErrorPage/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import OauthHinter from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ExpandIcon/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ExpandIcon from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Facepile/spec.d.ts: -------------------------------------------------------------------------------- 1 | import type { TSizeSM } from '@/spec' 2 | 3 | export type TAvatarSize = TSizeSM 4 | -------------------------------------------------------------------------------- /src/widgets/Facepile/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Facepile from '../index' 5 | 6 | describe('', () => { 7 | it('TODO: Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/FaqList/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import FaqList from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/FaqPeekList/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import FaqPeekList from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/FeedsBar/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import FeedsBar from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/FiltersMenu/spec.d.ts: -------------------------------------------------------------------------------- 1 | import type { TTag } from '@/spec' 2 | 3 | export type TMenu = { 4 | id: string 5 | title: string 6 | icon?: string 7 | options: TTag[] 8 | }[] 9 | -------------------------------------------------------------------------------- /src/widgets/FiltersMenu/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import NaviCatalog from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/FocusLine/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import FocusLine from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Folder/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Folder from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/FormItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import FormItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/GalleryHub/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | describe('TODO ', () => { 5 | it('Expect to have unit tests specified', () => { 6 | expect(true).toEqual(true) 7 | }) 8 | }) 9 | -------------------------------------------------------------------------------- /src/widgets/GithubRepoPage/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import GithubRepoPage from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/GithubSyncWarning/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import GithubSyncWarning from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/GithubUserCard/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import GithubUserCard from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/GotoTop/index.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import dynamic from 'next/dynamic' 3 | 4 | export type TProps = { 5 | testid?: string 6 | type?: 'body' | 'drawer' 7 | } 8 | 9 | const GotoTop = dynamic(() => import('./RealGotoTop'), { 10 | ssr: false, 11 | }) 12 | 13 | export default GotoTop as FC 14 | -------------------------------------------------------------------------------- /src/widgets/GotoTop/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 7 | 'data-test-id': testid, 8 | }))` 9 | ${css.size(30)}; 10 | ${css.flex('align-both')}; 11 | ` 12 | export const holder = 1 13 | -------------------------------------------------------------------------------- /src/widgets/GotoTop/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import GotoTop from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Header/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Header from '../index' 5 | 6 | describe('
', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Header/tests/store.test.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * HeaderStore store test 3 | * 4 | */ 5 | 6 | // import HeaderStore from '../index' 7 | 8 | it('HeaderStore todo: 1 + 1 = 2', () => { 9 | expect(1 + 1).toBe(2) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/IconText/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import IconText from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/IllegalWarning/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import IllegalWarning from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Img/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | export const Image = styled.img<{ loaded: boolean }>` 4 | position: ${({ loaded }) => (loaded ? 'relative' : 'absolute')}; 5 | opacity: ${({ loaded }) => (loaded ? 1 : 0)}; 6 | z-index: ${({ loaded }) => (loaded ? 1 : -1)}; 7 | ` 8 | export const holder = 1 9 | -------------------------------------------------------------------------------- /src/widgets/Img/styles/lazy_load_image.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { zIndex } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex()}; 7 | position: relative; 8 | z-index: ${zIndex.img}; 9 | ` 10 | export const FallbackWrapper = styled.div` 11 | position: absolute; 12 | top: 0; 13 | left: 0; 14 | ` 15 | -------------------------------------------------------------------------------- /src/widgets/ImgFallback/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | // import Img from '@/Img' 5 | 6 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 7 | 'data-test-id': testid, 8 | }))`` 9 | 10 | export const Title = styled.div`` 11 | -------------------------------------------------------------------------------- /src/widgets/ImgFallback/styles/metric/avatar.ts: -------------------------------------------------------------------------------- 1 | export const getFontSize = (size: number): string => { 2 | if (size <= 15) { 3 | return '10px' 4 | } 5 | if (size > 15 && size <= 35) { 6 | return '13px' 7 | } 8 | 9 | if (size >= 36 && size < 50) { 10 | return '14px' // two letters 11 | } 12 | 13 | return '20px' 14 | } 15 | 16 | export const holder = 1 17 | -------------------------------------------------------------------------------- /src/widgets/ImgFallback/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ImgFallback from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/InlineCommunities/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import InlineCommunities from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Input/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Input from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/JobItem/styles/metric.ts: -------------------------------------------------------------------------------- 1 | import type { TJob, TC11N } from '@/spec' 2 | 3 | export const getOpacity = (entry: TJob, c11n: TC11N): number => { 4 | const { isLogin, markViewed } = c11n 5 | const { viewerHasViewed } = entry 6 | 7 | if (isLogin && markViewed && viewerHasViewed) { 8 | return 0.85 9 | } 10 | 11 | return 1 12 | } 13 | 14 | export const holder = 1 15 | -------------------------------------------------------------------------------- /src/widgets/JobItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import JobItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/KanbanItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import KanbanItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Linker/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Linker from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/LinksCard/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import LinksCard from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Loading/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex()}; 7 | flex-wrap: wrap; 8 | ` 9 | export const CheatsheetCard = styled.div` 10 | width: 44%; 11 | overflow: hidden; 12 | margin-top: 20px; 13 | height: 180px; 14 | margin-right: 50px; 15 | ` 16 | -------------------------------------------------------------------------------- /src/widgets/Loading/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Loading from '../index' 5 | 6 | describe('', () => { 7 | it('TODO: Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/MarkDownRender/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | // bbst 3 | 4 | export const PreviewerContainer = styled.div`` 5 | 6 | export const holder = 1 7 | -------------------------------------------------------------------------------- /src/widgets/MarkDownRender/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MarkDownRender from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/MasonryCards/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | // import css from '@/utils/css' 5 | 6 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 7 | 'data-test-id': testid, 8 | }))`` 9 | 10 | export const Title = styled.div`` 11 | -------------------------------------------------------------------------------- /src/widgets/MasonryCards/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MasonryCards from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Maybe/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Maybe from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/MobileMockup/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import MobileMockup from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Modal/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Modal from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/NaviCatalog/constant.ts: -------------------------------------------------------------------------------- 1 | export const ROOT_MENU = 'root' 2 | export const CHILD_MENU = 'child' 3 | -------------------------------------------------------------------------------- /src/widgets/NaviCatalog/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TMenuMode = 'root' | 'child' 2 | -------------------------------------------------------------------------------- /src/widgets/NaviCatalog/styles/metric.ts: -------------------------------------------------------------------------------- 1 | export const WIDTH = '150px' 2 | export const holder = 1 3 | -------------------------------------------------------------------------------- /src/widgets/NaviCatalog/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import NaviCatalog from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/NaviIntro/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import NaviIntro from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Navigator/MorePanel/index.tsx: -------------------------------------------------------------------------------- 1 | import { Fragment, memo } from 'react' 2 | import { isMobile } from 'react-device-detect' 3 | 4 | import DesktopView from './DesktopView' 5 | import MobileView from './MobileView' 6 | 7 | const MoreContent = () => { 8 | return {!isMobile ? : } 9 | } 10 | 11 | export default memo(MoreContent) 12 | -------------------------------------------------------------------------------- /src/widgets/Navigator/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Navigator from '../index' 5 | 6 | describe('', () => { 7 | it('TODO: Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/NotFound/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import NotFound from '../index' 5 | 6 | describe('', () => { 7 | it('TODO: Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/NoticeBar/constant.ts: -------------------------------------------------------------------------------- 1 | import type { TType } from './spec' 2 | 3 | export const TYPE = { 4 | LOCK: 'lock' as TType, 5 | ARCHIVED: 'archived' as TType, 6 | NOTICE: 'notice' as TType, 7 | BOT: 'bot' as TType, 8 | INFO: 'info' as TType, 9 | } 10 | 11 | export const holder = 1 12 | -------------------------------------------------------------------------------- /src/widgets/NoticeBar/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TType = 'lock' | 'archived' | 'notice' | 'bot' | 'info' 2 | -------------------------------------------------------------------------------- /src/widgets/NoticeBar/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import NoticeBar from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/OSSUploader/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import OssUploader from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/OauthHinter/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import OauthHinter from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/PagedArticles/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import PagedArticles from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Pagi/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Pagi from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/PostItem/styles/upvote_fist_layout/desktop_view/footer.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css, { theme } from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | position: relative; 7 | ${css.flex('align-center')}; 8 | color: ${theme('thread.extraInfo')}; 9 | font-size: 12px; 10 | ` 11 | 12 | export const holder = 1 13 | -------------------------------------------------------------------------------- /src/widgets/PostItem/styles/upvote_fist_layout/mobile_view/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flexColumnGrow()}; 7 | ` 8 | export const holder = 1 9 | -------------------------------------------------------------------------------- /src/widgets/PostItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import PostItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/PromotionList/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TItem = { 2 | id: string 3 | title: string 4 | link: string 5 | desc: string 6 | cover?: string 7 | } 8 | -------------------------------------------------------------------------------- /src/widgets/PromotionList/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import PromotionList from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/PromptIcon/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import Img from '@/Img' 4 | 5 | export const Wrapper = styled.div`` 6 | 7 | export const PlanetDriverIcon = styled(Img)<{ angle: string }>` 8 | transform: ${({ angle }) => angle}; 9 | display: block; 10 | ` 11 | -------------------------------------------------------------------------------- /src/widgets/PromptIcon/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import PromptIcon from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/RadarItem/styles/metric.ts: -------------------------------------------------------------------------------- 1 | import type { TRadar, TC11N } from '@/spec' 2 | 3 | export const getOpacity = (entry: TRadar, c11n: TC11N): number => { 4 | const { isLogin, markViewed } = c11n 5 | const { viewerHasViewed } = entry 6 | 7 | if (isLogin && markViewed && viewerHasViewed) { 8 | return 0.85 9 | } 10 | 11 | return 1 12 | } 13 | 14 | export const holder = 1 15 | -------------------------------------------------------------------------------- /src/widgets/RadarItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import RadarItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/ReadableDate/styles/absolute_fmt.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import css from '@/utils/css' 4 | 5 | export const Wrapper = styled.div` 6 | ${css.flex('align-center')}; 7 | font-size: 12px; 8 | 9 | ${css.media.mobile` 10 | font-size: 12px; 11 | margin-bottom: 4px; 12 | `} 13 | ` 14 | 15 | export const holder = 1 16 | -------------------------------------------------------------------------------- /src/widgets/ReadableDate/styles/index.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import type { TTestable } from '@/spec' 4 | 5 | // import Img from '@/Img' 6 | 7 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({ 8 | 'data-test-id': testid, 9 | }))`` 10 | 11 | export const Title = styled.div`` 12 | -------------------------------------------------------------------------------- /src/widgets/ReadableDate/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import ReadableDate from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/RepoItem/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import RepoItem from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/SearchingLabel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import SearchingLabel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/SectionLabel/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import SectionLabel from '../index' 5 | 6 | describe('TODO ', () => { 7 | it('Expect to have unit tests specified', () => { 8 | expect(true).toEqual(true) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /src/widgets/Select/spec.d.ts: -------------------------------------------------------------------------------- 1 | export type TSelectProps = { 2 | menuIsOpen?: boolean 3 | value?: { 4 | value: string 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/widgets/Select/tests/index.test.ts: -------------------------------------------------------------------------------- 1 | // import React from 'react' 2 | // import { shallow } from 'enzyme' 3 | 4 | // import Select from '../index' 5 | 6 | describe('TODO