@bbki.ng/site 0.0.17 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.github/workflows/deploy.yml +44 -44
  2. package/.prettierignore +1 -1
  3. package/CHANGELOG.md +11 -0
  4. package/CODE_OF_CONDUCT.md +45 -45
  5. package/CONTRIBUTING.md +11 -11
  6. package/LICENSE +21 -21
  7. package/README.md +21 -21
  8. package/index.html +33 -33
  9. package/jest.config.js +15 -15
  10. package/package.json +3 -3
  11. package/postcss.config.cjs +6 -6
  12. package/public/Logo.svg +9 -9
  13. package/public/favicon.svg +9 -9
  14. package/public/robots.txt +2 -2
  15. package/src/__test__/utils/index.test.ts +90 -90
  16. package/src/app.tsx +97 -97
  17. package/src/articles/anti-logic.mdx +61 -61
  18. package/src/articles/bbking-manual.mdx +88 -88
  19. package/src/articles/black-river.mdx +8 -8
  20. package/src/articles/cooldown.mdx +12 -12
  21. package/src/articles/fall.mdx +8 -8
  22. package/src/articles/img.mdx +104 -104
  23. package/src/articles/index.ts +35 -35
  24. package/src/articles/loading.mdx +129 -129
  25. package/src/articles/major-cold.mdx +14 -14
  26. package/src/articles/men-without-women.mdx +19 -19
  27. package/src/articles/movie-day.mdx +15 -15
  28. package/src/articles/now.mdx +14 -14
  29. package/src/articles/projects.mdx +9 -9
  30. package/src/articles/quote.mdx +27 -27
  31. package/src/articles/spring-cooldown.mdx +7 -7
  32. package/src/articles/spring-rain.mdx +9 -9
  33. package/src/articles/travel.mdx +21 -21
  34. package/src/articles/warming-up.mdx +10 -10
  35. package/src/articles/web-burnning.mdx +10 -10
  36. package/src/auth_required.tsx +17 -17
  37. package/src/components/Spinner.tsx +33 -33
  38. package/src/components/article/index.tsx +31 -31
  39. package/src/components/aspect_ratio_box/index.tsx +29 -29
  40. package/src/components/blur_cover/index.tsx +28 -28
  41. package/src/components/book_list/index.tsx +50 -50
  42. package/src/components/comment/index.tsx +70 -70
  43. package/src/components/comment/use_cusdis_event.ts +37 -37
  44. package/src/components/corner_prompt_box/index.tsx +63 -63
  45. package/src/components/disabled_text/index.tsx +23 -23
  46. package/src/components/fade_out_cover/index.tsx +37 -37
  47. package/src/components/footer/footer_links.ts +13 -13
  48. package/src/components/footer/index.tsx +21 -21
  49. package/src/components/hotkey_nav/index.tsx +50 -50
  50. package/src/components/img_list/index.tsx +43 -43
  51. package/src/components/index.tsx +27 -27
  52. package/src/components/movie_list/index.tsx +50 -50
  53. package/src/components/my_suspense.tsx +14 -14
  54. package/src/components/progress_bar/index.tsx +31 -31
  55. package/src/components/reload_prompt/index.tsx +36 -36
  56. package/src/components/stickers/index.tsx +46 -46
  57. package/src/components/table_skeleton/index.tsx +40 -40
  58. package/src/components/tags/index.tsx +52 -52
  59. package/src/components/video_player/index.tsx +81 -81
  60. package/src/components/with_wrapper/index.tsx +13 -13
  61. package/src/constants/cusdis.ts +6 -6
  62. package/src/constants/index.ts +16 -16
  63. package/src/constants/photo_projects.ts +54 -54
  64. package/src/constants/routes.ts +24 -24
  65. package/src/constants/video_logs.ts +16 -16
  66. package/src/demo/SpinnerDemo.tsx +17 -17
  67. package/src/global/mdx.d.ts +8 -8
  68. package/src/global_loading_state_provider.tsx +27 -27
  69. package/src/hooks/index.ts +15 -15
  70. package/src/hooks/useScrollToTop.ts +24 -24
  71. package/src/hooks/useTransitionCls.ts +36 -36
  72. package/src/hooks/use_img_loading.ts +16 -16
  73. package/src/hooks/use_pathname.ts +6 -6
  74. package/src/hooks/use_paths.ts +30 -30
  75. package/src/hooks/use_projects.ts +56 -56
  76. package/src/hooks/use_route_name.ts +7 -7
  77. package/src/hooks/use_supa_session.ts +30 -30
  78. package/src/hooks/use_uploader.ts +34 -34
  79. package/src/hooks/use_video_controls.ts +71 -71
  80. package/src/main.css +156 -156
  81. package/src/main.tsx +19 -19
  82. package/src/pages/cover/index.tsx +10 -10
  83. package/src/pages/extensions/png/consts.ts +9 -9
  84. package/src/pages/extensions/png/index.tsx +41 -41
  85. package/src/pages/extensions/png/png_projects.tsx +63 -63
  86. package/src/pages/extensions/txt/article.tsx +26 -26
  87. package/src/pages/extensions/txt/consts.ts +8 -8
  88. package/src/pages/extensions/txt/index.tsx +21 -21
  89. package/src/pages/index.tsx +14 -14
  90. package/src/pages/login/index.tsx +33 -33
  91. package/src/pages/now/index.tsx +7 -7
  92. package/src/pages/tags/index.tsx +28 -28
  93. package/src/pages/tags/tag_result.tsx +19 -19
  94. package/src/swr.tsx +18 -18
  95. package/src/types/articles.ts +6 -6
  96. package/src/types/color.ts +21 -21
  97. package/src/types/cusdis.ts +4 -4
  98. package/src/types/oss.ts +15 -15
  99. package/src/types/path.ts +11 -11
  100. package/src/types/photo.ts +17 -17
  101. package/src/types/supabase.ts +9 -9
  102. package/src/utils/tags.ts +21 -21
  103. package/tailwind.config.cjs +10 -10
  104. package/tsconfig.json +24 -24
  105. package/vite.config.ts +108 -108
  106. package/.rush/temp/shrinkwrap-deps.json +0 -908
@@ -1,90 +1,90 @@
1
- import {
2
- addOssWebpProcessStyle,
3
- calcDefaultImgSize,
4
- delay,
5
- floatNumberToPercentageString,
6
- getEnv,
7
- minDelay,
8
- } from "@/utils";
9
- import { ossProcessType } from "@/types/oss";
10
- import { OSS_PHOTOS } from "@/constants/photos";
11
-
12
- jest.useFakeTimers();
13
- jest.spyOn(window, "setTimeout");
14
-
15
- describe("calcDefaultImgSize", () => {
16
- it("should respect default width", () => {
17
- const dw = 500;
18
- expect(calcDefaultImgSize(OSS_PHOTOS.shopping, dw).width).toEqual(dw);
19
- });
20
- it("should return 576 as default width when photo is horizontal", () => {
21
- expect(calcDefaultImgSize(OSS_PHOTOS.stone).width).toEqual(576);
22
- });
23
- it("should return 384 as default width when photo is horizontal", () => {
24
- expect(calcDefaultImgSize(OSS_PHOTOS.player).width).toEqual(384);
25
- });
26
- });
27
-
28
- describe("floatNumberToPercentageString", () => {
29
- it("should return percentage string correctly", () => {
30
- expect(floatNumberToPercentageString(0.8)).toBe("80%");
31
- });
32
- });
33
-
34
- describe("addOssWebpProcessStyle", () => {
35
- it("should return original url when image's url is invalid", () => {
36
- const originalUrl = "foo";
37
- expect(addOssWebpProcessStyle(originalUrl, ossProcessType.WEBP)).toEqual(
38
- originalUrl
39
- );
40
- });
41
-
42
- it("should add oss style to url correctly", () => {
43
- const originalUrl =
44
- "https://zjh-im-res.oss-cn-shenzhen.aliyuncs.com/image/xiang-jiang-river/DSCF2203-1.jpg";
45
- expect(addOssWebpProcessStyle(originalUrl, ossProcessType.WEBP)).toEqual(
46
- `${originalUrl}?x-oss-process=style/${ossProcessType.WEBP}`
47
- );
48
- });
49
- });
50
-
51
- describe("delay", () => {
52
- it("should delay correctly", () => {
53
- delay(5000);
54
- expect(setTimeout).toHaveBeenCalledTimes(1);
55
- expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 5000);
56
- });
57
- });
58
-
59
- describe("minDelay", () => {
60
- it("should delay at least specific duration", () => {
61
- const promise = delay(1000);
62
- expect(minDelay(promise, 2000)).toEqual(promise);
63
- expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 2000);
64
- });
65
- });
66
-
67
- describe("getEnv", () => {
68
- it("should return development when href start with http://localhost", () => {
69
- const locationSpy = jest.spyOn(window, "location", "get");
70
- locationSpy.mockImplementation(
71
- () =>
72
- ({
73
- href: "http://localhost:3000",
74
- } as Location)
75
- );
76
- expect(getEnv()).toEqual("development");
77
- locationSpy.mockRestore();
78
- });
79
- it("should return production when href is NOT start with http://localhost", () => {
80
- const locationSpy = jest.spyOn(window, "location", "get");
81
- locationSpy.mockImplementation(
82
- () =>
83
- ({
84
- href: "https://bbki.ng",
85
- } as Location)
86
- );
87
- expect(getEnv()).toEqual("production");
88
- locationSpy.mockRestore();
89
- });
90
- });
1
+ import {
2
+ addOssWebpProcessStyle,
3
+ calcDefaultImgSize,
4
+ delay,
5
+ floatNumberToPercentageString,
6
+ getEnv,
7
+ minDelay,
8
+ } from "@/utils";
9
+ import { ossProcessType } from "@/types/oss";
10
+ import { OSS_PHOTOS } from "@/constants/photos";
11
+
12
+ jest.useFakeTimers();
13
+ jest.spyOn(window, "setTimeout");
14
+
15
+ describe("calcDefaultImgSize", () => {
16
+ it("should respect default width", () => {
17
+ const dw = 500;
18
+ expect(calcDefaultImgSize(OSS_PHOTOS.shopping, dw).width).toEqual(dw);
19
+ });
20
+ it("should return 576 as default width when photo is horizontal", () => {
21
+ expect(calcDefaultImgSize(OSS_PHOTOS.stone).width).toEqual(576);
22
+ });
23
+ it("should return 384 as default width when photo is horizontal", () => {
24
+ expect(calcDefaultImgSize(OSS_PHOTOS.player).width).toEqual(384);
25
+ });
26
+ });
27
+
28
+ describe("floatNumberToPercentageString", () => {
29
+ it("should return percentage string correctly", () => {
30
+ expect(floatNumberToPercentageString(0.8)).toBe("80%");
31
+ });
32
+ });
33
+
34
+ describe("addOssWebpProcessStyle", () => {
35
+ it("should return original url when image's url is invalid", () => {
36
+ const originalUrl = "foo";
37
+ expect(addOssWebpProcessStyle(originalUrl, ossProcessType.WEBP)).toEqual(
38
+ originalUrl
39
+ );
40
+ });
41
+
42
+ it("should add oss style to url correctly", () => {
43
+ const originalUrl =
44
+ "https://zjh-im-res.oss-cn-shenzhen.aliyuncs.com/image/xiang-jiang-river/DSCF2203-1.jpg";
45
+ expect(addOssWebpProcessStyle(originalUrl, ossProcessType.WEBP)).toEqual(
46
+ `${originalUrl}?x-oss-process=style/${ossProcessType.WEBP}`
47
+ );
48
+ });
49
+ });
50
+
51
+ describe("delay", () => {
52
+ it("should delay correctly", () => {
53
+ delay(5000);
54
+ expect(setTimeout).toHaveBeenCalledTimes(1);
55
+ expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 5000);
56
+ });
57
+ });
58
+
59
+ describe("minDelay", () => {
60
+ it("should delay at least specific duration", () => {
61
+ const promise = delay(1000);
62
+ expect(minDelay(promise, 2000)).toEqual(promise);
63
+ expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 2000);
64
+ });
65
+ });
66
+
67
+ describe("getEnv", () => {
68
+ it("should return development when href start with http://localhost", () => {
69
+ const locationSpy = jest.spyOn(window, "location", "get");
70
+ locationSpy.mockImplementation(
71
+ () =>
72
+ ({
73
+ href: "http://localhost:3000",
74
+ } as Location)
75
+ );
76
+ expect(getEnv()).toEqual("development");
77
+ locationSpy.mockRestore();
78
+ });
79
+ it("should return production when href is NOT start with http://localhost", () => {
80
+ const locationSpy = jest.spyOn(window, "location", "get");
81
+ locationSpy.mockImplementation(
82
+ () =>
83
+ ({
84
+ href: "https://bbki.ng",
85
+ } as Location)
86
+ );
87
+ expect(getEnv()).toEqual("production");
88
+ locationSpy.mockRestore();
89
+ });
90
+ });
package/src/app.tsx CHANGED
@@ -1,97 +1,97 @@
1
- import React, { useContext } from "react";
2
- import { Routes, Route, Outlet } from "react-router-dom";
3
- import {
4
- Nav,
5
- Page,
6
- ThreeColLayout,
7
- NotFound,
8
- ErrorBoundary,
9
- } from "@bbki.ng/components";
10
- import { HotKeyNav, Stickers } from "./components";
11
- import { Cover } from "./pages";
12
-
13
- import Png from "@/pages/extensions/png";
14
- import ArticlePage from "@/pages/extensions/txt/article";
15
- import NowPage from "@/pages/now";
16
- import PhotoProjects from "@/pages/extensions/png/png_projects";
17
- import Tags from "@/pages/tags";
18
- import TagsResult from "@/pages/tags/tag_result";
19
- import Txt from "@/pages/extensions/txt";
20
-
21
- import { usePaths } from "@/hooks";
22
- import { Login } from "@/pages/login";
23
- import { SWR } from "@/swr";
24
- import {
25
- GlobalLoadingContext,
26
- GlobalLoadingStateProvider,
27
- } from "@/global_loading_state_provider";
28
- import { useScrollToTop } from "@/hooks/useScrollToTop";
29
-
30
- const Layout = () => {
31
- const { isLoading } = useContext(GlobalLoadingContext);
32
- return (
33
- <>
34
- <Page
35
- nav={
36
- <Nav paths={usePaths()} className="blur-cover" loading={isLoading} />
37
- }
38
- main={<Outlet />}
39
- footer={null}
40
- />
41
- </>
42
- );
43
- };
44
-
45
- const threeColWrapper =
46
- <T extends object>(Component: any) =>
47
- (props: T) => {
48
- return (
49
- <ThreeColLayout
50
- middleRenderer={() => (
51
- <ErrorBoundary>
52
- <Component {...props} />
53
- </ErrorBoundary>
54
- )}
55
- />
56
- );
57
- };
58
-
59
- const NowInMidCol = threeColWrapper(NowPage);
60
- const ContentInMidCol = threeColWrapper(Txt);
61
- const ArticleInMidCol = threeColWrapper(ArticlePage);
62
- const TagsInMidCol = threeColWrapper(Tags);
63
- const LoginInMidCol = threeColWrapper(Login);
64
- const TagsResultInMidCol = threeColWrapper(TagsResult);
65
- const CoverInMidCol = threeColWrapper(Cover);
66
-
67
- export const App = () => {
68
- return (
69
- <SWR>
70
- <HotKeyNav>
71
- <Stickers />
72
- <GlobalLoadingStateProvider>
73
- <Routes>
74
- <Route path="/" element={<Layout />}>
75
- <Route index element={<CoverInMidCol />} />
76
- <Route path="/projects" element={<Png />} />
77
- <Route path="/projects/:id" element={<PhotoProjects />} />
78
-
79
- <Route path="now" element={<NowInMidCol />} />
80
- <Route path="tags" element={<TagsInMidCol />} />
81
- <Route path="tags/:tag" element={<TagsResultInMidCol />} />
82
-
83
- <Route path="blog" element={<ContentInMidCol />} />
84
- <Route path="blog/:title" element={<ArticleInMidCol />} />
85
- <Route path="blog/:title/:id" element={<PhotoProjects />} />
86
-
87
- <Route path="login" element={<LoginInMidCol />} />
88
- </Route>
89
- <Route path="*" element={<NotFound />} />
90
- </Routes>
91
- </GlobalLoadingStateProvider>
92
- </HotKeyNav>
93
- </SWR>
94
- );
95
- };
96
-
97
- export default App;
1
+ import React, { useContext } from "react";
2
+ import { Routes, Route, Outlet } from "react-router-dom";
3
+ import {
4
+ Nav,
5
+ Page,
6
+ ThreeColLayout,
7
+ NotFound,
8
+ ErrorBoundary,
9
+ } from "@bbki.ng/components";
10
+ import { HotKeyNav, Stickers } from "./components";
11
+ import { Cover } from "./pages";
12
+
13
+ import Png from "@/pages/extensions/png";
14
+ import ArticlePage from "@/pages/extensions/txt/article";
15
+ import NowPage from "@/pages/now";
16
+ import PhotoProjects from "@/pages/extensions/png/png_projects";
17
+ import Tags from "@/pages/tags";
18
+ import TagsResult from "@/pages/tags/tag_result";
19
+ import Txt from "@/pages/extensions/txt";
20
+
21
+ import { usePaths } from "@/hooks";
22
+ import { Login } from "@/pages/login";
23
+ import { SWR } from "@/swr";
24
+ import {
25
+ GlobalLoadingContext,
26
+ GlobalLoadingStateProvider,
27
+ } from "@/global_loading_state_provider";
28
+ import { useScrollToTop } from "@/hooks/useScrollToTop";
29
+
30
+ const Layout = () => {
31
+ const { isLoading } = useContext(GlobalLoadingContext);
32
+ return (
33
+ <>
34
+ <Page
35
+ nav={
36
+ <Nav paths={usePaths()} className="blur-cover" loading={isLoading} />
37
+ }
38
+ main={<Outlet />}
39
+ footer={null}
40
+ />
41
+ </>
42
+ );
43
+ };
44
+
45
+ const threeColWrapper =
46
+ <T extends object>(Component: any) =>
47
+ (props: T) => {
48
+ return (
49
+ <ThreeColLayout
50
+ middleRenderer={() => (
51
+ <ErrorBoundary>
52
+ <Component {...props} />
53
+ </ErrorBoundary>
54
+ )}
55
+ />
56
+ );
57
+ };
58
+
59
+ const NowInMidCol = threeColWrapper(NowPage);
60
+ const ContentInMidCol = threeColWrapper(Txt);
61
+ const ArticleInMidCol = threeColWrapper(ArticlePage);
62
+ const TagsInMidCol = threeColWrapper(Tags);
63
+ const LoginInMidCol = threeColWrapper(Login);
64
+ const TagsResultInMidCol = threeColWrapper(TagsResult);
65
+ const CoverInMidCol = threeColWrapper(Cover);
66
+
67
+ export const App = () => {
68
+ return (
69
+ <SWR>
70
+ <HotKeyNav>
71
+ <Stickers />
72
+ <GlobalLoadingStateProvider>
73
+ <Routes>
74
+ <Route path="/" element={<Layout />}>
75
+ <Route index element={<CoverInMidCol />} />
76
+ <Route path="/projects" element={<Png />} />
77
+ <Route path="/projects/:id" element={<PhotoProjects />} />
78
+
79
+ <Route path="now" element={<NowInMidCol />} />
80
+ <Route path="tags" element={<TagsInMidCol />} />
81
+ <Route path="tags/:tag" element={<TagsResultInMidCol />} />
82
+
83
+ <Route path="blog" element={<ContentInMidCol />} />
84
+ <Route path="blog/:title" element={<ArticleInMidCol />} />
85
+ <Route path="blog/:title/:id" element={<PhotoProjects />} />
86
+
87
+ <Route path="login" element={<LoginInMidCol />} />
88
+ </Route>
89
+ <Route path="*" element={<NotFound />} />
90
+ </Routes>
91
+ </GlobalLoadingStateProvider>
92
+ </HotKeyNav>
93
+ </SWR>
94
+ );
95
+ };
96
+
97
+ export default App;
@@ -1,61 +1,61 @@
1
- ---
2
- title: 与或非禁区
3
- ---
4
-
5
- **1. 古老的小区**
6
-
7
- 我搬进 \
8
- 一个古老的小区的胃里
9
-
10
- 堆积的法国梧桐树叶 \
11
- 和我的过往 \
12
- 加重了它消化不良的症状
13
-
14
- 北方的冷空气穿过冲积平原 \
15
- 匍匐在小区旁的江面休息 \
16
- 玩闹
17
-
18
- 手拉着手的山脉远在南边等候 \
19
- 胃壁从此有水珠渗出
20
-
21
- 我的浴巾不再干燥
22
-
23
- **2. 信**
24
-
25
- 被子折叠成信封 \
26
- 身体干瘪成信纸
27
-
28
- 睡梦邮递心事。
29
-
30
- **3. 梦里的事**
31
-
32
- 梦里一群恒星散落在 \
33
- 外婆家屋后的草丛
34
-
35
- 梦里在摩天大楼上空蛙泳
36
-
37
- 梦里变成凶杀犯被通缉
38
-
39
- 梦里牙齿全部脱落 \
40
- 一点也不痛
41
-
42
- **3. 清明后**
43
-
44
- 左手是右手的手写板 \
45
- 五官不是心脏的显示屏 \
46
- 面无表情 \
47
- 手指划着手心
48
-
49
- 键盘上有飞蛾的卵 \
50
- 地毯下是腐烂的地板 \
51
- 没有把的拖把 \
52
- 已被晒干
53
-
54
- 通话质量不佳 \
55
- 扬声器变得沙哑 \
56
- Siri 把熊仔念成了熊子 \
57
- 乘着吹进车窗的 \
58
- 横风飘过副驾驶 \
59
- 飘进山谷带着 \
60
- 笑声、雾 \
61
- 消失在海拔五百二十米的高度
1
+ ---
2
+ title: 与或非禁区
3
+ ---
4
+
5
+ **1. 古老的小区**
6
+
7
+ 我搬进 \
8
+ 一个古老的小区的胃里
9
+
10
+ 堆积的法国梧桐树叶 \
11
+ 和我的过往 \
12
+ 加重了它消化不良的症状
13
+
14
+ 北方的冷空气穿过冲积平原 \
15
+ 匍匐在小区旁的江面休息 \
16
+ 玩闹
17
+
18
+ 手拉着手的山脉远在南边等候 \
19
+ 胃壁从此有水珠渗出
20
+
21
+ 我的浴巾不再干燥
22
+
23
+ **2. 信**
24
+
25
+ 被子折叠成信封 \
26
+ 身体干瘪成信纸
27
+
28
+ 睡梦邮递心事。
29
+
30
+ **3. 梦里的事**
31
+
32
+ 梦里一群恒星散落在 \
33
+ 外婆家屋后的草丛
34
+
35
+ 梦里在摩天大楼上空蛙泳
36
+
37
+ 梦里变成凶杀犯被通缉
38
+
39
+ 梦里牙齿全部脱落 \
40
+ 一点也不痛
41
+
42
+ **3. 清明后**
43
+
44
+ 左手是右手的手写板 \
45
+ 五官不是心脏的显示屏 \
46
+ 面无表情 \
47
+ 手指划着手心
48
+
49
+ 键盘上有飞蛾的卵 \
50
+ 地毯下是腐烂的地板 \
51
+ 没有把的拖把 \
52
+ 已被晒干
53
+
54
+ 通话质量不佳 \
55
+ 扬声器变得沙哑 \
56
+ Siri 把熊仔念成了熊子 \
57
+ 乘着吹进车窗的 \
58
+ 横风飘过副驾驶 \
59
+ 飘进山谷带着 \
60
+ 笑声、雾 \
61
+ 消失在海拔五百二十米的高度
@@ -1,88 +1,88 @@
1
- ---
2
- title: 说明书
3
- tags:
4
- - bbki.ng
5
- ---
6
-
7
- import { OSS_PHOTOS } from "@/constants/photos";
8
- import { Link, Img } from '@bbki.ng/components';
9
-
10
- ## 目录
11
-
12
-
13
- ## 域名
14
- bbki.ng 是在 [upper link](https://upperlink.ng/) 购买的尼日利亚域名。
15
-
16
- ## 接口
17
- <Link external to="https://api.bbki.ng">api.bbki.ng</Link>
18
-
19
- ## 标识使用
20
-
21
- <Link external to="https://zjh-im-res.oss-cn-shenzhen.aliyuncs.com/zip/LOGOs.zip">下载</Link>
22
-
23
- <Img {...OSS_PHOTOS.logoPreview} renderedWidth={200} removeBlurBgAfterLoad />
24
-
25
- ### 目的
26
-
27
- 以下规范用于保证网站标识使用时,能得到最佳视觉效果。
28
-
29
- ### 规范
30
-
31
- #### 颜色
32
-
33
- <Img {...OSS_PHOTOS.logoColors} renderedWidth={600} removeBlurBgAfterLoad />
34
-
35
- #### 尺寸
36
- 标识宽高不得小于 24 像素。
37
-
38
- #### 禁区
39
-
40
- 禁区宽度为图标宽度的一半
41
-
42
- <Img {...OSS_PHOTOS.logoExcludesZone} renderedWidth={300} />
43
-
44
- #### 合法变体
45
-
46
- ##### 纯色背景
47
-
48
- <Img {...OSS_PHOTOS.logoVariants} renderedWidth={600} removeBlurBgAfterLoad />
49
-
50
- ##### 图片背景
51
- <Img {...OSS_PHOTOS.validLogoExample} renderedWidth={300} />
52
-
53
- #### 非法误用
54
-
55
- - 禁止旋转
56
- - 禁止前景背景色出现合法变体外的组合
57
- - 禁止拉伸、压缩
58
- - 禁止使用描边形式
59
- - 禁止修改增删
60
- - 禁止图标越过禁区
61
- - 禁止添加文字
62
- - 禁止添加投影
63
-
64
- #### 错误示例
65
-
66
- <Img {...OSS_PHOTOS.badLogoExamples} renderedWidth={600} removeBlurBgAfterLoad />
67
-
68
- ## 快捷键
69
-
70
- 在浏览本站的过程中,需要频繁在路由间跳转,除了点击超链接的方式,也可以直接按下对应的快捷键进行跳转。下表是快捷键说明。
71
-
72
- | 快捷键 | 含义 | 描述 |
73
- | :----- | :--------- | :----------------------------- |
74
- | `h` | help | 跳转到本文 |
75
- | `i` | index | 跳转到首页 |
76
- | `c` | content | 跳转到目录页 |
77
- | `shift + t` | tags | 跳转到标签列表 |
78
- | `f` | forward | 前进一页 |
79
- | `b` | back | 后退一页 |
80
- | `s` | source | 查看本站源代码 |
81
-
82
- 跳转到目标页面后,按下 tab 可方便地进一步选择目标链接。
83
-
84
- ## 维护者
85
- ### 最近在干嘛?
86
- <Link to="/now">动态</Link>
87
- ### 联系
88
- b@bbki.ng
1
+ ---
2
+ title: 说明书
3
+ tags:
4
+ - bbki.ng
5
+ ---
6
+
7
+ import { OSS_PHOTOS } from "@/constants/photos";
8
+ import { Link, Img } from '@bbki.ng/components';
9
+
10
+ ## 目录
11
+
12
+
13
+ ## 域名
14
+ bbki.ng 是在 [upper link](https://upperlink.ng/) 购买的尼日利亚域名。
15
+
16
+ ## 接口
17
+ <Link external to="https://api.bbki.ng">api.bbki.ng</Link>
18
+
19
+ ## 标识使用
20
+
21
+ <Link external to="https://zjh-im-res.oss-cn-shenzhen.aliyuncs.com/zip/LOGOs.zip">下载</Link>
22
+
23
+ <Img {...OSS_PHOTOS.logoPreview} renderedWidth={200} removeBlurBgAfterLoad />
24
+
25
+ ### 目的
26
+
27
+ 以下规范用于保证网站标识使用时,能得到最佳视觉效果。
28
+
29
+ ### 规范
30
+
31
+ #### 颜色
32
+
33
+ <Img {...OSS_PHOTOS.logoColors} renderedWidth={600} removeBlurBgAfterLoad />
34
+
35
+ #### 尺寸
36
+ 标识宽高不得小于 24 像素。
37
+
38
+ #### 禁区
39
+
40
+ 禁区宽度为图标宽度的一半
41
+
42
+ <Img {...OSS_PHOTOS.logoExcludesZone} renderedWidth={300} />
43
+
44
+ #### 合法变体
45
+
46
+ ##### 纯色背景
47
+
48
+ <Img {...OSS_PHOTOS.logoVariants} renderedWidth={600} removeBlurBgAfterLoad />
49
+
50
+ ##### 图片背景
51
+ <Img {...OSS_PHOTOS.validLogoExample} renderedWidth={300} />
52
+
53
+ #### 非法误用
54
+
55
+ - 禁止旋转
56
+ - 禁止前景背景色出现合法变体外的组合
57
+ - 禁止拉伸、压缩
58
+ - 禁止使用描边形式
59
+ - 禁止修改增删
60
+ - 禁止图标越过禁区
61
+ - 禁止添加文字
62
+ - 禁止添加投影
63
+
64
+ #### 错误示例
65
+
66
+ <Img {...OSS_PHOTOS.badLogoExamples} renderedWidth={600} removeBlurBgAfterLoad />
67
+
68
+ ## 快捷键
69
+
70
+ 在浏览本站的过程中,需要频繁在路由间跳转,除了点击超链接的方式,也可以直接按下对应的快捷键进行跳转。下表是快捷键说明。
71
+
72
+ | 快捷键 | 含义 | 描述 |
73
+ | :----- | :--------- | :----------------------------- |
74
+ | `h` | help | 跳转到本文 |
75
+ | `i` | index | 跳转到首页 |
76
+ | `c` | content | 跳转到目录页 |
77
+ | `shift + t` | tags | 跳转到标签列表 |
78
+ | `f` | forward | 前进一页 |
79
+ | `b` | back | 后退一页 |
80
+ | `s` | source | 查看本站源代码 |
81
+
82
+ 跳转到目标页面后,按下 tab 可方便地进一步选择目标链接。
83
+
84
+ ## 维护者
85
+ ### 最近在干嘛?
86
+ <Link to="/now">动态</Link>
87
+ ### 联系
88
+ b@bbki.ng