ryugi-artifacts 1.18.4 → 1.20.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 (151) hide show
  1. package/dist/cli.cjs +1 -1
  2. package/dist/server.cjs +122 -18
  3. package/dist/viewer/CloudDocument-fPJO17RB.js +1 -0
  4. package/dist/viewer/{CloudLiveDocument-DS85XF0L.js → CloudLiveDocument-cfa_fMZ_.js} +1 -1
  5. package/dist/viewer/{DocumentLayout-BmFhvhLU.js → DocumentLayout-D4LN2imT.js} +144 -144
  6. package/dist/viewer/DocumentPage-DU7AlIYi.js +1 -0
  7. package/dist/viewer/{abnfDiagram-VCTEODGH-CV9ilrv6.js → abnfDiagram-VCTEODGH-BwLfP_w2.js} +1 -1
  8. package/dist/viewer/{ar-SA-G6X2FPQ2-oZEeiz6u.js → ar-SA-G6X2FPQ2-BI0wJ8yR.js} +1 -1
  9. package/dist/viewer/{architectureDiagram-5GKGNRK7-B7gMzXkW.js → architectureDiagram-5GKGNRK7-CRQpQyO-.js} +1 -1
  10. package/dist/viewer/{az-AZ-76LH7QW2-yL1UB6w_.js → az-AZ-76LH7QW2-CxsCUo3P.js} +1 -1
  11. package/dist/viewer/{bg-BG-XCXSNQG7-BVuMowqe.js → bg-BG-XCXSNQG7-zmLNtpI8.js} +1 -1
  12. package/dist/viewer/{blockDiagram-I7D4REHJ-BvS7PEBE.js → blockDiagram-I7D4REHJ-BJJKBHFX.js} +1 -1
  13. package/dist/viewer/{bn-BD-2XOGV67Q-TK2Nt4AS.js → bn-BD-2XOGV67Q-D6zzfXu3.js} +1 -1
  14. package/dist/viewer/{c4Diagram-7LVT6UL2-DiPixCgw.js → c4Diagram-7LVT6UL2-CLivMEyH.js} +1 -1
  15. package/dist/viewer/{ca-ES-6MX7JW3Y-ssAQ_aeA.js → ca-ES-6MX7JW3Y-G1FH_576.js} +1 -1
  16. package/dist/viewer/{chunk-4HAMMTFA-Dx6b40xi.js → chunk-4HAMMTFA-Di0xdyz8.js} +1 -1
  17. package/dist/viewer/{chunk-EIO257PC-BtM_VLQE.js → chunk-EIO257PC-C_A0ItX_.js} +1 -1
  18. package/dist/viewer/{chunk-GMAD6QVW-COZQExf-.js → chunk-GMAD6QVW-Yd9B1P6N.js} +1 -1
  19. package/dist/viewer/{chunk-GVQU2GXP-BzZEH01V.js → chunk-GVQU2GXP-BlQ5Hc4C.js} +1 -1
  20. package/dist/viewer/{chunk-IMKFNOWR-DoSmXTi7.js → chunk-IMKFNOWR-sLl17KlZ.js} +1 -1
  21. package/dist/viewer/{chunk-L3NEJ4N5-BoNKpHsG.js → chunk-L3NEJ4N5-ByzPblyy.js} +1 -1
  22. package/dist/viewer/{chunk-OSK3NFVY-fma5qDgd.js → chunk-OSK3NFVY-B8lsSjgE.js} +1 -1
  23. package/dist/viewer/{chunk-PWAF6VOD-B-FOPc-q.js → chunk-PWAF6VOD-Dt03PokQ.js} +1 -1
  24. package/dist/viewer/{chunk-SHT3W25Y-Bo8j1N02.js → chunk-SHT3W25Y-D8tOADu9.js} +1 -1
  25. package/dist/viewer/{chunk-SVP7TREG-B62eBjLz.js → chunk-SVP7TREG-BCCTaJFp.js} +1 -1
  26. package/dist/viewer/{chunk-TICWLB2K-p6Tzdi_n.js → chunk-TICWLB2K-CKvZ1F5E.js} +1 -1
  27. package/dist/viewer/{classDiagram-ZZMXUADV-yDzvlm9G.js → classDiagram-ZZMXUADV-BPsoNR3A.js} +1 -1
  28. package/dist/viewer/{classDiagram-v2-VYDZK3BY-yDzvlm9G.js → classDiagram-v2-VYDZK3BY-BPsoNR3A.js} +1 -1
  29. package/dist/viewer/{cs-CZ-2BRQDIVT-CJRjmWM6.js → cs-CZ-2BRQDIVT-KdoHU-Qi.js} +1 -1
  30. package/dist/viewer/{cynefinDiagram-5FMLGOSQ-B5NowWLs.js → cynefinDiagram-5FMLGOSQ-CPAZlTbz.js} +1 -1
  31. package/dist/viewer/{da-DK-5WZEPLOC-D-dHqXdP.js → da-DK-5WZEPLOC-D_MTuSXJ.js} +1 -1
  32. package/dist/viewer/{dagre-GXQ25YYZ-CnMtZyQJ.js → dagre-GXQ25YYZ-CGJi5tfA.js} +1 -1
  33. package/dist/viewer/{de-DE-XR44H4JA-C-TB_N6V.js → de-DE-XR44H4JA-BLOov6di.js} +1 -1
  34. package/dist/viewer/{diagram-S7CK7UJ4-BUqW7fG2.js → diagram-S7CK7UJ4-v4jY9cY2.js} +1 -1
  35. package/dist/viewer/{diagram-UQ7AKVKN-8txdjYKW.js → diagram-UQ7AKVKN-CHWKBoDd.js} +1 -1
  36. package/dist/viewer/{diagram-VX7I27RA-VRK1Xx-r.js → diagram-VX7I27RA-BVUIPSa6.js} +1 -1
  37. package/dist/viewer/{diagram-Z3DM3KII-CFTEE6hm.js → diagram-Z3DM3KII-C4Y7zZHg.js} +1 -1
  38. package/dist/viewer/{dist-GYlII7AN.js → dist-1IcdPIYN.js} +2 -2
  39. package/dist/viewer/dist-B2FPj3Qt.js +9 -0
  40. package/dist/viewer/{dist-4VxRqYLb.js → dist-B3RoMAF6.js} +1 -1
  41. package/dist/viewer/{dist-SaSQiH_S.js → dist-BQs1NNpk.js} +1 -1
  42. package/dist/viewer/{dist-BBOT2Dod.js → dist-BVTHDHV6.js} +1 -1
  43. package/dist/viewer/{dist-U9k2HrGK.js → dist-Bc8tMTe5.js} +1 -1
  44. package/dist/viewer/dist-Bqez8J_a.js +1 -0
  45. package/dist/viewer/dist-C4Lc0ZFP.js +1 -0
  46. package/dist/viewer/{dist-CmRhIDCA.js → dist-CCwaS8Bu.js} +1 -1
  47. package/dist/viewer/{dist-CFAaHddG.js → dist-CRx0ZMXK.js} +1 -1
  48. package/dist/viewer/{dist-B7cBbeKI.js → dist-CeYG0ueU.js} +1 -1
  49. package/dist/viewer/{dist-DI46xOxZ.js → dist-Ct-E_S8r.js} +1 -1
  50. package/dist/viewer/{dist-6lhXFIAO.js → dist-D8bI9sBL.js} +1 -1
  51. package/dist/viewer/{dist-DhFC_v-5.js → dist-DFGQshKp.js} +4 -4
  52. package/dist/viewer/{dist-Du5bWJ2g.js → dist-DXnqzoeB.js} +1 -1
  53. package/dist/viewer/{dist-D_UP42BZ.js → dist-DYMwViBu.js} +1 -1
  54. package/dist/viewer/dist-DpVonJ_O.js +1 -0
  55. package/dist/viewer/{dist-CydgyGeV.js → dist-DsDINnzX.js} +1 -1
  56. package/dist/viewer/{dist-BCqz-HqX.js → dist-JfoSPkrU.js} +1 -1
  57. package/dist/viewer/{dist-CH0akeCq.js → dist-KZC5UOjy.js} +9 -9
  58. package/dist/viewer/dist-TLcUQst5.js +6 -0
  59. package/dist/viewer/{dist-DbkbyA0U.js → dist-WN2tr_mQ.js} +1 -1
  60. package/dist/viewer/{dist-BPVVld5s.js → dist-_d7trXgy.js} +1 -1
  61. package/dist/viewer/{dist-CPVcHWlQ.js → dist-xVN1cHRs.js} +2 -2
  62. package/dist/viewer/{ebnfDiagram-PWID7BFC-B2uFP8zT.js → ebnfDiagram-PWID7BFC-BfH0Kwma.js} +1 -1
  63. package/dist/viewer/{el-GR-BZB4AONW-Cin0hSuv.js → el-GR-BZB4AONW-DytlrCPc.js} +1 -1
  64. package/dist/viewer/{en-B4ZKOASM-r25weJ3i.js → en-B4ZKOASM-CxMHMjTS.js} +1 -1
  65. package/dist/viewer/{erDiagram-RLTQ6QDP-C_wdcD3l.js → erDiagram-RLTQ6QDP-DiANaX5a.js} +1 -1
  66. package/dist/viewer/{es-ES-U4NZUMDT-BTfNIW-f.js → es-ES-U4NZUMDT-CWOlOrxS.js} +1 -1
  67. package/dist/viewer/{eu-ES-A7QVB2H4-CwpkrMfM.js → eu-ES-A7QVB2H4-7rIki6yl.js} +1 -1
  68. package/dist/viewer/{fa-IR-HGAKTJCU-xR6FbJG0.js → fa-IR-HGAKTJCU-XuLQk-Tn.js} +1 -1
  69. package/dist/viewer/{fi-FI-Z5N7JZ37-aFZzomat.js → fi-FI-Z5N7JZ37-BVT2imWO.js} +1 -1
  70. package/dist/viewer/flowDiagram-HODETNUW-CCTrPmhX.js +1 -0
  71. package/dist/viewer/{fr-FR-RHASNOE6-CudNlR7s.js → fr-FR-RHASNOE6-BDrE0Sar.js} +1 -1
  72. package/dist/viewer/ganttDiagram-EL5Y4UJY-C0kMmivD.js +292 -0
  73. package/dist/viewer/{gl-ES-HMX3MZ6V-gVz21kpP.js → gl-ES-HMX3MZ6V-BGePYNwa.js} +1 -1
  74. package/dist/viewer/{he-IL-6SHJWFNN-BJKBOspV.js → he-IL-6SHJWFNN-C_h7ANwh.js} +1 -1
  75. package/dist/viewer/{hi-IN-IWLTKZ5I-CbzuQ896.js → hi-IN-IWLTKZ5I-DO6JQv11.js} +1 -1
  76. package/dist/viewer/{hu-HU-A5ZG7DT2-B_jSyb1P.js → hu-HU-A5ZG7DT2-CYW6-QvY.js} +1 -1
  77. package/dist/viewer/{id-ID-SAP4L64H-DG5B5Nbw.js → id-ID-SAP4L64H-lnrwwUQv.js} +1 -1
  78. package/dist/viewer/{image-GAAHSSAO-Daq9X6yp.js → image-GAAHSSAO-DPKo0Z9B.js} +1 -1
  79. package/dist/viewer/index.html +1 -1
  80. package/dist/viewer/index.js +6 -6
  81. package/dist/viewer/index2.css +141 -50
  82. package/dist/viewer/{infoDiagram-27XIBGKW-BEcf3Mgz.js → infoDiagram-27XIBGKW-BrpKtrz1.js} +1 -1
  83. package/dist/viewer/{ishikawaDiagram-5VMMS53U-BaiLcmxa.js → ishikawaDiagram-5VMMS53U-Bzzm1Qn9.js} +1 -1
  84. package/dist/viewer/{it-IT-JPQ66NNP-Be6ERDzQ.js → it-IT-JPQ66NNP-Bmrd9W_k.js} +1 -1
  85. package/dist/viewer/{ja-JP-DBVTYXUO-rzX72p52.js → ja-JP-DBVTYXUO-BzIPu9Sq.js} +1 -1
  86. package/dist/viewer/{journeyDiagram-3NMN7TZE-CF0kgq6e.js → journeyDiagram-3NMN7TZE-BnypDAuH.js} +1 -1
  87. package/dist/viewer/{kaa-6HZHGXH3-xkB9EtaK.js → kaa-6HZHGXH3-DKokUJUv.js} +1 -1
  88. package/dist/viewer/{kab-KAB-ZGHBKWFO-A9TW4l6B.js → kab-KAB-ZGHBKWFO-DPboBUhX.js} +1 -1
  89. package/dist/viewer/{kanban-definition-UXKFOSKX-B1yViTEB.js → kanban-definition-UXKFOSKX-xl1KXBhm.js} +1 -1
  90. package/dist/viewer/{kk-KZ-P5N5QNE5-D-_fY8Gw.js → kk-KZ-P5N5QNE5-CW1AnK2i.js} +1 -1
  91. package/dist/viewer/{km-KH-HSX4SM5Z-BcY5m6VJ.js → km-KH-HSX4SM5Z-Cy-Jz187.js} +1 -1
  92. package/dist/viewer/{ko-KR-MTYHY66A-et49DOjn.js → ko-KR-MTYHY66A-ENrzcom-.js} +1 -1
  93. package/dist/viewer/{ku-TR-6OUDTVRD-CctJtizJ.js → ku-TR-6OUDTVRD-ujaIeZ6d.js} +1 -1
  94. package/dist/viewer/{lt-LT-XHIRWOB4-CKIcj0xZ.js → lt-LT-XHIRWOB4-DCHudAUH.js} +1 -1
  95. package/dist/viewer/{lv-LV-5QDEKY6T-eD_nIZ1C.js → lv-LV-5QDEKY6T-CkczV-YS.js} +1 -1
  96. package/dist/viewer/{mindmap-definition-YA3MSWOX-eSx4puWQ.js → mindmap-definition-YA3MSWOX-Cmaw8zST.js} +1 -1
  97. package/dist/viewer/{mr-IN-CRQNXWMA-DZE-1OVW.js → mr-IN-CRQNXWMA-CAULhacb.js} +1 -1
  98. package/dist/viewer/{my-MM-5M5IBNSE-C4RtxqYT.js → my-MM-5M5IBNSE-CIK3iNzd.js} +1 -1
  99. package/dist/viewer/{nb-NO-T6EIAALU-BR4xmg8K.js → nb-NO-T6EIAALU-awDYmeD3.js} +1 -1
  100. package/dist/viewer/{nl-NL-IS3SIHDZ-CC_ODK0w.js → nl-NL-IS3SIHDZ-DnN7YgqH.js} +1 -1
  101. package/dist/viewer/{nn-NO-6E72VCQL-B1B5ggd_.js → nn-NO-6E72VCQL-CirX0qpy.js} +1 -1
  102. package/dist/viewer/{oc-FR-POXYY2M6-C4ylGoRV.js → oc-FR-POXYY2M6-BmRoBPJJ.js} +1 -1
  103. package/dist/viewer/{pa-IN-N4M65BXN-CeGYxP4x.js → pa-IN-N4M65BXN-C3t1i1uP.js} +1 -1
  104. package/dist/viewer/{pegDiagram-XKGWAZYB-Dh89osCP.js → pegDiagram-XKGWAZYB-CRs_uYT9.js} +1 -1
  105. package/dist/viewer/percentages-BXMCSKIN-BgW3KG9t.js +1 -0
  106. package/dist/viewer/{pieDiagram-E7YTZNPT-DLjCSZj7.js → pieDiagram-E7YTZNPT-CX1dwbeD.js} +3 -3
  107. package/dist/viewer/{pl-PL-T2D74RX3-DG-CBlvr.js → pl-PL-T2D74RX3-LcmmmlyH.js} +1 -1
  108. package/dist/viewer/{prod-BkhfMLuD.js → prod-B8PlumMX.js} +9 -9
  109. package/dist/viewer/{pt-BR-5N22H2LF-DHX82eiC.js → pt-BR-5N22H2LF-CSwh6Qow.js} +1 -1
  110. package/dist/viewer/{pt-PT-UZXXM6DQ-C7hcCDRC.js → pt-PT-UZXXM6DQ-Dik_tH8d.js} +1 -1
  111. package/dist/viewer/{quadrantDiagram-AXDQQJYC-C8ex_GP4.js → quadrantDiagram-AXDQQJYC-DAlIHzj1.js} +1 -1
  112. package/dist/viewer/{railroadDiagram-O6MQD6OU-1tVqy-R1.js → railroadDiagram-O6MQD6OU-3sbXCT8O.js} +1 -1
  113. package/dist/viewer/{requirementDiagram-BXWQKSXE-MJWMqh0i.js → requirementDiagram-BXWQKSXE-_SmB-iGu.js} +1 -1
  114. package/dist/viewer/{ro-RO-JPDTUUEW-kNmvlxGQ.js → ro-RO-JPDTUUEW-5pEQNah0.js} +1 -1
  115. package/dist/viewer/{ru-RU-B4JR7IUQ-DIPjZ7JJ.js → ru-RU-B4JR7IUQ-D_Kg9Hzp.js} +1 -1
  116. package/dist/viewer/{sequenceDiagram-WJ2MYXX4-BmytocXO.js → sequenceDiagram-WJ2MYXX4-CNxS0HZg.js} +1 -1
  117. package/dist/viewer/{si-LK-N5RQ5JYF-CklMTI2L.js → si-LK-N5RQ5JYF-Bp_qk_kO.js} +1 -1
  118. package/dist/viewer/{sk-SK-C5VTKIMK-TIEeBTSD.js → sk-SK-C5VTKIMK-dZmproWt.js} +1 -1
  119. package/dist/viewer/{sl-SI-NN7IZMDC-BzfdTTSQ.js → sl-SI-NN7IZMDC-DCPnVelb.js} +1 -1
  120. package/dist/viewer/{stateDiagram-D77RDMKH-ASSh2jQr.js → stateDiagram-D77RDMKH-DLlcIj9E.js} +1 -1
  121. package/dist/viewer/{stateDiagram-v2-MP3YSRHH-QqO49gLr.js → stateDiagram-v2-MP3YSRHH-BQGIuopX.js} +1 -1
  122. package/dist/viewer/subset-shared.chunk-CvpSwkWA.js +1 -0
  123. package/dist/viewer/{subset-worker.chunk-ByFgYWrP.js → subset-worker.chunk-KysBifhs.js} +1 -1
  124. package/dist/viewer/{sv-SE-XGPEYMSR-Ca92kj7e.js → sv-SE-XGPEYMSR-DQC8YOoA.js} +1 -1
  125. package/dist/viewer/{swimlanes-42K2YHIH-B6PLFQO7.js → swimlanes-42K2YHIH-pPhC0efI.js} +1 -1
  126. package/dist/viewer/{swimlanesDiagram-VR7AAH4N-N8AFiqh9.js → swimlanesDiagram-VR7AAH4N-BknwjiJI.js} +1 -1
  127. package/dist/viewer/{ta-IN-2NMHFXQM-VcTgcAra.js → ta-IN-2NMHFXQM-XJN8sySm.js} +1 -1
  128. package/dist/viewer/{th-TH-HPSO5L25-CQK6U6zN.js → th-TH-HPSO5L25-CrVxkBUt.js} +1 -1
  129. package/dist/viewer/{timeline-definition-24CTP7MA-bdnxX84c.js → timeline-definition-24CTP7MA-djWWXfng.js} +1 -1
  130. package/dist/viewer/{tr-TR-DEFEU3FU-BK4O5HPq.js → tr-TR-DEFEU3FU-CL6S5zlq.js} +1 -1
  131. package/dist/viewer/{uk-UA-QMV73CPH-Dgto1rbO.js → uk-UA-QMV73CPH-CMrgmof-.js} +1 -1
  132. package/dist/viewer/{useSandboxFrame-3fuBOs0A.js → useSandboxFrame-Cx7xofoM.js} +1 -1
  133. package/dist/viewer/{vennDiagram-4TSXK5OY-DPdqusDE.js → vennDiagram-4TSXK5OY-DnkQnhE7.js} +1 -1
  134. package/dist/viewer/{vi-VN-M7AON7JQ-dbrYvw7t.js → vi-VN-M7AON7JQ-DcU7HmKI.js} +1 -1
  135. package/dist/viewer/{wardleyDiagram-VM6X3IG4-B4FxaO_K.js → wardleyDiagram-VM6X3IG4-BiN7N4S8.js} +1 -1
  136. package/dist/viewer/{xychartDiagram-S5SC5T6Z-B-xgw6AE.js → xychartDiagram-S5SC5T6Z-DR4L47nZ.js} +1 -1
  137. package/dist/viewer/{zh-CN-LNUGB5OW-B9JwAL-C.js → zh-CN-LNUGB5OW-B58c_p8w.js} +1 -1
  138. package/dist/viewer/{zh-HK-E62DVLB3-yrlUVHxC.js → zh-HK-E62DVLB3-D-pcM14T.js} +1 -1
  139. package/dist/viewer/{zh-TW-RAJ6MFWO-6sxLjcXU.js → zh-TW-RAJ6MFWO-Dcb5-RNU.js} +1 -1
  140. package/package.json +1 -1
  141. package/dist/viewer/CloudDocument-CotgQhd8.js +0 -1
  142. package/dist/viewer/DocumentPage-0GGJlY-j.js +0 -1
  143. package/dist/viewer/dist-C10VRgAd.js +0 -1
  144. package/dist/viewer/dist-CL7kKeXL.js +0 -1
  145. package/dist/viewer/dist-DAw97NG5.js +0 -1
  146. package/dist/viewer/dist-DGBiXrP7.js +0 -9
  147. package/dist/viewer/dist-DTI9Lw8b.js +0 -6
  148. package/dist/viewer/flowDiagram-HODETNUW-DuNy2QCx.js +0 -1
  149. package/dist/viewer/ganttDiagram-EL5Y4UJY-CmFhbbr4.js +0 -292
  150. package/dist/viewer/percentages-BXMCSKIN-BlwZCNS5.js +0 -1
  151. package/dist/viewer/subset-shared.chunk-CThXukp8.js +0 -1
package/dist/cli.cjs CHANGED
@@ -922,7 +922,7 @@ async function main(argv) {
922
922
  }, emit);
923
923
  }
924
924
  if (command === "--version" || command === "-v") {
925
- console.log("1.18.4");
925
+ console.log("1.20.0");
926
926
  return 0;
927
927
  }
928
928
  if (command === "--help" || command === "-h") {
package/dist/server.cjs CHANGED
@@ -17633,7 +17633,8 @@ var BLOCK_TAGS2 = [
17633
17633
  "details",
17634
17634
  "footnote-section",
17635
17635
  "def",
17636
- "dynamic"
17636
+ "dynamic",
17637
+ "pending"
17637
17638
  ];
17638
17639
  var INLINE_TAGS2 = ["b", "strong", "i", "em", "u", "s", "del", "strike", "code", "sub", "sup", "mark", "a", "br", "footnote"];
17639
17640
  var DOCUMENT_TAGS = /* @__PURE__ */ new Set([...BLOCK_TAGS2, ...INLINE_TAGS2]);
@@ -17657,6 +17658,14 @@ var LITEXML_ONLY_TAGS = /* @__PURE__ */ new Set([
17657
17658
  "video"
17658
17659
  ]);
17659
17660
  var registry = createDefaultRegistry();
17661
+ registry.registerReader("pending", (el2) => {
17662
+ const id2 = el2.getAttribute("id");
17663
+ return { type: "pending", ...id2 ? { $: { blockId: id2 } } : {}, intent: el2.getAttribute("intent") ?? "", version: 1 };
17664
+ });
17665
+ registry.registerWriter("pending", (node) => {
17666
+ const { $: state, intent } = node;
17667
+ return { tag: "pending", attrs: { ...state?.blockId ? { id: state.blockId } : {}, intent: intent ?? "" }, selfClosing: true };
17668
+ });
17660
17669
  var DocumentRejected = class extends Error {
17661
17670
  };
17662
17671
  var URL_ATTR = /\surl\s*=\s*(?:"([^"]*)"|'([^']*)')/i;
@@ -17690,6 +17699,12 @@ function badDynamicProps(xml) {
17690
17699
  }
17691
17700
  return null;
17692
17701
  }
17702
+ function containsPending(value) {
17703
+ if (Array.isArray(value)) return value.some(containsPending);
17704
+ if (!value || typeof value !== "object") return false;
17705
+ return value.type === "pending" || Object.values(value).some(containsPending);
17706
+ }
17707
+ var nestedPending = (blocks) => blocks.some((block) => block.type !== "pending" && containsPending(block)) ? "<pending> must be a top-level block" : null;
17693
17708
  function badDynamicUrl(nodes) {
17694
17709
  for (const node of nodes) {
17695
17710
  if (node.type === "dynamic" && !DYNAMIC_URL.test(node.url ?? "")) return "<dynamic> url must be assets/<name>.html";
@@ -17708,7 +17723,7 @@ function parseDocument2(xml) {
17708
17723
  } catch (err) {
17709
17724
  throw new DocumentRejected(err.message);
17710
17725
  }
17711
- const url = badDynamicUrl(state.root.children);
17726
+ const url = badDynamicUrl(state.root.children) ?? nestedPending(state.root.children);
17712
17727
  if (url) throw new DocumentRejected(url);
17713
17728
  return state;
17714
17729
  }
@@ -17729,6 +17744,15 @@ function stampBlockIds(state) {
17729
17744
  });
17730
17745
  return { ...state, root: { ...state.root, children } };
17731
17746
  }
17747
+ var BOX_LINE = /[\u2500-\u257F]/;
17748
+ var TOP_LEFT = /[┌╭╔┏]/g;
17749
+ var BOTTOM_RIGHT = /[┘╯╝┛]/;
17750
+ var ARROW = /[▼▲▶◀►◄]|[─━]>/;
17751
+ var isBoxDiagram = (code) => code.split("\n").filter((line) => BOX_LINE.test(line)).length >= 3 && (code.match(TOP_LEFT)?.length ?? 0) >= 2 && BOTTOM_RIGHT.test(code) && ARROW.test(code);
17752
+ var holdsBoxDiagram = (node) => node.type === "code-block" && isBoxDiagram(node.code ?? "") || (node.children ?? []).some(holdsBoxDiagram);
17753
+ function boxDrawingDiagrams(state) {
17754
+ return state.root.children.flatMap((block) => block.$?.blockId && holdsBoxDiagram(block) ? [block.$.blockId] : []);
17755
+ }
17732
17756
 
17733
17757
  // src/server/board-comments.ts
17734
17758
  var import_node_crypto2 = __toESM(require("node:crypto"), 1);
@@ -53451,6 +53475,10 @@ function streamAtVersion(doc, frontiers, createEditor3, base, target, commitMess
53451
53475
  };
53452
53476
  }
53453
53477
 
53478
+ // src/shared/document-features.ts
53479
+ var DOCUMENT_FEATURES = ["pending"];
53480
+ var DOCUMENT_FEATURES_HEADER = "x-ryugi-document-features";
53481
+
53454
53482
  // node_modules/.pnpm/@lexical+table@0.52.0_typescript@5.9.3/node_modules/@lexical/table/dist/LexicalTable.dev.js
53455
53483
  var LexicalTable_dev_exports = {};
53456
53484
  __export(LexicalTable_dev_exports, {
@@ -87704,8 +87732,39 @@ var HeadlessExtension3 = mod45.HeadlessExtension;
87704
87732
  var createHeadlessEditor2 = mod45.createHeadlessEditor;
87705
87733
 
87706
87734
  // src/server/document-headless.ts
87735
+ var PendingNode = class _PendingNode extends DecoratorNode2 {
87736
+ __intent;
87737
+ static getType() {
87738
+ return "pending";
87739
+ }
87740
+ static clone(node) {
87741
+ return new _PendingNode(node.__intent, node.__key);
87742
+ }
87743
+ static importJSON(json) {
87744
+ return new _PendingNode(json.intent).updateFromJSON(json);
87745
+ }
87746
+ constructor(intent = "", key2) {
87747
+ super(key2);
87748
+ this.__intent = intent;
87749
+ }
87750
+ exportJSON() {
87751
+ return { ...super.exportJSON(), type: "pending", version: 1, intent: this.__intent };
87752
+ }
87753
+ createDOM() {
87754
+ throw new Error("headless");
87755
+ }
87756
+ updateDOM() {
87757
+ return false;
87758
+ }
87759
+ isInline() {
87760
+ return false;
87761
+ }
87762
+ decorate() {
87763
+ return null;
87764
+ }
87765
+ };
87707
87766
  var createDocumentHeadlessEditor = () => createHeadlessEditor2({
87708
- nodes: allHeadlessNodes,
87767
+ nodes: [...allHeadlessNodes, PendingNode],
87709
87768
  onError: (err) => {
87710
87769
  throw err;
87711
87770
  }
@@ -87713,6 +87772,8 @@ var createDocumentHeadlessEditor = () => createHeadlessEditor2({
87713
87772
 
87714
87773
  // src/server/document-session.ts
87715
87774
  var WRITTEN_LIMIT = 50;
87775
+ var OutdatedClient = class extends Error {
87776
+ };
87716
87777
  var messageOf = (err) => err instanceof Error ? err.message : String(err);
87717
87778
  function lcsLength(a5, b6) {
87718
87779
  const table = Array.from({ length: a5.length + 1 }, () => new Uint32Array(b6.length + 1));
@@ -87732,11 +87793,13 @@ function blockStats(before2, after2) {
87732
87793
  const changed = Math.min(added, removed);
87733
87794
  return `+${added - changed} ~${changed} -${removed - changed} blocks`;
87734
87795
  }
87735
- function closestBase(written, text2, fallback) {
87796
+ function closestBase(written, text2, fallback, floor) {
87797
+ const keys2 = [...written.keys()];
87798
+ const from = floor === null ? -1 : keys2.indexOf(floor);
87736
87799
  const wanted = new Set(text2.split("\n").map((line) => line.trim()));
87737
87800
  let best = fallback;
87738
87801
  let bestScore = -1;
87739
- for (const candidate of written.keys()) {
87802
+ for (const candidate of from >= 0 ? keys2.slice(from) : keys2) {
87740
87803
  const lines = candidate.split("\n").map((line) => line.trim());
87741
87804
  const shared = lines.filter((line) => wanted.has(line)).length;
87742
87805
  const score = shared - (lines.length - shared);
@@ -87747,6 +87810,15 @@ function closestBase(written, text2, fallback) {
87747
87810
  }
87748
87811
  return best;
87749
87812
  }
87813
+ async function lastAgentWrite(activityFile, file) {
87814
+ const recorded = Number(await readText(activityFile));
87815
+ if (recorded > 0) return recorded;
87816
+ try {
87817
+ return Math.round((await import_promises.default.stat(file)).mtimeMs);
87818
+ } catch {
87819
+ return Date.now();
87820
+ }
87821
+ }
87750
87822
  async function readText(file) {
87751
87823
  try {
87752
87824
  return await import_promises.default.readFile(file, "utf8");
@@ -87789,10 +87861,15 @@ async function createDocumentSession(options) {
87789
87861
  let streaming = 0;
87790
87862
  let lastCursor = null;
87791
87863
  let lastGoodText = null;
87864
+ let lastAgentText = null;
87792
87865
  let lastFileText = await readText(file) ?? "";
87866
+ const activityFile = import_node_path8.default.join(import_node_path8.default.dirname(snapshotFile), "agent-active");
87867
+ let agentActiveAt = await lastAgentWrite(activityFile, file);
87868
+ let activitySaved = Promise.resolve();
87869
+ const emitStatus = () => emit({ type: "status", outcome, streaming: streaming > 0, agentActiveAt });
87793
87870
  const setOutcome = (next) => {
87794
87871
  outcome = next;
87795
- emit({ type: "status", outcome, streaming: streaming > 0 });
87872
+ emitStatus();
87796
87873
  };
87797
87874
  try {
87798
87875
  const initial = parseDocument2(lastFileText);
@@ -87833,6 +87910,9 @@ async function createDocumentSession(options) {
87833
87910
  const onFileText = (text2) => {
87834
87911
  if (text2 === lastFileText) return;
87835
87912
  lastFileText = text2;
87913
+ agentActiveAt = Date.now();
87914
+ const at7 = agentActiveAt;
87915
+ activitySaved = activitySaved.then(() => writeAtomic(activityFile, String(at7))).catch((err) => log(`agent activity not saved: ${messageOf(err)}`));
87836
87916
  let target;
87837
87917
  try {
87838
87918
  target = parseDocument2(text2);
@@ -87842,13 +87922,15 @@ async function createDocumentSession(options) {
87842
87922
  return;
87843
87923
  }
87844
87924
  const fallback = lastGoodText ?? serializeDocument(editor.getEditorState().toJSON());
87925
+ const floor = lastAgentText;
87926
+ lastAgentText = text2;
87845
87927
  const queued = streaming > 0;
87846
87928
  lastGoodText = text2;
87847
87929
  streaming += 1;
87848
- emit({ type: "status", outcome, streaming: true });
87930
+ emitStatus();
87849
87931
  playing = playing.then(async () => {
87850
87932
  try {
87851
- const baseText = queued ? fallback : closestBase(written, text2, fallback);
87933
+ const baseText = queued ? fallback : closestBase(written, text2, fallback, floor);
87852
87934
  const { stats, steps } = prepareAgentEdit(baseText, text2, target);
87853
87935
  for (const step of steps) {
87854
87936
  applyStep(step);
@@ -87898,6 +87980,7 @@ async function createDocumentSession(options) {
87898
87980
  lastFileText = text2;
87899
87981
  lastGoodText = text2;
87900
87982
  remember(text2);
87983
+ emit({ type: "saved" });
87901
87984
  }
87902
87985
  snapshotDirty = true;
87903
87986
  await saveSnapshot();
@@ -87920,8 +88003,13 @@ async function createDocumentSession(options) {
87920
88003
  scheduleWrite();
87921
88004
  return {
87922
88005
  snapshot: () => loro.export({ mode: "snapshot" }),
88006
+ state: () => editor.getEditorState().toJSON(),
87923
88007
  lineage: () => loro.getTree(TREE_NAME).roots()[0]?.id ?? "",
87924
- importUpdate: (bytes) => {
88008
+ importUpdate: (bytes, features = []) => {
88009
+ const undeclared2 = DOCUMENT_FEATURES.filter((feature) => !features.includes(feature));
88010
+ const types = undeclared2.length ? editor.getEditorState().read(() => new Set($getRoot2().getChildren().map((block) => block.getType()))) : /* @__PURE__ */ new Set();
88011
+ const missing = undeclared2.filter((feature) => types.has(feature));
88012
+ if (missing.length) throw new OutdatedClient(`this page cannot show <${missing.join(">, <")}> blocks; reload the page`);
87925
88013
  const probe = loro.fork();
87926
88014
  probe.import(bytes);
87927
88015
  if (probe.getTree(TREE_NAME).roots().length > 1) throw new Error("update belongs to a different document; reload the page");
@@ -87936,6 +88024,7 @@ async function createDocumentSession(options) {
87936
88024
  },
87937
88025
  outcome: () => outcome,
87938
88026
  streaming: () => streaming > 0,
88027
+ agentActiveAt: () => agentActiveAt,
87939
88028
  cursor: () => lastCursor,
87940
88029
  settled: () => playing,
87941
88030
  flush,
@@ -87943,6 +88032,7 @@ async function createDocumentSession(options) {
87943
88032
  clearInterval(snapshotTimer);
87944
88033
  await flush();
87945
88034
  await saveSnapshot();
88035
+ await activitySaved;
87946
88036
  binding.dispose();
87947
88037
  listeners.clear();
87948
88038
  }
@@ -87955,8 +88045,10 @@ var forAgent = (thread) => ({
87955
88045
  waitingOn: waitingOn(thread),
87956
88046
  messages: thread.messages.map(({ avatar: _avatar, ...message }) => message)
87957
88047
  });
87958
- function outcomeWarnings(outcome, streaming) {
87959
- if (streaming) return [];
88048
+ var diagramWarnings = (session) => boxDrawingDiagrams(session.state()).map(
88049
+ (id2) => `block ${id2} draws a diagram with box-drawing characters; this document is rendered, not Markdown, so draw it as <mermaid>`
88050
+ );
88051
+ function outcomeWarnings(outcome) {
87960
88052
  if (outcome.kind === "rejected") return [`agent edit rejected: ${outcome.message} (doc.xml is left as written; fix it)`];
87961
88053
  if (outcome.kind === "failed") return [`agent edit failed: ${outcome.message}`];
87962
88054
  return [];
@@ -87997,15 +88089,22 @@ function createDocumentRegistry(options) {
87997
88089
  warnings.set(id2, next);
87998
88090
  options.onWarningsChange(id2);
87999
88091
  };
88000
- setWarnings(outcomeWarnings(session.outcome(), false));
88092
+ const currentWarnings = () => {
88093
+ if (session.streaming()) return [];
88094
+ const outcome = session.outcome();
88095
+ return outcome.kind === "rejected" ? outcomeWarnings(outcome) : [...outcomeWarnings(outcome), ...diagramWarnings(session)];
88096
+ };
88097
+ setWarnings(currentWarnings());
88001
88098
  session.subscribe((event) => {
88002
88099
  if (event.type === "update") {
88003
88100
  options.broadcast({ type: "doc-update", artifact, bytes: Buffer.from(event.bytes).toString("base64") });
88004
88101
  } else if (event.type === "cursor") {
88005
88102
  options.broadcast({ type: "doc-cursor", artifact, cursor: event.cursor });
88103
+ } else if (event.type === "saved") {
88104
+ setWarnings(currentWarnings());
88006
88105
  } else {
88007
- options.broadcast({ type: "doc-status", artifact, streaming: event.streaming, outcome: event.outcome });
88008
- setWarnings(outcomeWarnings(event.outcome, event.streaming));
88106
+ options.broadcast({ type: "doc-status", artifact, streaming: event.streaming, outcome: event.outcome, agentActiveAt: event.agentActiveAt, now: Date.now() });
88107
+ setWarnings(currentWarnings());
88009
88108
  }
88010
88109
  });
88011
88110
  return session;
@@ -90347,6 +90446,8 @@ async function startArtifactsServer(options) {
90347
90446
  lineage: session.lineage(),
90348
90447
  outcome: session.outcome(),
90349
90448
  streaming: session.streaming(),
90449
+ agentActiveAt: session.agentActiveAt(),
90450
+ now: Date.now(),
90350
90451
  cursor: session.cursor(),
90351
90452
  comments: documents.comments(id2)
90352
90453
  });
@@ -90392,11 +90493,13 @@ async function startArtifactsServer(options) {
90392
90493
  send(res, 413, "Update too large");
90393
90494
  return;
90394
90495
  }
90496
+ const header = req.headers[DOCUMENT_FEATURES_HEADER];
90497
+ const features = typeof header === "string" ? header.split(",").map((feature) => feature.trim()) : [];
90395
90498
  try {
90396
- session.importUpdate(new Uint8Array(Buffer.concat(chunks)));
90499
+ session.importUpdate(new Uint8Array(Buffer.concat(chunks)), features);
90397
90500
  send(res, 204, "");
90398
90501
  } catch (err) {
90399
- sendJson(res, 400, { error: err.message });
90502
+ sendJson(res, err instanceof OutdatedClient ? 409 : 400, { error: err.message });
90400
90503
  }
90401
90504
  };
90402
90505
  const blockIdsOf = async (id2, dir) => {
@@ -90882,7 +90985,8 @@ async function startArtifactsServer(options) {
90882
90985
  const bytes = typeof request.bytes === "string" ? Buffer.from(request.bytes, "base64") : null;
90883
90986
  if (!bytes) throw new Error("update needs bytes");
90884
90987
  if (bytes.length > MAX_DOCUMENT_UPDATE) throw new Error("update too large");
90885
- session.importUpdate(new Uint8Array(bytes));
90988
+ const features = Array.isArray(request.features) ? request.features.filter((feature) => typeof feature === "string") : [];
90989
+ session.importUpdate(new Uint8Array(bytes), features);
90886
90990
  return null;
90887
90991
  }
90888
90992
  if (request.op === "comment") {
@@ -91079,7 +91183,7 @@ function openReady(payload) {
91079
91183
  }
91080
91184
 
91081
91185
  // package.json
91082
- var version = "1.18.4";
91186
+ var version = "1.20.0";
91083
91187
 
91084
91188
  // src/server/main.ts
91085
91189
  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{a as r,m as i}from"./useSandboxFrame-Cx7xofoM.js";import{_ as a,d as o,g as s,h as c,t as l,u,v as d}from"./DocumentLayout-D4LN2imT.js";var f=e(t(),1),p=n();function m(){let e=(0,f.useMemo)(()=>window.matchMedia(`(prefers-color-scheme: dark)`),[]),[t,n]=(0,f.useState)(e.matches);return(0,f.useEffect)(()=>{let t=()=>n(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[e]),t}function h({id:e,state:t,contentBase:n,comments:h=i(),offline:g=!1}){let _=m(),[v,y]=(0,f.useState)(null),b=(0,f.useMemo)(()=>({artifact:`cloud/${e}`,contentBase:n,channel:s(),send:()=>void 0}),[e,n]),x=r(e,{comments:h.threads.filter(e=>e.status===`open`).length,activity:null,retrying:!1,reason:null});return(0,f.useEffect)(()=>{let e=document.createElement(`base`);return e.href=n,document.head.prepend(e),()=>e.remove()},[n]),(0,p.jsxs)(`div`,{className:`x1us19tq x1rozbrz xo2rkog`,className:`ryugi-doc ${{className:`x1us19tq x1rozbrz xo2rkog`}.className??``}`,children:[g?(0,p.jsxs)(`div`,{...{0:{className:`x78zum5 x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61`},1:{className:`x6s0dn4 x17d4w8g x1vqgdyp x4l9tsp x1bo0w0s xqfszdh xfifm61 x1s85apg x1ux6vrq`}}[!!x|0],children:[(0,p.jsx)(`i`,{className:`xci0xqf x1hagigm x16rqkct xxwmxtg`}),`电脑离线,暂时不能评论`]}):null,(0,p.jsx)(l,{editor:v,threads:h.threads,children:(0,p.jsx)(c.Provider,{value:b,children:(0,p.jsx)(d,{variant:`article`,theme:_?`dark`:`light`,initialValue:t,extraNodes:u,rendererConfig:o,onEditorReady:e=>{e?.setEditable(!1),y(e??null)},children:(0,p.jsx)(a,{})})})})]})}export{h as default};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{a as r}from"./useSandboxFrame-3fuBOs0A.js";import{t as i}from"./index.js";import a from"./CloudDocument-CotgQhd8.js";import{DocumentView as o,t as s}from"./DocumentPage-0GGJlY-j.js";var c=e(t(),1),l=`1.18.4`,u=e=>/^(\d+)\.(\d+)\./.exec(e??``)?.slice(1,3).join(`.`)??null;function d(e,t){let n=u(e);return n!==null&&n===u(t)}var f=(e,t)=>`电脑上的 ryugi 是 ${t??`未知版本`},网页是 ${e},版本对上之前只能评论`,p=n();function m({id:e,state:t,contentBase:n,liveContentBase:u,comments:m}){let{transport:h,presence:g}=s(e,u??n??``),_=g?.online??!1;r(e,{online:g?.online??null});let[v,y]=(0,c.useState)(!1);if((0,c.useEffect)(()=>{_&&y(!0)},[_]),!h||!(v||_))return!t||!n?(0,p.jsx)(i,{children:g===null?`正在连接…`:`还没发布。电脑在线时,这里会实时显示。`}):(0,p.jsx)(a,{id:e,state:t,contentBase:n,comments:m,offline:g!==null&&!_});let b=_&&d(l,g?.version??null),x=_&&!b?f(l,g?.version??null):null;return(0,p.jsx)(o,{id:e,transport:h,live:_,cloud:{online:_,canEdit:b,reason:x}})}export{m as default};
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{n as t,t as n}from"./jsx-runtime-CldxteV5.js";import{a as r}from"./useSandboxFrame-Cx7xofoM.js";import{t as i}from"./index.js";import a from"./CloudDocument-fPJO17RB.js";import{DocumentView as o,t as s}from"./DocumentPage-DU7AlIYi.js";var c=e(t(),1),l=`1.20.0`,u=e=>/^(\d+)\.(\d+)\./.exec(e??``)?.slice(1,3).join(`.`)??null;function d(e,t){let n=u(e);return n!==null&&n===u(t)}var f=(e,t)=>`电脑上的 ryugi 是 ${t??`未知版本`},网页是 ${e},版本对上之前只能评论`,p=n();function m({id:e,state:t,contentBase:n,liveContentBase:u,comments:m}){let{transport:h,presence:g}=s(e,u??n??``),_=g?.online??!1;r(e,{online:g?.online??null});let[v,y]=(0,c.useState)(!1);if((0,c.useEffect)(()=>{_&&y(!0)},[_]),!h||!(v||_))return!t||!n?(0,p.jsx)(i,{children:g===null?`正在连接…`:`还没发布。电脑在线时,这里会实时显示。`}):(0,p.jsx)(a,{id:e,state:t,contentBase:n,comments:m,offline:g!==null&&!_});let b=_&&d(l,g?.version??null),x=_&&!b?f(l,g?.version??null):null;return(0,p.jsx)(o,{id:e,transport:h,live:_,cloud:{online:_,canEdit:b,reason:x}})}export{m as default};