diff --git a/components/Footer.tsx b/components/Footer.tsx index 2e5452627b..4c25e22105 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -1,14 +1,15 @@ import * as React from 'react' -import { FaEnvelopeOpenText } from '@react-icons/all-files/fa/FaEnvelopeOpenText' -import { FaGithub } from '@react-icons/all-files/fa/FaGithub' -import { FaLinkedin } from '@react-icons/all-files/fa/FaLinkedin' -import { FaMastodon } from '@react-icons/all-files/fa/FaMastodon' -import { FaTwitter } from '@react-icons/all-files/fa/FaTwitter' -import { FaYoutube } from '@react-icons/all-files/fa/FaYoutube' -import { FaZhihu } from '@react-icons/all-files/fa/FaZhihu' -import { IoMoonSharp } from '@react-icons/all-files/io5/IoMoonSharp' -import { IoSunnyOutline } from '@react-icons/all-files/io5/IoSunnyOutline' +import { FaEnvelopeOpenText } from 'react-icons/fa' +import { FaGithub } from 'react-icons/fa' +import { FaLinkedin } from 'react-icons/fa' +import { FaMastodon } from 'react-icons/fa' +import { FaTwitter } from 'react-icons/fa' +import { FaYoutube } from 'react-icons/fa' +import { FaZhihu } from 'react-icons/fa6' +import { FaBilibili } from 'react-icons/fa6' +import { IoMoonSharp } from 'react-icons/io5' +import { IoSunnyOutline } from 'react-icons/io5' import * as config from '@/lib/config' import { useDarkMode } from '@/lib/use-dark-mode' @@ -135,6 +136,18 @@ export const FooterImpl: React.FC = () => { )} + + {config.bilibili && ( + + + + )} ) diff --git a/components/NotionPageHeader.tsx b/components/NotionPageHeader.tsx index 7702c254d6..bcde598d9f 100644 --- a/components/NotionPageHeader.tsx +++ b/components/NotionPageHeader.tsx @@ -1,8 +1,8 @@ import * as React from 'react' import * as types from 'notion-types' -import { IoMoonSharp } from '@react-icons/all-files/io5/IoMoonSharp' -import { IoSunnyOutline } from '@react-icons/all-files/io5/IoSunnyOutline' +import { IoMoonSharp } from 'react-icons/io5' +import { IoSunnyOutline } from 'react-icons/io5' import cs from 'classnames' import { Breadcrumbs, Header, Search, useNotionContext } from 'react-notion-x' diff --git a/components/PageActions.tsx b/components/PageActions.tsx index 2336513c58..8a22a94824 100644 --- a/components/PageActions.tsx +++ b/components/PageActions.tsx @@ -1,7 +1,7 @@ import * as React from 'react' -import { AiOutlineRetweet } from '@react-icons/all-files/ai/AiOutlineRetweet' -import { IoHeartOutline } from '@react-icons/all-files/io5/IoHeartOutline' +import { AiOutlineRetweet } from 'react-icons/ai' +import { IoHeartOutline } from 'react-icons/io5' import styles from './styles.module.css' diff --git a/components/PageSocial.module.css b/components/PageSocial.module.css index 87113e258a..f2696563c3 100644 --- a/components/PageSocial.module.css +++ b/components/PageSocial.module.css @@ -128,6 +128,13 @@ border-color: #777; } +.bilibili .actionBgPane { + background: #fb7299; +} +.bilibili:hover { + border-color: #fb7299; +} + @media only screen and (max-width: 768px) { .links { position: relative; diff --git a/components/PageSocial.tsx b/components/PageSocial.tsx index 36ec81900c..a57234f0c2 100644 --- a/components/PageSocial.tsx +++ b/components/PageSocial.tsx @@ -67,7 +67,19 @@ const socialLinks: SocialLink[] = [ ) - } + }, + + // TODO: add Bilibili + config.bilibili && { + name: 'bilibili', + href: `https://space.bilibili.com/${config.bilibili}`, + title: `Bilibili ${config.bilibili}`, + icon: ( + + + + ) + }, ].filter(Boolean) export const PageSocial: React.FC = () => { diff --git a/components/styles.module.css b/components/styles.module.css index bea8ff1ed9..831d8bfe32 100644 --- a/components/styles.module.css +++ b/components/styles.module.css @@ -118,6 +118,10 @@ color: #777777; } +.bilibili:hover { + color: #fb7299; +} + .comments { width: 100%; margin-top: 2em; diff --git a/lib/config.ts b/lib/config.ts index bab17e983c..a4283e27b5 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -61,6 +61,7 @@ export const youtube: string | null = getSiteConfig('youtube', null) export const linkedin: string | null = getSiteConfig('linkedin', null) export const newsletter: string | null = getSiteConfig('newsletter', null) export const zhihu: string | null = getSiteConfig('zhihu', null) +export const bilibili: string | null = getSiteConfig('bilibili', null) export const getMastodonHandle = (): string | null => { if (!mastodon) { diff --git a/lib/site-config.ts b/lib/site-config.ts index b8c4fb60a1..6cf943cc98 100644 --- a/lib/site-config.ts +++ b/lib/site-config.ts @@ -17,6 +17,7 @@ export interface SiteConfig { youtube?: string zhihu?: string mastodon?: string; + bilibili?: string; defaultPageIcon?: string | null defaultPageCover?: string | null diff --git a/package.json b/package.json index 022285a387..559e05af1a 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@fisch0920/use-dark-mode": "^2.4.0", "@keyvhq/core": "^1.6.9", "@keyvhq/redis": "^1.6.10", - "@react-icons/all-files": "^4.1.0", "@vercel/og": "^0.0.19", "classnames": "^2.3.1", "date-fns": "^2.28.0", @@ -47,6 +46,7 @@ "react": "^18.2.0", "react-body-classname": "^1.3.1", "react-dom": "^18.2.0", + "react-icons": "^5.0.1", "react-notion-x": "^6.15.6", "react-tweet-embed": "^2.0.0", "react-use": "^17.4.2", diff --git a/pages/_document.tsx b/pages/_document.tsx index 97a7b4ce21..aace567a72 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import Document, { Head, Html, Main, NextScript } from 'next/document' -import { IconContext } from '@react-icons/all-files' +import { IconContext } from 'react-icons' export default class MyDocument extends Document { render() { diff --git a/site.config.ts b/site.config.ts index cded79c3bf..6b04490fac 100644 --- a/site.config.ts +++ b/site.config.ts @@ -20,6 +20,7 @@ export default siteConfig({ twitter: 'transitive_bs', github: 'transitive-bullshit', linkedin: 'fisch2', + // bilibili: '#', // optional bilibili uid // mastodon: '#', // optional mastodon profile URL, provides link verification // newsletter: '#', // optional newsletter URL // youtube: '#', // optional youtube channel name or `channel/UCGbXXXXXXXXXXXXXXXXXXXXXX` diff --git a/yarn.lock b/yarn.lock index f3bb398744..36692cc6cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -454,11 +454,6 @@ resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@react-icons/all-files@^4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz" - integrity sha512-hxBI2UOuVaI3O/BhQfhtb4kcGn9ft12RWAFVMUeNjqqhLsHvFtzIkFaptBJpFDANTKoDfdVoHTKZDlwKCACbMQ== - "@resvg/resvg-wasm@2.0.0-alpha.4": version "2.0.0-alpha.4" resolved "https://registry.yarnpkg.com/@resvg/resvg-wasm/-/resvg-wasm-2.0.0-alpha.4.tgz#fc2f86186a9641df030d8f9f3f9d995899cd1ecb" @@ -2940,6 +2935,11 @@ react-hotkeys-hook@^3.0.3: dependencies: hotkeys-js "3.8.7" +react-icons@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/react-icons/-/react-icons-5.0.1.tgz#1694e11bfa2a2888cab47dcc30154ce90485feee" + integrity sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw== + react-image@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/react-image/-/react-image-4.0.3.tgz"