@yoka-ui/ui 1.0.5 → 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 (157) hide show
  1. package/@Docs-yoka/exports.generated.md +6 -9
  2. package/README.md +39 -12
  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/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  50. package/dist/es/business/YkLoginModule/SmsLoginForm.js +178 -0
  51. package/dist/es/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  52. package/dist/es/business/YkLoginModule/index.d.ts +48 -0
  53. package/dist/es/business/YkLoginModule/index.js +198 -0
  54. package/dist/es/business/YkLoginModule/index.js.map +7 -0
  55. package/dist/es/business/YkLoginModule/styles.module.less +169 -0
  56. package/dist/es/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  57. package/dist/es/business/YkSqlEdit/index.d.ts +20 -0
  58. package/dist/es/business/YkSqlEdit/index.js +180 -0
  59. package/dist/es/business/YkSqlEdit/index.js.map +7 -0
  60. package/dist/es/business/YkSqlEdit/sql-language.d.ts +11 -0
  61. package/dist/es/business/YkSqlEdit/sql-language.js +1460 -0
  62. package/dist/es/business/YkSqlEdit/sql-language.js.map +7 -0
  63. package/dist/es/components/YKMarkdown/index.d.ts +11 -0
  64. package/dist/es/components/YKMarkdown/index.js +236 -0
  65. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  66. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  67. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  68. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +1 -1
  69. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  70. package/dist/es/creative/SkillsWriter/index.js +191 -0
  71. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  72. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  73. package/dist/es/index.d.ts +4 -2
  74. package/dist/es/index.js +80 -76
  75. package/dist/es/index.js.map +2 -2
  76. package/dist/es/index.less +8 -1
  77. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  78. package/dist/es/utils/ykStorybookDoc.js +24 -2
  79. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  80. package/dist/lib/assets/image/skills.zip +0 -0
  81. package/dist/lib/business/Empty/index.js.map +1 -1
  82. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  83. package/dist/lib/business/YkCharts/Area.js +346 -0
  84. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  85. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  86. package/dist/lib/business/YkCharts/Bar.js +323 -0
  87. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  88. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  89. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  90. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  91. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  92. package/dist/lib/business/YkCharts/BarTotal.js +295 -0
  93. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  94. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  95. package/dist/lib/business/YkCharts/Line.js +349 -0
  96. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  97. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  98. package/dist/lib/business/YkCharts/Pie.js +117 -0
  99. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  100. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  101. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  102. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  103. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  104. package/dist/lib/business/YkCharts/Pies.js +337 -0
  105. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  106. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  107. package/dist/lib/business/YkCharts/constants.js +71 -0
  108. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  109. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  110. package/dist/lib/business/YkCharts/hooks.js +62 -0
  111. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  112. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  113. package/dist/lib/business/YkCharts/index.js +61 -0
  114. package/dist/lib/business/YkCharts/index.js.map +7 -0
  115. package/dist/lib/business/YkCharts/index.module.less +164 -0
  116. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  117. package/dist/lib/business/YkCharts/transformData.js +40 -0
  118. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  119. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  120. package/dist/lib/business/YkCharts/typing.js +18 -0
  121. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  122. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  123. package/dist/lib/business/YkCharts/utils.js +143 -0
  124. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  125. package/dist/lib/business/YkCharts/variables.less +13 -0
  126. package/dist/lib/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  127. package/dist/lib/business/YkLoginModule/SmsLoginForm.js +171 -0
  128. package/dist/lib/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  129. package/dist/lib/business/YkLoginModule/index.d.ts +48 -0
  130. package/dist/lib/business/YkLoginModule/index.js +206 -0
  131. package/dist/lib/business/YkLoginModule/index.js.map +7 -0
  132. package/dist/lib/business/YkLoginModule/styles.module.less +169 -0
  133. package/dist/lib/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  134. package/dist/lib/business/YkSqlEdit/index.d.ts +20 -0
  135. package/dist/lib/business/YkSqlEdit/index.js +202 -0
  136. package/dist/lib/business/YkSqlEdit/index.js.map +7 -0
  137. package/dist/lib/business/YkSqlEdit/sql-language.d.ts +11 -0
  138. package/dist/lib/business/YkSqlEdit/sql-language.js +1493 -0
  139. package/dist/lib/business/YkSqlEdit/sql-language.js.map +7 -0
  140. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  141. package/dist/lib/components/YKMarkdown/index.js +188 -0
  142. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  143. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  144. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +3 -3
  145. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +1 -1
  146. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  147. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  148. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  149. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  150. package/dist/lib/index.d.ts +4 -2
  151. package/dist/lib/index.js +6 -0
  152. package/dist/lib/index.js.map +2 -2
  153. package/dist/lib/index.less +8 -1
  154. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  155. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  156. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  157. package/package.json +16 -2
@@ -0,0 +1,191 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+
22
+ // src/creative/SkillsWriter/index.tsx
23
+ import { CloudDownloadOutlined, FolderOpenOutlined } from "@ant-design/icons";
24
+ import { Button, Card, Checkbox, message, Space, Typography } from "antd";
25
+ import JSZip from "jszip";
26
+ import React, { useState } from "react";
27
+ import styles from "./index.module.less";
28
+ var { Text, Title } = Typography;
29
+ var { Group: CheckboxGroup } = Checkbox;
30
+ var skillsOptions = [
31
+ {
32
+ id: "traue",
33
+ path: ".trae/skills/",
34
+ label: "Traue",
35
+ description: "Traue IDE 的 skills 插件目录"
36
+ },
37
+ {
38
+ id: "cursor",
39
+ path: ".cursor/skills/",
40
+ label: "Cursor",
41
+ description: "Cursor IDE 的 skills 插件目录"
42
+ },
43
+ {
44
+ id: "codebuddy",
45
+ path: ".codebuddy/skills/",
46
+ label: "CodeBuddy",
47
+ description: "CodeBuddy 的 skills 插件目录"
48
+ },
49
+ {
50
+ id: "claudeCode",
51
+ path: ".claude/skills/",
52
+ label: "Claude Code",
53
+ description: "Claude Code 的 skills 插件目录"
54
+ },
55
+ {
56
+ id: "qwenCode",
57
+ path: ".qwen/skills/",
58
+ label: "Qwen Code",
59
+ description: "Qwen Code 的 skills 插件目录"
60
+ },
61
+ {
62
+ id: "openAICodex",
63
+ path: ".codex/skills/",
64
+ label: "OpenAI Codex",
65
+ description: "OpenAI Codex 的 skills 插件目录"
66
+ },
67
+ {
68
+ id: "standard",
69
+ path: ".skills/",
70
+ label: "标准目录",
71
+ description: "标准 skills 配置目录"
72
+ }
73
+ ];
74
+ var SkillsWriter = () => {
75
+ const [selectedIds, setSelectedIds] = useState([]);
76
+ const [loading, setLoading] = useState(false);
77
+ const isSupported = typeof window !== "undefined" && "showDirectoryPicker" in window;
78
+ const handleCheckboxChange = (checkedIds) => {
79
+ setSelectedIds(checkedIds);
80
+ };
81
+ const selectedSkills = skillsOptions.filter((opt) => selectedIds.includes(opt.id));
82
+ const createDirectoryHandle = (baseHandle, pathParts) => __async(void 0, null, function* () {
83
+ let currentHandle = baseHandle;
84
+ for (const part of pathParts) {
85
+ try {
86
+ currentHandle = yield currentHandle.getDirectoryHandle(part, { create: true });
87
+ } catch (e) {
88
+ currentHandle = yield currentHandle.getDirectoryHandle(part);
89
+ }
90
+ }
91
+ return currentHandle;
92
+ });
93
+ const writeFile = (handle, filePath, content) => __async(void 0, null, function* () {
94
+ const pathParts = filePath.split("/").filter((p) => p);
95
+ const fileName = pathParts.pop();
96
+ const dirHandle = yield createDirectoryHandle(handle, pathParts);
97
+ const fileHandle = yield dirHandle.getFileHandle(fileName, { create: true });
98
+ const writable = yield fileHandle.createWritable();
99
+ yield writable.write(content);
100
+ yield writable.close();
101
+ });
102
+ const downloadAndExtractSkills = () => __async(void 0, null, function* () {
103
+ if (selectedSkills.length === 0) {
104
+ message.error("请至少选择一个工具");
105
+ return;
106
+ }
107
+ if (!("showDirectoryPicker" in window)) {
108
+ message.error("当前浏览器不支持目录选择器");
109
+ return;
110
+ }
111
+ try {
112
+ const handle = yield window.showDirectoryPicker();
113
+ setLoading(true);
114
+ const response = yield fetch("/skills.zip");
115
+ if (!response.ok) {
116
+ throw new Error("下载失败,请稍后重试");
117
+ }
118
+ const blob = yield response.blob();
119
+ const zip = yield JSZip.loadAsync(blob);
120
+ const selectedPaths = selectedSkills.map((s) => s.path);
121
+ const skillsFolderEntry = Object.entries(zip.files).find(
122
+ ([path]) => path === "yoka-ui" || path.startsWith("yoka-ui/")
123
+ );
124
+ if (!skillsFolderEntry) {
125
+ throw new Error("压缩包中未找到 yoka-ui 目录");
126
+ }
127
+ let totalCount = 0;
128
+ for (const selectedPath of selectedPaths) {
129
+ const normalizedPath = selectedPath.replace(/^\//, "").replace(/\/$/, "");
130
+ const pathParts = normalizedPath.split("/");
131
+ let currentHandle = handle;
132
+ for (const part of pathParts) {
133
+ try {
134
+ currentHandle = yield currentHandle.getDirectoryHandle(part, { create: true });
135
+ } catch (e) {
136
+ currentHandle = yield currentHandle.getDirectoryHandle(part);
137
+ }
138
+ }
139
+ let skillsHandle;
140
+ try {
141
+ skillsHandle = yield currentHandle.getDirectoryHandle("yoka-ui", { create: true });
142
+ } catch (e) {
143
+ skillsHandle = yield currentHandle.getDirectoryHandle("yoka-ui");
144
+ }
145
+ for (const [filePath, zipEntry] of Object.entries(zip.files)) {
146
+ if (filePath.startsWith("yoka-ui/")) {
147
+ const relativePath = filePath.replace("yoka-ui/", "");
148
+ if (!zipEntry.dir && relativePath) {
149
+ const content = yield zipEntry.async("uint8array");
150
+ yield writeFile(skillsHandle, relativePath, content);
151
+ totalCount++;
152
+ }
153
+ }
154
+ }
155
+ }
156
+ message.success(`成功添加 ${totalCount} 个文件到项目`);
157
+ } catch (err) {
158
+ if (err instanceof Error && err.name === "AbortError") {
159
+ } else {
160
+ console.error("添加到项目失败:", err);
161
+ message.error(err instanceof Error ? err.message : "添加到项目失败");
162
+ }
163
+ } finally {
164
+ setLoading(false);
165
+ }
166
+ });
167
+ return /* @__PURE__ */ React.createElement("div", { className: styles.skillsWriter }, /* @__PURE__ */ React.createElement(Card, { className: styles.card }, /* @__PURE__ */ React.createElement("div", { className: styles.header }, /* @__PURE__ */ React.createElement(CloudDownloadOutlined, { style: { fontSize: 20, color: "#1890ff" } }), /* @__PURE__ */ React.createElement(Title, { level: 5, style: { margin: 0, fontSize: 20, fontWeight: 600 } }, "Skills 同步工具")), /* @__PURE__ */ React.createElement(Text, { type: "secondary", style: { display: "block", marginBottom: 16 } }, "将 YokaUI Skills 同步到本地 IDE 的插件目录中"), /* @__PURE__ */ React.createElement(
168
+ CheckboxGroup,
169
+ {
170
+ value: selectedIds,
171
+ onChange: (values) => handleCheckboxChange(values),
172
+ style: { display: "flex", flexDirection: "column", gap: 8 }
173
+ },
174
+ skillsOptions.map((option) => /* @__PURE__ */ React.createElement(Checkbox, { key: option.id, value: option.id, style: { alignItems: "flex-start" } }, /* @__PURE__ */ React.createElement("div", { style: { display: "flex", flexDirection: "column" } }, /* @__PURE__ */ React.createElement(Space, null, /* @__PURE__ */ React.createElement(Text, { strong: true }, option.label), /* @__PURE__ */ React.createElement(Text, { type: "secondary", style: { fontSize: 12 } }, "(", option.path, ")")), /* @__PURE__ */ React.createElement(Text, { type: "secondary", style: { fontSize: 12, marginTop: 2 } }, option.description))))
175
+ ), /* @__PURE__ */ React.createElement("div", { className: styles.actions }, /* @__PURE__ */ React.createElement(Space, { direction: "vertical", style: { width: "100%" } }, /* @__PURE__ */ React.createElement(Space, null, /* @__PURE__ */ React.createElement(
176
+ Button,
177
+ {
178
+ type: "primary",
179
+ icon: /* @__PURE__ */ React.createElement(FolderOpenOutlined, null),
180
+ onClick: downloadAndExtractSkills,
181
+ loading,
182
+ disabled: selectedSkills.length === 0 || !isSupported
183
+ },
184
+ "同步到本地"
185
+ ), !isSupported && /* @__PURE__ */ React.createElement(Text, { type: "warning", style: { fontSize: 12 } }, "需要 HTTPS 或 localhost 环境,请手动下载")), /* @__PURE__ */ React.createElement(Space, null, /* @__PURE__ */ React.createElement(Button, { icon: /* @__PURE__ */ React.createElement(CloudDownloadOutlined, null), href: "/skills.zip", download: true }, "手动下载 skills.zip"), /* @__PURE__ */ React.createElement(Text, { type: "secondary", style: { fontSize: 12 } }, "解压到对应工具的 skills 目录"))))));
186
+ };
187
+ var SkillsWriter_default = SkillsWriter;
188
+ export {
189
+ SkillsWriter_default as default
190
+ };
191
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/creative/SkillsWriter/index.tsx"],
4
+ "sourcesContent": ["import { CloudDownloadOutlined, FolderOpenOutlined } from '@ant-design/icons';\nimport { Button, Card, Checkbox, message, Space, Typography } from 'antd';\nimport JSZip from 'jszip';\nimport React, { useState } from 'react';\nimport styles from './index.module.less';\n\nconst { Text, Title } = Typography;\nconst { Group: CheckboxGroup } = Checkbox;\n\n// 确认支持 skills 的工具及其路径\nconst skillsOptions = [\n {\n id: 'traue',\n path: '.trae/skills/',\n label: 'Traue',\n description: 'Traue IDE 的 skills 插件目录',\n },\n {\n id: 'cursor',\n path: '.cursor/skills/',\n label: 'Cursor',\n description: 'Cursor IDE 的 skills 插件目录',\n },\n {\n id: 'codebuddy',\n path: '.codebuddy/skills/',\n label: 'CodeBuddy',\n description: 'CodeBuddy 的 skills 插件目录',\n },\n {\n id: 'claudeCode',\n path: '.claude/skills/',\n label: 'Claude Code',\n description: 'Claude Code 的 skills 插件目录',\n },\n {\n id: 'qwenCode',\n path: '.qwen/skills/',\n label: 'Qwen Code',\n description: 'Qwen Code 的 skills 插件目录',\n },\n {\n id: 'openAICodex',\n path: '.codex/skills/',\n label: 'OpenAI Codex',\n description: 'OpenAI Codex 的 skills 插件目录',\n },\n {\n id: 'standard',\n path: '.skills/',\n label: '标准目录',\n description: '标准 skills 配置目录',\n },\n];\n\nconst SkillsWriter: React.FC = () => {\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n const [loading, setLoading] = useState(false);\n\n const isSupported = typeof window !== 'undefined' && 'showDirectoryPicker' in window;\n\n const handleCheckboxChange = (checkedIds: string[]) => {\n setSelectedIds(checkedIds);\n };\n\n const selectedSkills = skillsOptions.filter((opt) => selectedIds.includes(opt.id));\n\n // 递归创建目录\n const createDirectoryHandle = async (baseHandle: FileSystemDirectoryHandle, pathParts: string[]) => {\n let currentHandle = baseHandle;\n for (const part of pathParts) {\n try {\n currentHandle = await currentHandle.getDirectoryHandle(part, { create: true });\n } catch {\n currentHandle = await currentHandle.getDirectoryHandle(part);\n }\n }\n return currentHandle;\n };\n\n // 递归写入文件\n const writeFile = async (handle: FileSystemDirectoryHandle, filePath: string, content: Uint8Array) => {\n const pathParts = filePath.split('/').filter((p) => p);\n const fileName = pathParts.pop()!;\n const dirHandle = await createDirectoryHandle(handle, pathParts);\n const fileHandle = await dirHandle.getFileHandle(fileName, { create: true });\n const writable = await fileHandle.createWritable();\n await writable.write(content as BufferSource);\n await writable.close();\n };\n\n // 下载并解压 skills.zip\n const downloadAndExtractSkills = async () => {\n if (selectedSkills.length === 0) {\n message.error('请至少选择一个工具');\n return;\n }\n\n // 检查是否支持目录选择器\n if (!('showDirectoryPicker' in window)) {\n message.error('当前浏览器不支持目录选择器');\n return;\n }\n\n try {\n // 1. 先让用户选择目录\n const handle = await (window as Window & { showDirectoryPicker?: () => Promise<FileSystemDirectoryHandle> })\n .showDirectoryPicker!();\n\n // 2. 用户选择目录后开始处理\n setLoading(true);\n\n // 3. 下载 skills.zip\n const response = await fetch('/skills.zip');\n if (!response.ok) {\n throw new Error('下载失败,请稍后重试');\n }\n const blob = await response.blob();\n\n // 4. 解压 zip 文件,把 skills/yoka-ui 文件夹写入到用户选择的路径下\n const zip = await JSZip.loadAsync(blob);\n\n // 获取用户选择的路径列表\n const selectedPaths = selectedSkills.map((s) => s.path);\n\n // 找到 zip 中的 yoka-ui 文件夹\n const skillsFolderEntry = Object.entries(zip.files).find(\n ([path]) => path === 'yoka-ui' || path.startsWith('yoka-ui/'),\n );\n\n if (!skillsFolderEntry) {\n throw new Error('压缩包中未找到 yoka-ui 目录');\n }\n\n // 对每个用户选择的路径,创建 yoka-ui 文件夹并写入内容\n let totalCount = 0;\n\n for (const selectedPath of selectedPaths) {\n // 在用户选择的路径下创建 yoka-ui 文件夹\n const normalizedPath = selectedPath.replace(/^\\//, '').replace(/\\/$/, '');\n const pathParts = normalizedPath.split('/');\n\n let currentHandle = handle;\n for (const part of pathParts) {\n try {\n currentHandle = await currentHandle.getDirectoryHandle(part, { create: true });\n } catch {\n currentHandle = await currentHandle.getDirectoryHandle(part);\n }\n }\n\n // 创建 yoka-ui 文件夹\n let skillsHandle: FileSystemDirectoryHandle;\n try {\n skillsHandle = await currentHandle.getDirectoryHandle('yoka-ui', { create: true });\n } catch {\n skillsHandle = await currentHandle.getDirectoryHandle('yoka-ui');\n }\n\n // 遍历 zip 中 yoka-ui 文件夹下的所有文件\n for (const [filePath, zipEntry] of Object.entries(zip.files)) {\n if (filePath.startsWith('yoka-ui/')) {\n const relativePath = filePath.replace('yoka-ui/', '');\n\n if (!zipEntry.dir && relativePath) {\n // 写入文件\n const content = await zipEntry.async('uint8array');\n await writeFile(skillsHandle, relativePath, content);\n totalCount++;\n }\n }\n }\n }\n\n message.success(`成功添加 ${totalCount} 个文件到项目`);\n } catch (err: unknown) {\n if (err instanceof Error && err.name === 'AbortError') {\n // 用户取消选择,不显示任何消息\n } else {\n console.error('添加到项目失败:', err);\n message.error(err instanceof Error ? err.message : '添加到项目失败');\n }\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className={styles.skillsWriter}>\n <Card className={styles.card}>\n <div className={styles.header}>\n <CloudDownloadOutlined style={{ fontSize: 20, color: '#1890ff' }} />\n <Title level={5} style={{ margin: 0, fontSize: 20, fontWeight: 600 }}>\n Skills 同步工具\n </Title>\n </div>\n\n <Text type='secondary' style={{ display: 'block', marginBottom: 16 }}>\n 将 YokaUI Skills 同步到本地 IDE 的插件目录中\n </Text>\n\n <CheckboxGroup\n value={selectedIds}\n onChange={(values) => handleCheckboxChange(values as string[])}\n style={{ display: 'flex', flexDirection: 'column', gap: 8 }}\n >\n {skillsOptions.map((option) => (\n <Checkbox key={option.id} value={option.id} style={{ alignItems: 'flex-start' }}>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Space>\n <Text strong>{option.label}</Text>\n <Text type='secondary' style={{ fontSize: 12 }}>\n ({option.path})\n </Text>\n </Space>\n <Text type='secondary' style={{ fontSize: 12, marginTop: 2 }}>\n {option.description}\n </Text>\n </div>\n </Checkbox>\n ))}\n </CheckboxGroup>\n\n <div className={styles.actions}>\n <Space direction='vertical' style={{ width: '100%' }}>\n <Space>\n <Button\n type='primary'\n icon={<FolderOpenOutlined />}\n onClick={downloadAndExtractSkills}\n loading={loading}\n disabled={selectedSkills.length === 0 || !isSupported}\n >\n 同步到本地\n </Button>\n {!isSupported && (\n <Text type='warning' style={{ fontSize: 12 }}>\n 需要 HTTPS 或 localhost 环境,请手动下载\n </Text>\n )}\n </Space>\n <Space>\n <Button icon={<CloudDownloadOutlined />} href='/skills.zip' download>\n 手动下载 skills.zip\n </Button>\n <Text type='secondary' style={{ fontSize: 12 }}>\n 解压到对应工具的 skills 目录\n </Text>\n </Space>\n </Space>\n </div>\n </Card>\n </div>\n );\n};\n\nexport default SkillsWriter;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,uBAAuB,0BAA0B;AAC1D,SAAS,QAAQ,MAAM,UAAU,SAAS,OAAO,kBAAkB;AACnE,OAAO,WAAW;AAClB,OAAO,SAAS,gBAAgB;AAChC,OAAO,YAAY;AAEnB,IAAM,EAAE,MAAM,MAAM,IAAI;AACxB,IAAM,EAAE,OAAO,cAAc,IAAI;AAGjC,IAAM,gBAAgB;AAAA,EACpB;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AACF;AAEA,IAAM,eAAyB,MAAM;AACnC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAmB,CAAC,CAAC;AAC3D,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,cAAc,OAAO,WAAW,eAAe,yBAAyB;AAE9E,QAAM,uBAAuB,CAAC,eAAyB;AACrD,mBAAe,UAAU;AAAA,EAC3B;AAEA,QAAM,iBAAiB,cAAc,OAAO,CAAC,QAAQ,YAAY,SAAS,IAAI,EAAE,CAAC;AAGjF,QAAM,wBAAwB,CAAO,YAAuC,cAAwB;AAClG,QAAI,gBAAgB;AACpB,eAAW,QAAQ,WAAW;AAC5B,UAAI;AACF,wBAAgB,MAAM,cAAc,mBAAmB,MAAM,EAAE,QAAQ,KAAK,CAAC;AAAA,MAC/E,SAAQ,GAAN;AACA,wBAAgB,MAAM,cAAc,mBAAmB,IAAI;AAAA,MAC7D;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAGA,QAAM,YAAY,CAAO,QAAmC,UAAkB,YAAwB;AACpG,UAAM,YAAY,SAAS,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC;AACrD,UAAM,WAAW,UAAU,IAAI;AAC/B,UAAM,YAAY,MAAM,sBAAsB,QAAQ,SAAS;AAC/D,UAAM,aAAa,MAAM,UAAU,cAAc,UAAU,EAAE,QAAQ,KAAK,CAAC;AAC3E,UAAM,WAAW,MAAM,WAAW,eAAe;AACjD,UAAM,SAAS,MAAM,OAAuB;AAC5C,UAAM,SAAS,MAAM;AAAA,EACvB;AAGA,QAAM,2BAA2B,MAAY;AAC3C,QAAI,eAAe,WAAW,GAAG;AAC/B,cAAQ,MAAM,WAAW;AACzB;AAAA,IACF;AAGA,QAAI,EAAE,yBAAyB,SAAS;AACtC,cAAQ,MAAM,eAAe;AAC7B;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,SAAS,MAAO,OACnB,oBAAqB;AAGxB,iBAAW,IAAI;AAGf,YAAM,WAAW,MAAM,MAAM,aAAa;AAC1C,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,YAAY;AAAA,MAC9B;AACA,YAAM,OAAO,MAAM,SAAS,KAAK;AAGjC,YAAM,MAAM,MAAM,MAAM,UAAU,IAAI;AAGtC,YAAM,gBAAgB,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI;AAGtD,YAAM,oBAAoB,OAAO,QAAQ,IAAI,KAAK,EAAE;AAAA,QAClD,CAAC,CAAC,IAAI,MAAM,SAAS,aAAa,KAAK,WAAW,UAAU;AAAA,MAC9D;AAEA,UAAI,CAAC,mBAAmB;AACtB,cAAM,IAAI,MAAM,oBAAoB;AAAA,MACtC;AAGA,UAAI,aAAa;AAEjB,iBAAW,gBAAgB,eAAe;AAExC,cAAM,iBAAiB,aAAa,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AACxE,cAAM,YAAY,eAAe,MAAM,GAAG;AAE1C,YAAI,gBAAgB;AACpB,mBAAW,QAAQ,WAAW;AAC5B,cAAI;AACF,4BAAgB,MAAM,cAAc,mBAAmB,MAAM,EAAE,QAAQ,KAAK,CAAC;AAAA,UAC/E,SAAQ,GAAN;AACA,4BAAgB,MAAM,cAAc,mBAAmB,IAAI;AAAA,UAC7D;AAAA,QACF;AAGA,YAAI;AACJ,YAAI;AACF,yBAAe,MAAM,cAAc,mBAAmB,WAAW,EAAE,QAAQ,KAAK,CAAC;AAAA,QACnF,SAAQ,GAAN;AACA,yBAAe,MAAM,cAAc,mBAAmB,SAAS;AAAA,QACjE;AAGA,mBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,IAAI,KAAK,GAAG;AAC5D,cAAI,SAAS,WAAW,UAAU,GAAG;AACnC,kBAAM,eAAe,SAAS,QAAQ,YAAY,EAAE;AAEpD,gBAAI,CAAC,SAAS,OAAO,cAAc;AAEjC,oBAAM,UAAU,MAAM,SAAS,MAAM,YAAY;AACjD,oBAAM,UAAU,cAAc,cAAc,OAAO;AACnD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,cAAQ,QAAQ,QAAQ,mBAAmB;AAAA,IAC7C,SAAS,KAAP;AACA,UAAI,eAAe,SAAS,IAAI,SAAS,cAAc;AAAA,MAEvD,OAAO;AACL,gBAAQ,MAAM,YAAY,GAAG;AAC7B,gBAAQ,MAAM,eAAe,QAAQ,IAAI,UAAU,SAAS;AAAA,MAC9D;AAAA,IACF,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE,oCAAC,SAAI,WAAW,OAAO,gBACrB,oCAAC,QAAK,WAAW,OAAO,QACtB,oCAAC,SAAI,WAAW,OAAO,UACrB,oCAAC,yBAAsB,OAAO,EAAE,UAAU,IAAI,OAAO,UAAU,GAAG,GAClE,oCAAC,SAAM,OAAO,GAAG,OAAO,EAAE,QAAQ,GAAG,UAAU,IAAI,YAAY,IAAI,KAAG,aAEtE,CACF,GAEA,oCAAC,QAAK,MAAK,aAAY,OAAO,EAAE,SAAS,SAAS,cAAc,GAAG,KAAG,kCAEtE,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,UAAU,CAAC,WAAW,qBAAqB,MAAkB;AAAA,MAC7D,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAE;AAAA;AAAA,IAEzD,cAAc,IAAI,CAAC,WAClB,oCAAC,YAAS,KAAK,OAAO,IAAI,OAAO,OAAO,IAAI,OAAO,EAAE,YAAY,aAAa,KAC5E,oCAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,SAAS,KACrD,oCAAC,aACC,oCAAC,QAAK,QAAM,QAAE,OAAO,KAAM,GAC3B,oCAAC,QAAK,MAAK,aAAY,OAAO,EAAE,UAAU,GAAG,KAAG,KAC5C,OAAO,MAAK,GAChB,CACF,GACA,oCAAC,QAAK,MAAK,aAAY,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,KACxD,OAAO,WACV,CACF,CACF,CACD;AAAA,EACH,GAEA,oCAAC,SAAI,WAAW,OAAO,WACrB,oCAAC,SAAM,WAAU,YAAW,OAAO,EAAE,OAAO,OAAO,KACjD,oCAAC,aACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAM,oCAAC,wBAAmB;AAAA,MAC1B,SAAS;AAAA,MACT;AAAA,MACA,UAAU,eAAe,WAAW,KAAK,CAAC;AAAA;AAAA,IAC3C;AAAA,EAED,GACC,CAAC,eACA,oCAAC,QAAK,MAAK,WAAU,OAAO,EAAE,UAAU,GAAG,KAAG,+BAE9C,CAEJ,GACA,oCAAC,aACC,oCAAC,UAAO,MAAM,oCAAC,2BAAsB,GAAI,MAAK,eAAc,UAAQ,QAAC,iBAErE,GACA,oCAAC,QAAK,MAAK,aAAY,OAAO,EAAE,UAAU,GAAG,KAAG,oBAEhD,CACF,CACF,CACF,CACF,CACF;AAEJ;AAEA,IAAO,uBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,21 @@
1
+ .skillsWriter {
2
+ margin: 24px 0;
3
+ }
4
+
5
+ .card {
6
+ border-radius: 8px;
7
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
8
+ }
9
+
10
+ .header {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: 8px;
14
+ margin-bottom: 16px;
15
+ }
16
+
17
+ .actions {
18
+ margin-top: 24px;
19
+ padding-top: 16px;
20
+ border-top: 1px solid #f0f0f0;
21
+ }
@@ -4,7 +4,9 @@ export { default as DrawerPageInfo } from './business/DrawerPageInfo';
4
4
  export { default as Editor } from './business/Editor';
5
5
  export { default as Empty } from './business/Empty';
6
6
  export { default as ModCommonFilter } from './business/ModCommonFilter';
7
+ export { default as YkLoginModule } from './business/YkLoginModule';
7
8
  export { default as YkPorjectSelect } from './business/YkPorjectSelect';
9
+ export { default as YkSqlEdit } from './business/YkSqlEdit';
8
10
  export { default as Clock } from './components/Clock';
9
11
  export { default as DebounceInput } from './components/DebounceInput';
10
12
  export { default as MultipleSelect } from './components/MultipleSelect';
@@ -14,7 +16,7 @@ export { default as SearchWithHistory } from './components/SearchWithHistory';
14
16
  export { default as TextWithInput } from './components/TextWithInput';
15
17
  export { default as TextWithToolTip } from './components/TextWithToolTip';
16
18
  export { default as TreeTransfer } from './components/TreeTransfer';
17
- export type { DateRangeValue, YkDateRangePickerProps, YkDateRangePickerRef } from './components/YkDateRangePicker';
19
+ export type { DateRangeValue, YkDateRangePickerProps, YkDateRangePickerRef, } from './components/YkDateRangePicker';
18
20
  export { default as YkDateRangePicker } from './components/YkDateRangePicker';
19
21
  export { default as YkRangeDateWithVS } from './components/YkRangeDateWithVS';
20
22
  export { default as YkRangeTimeWithRecent } from './components/YkRangeTimeWithRecent';
@@ -22,7 +24,7 @@ export type { ArcCheckboxProps } from './creative/ArcCheckbox';
22
24
  export { default as ArcCheckbox } from './creative/ArcCheckbox';
23
25
  export { default as ButtonRadioWithInfo } from './creative/ButtonRadioWithInfo';
24
26
  export { default as ButtonWithProgress } from './creative/ButtonWithProgress';
25
- export type { GlassSegmentedRadioProps, GlassSegmentOption } from './creative/GlassSegmentedRadio';
27
+ export type { GlassSegmentedRadioProps, GlassSegmentOption, } from './creative/GlassSegmentedRadio';
26
28
  export { default as GlassSegmentedRadio } from './creative/GlassSegmentedRadio';
27
29
  export { default as FlexGrid } from './layout/FlexGrid';
28
30
  export { default as YkContainer } from './layout/YkContainer';
package/dist/es/index.js CHANGED
@@ -5,87 +5,91 @@ import { default as default3 } from "./business/DrawerPageInfo";
5
5
  import { default as default4 } from "./business/Editor";
6
6
  import { default as default5 } from "./business/Empty";
7
7
  import { default as default6 } from "./business/ModCommonFilter";
8
- import { default as default7 } from "./business/YkPorjectSelect";
9
- import { default as default8 } from "./components/Clock";
10
- import { default as default9 } from "./components/DebounceInput";
11
- import { default as default10 } from "./components/MultipleSelect";
12
- import { default as default11 } from "./components/NumericInput";
13
- import { default as default12 } from "./components/RefreshButton";
14
- import { default as default13 } from "./components/SearchWithHistory";
15
- import { default as default14 } from "./components/TextWithInput";
16
- import { default as default15 } from "./components/TextWithToolTip";
17
- import { default as default16 } from "./components/TreeTransfer";
18
- import { default as default17 } from "./components/YkDateRangePicker";
19
- import { default as default18 } from "./components/YkRangeDateWithVS";
20
- import { default as default19 } from "./components/YkRangeTimeWithRecent";
21
- import { default as default20 } from "./creative/ArcCheckbox";
22
- import { default as default21 } from "./creative/ButtonRadioWithInfo";
23
- import { default as default22 } from "./creative/ButtonWithProgress";
24
- import { default as default23 } from "./creative/GlassSegmentedRadio";
25
- import { default as default24 } from "./layout/FlexGrid";
26
- import { default as default25 } from "./layout/YkContainer";
27
- import { default as default26 } from "./layout/YkDrawer";
28
- import { default as default27 } from "./Themes/InputTheme";
29
- import { default as default28 } from "./Themes/TableTheme";
30
- import { default as default29 } from "./ui/LabelSelect";
31
- import { default as default30 } from "./ui/LogicOperator";
32
- import { default as default31 } from "./ui/YkButton";
33
- import { default as default32 } from "./ui/YkCard";
34
- import { default as default33 } from "./ui/YkCheckbox";
35
- import { default as default34 } from "./ui/YkDescriptions";
36
- import { default as default35 } from "./ui/YkPagination";
37
- import { default as default36 } from "./ui/YkRadio";
38
- import { default as default37 } from "./ui/YkRadioBtnSpecial";
39
- import { default as default38 } from "./ui/YkSegmented";
40
- import { default as default39 } from "./ui/YkSelect";
41
- import { default as default40 } from "./ui/YkSpin";
42
- import { default as default41 } from "./ui/YkStatistic";
43
- import { default as default42 } from "./ui/YkSwitch";
44
- import { default as default43 } from "./ui/YkTabs";
45
- import { default as default44 } from "./ui/YkTooltip";
8
+ import { default as default7 } from "./business/YkLoginModule";
9
+ import { default as default8 } from "./business/YkPorjectSelect";
10
+ import { default as default9 } from "./business/YkSqlEdit";
11
+ import { default as default10 } from "./components/Clock";
12
+ import { default as default11 } from "./components/DebounceInput";
13
+ import { default as default12 } from "./components/MultipleSelect";
14
+ import { default as default13 } from "./components/NumericInput";
15
+ import { default as default14 } from "./components/RefreshButton";
16
+ import { default as default15 } from "./components/SearchWithHistory";
17
+ import { default as default16 } from "./components/TextWithInput";
18
+ import { default as default17 } from "./components/TextWithToolTip";
19
+ import { default as default18 } from "./components/TreeTransfer";
20
+ import { default as default19 } from "./components/YkDateRangePicker";
21
+ import { default as default20 } from "./components/YkRangeDateWithVS";
22
+ import { default as default21 } from "./components/YkRangeTimeWithRecent";
23
+ import { default as default22 } from "./creative/ArcCheckbox";
24
+ import { default as default23 } from "./creative/ButtonRadioWithInfo";
25
+ import { default as default24 } from "./creative/ButtonWithProgress";
26
+ import { default as default25 } from "./creative/GlassSegmentedRadio";
27
+ import { default as default26 } from "./layout/FlexGrid";
28
+ import { default as default27 } from "./layout/YkContainer";
29
+ import { default as default28 } from "./layout/YkDrawer";
30
+ import { default as default29 } from "./Themes/InputTheme";
31
+ import { default as default30 } from "./Themes/TableTheme";
32
+ import { default as default31 } from "./ui/LabelSelect";
33
+ import { default as default32 } from "./ui/LogicOperator";
34
+ import { default as default33 } from "./ui/YkButton";
35
+ import { default as default34 } from "./ui/YkCard";
36
+ import { default as default35 } from "./ui/YkCheckbox";
37
+ import { default as default36 } from "./ui/YkDescriptions";
38
+ import { default as default37 } from "./ui/YkPagination";
39
+ import { default as default38 } from "./ui/YkRadio";
40
+ import { default as default39 } from "./ui/YkRadioBtnSpecial";
41
+ import { default as default40 } from "./ui/YkSegmented";
42
+ import { default as default41 } from "./ui/YkSelect";
43
+ import { default as default42 } from "./ui/YkSpin";
44
+ import { default as default43 } from "./ui/YkStatistic";
45
+ import { default as default44 } from "./ui/YkSwitch";
46
+ import { default as default45 } from "./ui/YkTabs";
47
+ import { default as default46 } from "./ui/YkTooltip";
46
48
  export {
47
49
  default2 as AiChat,
48
- default20 as ArcCheckbox,
49
- default21 as ButtonRadioWithInfo,
50
- default22 as ButtonWithProgress,
51
- default8 as Clock,
52
- default9 as DebounceInput,
50
+ default22 as ArcCheckbox,
51
+ default23 as ButtonRadioWithInfo,
52
+ default24 as ButtonWithProgress,
53
+ default10 as Clock,
54
+ default11 as DebounceInput,
53
55
  default3 as DrawerPageInfo,
54
56
  default4 as Editor,
55
57
  default5 as Empty,
56
- default24 as FlexGrid,
57
- default23 as GlassSegmentedRadio,
58
- default27 as InputTheme,
59
- default29 as LabelSelect,
60
- default30 as LogicOperator,
58
+ default26 as FlexGrid,
59
+ default25 as GlassSegmentedRadio,
60
+ default29 as InputTheme,
61
+ default31 as LabelSelect,
62
+ default32 as LogicOperator,
61
63
  default6 as ModCommonFilter,
62
- default10 as MultipleSelect,
63
- default11 as NumericInput,
64
- default12 as RefreshButton,
65
- default13 as SearchWithHistory,
66
- default28 as TableTheme,
67
- default14 as TextWithInput,
68
- default15 as TextWithToolTip,
69
- default16 as TreeTransfer,
70
- default31 as YkButton,
71
- default32 as YkCard,
72
- default33 as YkCheckbox,
73
- default25 as YkContainer,
74
- default17 as YkDateRangePicker,
75
- default34 as YkDescriptions,
76
- default26 as YkDrawer,
77
- default35 as YkPagination,
78
- default7 as YkPorjectSelect,
79
- default36 as YkRadio,
80
- default37 as YkRadioBtnSpecial,
81
- default18 as YkRangeDateWithVS,
82
- default19 as YkRangeTimeWithRecent,
83
- default38 as YkSegmented,
84
- default39 as YkSelect,
85
- default40 as YkSpin,
86
- default41 as YkStatistic,
87
- default42 as YkSwitch,
88
- default43 as YkTabs,
89
- default44 as YkTooltip
64
+ default12 as MultipleSelect,
65
+ default13 as NumericInput,
66
+ default14 as RefreshButton,
67
+ default15 as SearchWithHistory,
68
+ default30 as TableTheme,
69
+ default16 as TextWithInput,
70
+ default17 as TextWithToolTip,
71
+ default18 as TreeTransfer,
72
+ default33 as YkButton,
73
+ default34 as YkCard,
74
+ default35 as YkCheckbox,
75
+ default27 as YkContainer,
76
+ default19 as YkDateRangePicker,
77
+ default36 as YkDescriptions,
78
+ default28 as YkDrawer,
79
+ default7 as YkLoginModule,
80
+ default37 as YkPagination,
81
+ default8 as YkPorjectSelect,
82
+ default38 as YkRadio,
83
+ default39 as YkRadioBtnSpecial,
84
+ default20 as YkRangeDateWithVS,
85
+ default21 as YkRangeTimeWithRecent,
86
+ default40 as YkSegmented,
87
+ default41 as YkSelect,
88
+ default42 as YkSpin,
89
+ default9 as YkSqlEdit,
90
+ default43 as YkStatistic,
91
+ default44 as YkSwitch,
92
+ default45 as YkTabs,
93
+ default46 as YkTooltip
90
94
  };
91
95
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.tsx"],
4
- "sourcesContent": ["// Auto-inject Ant Design styles per project_specification_memory #6eafc28d\nimport 'antd/dist/reset.css';\n\n// Export business components\nexport { default as AiChat } from './business/AiChat';\nexport { default as DrawerPageInfo } from './business/DrawerPageInfo';\nexport { default as Editor } from './business/Editor';\nexport { default as Empty } from './business/Empty';\nexport { default as ModCommonFilter } from './business/ModCommonFilter';\nexport { default as YkPorjectSelect } from './business/YkPorjectSelect';\n// Export common components\nexport { default as Clock } from './components/Clock';\nexport { default as DebounceInput } from './components/DebounceInput';\nexport { default as MultipleSelect } from './components/MultipleSelect';\nexport { default as NumericInput } from './components/NumericInput';\nexport { default as RefreshButton } from './components/RefreshButton';\nexport { default as SearchWithHistory } from './components/SearchWithHistory';\nexport { default as TextWithInput } from './components/TextWithInput';\nexport { default as TextWithToolTip } from './components/TextWithToolTip';\nexport { default as TreeTransfer } from './components/TreeTransfer';\nexport type { DateRangeValue, YkDateRangePickerProps, YkDateRangePickerRef } from './components/YkDateRangePicker';\nexport { default as YkDateRangePicker } from './components/YkDateRangePicker';\nexport { default as YkRangeDateWithVS } from './components/YkRangeDateWithVS';\nexport { default as YkRangeTimeWithRecent } from './components/YkRangeTimeWithRecent';\n// Export creative components\nexport type { ArcCheckboxProps } from './creative/ArcCheckbox';\nexport { default as ArcCheckbox } from './creative/ArcCheckbox';\nexport { default as ButtonRadioWithInfo } from './creative/ButtonRadioWithInfo';\nexport { default as ButtonWithProgress } from './creative/ButtonWithProgress';\nexport type { GlassSegmentedRadioProps, GlassSegmentOption } from './creative/GlassSegmentedRadio';\nexport { default as GlassSegmentedRadio } from './creative/GlassSegmentedRadio';\n// Export layout\nexport { default as FlexGrid } from './layout/FlexGrid';\nexport { default as YkContainer } from './layout/YkContainer';\nexport { default as YkDrawer } from './layout/YkDrawer';\n// Export theme components\nexport { default as InputTheme } from './Themes/InputTheme';\nexport { default as TableTheme } from './Themes/TableTheme';\n// Export all UI components\nexport { default as LabelSelect } from './ui/LabelSelect';\nexport { default as LogicOperator } from './ui/LogicOperator';\nexport { default as YkButton } from './ui/YkButton';\nexport { default as YkCard } from './ui/YkCard';\nexport { default as YkCheckbox } from './ui/YkCheckbox';\nexport { default as YkDescriptions } from './ui/YkDescriptions';\nexport { default as YkPagination } from './ui/YkPagination';\nexport { default as YkRadio } from './ui/YkRadio';\nexport { default as YkRadioBtnSpecial } from './ui/YkRadioBtnSpecial';\nexport { default as YkSegmented } from './ui/YkSegmented';\nexport { default as YkSelect } from './ui/YkSelect';\nexport { default as YkSpin } from './ui/YkSpin';\nexport { default as YkStatistic } from './ui/YkStatistic';\nexport { default as YkSwitch } from './ui/YkSwitch';\nexport { default as YkTabs } from './ui/YkTabs';\nexport { default as YkTooltip } from './ui/YkTooltip';\n"],
5
- "mappings": ";AACA,OAAO;AAGP,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAwB;AACjC,SAAoB,WAAXA,gBAAkC;AAC3C,SAAoB,WAAXA,gBAAkC;AAE3C,SAAoB,WAAXA,gBAAwB;AACjC,SAAoB,WAAXA,gBAAgC;AACzC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAA+B;AAExC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAwC;AAGjD,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAAsC;AAC/C,SAAoB,WAAXA,iBAAqC;AAE9C,SAAoB,WAAXA,iBAAsC;AAE/C,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA2B;AAEpC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAA6B;AAEtC,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAA0B;AACnC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAA4B;",
4
+ "sourcesContent": ["// Auto-inject Ant Design styles per project_specification_memory #6eafc28d\nimport 'antd/dist/reset.css';\n\n// Export business components\nexport { default as AiChat } from './business/AiChat';\nexport { default as DrawerPageInfo } from './business/DrawerPageInfo';\nexport { default as Editor } from './business/Editor';\nexport { default as Empty } from './business/Empty';\nexport { default as ModCommonFilter } from './business/ModCommonFilter';\nexport { default as YkLoginModule } from './business/YkLoginModule';\nexport { default as YkPorjectSelect } from './business/YkPorjectSelect';\nexport { default as YkSqlEdit } from './business/YkSqlEdit';\n// Export common components\nexport { default as Clock } from './components/Clock';\nexport { default as DebounceInput } from './components/DebounceInput';\nexport { default as MultipleSelect } from './components/MultipleSelect';\nexport { default as NumericInput } from './components/NumericInput';\nexport { default as RefreshButton } from './components/RefreshButton';\nexport { default as SearchWithHistory } from './components/SearchWithHistory';\nexport { default as TextWithInput } from './components/TextWithInput';\nexport { default as TextWithToolTip } from './components/TextWithToolTip';\nexport { default as TreeTransfer } from './components/TreeTransfer';\nexport type {\n DateRangeValue,\n YkDateRangePickerProps,\n YkDateRangePickerRef,\n} from './components/YkDateRangePicker';\nexport { default as YkDateRangePicker } from './components/YkDateRangePicker';\nexport { default as YkRangeDateWithVS } from './components/YkRangeDateWithVS';\nexport { default as YkRangeTimeWithRecent } from './components/YkRangeTimeWithRecent';\n// Export creative components\nexport type { ArcCheckboxProps } from './creative/ArcCheckbox';\nexport { default as ArcCheckbox } from './creative/ArcCheckbox';\nexport { default as ButtonRadioWithInfo } from './creative/ButtonRadioWithInfo';\nexport { default as ButtonWithProgress } from './creative/ButtonWithProgress';\nexport type {\n GlassSegmentedRadioProps,\n GlassSegmentOption,\n} from './creative/GlassSegmentedRadio';\nexport { default as GlassSegmentedRadio } from './creative/GlassSegmentedRadio';\n// Export layout\nexport { default as FlexGrid } from './layout/FlexGrid';\nexport { default as YkContainer } from './layout/YkContainer';\nexport { default as YkDrawer } from './layout/YkDrawer';\n// Export theme components\nexport { default as InputTheme } from './Themes/InputTheme';\nexport { default as TableTheme } from './Themes/TableTheme';\n// Export all UI components\nexport { default as LabelSelect } from './ui/LabelSelect';\nexport { default as LogicOperator } from './ui/LogicOperator';\nexport { default as YkButton } from './ui/YkButton';\nexport { default as YkCard } from './ui/YkCard';\nexport { default as YkCheckbox } from './ui/YkCheckbox';\nexport { default as YkDescriptions } from './ui/YkDescriptions';\nexport { default as YkPagination } from './ui/YkPagination';\nexport { default as YkRadio } from './ui/YkRadio';\nexport { default as YkRadioBtnSpecial } from './ui/YkRadioBtnSpecial';\nexport { default as YkSegmented } from './ui/YkSegmented';\nexport { default as YkSelect } from './ui/YkSelect';\nexport { default as YkSpin } from './ui/YkSpin';\nexport { default as YkStatistic } from './ui/YkStatistic';\nexport { default as YkSwitch } from './ui/YkSwitch';\nexport { default as YkTabs } from './ui/YkTabs';\nexport { default as YkTooltip } from './ui/YkTooltip';\n"],
5
+ "mappings": ";AACA,OAAO;AAGP,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAwB;AACjC,SAAoB,WAAXA,gBAAkC;AAC3C,SAAoB,WAAXA,gBAAgC;AACzC,SAAoB,WAAXA,gBAAkC;AAC3C,SAAoB,WAAXA,gBAA4B;AAErC,SAAoB,WAAXA,iBAAwB;AACjC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAA+B;AAMxC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAAwC;AAGjD,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAAsC;AAC/C,SAAoB,WAAXA,iBAAqC;AAK9C,SAAoB,WAAXA,iBAAsC;AAE/C,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA2B;AAEpC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAA6B;AAEtC,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAiC;AAC1C,SAAoB,WAAXA,iBAA+B;AACxC,SAAoB,WAAXA,iBAA0B;AACnC,SAAoB,WAAXA,iBAAoC;AAC7C,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA2B;AACpC,SAAoB,WAAXA,iBAAyB;AAClC,SAAoB,WAAXA,iBAA4B;",
6
6
  "names": ["default"]
7
7
  }
@@ -5,7 +5,6 @@
5
5
  */
6
6
 
7
7
  // 自动聚合的样式文件
8
- @import "../../src/Themes/TableTheme/index.less";
9
8
  @import "../../src/assets/less/ant-reset.less";
10
9
  @import "../../src/assets/less/index.less";
11
10
  @import "../../src/assets/less/variables.less";
@@ -14,20 +13,28 @@
14
13
  @import "../../src/business/ModCommonFilter/components/FilterButton/index.module.less";
15
14
  @import "../../src/business/ModCommonFilter/components/PopoverContent/index.module.less";
16
15
  @import "../../src/business/ModCommonFilter/index.module.less";
16
+ @import "../../src/business/YkCharts/index.module.less";
17
+ @import "../../src/business/YkCharts/tooltip.less";
18
+ @import "../../src/business/YkCharts/variables.less";
19
+ @import "../../src/business/YkLoginModule/styles.module.less";
17
20
  @import "../../src/business/YkPorjectSelect/index.module.less";
21
+ @import "../../src/business/YkSqlEdit/code-mirror-custom.module.less";
18
22
  @import "../../src/components/DebounceInput/index.module.less";
19
23
  @import "../../src/components/MultipleSelect/index.module.less";
20
24
  @import "../../src/components/SearchWithHistory/index.module.less";
21
25
  @import "../../src/components/TreeTransfer/components/TreeTransferPanel/index.less";
22
26
  @import "../../src/components/TreeTransfer/index.less";
23
27
  @import "../../src/components/YkDateRangePicker/index.module.less";
28
+ @import "../../src/components/YKMarkdown/index.module.less";
24
29
  @import "../../src/components/YkRangeDateWithVS/index.module.less";
25
30
  @import "../../src/components/YkRangeTimeWithRecent/index.module.less";
26
31
  @import "../../src/creative/ArcCheckbox/index.module.less";
27
32
  @import "../../src/creative/ButtonRadioWithInfo/index.less";
28
33
  @import "../../src/creative/ButtonWithProgress/index.less";
29
34
  @import "../../src/creative/GlassSegmentedRadio/index.module.less";
35
+ @import "../../src/creative/SkillsWriter/index.module.less";
30
36
  @import "../../src/layout/YkDrawer/index.module.less";
37
+ @import "../../src/Themes/TableTheme/index.less";
31
38
  @import "../../src/ui/LogicOperator/index.module.less";
32
39
  @import "../../src/ui/YkCard/index.module.less";
33
40
  @import "../../src/ui/YkCheckbox/index.module.less";
@@ -13,5 +13,20 @@ export type YkStoryDocInput = {
13
13
  * 组件特有备注(交互、API、Story 限制等);环境类说明由函数自动追加。
14
14
  */
15
15
  notes?: string[];
16
+ /**
17
+ * 代码示例数组,每个示例包含标题和代码。
18
+ * 将在文档中以 ```tsx 代码块形式展示。
19
+ */
20
+ examples?: YkStoryDocExample[];
21
+ };
22
+ /** 代码示例类型 */
23
+ export type YkStoryDocExample = {
24
+ /** 示例标题 */
25
+ title?: string;
26
+ /** 代码示例内容(tsx 代码块) */
27
+ code: string;
16
28
  };
29
+ /**
30
+ * 生成完整的 Storybook 文档字符串
31
+ */
17
32
  export declare function ykStoryDoc(input: YkStoryDocInput): string;
@@ -1,16 +1,38 @@
1
1
  // src/utils/ykStorybookDoc.ts
2
2
  var YK_STORYBOOK_PLATFORM_NOTE = "业务侧使用 `@yoka-ui/ui` 时需保证 React 18、与库一致的 Ant Design 5;入口引入 Ant Design 全局样式(可与库一致使用 `antd/dist/reset.css`),并引入 `@yoka-ui/ui/dist/index.less`(以 README 为准)。";
3
+ function formatExamples(examples) {
4
+ if (!examples || examples.length === 0) {
5
+ return "";
6
+ }
7
+ return examples.map((example) => {
8
+ const title = example.title ? `### ${example.title}
9
+
10
+ ` : "";
11
+ return `${title}\`\`\`tsx
12
+ ${example.code}
13
+ \`\`\``;
14
+ }).join("\n\n");
15
+ }
3
16
  function ykStoryDoc(input) {
4
- var _a;
17
+ var _a, _b;
5
18
  const deps = input.dependencies.length > 0 ? input.dependencies.join("、") : "`react`、`antd`(具体见源码 import)";
6
19
  const extra = ((_a = input.notes) != null ? _a : []).filter(Boolean);
7
20
  const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];
8
- return `**描述**:${input.summary}
21
+ const baseDoc = `**描述**:${input.summary}
9
22
 
10
23
  **依赖**:${deps}
11
24
 
12
25
  **备注**:
13
26
  ${remarks.map((line) => `- ${line}`).join("\n")}`;
27
+ const examplesStr = formatExamples((_b = input.examples) != null ? _b : []);
28
+ if (examplesStr) {
29
+ return `${baseDoc}
30
+
31
+ ## 代码示例
32
+
33
+ ${examplesStr}`;
34
+ }
35
+ return baseDoc;
14
36
  }
15
37
  export {
16
38
  ykStoryDoc
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/utils/ykStorybookDoc.ts"],
4
- "sourcesContent": ["/**\n * Storybook Autodocs 统一文案:**描述** / **依赖** / **备注**。\n * 用于各 `*.stories.tsx` 的 `meta.parameters.docs.description.component`。\n */\nexport type YkStoryDocInput = {\n /** 一句话概括组件用途(建议以句号结尾) */\n summary: string;\n /**\n * 运行时主要依赖:`npm 包(用到的子模块)` 或 `本库 · 模块名`\n */\n dependencies: string[];\n /**\n * 组件特有备注(交互、API、Story 限制等);环境类说明由函数自动追加。\n */\n notes?: string[];\n};\n\nconst YK_STORYBOOK_PLATFORM_NOTE =\n '业务侧使用 `@yoka-ui/ui` 时需保证 React 18、与库一致的 Ant Design 5;入口引入 Ant Design 全局样式(可与库一致使用 `antd/dist/reset.css`),并引入 `@yoka-ui/ui/dist/index.less`(以 README 为准)。';\n\nexport function ykStoryDoc(input: YkStoryDocInput): string {\n const deps = input.dependencies.length > 0 ? input.dependencies.join('、') : '`react`、`antd`(具体见源码 import)';\n\n const extra = (input.notes ?? []).filter(Boolean);\n const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];\n\n return `**描述**:${input.summary}\\n\\n**依赖**:${deps}\\n\\n**备注**:\\n${remarks.map((line) => `- ${line}`).join('\\n')}`;\n}\n"],
5
- "mappings": ";AAiBA,IAAM,6BACJ;AAEK,SAAS,WAAW,OAAgC;AApB3D;AAqBE,QAAM,OAAO,MAAM,aAAa,SAAS,IAAI,MAAM,aAAa,KAAK,GAAG,IAAI;AAE5E,QAAM,UAAS,WAAM,UAAN,YAAe,CAAC,GAAG,OAAO,OAAO;AAChD,QAAM,UAAU,CAAC,GAAG,OAAO,0BAA0B;AAErD,SAAO,UAAU,MAAM;AAAA;AAAA,SAAqB;AAAA;AAAA;AAAA,EAAoB,QAAQ,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,KAAK,IAAI;AAC9G;",
4
+ "sourcesContent": ["/**\n * Storybook Autodocs 统一文案:**描述** / **依赖** / **备注**。\n * 用于各 `*.stories.tsx` 的 `meta.parameters.docs.description.component`。\n */\nexport type YkStoryDocInput = {\n /** 一句话概括组件用途(建议以句号结尾) */\n summary: string;\n /**\n * 运行时主要依赖:`npm 包(用到的子模块)` 或 `本库 · 模块名`\n */\n dependencies: string[];\n /**\n * 组件特有备注(交互、API、Story 限制等);环境类说明由函数自动追加。\n */\n notes?: string[];\n /**\n * 代码示例数组,每个示例包含标题和代码。\n * 将在文档中以 ```tsx 代码块形式展示。\n */\n examples?: YkStoryDocExample[];\n};\n\n/** 代码示例类型 */\nexport type YkStoryDocExample = {\n /** 示例标题 */\n title?: string;\n /** 代码示例内容(tsx 代码块) */\n code: string;\n};\n\nconst YK_STORYBOOK_PLATFORM_NOTE =\n '业务侧使用 `@yoka-ui/ui` 时需保证 React 18、与库一致的 Ant Design 5;入口引入 Ant Design 全局样式(可与库一致使用 `antd/dist/reset.css`),并引入 `@yoka-ui/ui/dist/index.less`(以 README 为准)。';\n\n/**\n * 生成代码示例的 Markdown 格式字符串\n */\nfunction formatExamples(examples: YkStoryDocExample[]): string {\n if (!examples || examples.length === 0) {\n return '';\n }\n\n return examples\n .map((example) => {\n const title = example.title ? `### ${example.title}\\n\\n` : '';\n return `${title}\\`\\`\\`tsx\\n${example.code}\\n\\`\\`\\``;\n })\n .join('\\n\\n');\n}\n\n/**\n * 生成完整的 Storybook 文档字符串\n */\nexport function ykStoryDoc(input: YkStoryDocInput): string {\n const deps = input.dependencies.length > 0 ? input.dependencies.join('、') : '`react`、`antd`(具体见源码 import)';\n\n const extra = (input.notes ?? []).filter(Boolean);\n const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];\n\n const baseDoc = `**描述**:${input.summary}\\n\\n**依赖**:${deps}\\n\\n**备注**:\\n${remarks.map((line) => `- ${line}`).join('\\n')}`;\n\n // 如果有代码示例,添加到文档末尾\n const examplesStr = formatExamples(input.examples ?? []);\n if (examplesStr) {\n return `${baseDoc}\\n\\n## 代码示例\\n\\n${examplesStr}`;\n }\n\n return baseDoc;\n}\n"],
5
+ "mappings": ";AA8BA,IAAM,6BACJ;AAKF,SAAS,eAAe,UAAuC;AAC7D,MAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO,SACJ,IAAI,CAAC,YAAY;AAChB,UAAM,QAAQ,QAAQ,QAAQ,OAAO,QAAQ;AAAA;AAAA,IAAc;AAC3D,WAAO,GAAG;AAAA,EAAmB,QAAQ;AAAA;AAAA,EACvC,CAAC,EACA,KAAK,MAAM;AAChB;AAKO,SAAS,WAAW,OAAgC;AApD3D;AAqDE,QAAM,OAAO,MAAM,aAAa,SAAS,IAAI,MAAM,aAAa,KAAK,GAAG,IAAI;AAE5E,QAAM,UAAS,WAAM,UAAN,YAAe,CAAC,GAAG,OAAO,OAAO;AAChD,QAAM,UAAU,CAAC,GAAG,OAAO,0BAA0B;AAErD,QAAM,UAAU,UAAU,MAAM;AAAA;AAAA,SAAqB;AAAA;AAAA;AAAA,EAAoB,QAAQ,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,KAAK,IAAI;AAGrH,QAAM,cAAc,gBAAe,WAAM,aAAN,YAAkB,CAAC,CAAC;AACvD,MAAI,aAAa;AACf,WAAO,GAAG;AAAA;AAAA;AAAA;AAAA,EAAyB;AAAA,EACrC;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
Binary file
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/business/Empty/index.tsx"],
4
- "sourcesContent": ["import { Empty, Flex } from 'antd';\nimport type { ForwardedRef } from 'react';\nimport React from 'react';\nimport EmptyImg from './empty.png';\n\n/**\n * 空状态占位组件的 Props(ref 由 forwardRef 注入,无需在 props 中声明)\n */\ntype EmptyProps = {\n /** 空状态插图,不传则使用默认 empty.png */\n image?: React.ReactNode | string;\n /** 描述文案或自定义节点,默认「暂无数据」 */\n description?: string | React.ReactNode;\n /** 图片容器样式,会与默认宽高合并 */\n imageStyle?: React.CSSProperties;\n /** 根节点 Flex 的样式 */\n style?: React.CSSProperties;\n};\n\n/** 描述文字统一样式 */\nconst descriptionStyle: React.CSSProperties = {\n color: '#999',\n fontSize: 14,\n height: 20,\n lineHeight: '20px',\n};\n\n/**\n * 空状态占位:居中展示默认图 + 描述,支持自定义图片与文案,支持 ref 透传。\n */\nconst ForwardedEmptyPlaceholder = React.forwardRef(\n ({ image, description, imageStyle = {}, style = {} }: EmptyProps, ref: ForwardedRef<HTMLDivElement>) => {\n return (\n <Flex ref={ref} style={{ padding: '80px 0', ...style }} align=\"center\" justify=\"center\">\n <Empty\n image={image || EmptyImg}\n styles={{\n image: {\n height: 60,\n width: 150,\n display: 'inline-block',\n ...imageStyle,\n },\n }}\n description={\n description == null || description === '' ? (\n <span style={descriptionStyle}>暂无数据</span>\n ) : typeof description === 'string' ? (\n <span style={descriptionStyle}>{description}</span>\n ) : (\n description\n )\n }\n />\n </Flex>\n );\n },\n);\n\nForwardedEmptyPlaceholder.displayName = 'Empty';\n\nexport default ForwardedEmptyPlaceholder;\n"],
4
+ "sourcesContent": ["import { Empty, Flex } from 'antd';\nimport type { ForwardedRef } from 'react';\nimport React from 'react';\nimport EmptyImg from './empty.png';\n\n/**\n * 空状态占位组件的 Props(ref 由 forwardRef 注入,无需在 props 中声明)\n */\ntype EmptyProps = {\n /** 空状态插图,不传则使用默认 empty.png */\n image?: React.ReactNode | string;\n /** 描述文案或自定义节点,默认「暂无数据」 */\n description?: string | React.ReactNode;\n /** 图片容器样式,会与默认宽高合并 */\n imageStyle?: React.CSSProperties;\n /** 根节点 Flex 的样式 */\n style?: React.CSSProperties;\n};\n\n/** 描述文字统一样式 */\nconst descriptionStyle: React.CSSProperties = {\n color: '#999',\n fontSize: 14,\n height: 20,\n lineHeight: '20px',\n};\n\n/**\n * 空状态占位:居中展示默认图 + 描述,支持自定义图片与文案,支持 ref 透传。\n */\nconst ForwardedEmptyPlaceholder = React.forwardRef(\n ({ image, description, imageStyle = {}, style = {} }: EmptyProps, ref: ForwardedRef<HTMLDivElement>) => {\n return (\n <Flex ref={ref} style={{ padding: '80px 0', ...style }} align='center' justify='center'>\n <Empty\n image={image || EmptyImg}\n styles={{\n image: {\n height: 60,\n width: 150,\n display: 'inline-block',\n ...imageStyle,\n },\n }}\n description={\n description == null || description === '' ? (\n <span style={descriptionStyle}>暂无数据</span>\n ) : typeof description === 'string' ? (\n <span style={descriptionStyle}>{description}</span>\n ) : (\n description\n )\n }\n />\n </Flex>\n );\n },\n);\n\nForwardedEmptyPlaceholder.displayName = 'Empty';\n\nexport default ForwardedEmptyPlaceholder;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAE5B,mBAAkB;AAClB,mBAAqB;AAiBrB,IAAM,mBAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AACd;AAKA,IAAM,4BAA4B,aAAAA,QAAM;AAAA,EACtC,CAAC,EAAE,OAAO,aAAa,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAe,QAAsC;AACtG,WACE,6BAAAA,QAAA,cAAC,oBAAK,KAAU,OAAO,EAAE,SAAS,UAAU,GAAG,MAAM,GAAG,OAAM,UAAS,SAAQ,YAC7E,6BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,SAAS,aAAAC;AAAA,QAChB,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,YACT,GAAG;AAAA,UACL;AAAA,QACF;AAAA,QACA,aACE,eAAe,QAAQ,gBAAgB,KACrC,6BAAAD,QAAA,cAAC,UAAK,OAAO,oBAAkB,MAAI,IACjC,OAAO,gBAAgB,WACzB,6BAAAA,QAAA,cAAC,UAAK,OAAO,oBAAmB,WAAY,IAE5C;AAAA;AAAA,IAGN,CACF;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAExC,IAAO,gBAAQ;",
6
6
  "names": ["React", "EmptyImg"]
7
7
  }