c063 1.4.0 → 1.4.2
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.
- package/dist/components/CodeBlock.js +3 -1
- package/dist/components/CodeToken.js +3 -12
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/libs/index.d.ts +18 -1
- package/dist/libs/index.js +30 -14
- package/package.json +1 -9
- package/src/components/CodeBlock.tsx +1 -0
- package/src/components/CodeToken.tsx +3 -15
- package/src/index.ts +6 -2
- package/src/libs/index.tsx +39 -14
- package/src/utils/theme.tsx +0 -8
|
@@ -11,7 +11,9 @@ import { CodeLine } from "./CodeLine";
|
|
|
11
11
|
* @returns JSX 元素,呈現語法高亮的程式碼區塊
|
|
12
12
|
*/
|
|
13
13
|
export const CodeBlock = ({ tokenLines, showLineNumbers = true, lineNumberStyle, theme, ...rest }) => {
|
|
14
|
-
return (_jsx("pre", { ...rest, children: tokenLines.map((line, index) => (
|
|
14
|
+
return (_jsx("pre", { ...rest, children: tokenLines.map((line, index) => (
|
|
15
|
+
// eslint-disable-next-line react/react-in-jsx-scope
|
|
16
|
+
_jsxs("div", { style: {
|
|
15
17
|
display: "flex",
|
|
16
18
|
flexWrap: "nowrap",
|
|
17
19
|
width: "100%",
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import { loadTheme } from "../utils/theme";
|
|
2
|
+
import { themeMap } from "../libs/index";
|
|
4
3
|
/**
|
|
5
4
|
* 渲染單一語法 token(例如關鍵字、字串、註解等),可指定標籤與樣式。
|
|
6
5
|
*
|
|
@@ -14,16 +13,8 @@ import { loadTheme } from "../utils/theme";
|
|
|
14
13
|
*/
|
|
15
14
|
export const CodeToken = ({ as, style, children, type, theme, ...rest }) => {
|
|
16
15
|
const Tag = as || "span";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (theme) {
|
|
20
|
-
loadTheme(theme).then((res) => setCurrTheme(res));
|
|
21
|
-
}
|
|
22
|
-
}, [theme]);
|
|
23
|
-
return (
|
|
24
|
-
// eslint-disable-next-line react/react-in-jsx-scope
|
|
25
|
-
_jsx(Tag, { ...rest, style: {
|
|
26
|
-
color: (currTheme === null || currTheme === void 0 ? void 0 : currTheme[type || "default"]) || undefined,
|
|
16
|
+
return (_jsx(Tag, { ...rest, style: {
|
|
17
|
+
color: themeMap[theme || "default-dark-modern"][type || "default"],
|
|
27
18
|
...style,
|
|
28
19
|
}, children: children }));
|
|
29
20
|
};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/libs/index.d.ts
CHANGED
|
@@ -1,2 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CodeTokenType, CodeTheme } from "../types";
|
|
2
|
+
declare const _themeRegistry: {
|
|
3
|
+
readonly "default-dark-modern": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
4
|
+
readonly "default-dark": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
5
|
+
readonly "default-dark-plus": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
6
|
+
readonly "visual-studio-light": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
7
|
+
readonly "default-light-plus": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
8
|
+
readonly "default-light-modern": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
9
|
+
readonly "github-light": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
10
|
+
readonly "github-light-default": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
11
|
+
readonly "github-light-colorblind": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
12
|
+
readonly "github-dark": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
13
|
+
readonly "github-dark-default": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
14
|
+
readonly "github-dark-colorblind": Record<CodeTokenType, import("csstype").Property.Color | undefined>;
|
|
15
|
+
};
|
|
16
|
+
export declare const themes: (keyof typeof _themeRegistry)[];
|
|
17
|
+
export declare const themeMap: Record<CodeTheme, Record<CodeTokenType, React.CSSProperties["color"]>>;
|
|
2
18
|
export declare const parsableLanguages: readonly ["javascript"];
|
|
19
|
+
export {};
|
package/dist/libs/index.js
CHANGED
|
@@ -1,15 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { map as darkModern } from "./themes/default-dark-modern";
|
|
2
|
+
import { map as dark } from "./themes/default-dark";
|
|
3
|
+
import { map as darkPlus } from "./themes/default-dark-plus";
|
|
4
|
+
import { map as vsLight } from "./themes/visual-studio-light";
|
|
5
|
+
import { map as lightPlus } from "./themes/default-light-plus";
|
|
6
|
+
import { map as lightModern } from "./themes/default-light-modern";
|
|
7
|
+
import { map as ghLight } from "./themes/github-light";
|
|
8
|
+
import { map as ghLightDefault } from "./themes/github-light-default";
|
|
9
|
+
import { map as ghLightBilnd } from "./themes/github-light-colorblind";
|
|
10
|
+
import { map as ghDark } from "./themes/github-dark";
|
|
11
|
+
import { map as ghDarkDefault } from "./themes/github-dark-default";
|
|
12
|
+
import { map as ghDarkBilnd } from "./themes/github-dark-colorblind";
|
|
13
|
+
const _themeRegistry = {
|
|
14
|
+
"default-dark-modern": darkModern,
|
|
15
|
+
"default-dark": dark,
|
|
16
|
+
"default-dark-plus": darkPlus,
|
|
17
|
+
"visual-studio-light": vsLight,
|
|
18
|
+
"default-light-plus": lightPlus,
|
|
19
|
+
"default-light-modern": lightModern,
|
|
20
|
+
"github-light": ghLight,
|
|
21
|
+
"github-light-default": ghLightDefault,
|
|
22
|
+
"github-light-colorblind": ghLightBilnd,
|
|
23
|
+
"github-dark": ghDark,
|
|
24
|
+
"github-dark-default": ghDarkDefault,
|
|
25
|
+
"github-dark-colorblind": ghDarkBilnd,
|
|
26
|
+
};
|
|
27
|
+
// 自動推導主題名稱
|
|
28
|
+
export const themes = Object.keys(_themeRegistry);
|
|
29
|
+
// themeMap 保留給外部使用
|
|
30
|
+
export const themeMap = _themeRegistry;
|
|
15
31
|
export const parsableLanguages = ["javascript"];
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "c063",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.2",
|
|
5
5
|
"description": "A React component for displaying code snippets with syntax highlighting.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -16,25 +16,17 @@
|
|
|
16
16
|
"Code.js",
|
|
17
17
|
"Fanyu",
|
|
18
18
|
"Syntax Highlighting",
|
|
19
|
-
"Code Snippet",
|
|
20
19
|
"Code Display",
|
|
21
|
-
"Code Viewer",
|
|
22
20
|
"Code Block",
|
|
23
21
|
"Code Highlighting",
|
|
24
|
-
"Code Formatter",
|
|
25
|
-
"Code Viewer Component",
|
|
26
22
|
"Code Syntax",
|
|
27
23
|
"Code Snippet Viewer",
|
|
28
24
|
"Code Snippet Highlighter",
|
|
29
25
|
"Code Snippet Formatter",
|
|
30
26
|
"Code Snippet Display",
|
|
31
|
-
"Code Snippet Viewer Component",
|
|
32
27
|
"Code Snippet Highlighter Component",
|
|
33
|
-
"Code Snippet Formatter Component",
|
|
34
28
|
"Code Snippet Display Component",
|
|
35
|
-
"Code Snippet Viewer React",
|
|
36
29
|
"Code Snippet Highlighter React",
|
|
37
|
-
"Code Snippet Formatter React",
|
|
38
30
|
"Code Snippet Display React"
|
|
39
31
|
],
|
|
40
32
|
"repository": {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { CodeTokenProps
|
|
3
|
-
import { loadTheme } from "../utils/theme";
|
|
1
|
+
import { themeMap } from "../libs/index";
|
|
2
|
+
import { CodeTokenProps } from "../types/index";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* 渲染單一語法 token(例如關鍵字、字串、註解等),可指定標籤與樣式。
|
|
@@ -22,23 +21,12 @@ export const CodeToken = <T extends React.ElementType = "span">({
|
|
|
22
21
|
...rest
|
|
23
22
|
}: CodeTokenProps<T>) => {
|
|
24
23
|
const Tag = as || "span";
|
|
25
|
-
const [currTheme, setCurrTheme] = useState<Record<
|
|
26
|
-
CodeTokenType,
|
|
27
|
-
React.CSSProperties["color"]
|
|
28
|
-
> | null>(null);
|
|
29
|
-
|
|
30
|
-
useLayoutEffect(() => {
|
|
31
|
-
if (theme) {
|
|
32
|
-
loadTheme(theme).then((res) => setCurrTheme(res));
|
|
33
|
-
}
|
|
34
|
-
}, [theme]);
|
|
35
24
|
|
|
36
25
|
return (
|
|
37
|
-
// eslint-disable-next-line react/react-in-jsx-scope
|
|
38
26
|
<Tag
|
|
39
27
|
{...rest}
|
|
40
28
|
style={{
|
|
41
|
-
color:
|
|
29
|
+
color: themeMap[theme || "default-dark-modern"][type || "default"],
|
|
42
30
|
...style,
|
|
43
31
|
}}
|
|
44
32
|
>
|
package/src/index.ts
CHANGED
package/src/libs/index.tsx
CHANGED
|
@@ -1,16 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import type { CodeTokenType, CodeTheme } from "../types";
|
|
2
|
+
import { map as darkModern } from "./themes/default-dark-modern";
|
|
3
|
+
import { map as dark } from "./themes/default-dark";
|
|
4
|
+
import { map as darkPlus } from "./themes/default-dark-plus";
|
|
5
|
+
import { map as vsLight } from "./themes/visual-studio-light";
|
|
6
|
+
import { map as lightPlus } from "./themes/default-light-plus";
|
|
7
|
+
import { map as lightModern } from "./themes/default-light-modern";
|
|
8
|
+
import { map as ghLight } from "./themes/github-light";
|
|
9
|
+
import { map as ghLightDefault } from "./themes/github-light-default";
|
|
10
|
+
import { map as ghLightBilnd } from "./themes/github-light-colorblind";
|
|
11
|
+
import { map as ghDark } from "./themes/github-dark";
|
|
12
|
+
import { map as ghDarkDefault } from "./themes/github-dark-default";
|
|
13
|
+
import { map as ghDarkBilnd } from "./themes/github-dark-colorblind";
|
|
14
|
+
|
|
15
|
+
const _themeRegistry = {
|
|
16
|
+
"default-dark-modern": darkModern,
|
|
17
|
+
"default-dark": dark,
|
|
18
|
+
"default-dark-plus": darkPlus,
|
|
19
|
+
"visual-studio-light": vsLight,
|
|
20
|
+
"default-light-plus": lightPlus,
|
|
21
|
+
"default-light-modern": lightModern,
|
|
22
|
+
"github-light": ghLight,
|
|
23
|
+
"github-light-default": ghLightDefault,
|
|
24
|
+
"github-light-colorblind": ghLightBilnd,
|
|
25
|
+
"github-dark": ghDark,
|
|
26
|
+
"github-dark-default": ghDarkDefault,
|
|
27
|
+
"github-dark-colorblind": ghDarkBilnd,
|
|
28
|
+
} as const;
|
|
29
|
+
|
|
30
|
+
// 自動推導主題名稱
|
|
31
|
+
export const themes = Object.keys(
|
|
32
|
+
_themeRegistry
|
|
33
|
+
) as (keyof typeof _themeRegistry)[];
|
|
34
|
+
|
|
35
|
+
// themeMap 保留給外部使用
|
|
36
|
+
export const themeMap: Record<
|
|
37
|
+
CodeTheme,
|
|
38
|
+
Record<CodeTokenType, React.CSSProperties["color"]>
|
|
39
|
+
> = _themeRegistry;
|
|
15
40
|
|
|
16
41
|
export const parsableLanguages = ["javascript"] as const;
|
package/src/utils/theme.tsx
DELETED