@cniot/mdd-editor 0.3.8 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.es.js CHANGED
@@ -26193,6 +26193,9 @@ var styles$b = {
26193
26193
  const DRAG_KEY$2 = "PanelTitle";
26194
26194
  const { Panel: Panel$3 } = Collapse;
26195
26195
  const { Tooltip } = Balloon;
26196
+ const stopHeaderInputKeyboardEvent = (event) => {
26197
+ event.stopPropagation();
26198
+ };
26196
26199
  const TitleRender$2 = (props) => {
26197
26200
  const ref = useRef(null);
26198
26201
  const {
@@ -26270,7 +26273,8 @@ const TitleRender$2 = (props) => {
26270
26273
  size: "small",
26271
26274
  value: label,
26272
26275
  onChange: (v2) => titleChange("label", v2),
26273
- placeholder: "\u8F93\u5165\u4E2D\u6587\u540D"
26276
+ onKeyDown: stopHeaderInputKeyboardEvent,
26277
+ placeholder: "\u8F93\u5165\u5C55\u793A\u540D\u79F0"
26274
26278
  }), titleType.includes("type") && /* @__PURE__ */ React$1.createElement("div", {
26275
26279
  className: styles$b.itemComponent
26276
26280
  }, /* @__PURE__ */ React$1.createElement("label", {
@@ -30436,7 +30440,11 @@ function getPageCode(schemaJson = {}, pageMeta = {}) {
30436
30440
  const MIN_BRIDGE_VERSION = "0.1.4";
30437
30441
  const START_COMMAND = `npm i -g @cniot/mdd-ai-bridge
30438
30442
  mdd-ai-bridge`;
30443
+ const DEFAULT_MAIN_PROJECT_PATH = "/Users/caoruiqi/Documents/code/owtb/tms-mach36";
30444
+ const MAIN_PROJECT_PATH_STORAGE_KEY = "mdd-local-ai-i18n-main-project-path";
30439
30445
  const trimEndSlash = (value = "") => value.replace(/\/+$/, "");
30446
+ const hasChineseText = (value = "") => /[\u4e00-\u9fff]/.test(String(value));
30447
+ const hasLetterText = (value = "") => /[a-zA-Z]/.test(String(value));
30440
30448
  const parseSchema = (value) => {
30441
30449
  if (!value)
30442
30450
  return null;
@@ -30704,6 +30712,166 @@ const collectLinkedPageReferences = ({ schemaJson, scriptInfo, rootCode, extraSo
30704
30712
  );
30705
30713
  return mergeL4References([...schemaReferences, ...scriptReferences, ...extraReferences], rootCode);
30706
30714
  };
30715
+ const I18N_SCHEMA_FIELDS = /* @__PURE__ */ new Set([
30716
+ "label",
30717
+ "tooltip",
30718
+ "title",
30719
+ "placeholder",
30720
+ "children",
30721
+ "text",
30722
+ "submitText",
30723
+ "resetText",
30724
+ "cancelText",
30725
+ "secondConfirmTitle",
30726
+ "secondConfirmContent",
30727
+ "emptyText",
30728
+ "moreText"
30729
+ ]);
30730
+ const createI18nSchemaCandidates = (value, path = "$", candidates = []) => {
30731
+ if (Array.isArray(value)) {
30732
+ value.forEach((item, index2) => createI18nSchemaCandidates(item, `${path}[${index2}]`, candidates));
30733
+ return candidates;
30734
+ }
30735
+ if (!value || typeof value !== "object")
30736
+ return candidates;
30737
+ Object.keys(value).forEach((key) => {
30738
+ const nextPath = `${path}.${key}`;
30739
+ const item = value[key];
30740
+ if (typeof item === "string" && I18N_SCHEMA_FIELDS.has(key) && (hasChineseText(item) || hasLetterText(item))) {
30741
+ candidates.push({
30742
+ path: nextPath,
30743
+ field: key,
30744
+ text: item
30745
+ });
30746
+ }
30747
+ createI18nSchemaCandidates(item, nextPath, candidates);
30748
+ });
30749
+ return candidates;
30750
+ };
30751
+ const createScriptI18nPreview = (script = "") => {
30752
+ const seen = /* @__PURE__ */ new Set();
30753
+ const stringLikePattern = /(['"`])(?:(?!\1).)*[\u4e00-\u9fffA-Za-z](?:(?!\1).)*\1/;
30754
+ return String(script).split("\n").map((line, index2) => ({
30755
+ lineNumber: index2 + 1,
30756
+ line: line.trim()
30757
+ })).filter((item) => stringLikePattern.test(item.line)).filter((item) => hasChineseText(item.line) || hasLetterText(item.line)).filter((item) => {
30758
+ const key = item.line;
30759
+ if (seen.has(key))
30760
+ return false;
30761
+ seen.add(key);
30762
+ return true;
30763
+ }).slice(0, 40);
30764
+ };
30765
+ const formatI18nCandidateList = (items = []) => {
30766
+ if (!items.length)
30767
+ return "- \u6682\u672A\u5728\u7F16\u8F91\u5668\u5F53\u524D schema \u4E2D\u9884\u626B\u5230 label/tooltip \u7B49\u6587\u6848\uFF0C\u8BF7\u4ECD\u7136\u5B8C\u6574\u68C0\u67E5 mdd.schema.json\u3002";
30768
+ return items.slice(0, 80).map((item) => `- ${item.path} (${item.field}): ${item.text}`).join("\n");
30769
+ };
30770
+ const formatScriptPreviewList = (items = []) => {
30771
+ if (!items.length)
30772
+ return "- \u6682\u672A\u5728\u7F16\u8F91\u5668\u5F53\u524D script \u4E2D\u9884\u626B\u5230\u660E\u663E\u6587\u6848\u884C\uFF0C\u8BF7\u4ECD\u7136\u5B8C\u6574\u68C0\u67E5 mdd.script.jsx\u3002";
30773
+ return items.map((item) => `- L${item.lineNumber}: ${item.line}`).join("\n");
30774
+ };
30775
+ const formatLinkedI18nWorkspaceList = ({ linkedPages = {}, syncLinkedPages = false }) => {
30776
+ if (!syncLinkedPages) {
30777
+ return "\u672C\u6B21\u672A\u5F00\u542F\u9012\u5F52\u5B50\u9875\u9762\uFF0C\u53EA\u5904\u7406\u5F53\u524D L4 \u9875\u9762\u3002";
30778
+ }
30779
+ const pages = (linkedPages == null ? void 0 : linkedPages.pages) || [];
30780
+ const failed = (linkedPages == null ? void 0 : linkedPages.failed) || [];
30781
+ const syncedText = pages.length ? pages.map((page) => `- ${page.name || "\u672A\u547D\u540D\u9875\u9762"} (${page.code})\uFF1A${page.dir}`).join("\n") : "- \u672A\u53D1\u73B0\u5DF2\u540C\u6B65\u7684\u5173\u8054\u5B50\u9875\u9762\u3002";
30782
+ const failedText = failed.length ? `
30783
+
30784
+ \u9012\u5F52\u626B\u63CF\u4E2D\u6709\u4EE5\u4E0B\u5173\u8054\u9875\u9762\u672A\u80FD\u540C\u6B65\uFF0C\u8BF7\u4E0D\u8981\u4FEE\u6539\u8FD9\u4E9B\u9875\u9762\uFF0C\u6700\u540E\u62A5\u544A\u7ED9\u7528\u6237\uFF1A
30785
+ ${failed.map((page) => `- ${page.name || "\u672A\u547D\u540D\u9875\u9762"} (${page.code})\uFF1A${page.reason || "\u672A\u80FD\u81EA\u52A8\u540C\u6B65"}`).join("\n")}` : "";
30786
+ return `\u672C\u6B21\u5DF2\u5F00\u542F\u9012\u5F52\u5B50\u9875\u9762\uFF0C\u8BF7\u540C\u65F6\u5904\u7406\u5F53\u524D\u9875\u9762\u548C\u4EE5\u4E0B\u5DF2\u540C\u6B65\u7684\u5173\u8054 L4 \u9875\u9762\u3002\u6BCF\u4E2A\u9875\u9762\u76EE\u5F55\u90FD\u5305\u542B mdd.schema.json \u548C mdd.script.jsx\uFF1A
30787
+ ${syncedText}${failedText}`;
30788
+ };
30789
+ const buildL4I18nPrompt = ({
30790
+ pageCode,
30791
+ workspacePath,
30792
+ mainProjectPath,
30793
+ schemaJson,
30794
+ scriptInfo,
30795
+ linkedPages,
30796
+ syncLinkedPages
30797
+ }) => {
30798
+ const normalizedProjectPath = trimEndSlash(mainProjectPath || "");
30799
+ const schemaCandidates = createI18nSchemaCandidates(schemaJson);
30800
+ const scriptPreview = createScriptI18nPreview(scriptInfo);
30801
+ const linkedWorkspaceText = formatLinkedI18nWorkspaceList({
30802
+ linkedPages,
30803
+ syncLinkedPages
30804
+ });
30805
+ return `\u4F60\u73B0\u5728\u8981\u4E3A\u4E00\u4E2A MDD L4 \u9875\u9762\u505A\u591A\u8BED\u8A00\u540C\u6B65\u3002\u8BF7\u76F4\u63A5\u4FEE\u6539\u672C\u5730\u6587\u4EF6\uFF0C\u4E0D\u8981\u53EA\u7ED9\u5EFA\u8BAE\u3002
30806
+
30807
+ \u5F53\u524D L4 \u9875\u9762\uFF1A
30808
+ - \u9875\u9762 Code\uFF1A${pageCode}
30809
+ - L4 \u5DE5\u4F5C\u533A\uFF1A${workspacePath}
30810
+ - Schema \u6587\u4EF6\uFF1A${workspacePath}/mdd.schema.json
30811
+ - Script \u6587\u4EF6\uFF1A${workspacePath}/mdd.script.jsx
30812
+
30813
+ \u9012\u5F52\u5B50\u9875\u9762\uFF1A
30814
+ ${linkedWorkspaceText}
30815
+
30816
+ \u4E3B\u5DE5\u7A0B\uFF1A
30817
+ - \u5DE5\u7A0B\u6839\u76EE\u5F55\uFF1A${normalizedProjectPath}
30818
+ - \u82F1\u6587\u8BCD\u6761\uFF1A${normalizedProjectPath}/src/i18n/strings/en-US.json
30819
+ - \u8D8A\u5357\u8BED\u8BCD\u6761\uFF1A${normalizedProjectPath}/src/i18n/strings/vi-VN.json
30820
+
30821
+ \u76EE\u6807\uFF1A
30822
+ 1. \u626B\u63CF\u5F53\u524D L4 \u9875\u9762${syncLinkedPages ? "\u4EE5\u53CA\u4E0A\u9762\u5217\u51FA\u7684\u6240\u6709\u5DF2\u540C\u6B65\u5173\u8054\u5B50 L4 \u9875\u9762" : ""}\u7684 mdd.schema.json\uFF0C\u5904\u7406\u6240\u6709\u9762\u5411\u7528\u6237\u5C55\u793A\u7684\u6587\u6848\uFF0C\u4E0D\u9650\u4E2D\u6587\uFF1B\u82F1\u6587 UI \u6587\u6848\u4E5F\u5FC5\u987B\u5904\u7406\u3002\u91CD\u70B9\u5305\u62EC label\u3001tooltip\uFF0C\u4E5F\u5305\u62EC title\u3001placeholder\u3001children\u3001text\u3001submitText\u3001resetText\u3001cancelText\u3001secondConfirmTitle\u3001secondConfirmContent \u7B49\u540C\u7C7B\u5B57\u6BB5\u3002
30823
+ 2. \u82F1\u6587 label/tooltip \u4E5F\u5C5E\u4E8E\u9700\u8981\u540C\u6B65\u7684\u6587\u6848\uFF0C\u4F8B\u5982 ResourceId\u3001ResourceName\u3001Status\u3001id\u3001edit template\u3001enable\u3001disable\u3001edit\u3001Add template \u7B49\uFF0C\u90FD\u8981\u4F5C\u4E3A i18n key \u53BB\u68C0\u67E5 en-US.json \u548C vi-VN.json\u3002
30824
+ 3. \u626B\u63CF\u5F53\u524D L4 \u9875\u9762${syncLinkedPages ? "\u4EE5\u53CA\u4E0A\u9762\u5217\u51FA\u7684\u6240\u6709\u5DF2\u540C\u6B65\u5173\u8054\u5B50 L4 \u9875\u9762" : ""}\u7684 mdd.script.jsx\uFF0C\u627E\u51FA JSX\u3001\u5F39\u7A97\u3001\u6309\u94AE\u3001\u6D88\u606F\u63D0\u793A\u3001\u8868\u683C\u5217\u3001\u9009\u9879\u3001\u9519\u8BEF\u63D0\u793A\u7B49\u7528\u6237\u53EF\u89C1\u786C\u7F16\u7801\u6587\u6848\u3002\u4E2D\u6587\u3001\u82F1\u6587\u3001\u82F1\u6587\u77ED\u8BED\u3001\u6570\u5B57/\u82F1\u6587\u6DF7\u5408\u77ED\u8BED\u90FD\u7B97\u7528\u6237\u53EF\u89C1\u6587\u6848\u3002
30825
+ 4. \u5BF9 mdd.script.jsx \u4E2D\u672A\u56FD\u9645\u5316\u7684\u7528\u6237\u53EF\u89C1\u786C\u7F16\u7801\u6587\u6848\uFF0C\u5F15\u5165\u5E76\u4F7F\u7528 $i18n \u5305\u88F9\u3002\u82E5\u6587\u4EF6\u8FD8\u6CA1\u6709 import\uFF0C\u8BF7\u6DFB\u52A0\uFF1A
30826
+ import $i18n from '@src/i18n';
30827
+ \u4F7F\u7528\u65B9\u5F0F\u4E3A $i18n.get('\u6587\u6848 key')\u3002\u4E0D\u8981\u5904\u7406\u6CE8\u91CA\u3001\u65E5\u5FD7\u3001\u63A5\u53E3\u5B57\u6BB5\u540D\u3001\u5BF9\u8C61 key\u3001\u8DEF\u5F84\u3001\u57CB\u70B9 code\u3001\u975E\u7528\u6237\u53EF\u89C1\u6587\u672C\u3002
30828
+ 5. mdd.schema.json \u4E2D\u7684 label/tooltip \u7B49 key \u901A\u5E38\u7531 MDD \u6E32\u67D3\u5F15\u64CE\u81EA\u52A8 i18n.tr \u5904\u7406\uFF0C\u539F\u5219\u4E0A\u4FDD\u7559 schema \u539F\u59CB\u6587\u6848 key\uFF0C\u4E0D\u8981\u4E3A\u4E86\u56FD\u9645\u5316\u968F\u610F\u6539 schema \u7ED3\u6784\uFF1B\u53EA\u9700\u8981\u4E3A\u8FD9\u4E9B key \u8865\u9F50\u4E3B\u5DE5\u7A0B\u7FFB\u8BD1\u8BCD\u6761\u3002
30829
+ 6. \u5C06\u6240\u6709\u9700\u8981\u7FFB\u8BD1\u7684\u6587\u6848 key \u53BB\u91CD\u540E\uFF0C\u540C\u6B65\u5230\u4E3B\u5DE5\u7A0B\u7684 en-US.json \u548C vi-VN.json\uFF1A
30830
+ - JSON \u662F\u6241\u5E73 key/value \u683C\u5F0F\uFF0Ckey \u4FDD\u6301\u539F\u6587\uFF0C\u4E0D\u7BA1\u539F\u6587\u662F\u4E2D\u6587\u8FD8\u662F\u82F1\u6587\u3002
30831
+ - \u5982\u679C key \u5DF2\u5B58\u5728\uFF0C\u5FC5\u987B\u8DF3\u8FC7\uFF0C\u4E0D\u8986\u76D6\u5DF2\u6709\u7FFB\u8BD1\u3002
30832
+ - \u5982\u679C key \u4E0D\u5B58\u5728\uFF0C\u4E24\u4E2A\u6587\u4EF6\u90FD\u8981\u65B0\u589E\u3002
30833
+ - \u5BF9\u82F1\u6587 key\uFF1Aen-US.json \u7684 value \u53EF\u4EE5\u4F7F\u7528\u66F4\u89C4\u8303\u7684\u82F1\u6587\u5C55\u793A\u6587\u6848\uFF0C\u4F8B\u5982 ResourceId \u53EF\u5199\u4E3A Resource ID\u3001enable \u53EF\u5199\u4E3A Enable\uFF1Bvi-VN.json \u7684 value \u5FC5\u987B\u7FFB\u8BD1\u6210\u8D8A\u5357\u8BED\u3002
30834
+ - \u5BF9\u4E2D\u6587 key\uFF1Aen-US.json \u7FFB\u8BD1\u6210\u82F1\u6587\uFF0Cvi-VN.json \u7FFB\u8BD1\u6210\u8D8A\u5357\u8BED\u3002
30835
+ - \u4FDD\u6301 JSON \u5408\u6CD5\u3001\u683C\u5F0F\u7A33\u5B9A\uFF0C\u5C3D\u91CF\u7EF4\u6301\u539F\u6587\u4EF6\u7F29\u8FDB\u548C\u6392\u5E8F\u98CE\u683C\u3002
30836
+ 7. i18n JSON \u6587\u4EF6\u53EF\u80FD\u975E\u5E38\u5927\uFF0C\u4E0D\u8981\u7528 cat\u3001sed \u5927\u6BB5\u6253\u5370\u6216\u628A\u5B8C\u6574\u6587\u4EF6\u8BFB\u8FDB\u5BF9\u8BDD\u4E0A\u4E0B\u6587\u3002\u8BF7\u4F18\u5148\u7528\u811A\u672C\u7CBE\u786E\u67E5\u91CD\u548C\u589E\u91CF\u5199\u5165\uFF0C\u4F8B\u5982\uFF1A
30837
+ node - <<'NODE'
30838
+ const fs = require('fs');
30839
+ const files = [
30840
+ '${normalizedProjectPath}/src/i18n/strings/en-US.json',
30841
+ '${normalizedProjectPath}/src/i18n/strings/vi-VN.json',
30842
+ ];
30843
+ const keys = [
30844
+ // \u5728\u8FD9\u91CC\u586B\u5165\u4ECE L4 \u9875\u9762\u6536\u96C6\u5E76\u53BB\u91CD\u540E\u7684\u5019\u9009 key
30845
+ ];
30846
+ for (const file of files) {
30847
+ const json = JSON.parse(fs.readFileSync(file, 'utf8'));
30848
+ const missing = keys.filter((key) => !Object.prototype.hasOwnProperty.call(json, key));
30849
+ console.log(file, 'missing:', missing);
30850
+ }
30851
+ NODE
30852
+ \u5982\u679C\u9700\u8981\u5199\u5165\uFF0C\u4E5F\u8BF7\u7528\u7C7B\u4F3C\u811A\u672C\u8BFB\u53D6 JSON \u5BF9\u8C61\u3001\u53EA\u7ED9 missing key \u8D4B\u503C\u3001\u518D JSON.stringify(data, null, 2) \u5199\u56DE\uFF1B\u5199\u5165\u524D\u540E\u53EA\u8F93\u51FA\u65B0\u589E\u6570\u91CF\u548C\u65B0\u589E key \u5217\u8868\uFF0C\u4E0D\u8981\u8F93\u51FA\u5B8C\u6574 JSON\u3002
30853
+ 8. \u7FFB\u8BD1\u8981\u6C42\uFF1A
30854
+ - \u82F1\u6587\u4F7F\u7528\u7B80\u6D01\u51C6\u786E\u7684\u540E\u53F0/\u7269\u6D41\u7CFB\u7EDF UI \u6587\u6848\uFF0C\u6309\u94AE\u77ED\u8BED\u9996\u5B57\u6BCD\u5927\u5199\u5373\u53EF\uFF0C\u4E0D\u8981\u673A\u68B0\u76F4\u8BD1\u3002
30855
+ - \u8D8A\u5357\u8BED\u4F7F\u7528\u81EA\u7136\u7684\u8D8A\u5357\u8BED\u4E1A\u52A1\u7CFB\u7EDF\u6587\u6848\uFF0C\u4FDD\u7559\u53D8\u91CF\u5360\u4F4D\u7B26\u3001\u6570\u5B57\u3001\u6807\u70B9\u548C\u4E13\u6709\u540D\u8BCD\u3002
30856
+ - \u5E26 {0}\u3001{name}\u3001\${value}\u3001%s \u7B49\u5360\u4F4D\u7B26\u7684\u6587\u6848\uFF0C\u7FFB\u8BD1\u540E\u5FC5\u987B\u5B8C\u6574\u4FDD\u7559\u5360\u4F4D\u7B26\u3002
30857
+ 9. \u5B8C\u6210\u540E\u8BF7\u81EA\u68C0\uFF1A
30858
+ - \u6240\u6709\u88AB\u5904\u7406\u9875\u9762\u7684 mdd.schema.json \u90FD\u662F\u5408\u6CD5 JSON\u3002
30859
+ - en-US.json\u3001vi-VN.json \u662F\u5408\u6CD5 JSON\u3002
30860
+ - \u6240\u6709\u88AB\u5904\u7406\u9875\u9762\u7684 mdd.script.jsx \u90FD\u6CA1\u6709\u7834\u574F React/JSX \u8BED\u6CD5\u3002
30861
+ - \u6CA1\u6709\u91CD\u590D key\uFF0C\u6CA1\u6709\u8986\u76D6\u5DF2\u6709 key\u3002
30862
+
30863
+ \u7F16\u8F91\u5668\u9884\u626B\u5230\u7684\u5F53\u524D\u9875\u9762 schema \u5019\u9009\u6587\u6848\u5982\u4E0B\uFF0C\u5305\u542B\u4E2D\u6587\u548C\u82F1\u6587\uFF1B\u8BF7\u4EE5\u5B9E\u9645\u6587\u4EF6\u4E3A\u51C6\u518D\u5B8C\u6574\u8865\u5145\uFF0C\u4E0D\u8981\u56E0\u4E3A\u6587\u6848\u662F\u82F1\u6587\u5C31\u8DF3\u8FC7\uFF1A
30864
+ ${formatI18nCandidateList(schemaCandidates)}
30865
+
30866
+ \u7F16\u8F91\u5668\u9884\u626B\u5230\u7684\u5F53\u524D\u9875\u9762 script \u5019\u9009\u884C\u5982\u4E0B\uFF0C\u8BF7\u4EE5\u5B9E\u9645\u6587\u4EF6\u4E3A\u51C6\u8BC6\u522B\u771F\u6B63\u7684\u7528\u6237\u53EF\u89C1\u6587\u6848\uFF0C\u4E0D\u8981\u56E0\u4E3A\u6587\u6848\u662F\u82F1\u6587\u5C31\u8DF3\u8FC7\uFF1A
30867
+ ${formatScriptPreviewList(scriptPreview)}
30868
+
30869
+ \u8BF7\u73B0\u5728\u5F00\u59CB\u4FEE\u6539\u8FD9\u4E9B\u6587\u4EF6\uFF0C\u5E76\u5728\u6700\u540E\u8F93\u51FA\uFF1A
30870
+ - \u6BCF\u4E2A L4 \u9875\u9762\u5206\u522B\u5305\u88F9\u4E86\u54EA\u4E9B\u6587\u6848
30871
+ - en-US.json \u65B0\u589E\u4E86\u591A\u5C11\u6761
30872
+ - vi-VN.json \u65B0\u589E\u4E86\u591A\u5C11\u6761
30873
+ - \u662F\u5426\u6709\u8DF3\u8FC7\u7684\u5DF2\u5B58\u5728 key`;
30874
+ };
30707
30875
  const createLinkedPageExtraSources = (data = {}, prefix = "payload") => {
30708
30876
  const sourceFields = [
30709
30877
  "schemaInfo",
@@ -30845,6 +31013,9 @@ const normalizeLinkedPagePayload = (reference, pageData) => {
30845
31013
  };
30846
31014
  };
30847
31015
  const buildLinkedPagePayload = async (payload, config2) => {
31016
+ if (!(config2 == null ? void 0 : config2.syncLinkedPages)) {
31017
+ return payload;
31018
+ }
30848
31019
  const rootSchemaJson = parseSchema(payload.schemaInfo) || {};
30849
31020
  const resolver = getLinkedPageResolver(config2);
30850
31021
  let rootPageData = null;
@@ -30996,7 +31167,7 @@ const createLinkedPullSummary = (res) => {
30996
31167
  return `\u68C0\u6D4B\u5230\u5173\u8054 L4 \u9875\u9762\u4E5F\u5B58\u5728\u672C\u5730\u4FEE\u6539\uFF1A${codes}\u3002\u5F53\u524D\u53EA\u540C\u6B65\u4E86\u5F53\u524D\u9875\u9762\uFF0C\u8BF7\u5206\u522B\u6253\u5F00\u8FD9\u4E9B L4 \u9875\u9762\u6267\u884C\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u5E76\u4FDD\u5B58\u3002`;
30997
31168
  };
30998
31169
  function LocalAIDrawer(props) {
30999
- var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i;
31170
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k;
31000
31171
  const { schema, scriptInfo, pageMeta = {}, bridgeConfig, onApply } = props;
31001
31172
  const config2 = React$1.useMemo(() => normalizeBridgeConfig(bridgeConfig), [bridgeConfig]);
31002
31173
  const [baseURL, setBaseURL] = React$1.useState(config2.baseURL || DEFAULT_BRIDGE_URL);
@@ -31007,6 +31178,16 @@ function LocalAIDrawer(props) {
31007
31178
  const [lastSummary, setLastSummary] = React$1.useState("");
31008
31179
  const [pullError, setPullError] = React$1.useState(null);
31009
31180
  const [lastDiffSummary, setLastDiffSummary] = React$1.useState(null);
31181
+ const [syncLinkedPages, setSyncLinkedPages] = React$1.useState(false);
31182
+ const [i18nDialogVisible, setI18nDialogVisible] = React$1.useState(false);
31183
+ const [i18nMainProjectPath, setI18nMainProjectPath] = React$1.useState(() => {
31184
+ var _a3;
31185
+ if (typeof window === "undefined")
31186
+ return DEFAULT_MAIN_PROJECT_PATH;
31187
+ return ((_a3 = window.localStorage) == null ? void 0 : _a3.getItem(MAIN_PROJECT_PATH_STORAGE_KEY)) || DEFAULT_MAIN_PROJECT_PATH;
31188
+ });
31189
+ const [i18nPrompt, setI18nPrompt] = React$1.useState("");
31190
+ const [i18nWorkspaceInfo, setI18nWorkspaceInfo] = React$1.useState(null);
31010
31191
  const schemaJson = ((_a2 = schema == null ? void 0 : schema.getAllJSON) == null ? void 0 : _a2.call(schema)) || {};
31011
31192
  const pageCode = getPageCode(schemaJson, pageMeta);
31012
31193
  const getPayload = React$1.useCallback(() => {
@@ -31066,6 +31247,27 @@ function LocalAIDrawer(props) {
31066
31247
  \u6211\u7684\u9700\u6C42\u662F\uFF1A`,
31067
31248
  [expectedWorkspacePath, pageCode]
31068
31249
  );
31250
+ const currentI18nPrompt = React$1.useMemo(
31251
+ () => buildL4I18nPrompt({
31252
+ pageCode,
31253
+ workspacePath: (i18nWorkspaceInfo == null ? void 0 : i18nWorkspaceInfo.dir) || workspacePath || expectedWorkspacePath,
31254
+ mainProjectPath: i18nMainProjectPath,
31255
+ schemaJson,
31256
+ scriptInfo: (scriptInfo == null ? void 0 : scriptInfo.script) || "",
31257
+ linkedPages: i18nWorkspaceInfo == null ? void 0 : i18nWorkspaceInfo.linkedPages,
31258
+ syncLinkedPages
31259
+ }),
31260
+ [
31261
+ expectedWorkspacePath,
31262
+ i18nMainProjectPath,
31263
+ i18nWorkspaceInfo,
31264
+ pageCode,
31265
+ schemaJson,
31266
+ scriptInfo,
31267
+ syncLinkedPages,
31268
+ workspacePath
31269
+ ]
31270
+ );
31069
31271
  const handleCopy = React$1.useCallback(async (text, successText) => {
31070
31272
  try {
31071
31273
  await copyText(text);
@@ -31100,7 +31302,10 @@ function LocalAIDrawer(props) {
31100
31302
  setPullError(null);
31101
31303
  setLastDiffSummary(null);
31102
31304
  try {
31103
- const payload = await buildLinkedPagePayload(getPayload(), config2);
31305
+ const payload = await buildLinkedPagePayload(getPayload(), {
31306
+ ...config2,
31307
+ syncLinkedPages
31308
+ });
31104
31309
  const res = await pushPage(baseURL, pageCode, payload);
31105
31310
  setWorkspacePath((res == null ? void 0 : res.dir) || "");
31106
31311
  setBridgeInfo((prev) => {
@@ -31112,7 +31317,7 @@ function LocalAIDrawer(props) {
31112
31317
  });
31113
31318
  setStatus("\u5DF2\u540C\u6B65\u5230\u672C\u5730");
31114
31319
  setLastSummary(createLinkedPushSummary(res, pageCode));
31115
- if (((_a3 = res == null ? void 0 : res.linkedPages) == null ? void 0 : _a3.totalReferences) > 0) {
31320
+ if (syncLinkedPages && ((_a3 = res == null ? void 0 : res.linkedPages) == null ? void 0 : _a3.totalReferences) > 0) {
31116
31321
  CnMessage.success(
31117
31322
  `\u5DF2\u53D1\u9001\u5230\u672C\u5730 AI \u5DE5\u4F5C\u533A\uFF0C\u626B\u63CF\u5230\u76F4\u63A5\u5B50 L4 \u9875\u9762 ${res.linkedPages.directCount || 0} \u4E2A\uFF0C\u9012\u5F52\u5171 ${res.linkedPages.totalReferences} \u4E2A`
31118
31323
  );
@@ -31125,6 +31330,68 @@ function LocalAIDrawer(props) {
31125
31330
  setLoadingAction("");
31126
31331
  }
31127
31332
  };
31333
+ const ensureCurrentWorkspace = async () => {
31334
+ const statusRes = await getPageStatus(baseURL, pageCode);
31335
+ if ((statusRes == null ? void 0 : statusRes.exists) && !syncLinkedPages) {
31336
+ return {
31337
+ ...statusRes,
31338
+ created: false,
31339
+ recursiveSynced: false
31340
+ };
31341
+ }
31342
+ const payload = await buildLinkedPagePayload(getPayload(), {
31343
+ ...config2,
31344
+ syncLinkedPages
31345
+ });
31346
+ const pushRes = await pushPage(baseURL, pageCode, payload);
31347
+ return {
31348
+ ...pushRes || {},
31349
+ exists: true,
31350
+ created: !(statusRes == null ? void 0 : statusRes.exists),
31351
+ recursiveSynced: syncLinkedPages,
31352
+ dir: pushRes == null ? void 0 : pushRes.dir
31353
+ };
31354
+ };
31355
+ const handleI18nConfirm = async () => {
31356
+ var _a3;
31357
+ const mainProjectPath = trimEndSlash(i18nMainProjectPath || "");
31358
+ if (!mainProjectPath || !mainProjectPath.startsWith("/")) {
31359
+ CnMessage.error("\u8BF7\u8F93\u5165\u4E3B\u5DE5\u7A0B\u672C\u5730\u7EDD\u5BF9\u8DEF\u5F84");
31360
+ return;
31361
+ }
31362
+ setLoadingAction("i18n");
31363
+ try {
31364
+ if (typeof window !== "undefined") {
31365
+ (_a3 = window.localStorage) == null ? void 0 : _a3.setItem(MAIN_PROJECT_PATH_STORAGE_KEY, mainProjectPath);
31366
+ }
31367
+ const workspaceInfo = await ensureCurrentWorkspace();
31368
+ setWorkspacePath((workspaceInfo == null ? void 0 : workspaceInfo.dir) || workspacePath);
31369
+ setI18nWorkspaceInfo(workspaceInfo);
31370
+ const prompt = buildL4I18nPrompt({
31371
+ pageCode,
31372
+ workspacePath: (workspaceInfo == null ? void 0 : workspaceInfo.dir) || workspacePath || expectedWorkspacePath,
31373
+ mainProjectPath,
31374
+ schemaJson,
31375
+ scriptInfo: (scriptInfo == null ? void 0 : scriptInfo.script) || "",
31376
+ linkedPages: workspaceInfo == null ? void 0 : workspaceInfo.linkedPages,
31377
+ syncLinkedPages
31378
+ });
31379
+ setI18nPrompt(prompt);
31380
+ setLastSummary(
31381
+ (workspaceInfo == null ? void 0 : workspaceInfo.recursiveSynced) ? `\u5DF2\u6309\u9012\u5F52\u6A21\u5F0F\u540C\u6B65\u5F53\u524D L4 \u9875\u9762\u548C\u5173\u8054\u5B50\u9875\u9762\uFF0C\u8BF7\u590D\u5236\u591A\u8BED\u8A00\u63D0\u793A\u8BCD\u4EA4\u7ED9\u672C\u5730 AI \u6267\u884C` : (workspaceInfo == null ? void 0 : workspaceInfo.created) ? "\u5DF2\u5148\u628A\u5F53\u524D L4 \u9875\u9762\u540C\u6B65\u5230\u672C\u5730\u5DE5\u4F5C\u533A\uFF0C\u8BF7\u590D\u5236\u591A\u8BED\u8A00\u63D0\u793A\u8BCD\u4EA4\u7ED9\u672C\u5730 AI \u6267\u884C" : "\u5F53\u524D L4 \u9875\u9762\u672C\u5730\u5DE5\u4F5C\u533A\u5DF2\u5B58\u5728\uFF0C\u8BF7\u590D\u5236\u591A\u8BED\u8A00\u63D0\u793A\u8BCD\u4EA4\u7ED9\u672C\u5730 AI \u6267\u884C"
31382
+ );
31383
+ CnMessage.success(
31384
+ (workspaceInfo == null ? void 0 : workspaceInfo.recursiveSynced) ? "\u5DF2\u9012\u5F52\u540C\u6B65 L4 \u5DE5\u4F5C\u533A\u5E76\u751F\u6210\u63D0\u793A\u8BCD" : (workspaceInfo == null ? void 0 : workspaceInfo.created) ? "\u5DF2\u540C\u6B65\u5F53\u524D L4 \u5DE5\u4F5C\u533A\u5E76\u751F\u6210\u63D0\u793A\u8BCD" : "\u5DF2\u751F\u6210 L4 \u591A\u8BED\u8A00\u63D0\u793A\u8BCD"
31385
+ );
31386
+ } catch (e) {
31387
+ CnMessage.error(e.message || "\u751F\u6210 L4 \u591A\u8BED\u8A00\u63D0\u793A\u8BCD\u5931\u8D25");
31388
+ } finally {
31389
+ setLoadingAction("");
31390
+ }
31391
+ };
31392
+ const handleCopyI18nPrompt = React$1.useCallback(() => {
31393
+ handleCopy(i18nPrompt || currentI18nPrompt, "\u5DF2\u590D\u5236 L4 \u591A\u8BED\u8A00\u63D0\u793A\u8BCD");
31394
+ }, [currentI18nPrompt, handleCopy, i18nPrompt]);
31128
31395
  const handlePull = async () => {
31129
31396
  setLoadingAction("pull");
31130
31397
  setPullError(null);
@@ -31292,7 +31559,24 @@ function LocalAIDrawer(props) {
31292
31559
  }, "\u6253\u5F00\u76EE\u5F55"), /* @__PURE__ */ React$1.createElement(CnButton, {
31293
31560
  loading: loadingAction === "rollback",
31294
31561
  onClick: handleRollback
31295
- }, "\u56DE\u6EDA\u4E0A\u6B21\u66F4\u6539")), /* @__PURE__ */ React$1.createElement("div", {
31562
+ }, "\u56DE\u6EDA\u4E0A\u6B21\u66F4\u6539"), /* @__PURE__ */ React$1.createElement(CnButton, {
31563
+ loading: loadingAction === "i18n",
31564
+ onClick: () => setI18nDialogVisible(true)
31565
+ }, "\u540C\u6B65L4\u591A\u8BED\u8A00")), /* @__PURE__ */ React$1.createElement("div", {
31566
+ className: "mdd-local-ai-sync-options"
31567
+ }, /* @__PURE__ */ React$1.createElement("button", {
31568
+ type: "button",
31569
+ className: `mdd-local-ai-switch${syncLinkedPages ? " is-checked" : ""}`,
31570
+ role: "switch",
31571
+ "aria-checked": syncLinkedPages,
31572
+ onClick: () => setSyncLinkedPages((value) => !value)
31573
+ }, /* @__PURE__ */ React$1.createElement("span", {
31574
+ className: "mdd-local-ai-switch-track"
31575
+ }, /* @__PURE__ */ React$1.createElement("span", {
31576
+ className: "mdd-local-ai-switch-handle"
31577
+ })), /* @__PURE__ */ React$1.createElement("span", {
31578
+ className: "mdd-local-ai-switch-text"
31579
+ }, /* @__PURE__ */ React$1.createElement("strong", null, "\u9012\u5F52\u540C\u6B65\u5B50\u9875\u9762"), /* @__PURE__ */ React$1.createElement("span", null, syncLinkedPages ? "\u5DF2\u5F00\u542F\uFF0C\u4F1A\u626B\u63CF\u5E76\u540C\u6B65\u5173\u8054 L4 \u9875\u9762" : "\u5DF2\u5173\u95ED\uFF0C\u53EA\u540C\u6B65\u5F53\u524D\u9875\u9762")))), /* @__PURE__ */ React$1.createElement("div", {
31296
31580
  className: "mdd-local-ai-action-notice"
31297
31581
  }, "\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u53EA\u4F1A\u540C\u6B65\u5F53\u524D\u9875\u9762\u7684\u672C\u5730\u53D8\u66F4\uFF1B\u5982\u679C\u5173\u8054\u5B50 L4 \u9875\u9762\u4E5F\u5728\u672C\u5730\u6539\u8FC7\uFF0C\u8BF7\u6253\u5F00\u5BF9\u5E94\u5B50\u9875\u9762\u7684 L4 \u5730\u5740\uFF0C\u5206\u522B\u6267\u884C\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\u5E76\u5728\u9875\u9762\u4E0A\u70B9\u51FB\u4FDD\u5B58\u3002")), /* @__PURE__ */ React$1.createElement("div", {
31298
31582
  className: "mdd-local-ai-section"
@@ -31383,7 +31667,68 @@ function LocalAIDrawer(props) {
31383
31667
  className: "mdd-local-ai-title"
31384
31668
  }, "\u4F7F\u7528\u65B9\u5F0F"), /* @__PURE__ */ React$1.createElement("div", {
31385
31669
  className: "mdd-local-ai-tips"
31386
- }, /* @__PURE__ */ React$1.createElement("div", null, "1. \u9996\u6B21\u4F7F\u7528\u5148\u5168\u5C40\u5B89\u88C5\uFF1Anpm i -g @cniot/mdd-ai-bridge\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "2. \u5B89\u88C5\u540E\u5728\u4EFB\u610F\u76EE\u5F55\u8FD0\u884C\uFF1Amdd-ai-bridge\u3002\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8FD0\u884C\uFF1Anpx @cniot/mdd-ai-bridge\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "3. \u70B9\u51FB\u201C\u53D1\u9001\u5230\u672C\u5730 AI\u201D\uFF0C\u5F53\u524D\u9875\u9762\u4F1A\u5199\u5165\u672C\u5730\u5DE5\u4F5C\u533A\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "4. \u7528 Cursor\u3001Qoder\u3001Codex CLI \u7B49\u5DE5\u5177\u6253\u5F00\u76EE\u5F55\u5E76\u4FEE\u6539\u6587\u4EF6\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "5. \u70B9\u51FB\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\uFF0C\u786E\u8BA4\u9884\u89C8\u540E\u7EE7\u7EED\u4F7F\u7528\u539F\u4FDD\u5B58\u6309\u94AE\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "\u7EBF\u4E0A HTTP \u9875\u9762\u4F1A\u81EA\u52A8\u6253\u5F00\u672C\u5730 Bridge relay \u7A97\u53E3\uFF0C\u8BF7\u5141\u8BB8\u6D4F\u89C8\u5668\u5F39\u7A97\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "\u672C\u5730\u5DE5\u4F5C\u533A\u9ED8\u8BA4\u5728 ~/.mdd-ai-workspace\u3002"))));
31670
+ }, /* @__PURE__ */ React$1.createElement("div", null, "1. \u9996\u6B21\u4F7F\u7528\u5148\u5168\u5C40\u5B89\u88C5\uFF1Anpm i -g @cniot/mdd-ai-bridge\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "2. \u5B89\u88C5\u540E\u5728\u4EFB\u610F\u76EE\u5F55\u8FD0\u884C\uFF1Amdd-ai-bridge\u3002\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8FD0\u884C\uFF1Anpx @cniot/mdd-ai-bridge\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "3. \u70B9\u51FB\u201C\u53D1\u9001\u5230\u672C\u5730 AI\u201D\uFF0C\u5F53\u524D\u9875\u9762\u4F1A\u5199\u5165\u672C\u5730\u5DE5\u4F5C\u533A\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "4. \u7528 Cursor\u3001Qoder\u3001Codex CLI \u7B49\u5DE5\u5177\u6253\u5F00\u76EE\u5F55\u5E76\u4FEE\u6539\u6587\u4EF6\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "5. \u70B9\u51FB\u201C\u540C\u6B65\u672C\u5730\u4FEE\u6539\u201D\uFF0C\u786E\u8BA4\u9884\u89C8\u540E\u7EE7\u7EED\u4F7F\u7528\u539F\u4FDD\u5B58\u6309\u94AE\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "\u7EBF\u4E0A HTTP \u9875\u9762\u4F1A\u81EA\u52A8\u6253\u5F00\u672C\u5730 Bridge relay \u7A97\u53E3\uFF0C\u8BF7\u5141\u8BB8\u6D4F\u89C8\u5668\u5F39\u7A97\u3002"), /* @__PURE__ */ React$1.createElement("div", null, "\u672C\u5730\u5DE5\u4F5C\u533A\u9ED8\u8BA4\u5728 ~/.mdd-ai-workspace\u3002"))), /* @__PURE__ */ React$1.createElement(Dialog, {
31671
+ v2: true,
31672
+ centered: true,
31673
+ visible: i18nDialogVisible,
31674
+ title: "\u540C\u6B65 L4 \u591A\u8BED\u8A00",
31675
+ width: "960px",
31676
+ footer: false,
31677
+ onClose: () => setI18nDialogVisible(false),
31678
+ onCancel: () => setI18nDialogVisible(false)
31679
+ }, /* @__PURE__ */ React$1.createElement("div", {
31680
+ className: "mdd-local-ai-i18n-dialog"
31681
+ }, /* @__PURE__ */ React$1.createElement("div", {
31682
+ className: "mdd-local-ai-i18n-hero"
31683
+ }, /* @__PURE__ */ React$1.createElement("div", null, /* @__PURE__ */ React$1.createElement("div", {
31684
+ className: "mdd-local-ai-i18n-kicker"
31685
+ }, "Local AI i18n task"), /* @__PURE__ */ React$1.createElement("div", {
31686
+ className: "mdd-local-ai-i18n-title"
31687
+ }, "\u751F\u6210\u672C\u5730 AI \u591A\u8BED\u8A00\u4EFB\u52A1"), /* @__PURE__ */ React$1.createElement("div", {
31688
+ className: "mdd-local-ai-i18n-desc"
31689
+ }, syncLinkedPages ? "\u5DF2\u5F00\u542F\u9012\u5F52\u5B50\u9875\u9762\uFF0C\u4F1A\u5148\u540C\u6B65\u5F53\u524D\u9875\u9762\u548C\u5173\u8054 L4 \u9875\u9762\uFF0C\u518D\u751F\u6210\u591A\u9875\u9762\u591A\u8BED\u8A00\u63D0\u793A\u8BCD\u3002" : "\u5148\u786E\u8BA4\u5F53\u524D L4 \u5DE5\u4F5C\u533A\u5DF2\u540C\u6B65\uFF0C\u518D\u8BA9\u672C\u5730 AI \u8865\u9F50\u4E3B\u5DE5\u7A0B\u82F1\u6587\u548C\u8D8A\u5357\u8BED\u8BCD\u6761\u3002"), /* @__PURE__ */ React$1.createElement("div", {
31690
+ className: "mdd-local-ai-i18n-langs"
31691
+ }, /* @__PURE__ */ React$1.createElement("span", null, "English"), /* @__PURE__ */ React$1.createElement("span", null, "Ti\u1EBFng Vi\u1EC7t"), syncLinkedPages ? /* @__PURE__ */ React$1.createElement("span", null, "\u9012\u5F52 L4") : null)), /* @__PURE__ */ React$1.createElement("span", {
31692
+ className: "mdd-local-ai-i18n-code"
31693
+ }, pageCode)), /* @__PURE__ */ React$1.createElement("div", {
31694
+ className: "mdd-local-ai-i18n-card"
31695
+ }, /* @__PURE__ */ React$1.createElement("div", {
31696
+ className: "mdd-local-ai-i18n-field"
31697
+ }, /* @__PURE__ */ React$1.createElement("div", {
31698
+ className: "mdd-local-ai-i18n-field-head"
31699
+ }, /* @__PURE__ */ React$1.createElement("label", null, "\u4E3B\u5DE5\u7A0B tms-mach36 \u672C\u5730\u7EDD\u5BF9\u8DEF\u5F84"), /* @__PURE__ */ React$1.createElement("span", null, "\u7528\u4E8E\u5B9A\u4F4D src/i18n/strings")), /* @__PURE__ */ React$1.createElement(Input$1, {
31700
+ value: i18nMainProjectPath,
31701
+ onChange: setI18nMainProjectPath,
31702
+ placeholder: DEFAULT_MAIN_PROJECT_PATH,
31703
+ className: "mdd-local-ai-i18n-input"
31704
+ }))), /* @__PURE__ */ React$1.createElement("div", {
31705
+ className: "mdd-local-ai-i18n-paths"
31706
+ }, /* @__PURE__ */ React$1.createElement("div", null, /* @__PURE__ */ React$1.createElement("span", null, "L4 \u5DE5\u4F5C\u533A"), /* @__PURE__ */ React$1.createElement("strong", null, (i18nWorkspaceInfo == null ? void 0 : i18nWorkspaceInfo.dir) || workspacePath || expectedWorkspacePath)), /* @__PURE__ */ React$1.createElement("div", null, /* @__PURE__ */ React$1.createElement("span", null, "\u82F1\u6587\u8BCD\u6761"), /* @__PURE__ */ React$1.createElement("strong", null, `${trimEndSlash(i18nMainProjectPath || DEFAULT_MAIN_PROJECT_PATH)}/src/i18n/strings/en-US.json`)), /* @__PURE__ */ React$1.createElement("div", null, /* @__PURE__ */ React$1.createElement("span", null, "\u8D8A\u5357\u8BED\u8BCD\u6761"), /* @__PURE__ */ React$1.createElement("strong", null, `${trimEndSlash(i18nMainProjectPath || DEFAULT_MAIN_PROJECT_PATH)}/src/i18n/strings/vi-VN.json`))), i18nWorkspaceInfo ? /* @__PURE__ */ React$1.createElement("div", {
31707
+ className: `mdd-local-ai-i18n-state${i18nWorkspaceInfo.created ? " is-created" : ""}`
31708
+ }, i18nWorkspaceInfo.recursiveSynced ? `\u5DF2\u6309\u9012\u5F52\u6A21\u5F0F\u540C\u6B65\u5F53\u524D\u9875\u9762\u548C ${((_j = i18nWorkspaceInfo.linkedPages) == null ? void 0 : _j.syncedCount) || 0} \u4E2A\u5173\u8054 L4 \u9875\u9762${((_k = i18nWorkspaceInfo.linkedPages) == null ? void 0 : _k.failedCount) ? `\uFF0C\u53E6\u6709 ${i18nWorkspaceInfo.linkedPages.failedCount} \u4E2A\u5173\u8054\u9875\u9762\u9700\u8981\u5904\u7406` : ""}\u3002` : i18nWorkspaceInfo.created ? "\u5F53\u524D L4 \u9875\u9762\u6B64\u524D\u672A\u540C\u6B65\uFF0C\u5DF2\u5148\u53D1\u9001\u5230\u672C\u5730 AI \u5DE5\u4F5C\u533A\u3002" : "\u5F53\u524D L4 \u9875\u9762\u672C\u5730\u5DE5\u4F5C\u533A\u5DF2\u5B58\u5728\uFF0C\u8BF7\u6253\u5F00\u8BE5\u76EE\u5F55\u8BA9\u672C\u5730 AI \u6267\u884C\u63D0\u793A\u8BCD\u3002") : /* @__PURE__ */ React$1.createElement("div", {
31709
+ className: "mdd-local-ai-i18n-checklist"
31710
+ }, /* @__PURE__ */ React$1.createElement("div", null, "\u68C0\u67E5\u5F53\u524D L4 \u5DE5\u4F5C\u533A\u662F\u5426\u5B58\u5728"), /* @__PURE__ */ React$1.createElement("div", null, syncLinkedPages ? "\u9012\u5F52\u540C\u6B65\u5F53\u524D\u9875\u9762\u548C\u5173\u8054 L4 \u9875\u9762" : "\u672A\u540C\u6B65\u65F6\u81EA\u52A8\u53D1\u9001\u5F53\u524D\u9875\u9762\u5230\u672C\u5730 AI"), /* @__PURE__ */ React$1.createElement("div", null, syncLinkedPages ? "\u751F\u6210\u8986\u76D6\u7236\u5B50\u9875\u9762\u7684\u63D0\u793A\u8BCD\u5E76\u53BB\u91CD\u540C\u6B65\u8BCD\u6761" : "\u751F\u6210\u63D0\u793A\u8BCD\u5E76\u8981\u6C42\u672C\u5730 AI \u53BB\u91CD\u5199\u5165 en-US.json \u548C vi-VN.json")), i18nPrompt ? /* @__PURE__ */ React$1.createElement("div", {
31711
+ className: "mdd-local-ai-i18n-prompt"
31712
+ }, /* @__PURE__ */ React$1.createElement("div", {
31713
+ className: "mdd-local-ai-i18n-prompt-head"
31714
+ }, /* @__PURE__ */ React$1.createElement("span", null, "\u7ED9\u672C\u5730 AI \u7684\u63D0\u793A\u8BCD"), /* @__PURE__ */ React$1.createElement(CnButton, {
31715
+ size: "small",
31716
+ onClick: handleCopyI18nPrompt
31717
+ }, "\u590D\u5236\u63D0\u793A\u8BCD")), /* @__PURE__ */ React$1.createElement("pre", null, i18nPrompt)) : null, /* @__PURE__ */ React$1.createElement("div", {
31718
+ className: "mdd-local-ai-i18n-footer"
31719
+ }, /* @__PURE__ */ React$1.createElement(CnButton, {
31720
+ onClick: () => setI18nDialogVisible(false)
31721
+ }, "\u53D6\u6D88"), /* @__PURE__ */ React$1.createElement(CnButton, {
31722
+ loading: loadingAction === "open",
31723
+ onClick: handleOpen
31724
+ }, "\u6253\u5F00 L4 \u5DE5\u4F5C\u533A"), /* @__PURE__ */ React$1.createElement(CnButton, {
31725
+ type: "primary",
31726
+ loading: loadingAction === "i18n",
31727
+ onClick: handleI18nConfirm
31728
+ }, i18nPrompt ? "\u91CD\u65B0\u751F\u6210\u63D0\u793A\u8BCD" : "\u786E\u5B9A\u5E76\u751F\u6210\u63D0\u793A\u8BCD"), i18nPrompt ? /* @__PURE__ */ React$1.createElement(CnButton, {
31729
+ type: "primary",
31730
+ onClick: handleCopyI18nPrompt
31731
+ }, "\u590D\u5236\u63D0\u793A\u8BCD") : null))));
31387
31732
  }
31388
31733
  var index = "";
31389
31734
  const isDebug = ((_b = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a.search) == null ? void 0 : _b.indexOf("debug")) >= 0 || ((_c = window.localStorage) == null ? void 0 : _c.__l4_location_search_debug__) === "true";
@@ -31922,7 +32267,7 @@ function getDefaultIndexStyle() {
31922
32267
  `;
31923
32268
  }
31924
32269
  const name = "@cniot/mdd-editor";
31925
- const version = "0.3.8";
32270
+ const version = "0.3.10";
31926
32271
  const description = "\u6A21\u578B\u9A71\u52A8\u7F16\u8F91\u5668";
31927
32272
  const scripts = {
31928
32273
  build: "vite build"