rspress-plugin-reading-time 0.1.3 → 0.1.4-beta.0

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.
@@ -0,0 +1,19 @@
1
+ @rp-reading-time: ~'rp-reading-time';
2
+
3
+ @rp-reading-time-color-light: ~'rgba(60, 60, 60, 0.66)';
4
+ @rp-reading-time-color-dark: ~'rgba(235, 235, 235, 0.56)';
5
+
6
+ .@{rp-reading-time} {
7
+ position: relative;
8
+ top: -18px;
9
+ font-style: italic;
10
+ font-size: 15px;
11
+
12
+ &[data-dark='true'] {
13
+ color: @rp-reading-time-color-dark;
14
+ }
15
+
16
+ &[data-dark='false'] {
17
+ color: @rp-reading-time-color-light;
18
+ }
19
+ }
@@ -0,0 +1,60 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { usePageData, useLang, useDark } from 'rspress/runtime';
3
+
4
+ import type { ReadTimeResults } from 'reading-time';
5
+ import type { PresetLocale, WithDefaultLocale } from 'rspress-plugin-devkit';
6
+
7
+ import './ReadingTime.less';
8
+
9
+ interface RspressReadingTimeComponentProps extends WithDefaultLocale {}
10
+
11
+ const presetReadingTimeBuilder: Record<
12
+ PresetLocale,
13
+ (result: ReadTimeResults) => string
14
+ > = {
15
+ 'zh-CN': (result: ReadTimeResults) => {
16
+ return `预计阅读时间: ${result.minutes >= 1 ? `${Math.ceil(result.minutes)} 分钟` : '小于 1 分钟'}`;
17
+ },
18
+ 'en-US': (result: ReadTimeResults) => {
19
+ return `Estimated reading time: ${result.minutes >= 1 ? `${Math.ceil(result.minutes)} minutes` : 'less than 1 minute'}`;
20
+ },
21
+ };
22
+
23
+ function getReadingTimeText(
24
+ result: ReadTimeResults,
25
+ lang: string,
26
+ defaultLocale: PresetLocale,
27
+ ) {
28
+ const langKey = Object.keys(presetReadingTimeBuilder).includes(lang)
29
+ ? lang
30
+ : defaultLocale;
31
+
32
+ return presetReadingTimeBuilder[langKey](result);
33
+ }
34
+
35
+ export const RspressReadingTimeComponent: React.FC<
36
+ RspressReadingTimeComponentProps
37
+ > = (props) => {
38
+ const { defaultLocale = 'en-US' } = props;
39
+ const pageData = usePageData();
40
+ const pageReadingTime = pageData.page.readingTimeData as ReadTimeResults;
41
+
42
+ const lang = useLang();
43
+ const dark = useDark();
44
+
45
+ const [readingTime, setReadingTime] = useState<string>(
46
+ getReadingTimeText(pageReadingTime, lang, defaultLocale),
47
+ );
48
+
49
+ useEffect(() => {
50
+ setReadingTime(getReadingTimeText(pageReadingTime, lang, defaultLocale));
51
+ }, [lang, pageReadingTime]);
52
+
53
+ return (
54
+ <span data-dark={String(dark)} className="rp-reading-time">
55
+ {readingTime}
56
+ </span>
57
+ );
58
+ };
59
+
60
+ export default RspressReadingTimeComponent;
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ export default function rspressPluginReadingTime(options = {}) {
7
7
  components: [
8
8
  {
9
9
  position: 'after-first-heading',
10
- componentPath: path.join(__dirname, 'components', './ReadingTime.tsx'),
10
+ componentPath: path.join(__dirname, '../components/ReadingTime.tsx'),
11
11
  propsProvider: () => ({
12
12
  defaultLocale,
13
13
  }),
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "rspress-plugin-reading-time",
3
- "version": "0.1.3",
3
+ "version": "0.1.4-beta.0",
4
4
  "files": [
5
- "dist"
5
+ "dist",
6
+ "components"
6
7
  ],
7
8
  "description": "Rspress plugin to render reading-time for pages.",
8
9
  "keywords": [
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import type { WithDefaultLocale } from 'rspress-plugin-devkit';
3
- import './ReadingTime.less';
4
- interface RspressReadingTimeComponentProps extends WithDefaultLocale {
5
- }
6
- export declare const RspressReadingTimeComponent: React.FC<RspressReadingTimeComponentProps>;
7
- export default RspressReadingTimeComponent;
@@ -1,32 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { usePageData, useLang, useDark } from 'rspress/runtime';
3
- import './ReadingTime.less';
4
- const presetReadingTimeBuilder = {
5
- 'zh-CN': (result) => {
6
- return `预计阅读时间: ${result.minutes >= 1 ? `${Math.ceil(result.minutes)} 分钟` : '小于 1 分钟'}`;
7
- },
8
- 'en-US': (result) => {
9
- return `Estimated reading time: ${result.minutes >= 1 ? `${Math.ceil(result.minutes)} minutes` : 'less than 1 minute'}`;
10
- },
11
- };
12
- function getReadingTimeText(result, lang, defaultLocale) {
13
- const langKey = Object.keys(presetReadingTimeBuilder).includes(lang)
14
- ? lang
15
- : defaultLocale;
16
- return presetReadingTimeBuilder[langKey](result);
17
- }
18
- export const RspressReadingTimeComponent = (props) => {
19
- const { defaultLocale = 'en-US' } = props;
20
- const pageData = usePageData();
21
- const pageReadingTime = pageData.page.readingTimeData;
22
- const lang = useLang();
23
- const dark = useDark();
24
- const [readingTime, setReadingTime] = useState(getReadingTimeText(pageReadingTime, lang, defaultLocale));
25
- useEffect(() => {
26
- setReadingTime(getReadingTimeText(pageReadingTime, lang, defaultLocale));
27
- }, [lang, pageReadingTime]);
28
- return (<span data-dark={String(dark)} className="rp-reading-time">
29
- {readingTime}
30
- </span>);
31
- };
32
- export default RspressReadingTimeComponent;