ryugi-artifacts 1.2.0 → 1.4.1

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 (164) hide show
  1. package/dist/runtime/ryugi-ui.js +90 -0
  2. package/dist/server.cjs +140 -27
  3. package/dist/viewer/DocumentPage-B8-SlHYe.css +1 -0
  4. package/dist/viewer/{DocumentPage-CKcaZQSJ.js → DocumentPage-CUMc7_Xs.js} +160 -157
  5. package/dist/viewer/{abnfDiagram-VCTEODGH-CJY9VDd4.js → abnfDiagram-VCTEODGH-6sqmJ1ax.js} +1 -1
  6. package/dist/viewer/{ar-SA-G6X2FPQ2-K-GtJ7W1.js → ar-SA-G6X2FPQ2-B1vyJLm-.js} +1 -1
  7. package/dist/viewer/{architectureDiagram-5GKGNRK7-BkBtyasE.js → architectureDiagram-5GKGNRK7-C7b-KLYZ.js} +1 -1
  8. package/dist/viewer/{az-AZ-76LH7QW2-XoVI4fwq.js → az-AZ-76LH7QW2-7A-x2jlX.js} +1 -1
  9. package/dist/viewer/{bg-BG-XCXSNQG7-Cbfvo-2c.js → bg-BG-XCXSNQG7-DhUmN2uV.js} +1 -1
  10. package/dist/viewer/{blockDiagram-I7D4REHJ-BFwodIpD.js → blockDiagram-I7D4REHJ-vzR0MLtr.js} +1 -1
  11. package/dist/viewer/{bn-BD-2XOGV67Q-CdVUfI64.js → bn-BD-2XOGV67Q-shwCf3Bm.js} +1 -1
  12. package/dist/viewer/bundle-full-zufxvbLq.js +1 -0
  13. package/dist/viewer/{c4Diagram-7LVT6UL2-CLZxtZwl.js → c4Diagram-7LVT6UL2-58pCA6H1.js} +1 -1
  14. package/dist/viewer/{ca-ES-6MX7JW3Y-DJzuileD.js → ca-ES-6MX7JW3Y-CFF7L0QN.js} +1 -1
  15. package/dist/viewer/{chunk-4HAMMTFA-3V2j1-Kz.js → chunk-4HAMMTFA-CRwFsbSE.js} +1 -1
  16. package/dist/viewer/{chunk-EIO257PC-Cn8WiyTa.js → chunk-EIO257PC-B5jdzPER.js} +1 -1
  17. package/dist/viewer/{chunk-GMAD6QVW-BtjtirIk.js → chunk-GMAD6QVW-JoFSIaD3.js} +1 -1
  18. package/dist/viewer/{chunk-GVQU2GXP-CLOvs0EN.js → chunk-GVQU2GXP-CFOzMg3Y.js} +1 -1
  19. package/dist/viewer/{chunk-IMKFNOWR-CHa_S560.js → chunk-IMKFNOWR-DV7sFi2S.js} +1 -1
  20. package/dist/viewer/{chunk-L3NEJ4N5-wu75JLPc.js → chunk-L3NEJ4N5-BRIO8Vch.js} +1 -1
  21. package/dist/viewer/{chunk-OSK3NFVY-Nv7U0CWh.js → chunk-OSK3NFVY-BFuxpkWW.js} +1 -1
  22. package/dist/viewer/{chunk-PWAF6VOD-BMehzbEP.js → chunk-PWAF6VOD-jQqRXQjQ.js} +1 -1
  23. package/dist/viewer/{chunk-SHT3W25Y-X-Y-_0Ot.js → chunk-SHT3W25Y-CkrosGkz.js} +1 -1
  24. package/dist/viewer/{chunk-SVP7TREG-CPiBmvIE.js → chunk-SVP7TREG-DM5F3zf9.js} +1 -1
  25. package/dist/viewer/{chunk-TICWLB2K-BA_PbzF0.js → chunk-TICWLB2K-C7IgvsFS.js} +1 -1
  26. package/dist/viewer/{classDiagram-ZZMXUADV-g7lv5vM9.js → classDiagram-ZZMXUADV-DoyHBIFT.js} +1 -1
  27. package/dist/viewer/{classDiagram-v2-VYDZK3BY-g7lv5vM9.js → classDiagram-v2-VYDZK3BY-DoyHBIFT.js} +1 -1
  28. package/dist/viewer/{cs-CZ-2BRQDIVT-CT4fGx63.js → cs-CZ-2BRQDIVT-Cpg2fi5O.js} +1 -1
  29. package/dist/viewer/{cynefinDiagram-5FMLGOSQ-B8tI7bw4.js → cynefinDiagram-5FMLGOSQ-DCWaj-ji.js} +1 -1
  30. package/dist/viewer/{da-DK-5WZEPLOC-W6408Jjh.js → da-DK-5WZEPLOC-Dkrwy7UF.js} +1 -1
  31. package/dist/viewer/{dagre-GXQ25YYZ-C_e-LadC.js → dagre-GXQ25YYZ-CkvqswXB.js} +1 -1
  32. package/dist/viewer/{de-DE-XR44H4JA-CN0sXxCx.js → de-DE-XR44H4JA-BsFATsQ7.js} +1 -1
  33. package/dist/viewer/{diagram-S7CK7UJ4-DnpOqHnU.js → diagram-S7CK7UJ4-BLgTnal4.js} +1 -1
  34. package/dist/viewer/{diagram-UQ7AKVKN-DBtRgcbj.js → diagram-UQ7AKVKN-BOOuIOAi.js} +1 -1
  35. package/dist/viewer/{diagram-VX7I27RA-Cg3U157p.js → diagram-VX7I27RA-CBejVfwX.js} +1 -1
  36. package/dist/viewer/{diagram-Z3DM3KII-COnkTX3I.js → diagram-Z3DM3KII-Dsfn4cQT.js} +1 -1
  37. package/dist/viewer/dist-B8j_djl3.js +23 -0
  38. package/dist/viewer/dist-BW3kaAUU.js +1 -0
  39. package/dist/viewer/dist-BeeoOAkJ.js +1 -0
  40. package/dist/viewer/dist-BmGBmrLO.js +9 -0
  41. package/dist/viewer/dist-Bmu2jBZ8.js +1 -0
  42. package/dist/viewer/dist-BrnE25fw.js +1 -0
  43. package/dist/viewer/dist-C8j96inZ.js +1 -0
  44. package/dist/viewer/{dist-CUfsWem0.js → dist-CD80Ls-w.js} +1 -1
  45. package/dist/viewer/dist-CEi-EHZz.js +6 -0
  46. package/dist/viewer/{dist-zn8EeWds.js → dist-CawMU58Z.js} +4 -4
  47. package/dist/viewer/{dist-BzjGbwZW.js → dist-Co80CdmK.js} +1 -1
  48. package/dist/viewer/dist-D0Cs-QWY.js +1 -0
  49. package/dist/viewer/dist-DOYu8Ulf.js +1 -0
  50. package/dist/viewer/dist-DOfoiRwk.js +11 -0
  51. package/dist/viewer/dist-DT68yNv9.js +1 -0
  52. package/dist/viewer/dist-DV6DLjjc.js +1 -0
  53. package/dist/viewer/dist-DbN_am5s.js +1 -0
  54. package/dist/viewer/dist-DcltHyjJ.js +1 -0
  55. package/dist/viewer/dist-DjWWbDD5.js +1 -0
  56. package/dist/viewer/dist-DlOGd3i_.js +1 -0
  57. package/dist/viewer/dist-bzUY2uMM.js +1 -0
  58. package/dist/viewer/dist-jdF19sCi.js +1 -0
  59. package/dist/viewer/dist-rmtkIkJZ.js +2 -0
  60. package/dist/viewer/dist-yFvAy8Ar.js +1 -0
  61. package/dist/viewer/{ebnfDiagram-PWID7BFC-oAgHTNXR.js → ebnfDiagram-PWID7BFC-BKgqXbrD.js} +1 -1
  62. package/dist/viewer/{el-GR-BZB4AONW-BsMedPHo.js → el-GR-BZB4AONW-3fIJfxnW.js} +1 -1
  63. package/dist/viewer/{en-B4ZKOASM-CITu3D1s.js → en-B4ZKOASM-d6lCBBpL.js} +1 -1
  64. package/dist/viewer/{erDiagram-RLTQ6QDP-TwdW2oA7.js → erDiagram-RLTQ6QDP-DHNRCaQI.js} +1 -1
  65. package/dist/viewer/{es-ES-U4NZUMDT-Ck9awXmS.js → es-ES-U4NZUMDT-CRzZW3JH.js} +1 -1
  66. package/dist/viewer/{eu-ES-A7QVB2H4-B0zdMCeq.js → eu-ES-A7QVB2H4-DfzgRZX0.js} +1 -1
  67. package/dist/viewer/{fa-IR-HGAKTJCU-CS5a6owQ.js → fa-IR-HGAKTJCU-iFq4OcLj.js} +1 -1
  68. package/dist/viewer/{fi-FI-Z5N7JZ37-DFeVVwfY.js → fi-FI-Z5N7JZ37-CVMpTDOY.js} +1 -1
  69. package/dist/viewer/flowDiagram-HODETNUW-CLU6w8F4.js +1 -0
  70. package/dist/viewer/{fr-FR-RHASNOE6-DKx1LutU.js → fr-FR-RHASNOE6-lZ6pWX75.js} +1 -1
  71. package/dist/viewer/{ganttDiagram-EL5Y4UJY-C99HWJuC.js → ganttDiagram-EL5Y4UJY-BntFzPhy.js} +1 -1
  72. package/dist/viewer/{gl-ES-HMX3MZ6V-DIyoZ6Ev.js → gl-ES-HMX3MZ6V-CYVyT8xT.js} +1 -1
  73. package/dist/viewer/{he-IL-6SHJWFNN-S6gg5BZc.js → he-IL-6SHJWFNN-Bao7Zmwl.js} +1 -1
  74. package/dist/viewer/{hi-IN-IWLTKZ5I-DZ8Ixb7q.js → hi-IN-IWLTKZ5I-hKM14O0N.js} +1 -1
  75. package/dist/viewer/{hu-HU-A5ZG7DT2-DOuQYdX1.js → hu-HU-A5ZG7DT2-CUb5NDCe.js} +1 -1
  76. package/dist/viewer/{id-ID-SAP4L64H-meYgt4O6.js → id-ID-SAP4L64H-CQuTxtOp.js} +1 -1
  77. package/dist/viewer/{image-GAAHSSAO-HJXyQYlz.js → image-GAAHSSAO-BgjnXzFc.js} +1 -1
  78. package/dist/viewer/index.css +8 -8
  79. package/dist/viewer/index.js +2 -2
  80. package/dist/viewer/{infoDiagram-27XIBGKW-C384DKum.js → infoDiagram-27XIBGKW-CrRdoMz5.js} +1 -1
  81. package/dist/viewer/{ishikawaDiagram-5VMMS53U-DXcp6tVe.js → ishikawaDiagram-5VMMS53U-DIOQi7Cg.js} +1 -1
  82. package/dist/viewer/{it-IT-JPQ66NNP-PCIxpZOt.js → it-IT-JPQ66NNP-DyTa4yNl.js} +1 -1
  83. package/dist/viewer/{ja-JP-DBVTYXUO-CkCRU8jW.js → ja-JP-DBVTYXUO-yQ9cDwPd.js} +1 -1
  84. package/dist/viewer/{journeyDiagram-3NMN7TZE-2ppKvgP7.js → journeyDiagram-3NMN7TZE-BiI8dwZq.js} +1 -1
  85. package/dist/viewer/{kaa-6HZHGXH3-fLXXAJBo.js → kaa-6HZHGXH3-wsDFuKqq.js} +1 -1
  86. package/dist/viewer/{kab-KAB-ZGHBKWFO-GTYI24iK.js → kab-KAB-ZGHBKWFO-DrWLwoIp.js} +1 -1
  87. package/dist/viewer/{kanban-definition-UXKFOSKX-DZ6fRQhO.js → kanban-definition-UXKFOSKX-w8sX7hiq.js} +1 -1
  88. package/dist/viewer/{kk-KZ-P5N5QNE5-BdweMmqq.js → kk-KZ-P5N5QNE5-B1pGaoUJ.js} +1 -1
  89. package/dist/viewer/{km-KH-HSX4SM5Z-DI3cVVah.js → km-KH-HSX4SM5Z-peuqig33.js} +1 -1
  90. package/dist/viewer/{ko-KR-MTYHY66A-Cy7t75pr.js → ko-KR-MTYHY66A-H2BvroMZ.js} +1 -1
  91. package/dist/viewer/{ku-TR-6OUDTVRD-DKeK0G72.js → ku-TR-6OUDTVRD-D8yGB2lq.js} +1 -1
  92. package/dist/viewer/{lt-LT-XHIRWOB4-BKoZOZYV.js → lt-LT-XHIRWOB4-C7hY3ayX.js} +1 -1
  93. package/dist/viewer/{lv-LV-5QDEKY6T-Be_i1YDe.js → lv-LV-5QDEKY6T-CdQY_o2B.js} +1 -1
  94. package/dist/viewer/{mindmap-definition-YA3MSWOX-B8sPOCTd.js → mindmap-definition-YA3MSWOX-wcZRhXKP.js} +1 -1
  95. package/dist/viewer/{mr-IN-CRQNXWMA-Cm3TN0PF.js → mr-IN-CRQNXWMA-oxX7F2ME.js} +1 -1
  96. package/dist/viewer/{my-MM-5M5IBNSE-BhtdFitE.js → my-MM-5M5IBNSE-CzPg5_UV.js} +1 -1
  97. package/dist/viewer/{nb-NO-T6EIAALU-_DSnLYJl.js → nb-NO-T6EIAALU-C3-LoToi.js} +1 -1
  98. package/dist/viewer/{nl-NL-IS3SIHDZ-DVIAbdhD.js → nl-NL-IS3SIHDZ-BBv3k8Gy.js} +1 -1
  99. package/dist/viewer/{nn-NO-6E72VCQL-DsvBflH9.js → nn-NO-6E72VCQL-D1beVxxr.js} +1 -1
  100. package/dist/viewer/{oc-FR-POXYY2M6-CE2zpZKD.js → oc-FR-POXYY2M6-BmOG0UP2.js} +1 -1
  101. package/dist/viewer/{pa-IN-N4M65BXN-Bug3lVUE.js → pa-IN-N4M65BXN-BjoeRd7k.js} +1 -1
  102. package/dist/viewer/{pegDiagram-XKGWAZYB-DZba7UyZ.js → pegDiagram-XKGWAZYB-XRFpYjCF.js} +1 -1
  103. package/dist/viewer/percentages-BXMCSKIN-Cox4vFeW.js +1 -0
  104. package/dist/viewer/{pieDiagram-E7YTZNPT-CjQWu-G0.js → pieDiagram-E7YTZNPT-C3cG1M0U.js} +1 -1
  105. package/dist/viewer/{pl-PL-T2D74RX3-BX6FTriV.js → pl-PL-T2D74RX3-Cm1gxJBm.js} +1 -1
  106. package/dist/viewer/prod-DEzUWFeR.js +199 -0
  107. package/dist/viewer/{pt-BR-5N22H2LF-C1-DcwVl.js → pt-BR-5N22H2LF-aoLcWXkM.js} +1 -1
  108. package/dist/viewer/{pt-PT-UZXXM6DQ-CPD3ieL8.js → pt-PT-UZXXM6DQ-D-uSzCOy.js} +1 -1
  109. package/dist/viewer/{quadrantDiagram-AXDQQJYC-Dtj6HYuH.js → quadrantDiagram-AXDQQJYC-DacPT28Y.js} +1 -1
  110. package/dist/viewer/{railroadDiagram-O6MQD6OU-Chpu_GYF.js → railroadDiagram-O6MQD6OU-CJPW5CjY.js} +1 -1
  111. package/dist/viewer/{requirementDiagram-BXWQKSXE-CDt1TR0H.js → requirementDiagram-BXWQKSXE-C3UBy5Lz.js} +1 -1
  112. package/dist/viewer/{ro-RO-JPDTUUEW-DtihFuc7.js → ro-RO-JPDTUUEW-CmxHLZQI.js} +1 -1
  113. package/dist/viewer/{ru-RU-B4JR7IUQ-BVydWnmn.js → ru-RU-B4JR7IUQ-Cafw4aZs.js} +1 -1
  114. package/dist/viewer/{sequenceDiagram-WJ2MYXX4-B-HiREqk.js → sequenceDiagram-WJ2MYXX4-D68qb_4_.js} +1 -1
  115. package/dist/viewer/{si-LK-N5RQ5JYF-B6G4thDO.js → si-LK-N5RQ5JYF-DQfjIpcc.js} +1 -1
  116. package/dist/viewer/{sk-SK-C5VTKIMK-BWky4pRK.js → sk-SK-C5VTKIMK-Bq4SYKDN.js} +1 -1
  117. package/dist/viewer/{sl-SI-NN7IZMDC-Cfh4lNJc.js → sl-SI-NN7IZMDC-Bh-RezGM.js} +1 -1
  118. package/dist/viewer/{stateDiagram-D77RDMKH-9lAkDXF8.js → stateDiagram-D77RDMKH-BT2Jdlqs.js} +1 -1
  119. package/dist/viewer/{stateDiagram-v2-MP3YSRHH-BeettcPf.js → stateDiagram-v2-MP3YSRHH-D3NDVC0z.js} +1 -1
  120. package/dist/viewer/subset-shared.chunk-sjf42WzB.js +1 -0
  121. package/dist/viewer/{subset-worker.chunk-DLkR7jFY.js → subset-worker.chunk-kUSnMaQ3.js} +1 -1
  122. package/dist/viewer/{sv-SE-XGPEYMSR-DEXamQXG.js → sv-SE-XGPEYMSR-BdJ34kbq.js} +1 -1
  123. package/dist/viewer/{swimlanes-42K2YHIH-BIXO1VlE.js → swimlanes-42K2YHIH-DbqvhUWz.js} +1 -1
  124. package/dist/viewer/{swimlanesDiagram-VR7AAH4N-jhPlJ2VV.js → swimlanesDiagram-VR7AAH4N-BnVB12ID.js} +1 -1
  125. package/dist/viewer/{ta-IN-2NMHFXQM-B0O9h-3T.js → ta-IN-2NMHFXQM-BrlxbbKL.js} +1 -1
  126. package/dist/viewer/{th-TH-HPSO5L25-Dx39_LR7.js → th-TH-HPSO5L25-BvwUkuqj.js} +1 -1
  127. package/dist/viewer/{timeline-definition-24CTP7MA-DdXT3J9C.js → timeline-definition-24CTP7MA-CfRv8Y4n.js} +1 -1
  128. package/dist/viewer/{tr-TR-DEFEU3FU-DV9y2RyZ.js → tr-TR-DEFEU3FU-CAAj2nYr.js} +1 -1
  129. package/dist/viewer/{uk-UA-QMV73CPH-BgRmMEmN.js → uk-UA-QMV73CPH-BMbpyf9T.js} +1 -1
  130. package/dist/viewer/{vennDiagram-4TSXK5OY-CR5Sul_E.js → vennDiagram-4TSXK5OY-BUdpujzY.js} +1 -1
  131. package/dist/viewer/{vi-VN-M7AON7JQ-B0B_l7Uo.js → vi-VN-M7AON7JQ-CxPDfBGZ.js} +1 -1
  132. package/dist/viewer/{wardleyDiagram-VM6X3IG4-CqxcEB3O.js → wardleyDiagram-VM6X3IG4-CjTt7HCf.js} +1 -1
  133. package/dist/viewer/{xychartDiagram-S5SC5T6Z-BEvyZpkZ.js → xychartDiagram-S5SC5T6Z-K6R8M-rp.js} +1 -1
  134. package/dist/viewer/{zh-CN-LNUGB5OW-LFQbiQwU.js → zh-CN-LNUGB5OW-Ns7aJuNy.js} +1 -1
  135. package/dist/viewer/{zh-HK-E62DVLB3-3QKZloec.js → zh-HK-E62DVLB3-BXcuB03B.js} +1 -1
  136. package/dist/viewer/{zh-TW-RAJ6MFWO-DvqHAQqj.js → zh-TW-RAJ6MFWO-DM0fBdpl.js} +1 -1
  137. package/package.json +18 -16
  138. package/dist/viewer/DocumentPage-DJNawMpm.css +0 -1
  139. package/dist/viewer/bundle-full-BqxTJR_t.js +0 -1
  140. package/dist/viewer/dist-5gzwWJIh.js +0 -1
  141. package/dist/viewer/dist-6ge95jUR.js +0 -1
  142. package/dist/viewer/dist-B08avMqo.js +0 -1
  143. package/dist/viewer/dist-B3CWmz5H.js +0 -11
  144. package/dist/viewer/dist-BFXiyx5T.js +0 -1
  145. package/dist/viewer/dist-BLc60eWn.js +0 -1
  146. package/dist/viewer/dist-BSZraMgI.js +0 -6
  147. package/dist/viewer/dist-C0D5mTt6.js +0 -23
  148. package/dist/viewer/dist-CEU-zLZI.js +0 -1
  149. package/dist/viewer/dist-CLLMLHGt.js +0 -1
  150. package/dist/viewer/dist-COUyUe7S.js +0 -2
  151. package/dist/viewer/dist-CgygMKBu.js +0 -1
  152. package/dist/viewer/dist-ClNSVh_I.js +0 -1
  153. package/dist/viewer/dist-CxUCHy3t.js +0 -1
  154. package/dist/viewer/dist-CywKvbgg.js +0 -1
  155. package/dist/viewer/dist-DcMVh-xg.js +0 -1
  156. package/dist/viewer/dist-Dk8-0ERF.js +0 -1
  157. package/dist/viewer/dist-b7g3K_YY.js +0 -9
  158. package/dist/viewer/dist-e53or3P-.js +0 -1
  159. package/dist/viewer/dist-maKyBr1H.js +0 -1
  160. package/dist/viewer/dist-zqfK-dEL.js +0 -1
  161. package/dist/viewer/flowDiagram-HODETNUW-GyoGBILk.js +0 -1
  162. package/dist/viewer/percentages-BXMCSKIN-CMvTPh1_.js +0 -1
  163. package/dist/viewer/prod-YYAgs6Dl.js +0 -199
  164. package/dist/viewer/subset-shared.chunk-0TGLD4Jz.js +0 -1
package/dist/server.cjs CHANGED
@@ -1865,9 +1865,9 @@ var import_node_path5 = __toESM(require("node:path"), 1);
1865
1865
  // src/shared/geometry.ts
1866
1866
  var GROUP_PAD = 48;
1867
1867
  var GROUP_TOP = 144;
1868
- var NAME_STRIP_H = 32;
1868
+ var NAME_STRIP_H = 48;
1869
1869
  var TITLE_LINE_HEIGHT = 1.15;
1870
- var DEFAULT_TITLE_SIZE = 56;
1870
+ var DEFAULT_TITLE_SIZE = 96;
1871
1871
  var STICKY_DEFAULT_W = 240;
1872
1872
  var STICKY_FONT_SIZE = 18;
1873
1873
  var STICKY_LINE_H = 27;
@@ -1960,6 +1960,16 @@ function structuralWarnings(raw) {
1960
1960
  if (raw.focus !== void 0 && (!isObject2(raw.focus) || typeof raw.focus.target !== "string")) {
1961
1961
  warnings.push('"focus" must be { "target": <id>, "at": <time> }');
1962
1962
  }
1963
+ if (raw.building !== void 0 && typeof raw.building !== "boolean") {
1964
+ warnings.push('"building" must be a boolean');
1965
+ }
1966
+ if (isObject2(raw.boards)) {
1967
+ for (const [id2, board] of Object.entries(raw.boards)) {
1968
+ if (isObject2(board) && board.interactive !== void 0 && typeof board.interactive !== "boolean") {
1969
+ warnings.push(`board "${id2}" field "interactive" must be a boolean`);
1970
+ }
1971
+ }
1972
+ }
1963
1973
  if (warnings.length > 0) return warnings;
1964
1974
  raw.pages.forEach((page, index) => {
1965
1975
  if (!isObject2(page) || typeof page.id !== "string" || typeof page.name !== "string") {
@@ -1999,7 +2009,7 @@ function structuralWarnings(raw) {
1999
2009
  }
2000
2010
  return warnings;
2001
2011
  }
2002
- function validateCanvas(raw, fileExists) {
2012
+ function validateCanvas(raw, fileExists, options = {}) {
2003
2013
  const structural = structuralWarnings(raw);
2004
2014
  if (structural.length > 0) return structural;
2005
2015
  const canvas = raw;
@@ -2011,7 +2021,10 @@ function validateCanvas(raw, fileExists) {
2011
2021
  for (const [id2, board] of boards) {
2012
2022
  if (!pages.has(board.page)) warnings.push(`board "${id2}" uses unknown page "${board.page}"`);
2013
2023
  if (!board.file.startsWith("pages/")) warnings.push(`board "${id2}" file must start with "pages/": ${board.file}`);
2014
- else if (!fileExists(board.file)) warnings.push(`board "${id2}" file not found: ${board.file}`);
2024
+ else if (!fileExists(board.file)) {
2025
+ options.pending?.add(id2);
2026
+ if (!options.allowPending) warnings.push(`board "${id2}" file not found: ${board.file}`);
2027
+ }
2015
2028
  }
2016
2029
  for (let i6 = 0; i6 < boards.length; i6++) {
2017
2030
  for (let j4 = i6 + 1; j4 < boards.length; j4++) {
@@ -2110,9 +2123,13 @@ function boardVersions(boardDir, canvas) {
2110
2123
  const versions = {};
2111
2124
  for (const board of Object.values(canvas.boards)) {
2112
2125
  const target = resolveBoardFile(boardDir, board.file);
2113
- if (!target) continue;
2126
+ if (!target) {
2127
+ versions[board.file] = 0;
2128
+ continue;
2129
+ }
2114
2130
  try {
2115
- versions[board.file] = import_node_fs5.default.statSync(target).mtimeMs;
2131
+ const stat = import_node_fs5.default.statSync(target);
2132
+ versions[board.file] = stat.size > 0 ? stat.mtimeMs : 0;
2116
2133
  } catch {
2117
2134
  versions[board.file] = 0;
2118
2135
  }
@@ -2121,17 +2138,26 @@ function boardVersions(boardDir, canvas) {
2121
2138
  }
2122
2139
  function readCanvas(boardDir) {
2123
2140
  const { raw, warning } = readRaw(boardDir);
2124
- if (warning) return { canvas: null, warnings: [warning], layout: null, versions: {} };
2141
+ if (warning) return { canvas: null, warnings: [warning], pending: [], layout: null, versions: {} };
2125
2142
  try {
2126
2143
  const structural = structuralWarnings(raw);
2127
- if (structural.length > 0) return { canvas: null, warnings: structural, layout: null, versions: {} };
2144
+ if (structural.length > 0) return { canvas: null, warnings: structural, pending: [], layout: null, versions: {} };
2128
2145
  const canvas = raw;
2129
- const warnings = validateCanvas(canvas, (rel) => resolveBoardFile(boardDir, rel) !== null);
2130
- return { canvas, warnings, layout: computeLayout(canvas), versions: boardVersions(boardDir, canvas) };
2146
+ const pending = /* @__PURE__ */ new Set();
2147
+ const warnings = validateCanvas(canvas, (rel) => resolveBoardFile(boardDir, rel) !== null, {
2148
+ pending,
2149
+ allowPending: canvas.building === true
2150
+ });
2151
+ const versions = boardVersions(boardDir, canvas);
2152
+ for (const [id2, board] of Object.entries(canvas.boards)) {
2153
+ if (!versions[board.file]) pending.add(id2);
2154
+ }
2155
+ return { canvas, warnings, pending: [...pending].sort(), layout: computeLayout(canvas), versions };
2131
2156
  } catch (err) {
2132
2157
  return {
2133
2158
  canvas: null,
2134
2159
  warnings: [`canvas.json could not be checked: ${err.message}`],
2160
+ pending: [],
2135
2161
  layout: null,
2136
2162
  versions: {}
2137
2163
  };
@@ -2150,7 +2176,12 @@ function writeArtifactState(stateDir, ref, payload, extra = {}) {
2150
2176
  if (ref.type === "artboard") {
2151
2177
  writeJsonAtomic(import_node_path5.default.join(dir, "layout.json"), { checkedAt, ...payload.layout ?? { pages: {} } });
2152
2178
  }
2153
- writeJsonAtomic(import_node_path5.default.join(dir, "warnings.json"), { checkedAt, warnings: payload.warnings, ...extra });
2179
+ writeJsonAtomic(import_node_path5.default.join(dir, "warnings.json"), {
2180
+ checkedAt,
2181
+ warnings: payload.warnings,
2182
+ ...payload.pending ? { pending: payload.pending } : {},
2183
+ ...extra
2184
+ });
2154
2185
  }
2155
2186
 
2156
2187
  // src/server/document-comments.ts
@@ -36460,7 +36491,7 @@ decorateMethods(EphemeralStoreWasm.prototype, [
36460
36491
  ]);
36461
36492
  decorateMethods(UndoManager.prototype, ["undo", "redo"]);
36462
36493
 
36463
- // node_modules/.pnpm/@haklex+rich-collab-loro@0.49.0_lexical@0.52.0_typescript@5.9.3__loro-crdt@1.16.4/node_modules/@haklex/rich-collab-loro/dist/index.mjs
36494
+ // node_modules/.pnpm/@haklex+rich-collab-loro@0.50.0_lexical@0.52.0_typescript@5.9.3__loro-crdt@1.16.4/node_modules/@haklex/rich-collab-loro/dist/index.mjs
36464
36495
  function transformOffset(previous, next, offset) {
36465
36496
  const limit = Math.min(previous.length, next.length);
36466
36497
  let prefix = 0;
@@ -67871,7 +67902,7 @@ var UNORDERED_LIST2 = mod28.UNORDERED_LIST;
67871
67902
  var isTableRowDivider2 = mod28.isTableRowDivider;
67872
67903
  var registerMarkdownShortcuts2 = mod28.registerMarkdownShortcuts;
67873
67904
 
67874
- // node_modules/.pnpm/@haklex+rich-headless@0.49.1_lexical@0.52.0_typescript@5.9.3__typescript@5.9.3/node_modules/@haklex/rich-headless/dist/transformers.mjs
67905
+ // node_modules/.pnpm/@haklex+rich-headless@0.50.0_lexical@0.52.0_typescript@5.9.3__typescript@5.9.3/node_modules/@haklex/rich-headless/dist/transformers.mjs
67875
67906
  var NEVER = /a^/;
67876
67907
  var NOOP = () => {
67877
67908
  };
@@ -70528,7 +70559,7 @@ var signal2 = mod43.signal;
70528
70559
  var untracked2 = mod43.untracked;
70529
70560
  var watchedSignal3 = mod43.watchedSignal;
70530
70561
 
70531
- // node_modules/.pnpm/@haklex+rich-headless@0.49.1_lexical@0.52.0_typescript@5.9.3__typescript@5.9.3/node_modules/@haklex/rich-headless/dist/index.mjs
70562
+ // node_modules/.pnpm/@haklex+rich-headless@0.50.0_lexical@0.52.0_typescript@5.9.3__typescript@5.9.3/node_modules/@haklex/rich-headless/dist/index.mjs
70532
70563
  var builtinNodes = [
70533
70564
  HeadingNode2,
70534
70565
  QuoteNode2,
@@ -71321,7 +71352,7 @@ function customAlphabet(alphabet, defaultSize = 21) {
71321
71352
  }
71322
71353
  var nanoid2 = customAlphabet(urlAlphabet2);
71323
71354
 
71324
- // node_modules/.pnpm/@haklex+rich-litexml@0.49.1_typescript@5.9.3/node_modules/@haklex/rich-litexml/dist/src-COIhAhyB.js
71355
+ // node_modules/.pnpm/@haklex+rich-litexml@0.50.0_typescript@5.9.3/node_modules/@haklex/rich-litexml/dist/src-COIhAhyB.js
71325
71356
  var impl = null;
71326
71357
  function registerParseHTML(fn5) {
71327
71358
  impl = fn5;
@@ -83425,7 +83456,7 @@ function Document4() {
83425
83456
  }
83426
83457
  setPrototypeOf(Document4, Document2).prototype = Document2.prototype;
83427
83458
 
83428
- // node_modules/.pnpm/@haklex+rich-litexml@0.49.1_typescript@5.9.3/node_modules/@haklex/rich-litexml/dist/node.mjs
83459
+ // node_modules/.pnpm/@haklex+rich-litexml@0.50.0_typescript@5.9.3/node_modules/@haklex/rich-litexml/dist/node.mjs
83429
83460
  registerParseHTML((html) => parseHTML2(html).document);
83430
83461
 
83431
83462
  // src/server/balance.ts
@@ -83902,7 +83933,10 @@ var RUNTIME = `(() => {
83902
83933
  const reason = event.reason;
83903
83934
  post({ type: 'ryugi:error', message: 'unhandled rejection: ' + String((reason && reason.message) || reason) });
83904
83935
  });
83905
- const fields = () => Array.from(document.querySelectorAll('input, select, textarea, details'));
83936
+ const fields = () =>
83937
+ Array.from(document.querySelectorAll('input, select, textarea, details, [data-ryugi-control]')).filter(
83938
+ (el) => el.hasAttribute('data-ryugi-control') || !el.closest('[data-ryugi-control]'),
83939
+ );
83906
83940
  const keyOf = (el, index) => {
83907
83941
  if (el.id) return '#' + el.id;
83908
83942
  if (el.type === 'radio') return 'radio:' + el.name + ':' + el.value;
@@ -83920,7 +83954,12 @@ var RUNTIME = `(() => {
83920
83954
  const state = { scroll: [scrollX, scrollY], fields: {} };
83921
83955
  fields().forEach((el, index) => {
83922
83956
  const key = keyOf(el, index);
83923
- if (el.tagName === 'DETAILS') state.fields[key] = { open: el.open };
83957
+ if (el.hasAttribute('data-ryugi-control')) {
83958
+ const saved = {};
83959
+ if ('value' in el && el.value !== undefined) saved.value = el.value;
83960
+ if (typeof el.checked === 'boolean') saved.checked = el.checked;
83961
+ state.fields[key] = saved;
83962
+ } else if (el.tagName === 'DETAILS') state.fields[key] = { open: el.open };
83924
83963
  else if (el.type === 'checkbox' || el.type === 'radio') state.fields[key] = { checked: el.checked };
83925
83964
  else if (el.type !== 'file' && el.type !== 'password') state.fields[key] = { value: el.value };
83926
83965
  });
@@ -83930,7 +83969,20 @@ var RUNTIME = `(() => {
83930
83969
  fields().forEach((el, index) => {
83931
83970
  const saved = data.state.fields[keyOf(el, index)];
83932
83971
  if (!saved) return;
83933
- if ('open' in saved) el.open = saved.open;
83972
+ if (el.hasAttribute('data-ryugi-control')) {
83973
+ let changed = false;
83974
+ if ('value' in saved && el.value !== saved.value) {
83975
+ el.value = saved.value;
83976
+ changed = true;
83977
+ }
83978
+ if ('checked' in saved && el.checked !== saved.checked) {
83979
+ el.checked = saved.checked;
83980
+ changed = true;
83981
+ }
83982
+ if (changed) {
83983
+ el.dispatchEvent(new CustomEvent('ryugi-change', { bubbles: true, detail: { value: el.value, checked: el.checked } }));
83984
+ }
83985
+ } else if ('open' in saved) el.open = saved.open;
83934
83986
  else if ('checked' in saved) {
83935
83987
  if (el.checked !== saved.checked) {
83936
83988
  el.checked = saved.checked;
@@ -83949,11 +84001,14 @@ var RUNTIME = `(() => {
83949
84001
  var HEAD = /<head(\s[^>]*)?>/i;
83950
84002
  var PROLOGUE = /^\s*(<!doctype[^>]*>)?\s*(<html(\s[^>]*)?>)?/i;
83951
84003
  var RUNTIME_LINE = RUNTIME.split("\n").map((line) => line.trim()).join(" ");
83952
- function injectRuntime(html) {
84004
+ var UI_MARKER = /<ryugi-[a-z0-9-]+(?:\s|>)/i;
84005
+ var UI_META = /<meta[^>]+name=["']ryugi-ui["'][^>]*>/i;
84006
+ function injectRuntime(html, options = {}) {
83953
84007
  const tag = `<script>${RUNTIME_LINE}</script>`;
84008
+ const ui2 = options.uiRuntimeUrl && (UI_MARKER.test(html) || UI_META.test(html)) ? `<script defer src="${options.uiRuntimeUrl.replace(/"/g, "&quot;")}"></script>` : "";
83954
84009
  const head = HEAD.exec(html);
83955
84010
  const at7 = head ? head.index + head[0].length : PROLOGUE.exec(html)?.[0].length ?? 0;
83956
- return html.slice(0, at7) + tag + html.slice(at7);
84011
+ return html.slice(0, at7) + tag + ui2 + html.slice(at7);
83957
84012
  }
83958
84013
 
83959
84014
  // src/server/http.ts
@@ -84230,6 +84285,7 @@ function titleOf(payload, ref) {
84230
84285
  async function startArtifactsServer(options) {
84231
84286
  const root = import_node_path10.default.resolve(options.root);
84232
84287
  const viewerDir = import_node_path10.default.resolve(options.viewerDir);
84288
+ const runtimeDir = options.runtimeDir ? import_node_path10.default.resolve(options.runtimeDir) : null;
84233
84289
  const stateDir = import_node_path10.default.join(root, ".state");
84234
84290
  import_node_fs10.default.mkdirSync(stateDir, { recursive: true, mode: 448 });
84235
84291
  import_node_fs10.default.writeFileSync(import_node_path10.default.join(stateDir, ".gitignore"), "*\n");
@@ -84341,6 +84397,20 @@ async function startArtifactsServer(options) {
84341
84397
  };
84342
84398
  const isAuthorized = (req, keyFromQuery) => keyFromQuery !== null && safeEqual(keyFromQuery, token) || safeEqual(parseCookies(req.headers.cookie)[cookieName] ?? "", token);
84343
84399
  const serveContent = (res, rest) => {
84400
+ if (rest.startsWith("runtime/")) {
84401
+ if (!runtimeDir) {
84402
+ send(res, 404, "Not found");
84403
+ return;
84404
+ }
84405
+ const relative2 = rest.slice("runtime/".length);
84406
+ const target2 = resolveInside(runtimeDir, relative2);
84407
+ if (!target2) {
84408
+ send(res, 403, "Forbidden");
84409
+ return;
84410
+ }
84411
+ sendFile(res, target2, { "Access-Control-Allow-Origin": "*", "Cache-Control": "public, max-age=3600" });
84412
+ return;
84413
+ }
84344
84414
  const [type = "", id2 = "", ...parts] = rest.split("/");
84345
84415
  const dir = resolveArtifactDir(root, type, id2);
84346
84416
  if (!dir) {
@@ -84366,7 +84436,10 @@ async function startArtifactsServer(options) {
84366
84436
  }
84367
84437
  import_node_fs10.default.readFile(target, "utf8", (err, source) => {
84368
84438
  if (err) send(res, 404, "Not found");
84369
- else send(res, 200, injectRuntime(source), { "Content-Type": "text/html; charset=utf-8", ...headers });
84439
+ else {
84440
+ const uiRuntimeUrl = runtimeDir ? `${contentPrefix}runtime/ryugi-ui.js` : void 0;
84441
+ send(res, 200, injectRuntime(source, { uiRuntimeUrl }), { "Content-Type": "text/html; charset=utf-8", ...headers });
84442
+ }
84370
84443
  });
84371
84444
  };
84372
84445
  const serveArtifactApi = (res, type, id2) => {
@@ -84514,8 +84587,10 @@ async function startArtifactsServer(options) {
84514
84587
  signatures.set(`${ref.type}/${ref.id}`, artifactSignature(dir));
84515
84588
  return writeState(ref, dir);
84516
84589
  };
84590
+ const initialChanges = [];
84517
84591
  for (const entry of listArtifacts(root).artifacts) {
84518
- refreshState(entry, entry.dir);
84592
+ const payload = refreshState(entry, entry.dir);
84593
+ initialChanges.push({ ref: entry, payload, files: [] });
84519
84594
  if (entry.type === "document") void documents.open(entry.id);
84520
84595
  }
84521
84596
  writeJsonAtomic(import_node_path10.default.join(stateDir, "server-info"), { type: "server-started", url, port, root });
@@ -84558,7 +84633,10 @@ async function startArtifactsServer(options) {
84558
84633
  url,
84559
84634
  linkFor,
84560
84635
  clientCount: () => clients.size,
84561
- onArtifactChange: (listener) => changeListeners.push(listener),
84636
+ onArtifactChange: (listener) => {
84637
+ changeListeners.push(listener);
84638
+ for (const change of initialChanges) listener(change.ref, change.payload, change.files);
84639
+ },
84562
84640
  onActivity: (listener) => activityListeners.push(listener),
84563
84641
  close: () => new Promise((resolve) => {
84564
84642
  watcher.close();
@@ -84591,8 +84669,9 @@ function parseEnv(env, argv = []) {
84591
84669
  urlHost,
84592
84670
  idleTimeoutMs: positive(env.ARTIFACTS_IDLE_TIMEOUT_MS, DEFAULT_IDLE_TIMEOUT_MS),
84593
84671
  lifecycleCheckMs: positive(env.ARTIFACTS_LIFECYCLE_CHECK_MS, DEFAULT_LIFECYCLE_CHECK_MS),
84594
- open: env.ARTIFACTS_OPEN === "1",
84672
+ open: env.ARTIFACTS_OPEN !== "0",
84595
84673
  openCmd: env.ARTIFACTS_OPEN_CMD || null,
84674
+ openArtifact: env.ARTIFACTS_OPEN_ARTIFACT || null,
84596
84675
  serverId: serverIdArg ? serverIdArg.slice(SERVER_ID_ARG.length) : null
84597
84676
  };
84598
84677
  }
@@ -84627,6 +84706,39 @@ function processAlive(pid) {
84627
84706
  }
84628
84707
  }
84629
84708
 
84709
+ // src/server/ready.ts
84710
+ var pageOfGroup = (canvas, ids) => ids.map((id2) => canvas.boards[id2]?.page).find((page) => Boolean(page));
84711
+ function openReady(payload) {
84712
+ const canvas = payload.canvas;
84713
+ if (!canvas || payload.warnings.length > 0) return false;
84714
+ const boards = Object.entries(canvas.boards);
84715
+ if (boards.length === 0) return false;
84716
+ const pending = new Set(payload.pending);
84717
+ const ready = (id2) => {
84718
+ const board = canvas.boards[id2];
84719
+ if (!board) return false;
84720
+ return (payload.versions[board.file] ?? 0) > 0 && !pending.has(id2);
84721
+ };
84722
+ if (boards.every(([id2]) => ready(id2))) return true;
84723
+ const focus = canvas.focus?.target;
84724
+ const focusBoard = focus && canvas.boards[focus] ? focus : void 0;
84725
+ const focusGroupId = focus ? canvas.groups?.[focus] ? focus : focusBoard ? Object.entries(canvas.groups ?? {}).find(([, group]) => group.boards.includes(focusBoard))?.[0] : void 0 : void 0;
84726
+ const focusGroup = focusGroupId ? canvas.groups?.[focusGroupId] : void 0;
84727
+ if (focusGroup && focusGroup.boards.length > 0) return focusGroup.boards.every(ready);
84728
+ const targetPage = (focusBoard ? canvas.boards[focusBoard].page : void 0) ?? (focusGroup ? pageOfGroup(canvas, focusGroup.boards) : void 0) ?? canvas.activePage ?? canvas.pages[0]?.id;
84729
+ if (!targetPage) return false;
84730
+ const groups = Object.entries(canvas.groups ?? {}).filter(
84731
+ ([, group]) => group.boards.some((id2) => canvas.boards[id2]?.page === targetPage)
84732
+ );
84733
+ for (const [, group] of groups) {
84734
+ if (group.boards.length > 0 && group.boards.every(ready)) return true;
84735
+ }
84736
+ if (groups.length > 0) return false;
84737
+ const pageBoards = boards.filter(([, board]) => board.page === targetPage);
84738
+ if (pageBoards.length === 1) return ready(pageBoards[0][0]);
84739
+ return pageBoards.filter(([id2]) => ready(id2)).length >= 2;
84740
+ }
84741
+
84630
84742
  // src/server/main.ts
84631
84743
  async function main() {
84632
84744
  const config = parseEnv(process.env, process.argv.slice(2));
@@ -84635,6 +84747,7 @@ async function main() {
84635
84747
  const server = await startArtifactsServer({
84636
84748
  root,
84637
84749
  viewerDir: import_node_path11.default.join(__dirname, "viewer"),
84750
+ runtimeDir: import_node_path11.default.join(__dirname, "runtime"),
84638
84751
  host: config.host,
84639
84752
  urlHost: config.urlHost
84640
84753
  });
@@ -84645,8 +84758,8 @@ async function main() {
84645
84758
  let browserOpened = false;
84646
84759
  server.onArtifactChange((ref, payload) => {
84647
84760
  if (browserOpened || !config.open || !isLoopback(config.host)) return;
84648
- if ("canvas" in payload && (!payload.canvas || Object.keys(payload.canvas.boards ?? {}).length === 0)) return;
84649
- if ("title" in payload && payload.warnings.length > 0) return;
84761
+ if (config.openArtifact && `${ref.type}/${ref.id}` !== config.openArtifact) return;
84762
+ if ("canvas" in payload ? !openReady(payload) : payload.warnings.length > 0) return;
84650
84763
  browserOpened = true;
84651
84764
  if (server.clientCount() > 0) return;
84652
84765
  const link = server.linkFor(ref.type, ref.id);