c063 1.1.6 → 1.2.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.
- package/dist/components/CodeBlock.d.ts +1 -1
- package/dist/components/CodeLine.d.ts +1 -1
- package/dist/types/common.d.ts +2 -2
- package/dist/types/props.d.ts +7 -7
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.js +7 -5
- package/package.json +1 -1
- package/src/components/CodeBlock.tsx +2 -2
- package/src/components/CodeLine.tsx +5 -1
- package/src/types/common.tsx +4 -4
- package/src/types/props.tsx +16 -19
- package/src/utils/index.ts +12 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CodeBlockProps } from "../types/props";
|
|
2
2
|
export declare const CodeBlock: {
|
|
3
|
-
({ tokenLines, showLineNumbers, lineNumberStyle, ...rest }: CodeBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
<T extends React.ElementType = "span">({ tokenLines, showLineNumbers, lineNumberStyle, ...rest }: CodeBlockProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
displayName: string;
|
|
5
5
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CodeLineProps } from "../types/props";
|
|
2
2
|
export declare const CodeLine: {
|
|
3
|
-
({ style, tokens, ...rest }: CodeLineProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
<T extends React.ElementType>({ style, tokens, ...rest }: CodeLineProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
displayName: string;
|
|
5
5
|
};
|
package/dist/types/common.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export type DistributiveOmit<T, K extends keyof any> = T extends any ? Omit<T, K
|
|
|
3
3
|
/** 用於重載同名屬性(用於覆蓋類型 T 中與類型 P 相同名稱的屬性,並保留其餘屬性*/
|
|
4
4
|
export type OverrideProps<T, P> = DistributiveOmit<T, keyof P> & P;
|
|
5
5
|
/** 支援元件型別 (可複寫屬性)*/
|
|
6
|
-
export type AsComponentProps<
|
|
6
|
+
export type AsComponentProps<T extends React.ElementType, P = {}> = OverrideProps<React.ComponentPropsWithRef<T>, P> & {
|
|
7
7
|
/** 指定用於渲染的 React 元件(可為任意元件*/
|
|
8
|
-
as?:
|
|
8
|
+
as?: T;
|
|
9
9
|
};
|
package/dist/types/props.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AsComponentProps,
|
|
1
|
+
import { AsComponentProps, OverrideProps } from "./common";
|
|
2
2
|
export type KeywordColorType = "blue" | "purple";
|
|
3
3
|
export type CodeTokenType = `keyword-${KeywordColorType}` | "string" | "number" | "comment" | "type" | "variable" | "constant" | `brackets-${1 | 2 | 3}` | "operator" | "default";
|
|
4
4
|
/**
|
|
@@ -6,17 +6,17 @@ export type CodeTokenType = `keyword-${KeywordColorType}` | "string" | "number"
|
|
|
6
6
|
*
|
|
7
7
|
* @template T HTML 或客製元素,例如 span、a、Link 等
|
|
8
8
|
*/
|
|
9
|
-
export type CodeTokenProps<T extends React.ElementType
|
|
9
|
+
export type CodeTokenProps<T extends React.ElementType> = AsComponentProps<T, {
|
|
10
10
|
/**
|
|
11
11
|
* 語法 token 的語意類型,用於指定樣式顏色。
|
|
12
12
|
*/
|
|
13
13
|
type?: CodeTokenType;
|
|
14
14
|
}>;
|
|
15
|
-
export type CodeTokenBuilder<T extends React.ElementType>
|
|
15
|
+
export type CodeTokenBuilder = <T extends React.ElementType>(children: CodeTokenProps<T>["children"], props?: CodeTokenProps<T>) => CodeTokenProps<T>;
|
|
16
16
|
/**
|
|
17
17
|
* 用於單一程式碼行的屬性,用在 <CodeLine /> 或類似元件中。
|
|
18
18
|
*/
|
|
19
|
-
export type CodeLineProps = OverrideProps<React.HTMLAttributes<HTMLElement>, {
|
|
19
|
+
export type CodeLineProps<T extends React.ElementType> = OverrideProps<React.HTMLAttributes<HTMLElement>, {
|
|
20
20
|
/**
|
|
21
21
|
* 該行所包含的語法 token。
|
|
22
22
|
*
|
|
@@ -30,9 +30,9 @@ export type CodeLineProps = OverrideProps<React.HTMLAttributes<HTMLElement>, {
|
|
|
30
30
|
* ]} />
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
|
-
tokens: CodeTokenProps[];
|
|
33
|
+
tokens: CodeTokenProps<T>[];
|
|
34
34
|
}>;
|
|
35
|
-
export type CodeBlockProps = OverrideProps<React.HTMLAttributes<HTMLPreElement>, {
|
|
35
|
+
export type CodeBlockProps<T extends React.ElementType> = OverrideProps<React.HTMLAttributes<HTMLPreElement>, {
|
|
36
36
|
/**
|
|
37
37
|
* 所有程式碼行的 token 陣列。
|
|
38
38
|
*
|
|
@@ -52,7 +52,7 @@ export type CodeBlockProps = OverrideProps<React.HTMLAttributes<HTMLPreElement>,
|
|
|
52
52
|
* ]} />
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
55
|
-
tokenLines: CodeTokenProps[][];
|
|
55
|
+
tokenLines: CodeTokenProps<T>[][];
|
|
56
56
|
/**
|
|
57
57
|
* 是否顯示行號。
|
|
58
58
|
* @default true
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { CodeTokenBuilder, CodeTokenProps, CodeTokenType } from "../types";
|
|
2
|
-
export declare const createToken: Record<CodeTokenType, CodeTokenBuilder
|
|
3
|
-
export declare const whiteSpace: (count?: number) => CodeTokenProps
|
|
2
|
+
export declare const createToken: Record<CodeTokenType, CodeTokenBuilder>;
|
|
3
|
+
export declare const whiteSpace: (count?: number) => CodeTokenProps<"span">;
|
package/dist/utils/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export const createToken = new Proxy({}, {
|
|
2
2
|
get: (_, prop) => {
|
|
3
|
-
const builder = (children, props) =>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const builder = (children, props) => {
|
|
4
|
+
return {
|
|
5
|
+
children,
|
|
6
|
+
type: prop,
|
|
7
|
+
...props,
|
|
8
|
+
};
|
|
9
|
+
};
|
|
8
10
|
return builder;
|
|
9
11
|
},
|
|
10
12
|
});
|
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
|
+
"version": "1.2.0",
|
|
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",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { CodeBlockProps } from "../types/props";
|
|
2
2
|
import { CodeLine } from "./CodeLine";
|
|
3
3
|
|
|
4
|
-
export const CodeBlock = ({
|
|
4
|
+
export const CodeBlock = <T extends React.ElementType = "span">({
|
|
5
5
|
tokenLines,
|
|
6
6
|
showLineNumbers = true,
|
|
7
7
|
lineNumberStyle,
|
|
8
8
|
...rest
|
|
9
|
-
}: CodeBlockProps) => {
|
|
9
|
+
}: CodeBlockProps<T>) => {
|
|
10
10
|
return (
|
|
11
11
|
<pre {...rest}>
|
|
12
12
|
{tokenLines.map((line, index) => (
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { CodeLineProps } from "../types/props";
|
|
2
2
|
import { CodeToken } from "./CodeToken";
|
|
3
3
|
|
|
4
|
-
export const CodeLine =
|
|
4
|
+
export const CodeLine = <T extends React.ElementType>({
|
|
5
|
+
style,
|
|
6
|
+
tokens,
|
|
7
|
+
...rest
|
|
8
|
+
}: CodeLineProps<T>) => {
|
|
5
9
|
return (
|
|
6
10
|
<code
|
|
7
11
|
{...rest}
|
package/src/types/common.tsx
CHANGED
|
@@ -8,9 +8,9 @@ export type OverrideProps<T, P> = DistributiveOmit<T, keyof P> & P;
|
|
|
8
8
|
|
|
9
9
|
/** 支援元件型別 (可複寫屬性)*/
|
|
10
10
|
export type AsComponentProps<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
> = OverrideProps<React.ComponentPropsWithRef<
|
|
11
|
+
T extends React.ElementType,
|
|
12
|
+
P = {}
|
|
13
|
+
> = OverrideProps<React.ComponentPropsWithRef<T>, P> & {
|
|
14
14
|
/** 指定用於渲染的 React 元件(可為任意元件*/
|
|
15
|
-
as?:
|
|
15
|
+
as?: T;
|
|
16
16
|
};
|
package/src/types/props.tsx
CHANGED
|
@@ -21,28 +21,25 @@ export type CodeTokenType =
|
|
|
21
21
|
*
|
|
22
22
|
* @template T HTML 或客製元素,例如 span、a、Link 等
|
|
23
23
|
*/
|
|
24
|
-
export type CodeTokenProps<T extends React.ElementType =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
>;
|
|
24
|
+
export type CodeTokenProps<T extends React.ElementType> = AsComponentProps<
|
|
25
|
+
T,
|
|
26
|
+
{
|
|
27
|
+
/**
|
|
28
|
+
* 語法 token 的語意類型,用於指定樣式顏色。
|
|
29
|
+
*/
|
|
30
|
+
type?: CodeTokenType;
|
|
31
|
+
}
|
|
32
|
+
>;
|
|
34
33
|
|
|
35
|
-
export type CodeTokenBuilder<T extends React.ElementType>
|
|
36
|
-
children: CodeTokenProps<T>["children"]
|
|
37
|
-
|
|
38
|
-
: CodeTokenProps<T>["children"],
|
|
39
|
-
props?: DistributiveOmit<CodeTokenProps<T>, "type">
|
|
34
|
+
export type CodeTokenBuilder = <T extends React.ElementType>(
|
|
35
|
+
children: CodeTokenProps<T>["children"],
|
|
36
|
+
props?: CodeTokenProps<T>
|
|
40
37
|
) => CodeTokenProps<T>;
|
|
41
38
|
|
|
42
39
|
/**
|
|
43
40
|
* 用於單一程式碼行的屬性,用在 <CodeLine /> 或類似元件中。
|
|
44
41
|
*/
|
|
45
|
-
export type CodeLineProps = OverrideProps<
|
|
42
|
+
export type CodeLineProps<T extends React.ElementType> = OverrideProps<
|
|
46
43
|
React.HTMLAttributes<HTMLElement>,
|
|
47
44
|
{
|
|
48
45
|
/**
|
|
@@ -58,11 +55,11 @@ export type CodeLineProps = OverrideProps<
|
|
|
58
55
|
* ]} />
|
|
59
56
|
* ```
|
|
60
57
|
*/
|
|
61
|
-
tokens: CodeTokenProps[];
|
|
58
|
+
tokens: CodeTokenProps<T>[];
|
|
62
59
|
}
|
|
63
60
|
>;
|
|
64
61
|
|
|
65
|
-
export type CodeBlockProps = OverrideProps<
|
|
62
|
+
export type CodeBlockProps<T extends React.ElementType> = OverrideProps<
|
|
66
63
|
React.HTMLAttributes<HTMLPreElement>,
|
|
67
64
|
{
|
|
68
65
|
/**
|
|
@@ -84,7 +81,7 @@ export type CodeBlockProps = OverrideProps<
|
|
|
84
81
|
* ]} />
|
|
85
82
|
* ```
|
|
86
83
|
*/
|
|
87
|
-
tokenLines: CodeTokenProps[][];
|
|
84
|
+
tokenLines: CodeTokenProps<T>[][];
|
|
88
85
|
|
|
89
86
|
/**
|
|
90
87
|
* 是否顯示行號。
|
package/src/utils/index.ts
CHANGED
|
@@ -4,20 +4,22 @@ export const createToken = new Proxy(
|
|
|
4
4
|
{},
|
|
5
5
|
{
|
|
6
6
|
get: (_, prop: CodeTokenType) => {
|
|
7
|
-
const builder
|
|
8
|
-
children,
|
|
9
|
-
props
|
|
10
|
-
) =>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
const builder = <T extends React.ElementType = "span">(
|
|
8
|
+
children: React.ReactNode,
|
|
9
|
+
props: CodeTokenProps<T>
|
|
10
|
+
) => {
|
|
11
|
+
return {
|
|
12
|
+
children,
|
|
13
|
+
type: prop,
|
|
14
|
+
...props,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
15
17
|
return builder;
|
|
16
18
|
},
|
|
17
19
|
}
|
|
18
|
-
) as Record<CodeTokenType, CodeTokenBuilder
|
|
20
|
+
) as Record<CodeTokenType, CodeTokenBuilder>;
|
|
19
21
|
|
|
20
|
-
export const whiteSpace = (count: number = 1): CodeTokenProps => ({
|
|
22
|
+
export const whiteSpace = (count: number = 1): CodeTokenProps<"span"> => ({
|
|
21
23
|
type: "default",
|
|
22
24
|
children: " ".repeat(count),
|
|
23
25
|
});
|