dominds 1.26.2 → 1.26.4
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/README.md +2 -0
- package/README.zh.md +2 -0
- package/dist/cli.js +10 -8
- package/dist/docs/cli-usage.md +1 -1
- package/dist/docs/cli-usage.zh.md +1 -1
- package/dist/llm/gen/mock.js +11 -3
- package/dist/llm/kernel-driver/context-health.d.ts +1 -0
- package/dist/llm/kernel-driver/context-health.js +7 -0
- package/dist/llm/kernel-driver/drive.js +25 -30
- package/dist/llm/kernel-driver/idle-reminder-wake.js +6 -2
- package/dist/llm/kernel-driver/reminder-context.d.ts +26 -0
- package/dist/llm/kernel-driver/reminder-context.js +82 -0
- package/dist/llm/kernel-driver/reply-guidance.js +10 -4
- package/dist/llm/kernel-driver/tellask-special.js +50 -35
- package/dist/mcp/supervisor.js +2 -2
- package/dist/minds/system-prompt-parts.js +30 -30
- package/dist/minds/system-prompt.js +63 -40
- package/dist/persistence.js +15 -1
- package/dist/runtime/driver-messages.d.ts +38 -7
- package/dist/runtime/driver-messages.js +320 -119
- package/dist/runtime/inter-dialog-format.js +24 -12
- package/dist/runtime/reply-prompt-copy.d.ts +8 -8
- package/dist/runtime/reply-prompt-copy.js +69 -38
- package/dist/server/api-routes.js +7 -2
- package/dist/server/certificates.js +65 -25
- package/dist/server/dominds-self-update.d.ts +1 -0
- package/dist/server/dominds-self-update.js +113 -56
- package/dist/supervisor-protocol.d.ts +2 -3
- package/dist/tools/mcp.js +12 -12
- package/dist/tools/prompts/control/en/index.md +2 -2
- package/dist/tools/prompts/control/en/principles.md +12 -12
- package/dist/tools/prompts/control/en/scenarios.md +5 -5
- package/dist/tools/prompts/control/en/tools.md +10 -10
- package/dist/tools/prompts/control/zh/index.md +3 -3
- package/dist/tools/prompts/control/zh/principles.md +12 -12
- package/dist/tools/prompts/control/zh/scenarios.md +7 -7
- package/dist/tools/prompts/control/zh/tools.md +11 -11
- package/dist/tools/prompts/mcp_admin/en/principles.md +4 -4
- package/dist/tools/prompts/mcp_admin/en/scenarios.md +1 -1
- package/dist/tools/prompts/mcp_admin/en/tools.md +3 -3
- package/dist/tools/prompts/mcp_admin/zh/principles.md +4 -4
- package/dist/tools/prompts/mcp_admin/zh/scenarios.md +1 -1
- package/dist/tools/prompts/mcp_admin/zh/tools.md +3 -3
- package/dist/tools/team_mgmt-mcp-manual.js +12 -12
- package/package.json +2 -1
- package/webapp/dist/assets/{_basePickBy-DUivPKf7.js → _basePickBy-mFK6EVZU.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-DUivPKf7.js.map → _basePickBy-mFK6EVZU.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-hcs024vD.js → _baseUniq-C8zyOqn7.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-hcs024vD.js.map → _baseUniq-C8zyOqn7.js.map} +1 -1
- package/webapp/dist/assets/{arc-Dr6-FXp5.js → arc-Vdl3uhV8.js} +2 -2
- package/webapp/dist/assets/{arc-Dr6-FXp5.js.map → arc-Vdl3uhV8.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-DXqcDq4R.js.map → architectureDiagram-2XIMDMQ5-D3Xtb8u_.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js → blockDiagram-WCTKOSBZ-Bozcnodw.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-IIP6LGXS.js.map → blockDiagram-WCTKOSBZ-Bozcnodw.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js → c4Diagram-IC4MRINW-CLkxlY6N.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-D_d3F9XD.js.map → c4Diagram-IC4MRINW-CLkxlY6N.js.map} +1 -1
- package/webapp/dist/assets/{channel-CWWjsXtU.js → channel-CqGyLCM_.js} +2 -2
- package/webapp/dist/assets/{channel-CWWjsXtU.js.map → channel-CqGyLCM_.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js → chunk-4BX2VUAB-BNsJpMh4.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BF4yph2W.js.map → chunk-4BX2VUAB-BNsJpMh4.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js → chunk-55IACEB6-B59p6vzX.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-Hn3CmDYz.js.map → chunk-55IACEB6-B59p6vzX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js → chunk-FMBD7UC4-CB17a_Ki.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-C05pl9Ov.js.map → chunk-FMBD7UC4-CB17a_Ki.js.map} +1 -1
- package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js → chunk-JSJVCQXG-DVnVflN-.js} +2 -2
- package/webapp/dist/assets/{chunk-JSJVCQXG-BVlq_BAS.js.map → chunk-JSJVCQXG-DVnVflN-.js.map} +1 -1
- package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js → chunk-KX2RTZJC-D9_5LvIO.js} +2 -2
- package/webapp/dist/assets/{chunk-KX2RTZJC-BQoaRWif.js.map → chunk-KX2RTZJC-D9_5LvIO.js.map} +1 -1
- package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js → chunk-NQ4KR5QH-CZWI2G2c.js} +4 -4
- package/webapp/dist/assets/{chunk-NQ4KR5QH-0okCAXtW.js.map → chunk-NQ4KR5QH-CZWI2G2c.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js → chunk-QZHKN3VN-WCLg8cNX.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-DEiprgz-.js.map → chunk-QZHKN3VN-WCLg8cNX.js.map} +1 -1
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js → chunk-WL4C6EOR-BFkz_P__.js} +6 -6
- package/webapp/dist/assets/{chunk-WL4C6EOR-B-Xkb3lo.js.map → chunk-WL4C6EOR-BFkz_P__.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js → classDiagram-VBA2DB6C-DWQ1VnaI.js} +7 -7
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-DCCQrdwF.js.map → classDiagram-VBA2DB6C-DWQ1VnaI.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js} +7 -7
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-DCCQrdwF.js.map → classDiagram-v2-RAHNMMFH-DWQ1VnaI.js.map} +1 -1
- package/webapp/dist/assets/{clone-Drtik9pk.js → clone-D3QHqx6z.js} +2 -2
- package/webapp/dist/assets/{clone-Drtik9pk.js.map → clone-D3QHqx6z.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js → cose-bilkent-S5V4N54A-D2dZHRG3.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-BBWvHErL.js.map → cose-bilkent-S5V4N54A-D2dZHRG3.js.map} +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js → dagre-KLK3FWXG-Cwz7pFDo.js} +7 -7
- package/webapp/dist/assets/{dagre-KLK3FWXG-2qk0ikdt.js.map → dagre-KLK3FWXG-Cwz7pFDo.js.map} +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js → diagram-E7M64L7V-C6z0VVoW.js} +8 -8
- package/webapp/dist/assets/{diagram-E7M64L7V-C1DbHDbf.js.map → diagram-E7M64L7V-C6z0VVoW.js.map} +1 -1
- package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js → diagram-IFDJBPK2-CZ1KR1hO.js} +7 -7
- package/webapp/dist/assets/{diagram-IFDJBPK2-DToz8zk9.js.map → diagram-IFDJBPK2-CZ1KR1hO.js.map} +1 -1
- package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js → diagram-P4PSJMXO-ChwZDZYa.js} +7 -7
- package/webapp/dist/assets/{diagram-P4PSJMXO-B9V-tQMe.js.map → diagram-P4PSJMXO-ChwZDZYa.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js → erDiagram-INFDFZHY-DCnHsk_Z.js} +5 -5
- package/webapp/dist/assets/{erDiagram-INFDFZHY-CV68FwGf.js.map → erDiagram-INFDFZHY-DCnHsk_Z.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js → flowDiagram-PKNHOUZH-C5Hi85ST.js} +7 -7
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-CW06almb.js.map → flowDiagram-PKNHOUZH-C5Hi85ST.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js → ganttDiagram-A5KZAMGK-vT15RP6A.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-C96NncCU.js.map → ganttDiagram-A5KZAMGK-vT15RP6A.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CAuIexWi.js.map → gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js.map} +1 -1
- package/webapp/dist/assets/{graph-CvhwAY6w.js → graph-CqFTrHii.js} +3 -3
- package/webapp/dist/assets/{graph-CvhwAY6w.js.map → graph-CqFTrHii.js.map} +1 -1
- package/webapp/dist/assets/{index-BOO_zFrI.js → index-C_PzQ5W5.js} +600 -400
- package/webapp/dist/assets/{index-BOO_zFrI.js.map → index-C_PzQ5W5.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js → infoDiagram-LFFYTUFH-DlyOw8IT.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-C16Sckpz.js.map → infoDiagram-LFFYTUFH-DlyOw8IT.js.map} +1 -1
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js → ishikawaDiagram-PHBUUO56-iZCVn19K.js} +2 -2
- package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-oNG6I0p3.js.map → ishikawaDiagram-PHBUUO56-iZCVn19K.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js → journeyDiagram-4ABVD52K-B95gnBKj.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-437hhFHC.js.map → journeyDiagram-4ABVD52K-B95gnBKj.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js → kanban-definition-K7BYSVSG-DQ2gfPUK.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DsCV_Tpx.js.map → kanban-definition-K7BYSVSG-DQ2gfPUK.js.map} +1 -1
- package/webapp/dist/assets/{layout-BttZf7fQ.js → layout-VOBFudHV.js} +5 -5
- package/webapp/dist/assets/{layout-BttZf7fQ.js.map → layout-VOBFudHV.js.map} +1 -1
- package/webapp/dist/assets/{linear-B75vD4Ho.js → linear-BtBp93s2.js} +2 -2
- package/webapp/dist/assets/{linear-B75vD4Ho.js.map → linear-BtBp93s2.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js → mindmap-definition-YRQLILUH-m2w1nBbY.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-DA1-XaNi.js.map → mindmap-definition-YRQLILUH-m2w1nBbY.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js → pieDiagram-SKSYHLDU-ByoyS2as.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-Bx6hUJ4Q.js.map → pieDiagram-SKSYHLDU-ByoyS2as.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js → quadrantDiagram-337W2JSQ-BnKSsLfA.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-zyduIle0.js.map → quadrantDiagram-337W2JSQ-BnKSsLfA.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js → requirementDiagram-Z7DCOOCP-jU2C7qJN.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-BgfjyEJM.js.map → requirementDiagram-Z7DCOOCP-jU2C7qJN.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js → sankeyDiagram-WA2Y5GQK-R175tX8b.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-lmOWaczS.js.map → sankeyDiagram-WA2Y5GQK-R175tX8b.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-DqJz-iYI.js.map → sequenceDiagram-2WXFIKYE-CBhN4j2Q.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js → stateDiagram-RAJIS63D-DZSAyRfJ.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-CngWYuX-.js.map → stateDiagram-RAJIS63D-DZSAyRfJ.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js → stateDiagram-v2-FVOUBMTO-x29lKJpl.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-BxyHvrvU.js.map → stateDiagram-v2-FVOUBMTO-x29lKJpl.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js → timeline-definition-YZTLITO2-BQR2qEXt.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-C7t6WVS3.js.map → timeline-definition-YZTLITO2-BQR2qEXt.js.map} +1 -1
- package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js → treemap-KZPCXAKY-b823qTE1.js} +5 -5
- package/webapp/dist/assets/{treemap-KZPCXAKY-BDZ3n5TC.js.map → treemap-KZPCXAKY-b823qTE1.js.map} +1 -1
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js → vennDiagram-LZ73GAT5-BrxPNUYz.js} +2 -2
- package/webapp/dist/assets/{vennDiagram-LZ73GAT5-CEw7GPed.js.map → vennDiagram-LZ73GAT5-BrxPNUYz.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js → xychartDiagram-JWTSCODW-BgOzlz6Z.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-DmS8BiaA.js.map → xychartDiagram-JWTSCODW-BgOzlz6Z.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-KLK3FWXG-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-KLK3FWXG-Cwz7pFDo.js","assets/graph-CqFTrHii.js","assets/_baseUniq-C8zyOqn7.js","assets/layout-VOBFudHV.js","assets/_basePickBy-mFK6EVZU.js","assets/clone-D3QHqx6z.js","assets/cose-bilkent-S5V4N54A-D2dZHRG3.js","assets/cytoscape.esm-Bm8DJGmZ.js","assets/c4Diagram-IC4MRINW-CLkxlY6N.js","assets/chunk-JSJVCQXG-DVnVflN-.js","assets/flowDiagram-PKNHOUZH-C5Hi85ST.js","assets/chunk-FMBD7UC4-CB17a_Ki.js","assets/chunk-55IACEB6-B59p6vzX.js","assets/chunk-KX2RTZJC-D9_5LvIO.js","assets/channel-CqGyLCM_.js","assets/erDiagram-INFDFZHY-DCnHsk_Z.js","assets/gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js","assets/chunk-4BX2VUAB-BNsJpMh4.js","assets/chunk-QZHKN3VN-WCLg8cNX.js","assets/treemap-KZPCXAKY-b823qTE1.js","assets/ganttDiagram-A5KZAMGK-vT15RP6A.js","assets/linear-BtBp93s2.js","assets/init-ZxktEp_H.js","assets/defaultLocale-B2RvLBDe.js","assets/infoDiagram-LFFYTUFH-DlyOw8IT.js","assets/pieDiagram-SKSYHLDU-ByoyS2as.js","assets/arc-Vdl3uhV8.js","assets/ordinal-CxptdPJm.js","assets/quadrantDiagram-337W2JSQ-BnKSsLfA.js","assets/xychartDiagram-JWTSCODW-BgOzlz6Z.js","assets/requirementDiagram-Z7DCOOCP-jU2C7qJN.js","assets/sequenceDiagram-2WXFIKYE-CBhN4j2Q.js","assets/classDiagram-VBA2DB6C-DWQ1VnaI.js","assets/chunk-WL4C6EOR-BFkz_P__.js","assets/classDiagram-v2-RAHNMMFH-DWQ1VnaI.js","assets/stateDiagram-RAJIS63D-DZSAyRfJ.js","assets/chunk-NQ4KR5QH-CZWI2G2c.js","assets/stateDiagram-v2-FVOUBMTO-x29lKJpl.js","assets/journeyDiagram-4ABVD52K-B95gnBKj.js","assets/timeline-definition-YZTLITO2-BQR2qEXt.js","assets/mindmap-definition-YRQLILUH-m2w1nBbY.js","assets/kanban-definition-K7BYSVSG-DQ2gfPUK.js","assets/sankeyDiagram-WA2Y5GQK-R175tX8b.js","assets/diagram-P4PSJMXO-ChwZDZYa.js","assets/diagram-IFDJBPK2-CZ1KR1hO.js","assets/blockDiagram-WCTKOSBZ-Bozcnodw.js","assets/architectureDiagram-2XIMDMQ5-D3Xtb8u_.js","assets/diagram-E7M64L7V-C6z0VVoW.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
@@ -279,10 +279,14 @@ function getUiStrings(language2) {
|
|
|
279
279
|
domindsVersionRestartAvailableTitle: "新版本已就绪,点击重启",
|
|
280
280
|
domindsVersionInstallConfirm: "检测到 npm registry 上有新版 Dominds。\n\n当前: v<current>\n最新: v<latest>\n\n现在安装并在完成后等待重启吗?",
|
|
281
281
|
domindsVersionRestartConfirm: "将以最新可用版本重启 Dominds 后台。\n\n当前: v<current>\n目标: v<latest>\n\n是否继续?",
|
|
282
|
+
domindsVersionForceRestartConfirm: "强制重启 Dominds 后台?\n\n当前: v<current>\n\n确认后会立即中断当前连接并重启后台。",
|
|
283
|
+
domindsVersionInstallAndRestartConfirm: "检查到新版本 v<latest>。\n\n当前: v<current>\n\n请选择使用新版重启,还是不执行升级流程、直接重启当前后台入口。",
|
|
284
|
+
domindsVersionUpdateChoiceTitle: "Dominds 更新重启",
|
|
285
|
+
domindsVersionUpdateChoiceInstallButton: "使用新版重启",
|
|
286
|
+
domindsVersionUpdateChoiceRestartButton: "直接重启",
|
|
282
287
|
domindsVersionInstallSuccess: "最新版 Dominds 已安装完成,请点击重启。",
|
|
283
288
|
domindsVersionInstallVerifiedAfterCommandFailure: "安装命令返回异常,但磁盘文件和版本探针已确认 v<latest> 安装成功,请点击重启。",
|
|
284
289
|
domindsVersionInstallInProgress: "后端正在安装……",
|
|
285
|
-
domindsVersionRestartScheduled: "Dominds 后台正在重启…",
|
|
286
290
|
domindsVersionRestartInProgress: "后端正在重启,若页面没有自动刷新,可手动刷新看看。",
|
|
287
291
|
domindsVersionActionFailedPrefix: "Dominds 更新失败:",
|
|
288
292
|
domindsVersionCheckUpdateAvailable: "检查完成:发现新版本 v<latest>,点击版本号可安装。",
|
|
@@ -458,6 +462,7 @@ function getUiStrings(language2) {
|
|
|
458
462
|
retryCountdownPrefix: "将在 ",
|
|
459
463
|
retryCountdownSuffix: " 后重试。",
|
|
460
464
|
invalidMessageFormatToast: "收到无效消息格式,请刷新页面。",
|
|
465
|
+
copyFailedToast: "复制失败 / Copy failed.",
|
|
461
466
|
linkCopiedToast: "链接已复制。",
|
|
462
467
|
linkCopyFailedToast: "复制链接失败。",
|
|
463
468
|
forkDialogFailedToast: "Fork 对话失败。",
|
|
@@ -626,8 +631,8 @@ function getUiStrings(language2) {
|
|
|
626
631
|
setupWriteRcWrite: "写入",
|
|
627
632
|
setupWriteRcOverwrite: "覆盖",
|
|
628
633
|
setupFileModalLoading: "加载中…",
|
|
629
|
-
setupFileModalSelectToCopy: "
|
|
630
|
-
setupFileModalCopy: "复制",
|
|
634
|
+
setupFileModalSelectToCopy: "可直接选择复制,或点击“复制 / Copy”按钮。",
|
|
635
|
+
setupFileModalCopy: "复制 / Copy",
|
|
631
636
|
setupSelectProviderModelFirst: "请先选择提供商与模型。",
|
|
632
637
|
setupSelectProminentModelParamsFirst: "请先为 prominent 模型参数选择取值。",
|
|
633
638
|
setupProminentModelParamUnset: "留空(不设置)",
|
|
@@ -675,10 +680,14 @@ function getUiStrings(language2) {
|
|
|
675
680
|
domindsVersionRestartAvailableTitle: "The latest Dominds is ready. Click to restart.",
|
|
676
681
|
domindsVersionInstallConfirm: "A newer Dominds version is available on npm registry.\n\nCurrent: v<current>\nLatest: v<latest>\n\nInstall it now and wait for restart?",
|
|
677
682
|
domindsVersionRestartConfirm: "Dominds backend will restart into the latest available version.\n\nCurrent: v<current>\nTarget: v<latest>\n\nContinue?",
|
|
683
|
+
domindsVersionForceRestartConfirm: "Force restart the Dominds backend?\n\nCurrent: v<current>\n\nConfirming will immediately interrupt the current connection and restart the backend.",
|
|
684
|
+
domindsVersionInstallAndRestartConfirm: "A newer version v<latest> is available.\n\nCurrent: v<current>\n\nChoose whether to restart into the latest version, or skip the update flow and restart the current backend entrypoint.",
|
|
685
|
+
domindsVersionUpdateChoiceTitle: "Dominds update restart",
|
|
686
|
+
domindsVersionUpdateChoiceInstallButton: "Restart into latest",
|
|
687
|
+
domindsVersionUpdateChoiceRestartButton: "Restart now",
|
|
678
688
|
domindsVersionInstallSuccess: "Latest Dominds is installed. Click restart when ready.",
|
|
679
689
|
domindsVersionInstallVerifiedAfterCommandFailure: "The install command returned an error, but installed files and version probe confirmed v<latest>. Click restart when ready.",
|
|
680
690
|
domindsVersionInstallInProgress: "Backend is installing…",
|
|
681
|
-
domindsVersionRestartScheduled: "Dominds backend is restarting…",
|
|
682
691
|
domindsVersionRestartInProgress: "Backend is restarting. If the page does not refresh automatically, try a manual refresh.",
|
|
683
692
|
domindsVersionActionFailedPrefix: "Dominds update failed: ",
|
|
684
693
|
domindsVersionCheckUpdateAvailable: "Check complete: v<latest> is available. Click the version to install.",
|
|
@@ -854,6 +863,7 @@ function getUiStrings(language2) {
|
|
|
854
863
|
retryCountdownPrefix: "Retrying in ",
|
|
855
864
|
retryCountdownSuffix: ".",
|
|
856
865
|
invalidMessageFormatToast: "Received invalid message format. Please refresh the page.",
|
|
866
|
+
copyFailedToast: "复制失败 / Copy failed.",
|
|
857
867
|
linkCopiedToast: "Link copied.",
|
|
858
868
|
linkCopyFailedToast: "Failed to copy link.",
|
|
859
869
|
forkDialogFailedToast: "Failed to fork dialog.",
|
|
@@ -1022,8 +1032,8 @@ function getUiStrings(language2) {
|
|
|
1022
1032
|
setupWriteRcWrite: "Write",
|
|
1023
1033
|
setupWriteRcOverwrite: "Overwrite",
|
|
1024
1034
|
setupFileModalLoading: "Loading…",
|
|
1025
|
-
setupFileModalSelectToCopy: "
|
|
1026
|
-
setupFileModalCopy: "Copy",
|
|
1035
|
+
setupFileModalSelectToCopy: "可直接选择复制,或点击“复制 / Copy”按钮。",
|
|
1036
|
+
setupFileModalCopy: "复制 / Copy",
|
|
1027
1037
|
setupSelectProviderModelFirst: "Please select a provider and model first.",
|
|
1028
1038
|
setupSelectProminentModelParamsFirst: "Please select values for prominent model params first.",
|
|
1029
1039
|
setupProminentModelParamUnset: "Leave unset",
|
|
@@ -5560,6 +5570,294 @@ class CreateDialogFlowController {
|
|
|
5560
5570
|
return `create-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
5561
5571
|
}
|
|
5562
5572
|
}
|
|
5573
|
+
const MANUAL_COPY_MODAL_ATTR = "data-dominds-manual-copy-modal";
|
|
5574
|
+
const MANUAL_COPY_TEXTS = {
|
|
5575
|
+
title: "需要手动复制 / Manual copy required",
|
|
5576
|
+
close: "关闭 / Close",
|
|
5577
|
+
selectAll: "全选文本 / Select all text",
|
|
5578
|
+
insecureHttpMessages: {
|
|
5579
|
+
zh: "当前页面通过 HTTP 非 localhost 地址访问,浏览器不会开放剪贴板权限。请在下方只读文本框中手动全选并复制。",
|
|
5580
|
+
en: "This page is loaded over HTTP from a non-localhost address, so the browser does not expose clipboard access. Select and copy the read-only text below manually."
|
|
5581
|
+
},
|
|
5582
|
+
unavailableMessages: {
|
|
5583
|
+
zh: "浏览器当前没有开放剪贴板写入权限。请在下方只读文本框中手动全选并复制。",
|
|
5584
|
+
en: "The browser has not granted clipboard write access. Select and copy the read-only text below manually."
|
|
5585
|
+
}
|
|
5586
|
+
};
|
|
5587
|
+
const manualCopyModalCleanups = /* @__PURE__ */ new WeakMap();
|
|
5588
|
+
function escapeHtmlText$2(value) {
|
|
5589
|
+
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
5590
|
+
}
|
|
5591
|
+
function isLocalClipboardHost(hostname) {
|
|
5592
|
+
const loopbackIpv4Match = /^127(?:\.\d{1,3}){3}$/.test(hostname);
|
|
5593
|
+
return hostname === "localhost" || hostname.endsWith(".localhost") || loopbackIpv4Match || hostname === "::1" || hostname === "[::1]";
|
|
5594
|
+
}
|
|
5595
|
+
function getManualCopyMessageHtml() {
|
|
5596
|
+
const insecureHttp = window.location.protocol === "http:" && !isLocalClipboardHost(window.location.hostname);
|
|
5597
|
+
const messages = insecureHttp ? MANUAL_COPY_TEXTS.insecureHttpMessages : MANUAL_COPY_TEXTS.unavailableMessages;
|
|
5598
|
+
return `
|
|
5599
|
+
<p class="manual-copy-message" id="manual-copy-message-zh" lang="zh">${escapeHtmlText$2(messages.zh)}</p>
|
|
5600
|
+
<p class="manual-copy-message" id="manual-copy-message-en" lang="en">${escapeHtmlText$2(messages.en)}</p>
|
|
5601
|
+
`;
|
|
5602
|
+
}
|
|
5603
|
+
async function copyTextToClipboard(text2, restoreFocusTo) {
|
|
5604
|
+
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
5605
|
+
try {
|
|
5606
|
+
await navigator.clipboard.writeText(text2);
|
|
5607
|
+
return true;
|
|
5608
|
+
} catch {
|
|
5609
|
+
}
|
|
5610
|
+
}
|
|
5611
|
+
try {
|
|
5612
|
+
if (!document.body) return false;
|
|
5613
|
+
const ta = document.createElement("textarea");
|
|
5614
|
+
const previousActiveElement = document.activeElement;
|
|
5615
|
+
try {
|
|
5616
|
+
ta.value = text2;
|
|
5617
|
+
ta.setAttribute("readonly", "true");
|
|
5618
|
+
ta.style.position = "fixed";
|
|
5619
|
+
ta.style.left = "-9999px";
|
|
5620
|
+
ta.style.top = "0";
|
|
5621
|
+
ta.style.opacity = "0";
|
|
5622
|
+
document.body.appendChild(ta);
|
|
5623
|
+
ta.focus();
|
|
5624
|
+
ta.select();
|
|
5625
|
+
ta.setSelectionRange(0, ta.value.length);
|
|
5626
|
+
const ok = document.execCommand("copy");
|
|
5627
|
+
return ok === true;
|
|
5628
|
+
} finally {
|
|
5629
|
+
ta.remove();
|
|
5630
|
+
const focusTarget = restoreFocusTo ?? (previousActiveElement instanceof HTMLElement ? previousActiveElement : null);
|
|
5631
|
+
if (focusTarget !== null && focusTarget.isConnected) {
|
|
5632
|
+
focusTarget.focus();
|
|
5633
|
+
}
|
|
5634
|
+
}
|
|
5635
|
+
} catch {
|
|
5636
|
+
return false;
|
|
5637
|
+
}
|
|
5638
|
+
}
|
|
5639
|
+
async function copyTextOrShowManualCopy(text2, restoreFocusTo) {
|
|
5640
|
+
const ok = await copyTextToClipboard(text2, restoreFocusTo);
|
|
5641
|
+
if (ok) return { kind: "copied" };
|
|
5642
|
+
showManualCopyModal(text2, restoreFocusTo);
|
|
5643
|
+
return { kind: "manual_copy_shown" };
|
|
5644
|
+
}
|
|
5645
|
+
function showManualCopyModal(text2, restoreFocusTo) {
|
|
5646
|
+
const existing = document.querySelector(`[${MANUAL_COPY_MODAL_ATTR}="true"]`);
|
|
5647
|
+
if (existing instanceof HTMLElement) {
|
|
5648
|
+
const cleanup = manualCopyModalCleanups.get(existing);
|
|
5649
|
+
if (cleanup) {
|
|
5650
|
+
cleanup();
|
|
5651
|
+
} else {
|
|
5652
|
+
existing.remove();
|
|
5653
|
+
}
|
|
5654
|
+
}
|
|
5655
|
+
const modal = document.createElement("div");
|
|
5656
|
+
modal.dataset.domindsManualCopyModal = "true";
|
|
5657
|
+
modal.innerHTML = `
|
|
5658
|
+
<style>
|
|
5659
|
+
${ICON_MASK_BASE_CSS}
|
|
5660
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] {
|
|
5661
|
+
position: fixed;
|
|
5662
|
+
inset: 0;
|
|
5663
|
+
z-index: 10000;
|
|
5664
|
+
display: flex;
|
|
5665
|
+
align-items: center;
|
|
5666
|
+
justify-content: center;
|
|
5667
|
+
padding: 20px;
|
|
5668
|
+
min-height: 0;
|
|
5669
|
+
box-sizing: border-box;
|
|
5670
|
+
font-family: var(--dominds-font-family, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
|
|
5671
|
+
}
|
|
5672
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-backdrop {
|
|
5673
|
+
position: absolute;
|
|
5674
|
+
inset: 0;
|
|
5675
|
+
background: rgba(0, 0, 0, 0.38);
|
|
5676
|
+
}
|
|
5677
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-dialog {
|
|
5678
|
+
position: relative;
|
|
5679
|
+
z-index: 1;
|
|
5680
|
+
width: min(720px, 100%);
|
|
5681
|
+
max-height: calc(100vh - 40px);
|
|
5682
|
+
display: flex;
|
|
5683
|
+
flex-direction: column;
|
|
5684
|
+
background: var(--dominds-bg-secondary, var(--color-bg-secondary, #ffffff));
|
|
5685
|
+
color: var(--dominds-fg, var(--color-fg-primary, #242424));
|
|
5686
|
+
border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
|
|
5687
|
+
border-radius: 8px;
|
|
5688
|
+
box-shadow: 0 18px 54px rgba(0, 0, 0, 0.22);
|
|
5689
|
+
overflow: hidden;
|
|
5690
|
+
}
|
|
5691
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-header {
|
|
5692
|
+
display: flex;
|
|
5693
|
+
align-items: center;
|
|
5694
|
+
justify-content: space-between;
|
|
5695
|
+
gap: 12px;
|
|
5696
|
+
padding: 12px 14px;
|
|
5697
|
+
border-bottom: 1px solid var(--dominds-border, var(--color-border-primary, #e5e5e5));
|
|
5698
|
+
background: var(--color-bg-tertiary, #f6f6f6);
|
|
5699
|
+
}
|
|
5700
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-title {
|
|
5701
|
+
margin: 0;
|
|
5702
|
+
font-size: 14px;
|
|
5703
|
+
line-height: 1.35;
|
|
5704
|
+
font-weight: 650;
|
|
5705
|
+
}
|
|
5706
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close {
|
|
5707
|
+
width: 28px;
|
|
5708
|
+
height: 28px;
|
|
5709
|
+
border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
|
|
5710
|
+
border-radius: 6px;
|
|
5711
|
+
padding: 0;
|
|
5712
|
+
display: inline-flex;
|
|
5713
|
+
align-items: center;
|
|
5714
|
+
justify-content: center;
|
|
5715
|
+
background: transparent;
|
|
5716
|
+
color: inherit;
|
|
5717
|
+
cursor: pointer;
|
|
5718
|
+
}
|
|
5719
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close .icon-mask {
|
|
5720
|
+
width: 14px;
|
|
5721
|
+
height: 14px;
|
|
5722
|
+
--icon-mask: ${ICON_MASK_URLS.close};
|
|
5723
|
+
}
|
|
5724
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close:hover,
|
|
5725
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-close:focus-visible {
|
|
5726
|
+
border-color: var(--dominds-primary, var(--color-accent-primary, #005fb8));
|
|
5727
|
+
outline: none;
|
|
5728
|
+
}
|
|
5729
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-body {
|
|
5730
|
+
display: flex;
|
|
5731
|
+
flex-direction: column;
|
|
5732
|
+
gap: 10px;
|
|
5733
|
+
flex: 1 1 auto;
|
|
5734
|
+
min-height: 0;
|
|
5735
|
+
padding: 14px;
|
|
5736
|
+
overflow: hidden;
|
|
5737
|
+
}
|
|
5738
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-message {
|
|
5739
|
+
margin: 0;
|
|
5740
|
+
color: var(--dominds-muted, var(--color-fg-secondary, #525252));
|
|
5741
|
+
font-size: 13px;
|
|
5742
|
+
line-height: 1.45;
|
|
5743
|
+
}
|
|
5744
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-text {
|
|
5745
|
+
width: 100%;
|
|
5746
|
+
min-height: min(260px, 42vh);
|
|
5747
|
+
box-sizing: border-box;
|
|
5748
|
+
flex: 1 1 auto;
|
|
5749
|
+
resize: vertical;
|
|
5750
|
+
padding: 10px;
|
|
5751
|
+
border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
|
|
5752
|
+
border-radius: 6px;
|
|
5753
|
+
background: var(--dominds-bg, var(--color-bg-primary, #fbfbfb));
|
|
5754
|
+
color: var(--dominds-fg, var(--color-fg-primary, #242424));
|
|
5755
|
+
font: 12px/1.45 ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
|
|
5756
|
+
white-space: pre;
|
|
5757
|
+
}
|
|
5758
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-footer {
|
|
5759
|
+
display: flex;
|
|
5760
|
+
justify-content: flex-end;
|
|
5761
|
+
padding: 0 14px 14px;
|
|
5762
|
+
}
|
|
5763
|
+
[${MANUAL_COPY_MODAL_ATTR}="true"] .manual-copy-select {
|
|
5764
|
+
border: 1px solid var(--dominds-primary, var(--color-accent-primary, #005fb8));
|
|
5765
|
+
border-radius: 6px;
|
|
5766
|
+
background: var(--dominds-primary, var(--color-accent-primary, #005fb8));
|
|
5767
|
+
color: #ffffff;
|
|
5768
|
+
padding: 6px 12px;
|
|
5769
|
+
font-size: 13px;
|
|
5770
|
+
cursor: pointer;
|
|
5771
|
+
}
|
|
5772
|
+
</style>
|
|
5773
|
+
<div class="manual-copy-backdrop"></div>
|
|
5774
|
+
<div class="manual-copy-dialog" role="dialog" aria-modal="true" aria-labelledby="manual-copy-title" aria-describedby="manual-copy-message-zh manual-copy-message-en">
|
|
5775
|
+
<div class="manual-copy-header">
|
|
5776
|
+
<h3 class="manual-copy-title" id="manual-copy-title">${escapeHtmlText$2(MANUAL_COPY_TEXTS.title)}</h3>
|
|
5777
|
+
<button class="manual-copy-close" type="button" aria-label="${escapeHtmlText$2(MANUAL_COPY_TEXTS.close)}" title="${escapeHtmlText$2(MANUAL_COPY_TEXTS.close)}">
|
|
5778
|
+
<span class="icon-mask" aria-hidden="true"></span>
|
|
5779
|
+
</button>
|
|
5780
|
+
</div>
|
|
5781
|
+
<div class="manual-copy-body">
|
|
5782
|
+
${getManualCopyMessageHtml()}
|
|
5783
|
+
<textarea class="manual-copy-text" readonly spellcheck="false"></textarea>
|
|
5784
|
+
</div>
|
|
5785
|
+
<div class="manual-copy-footer">
|
|
5786
|
+
<button class="manual-copy-select" type="button">${escapeHtmlText$2(MANUAL_COPY_TEXTS.selectAll)}</button>
|
|
5787
|
+
</div>
|
|
5788
|
+
</div>
|
|
5789
|
+
`;
|
|
5790
|
+
const close2 = () => {
|
|
5791
|
+
document.removeEventListener("keydown", onDocumentKeydown, true);
|
|
5792
|
+
manualCopyModalCleanups.delete(modal);
|
|
5793
|
+
modal.remove();
|
|
5794
|
+
if (restoreFocusTo !== null && restoreFocusTo.isConnected) {
|
|
5795
|
+
restoreFocusTo.focus();
|
|
5796
|
+
}
|
|
5797
|
+
};
|
|
5798
|
+
const closeButton = modal.querySelector(".manual-copy-close");
|
|
5799
|
+
const backdrop = modal.querySelector(".manual-copy-backdrop");
|
|
5800
|
+
const selectButton = modal.querySelector(".manual-copy-select");
|
|
5801
|
+
const textarea = modal.querySelector(".manual-copy-text");
|
|
5802
|
+
if (!(closeButton instanceof HTMLButtonElement)) {
|
|
5803
|
+
throw new Error("Manual copy modal close button missing.");
|
|
5804
|
+
}
|
|
5805
|
+
if (!(backdrop instanceof HTMLElement)) {
|
|
5806
|
+
throw new Error("Manual copy modal backdrop missing.");
|
|
5807
|
+
}
|
|
5808
|
+
if (!(selectButton instanceof HTMLButtonElement)) {
|
|
5809
|
+
throw new Error("Manual copy modal select button missing.");
|
|
5810
|
+
}
|
|
5811
|
+
if (!(textarea instanceof HTMLTextAreaElement)) {
|
|
5812
|
+
throw new Error("Manual copy modal textarea missing.");
|
|
5813
|
+
}
|
|
5814
|
+
const closeButtonEl = closeButton;
|
|
5815
|
+
const backdropEl = backdrop;
|
|
5816
|
+
const selectButtonEl = selectButton;
|
|
5817
|
+
const textareaEl = textarea;
|
|
5818
|
+
textareaEl.value = text2;
|
|
5819
|
+
const selectText = () => {
|
|
5820
|
+
textareaEl.focus();
|
|
5821
|
+
textareaEl.select();
|
|
5822
|
+
};
|
|
5823
|
+
function onDocumentKeydown(event) {
|
|
5824
|
+
if (event.key === "Escape") {
|
|
5825
|
+
event.preventDefault();
|
|
5826
|
+
close2();
|
|
5827
|
+
return;
|
|
5828
|
+
}
|
|
5829
|
+
if (event.key !== "Tab") return;
|
|
5830
|
+
const focusableElements = [closeButtonEl, textareaEl, selectButtonEl];
|
|
5831
|
+
const activeElement = document.activeElement;
|
|
5832
|
+
const first = focusableElements[0];
|
|
5833
|
+
const last = focusableElements[focusableElements.length - 1];
|
|
5834
|
+
if (activeElement !== closeButtonEl && activeElement !== textareaEl && activeElement !== selectButtonEl) {
|
|
5835
|
+
event.preventDefault();
|
|
5836
|
+
if (event.shiftKey) {
|
|
5837
|
+
last.focus();
|
|
5838
|
+
} else {
|
|
5839
|
+
first.focus();
|
|
5840
|
+
}
|
|
5841
|
+
return;
|
|
5842
|
+
}
|
|
5843
|
+
if (event.shiftKey && activeElement === first) {
|
|
5844
|
+
event.preventDefault();
|
|
5845
|
+
last.focus();
|
|
5846
|
+
return;
|
|
5847
|
+
}
|
|
5848
|
+
if (!event.shiftKey && activeElement === last) {
|
|
5849
|
+
event.preventDefault();
|
|
5850
|
+
first.focus();
|
|
5851
|
+
}
|
|
5852
|
+
}
|
|
5853
|
+
closeButtonEl.addEventListener("click", close2);
|
|
5854
|
+
backdropEl.addEventListener("click", close2);
|
|
5855
|
+
selectButtonEl.addEventListener("click", selectText);
|
|
5856
|
+
document.addEventListener("keydown", onDocumentKeydown, true);
|
|
5857
|
+
manualCopyModalCleanups.set(modal, close2);
|
|
5858
|
+
document.body.appendChild(modal);
|
|
5859
|
+
selectText();
|
|
5860
|
+
}
|
|
5563
5861
|
var storageExports = requireStorage();
|
|
5564
5862
|
const mannedToolIcon = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3csvg%20version='1.1'%20id='Layer_1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20x='0px'%20y='0px'%20viewBox='0%200%20122.88%20120.92'%20style='enable-background:new%200%200%20122.88%20120.92'%20xml:space='preserve'%3e%3cstyle%20type='text/css'%3e.st0{fill-rule:evenodd;clip-rule:evenodd;}%3c/style%3e%3cg%20transform='scale(0.8)%20translate(15,%2015)'%3e%3cpath%20class='st0'%20d='M117.32,101.23c0.8-2.32,1.23-4.81,1.23-7.39c0-6.28-2.55-11.97-6.67-16.09c-4.12-4.12-9.81-6.66-16.09-6.66%20c-6.28,0-11.97,2.55-16.09,6.66c-4.12,4.12-6.66,9.81-6.66,16.09c0,6.28,2.55,11.97,6.66,16.09c4.12,4.12,9.81,6.66,16.09,6.66%20c5.75,0,11-2.13,15.01-5.65C113.74,108.36,116.05,104.93,117.32,101.23L117.32,101.23z%20M86.36,96.38%20c-2.05,0.37-4.05,1.07-5.14,3.79c-0.71,1.76-0.54,3.89,0.35,5.82c2.42-7.38,10.92-3.02,5.45,3.34c4,0.2,6.53-2.6,6.93-6.37%20c0.19-1.78,0.34-2.74,0.73-3.51c0.21-0.42,0.5-0.78,0.89-1.2c1.31-1.44,2.77-2.7,4.2-4.19c2.69-2.81,8.42-0.22,10.61-5.72%20c0.71-1.76,0.54-3.89-0.35-5.82c-2.42,7.38-10.92,3.02-5.45-3.34c-4-0.2-6.53,2.6-6.93,6.37c-0.17,1.66,0.12,3.07-1.72,4.96%20c-1.29,1.29-2.66,2.61-3.99,3.87c-0.52,0.51-0.9,0.81-1.35,1.03c-0.8,0.4-1.78,0.52-4.22,0.95L86.36,96.38L86.36,96.38z%20M86.25,23.86l-0.03,0.09c-6.47-1.21-15.81-1.84-25.66-1.72c-9.96,0.11-20.49,0.98-29.17,2.76l-0.01-0.04%20C23.81-10.65,96.24-5.56,86.25,23.86L86.25,23.86z%20M44.15,62.42c-4.4,3.08-8.99,4.22-13.47,5.05l6.41,18.16h32.89%20c-0.82,2.59-1.27,5.35-1.27,8.21c0,7.48,3.03,14.25,7.93,19.15c4.9,4.9,11.67,7.93,19.15,7.93c7.48,0,14.25-3.03,19.15-7.93%20c5.15-5.15,7.93-11.84,7.93-19.15c0-7.48-3.03-14.25-7.93-19.15c-4.9-4.9-11.67-7.93-19.15-7.93c-2.32,0-4.57,0.29-6.72,0.84%20c-3.97-0.4-8.09-0.72-11.02-2.24c-1.34-0.83-2.51-1.99-3.59-3.46l-0.19-3c1.04-0.85,2.04-1.85,2.89-2.96%20c1.93-2.41,2.67-4.89,3.59-8.04c0.19-0.67,0.37-1.33,0.59-2c1.82-0.19,3.41-2.22,4.37-4.74c0.52-1.41,0.93-3,1.04-4.41%20c0.15-1.48,0-2.85-0.52-3.78c-0.41-0.74-1.04-1.22-1.89-1.3c-0.06-0.74,0.27-2.31,0.72-3.98c-6.13-1.1-15.03-1.67-24.5-1.56%20c-9.72,0.11-19.99,0.95-28.4,2.69l0.82,3.93c-0.63,1.04-0.78,2.67-0.59,4.41c0.19,1.7,0.7,3.48,1.45,4.97%20c0.96,1.89,2.33,3.22,3.93,3.22c0.15,0.44,0.33,0.93,0.48,1.41c1.3,3.82,2.26,6.71,4.59,9.45c0.67,0.82,1.41,1.56,2.19,2.22%20l-0.19,3.37C44.63,62,44.39,62.21,44.15,62.42L44.15,62.42z%20M71.94,60.07c-4.18,2.79-6.73,4.32-12.14,4.19%20c-5.26-0.08-8.01-1.86-12.22-4.52C47.26,77.31,72.37,78.36,71.94,60.07L71.94,60.07z%20M78.21,47.33c0.22-0.78,0.48-1.59,0.78-2.56%20c0.11-0.41,0.52-0.7,0.93-0.63c1.22,0.22,2.45-1.56,3.3-3.71c0.48-1.3,0.85-2.7,0.96-3.96c0.11-1.19,0-2.22-0.33-2.85%20c-0.33-0.61-1.25-0.26-1.93-0.85c-3.51,9.31-34.11,13.52-46.63,0.7c-0.44,0.7-0.52,1.96-0.37,3.37c0.19,1.48,0.63,3.11,1.3,4.41%20c0.78,1.52,1.78,2.56,2.78,2.3c0.41-0.11,0.85,0.11,1,0.52c0.3,0.82,0.48,1.45,0.7,2.07C47.18,65.2,71.84,66.69,78.21,47.33%20L78.21,47.33z%20M28.14,91.38c1.45,0,2.63,1.18,2.63,2.63c0,1.45-1.18,2.63-2.63,2.63c-1.45,0-2.63-1.18-2.63-2.63%20C25.52,92.56,26.69,91.38,28.14,91.38L28.14,91.38z%20M23.25,68.84C14.98,70.72,7.71,74.8,3.63,92.75L0,106.64h19.67V89.45%20c0-2.11,1.72-3.83,3.83-3.83h4.09C27.42,78.97,24.1,71.99,23.25,68.84L23.25,68.84z'/%3e%3c/g%3e%3c/svg%3e";
|
|
5565
5863
|
const {
|
|
@@ -64281,25 +64579,6 @@ function setupUpwardProgressiveExpandBehavior(options) {
|
|
|
64281
64579
|
};
|
|
64282
64580
|
}
|
|
64283
64581
|
const DOMINDS_CODE_BLOCK_CODE_ATTR = "data-code";
|
|
64284
|
-
const MANUAL_COPY_TEXTS = {
|
|
64285
|
-
zh: {
|
|
64286
|
-
copyCode: "复制代码",
|
|
64287
|
-
title: "需要手动复制",
|
|
64288
|
-
close: "关闭",
|
|
64289
|
-
selectAll: "全选文本",
|
|
64290
|
-
insecureHttpMessage: "当前页面通过 HTTP 非 localhost 地址访问,浏览器不会开放剪贴板权限。请在下方只读文本框中手动全选并复制。",
|
|
64291
|
-
unavailableMessage: "浏览器当前没有开放剪贴板写入权限。请在下方只读文本框中手动全选并复制。"
|
|
64292
|
-
},
|
|
64293
|
-
en: {
|
|
64294
|
-
copyCode: "Copy code",
|
|
64295
|
-
title: "Manual copy required",
|
|
64296
|
-
close: "Close",
|
|
64297
|
-
selectAll: "Select all",
|
|
64298
|
-
insecureHttpMessage: "This page is loaded over HTTP from a non-localhost address, so the browser does not expose clipboard access. Select and copy the read-only text below manually.",
|
|
64299
|
-
unavailableMessage: "The browser has not granted clipboard write access. Select and copy the read-only text below manually."
|
|
64300
|
-
}
|
|
64301
|
-
};
|
|
64302
|
-
const manualCopyModalCleanups = /* @__PURE__ */ new WeakMap();
|
|
64303
64582
|
function encodeDomindsCodeBlockDataCode(code2) {
|
|
64304
64583
|
return encodeURIComponent(code2);
|
|
64305
64584
|
}
|
|
@@ -64317,250 +64596,11 @@ function toLanguageClassToken(language2) {
|
|
|
64317
64596
|
const token2 = language2.replace(/[^A-Za-z0-9_-]/g, "-").replace(/^-+|-+$/g, "");
|
|
64318
64597
|
return token2.length > 0 ? token2 : "plaintext";
|
|
64319
64598
|
}
|
|
64320
|
-
function isLocalClipboardHost(hostname) {
|
|
64321
|
-
const loopbackIpv4Match = /^127(?:\.\d{1,3}){3}$/.test(hostname);
|
|
64322
|
-
return hostname === "localhost" || hostname.endsWith(".localhost") || loopbackIpv4Match || hostname === "::1" || hostname === "[::1]";
|
|
64323
|
-
}
|
|
64324
|
-
function getManualCopyTexts(language2) {
|
|
64325
|
-
return language2.toLowerCase().startsWith("zh") ? MANUAL_COPY_TEXTS.zh : MANUAL_COPY_TEXTS.en;
|
|
64326
|
-
}
|
|
64327
64599
|
function getElementLanguage(element) {
|
|
64328
64600
|
const langElement = element.closest("[lang]");
|
|
64329
64601
|
if (!(langElement instanceof Element)) return "en";
|
|
64330
64602
|
return langElement.getAttribute("lang") ?? "en";
|
|
64331
64603
|
}
|
|
64332
|
-
function getManualCopyMessage(texts) {
|
|
64333
|
-
if (window.location.protocol === "http:" && !isLocalClipboardHost(window.location.hostname)) {
|
|
64334
|
-
return texts.insecureHttpMessage;
|
|
64335
|
-
}
|
|
64336
|
-
return texts.unavailableMessage;
|
|
64337
|
-
}
|
|
64338
|
-
function showManualCopyModal(text2, language2, restoreFocusTo) {
|
|
64339
|
-
const texts = getManualCopyTexts(language2);
|
|
64340
|
-
const existing = document.querySelector('[data-dominds-manual-copy-modal="true"]');
|
|
64341
|
-
if (existing instanceof HTMLElement) {
|
|
64342
|
-
const cleanup = manualCopyModalCleanups.get(existing);
|
|
64343
|
-
if (cleanup) {
|
|
64344
|
-
cleanup();
|
|
64345
|
-
} else {
|
|
64346
|
-
existing.remove();
|
|
64347
|
-
}
|
|
64348
|
-
}
|
|
64349
|
-
const modal = document.createElement("div");
|
|
64350
|
-
modal.dataset.domindsManualCopyModal = "true";
|
|
64351
|
-
modal.innerHTML = `
|
|
64352
|
-
<style>
|
|
64353
|
-
${ICON_MASK_BASE_CSS}
|
|
64354
|
-
[data-dominds-manual-copy-modal="true"] {
|
|
64355
|
-
position: fixed;
|
|
64356
|
-
inset: 0;
|
|
64357
|
-
z-index: 10000;
|
|
64358
|
-
display: flex;
|
|
64359
|
-
align-items: center;
|
|
64360
|
-
justify-content: center;
|
|
64361
|
-
padding: 20px;
|
|
64362
|
-
min-height: 0;
|
|
64363
|
-
box-sizing: border-box;
|
|
64364
|
-
font-family: var(--dominds-font-family, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
|
|
64365
|
-
}
|
|
64366
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-backdrop {
|
|
64367
|
-
position: absolute;
|
|
64368
|
-
inset: 0;
|
|
64369
|
-
background: rgba(0, 0, 0, 0.38);
|
|
64370
|
-
}
|
|
64371
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-dialog {
|
|
64372
|
-
position: relative;
|
|
64373
|
-
z-index: 1;
|
|
64374
|
-
width: min(720px, 100%);
|
|
64375
|
-
max-height: calc(100vh - 40px);
|
|
64376
|
-
display: flex;
|
|
64377
|
-
flex-direction: column;
|
|
64378
|
-
background: var(--dominds-bg-secondary, var(--color-bg-secondary, #ffffff));
|
|
64379
|
-
color: var(--dominds-fg, var(--color-fg-primary, #242424));
|
|
64380
|
-
border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
|
|
64381
|
-
border-radius: 8px;
|
|
64382
|
-
box-shadow: 0 18px 54px rgba(0, 0, 0, 0.22);
|
|
64383
|
-
overflow: hidden;
|
|
64384
|
-
}
|
|
64385
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-header {
|
|
64386
|
-
display: flex;
|
|
64387
|
-
align-items: center;
|
|
64388
|
-
justify-content: space-between;
|
|
64389
|
-
gap: 12px;
|
|
64390
|
-
padding: 12px 14px;
|
|
64391
|
-
border-bottom: 1px solid var(--dominds-border, var(--color-border-primary, #e5e5e5));
|
|
64392
|
-
background: var(--color-bg-tertiary, #f6f6f6);
|
|
64393
|
-
}
|
|
64394
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-title {
|
|
64395
|
-
margin: 0;
|
|
64396
|
-
font-size: 14px;
|
|
64397
|
-
line-height: 1.35;
|
|
64398
|
-
font-weight: 650;
|
|
64399
|
-
}
|
|
64400
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-close {
|
|
64401
|
-
width: 28px;
|
|
64402
|
-
height: 28px;
|
|
64403
|
-
border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
|
|
64404
|
-
border-radius: 6px;
|
|
64405
|
-
padding: 0;
|
|
64406
|
-
display: inline-flex;
|
|
64407
|
-
align-items: center;
|
|
64408
|
-
justify-content: center;
|
|
64409
|
-
background: transparent;
|
|
64410
|
-
color: inherit;
|
|
64411
|
-
cursor: pointer;
|
|
64412
|
-
}
|
|
64413
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-close .icon-mask {
|
|
64414
|
-
width: 14px;
|
|
64415
|
-
height: 14px;
|
|
64416
|
-
--icon-mask: ${ICON_MASK_URLS.close};
|
|
64417
|
-
}
|
|
64418
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-close:hover,
|
|
64419
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-close:focus-visible {
|
|
64420
|
-
border-color: var(--dominds-primary, var(--color-accent-primary, #005fb8));
|
|
64421
|
-
outline: none;
|
|
64422
|
-
}
|
|
64423
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-body {
|
|
64424
|
-
display: flex;
|
|
64425
|
-
flex-direction: column;
|
|
64426
|
-
gap: 10px;
|
|
64427
|
-
flex: 1 1 auto;
|
|
64428
|
-
min-height: 0;
|
|
64429
|
-
padding: 14px;
|
|
64430
|
-
overflow: hidden;
|
|
64431
|
-
}
|
|
64432
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-message {
|
|
64433
|
-
margin: 0;
|
|
64434
|
-
color: var(--dominds-muted, var(--color-fg-secondary, #525252));
|
|
64435
|
-
font-size: 13px;
|
|
64436
|
-
line-height: 1.45;
|
|
64437
|
-
}
|
|
64438
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-text {
|
|
64439
|
-
width: 100%;
|
|
64440
|
-
min-height: min(260px, 42vh);
|
|
64441
|
-
box-sizing: border-box;
|
|
64442
|
-
flex: 1 1 auto;
|
|
64443
|
-
resize: vertical;
|
|
64444
|
-
padding: 10px;
|
|
64445
|
-
border: 1px solid var(--dominds-border, var(--color-border-primary, #d6d6d6));
|
|
64446
|
-
border-radius: 6px;
|
|
64447
|
-
background: var(--dominds-bg, var(--color-bg-primary, #fbfbfb));
|
|
64448
|
-
color: var(--dominds-fg, var(--color-fg-primary, #242424));
|
|
64449
|
-
font: 12px/1.45 ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
|
|
64450
|
-
white-space: pre;
|
|
64451
|
-
}
|
|
64452
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-footer {
|
|
64453
|
-
display: flex;
|
|
64454
|
-
justify-content: flex-end;
|
|
64455
|
-
padding: 0 14px 14px;
|
|
64456
|
-
}
|
|
64457
|
-
[data-dominds-manual-copy-modal="true"] .manual-copy-select {
|
|
64458
|
-
border: 1px solid var(--dominds-primary, var(--color-accent-primary, #005fb8));
|
|
64459
|
-
border-radius: 6px;
|
|
64460
|
-
background: var(--dominds-primary, var(--color-accent-primary, #005fb8));
|
|
64461
|
-
color: #ffffff;
|
|
64462
|
-
padding: 6px 12px;
|
|
64463
|
-
font-size: 13px;
|
|
64464
|
-
cursor: pointer;
|
|
64465
|
-
}
|
|
64466
|
-
</style>
|
|
64467
|
-
<div class="manual-copy-backdrop"></div>
|
|
64468
|
-
<div class="manual-copy-dialog" role="dialog" aria-modal="true" aria-labelledby="manual-copy-title" aria-describedby="manual-copy-message">
|
|
64469
|
-
<div class="manual-copy-header">
|
|
64470
|
-
<h3 class="manual-copy-title" id="manual-copy-title">${escapeHtmlText$1(texts.title)}</h3>
|
|
64471
|
-
<button class="manual-copy-close" type="button" aria-label="${escapeHtmlText$1(
|
|
64472
|
-
texts.close
|
|
64473
|
-
)}" title="${escapeHtmlText$1(texts.close)}">
|
|
64474
|
-
<span class="icon-mask" aria-hidden="true"></span>
|
|
64475
|
-
</button>
|
|
64476
|
-
</div>
|
|
64477
|
-
<div class="manual-copy-body">
|
|
64478
|
-
<p class="manual-copy-message" id="manual-copy-message">${escapeHtmlText$1(getManualCopyMessage(texts))}</p>
|
|
64479
|
-
<textarea class="manual-copy-text" readonly spellcheck="false"></textarea>
|
|
64480
|
-
</div>
|
|
64481
|
-
<div class="manual-copy-footer">
|
|
64482
|
-
<button class="manual-copy-select" type="button">${escapeHtmlText$1(texts.selectAll)}</button>
|
|
64483
|
-
</div>
|
|
64484
|
-
</div>
|
|
64485
|
-
`;
|
|
64486
|
-
const close2 = () => {
|
|
64487
|
-
document.removeEventListener("keydown", onDocumentKeydown, true);
|
|
64488
|
-
manualCopyModalCleanups.delete(modal);
|
|
64489
|
-
modal.remove();
|
|
64490
|
-
if (restoreFocusTo !== null && restoreFocusTo.isConnected) {
|
|
64491
|
-
restoreFocusTo.focus();
|
|
64492
|
-
}
|
|
64493
|
-
};
|
|
64494
|
-
const closeButton = modal.querySelector(".manual-copy-close");
|
|
64495
|
-
const backdrop = modal.querySelector(".manual-copy-backdrop");
|
|
64496
|
-
const selectButton = modal.querySelector(".manual-copy-select");
|
|
64497
|
-
const textarea = modal.querySelector(".manual-copy-text");
|
|
64498
|
-
if (!(closeButton instanceof HTMLButtonElement)) {
|
|
64499
|
-
throw new Error("Manual copy modal close button missing.");
|
|
64500
|
-
}
|
|
64501
|
-
if (!(backdrop instanceof HTMLElement)) {
|
|
64502
|
-
throw new Error("Manual copy modal backdrop missing.");
|
|
64503
|
-
}
|
|
64504
|
-
if (!(selectButton instanceof HTMLButtonElement)) {
|
|
64505
|
-
throw new Error("Manual copy modal select button missing.");
|
|
64506
|
-
}
|
|
64507
|
-
if (!(textarea instanceof HTMLTextAreaElement)) {
|
|
64508
|
-
throw new Error("Manual copy modal textarea missing.");
|
|
64509
|
-
}
|
|
64510
|
-
const closeButtonEl = closeButton;
|
|
64511
|
-
const backdropEl = backdrop;
|
|
64512
|
-
const selectButtonEl = selectButton;
|
|
64513
|
-
const textareaEl = textarea;
|
|
64514
|
-
textareaEl.value = text2;
|
|
64515
|
-
const selectText = () => {
|
|
64516
|
-
textareaEl.focus();
|
|
64517
|
-
textareaEl.select();
|
|
64518
|
-
};
|
|
64519
|
-
function onDocumentKeydown(event) {
|
|
64520
|
-
if (event.key === "Escape") {
|
|
64521
|
-
event.preventDefault();
|
|
64522
|
-
close2();
|
|
64523
|
-
return;
|
|
64524
|
-
}
|
|
64525
|
-
if (event.key !== "Tab") return;
|
|
64526
|
-
const focusableElements = [closeButtonEl, textareaEl, selectButtonEl];
|
|
64527
|
-
const activeElement = document.activeElement;
|
|
64528
|
-
const first = focusableElements[0];
|
|
64529
|
-
const last = focusableElements[focusableElements.length - 1];
|
|
64530
|
-
if (activeElement !== closeButtonEl && activeElement !== textareaEl && activeElement !== selectButtonEl) {
|
|
64531
|
-
event.preventDefault();
|
|
64532
|
-
if (event.shiftKey) {
|
|
64533
|
-
last.focus();
|
|
64534
|
-
} else {
|
|
64535
|
-
first.focus();
|
|
64536
|
-
}
|
|
64537
|
-
return;
|
|
64538
|
-
}
|
|
64539
|
-
if (event.shiftKey && activeElement === first) {
|
|
64540
|
-
event.preventDefault();
|
|
64541
|
-
last.focus();
|
|
64542
|
-
return;
|
|
64543
|
-
}
|
|
64544
|
-
if (!event.shiftKey && activeElement === last) {
|
|
64545
|
-
event.preventDefault();
|
|
64546
|
-
first.focus();
|
|
64547
|
-
}
|
|
64548
|
-
}
|
|
64549
|
-
closeButtonEl.addEventListener("click", close2);
|
|
64550
|
-
backdropEl.addEventListener("click", close2);
|
|
64551
|
-
selectButtonEl.addEventListener("click", selectText);
|
|
64552
|
-
document.addEventListener("keydown", onDocumentKeydown, true);
|
|
64553
|
-
manualCopyModalCleanups.set(modal, close2);
|
|
64554
|
-
document.body.appendChild(modal);
|
|
64555
|
-
selectText();
|
|
64556
|
-
}
|
|
64557
|
-
async function copyTextToClipboard(text2, language2, restoreFocusTo) {
|
|
64558
|
-
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
64559
|
-
await navigator.clipboard.writeText(text2);
|
|
64560
|
-
return;
|
|
64561
|
-
}
|
|
64562
|
-
showManualCopyModal(text2, language2, restoreFocusTo);
|
|
64563
|
-
}
|
|
64564
64604
|
class DomindsCodeBlock extends HTMLElement {
|
|
64565
64605
|
constructor() {
|
|
64566
64606
|
super();
|
|
@@ -64626,7 +64666,7 @@ class DomindsCodeBlock extends HTMLElement {
|
|
|
64626
64666
|
}
|
|
64627
64667
|
if (!this.hasCodeSource) return;
|
|
64628
64668
|
const language2 = this._language || "plaintext";
|
|
64629
|
-
const
|
|
64669
|
+
const copyCodeText = "复制代码 / Copy code";
|
|
64630
64670
|
const languageLabel = escapeHtmlText$1(language2);
|
|
64631
64671
|
const languageClassToken = toLanguageClassToken(language2);
|
|
64632
64672
|
try {
|
|
@@ -64786,7 +64826,7 @@ class DomindsCodeBlock extends HTMLElement {
|
|
|
64786
64826
|
<div class="code-block-wrapper">
|
|
64787
64827
|
<div class="code-header">
|
|
64788
64828
|
<span class="language">${languageLabel}</span>
|
|
64789
|
-
<button class="copy-btn" title="${escapeHtmlText$1(
|
|
64829
|
+
<button class="copy-btn" title="${escapeHtmlText$1(copyCodeText)}" aria-label="${escapeHtmlText$1(copyCodeText)}"><span class="icon-mask" aria-hidden="true"></span></button>
|
|
64790
64830
|
</div>
|
|
64791
64831
|
<pre><code class="hljs language-${languageClassToken}">${highlighted}</code></pre>
|
|
64792
64832
|
<div class="code-expand-footer code-expand-footer-down is-hidden">
|
|
@@ -64807,13 +64847,17 @@ class DomindsCodeBlock extends HTMLElement {
|
|
|
64807
64847
|
const button = this.querySelector(".copy-btn");
|
|
64808
64848
|
if (!(button instanceof HTMLButtonElement)) return;
|
|
64809
64849
|
button.addEventListener("click", () => {
|
|
64810
|
-
|
|
64811
|
-
void copyTextToClipboard(this._code, language2, button).catch((error2) => {
|
|
64812
|
-
console.error("Copy code failed:", error2);
|
|
64813
|
-
showManualCopyModal(this._code, language2, button);
|
|
64814
|
-
});
|
|
64850
|
+
void this.copyCodeToClipboard(button);
|
|
64815
64851
|
});
|
|
64816
64852
|
}
|
|
64853
|
+
async copyCodeToClipboard(button) {
|
|
64854
|
+
try {
|
|
64855
|
+
await copyTextOrShowManualCopy(this._code, button);
|
|
64856
|
+
} catch (error2) {
|
|
64857
|
+
console.error("Copy code failed:", error2);
|
|
64858
|
+
alert("复制失败 / Copy failed.");
|
|
64859
|
+
}
|
|
64860
|
+
}
|
|
64817
64861
|
setupProgressiveExpand() {
|
|
64818
64862
|
const target = this.querySelector("pre");
|
|
64819
64863
|
const footer = this.querySelector(".code-expand-footer");
|
|
@@ -99486,12 +99530,12 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
|
|
|
99486
99530
|
registerLayoutLoaders([
|
|
99487
99531
|
{
|
|
99488
99532
|
name: "dagre",
|
|
99489
|
-
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-KLK3FWXG-
|
|
99533
|
+
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-KLK3FWXG-Cwz7pFDo.js"), true ? __vite__mapDeps([0,1,2,3,4,5]) : void 0), "loader")
|
|
99490
99534
|
},
|
|
99491
99535
|
...[
|
|
99492
99536
|
{
|
|
99493
99537
|
name: "cose-bilkent",
|
|
99494
|
-
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-
|
|
99538
|
+
loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./cose-bilkent-S5V4N54A-D2dZHRG3.js"), true ? __vite__mapDeps([6,7]) : void 0), "loader")
|
|
99495
99539
|
}
|
|
99496
99540
|
]
|
|
99497
99541
|
]);
|
|
@@ -99931,7 +99975,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
|
|
|
99931
99975
|
}, "detector");
|
|
99932
99976
|
var loader = /* @__PURE__ */ __name(async () => {
|
|
99933
99977
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
99934
|
-
const { diagram: diagram22 } = await import("./c4Diagram-IC4MRINW-
|
|
99978
|
+
const { diagram: diagram22 } = await import("./c4Diagram-IC4MRINW-CLkxlY6N.js");
|
|
99935
99979
|
return { diagram: diagram22 };
|
|
99936
99980
|
}, true ? __vite__mapDeps([8,9]) : void 0);
|
|
99937
99981
|
return { id: id$1, diagram: diagram2 };
|
|
@@ -99951,7 +99995,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
99951
99995
|
}, "detector");
|
|
99952
99996
|
var loader2 = /* @__PURE__ */ __name(async () => {
|
|
99953
99997
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
99954
|
-
const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-
|
|
99998
|
+
const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-C5Hi85ST.js");
|
|
99955
99999
|
return { diagram: diagram22 };
|
|
99956
100000
|
}, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0);
|
|
99957
100001
|
return { id: id2, diagram: diagram2 };
|
|
@@ -99977,7 +100021,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
99977
100021
|
}, "detector");
|
|
99978
100022
|
var loader3 = /* @__PURE__ */ __name(async () => {
|
|
99979
100023
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
99980
|
-
const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-
|
|
100024
|
+
const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-C5Hi85ST.js");
|
|
99981
100025
|
return { diagram: diagram22 };
|
|
99982
100026
|
}, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0);
|
|
99983
100027
|
return { id: id3, diagram: diagram2 };
|
|
@@ -99994,7 +100038,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
|
|
|
99994
100038
|
}, "detector");
|
|
99995
100039
|
var loader4 = /* @__PURE__ */ __name(async () => {
|
|
99996
100040
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
99997
|
-
const { diagram: diagram22 } = await import("./erDiagram-INFDFZHY-
|
|
100041
|
+
const { diagram: diagram22 } = await import("./erDiagram-INFDFZHY-DCnHsk_Z.js");
|
|
99998
100042
|
return { diagram: diagram22 };
|
|
99999
100043
|
}, true ? __vite__mapDeps([15,12,13,14]) : void 0);
|
|
100000
100044
|
return { id: id4, diagram: diagram2 };
|
|
@@ -100011,7 +100055,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
|
|
|
100011
100055
|
}, "detector");
|
|
100012
100056
|
var loader5 = /* @__PURE__ */ __name(async () => {
|
|
100013
100057
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100014
|
-
const { diagram: diagram22 } = await import("./gitGraphDiagram-K3NZZRJ6-
|
|
100058
|
+
const { diagram: diagram22 } = await import("./gitGraphDiagram-K3NZZRJ6-Ct5XDpFu.js");
|
|
100015
100059
|
return { diagram: diagram22 };
|
|
100016
100060
|
}, true ? __vite__mapDeps([16,17,18,19,2,4,5]) : void 0);
|
|
100017
100061
|
return { id: id5, diagram: diagram2 };
|
|
@@ -100028,7 +100072,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
|
|
|
100028
100072
|
}, "detector");
|
|
100029
100073
|
var loader6 = /* @__PURE__ */ __name(async () => {
|
|
100030
100074
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100031
|
-
const { diagram: diagram22 } = await import("./ganttDiagram-A5KZAMGK-
|
|
100075
|
+
const { diagram: diagram22 } = await import("./ganttDiagram-A5KZAMGK-vT15RP6A.js");
|
|
100032
100076
|
return { diagram: diagram22 };
|
|
100033
100077
|
}, true ? __vite__mapDeps([20,21,22,23]) : void 0);
|
|
100034
100078
|
return { id: id6, diagram: diagram2 };
|
|
@@ -100045,7 +100089,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
|
|
|
100045
100089
|
}, "detector");
|
|
100046
100090
|
var loader7 = /* @__PURE__ */ __name(async () => {
|
|
100047
100091
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100048
|
-
const { diagram: diagram22 } = await import("./infoDiagram-LFFYTUFH-
|
|
100092
|
+
const { diagram: diagram22 } = await import("./infoDiagram-LFFYTUFH-DlyOw8IT.js");
|
|
100049
100093
|
return { diagram: diagram22 };
|
|
100050
100094
|
}, true ? __vite__mapDeps([24,19,2,4,5]) : void 0);
|
|
100051
100095
|
return { id: id7, diagram: diagram2 };
|
|
@@ -100061,7 +100105,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
|
|
|
100061
100105
|
}, "detector");
|
|
100062
100106
|
var loader8 = /* @__PURE__ */ __name(async () => {
|
|
100063
100107
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100064
|
-
const { diagram: diagram22 } = await import("./pieDiagram-SKSYHLDU-
|
|
100108
|
+
const { diagram: diagram22 } = await import("./pieDiagram-SKSYHLDU-ByoyS2as.js");
|
|
100065
100109
|
return { diagram: diagram22 };
|
|
100066
100110
|
}, true ? __vite__mapDeps([25,17,19,2,4,5,26,27,22]) : void 0);
|
|
100067
100111
|
return { id: id8, diagram: diagram2 };
|
|
@@ -100077,7 +100121,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
|
|
|
100077
100121
|
}, "detector");
|
|
100078
100122
|
var loader9 = /* @__PURE__ */ __name(async () => {
|
|
100079
100123
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100080
|
-
const { diagram: diagram22 } = await import("./quadrantDiagram-337W2JSQ-
|
|
100124
|
+
const { diagram: diagram22 } = await import("./quadrantDiagram-337W2JSQ-BnKSsLfA.js");
|
|
100081
100125
|
return { diagram: diagram22 };
|
|
100082
100126
|
}, true ? __vite__mapDeps([28,21,22,23]) : void 0);
|
|
100083
100127
|
return { id: id9, diagram: diagram2 };
|
|
@@ -100094,7 +100138,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
|
|
|
100094
100138
|
}, "detector");
|
|
100095
100139
|
var loader10 = /* @__PURE__ */ __name(async () => {
|
|
100096
100140
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100097
|
-
const { diagram: diagram22 } = await import("./xychartDiagram-JWTSCODW-
|
|
100141
|
+
const { diagram: diagram22 } = await import("./xychartDiagram-JWTSCODW-BgOzlz6Z.js");
|
|
100098
100142
|
return { diagram: diagram22 };
|
|
100099
100143
|
}, true ? __vite__mapDeps([29,22,27,21,23]) : void 0);
|
|
100100
100144
|
return { id: id10, diagram: diagram2 };
|
|
@@ -100111,7 +100155,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
|
|
|
100111
100155
|
}, "detector");
|
|
100112
100156
|
var loader11 = /* @__PURE__ */ __name(async () => {
|
|
100113
100157
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100114
|
-
const { diagram: diagram22 } = await import("./requirementDiagram-Z7DCOOCP-
|
|
100158
|
+
const { diagram: diagram22 } = await import("./requirementDiagram-Z7DCOOCP-jU2C7qJN.js");
|
|
100115
100159
|
return { diagram: diagram22 };
|
|
100116
100160
|
}, true ? __vite__mapDeps([30,12,13]) : void 0);
|
|
100117
100161
|
return { id: id11, diagram: diagram2 };
|
|
@@ -100128,7 +100172,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
|
|
|
100128
100172
|
}, "detector");
|
|
100129
100173
|
var loader12 = /* @__PURE__ */ __name(async () => {
|
|
100130
100174
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100131
|
-
const { diagram: diagram22 } = await import("./sequenceDiagram-2WXFIKYE-
|
|
100175
|
+
const { diagram: diagram22 } = await import("./sequenceDiagram-2WXFIKYE-CBhN4j2Q.js");
|
|
100132
100176
|
return { diagram: diagram22 };
|
|
100133
100177
|
}, true ? __vite__mapDeps([31,9,18]) : void 0);
|
|
100134
100178
|
return { id: id12, diagram: diagram2 };
|
|
@@ -100148,7 +100192,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
100148
100192
|
}, "detector");
|
|
100149
100193
|
var loader13 = /* @__PURE__ */ __name(async () => {
|
|
100150
100194
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100151
|
-
const { diagram: diagram22 } = await import("./classDiagram-VBA2DB6C-
|
|
100195
|
+
const { diagram: diagram22 } = await import("./classDiagram-VBA2DB6C-DWQ1VnaI.js");
|
|
100152
100196
|
return { diagram: diagram22 };
|
|
100153
100197
|
}, true ? __vite__mapDeps([32,33,11,9,12,13]) : void 0);
|
|
100154
100198
|
return { id: id13, diagram: diagram2 };
|
|
@@ -100168,7 +100212,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
100168
100212
|
}, "detector");
|
|
100169
100213
|
var loader14 = /* @__PURE__ */ __name(async () => {
|
|
100170
100214
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100171
|
-
const { diagram: diagram22 } = await import("./classDiagram-v2-RAHNMMFH-
|
|
100215
|
+
const { diagram: diagram22 } = await import("./classDiagram-v2-RAHNMMFH-DWQ1VnaI.js");
|
|
100172
100216
|
return { diagram: diagram22 };
|
|
100173
100217
|
}, true ? __vite__mapDeps([34,33,11,9,12,13]) : void 0);
|
|
100174
100218
|
return { id: id14, diagram: diagram2 };
|
|
@@ -100188,7 +100232,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
100188
100232
|
}, "detector");
|
|
100189
100233
|
var loader15 = /* @__PURE__ */ __name(async () => {
|
|
100190
100234
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100191
|
-
const { diagram: diagram22 } = await import("./stateDiagram-RAJIS63D-
|
|
100235
|
+
const { diagram: diagram22 } = await import("./stateDiagram-RAJIS63D-DZSAyRfJ.js");
|
|
100192
100236
|
return { diagram: diagram22 };
|
|
100193
100237
|
}, true ? __vite__mapDeps([35,36,12,13,1,2,3,4]) : void 0);
|
|
100194
100238
|
return { id: id15, diagram: diagram2 };
|
|
@@ -100211,7 +100255,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
|
|
|
100211
100255
|
}, "detector");
|
|
100212
100256
|
var loader16 = /* @__PURE__ */ __name(async () => {
|
|
100213
100257
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100214
|
-
const { diagram: diagram22 } = await import("./stateDiagram-v2-FVOUBMTO-
|
|
100258
|
+
const { diagram: diagram22 } = await import("./stateDiagram-v2-FVOUBMTO-x29lKJpl.js");
|
|
100215
100259
|
return { diagram: diagram22 };
|
|
100216
100260
|
}, true ? __vite__mapDeps([37,36,12,13]) : void 0);
|
|
100217
100261
|
return { id: id16, diagram: diagram2 };
|
|
@@ -100228,7 +100272,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
|
|
|
100228
100272
|
}, "detector");
|
|
100229
100273
|
var loader17 = /* @__PURE__ */ __name(async () => {
|
|
100230
100274
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100231
|
-
const { diagram: diagram22 } = await import("./journeyDiagram-4ABVD52K-
|
|
100275
|
+
const { diagram: diagram22 } = await import("./journeyDiagram-4ABVD52K-B95gnBKj.js");
|
|
100232
100276
|
return { diagram: diagram22 };
|
|
100233
100277
|
}, true ? __vite__mapDeps([38,11,9,26]) : void 0);
|
|
100234
100278
|
return { id: id17, diagram: diagram2 };
|
|
@@ -100298,7 +100342,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
|
|
|
100298
100342
|
}, "detector");
|
|
100299
100343
|
var loader18 = /* @__PURE__ */ __name(async () => {
|
|
100300
100344
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100301
|
-
const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-
|
|
100345
|
+
const { diagram: diagram22 } = await import("./flowDiagram-PKNHOUZH-C5Hi85ST.js");
|
|
100302
100346
|
return { diagram: diagram22 };
|
|
100303
100347
|
}, true ? __vite__mapDeps([10,11,9,12,13,14]) : void 0);
|
|
100304
100348
|
return { id: id18, diagram: diagram2 };
|
|
@@ -100315,7 +100359,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
|
|
|
100315
100359
|
}, "detector");
|
|
100316
100360
|
var loader19 = /* @__PURE__ */ __name(async () => {
|
|
100317
100361
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100318
|
-
const { diagram: diagram22 } = await import("./timeline-definition-YZTLITO2-
|
|
100362
|
+
const { diagram: diagram22 } = await import("./timeline-definition-YZTLITO2-BQR2qEXt.js");
|
|
100319
100363
|
return { diagram: diagram22 };
|
|
100320
100364
|
}, true ? __vite__mapDeps([39,26]) : void 0);
|
|
100321
100365
|
return { id: id19, diagram: diagram2 };
|
|
@@ -100332,7 +100376,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
|
|
|
100332
100376
|
}, "detector");
|
|
100333
100377
|
var loader20 = /* @__PURE__ */ __name(async () => {
|
|
100334
100378
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100335
|
-
const { diagram: diagram22 } = await import("./mindmap-definition-YRQLILUH-
|
|
100379
|
+
const { diagram: diagram22 } = await import("./mindmap-definition-YRQLILUH-m2w1nBbY.js");
|
|
100336
100380
|
return { diagram: diagram22 };
|
|
100337
100381
|
}, true ? __vite__mapDeps([40,12,13]) : void 0);
|
|
100338
100382
|
return { id: id20, diagram: diagram2 };
|
|
@@ -100349,7 +100393,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
|
|
|
100349
100393
|
}, "detector");
|
|
100350
100394
|
var loader21 = /* @__PURE__ */ __name(async () => {
|
|
100351
100395
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100352
|
-
const { diagram: diagram22 } = await import("./kanban-definition-K7BYSVSG-
|
|
100396
|
+
const { diagram: diagram22 } = await import("./kanban-definition-K7BYSVSG-DQ2gfPUK.js");
|
|
100353
100397
|
return { diagram: diagram22 };
|
|
100354
100398
|
}, true ? __vite__mapDeps([41,11]) : void 0);
|
|
100355
100399
|
return { id: id21, diagram: diagram2 };
|
|
@@ -100366,7 +100410,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
|
|
|
100366
100410
|
}, "detector");
|
|
100367
100411
|
var loader22 = /* @__PURE__ */ __name(async () => {
|
|
100368
100412
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100369
|
-
const { diagram: diagram22 } = await import("./sankeyDiagram-WA2Y5GQK-
|
|
100413
|
+
const { diagram: diagram22 } = await import("./sankeyDiagram-WA2Y5GQK-R175tX8b.js");
|
|
100370
100414
|
return { diagram: diagram22 };
|
|
100371
100415
|
}, true ? __vite__mapDeps([42,27,22]) : void 0);
|
|
100372
100416
|
return { id: id22, diagram: diagram2 };
|
|
@@ -100383,7 +100427,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
|
|
|
100383
100427
|
}, "detector");
|
|
100384
100428
|
var loader23 = /* @__PURE__ */ __name(async () => {
|
|
100385
100429
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100386
|
-
const { diagram: diagram22 } = await import("./diagram-P4PSJMXO-
|
|
100430
|
+
const { diagram: diagram22 } = await import("./diagram-P4PSJMXO-ChwZDZYa.js");
|
|
100387
100431
|
return { diagram: diagram22 };
|
|
100388
100432
|
}, true ? __vite__mapDeps([43,17,19,2,4,5]) : void 0);
|
|
100389
100433
|
return { id: id23, diagram: diagram2 };
|
|
@@ -100399,7 +100443,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
|
|
|
100399
100443
|
}, "detector");
|
|
100400
100444
|
var loader24 = /* @__PURE__ */ __name(async () => {
|
|
100401
100445
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100402
|
-
const { diagram: diagram22 } = await import("./diagram-IFDJBPK2-
|
|
100446
|
+
const { diagram: diagram22 } = await import("./diagram-IFDJBPK2-CZ1KR1hO.js");
|
|
100403
100447
|
return { diagram: diagram22 };
|
|
100404
100448
|
}, true ? __vite__mapDeps([44,17,19,2,4,5]) : void 0);
|
|
100405
100449
|
return { id: id24, diagram: diagram2 };
|
|
@@ -100415,7 +100459,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
|
|
|
100415
100459
|
}, "detector");
|
|
100416
100460
|
var loader25 = /* @__PURE__ */ __name(async () => {
|
|
100417
100461
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100418
|
-
const { diagram: diagram22 } = await import("./blockDiagram-WCTKOSBZ-
|
|
100462
|
+
const { diagram: diagram22 } = await import("./blockDiagram-WCTKOSBZ-Bozcnodw.js");
|
|
100419
100463
|
return { diagram: diagram22 };
|
|
100420
100464
|
}, true ? __vite__mapDeps([45,11,5,2,1,14]) : void 0);
|
|
100421
100465
|
return { id: id25, diagram: diagram2 };
|
|
@@ -100432,7 +100476,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
|
|
|
100432
100476
|
}, "detector");
|
|
100433
100477
|
var loader26 = /* @__PURE__ */ __name(async () => {
|
|
100434
100478
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100435
|
-
const { diagram: diagram22 } = await import("./architectureDiagram-2XIMDMQ5-
|
|
100479
|
+
const { diagram: diagram22 } = await import("./architectureDiagram-2XIMDMQ5-D3Xtb8u_.js");
|
|
100436
100480
|
return { diagram: diagram22 };
|
|
100437
100481
|
}, true ? __vite__mapDeps([46,17,19,2,4,5,7]) : void 0);
|
|
100438
100482
|
return { id: id26, diagram: diagram2 };
|
|
@@ -100449,7 +100493,7 @@ var detector27 = /* @__PURE__ */ __name((txt) => {
|
|
|
100449
100493
|
}, "detector");
|
|
100450
100494
|
var loader27 = /* @__PURE__ */ __name(async () => {
|
|
100451
100495
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100452
|
-
const { diagram: diagram22 } = await import("./ishikawaDiagram-PHBUUO56-
|
|
100496
|
+
const { diagram: diagram22 } = await import("./ishikawaDiagram-PHBUUO56-iZCVn19K.js");
|
|
100453
100497
|
return { diagram: diagram22 };
|
|
100454
100498
|
}, true ? [] : void 0);
|
|
100455
100499
|
return { id: id27, diagram: diagram2 };
|
|
@@ -100465,7 +100509,7 @@ var detector28 = /* @__PURE__ */ __name((txt) => {
|
|
|
100465
100509
|
}, "detector");
|
|
100466
100510
|
var loader28 = /* @__PURE__ */ __name(async () => {
|
|
100467
100511
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100468
|
-
const { diagram: diagram22 } = await import("./vennDiagram-LZ73GAT5-
|
|
100512
|
+
const { diagram: diagram22 } = await import("./vennDiagram-LZ73GAT5-BrxPNUYz.js");
|
|
100469
100513
|
return { diagram: diagram22 };
|
|
100470
100514
|
}, true ? [] : void 0);
|
|
100471
100515
|
return { id: id28, diagram: diagram2 };
|
|
@@ -100482,7 +100526,7 @@ var detector29 = /* @__PURE__ */ __name((txt) => {
|
|
|
100482
100526
|
}, "detector");
|
|
100483
100527
|
var loader29 = /* @__PURE__ */ __name(async () => {
|
|
100484
100528
|
const { diagram: diagram2 } = await __vitePreload(async () => {
|
|
100485
|
-
const { diagram: diagram22 } = await import("./diagram-E7M64L7V-
|
|
100529
|
+
const { diagram: diagram22 } = await import("./diagram-E7M64L7V-C6z0VVoW.js");
|
|
100486
100530
|
return { diagram: diagram22 };
|
|
100487
100531
|
}, true ? __vite__mapDeps([47,13,17,19,2,4,5,23,27,22]) : void 0);
|
|
100488
100532
|
return { id: id29, diagram: diagram2 };
|
|
@@ -102590,27 +102634,15 @@ class DomindsDialogContainer extends HTMLElement {
|
|
|
102590
102634
|
const doneIconHtml = '<span class="icon-mask dc-icon-check-circle" aria-hidden="true"></span>';
|
|
102591
102635
|
const copyIconHtml = '<span class="icon-mask dc-icon-copy" aria-hidden="true"></span>';
|
|
102592
102636
|
try {
|
|
102593
|
-
await
|
|
102594
|
-
|
|
102595
|
-
btn.innerHTML = doneIconHtml;
|
|
102596
|
-
setTimeout(() => btn.innerHTML = prev2 || copyIconHtml, 1200);
|
|
102597
|
-
} catch (err) {
|
|
102598
|
-
try {
|
|
102599
|
-
const ta = document.createElement("textarea");
|
|
102600
|
-
ta.value = text2;
|
|
102601
|
-
ta.style.position = "fixed";
|
|
102602
|
-
ta.style.opacity = "0";
|
|
102603
|
-
document.body.appendChild(ta);
|
|
102604
|
-
ta.focus();
|
|
102605
|
-
ta.select();
|
|
102606
|
-
document.execCommand("copy");
|
|
102607
|
-
ta.remove();
|
|
102637
|
+
const result = await copyTextOrShowManualCopy(text2, btn);
|
|
102638
|
+
if (result.kind === "copied") {
|
|
102608
102639
|
const prev2 = btn.innerHTML || "";
|
|
102609
102640
|
btn.innerHTML = doneIconHtml;
|
|
102610
102641
|
setTimeout(() => btn.innerHTML = prev2 || copyIconHtml, 1200);
|
|
102611
|
-
} catch (err2) {
|
|
102612
|
-
console.warn("Clipboard write failed", err2);
|
|
102613
102642
|
}
|
|
102643
|
+
} catch (err) {
|
|
102644
|
+
console.warn("Clipboard write failed", err);
|
|
102645
|
+
this.emitToast(getUiStrings(this.uiLanguage).copyFailedToast, "warning");
|
|
102614
102646
|
}
|
|
102615
102647
|
}
|
|
102616
102648
|
});
|
|
@@ -105776,34 +105808,17 @@ ${event.content}`;
|
|
|
105776
105808
|
emitToast(message, kind = "info") {
|
|
105777
105809
|
dispatchDomindsEvent(this, "ui-toast", { message, kind }, { bubbles: true, composed: true });
|
|
105778
105810
|
}
|
|
105779
|
-
async copyTextToClipboard(text2) {
|
|
105780
|
-
try {
|
|
105781
|
-
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
105782
|
-
await navigator.clipboard.writeText(text2);
|
|
105783
|
-
return true;
|
|
105784
|
-
}
|
|
105785
|
-
const ta = document.createElement("textarea");
|
|
105786
|
-
ta.value = text2;
|
|
105787
|
-
ta.setAttribute("readonly", "true");
|
|
105788
|
-
ta.style.position = "fixed";
|
|
105789
|
-
ta.style.left = "-9999px";
|
|
105790
|
-
document.body.appendChild(ta);
|
|
105791
|
-
ta.select();
|
|
105792
|
-
const ok = document.execCommand("copy");
|
|
105793
|
-
document.body.removeChild(ta);
|
|
105794
|
-
return ok === true;
|
|
105795
|
-
} catch {
|
|
105796
|
-
return false;
|
|
105797
|
-
}
|
|
105798
|
-
}
|
|
105799
105811
|
async copyLinkToClipboardWithToast(urlStr) {
|
|
105800
|
-
const ok = await this.copyTextToClipboard(urlStr);
|
|
105801
105812
|
const t2 = getUiStrings(this.uiLanguage);
|
|
105802
|
-
|
|
105803
|
-
|
|
105804
|
-
|
|
105813
|
+
try {
|
|
105814
|
+
const result = await copyTextOrShowManualCopy(urlStr, null);
|
|
105815
|
+
if (result.kind === "copied") {
|
|
105816
|
+
this.emitToast(t2.linkCopiedToast, "info");
|
|
105817
|
+
}
|
|
105818
|
+
} catch (error2) {
|
|
105819
|
+
console.warn("Manual link copy fallback failed", error2);
|
|
105820
|
+
this.emitToast(t2.linkCopyFailedToast, "warning");
|
|
105805
105821
|
}
|
|
105806
|
-
this.emitToast(t2.linkCopyFailedToast, "warning");
|
|
105807
105822
|
}
|
|
105808
105823
|
// === REMINDER EVENTS ===
|
|
105809
105824
|
handleFullRemindersUpdate(event) {
|
|
@@ -113682,7 +113697,7 @@ class DomindsTeamMembers extends HTMLElement {
|
|
|
113682
113697
|
if (action === "mention") {
|
|
113683
113698
|
this.emitMention(memberId2);
|
|
113684
113699
|
} else if (action === "copy") {
|
|
113685
|
-
void this.copyMention(memberId2);
|
|
113700
|
+
void this.copyMention(memberId2, actionBtn);
|
|
113686
113701
|
}
|
|
113687
113702
|
return;
|
|
113688
113703
|
}
|
|
@@ -113718,25 +113733,14 @@ class DomindsTeamMembers extends HTMLElement {
|
|
|
113718
113733
|
const detail = { memberId, mention };
|
|
113719
113734
|
dispatchDomindsEvent(this, "team-member-mention", detail, { bubbles: true, composed: true });
|
|
113720
113735
|
}
|
|
113721
|
-
async copyMention(memberId) {
|
|
113736
|
+
async copyMention(memberId, restoreFocusTo) {
|
|
113722
113737
|
const t2 = getUiStrings(this.props.uiLanguage);
|
|
113723
113738
|
const mention = `@${memberId}`;
|
|
113724
113739
|
try {
|
|
113725
|
-
|
|
113726
|
-
|
|
113740
|
+
const result = await copyTextOrShowManualCopy(mention, restoreFocusTo);
|
|
113741
|
+
if (result.kind === "copied") {
|
|
113727
113742
|
this.emitToast(`${t2.teamMembersCopiedPrefix}${mention}`);
|
|
113728
|
-
return;
|
|
113729
113743
|
}
|
|
113730
|
-
const ta = document.createElement("textarea");
|
|
113731
|
-
ta.value = mention;
|
|
113732
|
-
ta.setAttribute("readonly", "true");
|
|
113733
|
-
ta.style.position = "fixed";
|
|
113734
|
-
ta.style.left = "-9999px";
|
|
113735
|
-
document.body.appendChild(ta);
|
|
113736
|
-
ta.select();
|
|
113737
|
-
document.execCommand("copy");
|
|
113738
|
-
document.body.removeChild(ta);
|
|
113739
|
-
this.emitToast(`${t2.teamMembersCopiedPrefix}${mention}`);
|
|
113740
113744
|
} catch (error2) {
|
|
113741
113745
|
const msg = error2 instanceof Error ? error2.message : t2.unknownError;
|
|
113742
113746
|
this.emitToast(`${t2.teamMembersCopyFailedPrefix}${msg}`, "warning");
|
|
@@ -117529,7 +117533,9 @@ const _DomindsApp = class _DomindsApp extends HTMLElement {
|
|
|
117529
117533
|
this.backendMode = null;
|
|
117530
117534
|
this.domindsSelfUpdate = null;
|
|
117531
117535
|
this.domindsSelfUpdateCheckInFlight = false;
|
|
117536
|
+
this.domindsSelfUpdateCheckPromise = null;
|
|
117532
117537
|
this.domindsSelfUpdateInstallFailureToastKey = null;
|
|
117538
|
+
this.domindsVersionForceRestartPromise = null;
|
|
117533
117539
|
this.domindsVersionClickTimer = null;
|
|
117534
117540
|
this.toolbarCurrentCourse = 1;
|
|
117535
117541
|
this.toolbarTotalCourses = 1;
|
|
@@ -119105,11 +119111,12 @@ ${formatUiLanguageOptionLabel({
|
|
|
119105
119111
|
}
|
|
119106
119112
|
switch (state2.kind) {
|
|
119107
119113
|
case "install":
|
|
119108
|
-
case "installing":
|
|
119109
119114
|
lines.push(`${t2.domindsVersionTooltipStatus}: ${t2.domindsVersionUpdateAvailableTitle}`);
|
|
119110
119115
|
break;
|
|
119116
|
+
case "installing":
|
|
119117
|
+
lines.push(`${t2.domindsVersionTooltipStatus}: ${t2.domindsVersionInstallInProgress}`);
|
|
119118
|
+
break;
|
|
119111
119119
|
case "restart":
|
|
119112
|
-
case "restarting":
|
|
119113
119120
|
lines.push(
|
|
119114
119121
|
`${t2.domindsVersionTooltipStatus}: ${this.domindsSelfUpdate?.reason === "install_verified_after_command_failure" ? this.formatVersionCheckResult(
|
|
119115
119122
|
t2.domindsVersionInstallVerifiedAfterCommandFailure,
|
|
@@ -119117,6 +119124,9 @@ ${formatUiLanguageOptionLabel({
|
|
|
119117
119124
|
) : t2.domindsVersionRestartAvailableTitle}`
|
|
119118
119125
|
);
|
|
119119
119126
|
break;
|
|
119127
|
+
case "restarting":
|
|
119128
|
+
lines.push(`${t2.domindsVersionTooltipStatus}: ${t2.domindsVersionRestartInProgress}`);
|
|
119129
|
+
break;
|
|
119120
119130
|
case "idle":
|
|
119121
119131
|
if (this.domindsSelfUpdate?.reason === "latest_check_failed" && this.domindsSelfUpdate.message) {
|
|
119122
119132
|
lines.push(`${t2.domindsVersionTooltipStatus}: ${this.domindsSelfUpdate.message}`);
|
|
@@ -119140,7 +119150,7 @@ ${formatUiLanguageOptionLabel({
|
|
|
119140
119150
|
versionIndicator.classList.toggle("hidden", !isVisible);
|
|
119141
119151
|
const actionState = this.getDomindsVersionActionState();
|
|
119142
119152
|
const isActionable = actionState.kind === "install" || actionState.kind === "restart";
|
|
119143
|
-
const needsAttention = isActionable;
|
|
119153
|
+
const needsAttention = isActionable || actionState.kind === "installing";
|
|
119144
119154
|
versionIndicator.disabled = false;
|
|
119145
119155
|
versionIndicator.dataset.actionable = isActionable ? "true" : "false";
|
|
119146
119156
|
versionIndicator.dataset.attention = needsAttention ? "true" : "false";
|
|
@@ -119269,6 +119279,9 @@ ${formatUiLanguageOptionLabel({
|
|
|
119269
119279
|
}
|
|
119270
119280
|
this.domindsSelfUpdate = nextStatus;
|
|
119271
119281
|
this.updateDomindsVersionUi();
|
|
119282
|
+
if (nextStatus.reason === "install_failed") {
|
|
119283
|
+
throw new Error(nextStatus.message || t2.unknownError);
|
|
119284
|
+
}
|
|
119272
119285
|
if (nextStatus.busy === "installing") {
|
|
119273
119286
|
this.showInfo(t2.domindsVersionInstallInProgress);
|
|
119274
119287
|
return;
|
|
@@ -119286,14 +119299,31 @@ ${formatUiLanguageOptionLabel({
|
|
|
119286
119299
|
);
|
|
119287
119300
|
return;
|
|
119288
119301
|
}
|
|
119289
|
-
|
|
119302
|
+
throw new Error(nextStatus.message || t2.unknownError);
|
|
119290
119303
|
} catch (error2) {
|
|
119291
119304
|
const message = error2 instanceof Error ? error2.message : t2.unknownError;
|
|
119292
119305
|
this.showToast(`${t2.domindsVersionActionFailedPrefix}${message}`, "error");
|
|
119293
119306
|
}
|
|
119294
119307
|
}
|
|
119295
|
-
async
|
|
119296
|
-
|
|
119308
|
+
async requestDomindsVersionAction(action) {
|
|
119309
|
+
const t2 = getUiStrings(this.uiLanguage);
|
|
119310
|
+
const resp = await this.apiClient.actDomindsSelfUpdate(action);
|
|
119311
|
+
if (!resp.success) {
|
|
119312
|
+
if (resp.status === 401) {
|
|
119313
|
+
this.onAuthRejected("api");
|
|
119314
|
+
throw new Error(_DomindsApp.AUTH_REJECTED_ERROR_MESSAGE);
|
|
119315
|
+
}
|
|
119316
|
+
throw new Error(resp.error || t2.unknownError);
|
|
119317
|
+
}
|
|
119318
|
+
const nextStatus = resp.data?.update;
|
|
119319
|
+
if (!nextStatus) {
|
|
119320
|
+
throw new Error("Missing Dominds self-update action payload");
|
|
119321
|
+
}
|
|
119322
|
+
this.domindsSelfUpdate = nextStatus;
|
|
119323
|
+
this.updateDomindsVersionUi();
|
|
119324
|
+
return nextStatus;
|
|
119325
|
+
}
|
|
119326
|
+
async runDomindsVersionCheck() {
|
|
119297
119327
|
this.domindsSelfUpdateCheckInFlight = true;
|
|
119298
119328
|
this.updateDomindsVersionUi();
|
|
119299
119329
|
try {
|
|
@@ -119301,7 +119331,7 @@ ${formatUiLanguageOptionLabel({
|
|
|
119301
119331
|
if (!resp.success) {
|
|
119302
119332
|
if (resp.status === 401) {
|
|
119303
119333
|
this.onAuthRejected("api");
|
|
119304
|
-
return;
|
|
119334
|
+
return null;
|
|
119305
119335
|
}
|
|
119306
119336
|
const t2 = getUiStrings(this.uiLanguage);
|
|
119307
119337
|
throw new Error(resp.error || t2.unknownError);
|
|
@@ -119311,16 +119341,192 @@ ${formatUiLanguageOptionLabel({
|
|
|
119311
119341
|
throw new Error("Missing Dominds self-update check payload");
|
|
119312
119342
|
}
|
|
119313
119343
|
this.domindsSelfUpdate = nextStatus;
|
|
119314
|
-
|
|
119344
|
+
return nextStatus;
|
|
119315
119345
|
} catch (error2) {
|
|
119316
119346
|
const t2 = getUiStrings(this.uiLanguage);
|
|
119317
119347
|
const message = error2 instanceof Error ? error2.message : t2.unknownError;
|
|
119318
119348
|
this.showToast(`${t2.domindsVersionCheckFailedPrefix}${message}`, "error");
|
|
119349
|
+
return null;
|
|
119319
119350
|
} finally {
|
|
119320
119351
|
this.domindsSelfUpdateCheckInFlight = false;
|
|
119321
119352
|
this.updateDomindsVersionUi();
|
|
119353
|
+
this.domindsSelfUpdateCheckPromise = null;
|
|
119354
|
+
}
|
|
119355
|
+
}
|
|
119356
|
+
ensureDomindsVersionCheck() {
|
|
119357
|
+
if (this.domindsSelfUpdateCheckPromise !== null) return this.domindsSelfUpdateCheckPromise;
|
|
119358
|
+
this.domindsSelfUpdateCheckPromise = this.runDomindsVersionCheck();
|
|
119359
|
+
return this.domindsSelfUpdateCheckPromise;
|
|
119360
|
+
}
|
|
119361
|
+
async handleDomindsVersionCheck() {
|
|
119362
|
+
const status = await this.ensureDomindsVersionCheck();
|
|
119363
|
+
if (status !== null && this.domindsVersionForceRestartPromise === null) {
|
|
119364
|
+
this.showDomindsVersionCheckResult(status);
|
|
119365
|
+
}
|
|
119366
|
+
}
|
|
119367
|
+
async handleDomindsVersionForceRestart() {
|
|
119368
|
+
if (this.domindsVersionForceRestartPromise !== null) {
|
|
119369
|
+
await this.domindsVersionForceRestartPromise;
|
|
119370
|
+
return;
|
|
119371
|
+
}
|
|
119372
|
+
this.domindsVersionForceRestartPromise = this.runDomindsVersionForceRestart();
|
|
119373
|
+
try {
|
|
119374
|
+
await this.domindsVersionForceRestartPromise;
|
|
119375
|
+
} finally {
|
|
119376
|
+
this.domindsVersionForceRestartPromise = null;
|
|
119377
|
+
}
|
|
119378
|
+
}
|
|
119379
|
+
async runDomindsVersionForceRestart() {
|
|
119380
|
+
const t2 = getUiStrings(this.uiLanguage);
|
|
119381
|
+
if (this.backendMode !== "production") return;
|
|
119382
|
+
const checkedStatus = await this.ensureDomindsVersionCheck();
|
|
119383
|
+
if (checkedStatus === null) return;
|
|
119384
|
+
try {
|
|
119385
|
+
if (checkedStatus.action === "install" || checkedStatus.action === "restart") {
|
|
119386
|
+
const choice2 = await this.promptDomindsUpdateRestartChoice(
|
|
119387
|
+
this.formatVersionCheckResult(t2.domindsVersionInstallAndRestartConfirm, checkedStatus)
|
|
119388
|
+
);
|
|
119389
|
+
if (choice2 === null) return;
|
|
119390
|
+
if (choice2 === "install_and_restart") {
|
|
119391
|
+
if (checkedStatus.action === "restart") {
|
|
119392
|
+
await this.requestDomindsVersionAction("restart");
|
|
119393
|
+
this.showInfo(t2.domindsVersionRestartInProgress);
|
|
119394
|
+
return;
|
|
119395
|
+
}
|
|
119396
|
+
const installStatus = await this.requestDomindsVersionAction("install");
|
|
119397
|
+
if (installStatus.busy === "installing") {
|
|
119398
|
+
this.showInfo(t2.domindsVersionInstallInProgress);
|
|
119399
|
+
await this.waitForDomindsInstallCompletionAndRestart();
|
|
119400
|
+
return;
|
|
119401
|
+
}
|
|
119402
|
+
if (installStatus.action === "restart") {
|
|
119403
|
+
await this.requestDomindsVersionAction("restart");
|
|
119404
|
+
this.showInfo(t2.domindsVersionRestartInProgress);
|
|
119405
|
+
return;
|
|
119406
|
+
}
|
|
119407
|
+
throw new Error(installStatus.message || t2.unknownError);
|
|
119408
|
+
}
|
|
119409
|
+
if (choice2 !== "restart_only") {
|
|
119410
|
+
const _exhaustive = choice2;
|
|
119411
|
+
throw new Error(`Unexpected Dominds update restart choice: ${String(_exhaustive)}`);
|
|
119412
|
+
}
|
|
119413
|
+
} else if (!window.confirm(this.formatVersionActionPrompt(t2.domindsVersionForceRestartConfirm, null))) {
|
|
119414
|
+
return;
|
|
119415
|
+
}
|
|
119416
|
+
await this.requestDomindsVersionAction("force_restart");
|
|
119417
|
+
this.showInfo(t2.domindsVersionRestartInProgress);
|
|
119418
|
+
} catch (error2) {
|
|
119419
|
+
const message = error2 instanceof Error ? error2.message : t2.unknownError;
|
|
119420
|
+
if (message !== _DomindsApp.AUTH_REJECTED_ERROR_MESSAGE) {
|
|
119421
|
+
this.showToast(`${t2.domindsVersionActionFailedPrefix}${message}`, "error");
|
|
119422
|
+
}
|
|
119322
119423
|
}
|
|
119323
119424
|
}
|
|
119425
|
+
promptDomindsUpdateRestartChoice(message) {
|
|
119426
|
+
const t2 = getUiStrings(this.uiLanguage);
|
|
119427
|
+
const root2 = this.shadowRoot;
|
|
119428
|
+
if (root2 === null) return Promise.resolve(null);
|
|
119429
|
+
return new Promise((resolve) => {
|
|
119430
|
+
const modal = document.createElement("div");
|
|
119431
|
+
modal.className = "dominds-modal dominds-version-choice-modal";
|
|
119432
|
+
const previouslyFocused = root2.activeElement;
|
|
119433
|
+
let settled = false;
|
|
119434
|
+
modal.innerHTML = `
|
|
119435
|
+
<div class="modal-backdrop"></div>
|
|
119436
|
+
<div class="modal-content" role="dialog" aria-modal="true" aria-labelledby="dominds-version-choice-title">
|
|
119437
|
+
<div class="modal-header">
|
|
119438
|
+
<h3 id="dominds-version-choice-title">${htmlExports.escapeHtml(t2.domindsVersionUpdateChoiceTitle)}</h3>
|
|
119439
|
+
<button type="button" class="modal-close" aria-label="${htmlExports.escapeHtml(t2.close)}">
|
|
119440
|
+
<span class="icon-mask app-icon-close" aria-hidden="true"></span>
|
|
119441
|
+
</button>
|
|
119442
|
+
</div>
|
|
119443
|
+
<div class="modal-body">
|
|
119444
|
+
<p class="modal-description">${htmlExports.escapeHtml(message)}</p>
|
|
119445
|
+
</div>
|
|
119446
|
+
<div class="modal-footer">
|
|
119447
|
+
<button type="button" class="btn btn-primary" data-choice="install_and_restart">${htmlExports.escapeHtml(
|
|
119448
|
+
t2.domindsVersionUpdateChoiceInstallButton
|
|
119449
|
+
)}</button>
|
|
119450
|
+
<button type="button" class="btn btn-secondary" data-choice="restart_only">${htmlExports.escapeHtml(
|
|
119451
|
+
t2.domindsVersionUpdateChoiceRestartButton
|
|
119452
|
+
)}</button>
|
|
119453
|
+
</div>
|
|
119454
|
+
</div>
|
|
119455
|
+
`;
|
|
119456
|
+
const close2 = (choice2) => {
|
|
119457
|
+
if (settled) return;
|
|
119458
|
+
settled = true;
|
|
119459
|
+
modal.remove();
|
|
119460
|
+
if (previouslyFocused instanceof HTMLElement) {
|
|
119461
|
+
previouslyFocused.focus();
|
|
119462
|
+
}
|
|
119463
|
+
resolve(choice2);
|
|
119464
|
+
};
|
|
119465
|
+
modal.addEventListener("click", (event) => {
|
|
119466
|
+
const target = event.target;
|
|
119467
|
+
if (!(target instanceof Element)) return;
|
|
119468
|
+
if (target.closest(".modal-close") || target.classList.contains("modal-backdrop")) {
|
|
119469
|
+
close2(null);
|
|
119470
|
+
return;
|
|
119471
|
+
}
|
|
119472
|
+
const choiceButton = target.closest("[data-choice]");
|
|
119473
|
+
if (!(choiceButton instanceof HTMLElement)) return;
|
|
119474
|
+
const choice2 = choiceButton.dataset.choice;
|
|
119475
|
+
if (choice2 === "install_and_restart" || choice2 === "restart_only") {
|
|
119476
|
+
close2(choice2);
|
|
119477
|
+
}
|
|
119478
|
+
});
|
|
119479
|
+
modal.addEventListener("keydown", (event) => {
|
|
119480
|
+
if (event.key === "Escape") {
|
|
119481
|
+
event.preventDefault();
|
|
119482
|
+
close2(null);
|
|
119483
|
+
}
|
|
119484
|
+
});
|
|
119485
|
+
root2.appendChild(modal);
|
|
119486
|
+
const firstButton = modal.querySelector('[data-choice="install_and_restart"]');
|
|
119487
|
+
if (firstButton instanceof HTMLButtonElement) {
|
|
119488
|
+
firstButton.focus();
|
|
119489
|
+
}
|
|
119490
|
+
});
|
|
119491
|
+
}
|
|
119492
|
+
async waitForDomindsInstallCompletionAndRestart() {
|
|
119493
|
+
const t2 = getUiStrings(this.uiLanguage);
|
|
119494
|
+
const deadlineMs = Date.now() + 15 * 60 * 1e3;
|
|
119495
|
+
while (Date.now() < deadlineMs) {
|
|
119496
|
+
await new Promise((resolve) => {
|
|
119497
|
+
window.setTimeout(resolve, 1500);
|
|
119498
|
+
});
|
|
119499
|
+
const resp = await this.apiClient.checkDomindsSelfUpdate();
|
|
119500
|
+
if (!resp.success) {
|
|
119501
|
+
if (resp.status === 401) {
|
|
119502
|
+
this.onAuthRejected("api");
|
|
119503
|
+
throw new Error(_DomindsApp.AUTH_REJECTED_ERROR_MESSAGE);
|
|
119504
|
+
}
|
|
119505
|
+
throw new Error(resp.error || t2.unknownError);
|
|
119506
|
+
}
|
|
119507
|
+
const nextStatus = resp.data?.update;
|
|
119508
|
+
if (!nextStatus) {
|
|
119509
|
+
throw new Error("Missing Dominds self-update check payload");
|
|
119510
|
+
}
|
|
119511
|
+
this.domindsSelfUpdate = nextStatus;
|
|
119512
|
+
this.updateDomindsVersionUi();
|
|
119513
|
+
if (nextStatus.busy === "installing") continue;
|
|
119514
|
+
if (nextStatus.reason === "install_failed") {
|
|
119515
|
+
throw new Error(nextStatus.message || t2.unknownError);
|
|
119516
|
+
}
|
|
119517
|
+
if (nextStatus.action === "restart") {
|
|
119518
|
+
await this.requestDomindsVersionAction("restart");
|
|
119519
|
+
this.showInfo(t2.domindsVersionRestartInProgress);
|
|
119520
|
+
return;
|
|
119521
|
+
}
|
|
119522
|
+
if (nextStatus.busy === "restarting") {
|
|
119523
|
+
this.showInfo(t2.domindsVersionRestartInProgress);
|
|
119524
|
+
return;
|
|
119525
|
+
}
|
|
119526
|
+
throw new Error(nextStatus.message || t2.unknownError);
|
|
119527
|
+
}
|
|
119528
|
+
throw new Error("Dominds install did not finish before the auto-restart wait timeout");
|
|
119529
|
+
}
|
|
119324
119530
|
queueDomindsVersionClickAction() {
|
|
119325
119531
|
if (this.domindsVersionClickTimer !== null) {
|
|
119326
119532
|
window.clearTimeout(this.domindsVersionClickTimer);
|
|
@@ -122589,6 +122795,10 @@ ${formatUiLanguageOptionLabel({
|
|
|
122589
122795
|
line-height: 1.5;
|
|
122590
122796
|
}
|
|
122591
122797
|
|
|
122798
|
+
.dominds-version-choice-modal .modal-description {
|
|
122799
|
+
white-space: pre-line;
|
|
122800
|
+
}
|
|
122801
|
+
|
|
122592
122802
|
.form-group {
|
|
122593
122803
|
margin-bottom: 12px;
|
|
122594
122804
|
}
|
|
@@ -124112,8 +124322,13 @@ ${content}`;
|
|
|
124112
124322
|
}
|
|
124113
124323
|
const versionBtn = target.closest("#dominds-version");
|
|
124114
124324
|
if (versionBtn) {
|
|
124115
|
-
if (evt2 instanceof MouseEvent && evt2.detail
|
|
124325
|
+
if (evt2 instanceof MouseEvent && evt2.detail === 2) {
|
|
124326
|
+
this.cancelDomindsVersionClickAction();
|
|
124327
|
+
return;
|
|
124328
|
+
}
|
|
124329
|
+
if (evt2 instanceof MouseEvent && evt2.detail >= 3) {
|
|
124116
124330
|
this.cancelDomindsVersionClickAction();
|
|
124331
|
+
void this.handleDomindsVersionForceRestart();
|
|
124117
124332
|
return;
|
|
124118
124333
|
}
|
|
124119
124334
|
this.queueDomindsVersionClickAction();
|
|
@@ -125058,34 +125273,17 @@ ${content}`;
|
|
|
125058
125273
|
}
|
|
125059
125274
|
window.history.replaceState({}, "", target.toString());
|
|
125060
125275
|
}
|
|
125061
|
-
async copyTextToClipboard(text2) {
|
|
125062
|
-
try {
|
|
125063
|
-
if (navigator.clipboard && typeof navigator.clipboard.writeText === "function") {
|
|
125064
|
-
await navigator.clipboard.writeText(text2);
|
|
125065
|
-
return true;
|
|
125066
|
-
}
|
|
125067
|
-
const ta = document.createElement("textarea");
|
|
125068
|
-
ta.value = text2;
|
|
125069
|
-
ta.setAttribute("readonly", "true");
|
|
125070
|
-
ta.style.position = "fixed";
|
|
125071
|
-
ta.style.left = "-9999px";
|
|
125072
|
-
document.body.appendChild(ta);
|
|
125073
|
-
ta.select();
|
|
125074
|
-
const ok = document.execCommand("copy");
|
|
125075
|
-
document.body.removeChild(ta);
|
|
125076
|
-
return ok === true;
|
|
125077
|
-
} catch {
|
|
125078
|
-
return false;
|
|
125079
|
-
}
|
|
125080
|
-
}
|
|
125081
125276
|
async copyLinkToClipboardWithToast(urlStr) {
|
|
125082
|
-
const ok = await this.copyTextToClipboard(urlStr);
|
|
125083
125277
|
const t2 = getUiStrings(this.uiLanguage);
|
|
125084
|
-
|
|
125085
|
-
|
|
125086
|
-
|
|
125278
|
+
try {
|
|
125279
|
+
const result = await copyTextOrShowManualCopy(urlStr, null);
|
|
125280
|
+
if (result.kind === "copied") {
|
|
125281
|
+
this.showToast(t2.linkCopiedToast, "info");
|
|
125282
|
+
}
|
|
125283
|
+
} catch (error2) {
|
|
125284
|
+
console.warn("Manual link copy fallback failed", error2);
|
|
125285
|
+
this.showToast(t2.linkCopyFailedToast, "warning");
|
|
125087
125286
|
}
|
|
125088
|
-
this.showToast(t2.linkCopyFailedToast, "warning");
|
|
125089
125287
|
}
|
|
125090
125288
|
applyPendingQ4HSelectionFromDeepLink() {
|
|
125091
125289
|
const questionId = this.pendingDeepLinkQ4HSelectionQuestionId;
|
|
@@ -128934,6 +129132,7 @@ ${content}`;
|
|
|
128934
129132
|
// Resize handle removed: input is resized via a dedicated handle inside `dominds-q4h-input`.
|
|
128935
129133
|
};
|
|
128936
129134
|
_DomindsApp.DEFAULT_BROWSER_TITLE = "Dominds - DevOps Mindsets";
|
|
129135
|
+
_DomindsApp.AUTH_REJECTED_ERROR_MESSAGE = "Dominds API auth rejected";
|
|
128937
129136
|
_DomindsApp.TOAST_HISTORY_STORAGE_KEY = "dominds-toast-history-v2";
|
|
128938
129137
|
_DomindsApp.TOAST_HISTORY_MAX = 200;
|
|
128939
129138
|
_DomindsApp.UNIFIED_TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/;
|
|
@@ -129912,7 +130111,7 @@ class DomindsSetup extends HTMLElement {
|
|
|
129912
130111
|
}
|
|
129913
130112
|
const copyFileBtn = this.shadowRoot.querySelector("#file-modal-copy");
|
|
129914
130113
|
if (copyFileBtn instanceof HTMLButtonElement) {
|
|
129915
|
-
copyFileBtn.onclick = () => void this.copyFileModalRaw();
|
|
130114
|
+
copyFileBtn.onclick = () => void this.copyFileModalRaw(copyFileBtn);
|
|
129916
130115
|
}
|
|
129917
130116
|
this.renderFileModalCodeBlock();
|
|
129918
130117
|
}
|
|
@@ -129998,13 +130197,14 @@ class DomindsSetup extends HTMLElement {
|
|
|
129998
130197
|
this.render();
|
|
129999
130198
|
queueMicrotask(() => this.renderFileModalCodeBlock());
|
|
130000
130199
|
}
|
|
130001
|
-
async copyFileModalRaw() {
|
|
130200
|
+
async copyFileModalRaw(restoreFocusTo = null) {
|
|
130002
130201
|
if (this.fileModal.kind !== "ready") return;
|
|
130003
130202
|
const raw = this.fileModal.response.raw;
|
|
130004
130203
|
try {
|
|
130005
|
-
await
|
|
130006
|
-
} catch {
|
|
130007
|
-
|
|
130204
|
+
await copyTextOrShowManualCopy(raw, restoreFocusTo);
|
|
130205
|
+
} catch (error2) {
|
|
130206
|
+
console.error("Copy file modal raw failed:", error2);
|
|
130207
|
+
alert("复制失败 / Copy failed.");
|
|
130008
130208
|
}
|
|
130009
130209
|
}
|
|
130010
130210
|
buildTeamYamlSnippet() {
|
|
@@ -130971,4 +131171,4 @@ export {
|
|
|
130971
131171
|
purify as y,
|
|
130972
131172
|
clear$2 as z
|
|
130973
131173
|
};
|
|
130974
|
-
//# sourceMappingURL=index-
|
|
131174
|
+
//# sourceMappingURL=index-C_PzQ5W5.js.map
|