@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.
Files changed (123) hide show
  1. package/@Docs-yoka/exports.generated.md +3 -3
  2. package/README.md +6 -6
  3. package/dist/es/assets/image/skills.zip +0 -0
  4. package/dist/es/business/Empty/index.js.map +1 -1
  5. package/dist/es/business/YkCharts/Area.d.ts +18 -0
  6. package/dist/es/business/YkCharts/Area.js +336 -0
  7. package/dist/es/business/YkCharts/Area.js.map +7 -0
  8. package/dist/es/business/YkCharts/Bar.d.ts +21 -0
  9. package/dist/es/business/YkCharts/Bar.js +316 -0
  10. package/dist/es/business/YkCharts/Bar.js.map +7 -0
  11. package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
  12. package/dist/es/business/YkCharts/BarProperty.js +357 -0
  13. package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
  14. package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
  15. package/dist/es/business/YkCharts/BarTotal.js +288 -0
  16. package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
  17. package/dist/es/business/YkCharts/Line.d.ts +21 -0
  18. package/dist/es/business/YkCharts/Line.js +342 -0
  19. package/dist/es/business/YkCharts/Line.js.map +7 -0
  20. package/dist/es/business/YkCharts/Pie.d.ts +19 -0
  21. package/dist/es/business/YkCharts/Pie.js +107 -0
  22. package/dist/es/business/YkCharts/Pie.js.map +7 -0
  23. package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
  24. package/dist/es/business/YkCharts/PieProperty.js +180 -0
  25. package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
  26. package/dist/es/business/YkCharts/Pies.d.ts +26 -0
  27. package/dist/es/business/YkCharts/Pies.js +348 -0
  28. package/dist/es/business/YkCharts/Pies.js.map +7 -0
  29. package/dist/es/business/YkCharts/constants.d.ts +1 -0
  30. package/dist/es/business/YkCharts/constants.js +47 -0
  31. package/dist/es/business/YkCharts/constants.js.map +7 -0
  32. package/dist/es/business/YkCharts/hooks.d.ts +4 -0
  33. package/dist/es/business/YkCharts/hooks.js +37 -0
  34. package/dist/es/business/YkCharts/hooks.js.map +7 -0
  35. package/dist/es/business/YkCharts/index.d.ts +9 -0
  36. package/dist/es/business/YkCharts/index.js +20 -0
  37. package/dist/es/business/YkCharts/index.js.map +7 -0
  38. package/dist/es/business/YkCharts/index.module.less +164 -0
  39. package/dist/es/business/YkCharts/tooltip.less +92 -0
  40. package/dist/es/business/YkCharts/transformData.js +16 -0
  41. package/dist/es/business/YkCharts/transformData.js.map +7 -0
  42. package/dist/es/business/YkCharts/typing.d.ts +74 -0
  43. package/dist/es/business/YkCharts/typing.js +1 -0
  44. package/dist/es/business/YkCharts/typing.js.map +7 -0
  45. package/dist/es/business/YkCharts/utils.d.ts +4 -0
  46. package/dist/es/business/YkCharts/utils.js +109 -0
  47. package/dist/es/business/YkCharts/utils.js.map +7 -0
  48. package/dist/es/business/YkCharts/variables.less +13 -0
  49. package/dist/es/components/YKMarkdown/index.d.ts +11 -0
  50. package/dist/es/components/YKMarkdown/index.js +236 -0
  51. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  52. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  53. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  54. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
  55. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  56. package/dist/es/creative/SkillsWriter/index.js +191 -0
  57. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  58. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  59. package/dist/es/index.less +6 -1
  60. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  61. package/dist/es/utils/ykStorybookDoc.js +24 -2
  62. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  63. package/dist/lib/assets/image/skills.zip +0 -0
  64. package/dist/lib/business/Empty/index.js.map +1 -1
  65. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  66. package/dist/lib/business/YkCharts/Area.js +346 -0
  67. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  68. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  69. package/dist/lib/business/YkCharts/Bar.js +323 -0
  70. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  71. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  72. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  73. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  74. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  75. package/dist/lib/business/YkCharts/BarTotal.js +295 -0
  76. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  77. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  78. package/dist/lib/business/YkCharts/Line.js +349 -0
  79. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  80. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  81. package/dist/lib/business/YkCharts/Pie.js +117 -0
  82. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  83. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  84. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  85. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  86. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  87. package/dist/lib/business/YkCharts/Pies.js +337 -0
  88. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  89. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  90. package/dist/lib/business/YkCharts/constants.js +71 -0
  91. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  92. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  93. package/dist/lib/business/YkCharts/hooks.js +62 -0
  94. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  95. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  96. package/dist/lib/business/YkCharts/index.js +61 -0
  97. package/dist/lib/business/YkCharts/index.js.map +7 -0
  98. package/dist/lib/business/YkCharts/index.module.less +164 -0
  99. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  100. package/dist/lib/business/YkCharts/transformData.js +40 -0
  101. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  102. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  103. package/dist/lib/business/YkCharts/typing.js +18 -0
  104. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  105. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  106. package/dist/lib/business/YkCharts/utils.js +143 -0
  107. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  108. package/dist/lib/business/YkCharts/variables.less +13 -0
  109. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  110. package/dist/lib/components/YKMarkdown/index.js +188 -0
  111. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  112. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  113. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  114. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
  115. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  116. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  117. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  118. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  119. package/dist/lib/index.less +6 -1
  120. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  121. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  122. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  123. 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,11 @@
1
+ /**
2
+ * Markdown 渲染器组件
3
+ */
4
+ import React from 'react';
5
+ export interface YKMarkdownProps {
6
+ markdown: string;
7
+ showToc?: boolean;
8
+ language?: string;
9
+ }
10
+ declare const YKMarkdown: React.FC<YKMarkdownProps>;
11
+ export default YKMarkdown;
@@ -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": "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",
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">, "onChange" | "role" | "children"> & {
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;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const SkillsWriter: React.FC;
3
+ export default SkillsWriter;