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"