ryugi-artifacts 1.31.6 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/cli.cjs +1 -1
  2. package/dist/server.cjs +136 -24
  3. package/dist/viewer/CloudDocument-DBhwAPZX.js +1 -0
  4. package/dist/viewer/CloudLiveDocument-BX2fqdBQ.js +1 -0
  5. package/dist/viewer/{DocumentLayout-CyTmvIv_.js → DocumentLayout-DUPesXt0.js} +142 -142
  6. package/dist/viewer/DocumentPage-p78IN0UO.js +1 -0
  7. package/dist/viewer/RailSwitch-B8Aht-FG.js +64 -0
  8. package/dist/viewer/{abnfDiagram-VCTEODGH-BU-Q5nRu.js → abnfDiagram-VCTEODGH-Dz0T5wEI.js} +1 -1
  9. package/dist/viewer/{ar-SA-G6X2FPQ2-Bym-z3Gy.js → ar-SA-G6X2FPQ2-Bytlrg0S.js} +1 -1
  10. package/dist/viewer/{architectureDiagram-5GKGNRK7-hBXFocSt.js → architectureDiagram-5GKGNRK7-OYoo3ME7.js} +1 -1
  11. package/dist/viewer/{az-AZ-76LH7QW2-DptPViJZ.js → az-AZ-76LH7QW2-w9f06xDk.js} +1 -1
  12. package/dist/viewer/{bg-BG-XCXSNQG7-BCAH5UjV.js → bg-BG-XCXSNQG7-CEWDLlq7.js} +1 -1
  13. package/dist/viewer/{blockDiagram-I7D4REHJ-CQMZg8Nz.js → blockDiagram-I7D4REHJ-CAowR37U.js} +1 -1
  14. package/dist/viewer/{bn-BD-2XOGV67Q-CQ103rTG.js → bn-BD-2XOGV67Q-DBNpDzHO.js} +1 -1
  15. package/dist/viewer/{c4Diagram-7LVT6UL2-Wmb5uWym.js → c4Diagram-7LVT6UL2-Dzzhg0Hl.js} +1 -1
  16. package/dist/viewer/{ca-ES-6MX7JW3Y-QZjpbZoN.js → ca-ES-6MX7JW3Y-Det2dq0q.js} +1 -1
  17. package/dist/viewer/{chunk-4HAMMTFA-DApjFb3D.js → chunk-4HAMMTFA-DZl9uS5D.js} +1 -1
  18. package/dist/viewer/{chunk-EIO257PC-CWVuL_0r.js → chunk-EIO257PC-CjCjUdBc.js} +1 -1
  19. package/dist/viewer/{chunk-GMAD6QVW-CsJibQuL.js → chunk-GMAD6QVW-CDRo04Dc.js} +1 -1
  20. package/dist/viewer/{chunk-GVQU2GXP-DYTi7tYA.js → chunk-GVQU2GXP-BhrYhgpE.js} +1 -1
  21. package/dist/viewer/{chunk-IMKFNOWR-CWeDJlP4.js → chunk-IMKFNOWR-BfAgQjlN.js} +1 -1
  22. package/dist/viewer/{chunk-L3NEJ4N5-TdTMGSnz.js → chunk-L3NEJ4N5-D-FTstxq.js} +1 -1
  23. package/dist/viewer/{chunk-OSK3NFVY-DmS4WZvt.js → chunk-OSK3NFVY-CJgUgQQ4.js} +1 -1
  24. package/dist/viewer/{chunk-PWAF6VOD-CgqqcZ7Z.js → chunk-PWAF6VOD-DWHqbvtp.js} +1 -1
  25. package/dist/viewer/{chunk-SHT3W25Y-CO2CRBJI.js → chunk-SHT3W25Y-CBzt56Er.js} +1 -1
  26. package/dist/viewer/{chunk-SVP7TREG-CdURcuTQ.js → chunk-SVP7TREG-b6pmQaqb.js} +1 -1
  27. package/dist/viewer/{chunk-TICWLB2K--5oOkN7m.js → chunk-TICWLB2K-DIPK-gAO.js} +1 -1
  28. package/dist/viewer/{classDiagram-ZZMXUADV-DeIP4NkP.js → classDiagram-ZZMXUADV-DgM9EY-7.js} +1 -1
  29. package/dist/viewer/{classDiagram-v2-VYDZK3BY-DeIP4NkP.js → classDiagram-v2-VYDZK3BY-DgM9EY-7.js} +1 -1
  30. package/dist/viewer/{cs-CZ-2BRQDIVT-N2YztnjI.js → cs-CZ-2BRQDIVT-CXEgS6Pi.js} +1 -1
  31. package/dist/viewer/{cynefinDiagram-5FMLGOSQ-BqdKqwqw.js → cynefinDiagram-5FMLGOSQ-BQkxO3xf.js} +1 -1
  32. package/dist/viewer/{da-DK-5WZEPLOC-CClTezxe.js → da-DK-5WZEPLOC-D2twM2eB.js} +1 -1
  33. package/dist/viewer/{dagre-GXQ25YYZ-DhmSGUk2.js → dagre-GXQ25YYZ-DD_-ARQM.js} +1 -1
  34. package/dist/viewer/{de-DE-XR44H4JA-CLPa1jFU.js → de-DE-XR44H4JA-QQ3wzCUN.js} +1 -1
  35. package/dist/viewer/{diagram-S7CK7UJ4-rnc6tcUb.js → diagram-S7CK7UJ4-C6UhooWh.js} +1 -1
  36. package/dist/viewer/{diagram-UQ7AKVKN-CZG1zSha.js → diagram-UQ7AKVKN-CmOvdTfi.js} +1 -1
  37. package/dist/viewer/{diagram-VX7I27RA-esJGj2aD.js → diagram-VX7I27RA-BQrnggcb.js} +1 -1
  38. package/dist/viewer/{diagram-Z3DM3KII-rMa1oT-N.js → diagram-Z3DM3KII-eqq_bLYp.js} +1 -1
  39. package/dist/viewer/{dist-Bew_q9_H.js → dist-A6XqCKp3.js} +1 -1
  40. package/dist/viewer/{dist-cf3dK6JU.js → dist-BHQRLarc.js} +1 -1
  41. package/dist/viewer/{dist-vfTnUsvv.js → dist-BVD4SXRG.js} +1 -1
  42. package/dist/viewer/{dist-D6BaZXlD.js → dist-C2_czco-.js} +1 -1
  43. package/dist/viewer/{dist-Dd3TTld7.js → dist-CBPL9nOI.js} +1 -1
  44. package/dist/viewer/{dist-D78xEVNA.js → dist-CBa9iIgE.js} +1 -1
  45. package/dist/viewer/{dist-0R8oZhgF.js → dist-COWTq4PW.js} +1 -1
  46. package/dist/viewer/{dist-D-6apRFO.js → dist-CRFROhiU.js} +1 -1
  47. package/dist/viewer/{dist-CvCVEZHM.js → dist-Cm3PtUTh.js} +1 -1
  48. package/dist/viewer/{dist-CY2TkmE9.js → dist-CmuZXMYX.js} +1 -1
  49. package/dist/viewer/{dist-txabnobd.js → dist-CvMMV1bh.js} +1 -1
  50. package/dist/viewer/{dist-Ded9oFKo.js → dist-D6ZK8Xjb.js} +1 -1
  51. package/dist/viewer/{dist-C6czRr4c.js → dist-D9ubIHs9.js} +1 -1
  52. package/dist/viewer/{dist-B13oEVXf.js → dist-DlqN5LCW.js} +1 -1
  53. package/dist/viewer/{dist-BMEAkBHE.js → dist-Dvmx2QWc.js} +1 -1
  54. package/dist/viewer/{dist-CC9VKgjG.js → dist-DwneAiRo.js} +4 -4
  55. package/dist/viewer/{dist-Wtk9y4QC.js → dist-IvjL_4Fz.js} +1 -1
  56. package/dist/viewer/{dist-C55eUDGb.js → dist-MgwwM__x.js} +1 -1
  57. package/dist/viewer/{dist-DabEZ184.js → dist-QND2Lmk5.js} +1 -1
  58. package/dist/viewer/{dist-B40UUbgw.js → dist-YskcL8-n.js} +1 -1
  59. package/dist/viewer/{dist-1wqDUqVM.js → dist-lBA58Q6O.js} +1 -1
  60. package/dist/viewer/{dist-BQp88HM1.js → dist-lONhpLQT.js} +1 -1
  61. package/dist/viewer/{dist-DHALLG2c.js → dist-v3HQ_tBw.js} +1 -1
  62. package/dist/viewer/{dist-CJ7QItR6.js → dist-vk9ofs_t.js} +1 -1
  63. package/dist/viewer/{ebnfDiagram-PWID7BFC-9giBRT9V.js → ebnfDiagram-PWID7BFC-0s9Mm78H.js} +1 -1
  64. package/dist/viewer/{el-GR-BZB4AONW-DiytE3HK.js → el-GR-BZB4AONW-DFIcTo3i.js} +1 -1
  65. package/dist/viewer/{en-B4ZKOASM-BnlX_3m1.js → en-B4ZKOASM-BEswEOpC.js} +1 -1
  66. package/dist/viewer/{erDiagram-RLTQ6QDP-BFc3pr17.js → erDiagram-RLTQ6QDP-A9ucHzt3.js} +1 -1
  67. package/dist/viewer/{es-ES-U4NZUMDT-BLZs9ryR.js → es-ES-U4NZUMDT-Dsyjlq5a.js} +1 -1
  68. package/dist/viewer/{eu-ES-A7QVB2H4-Do47CF4f.js → eu-ES-A7QVB2H4-BAIIFqxX.js} +1 -1
  69. package/dist/viewer/{fa-IR-HGAKTJCU-BZbWTobm.js → fa-IR-HGAKTJCU-C3OpuRE4.js} +1 -1
  70. package/dist/viewer/{fi-FI-Z5N7JZ37-Bj1DZkcY.js → fi-FI-Z5N7JZ37-CGZNrctb.js} +1 -1
  71. package/dist/viewer/flowDiagram-HODETNUW-D_xWrdzr.js +1 -0
  72. package/dist/viewer/{fr-FR-RHASNOE6-BwL6w642.js → fr-FR-RHASNOE6-DABvCzvT.js} +1 -1
  73. package/dist/viewer/{ganttDiagram-EL5Y4UJY-tkthcHqs.js → ganttDiagram-EL5Y4UJY-DqLWQJWV.js} +1 -1
  74. package/dist/viewer/{gl-ES-HMX3MZ6V-ConDt0TV.js → gl-ES-HMX3MZ6V-D-FsubUP.js} +1 -1
  75. package/dist/viewer/{he-IL-6SHJWFNN-BlAXOFv0.js → he-IL-6SHJWFNN-DKZYdZfW.js} +1 -1
  76. package/dist/viewer/{hi-IN-IWLTKZ5I-D3eaYVhg.js → hi-IN-IWLTKZ5I-Dg6zlEAV.js} +1 -1
  77. package/dist/viewer/{hu-HU-A5ZG7DT2-DZRZmO8U.js → hu-HU-A5ZG7DT2-N2pu49mS.js} +1 -1
  78. package/dist/viewer/{id-ID-SAP4L64H-CpfVDf1D.js → id-ID-SAP4L64H-L0ROzOqC.js} +1 -1
  79. package/dist/viewer/{image-GAAHSSAO-CTiY9gHI.js → image-GAAHSSAO-CPsuFbpQ.js} +1 -1
  80. package/dist/viewer/index.html +6 -6
  81. package/dist/viewer/index.js +10 -10
  82. package/dist/viewer/index2.css +17 -1
  83. package/dist/viewer/{infoDiagram-27XIBGKW-nrTZd6ja.js → infoDiagram-27XIBGKW-DpFxmo2_.js} +1 -1
  84. package/dist/viewer/{ishikawaDiagram-5VMMS53U-Qt3RnGXG.js → ishikawaDiagram-5VMMS53U-8EYGUU-2.js} +1 -1
  85. package/dist/viewer/{it-IT-JPQ66NNP-D-9al1qd.js → it-IT-JPQ66NNP-BV10T_YH.js} +1 -1
  86. package/dist/viewer/{ja-JP-DBVTYXUO--8rpiAjQ.js → ja-JP-DBVTYXUO-BCaJwh3E.js} +1 -1
  87. package/dist/viewer/{journeyDiagram-3NMN7TZE-gleUhig1.js → journeyDiagram-3NMN7TZE-DaFiGmqB.js} +1 -1
  88. package/dist/viewer/{kaa-6HZHGXH3-BISHy72m.js → kaa-6HZHGXH3-B1skt76W.js} +1 -1
  89. package/dist/viewer/{kab-KAB-ZGHBKWFO-rqflrdnE.js → kab-KAB-ZGHBKWFO-Cw1z7bNO.js} +1 -1
  90. package/dist/viewer/{kanban-definition-UXKFOSKX-DHYX9Sne.js → kanban-definition-UXKFOSKX-XFPAw_KL.js} +1 -1
  91. package/dist/viewer/{kk-KZ-P5N5QNE5-CxsofODM.js → kk-KZ-P5N5QNE5-BPyIEorg.js} +1 -1
  92. package/dist/viewer/{km-KH-HSX4SM5Z-CY7KPsg8.js → km-KH-HSX4SM5Z-DuqV3Xms.js} +1 -1
  93. package/dist/viewer/{ko-KR-MTYHY66A-Mo8X-aCW.js → ko-KR-MTYHY66A-C40qKz7C.js} +1 -1
  94. package/dist/viewer/{ku-TR-6OUDTVRD-XdGOo6AM.js → ku-TR-6OUDTVRD-Bbrtxcjm.js} +1 -1
  95. package/dist/viewer/{lt-LT-XHIRWOB4-BTJg8sWT.js → lt-LT-XHIRWOB4-B_qXWIwM.js} +1 -1
  96. package/dist/viewer/{lv-LV-5QDEKY6T-BKlFEfuS.js → lv-LV-5QDEKY6T-8_k-NVNn.js} +1 -1
  97. package/dist/viewer/{mindmap-definition-YA3MSWOX-BmwdHmpO.js → mindmap-definition-YA3MSWOX-CJw_BzHI.js} +1 -1
  98. package/dist/viewer/{mr-IN-CRQNXWMA-D0AQrCA2.js → mr-IN-CRQNXWMA-Cr6mk0h0.js} +1 -1
  99. package/dist/viewer/{my-MM-5M5IBNSE-NjpzYQsO.js → my-MM-5M5IBNSE-zfvalQ4P.js} +1 -1
  100. package/dist/viewer/{nb-NO-T6EIAALU-BzWm7B-O.js → nb-NO-T6EIAALU-B0R5LoPU.js} +1 -1
  101. package/dist/viewer/{nl-NL-IS3SIHDZ-T8_DslA8.js → nl-NL-IS3SIHDZ-DByEOQ_2.js} +1 -1
  102. package/dist/viewer/{nn-NO-6E72VCQL-BTszDvP-.js → nn-NO-6E72VCQL-DUupf9du.js} +1 -1
  103. package/dist/viewer/{oc-FR-POXYY2M6-hpKPsf_6.js → oc-FR-POXYY2M6-C4GiSVlQ.js} +1 -1
  104. package/dist/viewer/{pa-IN-N4M65BXN-DFhI5C_f.js → pa-IN-N4M65BXN-BmpOpAle.js} +1 -1
  105. package/dist/viewer/{pegDiagram-XKGWAZYB-DqketQBQ.js → pegDiagram-XKGWAZYB-DAjil8NL.js} +1 -1
  106. package/dist/viewer/percentages-BXMCSKIN-B-KINBvQ.js +1 -0
  107. package/dist/viewer/{pieDiagram-E7YTZNPT-CswNjFwQ.js → pieDiagram-E7YTZNPT-CaXmRdry.js} +1 -1
  108. package/dist/viewer/{pl-PL-T2D74RX3-D558twE2.js → pl-PL-T2D74RX3-DuE4eY9G.js} +1 -1
  109. package/dist/viewer/{prod-QHcKCKFc.js → prod-CJIb7nxS.js} +8 -8
  110. package/dist/viewer/{pt-BR-5N22H2LF-DSx6pGlq.js → pt-BR-5N22H2LF-KH_3-_Pi.js} +1 -1
  111. package/dist/viewer/{pt-PT-UZXXM6DQ-DmOAYnAV.js → pt-PT-UZXXM6DQ-BF4pZvjU.js} +1 -1
  112. package/dist/viewer/{quadrantDiagram-AXDQQJYC-Du4WujoN.js → quadrantDiagram-AXDQQJYC-CttUyhBS.js} +1 -1
  113. package/dist/viewer/{railroadDiagram-O6MQD6OU-DtPojk0V.js → railroadDiagram-O6MQD6OU-CbnAU0MT.js} +1 -1
  114. package/dist/viewer/{requirementDiagram-BXWQKSXE-DPfOYGEZ.js → requirementDiagram-BXWQKSXE-DvKdUhZQ.js} +1 -1
  115. package/dist/viewer/{ro-RO-JPDTUUEW-CqQXLoRW.js → ro-RO-JPDTUUEW-Brpa20Xr.js} +1 -1
  116. package/dist/viewer/{ru-RU-B4JR7IUQ-J649-Rol.js → ru-RU-B4JR7IUQ-PktJmPKO.js} +1 -1
  117. package/dist/viewer/{sequenceDiagram-WJ2MYXX4-BCzPC46m.js → sequenceDiagram-WJ2MYXX4-CJoSlXfo.js} +1 -1
  118. package/dist/viewer/{si-LK-N5RQ5JYF-BtnJyPI4.js → si-LK-N5RQ5JYF-ChiCBRoh.js} +1 -1
  119. package/dist/viewer/{sk-SK-C5VTKIMK-Dd4ukPQm.js → sk-SK-C5VTKIMK-CqJFB_HV.js} +1 -1
  120. package/dist/viewer/{sl-SI-NN7IZMDC-CfLEfkKK.js → sl-SI-NN7IZMDC-DVLqmOJ1.js} +1 -1
  121. package/dist/viewer/{stateDiagram-D77RDMKH-rJOQf35n.js → stateDiagram-D77RDMKH-DMn_ZLVi.js} +1 -1
  122. package/dist/viewer/{stateDiagram-v2-MP3YSRHH-2Xy4p5Ky.js → stateDiagram-v2-MP3YSRHH-CEKv_pDb.js} +1 -1
  123. package/dist/viewer/subset-shared.chunk-P48EEdkR.js +1 -0
  124. package/dist/viewer/{subset-worker.chunk-VHwqqTOg.js → subset-worker.chunk-D7vPNmxj.js} +1 -1
  125. package/dist/viewer/{sv-SE-XGPEYMSR-6aSxoBco.js → sv-SE-XGPEYMSR-BE0Rox_P.js} +1 -1
  126. package/dist/viewer/{swimlanes-42K2YHIH-v4Asr9Gq.js → swimlanes-42K2YHIH-Z13RXAJ2.js} +1 -1
  127. package/dist/viewer/{swimlanesDiagram-VR7AAH4N-ELa654QB.js → swimlanesDiagram-VR7AAH4N-2F-sMn5C.js} +1 -1
  128. package/dist/viewer/{ta-IN-2NMHFXQM-CFXGYN1q.js → ta-IN-2NMHFXQM-BytzkZT9.js} +1 -1
  129. package/dist/viewer/{th-TH-HPSO5L25-DE3snqCF.js → th-TH-HPSO5L25-8djIgrrS.js} +1 -1
  130. package/dist/viewer/{timeline-definition-24CTP7MA-BAcffnfw.js → timeline-definition-24CTP7MA-BBemmJjg.js} +1 -1
  131. package/dist/viewer/{tr-TR-DEFEU3FU-B4xo5NFF.js → tr-TR-DEFEU3FU-s5K56Q5P.js} +1 -1
  132. package/dist/viewer/{uk-UA-QMV73CPH-6G-hcLK9.js → uk-UA-QMV73CPH-BR4VH6DS.js} +1 -1
  133. package/dist/viewer/{vennDiagram-4TSXK5OY-X6DsLJAg.js → vennDiagram-4TSXK5OY-BF17eruu.js} +1 -1
  134. package/dist/viewer/{vi-VN-M7AON7JQ-1UrXvj_c.js → vi-VN-M7AON7JQ-B0ic3hAd.js} +1 -1
  135. package/dist/viewer/{wardleyDiagram-VM6X3IG4-C6d-EQap.js → wardleyDiagram-VM6X3IG4-D-8trXu4.js} +1 -1
  136. package/dist/viewer/{xychartDiagram-S5SC5T6Z-CsXmXjQH.js → xychartDiagram-S5SC5T6Z-B596erre.js} +1 -1
  137. package/dist/viewer/{zh-CN-LNUGB5OW-t5_YfMiv.js → zh-CN-LNUGB5OW-CYANBkOM.js} +1 -1
  138. package/dist/viewer/{zh-HK-E62DVLB3-DJLNgDSD.js → zh-HK-E62DVLB3-BWpz93gC.js} +1 -1
  139. package/dist/viewer/{zh-TW-RAJ6MFWO-CxK5BbTi.js → zh-TW-RAJ6MFWO-CACFXFA3.js} +1 -1
  140. package/package.json +3 -1
  141. package/dist/viewer/CloudDocument--a8-nXso.js +0 -1
  142. package/dist/viewer/CloudLiveDocument-Dn7hsd9J.js +0 -1
  143. package/dist/viewer/DocumentPage-CNXMmV9l.js +0 -1
  144. package/dist/viewer/RailSwitch-D4FON4Vr.js +0 -58
  145. package/dist/viewer/flowDiagram-HODETNUW-DJKmbPSM.js +0 -1
  146. package/dist/viewer/percentages-BXMCSKIN-BE-dJ5Ph.js +0 -1
  147. package/dist/viewer/subset-shared.chunk-D9kegQAo.js +0 -1
package/dist/cli.cjs CHANGED
@@ -1046,7 +1046,7 @@ async function main(argv) {
1046
1046
  }, emit);
1047
1047
  }
1048
1048
  if (command === "--version" || command === "-v") {
1049
- console.log("1.31.6");
1049
+ console.log("1.32.0");
1050
1050
  return 0;
1051
1051
  }
1052
1052
  if (command === "--help" || command === "-h") {
package/dist/server.cjs CHANGED
@@ -84900,10 +84900,10 @@ var CHAT_BLOCK_TRANSFORMER = {
84900
84900
  export: (node) => {
84901
84901
  if (node.getType() !== "chat") return null;
84902
84902
  const j4 = node.exportJSON();
84903
- const lookup = new Map(j4.participants.map((p7) => [p7.id, p7]));
84903
+ const lookup2 = new Map(j4.participants.map((p7) => [p7.id, p7]));
84904
84904
  const lines = [];
84905
84905
  j4.messages.forEach((m11, idx) => {
84906
- const p7 = lookup.get(m11.participantId) ?? UNKNOWN_CHAT_PARTICIPANT;
84906
+ const p7 = lookup2.get(m11.participantId) ?? UNKNOWN_CHAT_PARTICIPANT;
84907
84907
  const name = chatParticipantName(p7);
84908
84908
  const block = j4.variant === "user-user" || j4.variant === "user-agent" && p7.kind === "user" ? m11.content.split("\n").map((line, i6) => i6 === 0 ? `> **${name}:** ${line}` : `> ${line}`).join("\n") : m11.content;
84909
84909
  if (idx > 0) lines.push("");
@@ -89731,6 +89731,112 @@ var import_node_crypto8 = __toESM(require("node:crypto"), 1);
89731
89731
  var RYUGI_MARK_VIEWBOX = "0 0 512 512";
89732
89732
  var RYUGI_MARK_BODY = '<g transform="translate(82 136.317460) scale(0.613756614)"><g transform="translate(0.000000,390.000000) scale(0.100000,-0.100000)" stroke="none"><path d="M4945 3889 c-339 -44 -682 -239 -905 -517 -139 -172 -232 -355 -365 -717 -136 -368 -285 -735 -360 -890 -219 -449 -524 -768 -849 -887 -121 -44 -215 -60 -356 -60 -162 0 -244 18 -450 97 -291 111 -420 144 -650 166 -257 24 -637 -19 -772 -87 -148 -75 -249 -247 -235 -399 19 -197 186 -344 392 -346 40 -1 127 11 205 27 115 23 160 28 300 28 242 1 372 -29 671 -155 226 -95 467 -149 662 -149 252 0 548 74 789 197 394 201 708 521 988 1008 83 144 271 529 405 830 220 493 300 632 436 759 121 112 226 162 424 201 44 9 108 29 143 45 165 77 274 285 244 467 -31 188 -168 334 -354 378 -70 16 -249 18 -363 4z M765 3139 c-202 -11 -415 -48 -497 -86 -91 -44 -151 -101 -193 -186 -123 -248 31 -525 307 -554 38 -4 99 3 204 23 137 27 167 29 384 29 205 0 249 -3 347 -23 225 -45 387 -106 658 -247 182 -94 308 -144 463 -182 138 -35 350 -39 447 -9 174 53 275 152 305 299 26 130 -40 267 -158 323 -52 25 -72 28 -227 35 -248 11 -328 37 -576 187 -232 140 -384 213 -585 281 -283 95 -541 127 -879 110z M620 2104 c-273 -32 -384 -65 -471 -143 -235 -208 -136 -589 172 -660 68 -16 129 -13 272 14 400 73 702 31 1167 -163 239 -99 350 -125 535 -125 193 0 338 51 448 157 117 113 139 261 56 375 -50 69 -99 85 -294 92 -245 10 -332 35 -563 163 -224 123 -456 211 -693 262 -111 23 -149 26 -359 29 -129 2 -251 1 -270 -1z"/></g></g>';
89733
89733
 
89734
+ // src/shared/locale.ts
89735
+ var HTML_LANG = { en: "en", zh: "zh-CN" };
89736
+ function resolveLocale(preferences) {
89737
+ for (const preference of preferences) {
89738
+ const primary = preference.split("-")[0]?.trim().toLowerCase();
89739
+ if (primary === "zh") return "zh";
89740
+ if (primary === "en") return "en";
89741
+ }
89742
+ return "en";
89743
+ }
89744
+ function parseAcceptLanguage(header) {
89745
+ if (!header) return [];
89746
+ return header.split(",").map((part, index) => {
89747
+ const [tag = "", ...params] = part.trim().split(";");
89748
+ const q3 = params.map((param) => param.trim()).find((param) => param.startsWith("q="));
89749
+ return { tag: tag.trim(), q: q3 ? Number(q3.slice(2)) : 1, index };
89750
+ }).filter((entry) => entry.tag && !Number.isNaN(entry.q) && entry.q > 0).sort((a5, b6) => b6.q - a5.q || a5.index - b6.index).map((entry) => entry.tag);
89751
+ }
89752
+
89753
+ // src/shared/messages.ts
89754
+ function lookup(dictionary, key2) {
89755
+ let node = dictionary;
89756
+ for (const part of key2.split(".")) node = typeof node === "object" ? node[part] : void 0;
89757
+ return typeof node === "string" ? node : void 0;
89758
+ }
89759
+ function find3(dictionary, key2, locale, count) {
89760
+ if (typeof count === "number") {
89761
+ const form = lookup(dictionary, `${key2}_${new Intl.PluralRules(locale).select(count)}`) ?? lookup(dictionary, `${key2}_other`);
89762
+ if (form !== void 0) return form;
89763
+ }
89764
+ return lookup(dictionary, key2);
89765
+ }
89766
+ function translator(dictionaries, locale) {
89767
+ return (key2, values = {}) => {
89768
+ const message = find3(dictionaries[locale], key2, locale, values.count) ?? find3(dictionaries.en, key2, "en", values.count) ?? key2;
89769
+ return message.replace(/\{\{(\w+)\}\}/g, (match, name) => name in values ? String(values[name]) : match);
89770
+ };
89771
+ }
89772
+
89773
+ // src/server/locales/en.json
89774
+ var en_default = {
89775
+ callback: {
89776
+ titleOk: "Signed in to Ryugi Cloud",
89777
+ titleFailed: "Sign-in didn't finish",
89778
+ connected: "Connected to Ryugi Cloud",
89779
+ signedIn: "Signed in as",
89780
+ lead: "Ryugi on this computer can publish artifacts now.",
89781
+ fromPage: "Published from a Ryugi page?",
89782
+ fromPageDetail: "Go back to Ryugi; the share panel refreshes on its own.",
89783
+ fromAgent: "Asked the agent to publish?",
89784
+ fromAgentDetail: "Have it run the publish command again.",
89785
+ autoPublish: "Auto-publish is on",
89786
+ autoPublishDetail: "After each agent turn, changed artifacts sync privately to Ryugi Cloud. To turn it off, run <code>ryugi-artifacts config --auto-publish off</code>.",
89787
+ notConnected: "Not connected",
89788
+ retry: "Sign in again",
89789
+ retryDetail: "Go back to Ryugi and click Sign in in the share panel again.",
89790
+ description: "Result of signing in to Ryugi Cloud on this computer. Once connected, go back to Ryugi to publish and share artifacts.",
89791
+ closeOk: "You can close this page",
89792
+ closeFailed: "You can close this page and try again"
89793
+ },
89794
+ login: {
89795
+ expired: "This sign-in link has expired or was already used. Go back to Ryugi and sign in again.",
89796
+ unreachable: "Couldn't reach {{origin}} ({{message}}). Check your network, then go back to Ryugi and sign in again.",
89797
+ refused: "Ryugi Cloud didn't accept this sign-in ({{reason}}). Go back to Ryugi and sign in again."
89798
+ },
89799
+ meta: {
89800
+ artifact: "View {{title}} in the {{project}} project. This is a {{type}} artifact.",
89801
+ library: "Browse every artboard, document and HTML artifact in the {{project}} project, preview their content, and find them by type, name or update time."
89802
+ }
89803
+ };
89804
+
89805
+ // src/server/locales/zh.json
89806
+ var zh_default = {
89807
+ callback: {
89808
+ titleOk: "\u5DF2\u767B\u5F55 Ryugi Cloud",
89809
+ titleFailed: "\u767B\u5F55\u6CA1\u6709\u5B8C\u6210",
89810
+ connected: "\u5DF2\u8FDE\u63A5 Ryugi Cloud",
89811
+ signedIn: "\u5DF2\u767B\u5F55",
89812
+ lead: "\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 Ryugi \u73B0\u5728\u53EF\u4EE5\u53D1\u5E03 artifact \u4E86\u3002",
89813
+ fromPage: "\u5728 Ryugi \u9875\u9762\u91CC\u53D1\u5E03\u7684\uFF1F",
89814
+ fromPageDetail: "\u56DE\u5230 Ryugi\uFF0C\u5206\u4EAB\u9762\u677F\u4F1A\u81EA\u52A8\u5237\u65B0\u3002",
89815
+ fromAgent: "\u8BA9 agent \u53D1\u5E03\u7684\uFF1F",
89816
+ fromAgentDetail: "\u8BA9\u5B83\u518D\u8FD0\u884C\u4E00\u6B21\u53D1\u5E03\u547D\u4EE4\u3002",
89817
+ autoPublish: "\u81EA\u52A8\u53D1\u5E03\u5DF2\u6253\u5F00",
89818
+ autoPublishDetail: "agent \u6BCF\u8F6E\u7ED3\u675F\u540E\uFF0C\u6539\u8FC7\u7684 artifact \u4F1A\u4EE5\u79C1\u5BC6\u65B9\u5F0F\u540C\u6B65\u5230 Ryugi Cloud\u3002\u5173\u95ED\uFF1A\u8FD0\u884C <code>ryugi-artifacts config --auto-publish off</code>\u3002",
89819
+ notConnected: "\u672A\u8FDE\u63A5",
89820
+ retry: "\u91CD\u65B0\u767B\u5F55",
89821
+ retryDetail: "\u56DE\u5230 Ryugi\uFF0C\u5728\u5206\u4EAB\u9762\u677F\u91CC\u518D\u70B9\u4E00\u6B21\u300C\u767B\u5F55\u300D\u3002",
89822
+ description: "Ryugi Cloud \u672C\u5730\u767B\u5F55\u7ED3\u679C\u3002\u5B8C\u6210\u8FDE\u63A5\u540E\uFF0C\u8FD4\u56DE Ryugi \u7EE7\u7EED\u53D1\u5E03\u548C\u5206\u4EAB Artifact\u3002",
89823
+ closeOk: "\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762",
89824
+ closeFailed: "\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762\u540E\u91CD\u8BD5"
89825
+ },
89826
+ login: {
89827
+ expired: "\u8FD9\u4E2A\u767B\u5F55\u94FE\u63A5\u5DF2\u8FC7\u671F\u6216\u5DF2\u7ECF\u7528\u8FC7\u3002\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u4E00\u6B21\u767B\u5F55\u3002",
89828
+ unreachable: "\u8FDE\u4E0D\u4E0A {{origin}}\uFF08{{message}}\uFF09\u3002\u68C0\u67E5\u7F51\u7EDC\u540E\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002",
89829
+ refused: "Ryugi Cloud \u6CA1\u6709\u63A5\u53D7\u8FD9\u6B21\u767B\u5F55\uFF08{{reason}}\uFF09\u3002\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002"
89830
+ },
89831
+ meta: {
89832
+ artifact: "\u5728 {{project}} \u9879\u76EE\u4E2D\u67E5\u770B {{title}}\uFF0C\u8FD9\u662F\u4E00\u4E2A {{type}} Artifact\u3002",
89833
+ library: "\u6D4F\u89C8 {{project}} \u9879\u76EE\u7684\u5168\u90E8 Artboard\u3001Document \u548C HTML Artifact\uFF0C\u9884\u89C8\u771F\u5B9E\u5185\u5BB9\uFF0C\u6309\u7C7B\u578B\u3001\u540D\u79F0\u548C\u66F4\u65B0\u65F6\u95F4\u67E5\u627E\u4F5C\u54C1\u3002"
89834
+ }
89835
+ };
89836
+
89837
+ // src/server/locales/index.ts
89838
+ var serverText = (locale) => translator({ en: en_default, zh: zh_default }, locale);
89839
+
89734
89840
  // src/server/callback-page.ts
89735
89841
  var CALLBACK_PAGE_CSP = "default-src 'none'; style-src 'unsafe-inline'; img-src data:; script-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'";
89736
89842
  var escapeHtml = (value) => value.replace(/[&<>"']/g, (ch) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[ch]);
@@ -89802,24 +89908,25 @@ footer { display: flex; justify-content: space-between; gap: 16px; margin-top: 2
89802
89908
  footer code { font: 12px var(--mono); }
89803
89909
  `;
89804
89910
  var row = (title, detail) => `<li><b>${title}</b><span>${detail}</span></li>`;
89805
- function callbackPage(result) {
89911
+ function callbackPage(result, locale = "en") {
89912
+ const t7 = serverText(locale);
89806
89913
  const host = escapeHtml(new URL(result.origin).host);
89807
- const title = result.ok ? "\u5DF2\u767B\u5F55 Ryugi Cloud" : "\u767B\u5F55\u6CA1\u6709\u5B8C\u6210";
89808
- const body = result.ok ? `<p class="status">${CIRCLE_CHECK}\u5DF2\u8FDE\u63A5 Ryugi Cloud</p>
89809
- <h1>\u5DF2\u767B\u5F55<em>${escapeHtml(result.login)}</em></h1>
89810
- <p class="lead">\u8FD9\u53F0\u7535\u8111\u4E0A\u7684 Ryugi \u73B0\u5728\u53EF\u4EE5\u53D1\u5E03 artifact \u4E86\u3002</p>
89811
- <ul class="rows">${row("\u5728 Ryugi \u9875\u9762\u91CC\u53D1\u5E03\u7684\uFF1F", "\u56DE\u5230 Ryugi\uFF0C\u5206\u4EAB\u9762\u677F\u4F1A\u81EA\u52A8\u5237\u65B0\u3002")}${row("\u8BA9 agent \u53D1\u5E03\u7684\uFF1F", "\u8BA9\u5B83\u518D\u8FD0\u884C\u4E00\u6B21\u53D1\u5E03\u547D\u4EE4\u3002")}${result.autoPublish ? row("\u81EA\u52A8\u53D1\u5E03\u5DF2\u6253\u5F00", "agent \u6BCF\u8F6E\u7ED3\u675F\u540E\uFF0C\u6539\u8FC7\u7684 artifact \u4F1A\u4EE5\u79C1\u5BC6\u65B9\u5F0F\u540C\u6B65\u5230 Ryugi Cloud\u3002\u5173\u95ED\uFF1A\u8FD0\u884C <code>ryugi-artifacts config --auto-publish off</code>\u3002") : ""}</ul>` : `<p class="status">${CIRCLE_ALERT}\u672A\u8FDE\u63A5</p>
89812
- <h1>\u767B\u5F55\u6CA1\u6709\u5B8C\u6210</h1>
89914
+ const title = result.ok ? t7("callback.titleOk") : t7("callback.titleFailed");
89915
+ const body = result.ok ? `<p class="status">${CIRCLE_CHECK}${t7("callback.connected")}</p>
89916
+ <h1>${t7("callback.signedIn")}<em>${escapeHtml(result.login)}</em></h1>
89917
+ <p class="lead">${t7("callback.lead")}</p>
89918
+ <ul class="rows">${row(t7("callback.fromPage"), t7("callback.fromPageDetail"))}${row(t7("callback.fromAgent"), t7("callback.fromAgentDetail"))}${result.autoPublish ? row(t7("callback.autoPublish"), t7("callback.autoPublishDetail")) : ""}</ul>` : `<p class="status">${CIRCLE_ALERT}${t7("callback.notConnected")}</p>
89919
+ <h1>${t7("callback.titleFailed")}</h1>
89813
89920
  <p class="lead">${escapeHtml(result.detail)}</p>
89814
- <ul class="rows">${row("\u91CD\u65B0\u767B\u5F55", "\u56DE\u5230 Ryugi\uFF0C\u5728\u5206\u4EAB\u9762\u677F\u91CC\u518D\u70B9\u4E00\u6B21\u300C\u767B\u5F55\u300D\u3002")}</ul>`;
89921
+ <ul class="rows">${row(t7("callback.retry"), t7("callback.retryDetail"))}</ul>`;
89815
89922
  return `<!doctype html>
89816
- <html lang="zh-CN">
89923
+ <html lang="${HTML_LANG[locale]}">
89817
89924
  <head>
89818
89925
  <meta charset="utf-8">
89819
89926
  <meta name="viewport" content="width=device-width, initial-scale=1">
89820
89927
  <meta name="referrer" content="no-referrer">
89821
89928
  <meta name="robots" content="noindex, nofollow">
89822
- <meta name="description" content="Ryugi Cloud \u672C\u5730\u767B\u5F55\u7ED3\u679C\u3002\u5B8C\u6210\u8FDE\u63A5\u540E\uFF0C\u8FD4\u56DE Ryugi \u7EE7\u7EED\u53D1\u5E03\u548C\u5206\u4EAB Artifact\u3002">
89929
+ <meta name="description" content="${t7("callback.description")}">
89823
89930
  <title>${title}</title>
89824
89931
  <style>${STYLE2}</style>
89825
89932
  </head>
@@ -89827,7 +89934,7 @@ function callbackPage(result) {
89827
89934
  <div class="mark">${MARK}ryugi</div>
89828
89935
  <main class="${result.ok ? "signed-in" : "failed"}">
89829
89936
  ${body}
89830
- <footer><span>${result.ok ? "\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762" : "\u53EF\u4EE5\u5173\u95ED\u8FD9\u4E2A\u9875\u9762\u540E\u91CD\u8BD5"}</span><code>${host}</code></footer>
89937
+ <footer><span>${result.ok ? t7("callback.closeOk") : t7("callback.closeFailed")}</span><code>${host}</code></footer>
89831
89938
  </main>
89832
89939
  </body>
89833
89940
  </html>
@@ -90129,7 +90236,7 @@ function createCloudRoutes(options) {
90129
90236
  };
90130
90237
  const publish = async (ref, requested, { recreate = true, skipUnchanged = false } = {}) => {
90131
90238
  const prepared = await prepare(ref);
90132
- if (!prepared.ready) return { status: 409, body: { error: "fix these before publishing", reasons: prepared.reasons } };
90239
+ if (!prepared.ready) return { status: 409, body: { error: "fix these before publishing", code: "publish_not_ready", reasons: prepared.reasons } };
90133
90240
  const { hashed, content, fingerprint } = prepared;
90134
90241
  const key2 = `${ref.type}/${ref.id}`;
90135
90242
  const entry = artifactEntry(key2);
@@ -90308,8 +90415,9 @@ function createCloudRoutes(options) {
90308
90415
  send(res, 404, "Not found");
90309
90416
  };
90310
90417
  return {
90311
- async handleCallback(url, res) {
90312
- const page = (status, result) => send(res, status, callbackPage({ ...result, origin }), {
90418
+ async handleCallback(url, res, locale = "en") {
90419
+ const t7 = serverText(locale);
90420
+ const page = (status, result) => send(res, status, callbackPage({ ...result, origin }, locale), {
90313
90421
  "Content-Type": "text/html; charset=utf-8",
90314
90422
  "Content-Security-Policy": CALLBACK_PAGE_CSP
90315
90423
  });
@@ -90318,7 +90426,7 @@ function createCloudRoutes(options) {
90318
90426
  pendingStates.delete(state);
90319
90427
  const code = url.searchParams.get("code");
90320
90428
  if (!pending || pending.expires < Date.now() || !code) {
90321
- page(400, { ok: false, detail: "\u8FD9\u4E2A\u767B\u5F55\u94FE\u63A5\u5DF2\u8FC7\u671F\u6216\u5DF2\u7ECF\u7528\u8FC7\u3002\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u4E00\u6B21\u767B\u5F55\u3002" });
90429
+ page(400, { ok: false, detail: t7("login.expired") });
90322
90430
  return;
90323
90431
  }
90324
90432
  let swap;
@@ -90329,13 +90437,13 @@ function createCloudRoutes(options) {
90329
90437
  body: JSON.stringify({ code, verifier: pending.verifier })
90330
90438
  });
90331
90439
  } catch (err) {
90332
- page(502, { ok: false, detail: `\u8FDE\u4E0D\u4E0A ${origin}\uFF08${err.message}\uFF09\u3002\u68C0\u67E5\u7F51\u7EDC\u540E\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002` });
90440
+ page(502, { ok: false, detail: t7("login.unreachable", { origin, message: err.message }) });
90333
90441
  return;
90334
90442
  }
90335
90443
  const issued = await swap.json().catch(() => ({}));
90336
90444
  if (!swap.ok || typeof issued.token !== "string" || typeof issued.login !== "string") {
90337
90445
  const reason = typeof issued.error === "string" ? issued.error : `HTTP ${swap.status}`;
90338
- page(400, { ok: false, detail: `Ryugi Cloud \u6CA1\u6709\u63A5\u53D7\u8FD9\u6B21\u767B\u5F55\uFF08${reason}\uFF09\u3002\u56DE\u5230 Ryugi \u91CD\u65B0\u53D1\u8D77\u767B\u5F55\u3002` });
90446
+ page(400, { ok: false, detail: t7("login.refused", { reason }) });
90339
90447
  return;
90340
90448
  }
90341
90449
  writeCredentials(credentialsFile2, { origin, token: issued.token, login: issued.login });
@@ -90495,15 +90603,17 @@ function commentNames({ agentFile, projectDir, cloud }) {
90495
90603
  var import_node_crypto9 = require("node:crypto");
90496
90604
  var escapeHtml2 = (value) => value.replace(/[&<>"']/g, (ch) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[ch]);
90497
90605
  function viewerPage(template, page) {
90606
+ const locale = page.locale ?? "en";
90498
90607
  const values = {
90499
90608
  robots: "noindex, nofollow",
90609
+ "og:locale": locale === "zh" ? "zh_CN" : "en_US",
90500
90610
  description: page.description,
90501
90611
  "og:title": page.title,
90502
90612
  "og:description": page.description,
90503
90613
  "twitter:title": page.title,
90504
90614
  "twitter:description": page.description
90505
90615
  };
90506
- return template.replace(/<html\b/i, (tag) => page.artifactId ? `${tag} data-ryugi-artifact-id="${escapeHtml2(page.artifactId)}"` : tag).replace(/<title\b[^>]*>[\s\S]*?<\/title>/i, () => `<title>${escapeHtml2(page.title)}</title>`).replace(/(<link\b[^>]*\brel="icon"[^>]*\bhref=")[^"]*(")/i, (tag, prefix, suffix) => page.icon ? `${prefix}${escapeHtml2(page.icon)}${suffix}` : tag).replace(/(<meta\b[^>]*\b(?:name|property)="([^"]+)"[^>]*\bcontent=")([^"]*)("[^>]*>)/gi, (tag, prefix, name, value, suffix) => {
90616
+ return template.replace(/<html\b([^>]*)>/i, (_tag, attributes) => `<html${attributes.replace(/\slang="[^"]*"/i, "")} lang="${HTML_LANG[locale]}"${page.artifactId ? ` data-ryugi-artifact-id="${escapeHtml2(page.artifactId)}"` : ""}>`).replace(/<title\b[^>]*>[\s\S]*?<\/title>/i, () => `<title>${escapeHtml2(page.title)}</title>`).replace(/(<link\b[^>]*\brel="icon"[^>]*\bhref=")[^"]*(")/i, (tag, prefix, suffix) => page.icon ? `${prefix}${escapeHtml2(page.icon)}${suffix}` : tag).replace(/(<meta\b[^>]*\b(?:name|property)="([^"]+)"[^>]*\bcontent=")([^"]*)("[^>]*>)/gi, (tag, prefix, name, value, suffix) => {
90507
90617
  const content = values[name] ?? (name === "og:image" || name === "twitter:image" ? new URL(value, page.url).href : void 0);
90508
90618
  return content === void 0 ? tag : `${prefix}${escapeHtml2(content)}${suffix}`;
90509
90619
  }).replace(/<\/head>/i, () => `<link rel="canonical" href="${escapeHtml2(page.url)}">
@@ -91199,7 +91309,7 @@ async function startArtifactsServer(options) {
91199
91309
  return;
91200
91310
  }
91201
91311
  if (cloud && pathname === "/api/cloud/callback") {
91202
- void cloud.handleCallback(url2, res).catch((err) => {
91312
+ void cloud.handleCallback(url2, res, resolveLocale(parseAcceptLanguage(req.headers["accept-language"]))).catch((err) => {
91203
91313
  if (!res.headersSent) send(res, 500, `Artifacts error: ${err.message}`);
91204
91314
  });
91205
91315
  return;
@@ -91320,7 +91430,9 @@ async function startArtifactsServer(options) {
91320
91430
  const dir = resolved?.dir;
91321
91431
  const project = import_node_path21.default.basename(import_node_path21.default.dirname(import_node_path21.default.dirname(root)));
91322
91432
  const title = ref ? dir ? titleOf(readArtifact(dir, ref), ref) : ref.id : `${project} \xB7 Artifacts`;
91323
- const description = ref ? `\u5728 ${project} \u9879\u76EE\u4E2D\u67E5\u770B ${title}\uFF0C\u8FD9\u662F\u4E00\u4E2A ${ref.type === "artboard" ? "Artboard" : ref.type === "document" ? "Document" : "HTML"} Artifact\u3002` : `\u6D4F\u89C8 ${project} \u9879\u76EE\u7684\u5168\u90E8 Artboard\u3001Document \u548C HTML Artifact\uFF0C\u9884\u89C8\u771F\u5B9E\u5185\u5BB9\uFF0C\u6309\u7C7B\u578B\u3001\u540D\u79F0\u548C\u66F4\u65B0\u65F6\u95F4\u67E5\u627E\u4F5C\u54C1\u3002`;
91433
+ const locale = resolveLocale(parseAcceptLanguage(req.headers["accept-language"]));
91434
+ const t7 = serverText(locale);
91435
+ const description = ref ? t7("meta.artifact", { project, title, type: ref.type === "artboard" ? "Artboard" : ref.type === "document" ? "Document" : "HTML" }) : t7("meta.library", { project });
91324
91436
  const preview = PREVIEW_ROUTE.test(pathname);
91325
91437
  const canonicalPath = ref ? dir ? artifactPath(root, ref.type, ref.id) : `/${ref.type}/${ref.id}` : "/";
91326
91438
  const canonical = `http://${urlHostForHttp(options.urlHost)}:${port}${preview ? "/preview" : ""}${canonicalPath}`;
@@ -91328,7 +91440,7 @@ async function startArtifactsServer(options) {
91328
91440
  const headers = { "Content-Type": "text/html; charset=utf-8" };
91329
91441
  if (key2 !== null) headers["Set-Cookie"] = `${cookieName}=${token}; HttpOnly; SameSite=Strict; Path=/`;
91330
91442
  void import_node_fs24.default.promises.readFile(import_node_path21.default.join(viewerDir, "index.html"), "utf8").then((template) => {
91331
- const html = viewerPage(template, { title, description, url: canonical, icon: ref ? typeFaviconHref(ref.type) : void 0, artifactId: resolved?.id });
91443
+ const html = viewerPage(template, { title, description, locale, url: canonical, icon: ref ? typeFaviconHref(ref.type) : void 0, artifactId: resolved?.id });
91332
91444
  send(res, 200, html, { ...headers, "Content-Security-Policy": allowInlineScripts(csp, html) });
91333
91445
  }).catch((err) => send(res, err.code === "ENOENT" ? 404 : 500, "Viewer unavailable"));
91334
91446
  return;
@@ -91689,7 +91801,7 @@ function openReady(payload) {
91689
91801
  }
91690
91802
 
91691
91803
  // package.json
91692
- var version = "1.31.6";
91804
+ var version = "1.32.0";
91693
91805
 
91694
91806
  // src/server/main.ts
91695
91807
  async function main() {
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{S as r,T as i,o as a,t as o}from"./RailSwitch-B8Aht-FG.js";import{E as s,T as c,d as l,f as u,k as d,t as f,y as p}from"./DocumentLayout-DUPesXt0.js";var m=e(t(),1),h=n();function g(){let e=(0,m.useMemo)(()=>window.matchMedia(`(prefers-color-scheme: dark)`),[]),[t,n]=(0,m.useState)(e.matches);return(0,m.useEffect)(()=>{let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function _({id:e,state:t,contentBase:n,comments:_=r(),offline:v=!1}){let y=g(),[b,x]=(0,m.useState)(null),S=(0,m.useMemo)(()=>({artifact:`cloud/${e}`,contentBase:n,channel:c(),send:()=>void 0}),[e,n]),C=_.threads.filter(e=>e.status===`open`).length,w=a(e,{comments:C,activity:null,retrying:!1,reason:null,history:!1,historyOpen:!1});return(0,m.useEffect)(()=>{let e=document.createElement(`base`);return e.href=n,document.head.prepend(e),()=>e.remove()},[n]),(0,h.jsxs)(`div`,{className:`x1us19tq x1rozbrz xo2rkog`,className:`ryugi-doc ${{className:`x1us19tq x1rozbrz xo2rkog`}.className??``}`,children:[w?null:(0,h.jsxs)(`div`,{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`,children:[(0,h.jsx)(o,{comments:C,open:!1,available:!1,onComments:()=>{},onHistory:()=>{}}),(0,h.jsx)(`span`,{children:i(`document.historyOffline`)})]}),v?(0,h.jsxs)(`div`,{...{0:{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`},1:{className:`x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61 x1s85apg x1ux6vrq`}}[!!w|0],children:[(0,h.jsx)(`i`,{className:`xci0xqf x1hagigm x16rqkct xxwmxtg`}),i(`document.offlineNoComments`)]}):null,(0,h.jsx)(f,{editor:b,threads:_.threads,children:(0,h.jsx)(p.Provider,{value:S,children:(0,h.jsx)(d,{variant:`article`,theme:y?`dark`:`light`,initialValue:t,extraNodes:l,rendererConfig:u,onEditorReady:e=>{e?.setEditable(!1),x(e??null)},children:(0,h.jsx)(s,{})})})})]})}export{_ as default};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{T as r,o as i,w as a}from"./RailSwitch-B8Aht-FG.js";import{t as o}from"./index.js";import s from"./CloudDocument-DBhwAPZX.js";import{DocumentView as c,t as l}from"./DocumentPage-p78IN0UO.js";var u=e(t(),1),d=`1.32.0`,f=e=>/^(\d+)\.(\d+)\./.exec(e??``)?.slice(1,3).join(`.`)??null;function p(e,t){let n=f(e);return n!==null&&n===f(t)}var m=(e,t)=>a.t(`document.versionReason`,{host:t??a.t(`document.unknownVersion`),viewer:e}),h=n();function g({id:e,state:t,contentBase:n,liveContentBase:a,comments:f}){let{transport:g,presence:_}=l(e,a??n??``),v=_?.online??!1;i(e,{online:_?.online??null});let[y,b]=(0,u.useState)(!1);(0,u.useEffect)(()=>{v&&b(!0)},[v]);let x=t&&n?(0,h.jsx)(s,{id:e,state:t,contentBase:n,comments:f,offline:_!==null&&!v}):null;if(!g||!(y||v))return x??(0,h.jsx)(o,{children:r(_===null?`common.connecting`:`document.notPublished`)});let S=v&&p(d,_?.version??null),C=v&&!S?m(d,_?.version??null):null;return(0,h.jsx)(c,{id:e,transport:g,live:v,cloud:{online:v,canEdit:S,reason:C},fallback:x})}export{g as default};