@yoka-ui/ui 1.0.6 → 1.0.7
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/@Docs-yoka/exports.generated.md +3 -3
- package/README.md +6 -6
- package/dist/es/assets/image/skills.zip +0 -0
- package/dist/es/business/Empty/index.js.map +1 -1
- package/dist/es/business/YkCharts/Area.d.ts +18 -0
- package/dist/es/business/YkCharts/Area.js +336 -0
- package/dist/es/business/YkCharts/Area.js.map +7 -0
- package/dist/es/business/YkCharts/Bar.d.ts +21 -0
- package/dist/es/business/YkCharts/Bar.js +316 -0
- package/dist/es/business/YkCharts/Bar.js.map +7 -0
- package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
- package/dist/es/business/YkCharts/BarProperty.js +357 -0
- package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
- package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
- package/dist/es/business/YkCharts/BarTotal.js +288 -0
- package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
- package/dist/es/business/YkCharts/Line.d.ts +21 -0
- package/dist/es/business/YkCharts/Line.js +342 -0
- package/dist/es/business/YkCharts/Line.js.map +7 -0
- package/dist/es/business/YkCharts/Pie.d.ts +19 -0
- package/dist/es/business/YkCharts/Pie.js +107 -0
- package/dist/es/business/YkCharts/Pie.js.map +7 -0
- package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
- package/dist/es/business/YkCharts/PieProperty.js +180 -0
- package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
- package/dist/es/business/YkCharts/Pies.d.ts +26 -0
- package/dist/es/business/YkCharts/Pies.js +348 -0
- package/dist/es/business/YkCharts/Pies.js.map +7 -0
- package/dist/es/business/YkCharts/constants.d.ts +1 -0
- package/dist/es/business/YkCharts/constants.js +47 -0
- package/dist/es/business/YkCharts/constants.js.map +7 -0
- package/dist/es/business/YkCharts/hooks.d.ts +4 -0
- package/dist/es/business/YkCharts/hooks.js +37 -0
- package/dist/es/business/YkCharts/hooks.js.map +7 -0
- package/dist/es/business/YkCharts/index.d.ts +9 -0
- package/dist/es/business/YkCharts/index.js +20 -0
- package/dist/es/business/YkCharts/index.js.map +7 -0
- package/dist/es/business/YkCharts/index.module.less +164 -0
- package/dist/es/business/YkCharts/tooltip.less +92 -0
- package/dist/es/business/YkCharts/transformData.js +16 -0
- package/dist/es/business/YkCharts/transformData.js.map +7 -0
- package/dist/es/business/YkCharts/typing.d.ts +74 -0
- package/dist/es/business/YkCharts/typing.js +1 -0
- package/dist/es/business/YkCharts/typing.js.map +7 -0
- package/dist/es/business/YkCharts/utils.d.ts +4 -0
- package/dist/es/business/YkCharts/utils.js +109 -0
- package/dist/es/business/YkCharts/utils.js.map +7 -0
- package/dist/es/business/YkCharts/variables.less +13 -0
- package/dist/es/components/YKMarkdown/index.d.ts +11 -0
- package/dist/es/components/YKMarkdown/index.js +236 -0
- package/dist/es/components/YKMarkdown/index.js.map +7 -0
- package/dist/es/components/YKMarkdown/index.module.less +83 -0
- package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
- package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
- package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
- package/dist/es/creative/SkillsWriter/index.js +191 -0
- package/dist/es/creative/SkillsWriter/index.js.map +7 -0
- package/dist/es/creative/SkillsWriter/index.module.less +21 -0
- package/dist/es/index.less +6 -1
- package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
- package/dist/es/utils/ykStorybookDoc.js +24 -2
- package/dist/es/utils/ykStorybookDoc.js.map +2 -2
- package/dist/lib/assets/image/skills.zip +0 -0
- package/dist/lib/business/Empty/index.js.map +1 -1
- package/dist/lib/business/YkCharts/Area.d.ts +18 -0
- package/dist/lib/business/YkCharts/Area.js +346 -0
- package/dist/lib/business/YkCharts/Area.js.map +7 -0
- package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
- package/dist/lib/business/YkCharts/Bar.js +323 -0
- package/dist/lib/business/YkCharts/Bar.js.map +7 -0
- package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
- package/dist/lib/business/YkCharts/BarProperty.js +370 -0
- package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
- package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
- package/dist/lib/business/YkCharts/BarTotal.js +295 -0
- package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
- package/dist/lib/business/YkCharts/Line.d.ts +21 -0
- package/dist/lib/business/YkCharts/Line.js +349 -0
- package/dist/lib/business/YkCharts/Line.js.map +7 -0
- package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
- package/dist/lib/business/YkCharts/Pie.js +117 -0
- package/dist/lib/business/YkCharts/Pie.js.map +7 -0
- package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
- package/dist/lib/business/YkCharts/PieProperty.js +193 -0
- package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
- package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
- package/dist/lib/business/YkCharts/Pies.js +337 -0
- package/dist/lib/business/YkCharts/Pies.js.map +7 -0
- package/dist/lib/business/YkCharts/constants.d.ts +1 -0
- package/dist/lib/business/YkCharts/constants.js +71 -0
- package/dist/lib/business/YkCharts/constants.js.map +7 -0
- package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
- package/dist/lib/business/YkCharts/hooks.js +62 -0
- package/dist/lib/business/YkCharts/hooks.js.map +7 -0
- package/dist/lib/business/YkCharts/index.d.ts +9 -0
- package/dist/lib/business/YkCharts/index.js +61 -0
- package/dist/lib/business/YkCharts/index.js.map +7 -0
- package/dist/lib/business/YkCharts/index.module.less +164 -0
- package/dist/lib/business/YkCharts/tooltip.less +92 -0
- package/dist/lib/business/YkCharts/transformData.js +40 -0
- package/dist/lib/business/YkCharts/transformData.js.map +7 -0
- package/dist/lib/business/YkCharts/typing.d.ts +74 -0
- package/dist/lib/business/YkCharts/typing.js +18 -0
- package/dist/lib/business/YkCharts/typing.js.map +7 -0
- package/dist/lib/business/YkCharts/utils.d.ts +4 -0
- package/dist/lib/business/YkCharts/utils.js +143 -0
- package/dist/lib/business/YkCharts/utils.js.map +7 -0
- package/dist/lib/business/YkCharts/variables.less +13 -0
- package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
- package/dist/lib/components/YKMarkdown/index.js +188 -0
- package/dist/lib/components/YKMarkdown/index.js.map +7 -0
- package/dist/lib/components/YKMarkdown/index.module.less +83 -0
- package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
- package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
- package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
- package/dist/lib/creative/SkillsWriter/index.js +200 -0
- package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
- package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
- package/dist/lib/index.less +6 -1
- package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
- package/dist/lib/utils/ykStorybookDoc.js +23 -1
- package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
- package/package.json +152 -143
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/business/YkCharts/utils.ts
|
|
30
|
+
var utils_exports = {};
|
|
31
|
+
__export(utils_exports, {
|
|
32
|
+
formatNumber: () => formatNumber,
|
|
33
|
+
formatValue: () => formatValue,
|
|
34
|
+
sqlFormat: () => sqlFormat
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(utils_exports);
|
|
37
|
+
var import_decimal = __toESM(require("decimal.js"));
|
|
38
|
+
var formatValue = (value, format) => {
|
|
39
|
+
if (value === null || value === void 0 || value === "-") {
|
|
40
|
+
return "-";
|
|
41
|
+
}
|
|
42
|
+
if (!format || format === null) {
|
|
43
|
+
return value.toString();
|
|
44
|
+
}
|
|
45
|
+
const numValue = Number(value);
|
|
46
|
+
if (format === "percent") {
|
|
47
|
+
return new import_decimal.default(numValue).mul(100).toFixed(2) + "%";
|
|
48
|
+
}
|
|
49
|
+
if (format === "decimal") {
|
|
50
|
+
return new import_decimal.default(numValue).toFixed(2);
|
|
51
|
+
}
|
|
52
|
+
if (format === "integer") {
|
|
53
|
+
return new Intl.NumberFormat().format(numValue);
|
|
54
|
+
}
|
|
55
|
+
return numValue.toString();
|
|
56
|
+
};
|
|
57
|
+
function formatNumber(num, isInteger = false) {
|
|
58
|
+
const numberValue = typeof num === "string" ? parseFloat(num) : num;
|
|
59
|
+
if (isNaN(numberValue)) {
|
|
60
|
+
return [(num == null ? void 0 : num.toString()) || "", ""];
|
|
61
|
+
}
|
|
62
|
+
let result = "";
|
|
63
|
+
let unit = "";
|
|
64
|
+
function setFixed(v, dot) {
|
|
65
|
+
const multiplier = 10 ** dot;
|
|
66
|
+
return Math.floor(v * multiplier) / multiplier;
|
|
67
|
+
}
|
|
68
|
+
if (numberValue < 1e3) {
|
|
69
|
+
result = new import_decimal.default(numberValue).toFixed(1);
|
|
70
|
+
} else if (numberValue < 1e4) {
|
|
71
|
+
result = numberValue.toLocaleString("en-US", {
|
|
72
|
+
minimumFractionDigits: isInteger ? 0 : 1,
|
|
73
|
+
maximumFractionDigits: isInteger ? 0 : 1
|
|
74
|
+
});
|
|
75
|
+
} else if (numberValue < 1e8) {
|
|
76
|
+
const v = setFixed(numberValue / 1e4, 2);
|
|
77
|
+
result = v.toLocaleString("en-US", {
|
|
78
|
+
minimumFractionDigits: isInteger ? 1 : 2,
|
|
79
|
+
maximumFractionDigits: isInteger ? 1 : 2
|
|
80
|
+
});
|
|
81
|
+
unit = " 万";
|
|
82
|
+
} else {
|
|
83
|
+
const v = setFixed(numberValue / 1e8, 2);
|
|
84
|
+
result = v.toLocaleString("en-US", {
|
|
85
|
+
minimumFractionDigits: isInteger ? 1 : 2,
|
|
86
|
+
maximumFractionDigits: isInteger ? 1 : 2
|
|
87
|
+
});
|
|
88
|
+
unit = " 亿";
|
|
89
|
+
}
|
|
90
|
+
if (isInteger) {
|
|
91
|
+
result = result.replace(/\.0+(?=\D*$)/, "");
|
|
92
|
+
}
|
|
93
|
+
return [result, unit];
|
|
94
|
+
}
|
|
95
|
+
function sqlFormat(value, format) {
|
|
96
|
+
if (value === null || value === void 0 || value === "-") {
|
|
97
|
+
return "-";
|
|
98
|
+
}
|
|
99
|
+
if (!format) {
|
|
100
|
+
return value == null ? void 0 : value.toString();
|
|
101
|
+
}
|
|
102
|
+
if (typeof value === "boolean") {
|
|
103
|
+
return value == null ? void 0 : value.toString();
|
|
104
|
+
}
|
|
105
|
+
const { type, decimals = 0, thousand_separator = true, unit = 0, prefix = "", suffix = "" } = format;
|
|
106
|
+
switch (type) {
|
|
107
|
+
case "number": {
|
|
108
|
+
let result;
|
|
109
|
+
if (thousand_separator) {
|
|
110
|
+
result = value ? value == null ? void 0 : value.toLocaleString("en-US", {
|
|
111
|
+
minimumFractionDigits: decimals,
|
|
112
|
+
maximumFractionDigits: decimals
|
|
113
|
+
}) : "0";
|
|
114
|
+
} else {
|
|
115
|
+
result = new import_decimal.default(value || 0).toFixed(decimals);
|
|
116
|
+
}
|
|
117
|
+
return `${prefix}${result}${suffix}`;
|
|
118
|
+
}
|
|
119
|
+
case "percent": {
|
|
120
|
+
const result = new import_decimal.default(value || 0).mul(100).toFixed(decimals) + "%";
|
|
121
|
+
return `${prefix}${result}${suffix}`;
|
|
122
|
+
}
|
|
123
|
+
case "currency": {
|
|
124
|
+
const numericValue = new import_decimal.default(value || 0).div(10 ** unit).toNumber();
|
|
125
|
+
const unitValue = numericValue.toLocaleString("en-US", {
|
|
126
|
+
minimumFractionDigits: decimals,
|
|
127
|
+
maximumFractionDigits: decimals
|
|
128
|
+
});
|
|
129
|
+
const unitLabel = unit === 0 ? "" : unit === 4 ? "万" : unit === 8 ? "亿" : "";
|
|
130
|
+
return `${prefix}${unitValue}${unitLabel}${suffix}`;
|
|
131
|
+
}
|
|
132
|
+
case "normal":
|
|
133
|
+
default:
|
|
134
|
+
return (value == null ? void 0 : value.toString()) || "-";
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
138
|
+
0 && (module.exports = {
|
|
139
|
+
formatNumber,
|
|
140
|
+
formatValue,
|
|
141
|
+
sqlFormat
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/business/YkCharts/utils.ts"],
|
|
4
|
+
"sourcesContent": ["import Decimal from 'decimal.js';\nimport type { Format, SqlFormat } from './typing';\n\nexport const formatValue = (value: string | number, format: Format | undefined | null): string => {\n if (value === null || value === undefined || value === '-') {\n return '-';\n }\n if (!format || format === null) {\n return value.toString();\n }\n const numValue = Number(value);\n if (format === 'percent') {\n return new Decimal(numValue).mul(100).toFixed(2) + '%';\n }\n if (format === 'decimal') {\n return new Decimal(numValue).toFixed(2);\n }\n if (format === 'integer') {\n return new Intl.NumberFormat().format(numValue);\n }\n return numValue.toString();\n};\n\nexport function formatNumber(num: number | string, isInteger: boolean = false): [string, string] {\n const numberValue = typeof num === 'string' ? parseFloat(num) : num;\n if (isNaN(numberValue)) {\n return [num?.toString() || '', ''];\n }\n let result: string = '';\n let unit: string = '';\n function setFixed(v: number, dot: number) {\n const multiplier = 10 ** dot;\n return Math.floor(v * multiplier) / multiplier;\n }\n if (numberValue < 1000) {\n result = new Decimal(numberValue).toFixed(1);\n } else if (numberValue < 10000) {\n result = numberValue.toLocaleString('en-US', {\n minimumFractionDigits: isInteger ? 0 : 1,\n maximumFractionDigits: isInteger ? 0 : 1,\n });\n } else if (numberValue < 100000000) {\n const v = setFixed(numberValue / 10000, 2);\n result = v.toLocaleString('en-US', {\n minimumFractionDigits: isInteger ? 1 : 2,\n maximumFractionDigits: isInteger ? 1 : 2,\n });\n unit = ' 万';\n } else {\n const v = setFixed(numberValue / 100000000, 2);\n result = v.toLocaleString('en-US', {\n minimumFractionDigits: isInteger ? 1 : 2,\n maximumFractionDigits: isInteger ? 1 : 2,\n });\n unit = ' 亿';\n }\n if (isInteger) {\n result = result.replace(/\\.0+(?=\\D*$)/, '');\n }\n return [result, unit];\n}\n\nexport function sqlFormat(value: string | number | boolean, format: SqlFormat | undefined | null): string {\n if (value === null || value === undefined || value === '-') {\n return '-';\n }\n if (!format) {\n return value?.toString();\n }\n if (typeof value === 'boolean') {\n return value?.toString();\n }\n const { type, decimals = 0, thousand_separator = true, unit = 0, prefix = '', suffix = '' } = format;\n switch (type) {\n case 'number': {\n let result: string;\n if (thousand_separator) {\n result = value\n ? value?.toLocaleString('en-US', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n })\n : '0';\n } else {\n result = new Decimal(value || 0).toFixed(decimals);\n }\n return `${prefix}${result}${suffix}`;\n }\n case 'percent': {\n const result = new Decimal(value || 0).mul(100).toFixed(decimals) + '%';\n return `${prefix}${result}${suffix}`;\n }\n case 'currency': {\n const numericValue = new Decimal(value || 0).div(10 ** unit).toNumber();\n const unitValue = numericValue.toLocaleString('en-US', {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n const unitLabel = unit === 0 ? '' : unit === 4 ? '万' : unit === 8 ? '亿' : '';\n return `${prefix}${unitValue}${unitLabel}${suffix}`;\n }\n case 'normal':\n default:\n return value?.toString() || '-';\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Decimal"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@primaryColor: #3b86f9;
|
|
2
|
+
@iconPrimaryColor: #0a6bfd;
|
|
3
|
+
@fontPrimaryColor: #0a6bfd;
|
|
4
|
+
@borderPrimaryColor: #b0cffe;
|
|
5
|
+
@globalBgColor: #edeff4;
|
|
6
|
+
|
|
7
|
+
@ykFontFamilySemibold: 'PingFangSC-Semibold', 'PingFang SC', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial,
|
|
8
|
+
sans-serif;
|
|
9
|
+
@ykFontFamilyRegular: 'PingFangSC-Regular', 'PingFang SC', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial,
|
|
10
|
+
sans-serif;
|
|
11
|
+
@ykFontFamilyMedium: 'PingFangSC-Medium', 'PingFang SC', 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial,
|
|
12
|
+
sans-serif;
|
|
13
|
+
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/components/YKMarkdown/index.tsx
|
|
30
|
+
var YKMarkdown_exports = {};
|
|
31
|
+
__export(YKMarkdown_exports, {
|
|
32
|
+
default: () => YKMarkdown_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(YKMarkdown_exports);
|
|
35
|
+
var import_react_markdown_preview = __toESM(require("@uiw/react-markdown-preview"));
|
|
36
|
+
var import_react = __toESM(require("react"));
|
|
37
|
+
var import_index_module = __toESM(require("./index.module.less"));
|
|
38
|
+
var YKMarkdown = ({ markdown, showToc = false }) => {
|
|
39
|
+
const contentRef = (0, import_react.useRef)(null);
|
|
40
|
+
const [headings, setHeadings] = (0, import_react.useState)([]);
|
|
41
|
+
(0, import_react.useEffect)(() => {
|
|
42
|
+
if (!showToc) {
|
|
43
|
+
setHeadings([]);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (!contentRef.current)
|
|
47
|
+
return;
|
|
48
|
+
const headingElements = contentRef.current.querySelectorAll("h1, h2, h3, h4, h5, h6");
|
|
49
|
+
const headingList = Array.from(headingElements).map((el) => ({
|
|
50
|
+
id: el.id,
|
|
51
|
+
text: el.textContent || "",
|
|
52
|
+
level: parseInt(el.tagName.charAt(1), 10)
|
|
53
|
+
}));
|
|
54
|
+
setHeadings(headingList);
|
|
55
|
+
}, [markdown, showToc]);
|
|
56
|
+
const handleScrollTo = (0, import_react.useCallback)((id) => {
|
|
57
|
+
const element = document.getElementById(id);
|
|
58
|
+
if (element) {
|
|
59
|
+
element.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
60
|
+
}
|
|
61
|
+
}, []);
|
|
62
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.container }, showToc && headings.length > 0 && /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.toc }, /* @__PURE__ */ import_react.default.createElement("h3", null, "目录"), /* @__PURE__ */ import_react.default.createElement("ul", { style: { paddingLeft: "16px", fontSize: "12px", color: "#666" } }, headings.map((heading) => /* @__PURE__ */ import_react.default.createElement(
|
|
63
|
+
"li",
|
|
64
|
+
{
|
|
65
|
+
key: heading.id,
|
|
66
|
+
style: {
|
|
67
|
+
marginLeft: `${(heading.level - 1) * 12}px`,
|
|
68
|
+
listStyle: "none",
|
|
69
|
+
marginBottom: "8px"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
/* @__PURE__ */ import_react.default.createElement(
|
|
73
|
+
"a",
|
|
74
|
+
{
|
|
75
|
+
href: `#${heading.id}`,
|
|
76
|
+
onClick: (e) => {
|
|
77
|
+
e.preventDefault();
|
|
78
|
+
handleScrollTo(heading.id);
|
|
79
|
+
},
|
|
80
|
+
style: { color: "#000", textDecoration: "none" }
|
|
81
|
+
},
|
|
82
|
+
heading.text
|
|
83
|
+
)
|
|
84
|
+
)))), /* @__PURE__ */ import_react.default.createElement("div", { ref: contentRef, className: import_index_module.default.content }, /* @__PURE__ */ import_react.default.createElement(
|
|
85
|
+
import_react_markdown_preview.default,
|
|
86
|
+
{
|
|
87
|
+
source: markdown,
|
|
88
|
+
components: { code: Code, pre: Pre },
|
|
89
|
+
style: { padding: 16 }
|
|
90
|
+
}
|
|
91
|
+
)), showToc && headings.length > 0 && /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.spacer }));
|
|
92
|
+
};
|
|
93
|
+
var MermaidCode = ({ code, className }) => {
|
|
94
|
+
const demoid = (0, import_react.useMemo)(() => `dome${parseInt(String(Math.random() * 1e15), 10).toString(36)}`, []);
|
|
95
|
+
const [container, setContainer] = (0, import_react.useState)(null);
|
|
96
|
+
const [mermaidInstance, setMermaidInstance] = (0, import_react.useState)(null);
|
|
97
|
+
const isMermaid = className && /^language-mermaid/.test(className.toLocaleLowerCase());
|
|
98
|
+
(0, import_react.useEffect)(() => {
|
|
99
|
+
if (isMermaid && !mermaidInstance) {
|
|
100
|
+
import("mermaid").then((mod) => {
|
|
101
|
+
setMermaidInstance(mod.default || mod);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}, [isMermaid, mermaidInstance]);
|
|
105
|
+
const reRender = (0, import_react.useCallback)(async () => {
|
|
106
|
+
if (container && isMermaid && mermaidInstance) {
|
|
107
|
+
try {
|
|
108
|
+
const str = await mermaidInstance.render(demoid, code);
|
|
109
|
+
container.innerHTML = str.svg;
|
|
110
|
+
} catch (error) {
|
|
111
|
+
container.innerHTML = String(error);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}, [container, isMermaid, code, demoid, mermaidInstance]);
|
|
115
|
+
(0, import_react.useEffect)(() => {
|
|
116
|
+
reRender();
|
|
117
|
+
}, [reRender]);
|
|
118
|
+
const refElement = (0, import_react.useCallback)((node) => {
|
|
119
|
+
if (node !== null) {
|
|
120
|
+
setContainer(node);
|
|
121
|
+
}
|
|
122
|
+
}, []);
|
|
123
|
+
if (isMermaid) {
|
|
124
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("code", { id: demoid, style: { display: "none" } }), /* @__PURE__ */ import_react.default.createElement("code", { ref: refElement, "data-name": "mermaid" }));
|
|
125
|
+
}
|
|
126
|
+
return /* @__PURE__ */ import_react.default.createElement("code", null, code);
|
|
127
|
+
};
|
|
128
|
+
var getCodeString = (children) => {
|
|
129
|
+
let result = "";
|
|
130
|
+
const traverse = (nodes) => {
|
|
131
|
+
for (const node of nodes) {
|
|
132
|
+
if (typeof node === "object" && node !== null && "type" in node) {
|
|
133
|
+
const n = node;
|
|
134
|
+
if (n.type === "text" && n.value) {
|
|
135
|
+
result += n.value;
|
|
136
|
+
} else if (n.children) {
|
|
137
|
+
traverse(n.children);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
traverse(children);
|
|
143
|
+
return result;
|
|
144
|
+
};
|
|
145
|
+
var Code = ({ inline, children, className, node, ...props }) => {
|
|
146
|
+
if (inline) {
|
|
147
|
+
return /* @__PURE__ */ import_react.default.createElement("code", { ...props }, children);
|
|
148
|
+
}
|
|
149
|
+
const code = (node == null ? void 0 : node.children) ? getCodeString(node.children) : Array.isArray(children) ? String(children[0] || "") : String(children || "");
|
|
150
|
+
return /* @__PURE__ */ import_react.default.createElement(MermaidCode, { code, className });
|
|
151
|
+
};
|
|
152
|
+
var Pre = ({ children, node, ...props }) => {
|
|
153
|
+
let codeStr = "";
|
|
154
|
+
let mermaidCode = "";
|
|
155
|
+
let mermaidClassName = "";
|
|
156
|
+
import_react.default.Children.forEach(children, (child) => {
|
|
157
|
+
var _a, _b;
|
|
158
|
+
if (import_react.default.isValidElement(child)) {
|
|
159
|
+
const childProps = child.props;
|
|
160
|
+
if (childProps == null ? void 0 : childProps.node) {
|
|
161
|
+
codeStr = getCodeString(childProps.node.children);
|
|
162
|
+
}
|
|
163
|
+
if ((_b = (_a = childProps == null ? void 0 : childProps.className) == null ? void 0 : _a.includes) == null ? void 0 : _b.call(_a, "language-mermaid")) {
|
|
164
|
+
mermaidCode = codeStr;
|
|
165
|
+
mermaidClassName = childProps.className || "";
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
if (!codeStr && (node == null ? void 0 : node.children)) {
|
|
170
|
+
codeStr = getCodeString(node.children);
|
|
171
|
+
}
|
|
172
|
+
const renderContent = (child) => {
|
|
173
|
+
var _a, _b, _c, _d;
|
|
174
|
+
if (import_react.default.isValidElement(child)) {
|
|
175
|
+
const childElement = child;
|
|
176
|
+
if ((_c = (_b = (_a = childElement.props) == null ? void 0 : _a.className) == null ? void 0 : _b.includes) == null ? void 0 : _c.call(_b, "language-mermaid")) {
|
|
177
|
+
return /* @__PURE__ */ import_react.default.createElement(MermaidCode, { code: mermaidCode, className: mermaidClassName });
|
|
178
|
+
}
|
|
179
|
+
return import_react.default.cloneElement(childElement, {
|
|
180
|
+
children: import_react.default.Children.map((_d = childElement.props) == null ? void 0 : _d.children, renderContent)
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return child;
|
|
184
|
+
};
|
|
185
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.codeBlock }, /* @__PURE__ */ import_react.default.createElement("pre", { ...props }, import_react.default.Children.map(children, renderContent)));
|
|
186
|
+
};
|
|
187
|
+
var YKMarkdown_default = YKMarkdown;
|
|
188
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/YKMarkdown/index.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Markdown 渲染器组件\n */\n\nimport MarkdownPreview from '@uiw/react-markdown-preview';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport styles from './index.module.less';\n\ninterface HeadingItem {\n id: string;\n text: string;\n level: number;\n}\n\nexport interface YKMarkdownProps {\n markdown: string;\n showToc?: boolean;\n language?: string;\n}\n\nconst YKMarkdown: React.FC<YKMarkdownProps> = ({ markdown, showToc = false }) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [headings, setHeadings] = useState<HeadingItem[]>([]);\n\n useEffect(() => {\n if (!showToc) {\n setHeadings([]);\n return;\n }\n if (!contentRef.current) return;\n\n const headingElements = contentRef.current.querySelectorAll('h1, h2, h3, h4, h5, h6');\n const headingList: HeadingItem[] = Array.from(headingElements).map((el: HTMLElement) => ({\n id: el.id,\n text: el.textContent || '',\n level: parseInt(el.tagName.charAt(1), 10),\n }));\n\n setHeadings(headingList);\n }, [markdown, showToc]);\n\n const handleScrollTo = useCallback((id: string) => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n }, []);\n\n return (\n <div className={styles.container}>\n {showToc && headings.length > 0 && (\n <div className={styles.toc}>\n <h3>目录</h3>\n <ul style={{ paddingLeft: '16px', fontSize: '12px', color: '#666' }}>\n {headings.map((heading) => (\n <li\n key={heading.id}\n style={{\n marginLeft: `${(heading.level - 1) * 12}px`,\n listStyle: 'none',\n marginBottom: '8px',\n }}\n >\n <a\n href={`#${heading.id}`}\n onClick={(e) => {\n e.preventDefault();\n handleScrollTo(heading.id);\n }}\n style={{ color: '#000', textDecoration: 'none' }}\n >\n {heading.text}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )}\n\n <div ref={contentRef} className={styles.content}>\n <MarkdownPreview\n source={markdown}\n components={{ code: Code as React.ComponentType, pre: Pre as React.ComponentType }}\n style={{ padding: 16 }}\n />\n </div>\n\n {showToc && headings.length > 0 && <div className={styles.spacer} />}\n </div>\n );\n};\n\ninterface MermaidInstance {\n render: (id: string, code: string) => Promise<{ svg: string }>;\n}\n\nconst MermaidCode: React.FC<{ code: string; className?: string }> = ({ code, className }) => {\n const demoid = useMemo(() => `dome${parseInt(String(Math.random() * 1e15), 10).toString(36)}`, []);\n const [container, setContainer] = useState<HTMLElement | null>(null);\n const [mermaidInstance, setMermaidInstance] = useState<MermaidInstance | null>(null);\n const isMermaid = className && /^language-mermaid/.test(className.toLocaleLowerCase());\n\n useEffect(() => {\n if (isMermaid && !mermaidInstance) {\n import('mermaid').then((mod) => {\n // @ts-expect-error mermaid module type\n setMermaidInstance(mod.default || mod);\n });\n }\n }, [isMermaid, mermaidInstance]);\n\n const reRender = useCallback(async () => {\n if (container && isMermaid && mermaidInstance) {\n try {\n const str = await mermaidInstance.render(demoid, code);\n container.innerHTML = str.svg;\n } catch (error) {\n container.innerHTML = String(error);\n }\n }\n }, [container, isMermaid, code, demoid, mermaidInstance]);\n\n useEffect(() => {\n reRender();\n }, [reRender]);\n\n const refElement = useCallback((node: HTMLElement | null) => {\n if (node !== null) {\n setContainer(node);\n }\n }, []);\n\n if (isMermaid) {\n return (\n <>\n <code id={demoid} style={{ display: 'none' }} />\n <code ref={refElement} data-name='mermaid' />\n </>\n );\n }\n return <code>{code}</code>;\n};\n\ninterface CodeProps {\n inline?: boolean;\n children?: React.ReactNode;\n className?: string;\n node?: { children?: unknown[] };\n [key: string]: unknown;\n}\n\nconst getCodeString = (children: unknown[]): string => {\n let result = '';\n const traverse = (nodes: unknown[]) => {\n for (const node of nodes) {\n if (typeof node === 'object' && node !== null && 'type' in node) {\n const n = node as { type: string; children?: unknown[]; value?: string };\n if (n.type === 'text' && n.value) {\n result += n.value;\n } else if (n.children) {\n traverse(n.children);\n }\n }\n }\n };\n traverse(children);\n return result;\n};\n\nconst Code: React.FC<CodeProps> = ({ inline, children, className, node, ...props }) => {\n if (inline) {\n return <code {...props}>{children}</code>;\n }\n const code = node?.children\n ? getCodeString(node.children as unknown[])\n : Array.isArray(children)\n ? String(children[0] || '')\n : String(children || '');\n return <MermaidCode code={code} className={className} />;\n};\n\ninterface PreProps {\n children?: React.ReactNode;\n node?: { children?: unknown[] };\n [key: string]: unknown;\n}\n\nconst Pre: React.FC<PreProps> = ({ children, node, ...props }) => {\n let codeStr = '';\n let mermaidCode = '';\n let mermaidClassName = '';\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n const childProps = child.props as CodeProps;\n if (childProps?.node) {\n codeStr = getCodeString(childProps.node.children as unknown[]);\n }\n if (childProps?.className?.includes?.('language-mermaid')) {\n mermaidCode = codeStr;\n mermaidClassName = childProps.className || '';\n }\n }\n });\n if (!codeStr && node?.children) {\n codeStr = getCodeString(node.children as unknown[]);\n }\n\n const renderContent = (child: React.ReactNode): React.ReactNode => {\n if (React.isValidElement(child)) {\n const childElement = child as React.ReactElement<{ children?: React.ReactNode; className?: string }>;\n if (childElement.props?.className?.includes?.('language-mermaid')) {\n return <MermaidCode code={mermaidCode} className={mermaidClassName} />;\n }\n return React.cloneElement(childElement, {\n children: React.Children.map(childElement.props?.children, renderContent),\n });\n }\n return child;\n };\n\n return (\n <div className={styles.codeBlock}>\n <pre {...props}>{React.Children.map(children, renderContent)}</pre>\n </div>\n );\n};\n\nexport default YKMarkdown;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,oCAA4B;AAC5B,mBAAyE;AACzE,0BAAmB;AAcnB,IAAM,aAAwC,CAAC,EAAE,UAAU,UAAU,MAAM,MAAM;AAC/E,QAAM,iBAAa,qBAAuB,IAAI;AAC9C,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAwB,CAAC,CAAC;AAE1D,8BAAU,MAAM;AACd,QAAI,CAAC,SAAS;AACZ,kBAAY,CAAC,CAAC;AACd;AAAA,IACF;AACA,QAAI,CAAC,WAAW;AAAS;AAEzB,UAAM,kBAAkB,WAAW,QAAQ,iBAAiB,wBAAwB;AACpF,UAAM,cAA6B,MAAM,KAAK,eAAe,EAAE,IAAI,CAAC,QAAqB;AAAA,MACvF,IAAI,GAAG;AAAA,MACP,MAAM,GAAG,eAAe;AAAA,MACxB,OAAO,SAAS,GAAG,QAAQ,OAAO,CAAC,GAAG,EAAE;AAAA,IAC1C,EAAE;AAEF,gBAAY,WAAW;AAAA,EACzB,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,QAAM,qBAAiB,0BAAY,CAAC,OAAe;AACjD,UAAM,UAAU,SAAS,eAAe,EAAE;AAC1C,QAAI,SAAS;AACX,cAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,QAAQ,CAAC;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,6BAAAA,QAAA,cAAC,SAAI,WAAW,oBAAAC,QAAO,aACpB,WAAW,SAAS,SAAS,KAC5B,6BAAAD,QAAA,cAAC,SAAI,WAAW,oBAAAC,QAAO,OACrB,6BAAAD,QAAA,cAAC,YAAG,IAAE,GACN,6BAAAA,QAAA,cAAC,QAAG,OAAO,EAAE,aAAa,QAAQ,UAAU,QAAQ,OAAO,OAAO,KAC/D,SAAS,IAAI,CAAC,YACb,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,QAAQ;AAAA,MACb,OAAO;AAAA,QACL,YAAY,IAAI,QAAQ,QAAQ,KAAK;AAAA,QACrC,WAAW;AAAA,QACX,cAAc;AAAA,MAChB;AAAA;AAAA,IAEA,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,IAAI,QAAQ;AAAA,QAClB,SAAS,CAAC,MAAM;AACd,YAAE,eAAe;AACjB,yBAAe,QAAQ,EAAE;AAAA,QAC3B;AAAA,QACA,OAAO,EAAE,OAAO,QAAQ,gBAAgB,OAAO;AAAA;AAAA,MAE9C,QAAQ;AAAA,IACX;AAAA,EACF,CACD,CACH,CACF,GAGF,6BAAAA,QAAA,cAAC,SAAI,KAAK,YAAY,WAAW,oBAAAC,QAAO,WACtC,6BAAAD,QAAA;AAAA,IAAC,8BAAAE;AAAA,IAAA;AAAA,MACC,QAAQ;AAAA,MACR,YAAY,EAAE,MAAM,MAA6B,KAAK,IAA2B;AAAA,MACjF,OAAO,EAAE,SAAS,GAAG;AAAA;AAAA,EACvB,CACF,GAEC,WAAW,SAAS,SAAS,KAAK,6BAAAF,QAAA,cAAC,SAAI,WAAW,oBAAAC,QAAO,QAAQ,CACpE;AAEJ;AAMA,IAAM,cAA8D,CAAC,EAAE,MAAM,UAAU,MAAM;AAC3F,QAAM,aAAS,sBAAQ,MAAM,OAAO,SAAS,OAAO,KAAK,OAAO,IAAI,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACjG,QAAM,CAAC,WAAW,YAAY,QAAI,uBAA6B,IAAI;AACnE,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,uBAAiC,IAAI;AACnF,QAAM,YAAY,aAAa,oBAAoB,KAAK,UAAU,kBAAkB,CAAC;AAErF,8BAAU,MAAM;AACd,QAAI,aAAa,CAAC,iBAAiB;AACjC,aAAO,SAAS,EAAE,KAAK,CAAC,QAAQ;AAE9B,2BAAmB,IAAI,WAAW,GAAG;AAAA,MACvC,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,eAAe,CAAC;AAE/B,QAAM,eAAW,0BAAY,YAAY;AACvC,QAAI,aAAa,aAAa,iBAAiB;AAC7C,UAAI;AACF,cAAM,MAAM,MAAM,gBAAgB,OAAO,QAAQ,IAAI;AACrD,kBAAU,YAAY,IAAI;AAAA,MAC5B,SAAS,OAAP;AACA,kBAAU,YAAY,OAAO,KAAK;AAAA,MACpC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,WAAW,MAAM,QAAQ,eAAe,CAAC;AAExD,8BAAU,MAAM;AACd,aAAS;AAAA,EACX,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,iBAAa,0BAAY,CAAC,SAA6B;AAC3D,QAAI,SAAS,MAAM;AACjB,mBAAa,IAAI;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,MAAI,WAAW;AACb,WACE,6BAAAD,QAAA,2BAAAA,QAAA,gBACE,6BAAAA,QAAA,cAAC,UAAK,IAAI,QAAQ,OAAO,EAAE,SAAS,OAAO,GAAG,GAC9C,6BAAAA,QAAA,cAAC,UAAK,KAAK,YAAY,aAAU,WAAU,CAC7C;AAAA,EAEJ;AACA,SAAO,6BAAAA,QAAA,cAAC,cAAM,IAAK;AACrB;AAUA,IAAM,gBAAgB,CAAC,aAAgC;AACrD,MAAI,SAAS;AACb,QAAM,WAAW,CAAC,UAAqB;AACrC,eAAW,QAAQ,OAAO;AACxB,UAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,UAAU,MAAM;AAC/D,cAAM,IAAI;AACV,YAAI,EAAE,SAAS,UAAU,EAAE,OAAO;AAChC,oBAAU,EAAE;AAAA,QACd,WAAW,EAAE,UAAU;AACrB,mBAAS,EAAE,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,WAAS,QAAQ;AACjB,SAAO;AACT;AAEA,IAAM,OAA4B,CAAC,EAAE,QAAQ,UAAU,WAAW,MAAM,GAAG,MAAM,MAAM;AACrF,MAAI,QAAQ;AACV,WAAO,6BAAAA,QAAA,cAAC,UAAM,GAAG,SAAQ,QAAS;AAAA,EACpC;AACA,QAAM,QAAO,6BAAM,YACf,cAAc,KAAK,QAAqB,IACxC,MAAM,QAAQ,QAAQ,IACpB,OAAO,SAAS,CAAC,KAAK,EAAE,IACxB,OAAO,YAAY,EAAE;AAC3B,SAAO,6BAAAA,QAAA,cAAC,eAAY,MAAY,WAAsB;AACxD;AAQA,IAAM,MAA0B,CAAC,EAAE,UAAU,MAAM,GAAG,MAAM,MAAM;AAChE,MAAI,UAAU;AACd,MAAI,cAAc;AAClB,MAAI,mBAAmB;AACvB,eAAAA,QAAM,SAAS,QAAQ,UAAU,CAAC,UAAU;AA/L9C;AAgMI,QAAI,aAAAA,QAAM,eAAe,KAAK,GAAG;AAC/B,YAAM,aAAa,MAAM;AACzB,UAAI,yCAAY,MAAM;AACpB,kBAAU,cAAc,WAAW,KAAK,QAAqB;AAAA,MAC/D;AACA,WAAI,oDAAY,cAAZ,mBAAuB,aAAvB,4BAAkC,qBAAqB;AACzD,sBAAc;AACd,2BAAmB,WAAW,aAAa;AAAA,MAC7C;AAAA,IACF;AAAA,EACF,CAAC;AACD,MAAI,CAAC,YAAW,6BAAM,WAAU;AAC9B,cAAU,cAAc,KAAK,QAAqB;AAAA,EACpD;AAEA,QAAM,gBAAgB,CAAC,UAA4C;AA/MrE;AAgNI,QAAI,aAAAA,QAAM,eAAe,KAAK,GAAG;AAC/B,YAAM,eAAe;AACrB,WAAI,8BAAa,UAAb,mBAAoB,cAApB,mBAA+B,aAA/B,4BAA0C,qBAAqB;AACjE,eAAO,6BAAAA,QAAA,cAAC,eAAY,MAAM,aAAa,WAAW,kBAAkB;AAAA,MACtE;AACA,aAAO,aAAAA,QAAM,aAAa,cAAc;AAAA,QACtC,UAAU,aAAAA,QAAM,SAAS,KAAI,kBAAa,UAAb,mBAAoB,UAAU,aAAa;AAAA,MAC1E,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAEA,SACE,6BAAAA,QAAA,cAAC,SAAI,WAAW,oBAAAC,QAAO,aACrB,6BAAAD,QAAA,cAAC,SAAK,GAAG,SAAQ,aAAAA,QAAM,SAAS,IAAI,UAAU,aAAa,CAAE,CAC/D;AAEJ;AAEA,IAAO,qBAAQ;",
|
|
6
|
+
"names": ["React", "styles", "MarkdownPreview"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
.container {
|
|
2
|
+
display: flex;
|
|
3
|
+
gap: 24px;
|
|
4
|
+
position: relative;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.toc {
|
|
8
|
+
width: 220px;
|
|
9
|
+
flex-shrink: 0;
|
|
10
|
+
position: sticky;
|
|
11
|
+
top: 80px;
|
|
12
|
+
max-height: calc(100vh - 96px);
|
|
13
|
+
overflow-y: auto;
|
|
14
|
+
z-index: 10;
|
|
15
|
+
background-color: #fff;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.content {
|
|
19
|
+
flex: 1;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.codeBlock {
|
|
24
|
+
position: relative;
|
|
25
|
+
|
|
26
|
+
.copyBtn {
|
|
27
|
+
position: absolute;
|
|
28
|
+
top: 8px;
|
|
29
|
+
right: 8px;
|
|
30
|
+
padding: 4px 8px;
|
|
31
|
+
background: rgba(255, 255, 255, 0.1);
|
|
32
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
33
|
+
border-radius: 4px;
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
color: #999;
|
|
36
|
+
font-size: 12px;
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
transition: all 0.2s;
|
|
41
|
+
z-index: 10;
|
|
42
|
+
opacity: 0;
|
|
43
|
+
|
|
44
|
+
&:hover {
|
|
45
|
+
background: rgba(255, 255, 255, 0.2);
|
|
46
|
+
color: #fff;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&.success {
|
|
50
|
+
color: #52c41a;
|
|
51
|
+
border-color: #52c41a;
|
|
52
|
+
opacity: 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.codeBlock:hover .copyBtn {
|
|
58
|
+
opacity: 1;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.spacer {
|
|
62
|
+
width: 220px;
|
|
63
|
+
flex-shrink: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@media (max-width: 1024px) {
|
|
67
|
+
.container {
|
|
68
|
+
flex-direction: column;
|
|
69
|
+
gap: 16px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.toc {
|
|
73
|
+
width: 100%;
|
|
74
|
+
position: static;
|
|
75
|
+
max-height: none;
|
|
76
|
+
border-bottom: 1px solid #eee;
|
|
77
|
+
padding-bottom: 16px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.spacer {
|
|
81
|
+
display: none;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -36,7 +36,7 @@ import * as YkDateRangePickerStories from './index.stories';
|
|
|
36
36
|
|
|
37
37
|
```tsx
|
|
38
38
|
import { useState, useRef } from 'react';
|
|
39
|
-
import { YkDateRangePicker, type DateRangeValue, type YkDateRangePickerRef } from '@yoka/ui';
|
|
39
|
+
import { YkDateRangePicker, type DateRangeValue, type YkDateRangePickerRef } from '@yoka-ui/ui';
|
|
40
40
|
import dayjs from 'dayjs';
|
|
41
41
|
|
|
42
42
|
function App() {
|
|
@@ -138,10 +138,10 @@ onChange={(val) => {
|
|
|
138
138
|
|
|
139
139
|
## ⚠️ 注意事项
|
|
140
140
|
|
|
141
|
-
1. **样式引入**:业务侧使用 `@yoka/ui` 时,需确保引入 Ant Design 全局样式和组件库样式:
|
|
141
|
+
1. **样式引入**:业务侧使用 `@yoka-ui/ui` 时,需确保引入 Ant Design 全局样式和组件库样式:
|
|
142
142
|
```tsx
|
|
143
143
|
import 'antd/dist/reset.css';
|
|
144
|
-
import '@yoka/ui/dist/index.less';
|
|
144
|
+
import '@yoka-ui/ui/dist/index.less';
|
|
145
145
|
```
|
|
146
146
|
|
|
147
147
|
2. **版本要求**:需要 React 18+ 和 Ant Design 5+,与库的版本保持一致。
|
|
@@ -14,7 +14,7 @@ export type GlassSegmentedRadioProps = Omit<React.ComponentPropsWithoutRef<'div'
|
|
|
14
14
|
* 毛玻璃分段单选:滑块随选中项平移,每一档对应独立渐变配色(银/金/铂等);容器在 `html[data-theme="light"]` 下为浅色毛玻璃。
|
|
15
15
|
* 请为分组设置 `aria-label` 或 `aria-labelledby` 以便读屏识别。
|
|
16
16
|
*/
|
|
17
|
-
export declare const GlassSegmentedRadio: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "
|
|
17
|
+
export declare const GlassSegmentedRadio: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "children" | "role" | "onChange"> & {
|
|
18
18
|
options: GlassSegmentOption[];
|
|
19
19
|
value: string;
|
|
20
20
|
onChange: (value: string) => void;
|