├── .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 | 
2 |
3 | TODO
4 |
--------------------------------------------------------------------------------
/docs/analysis/apollo-engine.zh-CN.md:
--------------------------------------------------------------------------------
1 | 
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 | 
4 |
5 | 
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 | 
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 | 
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 ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/SettingMenu/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import SettingMenu from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/SocialEditor/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import SocialEditor from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/SocialList/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import SocialList from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/StatusBox/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import StatusBox from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/Sticky/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/Sticky/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import Sticky from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/SubTitle/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import SubTitle from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/SupportUs/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import SupportUs from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/Switcher/index.tsx:
--------------------------------------------------------------------------------
1 | export { default as Tabs } from './Tabs'
2 | export { default as IconSwitcher } from './IconSwitcher'
3 | export { default as PagiOptionSwitcher } from './PagiOptionSwitcher'
4 | export { default as Radio } from './Radio'
5 |
--------------------------------------------------------------------------------
/src/widgets/Switcher/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import Switcher from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TabBar/spec.d.ts:
--------------------------------------------------------------------------------
1 | import { ReactNode } from 'react'
2 |
3 | export type TTabItem = {
4 | title?: string
5 | raw: string
6 | alias?: string
7 | icon?: string | ReactNode
8 | localIcon?: string
9 | index?: number
10 | }
11 |
--------------------------------------------------------------------------------
/src/widgets/TabBar/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TabBar from '../index'
5 |
6 | describe('', () => {
7 | it('TODO: Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TabSelector/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TabSelector from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/Tag/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import Tag from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TagsList/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TagsList from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TeamList/constant.ts:
--------------------------------------------------------------------------------
1 | import type { TLayout } from './spec'
2 |
3 | export const LAYOUT = {
4 | EDIT_WORKS: 'edit-works' as TLayout,
5 | WORKS: 'works' as TLayout,
6 | GUIDE_CONTRIBUTE: 'guide-contribute' as TLayout,
7 | }
8 |
9 | export const holder = 1
10 |
--------------------------------------------------------------------------------
/src/widgets/TeamList/spec.d.ts:
--------------------------------------------------------------------------------
1 | export type TView = 'list' | 'search'
2 | export type TLayout = 'edit-works' | 'works' | 'guide-contribute'
3 |
--------------------------------------------------------------------------------
/src/widgets/TeamList/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TeamList from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TechStacks/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('align-start')};
7 | margin-top: 8px;
8 | margin-bottom: 8px;
9 | `
10 |
11 | export const Title = styled.div``
12 |
--------------------------------------------------------------------------------
/src/widgets/TechStacks/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TechStack from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TheAvatar/constant.ts:
--------------------------------------------------------------------------------
1 | export const TYPE = {
2 | POST_ITEM: 'post-item',
3 | ARTICLE_AUTHOR: 'article-author',
4 | }
5 |
6 | export const holder = 1
7 |
--------------------------------------------------------------------------------
/src/widgets/TheAvatar/spec.d.ts:
--------------------------------------------------------------------------------
1 | export type TMetric = 'post-item' | 'article-author'
2 | export const holder = 1
3 |
--------------------------------------------------------------------------------
/src/widgets/TheAvatar/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TheAvatar from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/ThemeSelector/styles/dot_selector.ts:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | import css from '@/utils/css'
4 |
5 | import { Dot } from './index'
6 |
7 | export const Wrapper = styled.div`
8 | ${css.flex('justify-center')};
9 | `
10 |
11 | export const ThemeDot = styled(Dot)``
12 |
--------------------------------------------------------------------------------
/src/widgets/ThemeSelector/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import ThemeSelector from '../index'
5 |
6 | describe('', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/ThreadSelector/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import ThreadSelector from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/Tooltip/constant.ts:
--------------------------------------------------------------------------------
1 | export const FOOTER_BEHAVIOR = {
2 | DEFAULT: 'default',
3 | CONFIRM: 'confirm',
4 | DELETE_CONFIRM: 'delete-confirm',
5 | ADD: 'add',
6 | }
7 |
8 | export const holder = 1
9 |
--------------------------------------------------------------------------------
/src/widgets/Tooltip/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import Tooltip from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/TrendLine/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import TrendLine from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/Upvote/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import Upvote from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/UserBrief/styles/community_editor_info.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 | export const Title = styled.div`
9 | color: ${theme('thread.articleDigest')};
10 | font-size: 14px;
11 | margin-bottom: 16px;
12 | `
13 |
--------------------------------------------------------------------------------
/src/widgets/UserBrief/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import UserBrief from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/UserCell/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import UserCell from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/VerifiedSign/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/ViewportTracker/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/ViewportTracker/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import ViewportTracker from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/WordsCounter/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import WordsCounter from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/src/widgets/WorksInfoCard/tests/index.test.ts:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import WorksInfoCard from '../index'
5 |
6 | describe('TODO ', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/utils/async/config.ts:
--------------------------------------------------------------------------------
1 | export const TIMEOUT_THRESHOLD = 10000 // 10 sec
2 | export const GRAPHQL_TIMEOUT = 10000 // 10 sec
3 | export const MUTIATION_TIMEOUT = 10000 // 10 sec
4 | export const QUERY_TIMEOUT = 10000 // 10 sec
5 |
--------------------------------------------------------------------------------
/utils/bin/jq-linux:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/utils/bin/jq-linux
--------------------------------------------------------------------------------
/utils/bin/jq-mac:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/utils/bin/jq-mac
--------------------------------------------------------------------------------
/utils/bin/jq-win64.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderplanets/coderplanets_web/b6a1ee0dec182b347c4f0882369ace246aba9ca6/utils/bin/jq-win64.exe
--------------------------------------------------------------------------------
/utils/constant/action.ts:
--------------------------------------------------------------------------------
1 | const ACTION = {
2 | FAVORITE: 'FAVORITE',
3 | STAR: 'STAR',
4 | WATCH: 'WATCH',
5 | }
6 |
7 | export default ACTION
8 |
--------------------------------------------------------------------------------
/utils/constant/alias.ts:
--------------------------------------------------------------------------------
1 | export const COMMUNITY_MAP_ALIAS = {
2 | elixir: 'Alchemist',
3 | rust: 'Rustacean',
4 | go: 'Gohper',
5 | ruby: 'rubyist',
6 | }
7 |
8 | export const holder = 1
9 |
--------------------------------------------------------------------------------
/utils/constant/anchor.ts:
--------------------------------------------------------------------------------
1 | // css id/class selector names
2 |
3 | const ANCHOR = {
4 | GLOBAL_BLUR_CLASS: 'GLOBAL_BLUR_CLASS',
5 | GLOBAL_HEADER_ID: 'GLOBAL_HEADER_ID',
6 | GLOBAL_TABBER_ID: 'GLOBAL_TABBER_ID',
7 |
8 | COMMENTS_ID: 'COMMENTS_ID',
9 | }
10 |
11 | export default ANCHOR
12 |
--------------------------------------------------------------------------------
/utils/constant/article.ts:
--------------------------------------------------------------------------------
1 | const GUIDE = {
2 | PREVIEW: 'PREVIEW',
3 | DEFAULT: 'DEFAULT',
4 | FAME_PEOPLE: 'FAME_PEOPLE',
5 | DEVELOPER: 'DEVELOPER',
6 | IMAGE: 'IMAGE',
7 | SNIPPETS_LIST: 'SNIPPETS_LIST',
8 | SNIPPETS_MASONRY: 'SNIPPETS_MASONRY',
9 | }
10 |
11 | export default GUIDE
12 |
--------------------------------------------------------------------------------
/utils/constant/c11n.ts:
--------------------------------------------------------------------------------
1 | const C11N = {
2 | CLASSIC: 'digest',
3 | SIMPLE: 'simple',
4 | LIST: 'list',
5 | BRIEF: 'brief',
6 | }
7 |
8 | export default C11N
9 |
--------------------------------------------------------------------------------
/utils/constant/emotion.ts:
--------------------------------------------------------------------------------
1 | import type { TEmotionType } from '@/spec'
2 |
3 | const EMOTION = {
4 | DOWNVOTE: 'downvote',
5 | BEER: 'beer',
6 | HEART: 'heart',
7 | CONFUSED: 'confused',
8 | POPCORN: 'popcorn',
9 | PILL: 'pill',
10 | } as Record, TEmotionType>
11 |
12 | export default EMOTION
13 |
--------------------------------------------------------------------------------
/utils/constant/err.ts:
--------------------------------------------------------------------------------
1 | const ERR = {
2 | GRAPHQL: 'GRAPHQL',
3 | PARSE_CHEATSHEET_MD: 'PARSE_CHEATSHEET_MD',
4 | NETWORK: 'NETWORK',
5 | NOT_FOUND: 'NOT_FOUND',
6 | TIMEOUT: 'TIMEOUT',
7 | AUTH: 'AUTH',
8 | UNKOWN: 'UNKOWN',
9 | }
10 |
11 | export default ERR
12 |
--------------------------------------------------------------------------------
/utils/constant/guide.ts:
--------------------------------------------------------------------------------
1 | const GUIDE = {
2 | HOME: 'HOME',
3 | DEFAULT: 'DEFAULT',
4 | FAME_PEOPLE: 'FAME_PEOPLE',
5 | DEVELOPER: 'DEVELOPER',
6 | IMAGE: 'IMAGE',
7 | SNIPPETS_LIST: 'SNIPPETS_LIST',
8 | SNIPPETS_MASONRY: 'SNIPPETS_MASONRY',
9 | }
10 |
11 | export default GUIDE
12 |
--------------------------------------------------------------------------------
/utils/constant/publish.ts:
--------------------------------------------------------------------------------
1 | import type { TPublishMode } from '@/spec'
2 |
3 | export const PUBLISH_MODE = {
4 | DEFAULT: 'default',
5 | CHANGELOG: 'changelog',
6 | HELP: 'help',
7 | } as Record, TPublishMode>
8 |
9 | export const holder = 1
10 |
--------------------------------------------------------------------------------
/utils/constant/recipe.ts:
--------------------------------------------------------------------------------
1 | const RECIPE = {
2 | SNIPPETS_VIEW: 'snippets_view',
3 | CHEATSHEETS_VIEW: 'cheatsheets_view',
4 | DEFAULT: 'DEFAULT',
5 | LIST: 'SNIPPETS_LIST',
6 | MASONRY: 'SNIPPETS_MASONRY',
7 | }
8 |
9 | export default RECIPE
10 |
--------------------------------------------------------------------------------
/utils/constant/size.ts:
--------------------------------------------------------------------------------
1 | import type { TSizeT, TSizeS, TSizeM, TSizeL } from '@/spec'
2 |
3 | const SIZE = {
4 | TINY: 'tiny' as TSizeT,
5 | SMALL: 'small' as TSizeS,
6 | MEDIUM: 'medium' as TSizeM,
7 | LARGE: 'large' as TSizeL,
8 | }
9 |
10 | export default SIZE
11 |
--------------------------------------------------------------------------------
/utils/constant/tag.ts:
--------------------------------------------------------------------------------
1 | import type { TTagMode } from '@/spec'
2 |
3 | const TAG_MODE = {
4 | DEFAULT: 'default',
5 | LABEL: 'label',
6 | } as Record, TTagMode>
7 |
8 | export default TAG_MODE
9 |
--------------------------------------------------------------------------------
/utils/constant/toast.ts:
--------------------------------------------------------------------------------
1 | import type { TToastPos } from '@/spec'
2 |
3 | const DEFAULT_TOAST_OPTIONS = {
4 | title: 'toast',
5 | message: '',
6 | msg: '',
7 | position: 'topCenter' as TToastPos,
8 | timeout: 3000,
9 | icon: '',
10 | progressBarColor: 'yellogreen',
11 | displayMode: 'replace',
12 | transitionIn: 'fadeInDown',
13 | }
14 |
15 | export default DEFAULT_TOAST_OPTIONS
16 |
--------------------------------------------------------------------------------
/utils/constant/url_query.ts:
--------------------------------------------------------------------------------
1 | const URL_QUERY = {
2 | NAVI_CATALOG_PATH: 'nc_path',
3 | }
4 |
5 | export default URL_QUERY
6 |
--------------------------------------------------------------------------------
/utils/constant/user_thread.ts:
--------------------------------------------------------------------------------
1 | const USER_THREAD = {
2 | PROFILE: 'profile',
3 | PUBLISH: 'publish',
4 | COMMENTS: 'comments',
5 | FAVORITES: 'favorites',
6 | LINKS: 'likes',
7 | BILLING: 'billing',
8 | SETTINGS: 'settings',
9 | }
10 | export default USER_THREAD
11 |
--------------------------------------------------------------------------------
/utils/constant/view.ts:
--------------------------------------------------------------------------------
1 | import type { TView } from '@/spec'
2 |
3 | const VIEW = {
4 | DESKTOP: 'desktop' as TView,
5 | MOBILE: 'mobile' as TView,
6 | MODELINE: 'modeline' as TView,
7 | DRAWER: 'drawer' as TView,
8 | }
9 |
10 | export default VIEW
11 |
--------------------------------------------------------------------------------
/utils/css/zindex.ts:
--------------------------------------------------------------------------------
1 | const zIndex = {
2 | popover: 3000,
3 | modalCloseBtn: 2999,
4 | doraemonOverlay: 2998,
5 | modalOverlay: 2997,
6 | doraemon: 2996,
7 | modeLine: 2995,
8 | drawer: 2994,
9 | drawerOverlay: 2993,
10 | sidebar: 2992,
11 | articleFixedHeader: 10,
12 | header: 3,
13 | img: 2,
14 | //
15 | }
16 |
17 | export default zIndex
18 |
--------------------------------------------------------------------------------
/utils/scripts/checkmark.js:
--------------------------------------------------------------------------------
1 | const chalk = require('chalk')
2 |
3 | /**
4 | * Adds mark check symbol
5 | */
6 | const addCheckMark = (callback) => {
7 | process.stdout.write(chalk.green(' ✓'))
8 | if (callback) callback()
9 | }
10 |
11 | module.exports = addCheckMark
12 |
--------------------------------------------------------------------------------
/utils/scripts/generators/container/store.test.js.hbs:
--------------------------------------------------------------------------------
1 | /*
2 | * {{ properCase name }} store test
3 | *
4 | */
5 |
6 | // import {{ properCase name }} from '../index'
7 |
8 | it('TODO: store test {{ properCase name }}', () => {
9 | expect(1 + 1).toBe(2)
10 | })
11 |
--------------------------------------------------------------------------------
/utils/scripts/generators/container/styles.ts.hbs:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | import type { TTestable } from '@/spec'
4 | // import { theme } from '@/utils/themes'
5 |
6 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({
7 | 'data-test-id': testid,
8 | }))`
9 | //
10 | `
11 | export const Title = styled.div``
--------------------------------------------------------------------------------
/utils/scripts/generators/container/test.js.hbs:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import {{ properCase name }} from '../index'
5 |
6 | describe('TODO <{{ properCase name }} />', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/utils/scripts/generators/store/store.test.js.hbs:
--------------------------------------------------------------------------------
1 | /*
2 | * {{ properCase name }} store test
3 | *
4 | */
5 |
6 | // import {{ properCase name }} from '../index'
7 |
8 | it('TODO: test {{ properCase name }}', () => {
9 | expect(1 + 1).toBe(2)
10 | })
--------------------------------------------------------------------------------
/utils/scripts/generators/widget/styles.ts.hbs:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components'
2 |
3 | import type { TTestable } from '@/spec'
4 |
5 | // import Img from '@/Img'
6 | // import { theme } from '@/utils/themes'
7 |
8 | export const Wrapper = styled.div.attrs(({ testid }: TTestable) => ({
9 | 'data-test-id': testid,
10 | }))``
11 |
12 | export const Title = styled.div``
13 |
--------------------------------------------------------------------------------
/utils/scripts/generators/widget/test.ts.hbs:
--------------------------------------------------------------------------------
1 | // import React from 'react'
2 | // import { shallow } from 'enzyme'
3 |
4 | // import {{ properCase name }} from '../index'
5 |
6 | describe('TODO <{{ properCase name }} />', () => {
7 | it('Expect to have unit tests specified', () => {
8 | expect(true).toEqual(true)
9 | })
10 | })
11 |
--------------------------------------------------------------------------------
/utils/uid.ts:
--------------------------------------------------------------------------------
1 | import { customAlphabet } from 'nanoid'
2 |
3 | // avoid special chars like -,. etc in ids
4 | // those chars may be used as spliter
5 | const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6)
6 |
7 | const uid = {
8 | gen: (): string => nanoid(),
9 | }
10 |
11 | export default uid
12 |
--------------------------------------------------------------------------------