@cniot/mdd-editor 0.3.9 → 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
@@ -30440,7 +30440,11 @@ function getPageCode(schemaJson = {}, pageMeta = {}) {
30440
30440
  const MIN_BRIDGE_VERSION = "0.1.4";
30441
30441
  const START_COMMAND = `npm i -g @cniot/mdd-ai-bridge
30442
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";
30443
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));
30444
30448
  const parseSchema = (value) => {
30445
30449
  if (!value)
30446
30450
  return null;
@@ -30708,6 +30712,166 @@ const collectLinkedPageReferences = ({ schemaJson, scriptInfo, rootCode, extraSo
30708
30712
  );
30709
30713
  return mergeL4References([...schemaReferences, ...scriptReferences, ...extraReferences], rootCode);
30710
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
+ };
30711
30875
  const createLinkedPageExtraSources = (data = {}, prefix = "payload") => {
30712
30876
  const sourceFields = [
30713
30877
  "schemaInfo",
@@ -30849,6 +31013,9 @@ const normalizeLinkedPagePayload = (reference, pageData) => {
30849
31013
  };
30850
31014
  };
30851
31015
  const buildLinkedPagePayload = async (payload, config2) => {
31016
+ if (!(config2 == null ? void 0 : config2.syncLinkedPages)) {
31017
+ return payload;
31018
+ }
30852
31019
  const rootSchemaJson = parseSchema(payload.schemaInfo) || {};
30853
31020
  const resolver = getLinkedPageResolver(config2);
30854
31021
  let rootPageData = null;
@@ -31000,7 +31167,7 @@ const createLinkedPullSummary = (res) => {
31000
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`;
31001
31168
  };
31002
31169
  function LocalAIDrawer(props) {
31003
- var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i;
31170
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k;
31004
31171
  const { schema, scriptInfo, pageMeta = {}, bridgeConfig, onApply } = props;
31005
31172
  const config2 = React$1.useMemo(() => normalizeBridgeConfig(bridgeConfig), [bridgeConfig]);
31006
31173
  const [baseURL, setBaseURL] = React$1.useState(config2.baseURL || DEFAULT_BRIDGE_URL);
@@ -31011,6 +31178,16 @@ function LocalAIDrawer(props) {
31011
31178
  const [lastSummary, setLastSummary] = React$1.useState("");
31012
31179
  const [pullError, setPullError] = React$1.useState(null);
31013
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);
31014
31191
  const schemaJson = ((_a2 = schema == null ? void 0 : schema.getAllJSON) == null ? void 0 : _a2.call(schema)) || {};
31015
31192
  const pageCode = getPageCode(schemaJson, pageMeta);
31016
31193
  const getPayload = React$1.useCallback(() => {
@@ -31070,6 +31247,27 @@ function LocalAIDrawer(props) {
31070
31247
  \u6211\u7684\u9700\u6C42\u662F\uFF1A`,
31071
31248
  [expectedWorkspacePath, pageCode]
31072
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
+ );
31073
31271
  const handleCopy = React$1.useCallback(async (text, successText) => {
31074
31272
  try {
31075
31273
  await copyText(text);
@@ -31104,7 +31302,10 @@ function LocalAIDrawer(props) {
31104
31302
  setPullError(null);
31105
31303
  setLastDiffSummary(null);
31106
31304
  try {
31107
- const payload = await buildLinkedPagePayload(getPayload(), config2);
31305
+ const payload = await buildLinkedPagePayload(getPayload(), {
31306
+ ...config2,
31307
+ syncLinkedPages
31308
+ });
31108
31309
  const res = await pushPage(baseURL, pageCode, payload);
31109
31310
  setWorkspacePath((res == null ? void 0 : res.dir) || "");
31110
31311
  setBridgeInfo((prev) => {
@@ -31116,7 +31317,7 @@ function LocalAIDrawer(props) {
31116
31317
  });
31117
31318
  setStatus("\u5DF2\u540C\u6B65\u5230\u672C\u5730");
31118
31319
  setLastSummary(createLinkedPushSummary(res, pageCode));
31119
- 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) {
31120
31321
  CnMessage.success(
31121
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`
31122
31323
  );
@@ -31129,6 +31330,68 @@ function LocalAIDrawer(props) {
31129
31330
  setLoadingAction("");
31130
31331
  }
31131
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]);
31132
31395
  const handlePull = async () => {
31133
31396
  setLoadingAction("pull");
31134
31397
  setPullError(null);
@@ -31296,7 +31559,24 @@ function LocalAIDrawer(props) {
31296
31559
  }, "\u6253\u5F00\u76EE\u5F55"), /* @__PURE__ */ React$1.createElement(CnButton, {
31297
31560
  loading: loadingAction === "rollback",
31298
31561
  onClick: handleRollback
31299
- }, "\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", {
31300
31580
  className: "mdd-local-ai-action-notice"
31301
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", {
31302
31582
  className: "mdd-local-ai-section"
@@ -31387,7 +31667,68 @@ function LocalAIDrawer(props) {
31387
31667
  className: "mdd-local-ai-title"
31388
31668
  }, "\u4F7F\u7528\u65B9\u5F0F"), /* @__PURE__ */ React$1.createElement("div", {
31389
31669
  className: "mdd-local-ai-tips"
31390
- }, /* @__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))));
31391
31732
  }
31392
31733
  var index = "";
31393
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";
@@ -31926,7 +32267,7 @@ function getDefaultIndexStyle() {
31926
32267
  `;
31927
32268
  }
31928
32269
  const name = "@cniot/mdd-editor";
31929
- const version = "0.3.9";
32270
+ const version = "0.3.10";
31930
32271
  const description = "\u6A21\u578B\u9A71\u52A8\u7F16\u8F91\u5668";
31931
32272
  const scripts = {
31932
32273
  build: "vite build"