@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,200 @@
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/creative/SkillsWriter/index.tsx
30
+ var SkillsWriter_exports = {};
31
+ __export(SkillsWriter_exports, {
32
+ default: () => SkillsWriter_default
33
+ });
34
+ module.exports = __toCommonJS(SkillsWriter_exports);
35
+ var import_icons = require("@ant-design/icons");
36
+ var import_antd = require("antd");
37
+ var import_jszip = __toESM(require("jszip"));
38
+ var import_react = __toESM(require("react"));
39
+ var import_index_module = __toESM(require("./index.module.less"));
40
+ var { Text, Title } = import_antd.Typography;
41
+ var { Group: CheckboxGroup } = import_antd.Checkbox;
42
+ var skillsOptions = [
43
+ {
44
+ id: "traue",
45
+ path: ".trae/skills/",
46
+ label: "Traue",
47
+ description: "Traue IDE 的 skills 插件目录"
48
+ },
49
+ {
50
+ id: "cursor",
51
+ path: ".cursor/skills/",
52
+ label: "Cursor",
53
+ description: "Cursor IDE 的 skills 插件目录"
54
+ },
55
+ {
56
+ id: "codebuddy",
57
+ path: ".codebuddy/skills/",
58
+ label: "CodeBuddy",
59
+ description: "CodeBuddy 的 skills 插件目录"
60
+ },
61
+ {
62
+ id: "claudeCode",
63
+ path: ".claude/skills/",
64
+ label: "Claude Code",
65
+ description: "Claude Code 的 skills 插件目录"
66
+ },
67
+ {
68
+ id: "qwenCode",
69
+ path: ".qwen/skills/",
70
+ label: "Qwen Code",
71
+ description: "Qwen Code 的 skills 插件目录"
72
+ },
73
+ {
74
+ id: "openAICodex",
75
+ path: ".codex/skills/",
76
+ label: "OpenAI Codex",
77
+ description: "OpenAI Codex 的 skills 插件目录"
78
+ },
79
+ {
80
+ id: "standard",
81
+ path: ".skills/",
82
+ label: "标准目录",
83
+ description: "标准 skills 配置目录"
84
+ }
85
+ ];
86
+ var SkillsWriter = () => {
87
+ const [selectedIds, setSelectedIds] = (0, import_react.useState)([]);
88
+ const [loading, setLoading] = (0, import_react.useState)(false);
89
+ const isSupported = typeof window !== "undefined" && "showDirectoryPicker" in window;
90
+ const handleCheckboxChange = (checkedIds) => {
91
+ setSelectedIds(checkedIds);
92
+ };
93
+ const selectedSkills = skillsOptions.filter((opt) => selectedIds.includes(opt.id));
94
+ const createDirectoryHandle = async (baseHandle, pathParts) => {
95
+ let currentHandle = baseHandle;
96
+ for (const part of pathParts) {
97
+ try {
98
+ currentHandle = await currentHandle.getDirectoryHandle(part, { create: true });
99
+ } catch {
100
+ currentHandle = await currentHandle.getDirectoryHandle(part);
101
+ }
102
+ }
103
+ return currentHandle;
104
+ };
105
+ const writeFile = async (handle, filePath, content) => {
106
+ const pathParts = filePath.split("/").filter((p) => p);
107
+ const fileName = pathParts.pop();
108
+ const dirHandle = await createDirectoryHandle(handle, pathParts);
109
+ const fileHandle = await dirHandle.getFileHandle(fileName, { create: true });
110
+ const writable = await fileHandle.createWritable();
111
+ await writable.write(content);
112
+ await writable.close();
113
+ };
114
+ const downloadAndExtractSkills = async () => {
115
+ if (selectedSkills.length === 0) {
116
+ import_antd.message.error("请至少选择一个工具");
117
+ return;
118
+ }
119
+ if (!("showDirectoryPicker" in window)) {
120
+ import_antd.message.error("当前浏览器不支持目录选择器");
121
+ return;
122
+ }
123
+ try {
124
+ const handle = await window.showDirectoryPicker();
125
+ setLoading(true);
126
+ const response = await fetch("/skills.zip");
127
+ if (!response.ok) {
128
+ throw new Error("下载失败,请稍后重试");
129
+ }
130
+ const blob = await response.blob();
131
+ const zip = await import_jszip.default.loadAsync(blob);
132
+ const selectedPaths = selectedSkills.map((s) => s.path);
133
+ const skillsFolderEntry = Object.entries(zip.files).find(
134
+ ([path]) => path === "yoka-ui" || path.startsWith("yoka-ui/")
135
+ );
136
+ if (!skillsFolderEntry) {
137
+ throw new Error("压缩包中未找到 yoka-ui 目录");
138
+ }
139
+ let totalCount = 0;
140
+ for (const selectedPath of selectedPaths) {
141
+ const normalizedPath = selectedPath.replace(/^\//, "").replace(/\/$/, "");
142
+ const pathParts = normalizedPath.split("/");
143
+ let currentHandle = handle;
144
+ for (const part of pathParts) {
145
+ try {
146
+ currentHandle = await currentHandle.getDirectoryHandle(part, { create: true });
147
+ } catch {
148
+ currentHandle = await currentHandle.getDirectoryHandle(part);
149
+ }
150
+ }
151
+ let skillsHandle;
152
+ try {
153
+ skillsHandle = await currentHandle.getDirectoryHandle("yoka-ui", { create: true });
154
+ } catch {
155
+ skillsHandle = await currentHandle.getDirectoryHandle("yoka-ui");
156
+ }
157
+ for (const [filePath, zipEntry] of Object.entries(zip.files)) {
158
+ if (filePath.startsWith("yoka-ui/")) {
159
+ const relativePath = filePath.replace("yoka-ui/", "");
160
+ if (!zipEntry.dir && relativePath) {
161
+ const content = await zipEntry.async("uint8array");
162
+ await writeFile(skillsHandle, relativePath, content);
163
+ totalCount++;
164
+ }
165
+ }
166
+ }
167
+ }
168
+ import_antd.message.success(`成功添加 ${totalCount} 个文件到项目`);
169
+ } catch (err) {
170
+ if (err instanceof Error && err.name === "AbortError") {
171
+ } else {
172
+ console.error("添加到项目失败:", err);
173
+ import_antd.message.error(err instanceof Error ? err.message : "添加到项目失败");
174
+ }
175
+ } finally {
176
+ setLoading(false);
177
+ }
178
+ };
179
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.skillsWriter }, /* @__PURE__ */ import_react.default.createElement(import_antd.Card, { className: import_index_module.default.card }, /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.header }, /* @__PURE__ */ import_react.default.createElement(import_icons.CloudDownloadOutlined, { style: { fontSize: 20, color: "#1890ff" } }), /* @__PURE__ */ import_react.default.createElement(Title, { level: 5, style: { margin: 0, fontSize: 20, fontWeight: 600 } }, "Skills 同步工具")), /* @__PURE__ */ import_react.default.createElement(Text, { type: "secondary", style: { display: "block", marginBottom: 16 } }, "将 YokaUI Skills 同步到本地 IDE 的插件目录中"), /* @__PURE__ */ import_react.default.createElement(
180
+ CheckboxGroup,
181
+ {
182
+ value: selectedIds,
183
+ onChange: (values) => handleCheckboxChange(values),
184
+ style: { display: "flex", flexDirection: "column", gap: 8 }
185
+ },
186
+ skillsOptions.map((option) => /* @__PURE__ */ import_react.default.createElement(import_antd.Checkbox, { key: option.id, value: option.id, style: { alignItems: "flex-start" } }, /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", flexDirection: "column" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(Text, { strong: true }, option.label), /* @__PURE__ */ import_react.default.createElement(Text, { type: "secondary", style: { fontSize: 12 } }, "(", option.path, ")")), /* @__PURE__ */ import_react.default.createElement(Text, { type: "secondary", style: { fontSize: 12, marginTop: 2 } }, option.description))))
187
+ ), /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.actions }, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, { direction: "vertical", style: { width: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(
188
+ import_antd.Button,
189
+ {
190
+ type: "primary",
191
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.FolderOpenOutlined, null),
192
+ onClick: downloadAndExtractSkills,
193
+ loading,
194
+ disabled: selectedSkills.length === 0 || !isSupported
195
+ },
196
+ "同步到本地"
197
+ ), !isSupported && /* @__PURE__ */ import_react.default.createElement(Text, { type: "warning", style: { fontSize: 12 } }, "需要 HTTPS 或 localhost 环境,请手动下载")), /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, /* @__PURE__ */ import_react.default.createElement(import_antd.Button, { icon: /* @__PURE__ */ import_react.default.createElement(import_icons.CloudDownloadOutlined, null), href: "/skills.zip", download: true }, "手动下载 skills.zip"), /* @__PURE__ */ import_react.default.createElement(Text, { type: "secondary", style: { fontSize: 12 } }, "解压到对应工具的 skills 目录"))))));
198
+ };
199
+ var SkillsWriter_default = SkillsWriter;
200
+ //# 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": "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",
6
+ "names": ["JSZip", "React", "styles"]
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/lib/index.js CHANGED
@@ -59,6 +59,7 @@ __export(src_exports, {
59
59
  YkDateRangePicker: () => import_YkDateRangePicker.default,
60
60
  YkDescriptions: () => import_YkDescriptions.default,
61
61
  YkDrawer: () => import_YkDrawer.default,
62
+ YkLoginModule: () => import_YkLoginModule.default,
62
63
  YkPagination: () => import_YkPagination.default,
63
64
  YkPorjectSelect: () => import_YkPorjectSelect.default,
64
65
  YkRadio: () => import_YkRadio.default,
@@ -68,6 +69,7 @@ __export(src_exports, {
68
69
  YkSegmented: () => import_YkSegmented.default,
69
70
  YkSelect: () => import_YkSelect.default,
70
71
  YkSpin: () => import_YkSpin.default,
72
+ YkSqlEdit: () => import_YkSqlEdit.default,
71
73
  YkStatistic: () => import_YkStatistic.default,
72
74
  YkSwitch: () => import_YkSwitch.default,
73
75
  YkTabs: () => import_YkTabs.default,
@@ -80,7 +82,9 @@ var import_DrawerPageInfo = __toESM(require("./business/DrawerPageInfo"));
80
82
  var import_Editor = __toESM(require("./business/Editor"));
81
83
  var import_Empty = __toESM(require("./business/Empty"));
82
84
  var import_ModCommonFilter = __toESM(require("./business/ModCommonFilter"));
85
+ var import_YkLoginModule = __toESM(require("./business/YkLoginModule"));
83
86
  var import_YkPorjectSelect = __toESM(require("./business/YkPorjectSelect"));
87
+ var import_YkSqlEdit = __toESM(require("./business/YkSqlEdit"));
84
88
  var import_Clock = __toESM(require("./components/Clock"));
85
89
  var import_DebounceInput = __toESM(require("./components/DebounceInput"));
86
90
  var import_MultipleSelect = __toESM(require("./components/MultipleSelect"));
@@ -150,6 +154,7 @@ var import_YkTooltip = __toESM(require("./ui/YkTooltip"));
150
154
  YkDateRangePicker,
151
155
  YkDescriptions,
152
156
  YkDrawer,
157
+ YkLoginModule,
153
158
  YkPagination,
154
159
  YkPorjectSelect,
155
160
  YkRadio,
@@ -159,6 +164,7 @@ var import_YkTooltip = __toESM(require("./ui/YkTooltip"));
159
164
  YkSegmented,
160
165
  YkSelect,
161
166
  YkSpin,
167
+ YkSqlEdit,
162
168
  YkStatistic,
163
169
  YkSwitch,
164
170
  YkTabs,
@@ -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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAO;AAGP,oBAAkC;AAClC,4BAA0C;AAC1C,oBAAkC;AAClC,mBAAiC;AACjC,6BAA2C;AAC3C,6BAA2C;AAE3C,mBAAiC;AACjC,2BAAyC;AACzC,4BAA0C;AAC1C,0BAAwC;AACxC,2BAAyC;AACzC,+BAA6C;AAC7C,2BAAyC;AACzC,6BAA2C;AAC3C,0BAAwC;AAExC,+BAA6C;AAC7C,+BAA6C;AAC7C,mCAAiD;AAGjD,yBAAuC;AACvC,iCAA+C;AAC/C,gCAA8C;AAE9C,iCAA+C;AAE/C,sBAAoC;AACpC,yBAAuC;AACvC,sBAAoC;AAEpC,wBAAsC;AACtC,wBAAsC;AAEtC,yBAAuC;AACvC,2BAAyC;AACzC,sBAAoC;AACpC,oBAAkC;AAClC,wBAAsC;AACtC,4BAA0C;AAC1C,0BAAwC;AACxC,qBAAmC;AACnC,+BAA6C;AAC7C,yBAAuC;AACvC,sBAAoC;AACpC,oBAAkC;AAClC,yBAAuC;AACvC,sBAAoC;AACpC,oBAAkC;AAClC,uBAAqC;",
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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAO;AAGP,oBAAkC;AAClC,4BAA0C;AAC1C,oBAAkC;AAClC,mBAAiC;AACjC,6BAA2C;AAC3C,2BAAyC;AACzC,6BAA2C;AAC3C,uBAAqC;AAErC,mBAAiC;AACjC,2BAAyC;AACzC,4BAA0C;AAC1C,0BAAwC;AACxC,2BAAyC;AACzC,+BAA6C;AAC7C,2BAAyC;AACzC,6BAA2C;AAC3C,0BAAwC;AAMxC,+BAA6C;AAC7C,+BAA6C;AAC7C,mCAAiD;AAGjD,yBAAuC;AACvC,iCAA+C;AAC/C,gCAA8C;AAK9C,iCAA+C;AAE/C,sBAAoC;AACpC,yBAAuC;AACvC,sBAAoC;AAEpC,wBAAsC;AACtC,wBAAsC;AAEtC,yBAAuC;AACvC,2BAAyC;AACzC,sBAAoC;AACpC,oBAAkC;AAClC,wBAAsC;AACtC,4BAA0C;AAC1C,0BAAwC;AACxC,qBAAmC;AACnC,+BAA6C;AAC7C,yBAAuC;AACvC,sBAAoC;AACpC,oBAAkC;AAClC,yBAAuC;AACvC,sBAAoC;AACpC,oBAAkC;AAClC,uBAAqC;",
6
6
  "names": []
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;
@@ -23,16 +23,38 @@ __export(ykStorybookDoc_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(ykStorybookDoc_exports);
25
25
  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 为准)。";
26
+ function formatExamples(examples) {
27
+ if (!examples || examples.length === 0) {
28
+ return "";
29
+ }
30
+ return examples.map((example) => {
31
+ const title = example.title ? `### ${example.title}
32
+
33
+ ` : "";
34
+ return `${title}\`\`\`tsx
35
+ ${example.code}
36
+ \`\`\``;
37
+ }).join("\n\n");
38
+ }
26
39
  function ykStoryDoc(input) {
27
40
  const deps = input.dependencies.length > 0 ? input.dependencies.join("、") : "`react`、`antd`(具体见源码 import)";
28
41
  const extra = (input.notes ?? []).filter(Boolean);
29
42
  const remarks = [...extra, YK_STORYBOOK_PLATFORM_NOTE];
30
- return `**描述**:${input.summary}
43
+ const baseDoc = `**描述**:${input.summary}
31
44
 
32
45
  **依赖**:${deps}
33
46
 
34
47
  **备注**:
35
48
  ${remarks.map((line) => `- ${line}`).join("\n")}`;
49
+ const examplesStr = formatExamples(input.examples ?? []);
50
+ if (examplesStr) {
51
+ return `${baseDoc}
52
+
53
+ ## 代码示例
54
+
55
+ ${examplesStr}`;
56
+ }
57
+ return baseDoc;
36
58
  }
37
59
  // Annotate the CommonJS export names for ESM import in node:
38
60
  0 && (module.exports = {
@@ -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": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,IAAM,6BACJ;AAEK,SAAS,WAAW,OAAgC;AACzD,QAAM,OAAO,MAAM,aAAa,SAAS,IAAI,MAAM,aAAa,KAAK,GAAG,IAAI;AAE5E,QAAM,SAAS,MAAM,SAAS,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": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;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;AACzD,QAAM,OAAO,MAAM,aAAa,SAAS,IAAI,MAAM,aAAa,KAAK,GAAG,IAAI;AAE5E,QAAM,SAAS,MAAM,SAAS,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,eAAe,MAAM,YAAY,CAAC,CAAC;AACvD,MAAI,aAAa;AACf,WAAO,GAAG;AAAA;AAAA;AAAA;AAAA,EAAyB;AAAA,EACrC;AAEA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoka-ui/ui",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "homepage": "",
@@ -69,18 +69,32 @@
69
69
  "commander": "11.1.0"
70
70
  },
71
71
  "dependencies": {
72
- "@ant-design/cssinjs": "^2.1.2",
72
+ "@ant-design/cssinjs": "1.24.0",
73
73
  "@ant-design/icons": "^5.6.1",
74
+ "@ant-design/pro-form": "^2.32.0",
75
+ "@babel/runtime": "^7.29.2",
76
+ "@codemirror/autocomplete": "^6.20.1",
77
+ "@codemirror/lang-sql": "^6.10.0",
78
+ "@codemirror/state": "^6.6.0",
79
+ "@codemirror/view": "^6.41.1",
80
+ "@uiw/react-codemirror": "^4.25.9",
81
+ "@uiw/react-markdown-preview": "^5.2.0",
74
82
  "@wangeditor/editor": "^5.1.23",
75
83
  "@wangeditor/editor-for-react": "^1.0.6",
76
84
  "ahooks": "^3.9.6",
77
85
  "antd": "5.29.2",
86
+ "codemirror": "^6.0.2",
78
87
  "dayjs": "^1.11.13",
88
+ "decimal.js": "^10.6.0",
89
+ "echarts": "^6.0.0",
90
+ "jszip": "^3.10.1",
79
91
  "lodash": "^4.17.21",
92
+ "mermaid": "^11.14.0",
80
93
  "react": "^18.3.1",
81
94
  "react-custom-scrollbars-2": "^4.5.0",
82
95
  "react-dom": "^18.3.1",
83
96
  "react-virtualized": "^9.22.5",
97
+ "swiper": "^12.1.3",
84
98
  "tslib": "^2.8.1"
85
99
  },
86
100
  "devDependencies": {