@layers-app/editor 2.2.0 → 2.2.2

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 (211) hide show
  1. package/dist/index.cjs +2 -2
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +2 -2
  4. package/dist/{layers.DGCX-hub.js → layers.-omzxc46.js} +1 -1
  5. package/dist/{layers.UZzjBh4S.js → layers.0ogqi5pb.js} +1 -1
  6. package/dist/{layers.CqL-dJC4.js → layers.1Utde0B3.js} +1 -1
  7. package/dist/{layers.D6LQ8w6F.js → layers.2hMxiIxi.js} +1 -1
  8. package/dist/{layers.CcpLLe2q.js → layers.39RGOdb2.js} +1 -1
  9. package/dist/{layers.DtTj8WiD.js → layers.3pE-ttc1.js} +1 -1
  10. package/dist/{layers.DIn6Ywq6.js → layers.4AKISH9Z.js} +3 -3
  11. package/dist/{layers.By5zvrtq.js → layers.7A3za2iN.js} +3 -3
  12. package/dist/{layers.B2Jmuw9U.js → layers.B-E3joHD.js} +1 -1
  13. package/dist/{layers.C7EabXrG.js → layers.B1DQ8aED.js} +1 -1
  14. package/dist/{layers.Bs5yVYJf.js → layers.B316FbTe.js} +1 -1
  15. package/dist/{layers.GnLojCz_.js → layers.B4ej3AUo.js} +1 -1
  16. package/dist/{layers.CE2ppD0Q.js → layers.B4f0-UV8.js} +1 -1
  17. package/dist/{layers.C2PeOJRz.js → layers.B4po6935.js} +1 -1
  18. package/dist/{layers.D3PVazoA.js → layers.B6HFzAh9.js} +1 -1
  19. package/dist/{layers._uUwo3yg.js → layers.B88sVgnV.js} +1 -1
  20. package/dist/{layers.E_ZFumNN.js → layers.B8fPaFw4.js} +1 -1
  21. package/dist/{layers.CuFw4AW6.js → layers.B9NwkAJO.js} +1 -1
  22. package/dist/{layers.CeHnvYhC.js → layers.BASiWaZF.js} +1 -1
  23. package/dist/{layers.xaIjPW3H.js → layers.BD8XrGkI.js} +1 -1
  24. package/dist/{layers.B2cQSvjV.js → layers.BFf5E9KH.js} +25 -25
  25. package/dist/{layers.DZ3i1mNn.js → layers.BFkcGqX9.js} +1 -1
  26. package/dist/{layers.BjIunMBp.js → layers.BGK66s5D.js} +1 -1
  27. package/dist/{layers.R3-ccgHv.js → layers.BGOAEwRq.js} +1 -1
  28. package/dist/{layers.C57loc_q.js → layers.BGwJg1yj.js} +1 -1
  29. package/dist/{layers.DYAIHWEy.js → layers.BHGcGonb.js} +1 -1
  30. package/dist/{layers.CQKvc0Wq.js → layers.BIcIach6.js} +1 -1
  31. package/dist/{layers.CZrCG3u1.js → layers.BIiYycMg.js} +1 -1
  32. package/dist/{layers.vax9bVpu.js → layers.BIvAu766.js} +4 -4
  33. package/dist/{layers.1_wzMQse.js → layers.BJZBHK01.js} +1 -1
  34. package/dist/{layers.Nl-kiETe.js → layers.BKMDnLRY.js} +1 -1
  35. package/dist/{layers.BXBaduEM.js → layers.BLcapXHO.js} +4 -4
  36. package/dist/{layers.C_lqYSWr.js → layers.BM6z-ylw.js} +77 -77
  37. package/dist/{layers.D7aGuFeg.js → layers.BMpAH9ja.js} +1 -1
  38. package/dist/{layers.BVWAqd3P.js → layers.BN_ooZJr.js} +6 -6
  39. package/dist/{layers.BMcKnTvK.js → layers.BRQsigl-.js} +2 -2
  40. package/dist/{layers.DiyPaCQz.js → layers.BRcS8w8O.js} +1 -1
  41. package/dist/{layers.D8HM5Bnw.js → layers.BRe8SPDZ.js} +1 -1
  42. package/dist/{layers.NnrI2_w3.js → layers.BRsDI2Nm.js} +4 -4
  43. package/dist/{layers.C6pFOjPC.js → layers.BVo8tjtH.js} +1 -1
  44. package/dist/{layers.BdJVwOsa.js → layers.BW-KMMIU.js} +1 -1
  45. package/dist/{layers.C8n2tjWC.js → layers.BXh2ZqvT.js} +1 -1
  46. package/dist/layers.BYTvEQKe.js +845 -0
  47. package/dist/{layers.DGuQsfHD.js → layers.BZCVLYFm.js} +1 -1
  48. package/dist/{layers.CdCqWWON.js → layers.BZPzEiHq.js} +1 -1
  49. package/dist/{layers.D-zQTbIL.js → layers.B_MKA6GH.js} +4 -4
  50. package/dist/{layers.Dqfza1uC.js → layers.BaDMSbON.js} +1 -1
  51. package/dist/{layers.D2571DAX.js → layers.Barx7OUz.js} +1 -1
  52. package/dist/layers.BbKV-ire.js +1 -0
  53. package/dist/{layers.DjCYHH8u.js → layers.Be6dk7kl.js} +1 -1
  54. package/dist/{layers.COwEW-bN.js → layers.BeueerlZ.js} +1 -1
  55. package/dist/{layers.BkLKSvLe.js → layers.BfsH_FSm.js} +3 -3
  56. package/dist/{layers.DKDsAC_W.js → layers.BiLGA-4i.js} +1 -1
  57. package/dist/{layers.4aQak5md.js → layers.BkMii-Jq.js} +1 -1
  58. package/dist/{layers.YJlGPTDG.js → layers.BkYHyfB8.js} +7731 -7747
  59. package/dist/{layers.0VQkdjqd.js → layers.Blz-EV9E.js} +1 -1
  60. package/dist/{layers.CDaRGgWd.js → layers.Bmjj9tOc.js} +1 -1
  61. package/dist/{layers.Cb5wvkuM.js → layers.BnGuMl4A.js} +4 -4
  62. package/dist/{layers.D97LAYc4.js → layers.BnQtqz6-.js} +2 -2
  63. package/dist/{layers.CgFw_FN4.js → layers.BpZCQh6U.js} +1 -1
  64. package/dist/{layers.DDauBkL9.js → layers.BpiW3O_5.js} +1 -1
  65. package/dist/{layers.3utmuegJ.js → layers.BsWExZys.js} +1 -1
  66. package/dist/{layers.By3S5lsQ.js → layers.Bt_n-1df.js} +1 -1
  67. package/dist/{layers.D2JBspP6.js → layers.BuInyhtg.js} +1 -1
  68. package/dist/{layers.C0vea4zY.js → layers.Bua2nyVV.js} +1 -1
  69. package/dist/{layers.B6SaqdB2.js → layers.BvT98rYJ.js} +1 -1
  70. package/dist/{layers.CTUj-ifR.js → layers.BvxaIdaf.js} +1 -1
  71. package/dist/{layers.NLJg9M_f.js → layers.BwF0Hi9L.js} +1 -1
  72. package/dist/{layers.B4HwuNf1.js → layers.Bwtjfzg8.js} +1 -1
  73. package/dist/{layers.CgQlhpF3.js → layers.BxCeA_gn.js} +1 -1
  74. package/dist/layers.BzDiSvOF.js +1 -0
  75. package/dist/{layers.qITqopo5.js → layers.C-Aiq26_.js} +1 -1
  76. package/dist/{layers.CaHEjwyy.js → layers.C-EfMTZI.js} +1 -1
  77. package/dist/{layers.BYgec0Wq.js → layers.C0sWVRFH.js} +1 -1
  78. package/dist/{layers.CvSN6qVo.js → layers.C1liVYJ4.js} +1 -1
  79. package/dist/{layers.ZgyVlwt1.js → layers.C2V-wtCh.js} +3 -3
  80. package/dist/{layers.CkP-Eo94.js → layers.C4KMWq9b.js} +2 -2
  81. package/dist/{layers.DdXAOgPg.js → layers.C4lEv75L.js} +1 -1
  82. package/dist/layers.C5-usJXJ.js +6 -0
  83. package/dist/{layers.BZVgR8HL.js → layers.C7iTQpWW.js} +1 -1
  84. package/dist/{layers.D3Yvr9DU.js → layers.C8-oIidQ.js} +1 -1
  85. package/dist/{layers.DSSnCtH-.js → layers.C9Vhm9QI.js} +1 -1
  86. package/dist/{layers.D_k3C_RL.js → layers.CBIAqbpW.js} +1 -1
  87. package/dist/{layers.Cf75L0fw.js → layers.CBQEyPFg.js} +1 -1
  88. package/dist/{layers.Byypn3lV.js → layers.CD2oLnB7.js} +1 -1
  89. package/dist/{layers.BgCUYpH3.js → layers.CGMv_B0S.js} +1 -1
  90. package/dist/{layers.DlqUB51o.js → layers.CGnqg-_A.js} +1 -1
  91. package/dist/{layers.Brq6BmGD.js → layers.CHNILBhb.js} +3 -3
  92. package/dist/{layers.ddJ4xEJF.js → layers.CKMRw_Ij.js} +118 -118
  93. package/dist/{layers.ZbGJOSbt.js → layers.CKq8JO7k.js} +1 -1
  94. package/dist/{layers.Ci9JaNSz.js → layers.CP92H6Jw.js} +1 -1
  95. package/dist/{layers.BeHAF6Sh.js → layers.CPOCeLE5.js} +1 -1
  96. package/dist/{layers.D12R62xH.js → layers.CQDhdhNb.js} +1 -1
  97. package/dist/{layers.DxgYFlcK.js → layers.CRTvIGwP.js} +1 -1
  98. package/dist/{layers.CxpSCafO.js → layers.CR_78cS-.js} +1 -1
  99. package/dist/{layers.CQyakr9V.js → layers.CSClbdKa.js} +1 -1
  100. package/dist/{layers.Mvl_k_yg.js → layers.CY8yRQ6l.js} +1 -1
  101. package/dist/{layers.DW4yWEAP.js → layers.CYdEX-0d.js} +1 -1
  102. package/dist/{layers.D-PCI6OM.js → layers.Cb2aZl8u.js} +1 -1
  103. package/dist/{layers.-WFS9U34.js → layers.CbcqM1cA.js} +1 -1
  104. package/dist/{layers.Dy3CIV4q.js → layers.Cdw8iBqs.js} +1 -1
  105. package/dist/{layers.CzndyHEm.js → layers.CeCTfwVn.js} +1 -1
  106. package/dist/{layers.DI0g4YWF.js → layers.CgyaUxPN.js} +1 -1
  107. package/dist/{layers.Frhnbzhc.js → layers.CoFOXW7P.js} +3 -3
  108. package/dist/{layers.DK-Zoyds.js → layers.CoQG8qIA.js} +1 -1
  109. package/dist/{layers.CiGHO676.js → layers.CoojFMAz.js} +1 -1
  110. package/dist/{layers.kCdlVvwg.js → layers.CqAULjC7.js} +4 -4
  111. package/dist/{layers.D2f-U_JH.js → layers.Cq_eH_1D.js} +1 -1
  112. package/dist/{layers.BIjH8k3X.js → layers.CreDOm-h.js} +1 -1
  113. package/dist/{layers.XTjbtg5t.js → layers.Crv-loHr.js} +1 -1
  114. package/dist/{layers.BN9lR-Lx.js → layers.CsimWGgb.js} +1 -1
  115. package/dist/{layers.Bun9o3g2.js → layers.CtNZLIdk.js} +8 -8
  116. package/dist/{layers.BEwOxbp6.js → layers.Cua1-GW4.js} +3 -3
  117. package/dist/{layers.CNEtSl7o.js → layers.Cun1S6a_.js} +1 -1
  118. package/dist/{layers.C4Twn2ff.js → layers.Cv0TzROn.js} +1 -1
  119. package/dist/{layers.CAOXO9W7.js → layers.Cv8B5fll.js} +1 -1
  120. package/dist/{layers.DTJHlXo0.js → layers.CvJFgKCV.js} +1 -1
  121. package/dist/{layers.D0tyBUGy.js → layers.CwPxy9z_.js} +1 -1
  122. package/dist/{layers.DLOfRuPX.js → layers.CwQR3d_-.js} +7 -7
  123. package/dist/{layers.B1L4c3n6.js → layers.CxSXQXts.js} +1 -1
  124. package/dist/{layers.Bnlcobqf.js → layers.D-x1vJm2.js} +1 -1
  125. package/dist/{layers.gOp-W9tC.js → layers.D0fbUZcv.js} +1 -1
  126. package/dist/{layers.DtIgT6wC.js → layers.D0tdtcuW.js} +1 -1
  127. package/dist/{layers.DEOEAw20.js → layers.D12tf2BV.js} +1 -1
  128. package/dist/{layers.dAIonjLC.js → layers.D1GsdOQc.js} +1 -1
  129. package/dist/{layers.CKS9NDb8.js → layers.D1Rv3zGZ.js} +1 -1
  130. package/dist/{layers.CwP2LZst.js → layers.D1TizAqi.js} +1 -1
  131. package/dist/{layers.BSGgL5Xm.js → layers.D3ZrOnep.js} +1 -1
  132. package/dist/{layers.BSSX8K-7.js → layers.D5yjgmJP.js} +1 -1
  133. package/dist/{layers.CU-1V5EP.js → layers.D8ScbGpR.js} +1 -1
  134. package/dist/{layers.0V09af2L.js → layers.D9-bt63o.js} +1 -1
  135. package/dist/{layers.BtXtXHAs.js → layers.DBsykoSV.js} +1 -1
  136. package/dist/{layers.DpE0_prh.js → layers.DBvZ8e9Z.js} +1 -1
  137. package/dist/{layers.DwdfTHtT.js → layers.DETThPZS.js} +1 -1
  138. package/dist/{layers.CLlhzZu3.js → layers.DFsKZJ43.js} +5 -5
  139. package/dist/{layers.CqxHPUbJ.js → layers.DHDL0U_1.js} +2 -2
  140. package/dist/{layers.sufpjksk.js → layers.DICi7dVE.js} +1 -1
  141. package/dist/layers.DLe0mcwY.js +8 -0
  142. package/dist/{layers.BMKv-d4t.js → layers.DML4Zsyn.js} +1 -1
  143. package/dist/{layers.B3R-2X6o.js → layers.DOAkG1Dh.js} +1 -1
  144. package/dist/{layers.xhxSXOmT.js → layers.DPqDj1Oi.js} +1 -1
  145. package/dist/{layers.DWow4d0C.js → layers.DQ2lj8gk.js} +1 -1
  146. package/dist/{layers.CgqoFOO_.js → layers.DSaL6ZAK.js} +4 -4
  147. package/dist/{layers.z8cnS05F.js → layers.DV7btLfc.js} +4 -4
  148. package/dist/{layers.CFvA3Dj4.js → layers.DWKMxEpc.js} +1 -1
  149. package/dist/{layers.Bqqoy9cT.js → layers.DZ3RCdak.js} +1 -1
  150. package/dist/{layers.BEdXZ88M.js → layers.DZheNRAT.js} +1 -1
  151. package/dist/{layers.AbKzQQm2.js → layers.D_99sK0H.js} +1 -1
  152. package/dist/{layers.17g4w51p.js → layers.D_UoclKR.js} +1 -1
  153. package/dist/{layers.eWv0rBL9.js → layers.DapgBqpX.js} +1 -1
  154. package/dist/{layers.CCqg-IbA.js → layers.DdSfF30v.js} +1 -1
  155. package/dist/{layers.cJ4K3q6_.js → layers.Ddsazf93.js} +1 -1
  156. package/dist/{layers.c5V-URe1.js → layers.Df4eXDsG.js} +1 -1
  157. package/dist/{layers.DPuXKqun.js → layers.DhLfBxyT.js} +1 -1
  158. package/dist/{layers.Bu3aED75.js → layers.DiPV5zcX.js} +1 -1
  159. package/dist/{layers.ByqzdYgl.js → layers.DkCKc3Me.js} +1 -1
  160. package/dist/{layers.B9CN0tHX.js → layers.DlffgolC.js} +5 -5
  161. package/dist/{layers.CMqhxB2k.js → layers.DnMPiCfN.js} +1 -1
  162. package/dist/{layers.BAojlL45.js → layers.DnqS0a2-.js} +1 -1
  163. package/dist/{layers.3scAU0lv.js → layers.DqdOPYJO.js} +1 -1
  164. package/dist/{layers.CVoJanQq.js → layers.DqeJXhY_.js} +1 -1
  165. package/dist/{layers.mROWocEo.js → layers.DrmwlH2G.js} +1 -1
  166. package/dist/layers.Dt1rbgkp.js +1 -0
  167. package/dist/{layers.2tODz3EV.js → layers.Dtbz5cb4.js} +1 -1
  168. package/dist/{layers.CMMewJR1.js → layers.Dvfz0GgU.js} +1 -1
  169. package/dist/{layers.D1WUPu_V.js → layers.DwIHtr6D.js} +1 -1
  170. package/dist/{layers.ymRiDkLF.js → layers.DzcIY8-V.js} +1 -1
  171. package/dist/{layers.Bv0Njrxp.js → layers.E3HZYYeg.js} +1 -1
  172. package/dist/{layers.Chah3OJu.js → layers.HsdOsWUd.js} +1 -1
  173. package/dist/{layers.CPEQ9C80.js → layers.IMNhFIxj.js} +1 -1
  174. package/dist/{layers.CRp43aaP.js → layers.J2w2Riea.js} +1 -1
  175. package/dist/{layers.wJjBUFQd.js → layers.J8eOHFUI.js} +2 -2
  176. package/dist/{layers.C2d90hop.js → layers.LVZha2Pk.js} +4 -4
  177. package/dist/{layers.B00XCM0R.js → layers.NFkavokD.js} +1 -1
  178. package/dist/{layers.DRcBHjok.js → layers.OK1vgNrY.js} +4 -4
  179. package/dist/{layers.DiMr7Wyg.js → layers.OrKJK6BY.js} +1 -1
  180. package/dist/{layers.CtuWBttU.js → layers.THDlj7zf.js} +1 -1
  181. package/dist/{layers.Bd5nEMKQ.js → layers.TSxPnigO.js} +1 -1
  182. package/dist/{layers.DC32yjzD.js → layers.Tar25EFM.js} +1 -1
  183. package/dist/{layers.BeyXvEYp.js → layers.UZHGqRob.js} +2 -2
  184. package/dist/{layers.aRAJ1D_V.js → layers.VH7zGc9C.js} +1 -1
  185. package/dist/{layers.DVp6drUD.js → layers.XfyPxipd.js} +1 -1
  186. package/dist/{layers.CWmaP2IS.js → layers.YUg2OOfS.js} +1 -1
  187. package/dist/layers.YaqirxS_.js +1 -0
  188. package/dist/{layers.DrU6XBve.js → layers.aBiISg6t.js} +1 -1
  189. package/dist/{layers.C_IQy61H.js → layers.ctWOHj5v.js} +1 -1
  190. package/dist/{layers.DvF3aEfC.js → layers.d1JsIpYK.js} +1 -1
  191. package/dist/{layers.D2op8CN7.js → layers.e5_36KkI.js} +1 -1
  192. package/dist/{layers.DVGoiTc3.js → layers.i4OVIwQj.js} +1 -1
  193. package/dist/{layers.Cy5A3XH2.js → layers.irJl0o_y.js} +1 -1
  194. package/dist/{layers.ClIiDXZL.js → layers.jGNok5fU.js} +3 -3
  195. package/dist/{layers.tlP3W1Xk.js → layers.joP1MacO.js} +1 -1
  196. package/dist/{layers.BKPDil-V.js → layers.lBMPbRFM.js} +1 -1
  197. package/dist/{layers.CIFe0oe3.js → layers.lXSu1IrZ.js} +1 -1
  198. package/dist/{layers.Bbgp_FQG.js → layers.m_CBxvmG.js} +3 -3
  199. package/dist/{layers.DnqZoPrZ.js → layers.mbRfQm9v.js} +3 -3
  200. package/dist/{layers.BbH_fbXh.js → layers.sOWCSkfH.js} +1 -1
  201. package/dist/{layers.C4KUrPKo.js → layers.sSRhVwBH.js} +1 -1
  202. package/dist/{layers.CuSG0bXd.js → layers.vCObpxZA.js} +1 -1
  203. package/dist/{layers.CfHLlbor.js → layers.zsEEmuYV.js} +1 -1
  204. package/package.json +1 -1
  205. package/dist/layers.B7s8ImMF.js +0 -6
  206. package/dist/layers.B7t_RMCz.js +0 -1
  207. package/dist/layers.BrkoSSCI.js +0 -845
  208. package/dist/layers.C5r1MyqG.js +0 -1
  209. package/dist/layers.CPcW8u0g.js +0 -8
  210. package/dist/layers.D-Xb7G5c.js +0 -1
  211. package/dist/layers.DUkqZm4x.js +0 -1
@@ -1,4 +1,4 @@
1
- import "./layers.Bun9o3g2.js";
1
+ import "./layers.CtNZLIdk.js";
2
2
  var u = { paste: "วาง", pasteAsPlaintext: "วางโดยไม่มีการจัดรูปแบบ", pasteCharts: "วางแผนภูมิ", selectAll: "เลือกทั้งหมด", multiSelect: "", moveCanvas: "", cut: "ตัด", copy: "คัดลอก", copyAsPng: "คัดลองไปยังคลิปบอร์ดเป็น PNG", copyAsSvg: "คัดลองไปยังคลิปบอร์ดเป็น SVG", copyText: "คัดลองไปยังคลิปบอร์ดเป็นข้อความ", copySource: "", convertToCode: "", bringForward: "นำขึ้นข้างบน", sendToBack: "ย้ายไปข้างล่าง", bringToFront: "นำขึ้นข้างหน้า", sendBackward: "ย้ายไปข้างหลัง", delete: "ลบ", copyStyles: "คัดลอกรูปแบบ", pasteStyles: "วางรูปแบบ", stroke: "เส้นขอบ", background: "พื้นหลัง", fill: "เติมสี", strokeWidth: "น้ำหนักเส้นขอบ", strokeStyle: "รูปแบบเส้น", strokeStyle_solid: "เส้นทึบ", strokeStyle_dashed: "เส้นประ", strokeStyle_dotted: "จุด", sloppiness: "ความเลอะเทอะ", opacity: "ความทึบแสง", textAlign: "จัดข้อความ", edges: "ขอบ", sharp: "", round: "", arrowheads: "หัวลูกศร", arrowhead_none: "ไม่มี", arrowhead_arrow: "ลูกศร", arrowhead_bar: "แถบ", arrowhead_circle: "", arrowhead_circle_outline: "", arrowhead_triangle: "สามเหลี่ยม", arrowhead_triangle_outline: "", arrowhead_diamond: "", arrowhead_diamond_outline: "", fontSize: "ขนาดตัวอักษร", fontFamily: "แบบตัวอักษร", addWatermark: 'เพิ่มลายน้ำ "สร้างด้วย Excalidraw"', handDrawn: "ลายมือ", normal: "ปกติ", code: "โค้ด", small: "เล็ก", medium: "กลาง", large: "ใหญ่", veryLarge: "ใหญ่มาก", solid: "", hachure: "", zigzag: "", crossHatch: "", thin: "บาง", bold: "หนา", left: "ซ้าย", center: "กลาง", right: "ขวา", extraBold: "หนาพิเศษ", architect: "", artist: "ศิลปิน", cartoonist: "", fileTitle: "ชื่อไฟล์", colorPicker: "เลือกสีที่กำหนดเอง", canvasColors: "", canvasBackground: "", drawingCanvas: "", layers: "", actions: "การกระทำ", language: "ภาษา", liveCollaboration: "", duplicateSelection: "ทำสำเนา", untitled: "ไม่มีชื่อ", name: "ชื่อ", yourName: "ชื่อของคุณ", madeWithExcalidraw: "", group: "จัดกลุ่ม", ungroup: "ยกเลิกการจัดกลุ่ม", collaborators: "", showGrid: "แสดงเส้นตาราง", addToLibrary: "เพิ่มไปในคลัง", removeFromLibrary: "นำออกจากคลัง", libraryLoadingMessage: "กำลังโหลดคลัง...", libraries: "", loadingScene: "กำลังโหลดฉาก", align: "จัดตำแหน่ง", alignTop: "จัดชิดด้านบน", alignBottom: "จัดชิดด้านล่าง", alignLeft: "จัดชิดซ้าย", alignRight: "จัดชิดขวา", centerVertically: "กึ่งกลางแนวตั้ง", centerHorizontally: "กึ่งกลางแนวนอน", distributeHorizontally: "กระจายแนวนอน", distributeVertically: "กระจายแนวตั้ง", flipHorizontal: "พลิกแนวนอน", flipVertical: "พลิกแนวตั้ง", viewMode: "โหมดมุมมอง", share: "แชร์", showStroke: "", showBackground: "", toggleTheme: "สลับธีม", personalLib: "คลังของฉัน", excalidrawLib: "คลังของ Excalidraw", decreaseFontSize: "ลดขนาดตัวอักษร", increaseFontSize: "เพิ่มขนาดตัวอักษร", unbindText: "ยกเลิกการผูกติด", bindText: "", createContainerFromText: "", link: { edit: "แก้ไขลิงก์", editEmbed: "แก้ไขลิงค์และการฝัง", create: "สร้างลิงค์", createEmbed: "สร้างลิงค์และการฝัง", label: "ลิงค์", labelEmbed: "ลิงค์และการฝัง", empty: "ไม่ได้ใส่ลิงค์" }, lineEditor: { edit: "แก้ไขเส้น", exit: "" }, elementLock: { lock: "ล็อก", unlock: "ปลดล็อก", lockAll: "ล็อกทั้งหมด", unlockAll: "ปลดล็อกทั้งหมด" }, statusPublished: "เผยแพร่", sidebarLock: "", selectAllElementsInFrame: "", removeAllElementsFromFrame: "", eyeDropper: "", textToDiagram: "", prompt: "" }, E = { noItems: "ยังไม่มีรายการที่เพิ่มเข้าไปได้", hint_emptyLibrary: "", hint_emptyPrivateLibrary: "" }, e = { clearReset: "รีเซ็ทผืนผ้าใบ", exportJSON: "ส่งออกไปยังไฟล์", exportImage: "ส่งออกเป็นรูปภาพ", export: "บันทึกไปยัง", copyToClipboard: "คัดลอกไปยังคลิปบอร์ด", save: "บันทึกเป็นไฟล์ปัจจุบัน", saveAs: "บันทึกเป็น", load: "เปิด", getShareableLink: "สร้างลิงค์ที่แชร์ได้", close: "ปิด", selectLanguage: "เลือกภาษา", scrollBackToContent: "เลื่อนกลับไปด้านบน", zoomIn: "ซูมเข้า", zoomOut: "ซูมออก", resetZoom: "รีเซ็ตการซูม", menu: "เมนู", done: "เสร็จสิ้น", edit: "แก้ไข", undo: "เลิกทำ", redo: "ทำซ้ำ", resetLibrary: "รีเซ็ตคลัง", createNewRoom: "สร้างห้องใหม่", fullScreen: "เต็มหน้าจอ", darkMode: "โหมดกลางคืน", lightMode: "โหมดกลางวัน", zenMode: "โหมด Zen", objectsSnapMode: "", exitZenMode: "ออกจากโหมด Zen", cancel: "ยกเลิก", clear: "เคลียร์", remove: "ลบ", embed: "สลับการฝัง", publishLibrary: "เผยแพร่", submit: "ตกลง", confirm: "ยืนยัน", embeddableInteractionButton: "คลิกเพื่อปฏิสัมพันธ์" }, a = { clearReset: "", couldNotCreateShareableLink: "ไม่สามารถสร้างลิงค์ได้", couldNotCreateShareableLinkTooBig: "", couldNotLoadInvalidFile: "ไม่สามารถโหลดไฟล์ที่ผิดพลาดได้", importBackendFailed: "เกิดข้อผิดพลาดจากการนำเข้าจากระบบหลังบ้าน", cannotExportEmptyCanvas: "ไม่สามารถนำออกจากผืนผ้าใบที่ว่างเปล่าได้", couldNotCopyToClipboard: "ไม่สามารถคัดลอกไปยังคลิปบอร์ดได้", decryptFailed: "ไม่สามารถถอดรหัสข้อมูลได้", uploadedSecurly: "การอัพโหลดได้ถูกเข้ารหัสแบบ end-to-end หมายความว่าเซิร์ฟเวอร์ของ Excalidraw และบุคคลอื่นไม่สามารถอ่านข้อมูลได้", loadSceneOverridePrompt: "", collabStopOverridePrompt: "", errorAddingToLibrary: "ไม่สามารถเพิ่มรายการเข้าไปในคลังได้", errorRemovingFromLibrary: "ไม่สามารถลบรายการนี้ออกจากคลังได้", confirmAddLibrary: "", imageDoesNotContainScene: "", cannotRestoreFromImage: "", invalidSceneUrl: "", resetLibrary: "", removeItemsFromsLibrary: "", invalidEncryptionKey: "", collabOfflineWarning: "" }, o = { unsupportedFileType: "ไม่รองรับชนิดของไฟล์นี้", imageInsertError: "ไม่สามารถเพิ่มรูปภาพได้ ลองอีกครั้งในภายหลัง", fileTooBig: "", svgImageInsertError: "", failedToFetchImage: "", invalidSVGString: "ไฟล์ SVG ผิดพลาด", cannotResolveCollabServer: "ไม่สามารถเชื่อต่อกับ collab เซิร์ฟเวอร์ได้ โปรดลองโหลดหน้านี้ใหม่และลองอีกครั้ง", importLibraryError: "", collabSaveFailed: "", collabSaveFailed_sizeExceeded: "", imageToolNotSupported: "", brave_measure_text_error: { line1: "", line2: "", line3: "", line4: "" }, libraryElementTypeError: { embeddable: "การเพิ่มองค์ประกอบที่ฝังยังไม่สามารถเพิ่มเข้าไปในไลบลารีได้", iframe: "", image: "การสนับสนุนสำหรับเพิ่มรูปภาพลงในไลบลารีจะมาในเร็ว ๆ นี้" }, asyncPasteFailedOnRead: "", asyncPasteFailedOnParse: "", copyToSystemClipboardFailed: "" }, r = { selection: "", image: "", rectangle: "สี่เหลี่ยมผืนผ้า", diamond: "", ellipse: "วงรี", arrow: "ลูกศร", line: "", freedraw: "", text: "ข้อความ", library: "คลัง", lock: "", penMode: "", link: "", eraser: "ยางลบ", frame: "", magicframe: "", embeddable: "ฝังเว็บ", laser: "", hand: "", extraTools: "เครื่องมืออื่นๆ", mermaidToExcalidraw: "", magicSettings: "" }, t = { canvasActions: "", selectedShapeActions: "", shapes: "รูปร่าง" }, i = { canvasPanning: "", linearElement: "", freeDraw: "", text: "", embeddable: "คลิกและลากเพื่อสร้างการฝังสำหรับเว็บไซต์", text_selected: "คลิกสองครั้งหรือกด ENTER เพื่อแก้ไขข้อความ", text_editing: "กดปุ่ม Esc หรือกด Ctrl, Cmd + Enter เพื่อเสร็จการแก้ไข", linearElementMulti: "คลิกที่จุดสุดท้ายหรือกด Escape หรือ Enter เพื่อเสร็จสิ้น", lockAngle: "", resize: "", resizeImage: "", rotate: "", lineEditor_info: "", lineEditor_pointSelected: `กดปุ่ม Delete เพื่อลบจุด
3
3
  กด Ctrl หรือ Cmd + D เพื่อทำซ้ำหรือลากเพื่อเคลื่อนย้าย`, lineEditor_nothingSelected: "", placeImage: "", publishLibrary: "", bindTextToElement: "", deepBoxSelect: "", eraserRevert: "", firefox_clipboard_write: "", disableSnapping: "" }, l = { cannotShowPreview: "", canvasTooBig: "", canvasTooBigTip: "" }, n = { headingMain: "<button>กำลังรีโหลดหน้า</button>", clearCanvasMessage: "ถ้าโหลดไม่ได้ ให้ลอง <button>เคลียร์ผืนผ้าใบ</button>", clearCanvasCaveat: "", trackedToSentry: "", openIssueMessage: "", sceneContent: "" }, s = { desc_intro: "", desc_privacy: "", button_startSession: "เริ่มเซสชัน", button_stopSession: "หยุดเซสชัน", desc_inProgressIntro: "", desc_shareLink: "", desc_exitSession: "", shareTitle: "" }, d = { title: "" }, c = { disk_title: "", disk_details: "", disk_button: "", link_title: "", link_details: "", link_button: "", excalidrawplus_description: "", excalidrawplus_button: "", excalidrawplus_exportError: "ไม่สามารถส่งออกไปที่ Excalidraw+ ได้ในขณะนี้" }, D = { blog: "อ่านบล็อกของพวกเรา", click: "คลิก", deepSelect: "", deepBoxSelect: "", curvedArrow: "", curvedLine: "", documentation: "", doubleClick: "ดับเบิลคลิก", drag: "ลาก", editor: "", editLineArrowPoints: "", editText: "แก้ไขข้อความ / เพิ่มข้อความ", github: "", howto: "", or: "", preventBinding: "", tools: "", shortcuts: "", textFinish: "", textNewLine: "", title: "ช่วยเหลือ", view: "ดู", zoomToFit: "", zoomToSelection: "", toggleElementLock: "", movePageUpDown: "", movePageLeftRight: "ย้ายหน้าไปด้าน ซ้าย/ขวา" }, A = { title: "" }, B = { title: "", itemName: "", authorName: "ชื่อเจ้าของ", githubUsername: "ชื่อผู้ใช้ GitHub", twitterUsername: "ชื่อผู้ใช้ Twitter", libraryName: "", libraryDesc: "", website: "", placeholder: { authorName: "", libraryName: "", libraryDesc: "", githubHandle: "", twitterHandle: "", website: "" }, errors: { required: "", website: "" }, noteDescription: "", noteGuidelines: "", noteLicense: "", noteItems: "", atleastOneLibItem: "", republishWarning: "" }, m = { title: "", content: "" }, p = { resetLibrary: "", removeItemsFromLib: "" }, g = { header: "", label: { withBackground: "", onlySelected: "", darkMode: "โหมดกลางคืน", embedScene: "", scale: "", padding: "" }, tooltip: { embedScene: "" }, title: { exportToPng: "ส่งออกไปเป็น SVG", exportToSvg: "ส่งออกไปเป็น SVG", copyPngToClipboard: "คัดลอก PNG ไปยังคลิปบอร์ด" }, button: { exportToPng: "PNG", exportToSvg: "SVG", copyPngToClipboard: "คัดลอกไปยังคลิปบอร์ด" } }, b = { tooltip: "", link: "" }, C = { angle: "", element: "", elements: "", height: "", scene: "", selected: "", storage: "", title: "", total: "", version: "", versionCopy: "", versionNotAvailable: "", width: "" }, h = { addedToLibrary: "", copyStyles: "", copyToClipboard: "", copyToClipboardAsPng: "", fileSaved: "", fileSavedToFilename: "", canvas: "", selection: "", pasteAsSingleElement: "", unableToEmbed: "", unrecognizedLinkFormat: "" }, y = { transparent: "", black: "", white: "", red: "", pink: "", grape: "", violet: "", gray: "", blue: "", cyan: "", teal: "ฟ้าน้ำทะเล", green: "เขียว", yellow: "เหลือง", orange: "ส้ม", bronze: "ทองแดง" }, S = { app: { center_heading: "", center_heading_plus: "", menuHint: "" }, defaults: { menuHint: "", center_heading: "", toolbarHint: "", helpHint: "" } }, v = { mostUsedCustomColors: "", colors: "", shades: "", hexCode: "", noShades: "" }, w = { action: { exportToImage: { title: "", button: "", description: "" }, saveToDisk: { title: "", button: "", description: "" }, excalidrawPlus: { title: "", button: "", description: "" } }, modal: { loadFromFile: { title: "", button: "", description: "" }, shareableLink: { title: "", button: "", description: "" } } }, x = { title: "", button: "", description: "", syntax: "", preview: "" }, T = { labels: u, library: E, buttons: e, alerts: a, errors: o, toolBar: r, headings: t, hints: i, canvasError: l, errorSplash: n, roomDialog: s, errorDialog: d, exportDialog: c, helpDialog: D, clearCanvasDialog: A, publishDialog: B, publishSuccessDialog: m, confirmDialog: p, imageExportDialog: g, encrypted: b, stats: C, toast: h, colors: y, welcomeScreen: S, colorPicker: v, overwriteConfirm: w, mermaid: x };
4
4
  export {
@@ -1,9 +1,9 @@
1
1
  import * as v from "lodash-es";
2
2
  import { l as M } from "./layers.D4T8fTcj.js";
3
3
  import { G as U } from "./layers.BJDrjORS.js";
4
- import { i as A, u as H, s as V, c as _, b as W, g as D, d as O, a as q, p as z, e as p, f as $, h as K, j as Q } from "./layers.BEwOxbp6.js";
5
- import { l as s, g as T, t as S, d as J } from "./layers.B2cQSvjV.js";
6
- import { c as Y } from "./layers.B4HwuNf1.js";
4
+ import { i as A, u as H, s as V, c as _, b as W, g as D, d as O, a as q, p as z, e as p, f as $, h as K, j as Q } from "./layers.Cua1-GW4.js";
5
+ import { l as s, g as T, t as S, d as J } from "./layers.BFf5E9KH.js";
6
+ import { c as Y } from "./layers.Bwtjfzg8.js";
7
7
  function m(e) {
8
8
  var t = {
9
9
  options: {
@@ -1 +1 @@
1
- "use strict";const P=require("lodash-es"),J=require("./layers.Cyzu9PKQ.js"),k=require("./layers.BLd2spTm.js"),u=require("./layers.BSGgL5Xm.js"),i=require("./layers.D-zQTbIL.js"),j=require("./layers.DDauBkL9.js");function G(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const m=G(P);function x(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:M(e),edges:F(e)};return m.isUndefined(e.graph())||(t.value=m.clone(e.graph())),t}function M(e){return m.map(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),s={v:t};return m.isUndefined(n)||(s.value=n),m.isUndefined(r)||(s.parent=r),s})}function F(e){return m.map(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return m.isUndefined(t.name)||(r.name=t.name),m.isUndefined(n)||(r.value=n),r})}let a={},w={},p={};const q=()=>{w={},p={},a={}},X=(e,t)=>(i.log$1.trace("In isDescendant",t," ",e," = ",w[t].includes(e)),!!w[t].includes(e)),_=(e,t)=>(i.log$1.info("Descendants of ",t," is ",w[t]),i.log$1.info("Edge is ",e),e.v===t||e.w===t?!1:w[t]?w[t].includes(e.v)||X(e.v,t)||X(e.w,t)||w[t].includes(e.w):(i.log$1.debug("Tilt, ",t,",not in descendants"),!1)),B=(e,t,n,r)=>{i.log$1.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const s=t.children(e)||[];e!==r&&s.push(e),i.log$1.warn("Copying (nodes) clusterId",e,"nodes",s),s.forEach(o=>{if(t.children(o).length>0)B(o,t,n,r);else{const f=t.node(o);i.log$1.info("cp ",o," to ",r," with parent ",e),n.setNode(o,f),r!==t.parent(o)&&(i.log$1.warn("Setting parent",o,t.parent(o)),n.setParent(o,t.parent(o))),e!==r&&o!==e?(i.log$1.debug("Setting parent",o,e),n.setParent(o,e)):(i.log$1.info("In copy ",e,"root",r,"data",t.node(e),r),i.log$1.debug("Not Setting parent for node=",o,"cluster!==rootId",e!==r,"node!==clusterId",o!==e));const g=t.edges(o);i.log$1.debug("Copying Edges",g),g.forEach(d=>{i.log$1.info("Edge",d);const h=t.edge(d.v,d.w,d.name);i.log$1.info("Edge data",h,r);try{_(d,r)?(i.log$1.info("Copying as ",d.v,d.w,h,d.name),n.setEdge(d.v,d.w,h,d.name),i.log$1.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.log$1.info("Skipping copy of edge ",d.v,"-->",d.w," rootId: ",r," clusterId:",e)}catch($){i.log$1.error($)}})}i.log$1.debug("Removing node",o),t.removeNode(o)})},D=(e,t)=>{const n=t.children(e);let r=[...n];for(const s of n)p[s]=e,r=[...r,...D(s,t)];return r},C=(e,t)=>{i.log$1.trace("Searching",e);const n=t.children(e);if(i.log$1.trace("Searching children of id ",e,n),n.length<1)return i.log$1.trace("This is a valid node",e),e;for(const r of n){const s=C(r,t);if(s)return i.log$1.trace("Found replacement for",e," => ",s),s}},S=e=>!a[e]||!a[e].externalConnections?e:a[e]?a[e].id:e,U=(e,t)=>{if(!e||t>10){i.log$1.debug("Opting out, no graph ");return}else i.log$1.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.log$1.warn("Cluster identified",n," Replacement id in edges: ",C(n,e)),w[n]=D(n,e),a[n]={id:C(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){const r=e.children(n),s=e.edges();r.length>0?(i.log$1.debug("Cluster identified",n,w),s.forEach(o=>{if(o.v!==n&&o.w!==n){const f=X(o.v,n),g=X(o.w,n);f^g&&(i.log$1.warn("Edge: ",o," leaves cluster ",n),i.log$1.warn("Descendants of XXX ",n,": ",w[n]),a[n].externalConnections=!0)}})):i.log$1.debug("Not a cluster ",n,w)});for(let n of Object.keys(a)){const r=a[n].id,s=e.parent(r);s!==n&&a[s]&&!a[s].externalConnections&&(a[n].id=s)}e.edges().forEach(function(n){const r=e.edge(n);i.log$1.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.log$1.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let s=n.v,o=n.w;if(i.log$1.warn("Fix XXX",a,"ids:",n.v,n.w,"Translating: ",a[n.v]," --- ",a[n.w]),a[n.v]&&a[n.w]&&a[n.v]===a[n.w]){i.log$1.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),i.log$1.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=S(n.v),o=S(n.w),e.removeEdge(n.v,n.w,n.name);const f=n.w+"---"+n.v;e.setNode(f,{domId:f,id:f,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});const g=structuredClone(r),d=structuredClone(r);g.label="",g.arrowTypeEnd="none",d.label="",g.fromCluster=n.v,d.toCluster=n.v,e.setEdge(s,f,g,n.name+"-cyclic-special"),e.setEdge(f,o,d,n.name+"-cyclic-special")}else if(a[n.v]||a[n.w]){if(i.log$1.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=S(n.v),o=S(n.w),e.removeEdge(n.v,n.w,n.name),s!==n.v){const f=e.parent(s);a[f].externalConnections=!0,r.fromCluster=n.v}if(o!==n.w){const f=e.parent(o);a[f].externalConnections=!0,r.toCluster=n.w}i.log$1.warn("Fix Replacing with XXX",s,o,n.name),e.setEdge(s,o,r,n.name)}}),i.log$1.warn("Adjusted Graph",x(e)),T(e,0),i.log$1.trace(a)},T=(e,t)=>{if(i.log$1.warn("extractor - ",t,x(e),e.children("D")),t>10){i.log$1.error("Bailing out");return}let n=e.nodes(),r=!1;for(const s of n){const o=e.children(s);r=r||o.length>0}if(!r){i.log$1.debug("Done, no node has children",e.nodes());return}i.log$1.debug("Nodes = ",n,t);for(const s of n)if(i.log$1.debug("Extracting node",s,a,a[s]&&!a[s].externalConnections,!e.parent(s),e.node(s),e.children("D")," Depth ",t),!a[s])i.log$1.debug("Not a cluster",s,t);else if(!a[s].externalConnections&&e.children(s)&&e.children(s).length>0){i.log$1.warn("Cluster without external connections, without a parent and with children",s,t);let f=e.graph().rankdir==="TB"?"LR":"TB";a[s]&&a[s].clusterData&&a[s].clusterData.dir&&(f=a[s].clusterData.dir,i.log$1.warn("Fixing dir",a[s].clusterData.dir,f));const g=new k.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:f,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.log$1.warn("Old graph before copy",x(e)),B(s,e,g,s),e.setNode(s,{clusterNode:!0,id:s,clusterData:a[s].clusterData,labelText:a[s].labelText,graph:g}),i.log$1.warn("New graph after copy node: (",s,")",x(g)),i.log$1.debug("Old graph after copy",x(e))}else i.log$1.warn("Cluster ** ",s," **not meeting the criteria !externalConnections:",!a[s].externalConnections," no parent: ",!e.parent(s)," children ",e.children(s)&&e.children(s).length>0,e.children("D"),t),i.log$1.debug(a);n=e.nodes(),i.log$1.warn("New list of nodes",n);for(const s of n){const o=e.node(s);i.log$1.warn(" Now next level",s,o),o.clusterNode&&T(o.graph,t+1)}},O=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{const s=e.children(r),o=O(e,s);n=[...n,...o]}),n},A=e=>O(e,e.children()),H=(e,t)=>{i.log$1.info("Creating subgraph rect for ",t.id,t);const n=i.getConfig(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),s=r.insert("rect",":first-child"),o=i.evaluate(n.flowchart.htmlLabels),f=r.insert("g").attr("class","cluster-label"),g=t.labelType==="markdown"?j.createText(f,t.labelText,{style:t.labelStyle,useHtmlLabels:o}):f.node().appendChild(u.createLabel$1(t.labelText,t.labelStyle,void 0,!0));let d=g.getBBox();if(i.evaluate(n.flowchart.htmlLabels)){const l=g.children[0],c=i.select(g);d=l.getBoundingClientRect(),c.attr("width",d.width),c.attr("height",d.height)}const h=0*t.padding,$=h/2,y=t.width<=d.width+h?d.width+h:t.width;t.width<=d.width+h?t.diff=(d.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,i.log$1.trace("Data ",t,JSON.stringify(t)),s.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-y/2).attr("y",t.y-t.height/2-$).attr("width",y).attr("height",t.height+h);const{subGraphTitleTopMargin:N}=u.getSubGraphTitleMargins(n);o?f.attr("transform",`translate(${t.x-d.width/2}, ${t.y-t.height/2+N})`):f.attr("transform",`translate(${t.x}, ${t.y-t.height/2+N})`);const b=s.node().getBBox();return t.width=b.width,t.height=b.height,t.intersect=function(l){return u.intersectRect$1(t,l)},r},V=(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,o=s/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-o).attr("y",t.y-t.height/2-o).attr("width",t.width+s).attr("height",t.height+s).attr("fill","none");const f=r.node().getBBox();return t.width=f.width,t.height=f.height,t.intersect=function(g){return u.intersectRect$1(t,g)},n},z=(e,t)=>{const n=i.getConfig(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),s=r.insert("rect",":first-child"),o=r.insert("g").attr("class","cluster-label"),f=r.append("rect"),g=o.node().appendChild(u.createLabel$1(t.labelText,t.labelStyle,void 0,!0));let d=g.getBBox();if(i.evaluate(n.flowchart.htmlLabels)){const l=g.children[0],c=i.select(g);d=l.getBoundingClientRect(),c.attr("width",d.width),c.attr("height",d.height)}d=g.getBBox();const h=0*t.padding,$=h/2,y=t.width<=d.width+t.padding?d.width+t.padding:t.width;t.width<=d.width+t.padding?t.diff=(d.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,s.attr("class","outer").attr("x",t.x-y/2-$).attr("y",t.y-t.height/2-$).attr("width",y+h).attr("height",t.height+h),f.attr("class","inner").attr("x",t.x-y/2-$).attr("y",t.y-t.height/2-$+d.height-1).attr("width",y+h).attr("height",t.height+h-d.height-3);const{subGraphTitleTopMargin:N}=u.getSubGraphTitleMargins(n);o.attr("transform",`translate(${t.x-d.width/2}, ${t.y-t.height/2-t.padding/3+(i.evaluate(n.flowchart.htmlLabels)?5:3)+N})`);const b=s.node().getBBox();return t.height=b.height,t.intersect=function(l){return u.intersectRect$1(t,l)},r},W=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,o=s/2;r.attr("class","divider").attr("x",t.x-t.width/2-o).attr("y",t.y-t.height/2).attr("width",t.width+s).attr("height",t.height+s);const f=r.node().getBBox();return t.width=f.width,t.height=f.height,t.diff=-t.padding/2,t.intersect=function(g){return u.intersectRect$1(t,g)},n},K={rect:H,roundedWithTitle:z,noteGroup:V,divider:W};let R={};const Q=(e,t)=>{i.log$1.trace("Inserting cluster");const n=t.shape||"rect";R[t.id]=K[n](e,t)},Y=()=>{R={}},L=async(e,t,n,r,s,o)=>{i.log$1.info("Graph in recursive render: XXX",x(t),s);const f=t.graph().rankdir;i.log$1.trace("Dir in recursive render - dir:",f);const g=e.insert("g").attr("class","root");t.nodes()?i.log$1.info("Recursive render XXX",t.nodes()):i.log$1.info("No nodes found for",t),t.edges().length>0&&i.log$1.trace("Recursive edges",t.edge(t.edges()[0]));const d=g.insert("g").attr("class","clusters"),h=g.insert("g").attr("class","edgePaths"),$=g.insert("g").attr("class","edgeLabels"),y=g.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(l){const c=t.node(l);if(s!==void 0){const v=JSON.parse(JSON.stringify(s.clusterData));i.log$1.info("Setting data for cluster XXX (",l,") ",v,s),t.setNode(s.id,v),t.parent(l)||(i.log$1.trace("Setting parent",l,s.id),t.setParent(l,s.id,v))}if(i.log$1.info("(Insert) Node XXX"+l+": "+JSON.stringify(t.node(l))),c&&c.clusterNode){i.log$1.info("Cluster identified",l,c.width,t.node(l));const v=await L(y,c.graph,n,r,t.node(l),o),E=v.elem;u.updateNodeBounds(c,E),c.diff=v.diff||0,i.log$1.info("Node bounds (abc123)",l,c,c.width,c.x,c.y),u.setNodeElem(E,c),i.log$1.warn("Recursive render complete ",E,c)}else t.children(l).length>0?(i.log$1.info("Cluster - the non recursive path XXX",l,c.id,c,t),i.log$1.info(C(c.id,t)),a[c.id]={id:C(c.id,t),node:c}):(i.log$1.info("Node - the non recursive path",l,c.id,c),await u.insertNode(y,t.node(l),f))})),t.edges().forEach(function(l){const c=t.edge(l.v,l.w,l.name);i.log$1.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(l)),i.log$1.info("Edge "+l.v+" -> "+l.w+": ",l," ",JSON.stringify(t.edge(l))),i.log$1.info("Fix",a,"ids:",l.v,l.w,"Translating: ",a[l.v],a[l.w]),u.insertEdgeLabel($,c)}),t.edges().forEach(function(l){i.log$1.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(l))}),i.log$1.info("#############################################"),i.log$1.info("### Layout ###"),i.log$1.info("#############################################"),i.log$1.info(t),J.layout(t),i.log$1.info("Graph after layout:",x(t));let N=0;const{subGraphTitleTotalMargin:b}=u.getSubGraphTitleMargins(o);return A(t).forEach(function(l){const c=t.node(l);i.log$1.info("Position "+l+": "+JSON.stringify(t.node(l))),i.log$1.info("Position "+l+": ("+c.x,","+c.y,") width: ",c.width," height: ",c.height),c&&c.clusterNode?(c.y+=b,u.positionNode(c)):t.children(l).length>0?(c.height+=b,Q(d,c),a[c.id].node=c):(c.y+=b/2,u.positionNode(c))}),t.edges().forEach(function(l){const c=t.edge(l);i.log$1.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(c),c),c.points.forEach(E=>E.y+=b/2);const v=u.insertEdge(h,l,c,a,n,t,r);u.positionEdgeLabel(c,v)}),t.nodes().forEach(function(l){const c=t.node(l);i.log$1.info(l,c.type,c.diff),c.type==="group"&&(N=c.diff)}),{elem:g,diff:N}},Z=async(e,t,n,r,s)=>{u.insertMarkers$1(e,n,r,s),u.clear$1(),u.clear(),Y(),q(),i.log$1.warn("Graph at first:",JSON.stringify(x(t))),U(t),i.log$1.warn("Graph after:",JSON.stringify(x(t)));const o=i.getConfig();await L(e,t,r,s,void 0,o)};exports.render=Z;
1
+ "use strict";const P=require("lodash-es"),J=require("./layers.Cyzu9PKQ.js"),k=require("./layers.BLd2spTm.js"),u=require("./layers.D3ZrOnep.js"),i=require("./layers.B_MKA6GH.js"),j=require("./layers.BpiW3O_5.js");function G(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const m=G(P);function x(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:M(e),edges:F(e)};return m.isUndefined(e.graph())||(t.value=m.clone(e.graph())),t}function M(e){return m.map(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),s={v:t};return m.isUndefined(n)||(s.value=n),m.isUndefined(r)||(s.parent=r),s})}function F(e){return m.map(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return m.isUndefined(t.name)||(r.name=t.name),m.isUndefined(n)||(r.value=n),r})}let a={},w={},p={};const q=()=>{w={},p={},a={}},X=(e,t)=>(i.log$1.trace("In isDescendant",t," ",e," = ",w[t].includes(e)),!!w[t].includes(e)),_=(e,t)=>(i.log$1.info("Descendants of ",t," is ",w[t]),i.log$1.info("Edge is ",e),e.v===t||e.w===t?!1:w[t]?w[t].includes(e.v)||X(e.v,t)||X(e.w,t)||w[t].includes(e.w):(i.log$1.debug("Tilt, ",t,",not in descendants"),!1)),B=(e,t,n,r)=>{i.log$1.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const s=t.children(e)||[];e!==r&&s.push(e),i.log$1.warn("Copying (nodes) clusterId",e,"nodes",s),s.forEach(o=>{if(t.children(o).length>0)B(o,t,n,r);else{const f=t.node(o);i.log$1.info("cp ",o," to ",r," with parent ",e),n.setNode(o,f),r!==t.parent(o)&&(i.log$1.warn("Setting parent",o,t.parent(o)),n.setParent(o,t.parent(o))),e!==r&&o!==e?(i.log$1.debug("Setting parent",o,e),n.setParent(o,e)):(i.log$1.info("In copy ",e,"root",r,"data",t.node(e),r),i.log$1.debug("Not Setting parent for node=",o,"cluster!==rootId",e!==r,"node!==clusterId",o!==e));const g=t.edges(o);i.log$1.debug("Copying Edges",g),g.forEach(d=>{i.log$1.info("Edge",d);const h=t.edge(d.v,d.w,d.name);i.log$1.info("Edge data",h,r);try{_(d,r)?(i.log$1.info("Copying as ",d.v,d.w,h,d.name),n.setEdge(d.v,d.w,h,d.name),i.log$1.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):i.log$1.info("Skipping copy of edge ",d.v,"-->",d.w," rootId: ",r," clusterId:",e)}catch($){i.log$1.error($)}})}i.log$1.debug("Removing node",o),t.removeNode(o)})},D=(e,t)=>{const n=t.children(e);let r=[...n];for(const s of n)p[s]=e,r=[...r,...D(s,t)];return r},C=(e,t)=>{i.log$1.trace("Searching",e);const n=t.children(e);if(i.log$1.trace("Searching children of id ",e,n),n.length<1)return i.log$1.trace("This is a valid node",e),e;for(const r of n){const s=C(r,t);if(s)return i.log$1.trace("Found replacement for",e," => ",s),s}},S=e=>!a[e]||!a[e].externalConnections?e:a[e]?a[e].id:e,U=(e,t)=>{if(!e||t>10){i.log$1.debug("Opting out, no graph ");return}else i.log$1.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(i.log$1.warn("Cluster identified",n," Replacement id in edges: ",C(n,e)),w[n]=D(n,e),a[n]={id:C(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){const r=e.children(n),s=e.edges();r.length>0?(i.log$1.debug("Cluster identified",n,w),s.forEach(o=>{if(o.v!==n&&o.w!==n){const f=X(o.v,n),g=X(o.w,n);f^g&&(i.log$1.warn("Edge: ",o," leaves cluster ",n),i.log$1.warn("Descendants of XXX ",n,": ",w[n]),a[n].externalConnections=!0)}})):i.log$1.debug("Not a cluster ",n,w)});for(let n of Object.keys(a)){const r=a[n].id,s=e.parent(r);s!==n&&a[s]&&!a[s].externalConnections&&(a[n].id=s)}e.edges().forEach(function(n){const r=e.edge(n);i.log$1.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),i.log$1.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let s=n.v,o=n.w;if(i.log$1.warn("Fix XXX",a,"ids:",n.v,n.w,"Translating: ",a[n.v]," --- ",a[n.w]),a[n.v]&&a[n.w]&&a[n.v]===a[n.w]){i.log$1.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),i.log$1.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=S(n.v),o=S(n.w),e.removeEdge(n.v,n.w,n.name);const f=n.w+"---"+n.v;e.setNode(f,{domId:f,id:f,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});const g=structuredClone(r),d=structuredClone(r);g.label="",g.arrowTypeEnd="none",d.label="",g.fromCluster=n.v,d.toCluster=n.v,e.setEdge(s,f,g,n.name+"-cyclic-special"),e.setEdge(f,o,d,n.name+"-cyclic-special")}else if(a[n.v]||a[n.w]){if(i.log$1.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),s=S(n.v),o=S(n.w),e.removeEdge(n.v,n.w,n.name),s!==n.v){const f=e.parent(s);a[f].externalConnections=!0,r.fromCluster=n.v}if(o!==n.w){const f=e.parent(o);a[f].externalConnections=!0,r.toCluster=n.w}i.log$1.warn("Fix Replacing with XXX",s,o,n.name),e.setEdge(s,o,r,n.name)}}),i.log$1.warn("Adjusted Graph",x(e)),T(e,0),i.log$1.trace(a)},T=(e,t)=>{if(i.log$1.warn("extractor - ",t,x(e),e.children("D")),t>10){i.log$1.error("Bailing out");return}let n=e.nodes(),r=!1;for(const s of n){const o=e.children(s);r=r||o.length>0}if(!r){i.log$1.debug("Done, no node has children",e.nodes());return}i.log$1.debug("Nodes = ",n,t);for(const s of n)if(i.log$1.debug("Extracting node",s,a,a[s]&&!a[s].externalConnections,!e.parent(s),e.node(s),e.children("D")," Depth ",t),!a[s])i.log$1.debug("Not a cluster",s,t);else if(!a[s].externalConnections&&e.children(s)&&e.children(s).length>0){i.log$1.warn("Cluster without external connections, without a parent and with children",s,t);let f=e.graph().rankdir==="TB"?"LR":"TB";a[s]&&a[s].clusterData&&a[s].clusterData.dir&&(f=a[s].clusterData.dir,i.log$1.warn("Fixing dir",a[s].clusterData.dir,f));const g=new k.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:f,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.log$1.warn("Old graph before copy",x(e)),B(s,e,g,s),e.setNode(s,{clusterNode:!0,id:s,clusterData:a[s].clusterData,labelText:a[s].labelText,graph:g}),i.log$1.warn("New graph after copy node: (",s,")",x(g)),i.log$1.debug("Old graph after copy",x(e))}else i.log$1.warn("Cluster ** ",s," **not meeting the criteria !externalConnections:",!a[s].externalConnections," no parent: ",!e.parent(s)," children ",e.children(s)&&e.children(s).length>0,e.children("D"),t),i.log$1.debug(a);n=e.nodes(),i.log$1.warn("New list of nodes",n);for(const s of n){const o=e.node(s);i.log$1.warn(" Now next level",s,o),o.clusterNode&&T(o.graph,t+1)}},O=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{const s=e.children(r),o=O(e,s);n=[...n,...o]}),n},A=e=>O(e,e.children()),H=(e,t)=>{i.log$1.info("Creating subgraph rect for ",t.id,t);const n=i.getConfig(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),s=r.insert("rect",":first-child"),o=i.evaluate(n.flowchart.htmlLabels),f=r.insert("g").attr("class","cluster-label"),g=t.labelType==="markdown"?j.createText(f,t.labelText,{style:t.labelStyle,useHtmlLabels:o}):f.node().appendChild(u.createLabel$1(t.labelText,t.labelStyle,void 0,!0));let d=g.getBBox();if(i.evaluate(n.flowchart.htmlLabels)){const l=g.children[0],c=i.select(g);d=l.getBoundingClientRect(),c.attr("width",d.width),c.attr("height",d.height)}const h=0*t.padding,$=h/2,y=t.width<=d.width+h?d.width+h:t.width;t.width<=d.width+h?t.diff=(d.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,i.log$1.trace("Data ",t,JSON.stringify(t)),s.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-y/2).attr("y",t.y-t.height/2-$).attr("width",y).attr("height",t.height+h);const{subGraphTitleTopMargin:N}=u.getSubGraphTitleMargins(n);o?f.attr("transform",`translate(${t.x-d.width/2}, ${t.y-t.height/2+N})`):f.attr("transform",`translate(${t.x}, ${t.y-t.height/2+N})`);const b=s.node().getBBox();return t.width=b.width,t.height=b.height,t.intersect=function(l){return u.intersectRect$1(t,l)},r},V=(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,o=s/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-o).attr("y",t.y-t.height/2-o).attr("width",t.width+s).attr("height",t.height+s).attr("fill","none");const f=r.node().getBBox();return t.width=f.width,t.height=f.height,t.intersect=function(g){return u.intersectRect$1(t,g)},n},z=(e,t)=>{const n=i.getConfig(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),s=r.insert("rect",":first-child"),o=r.insert("g").attr("class","cluster-label"),f=r.append("rect"),g=o.node().appendChild(u.createLabel$1(t.labelText,t.labelStyle,void 0,!0));let d=g.getBBox();if(i.evaluate(n.flowchart.htmlLabels)){const l=g.children[0],c=i.select(g);d=l.getBoundingClientRect(),c.attr("width",d.width),c.attr("height",d.height)}d=g.getBBox();const h=0*t.padding,$=h/2,y=t.width<=d.width+t.padding?d.width+t.padding:t.width;t.width<=d.width+t.padding?t.diff=(d.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,s.attr("class","outer").attr("x",t.x-y/2-$).attr("y",t.y-t.height/2-$).attr("width",y+h).attr("height",t.height+h),f.attr("class","inner").attr("x",t.x-y/2-$).attr("y",t.y-t.height/2-$+d.height-1).attr("width",y+h).attr("height",t.height+h-d.height-3);const{subGraphTitleTopMargin:N}=u.getSubGraphTitleMargins(n);o.attr("transform",`translate(${t.x-d.width/2}, ${t.y-t.height/2-t.padding/3+(i.evaluate(n.flowchart.htmlLabels)?5:3)+N})`);const b=s.node().getBBox();return t.height=b.height,t.intersect=function(l){return u.intersectRect$1(t,l)},r},W=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),s=0*t.padding,o=s/2;r.attr("class","divider").attr("x",t.x-t.width/2-o).attr("y",t.y-t.height/2).attr("width",t.width+s).attr("height",t.height+s);const f=r.node().getBBox();return t.width=f.width,t.height=f.height,t.diff=-t.padding/2,t.intersect=function(g){return u.intersectRect$1(t,g)},n},K={rect:H,roundedWithTitle:z,noteGroup:V,divider:W};let R={};const Q=(e,t)=>{i.log$1.trace("Inserting cluster");const n=t.shape||"rect";R[t.id]=K[n](e,t)},Y=()=>{R={}},L=async(e,t,n,r,s,o)=>{i.log$1.info("Graph in recursive render: XXX",x(t),s);const f=t.graph().rankdir;i.log$1.trace("Dir in recursive render - dir:",f);const g=e.insert("g").attr("class","root");t.nodes()?i.log$1.info("Recursive render XXX",t.nodes()):i.log$1.info("No nodes found for",t),t.edges().length>0&&i.log$1.trace("Recursive edges",t.edge(t.edges()[0]));const d=g.insert("g").attr("class","clusters"),h=g.insert("g").attr("class","edgePaths"),$=g.insert("g").attr("class","edgeLabels"),y=g.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(l){const c=t.node(l);if(s!==void 0){const v=JSON.parse(JSON.stringify(s.clusterData));i.log$1.info("Setting data for cluster XXX (",l,") ",v,s),t.setNode(s.id,v),t.parent(l)||(i.log$1.trace("Setting parent",l,s.id),t.setParent(l,s.id,v))}if(i.log$1.info("(Insert) Node XXX"+l+": "+JSON.stringify(t.node(l))),c&&c.clusterNode){i.log$1.info("Cluster identified",l,c.width,t.node(l));const v=await L(y,c.graph,n,r,t.node(l),o),E=v.elem;u.updateNodeBounds(c,E),c.diff=v.diff||0,i.log$1.info("Node bounds (abc123)",l,c,c.width,c.x,c.y),u.setNodeElem(E,c),i.log$1.warn("Recursive render complete ",E,c)}else t.children(l).length>0?(i.log$1.info("Cluster - the non recursive path XXX",l,c.id,c,t),i.log$1.info(C(c.id,t)),a[c.id]={id:C(c.id,t),node:c}):(i.log$1.info("Node - the non recursive path",l,c.id,c),await u.insertNode(y,t.node(l),f))})),t.edges().forEach(function(l){const c=t.edge(l.v,l.w,l.name);i.log$1.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(l)),i.log$1.info("Edge "+l.v+" -> "+l.w+": ",l," ",JSON.stringify(t.edge(l))),i.log$1.info("Fix",a,"ids:",l.v,l.w,"Translating: ",a[l.v],a[l.w]),u.insertEdgeLabel($,c)}),t.edges().forEach(function(l){i.log$1.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(l))}),i.log$1.info("#############################################"),i.log$1.info("### Layout ###"),i.log$1.info("#############################################"),i.log$1.info(t),J.layout(t),i.log$1.info("Graph after layout:",x(t));let N=0;const{subGraphTitleTotalMargin:b}=u.getSubGraphTitleMargins(o);return A(t).forEach(function(l){const c=t.node(l);i.log$1.info("Position "+l+": "+JSON.stringify(t.node(l))),i.log$1.info("Position "+l+": ("+c.x,","+c.y,") width: ",c.width," height: ",c.height),c&&c.clusterNode?(c.y+=b,u.positionNode(c)):t.children(l).length>0?(c.height+=b,Q(d,c),a[c.id].node=c):(c.y+=b/2,u.positionNode(c))}),t.edges().forEach(function(l){const c=t.edge(l);i.log$1.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(c),c),c.points.forEach(E=>E.y+=b/2);const v=u.insertEdge(h,l,c,a,n,t,r);u.positionEdgeLabel(c,v)}),t.nodes().forEach(function(l){const c=t.node(l);i.log$1.info(l,c.type,c.diff),c.type==="group"&&(N=c.diff)}),{elem:g,diff:N}},Z=async(e,t,n,r,s)=>{u.insertMarkers$1(e,n,r,s),u.clear$1(),u.clear(),Y(),q(),i.log$1.warn("Graph at first:",JSON.stringify(x(t))),U(t),i.log$1.warn("Graph after:",JSON.stringify(x(t)));const o=i.getConfig();await L(e,t,r,s,void 0,o)};exports.render=Z;
@@ -1,4 +1,4 @@
1
- import "./layers.Bun9o3g2.js";
1
+ import "./layers.CtNZLIdk.js";
2
2
  var a = { paste: "Liitä", pasteAsPlaintext: "Liitä pelkkänä tekstinä", pasteCharts: "Liitä kaaviot", selectAll: "Valitse kaikki", multiSelect: "Lisää kohde valintaan", moveCanvas: "Siirrä piirtoaluetta", cut: "Leikkaa", copy: "Kopioi", copyAsPng: "Kopioi leikepöydälle PNG-tiedostona", copyAsSvg: "Kopioi leikepöydälle SVG-tiedostona", copyText: "Kopioi tekstinä", copySource: "", convertToCode: "", bringForward: "Tuo eteenpäin", sendToBack: "Vie taakse", bringToFront: "Tuo eteen", sendBackward: "Vie taaksepäin", delete: "Poista", copyStyles: "Kopioi tyyli", pasteStyles: "Liitä tyyli", stroke: "Piirto", background: "Tausta", fill: "Täyttö", strokeWidth: "Viivan leveys", strokeStyle: "Viivan tyyli", strokeStyle_solid: "Yhtenäinen", strokeStyle_dashed: "Katkoviiva", strokeStyle_dotted: "Pisteviiva", sloppiness: "Viivan tarkkuus", opacity: "Peittävyys", textAlign: "Tekstin tasaus", edges: "Reunat", sharp: "Terävä", round: "Pyöristetty", arrowheads: "Nuolenkärjet", arrowhead_none: "Ei mitään", arrowhead_arrow: "Nuoli", arrowhead_bar: "Tasapää", arrowhead_circle: "", arrowhead_circle_outline: "", arrowhead_triangle: "Kolmio", arrowhead_triangle_outline: "", arrowhead_diamond: "", arrowhead_diamond_outline: "", fontSize: "Kirjasinkoko", fontFamily: "Kirjasintyyppi", addWatermark: 'Lisää "Tehty Excalidrawilla"', handDrawn: "Käsinpiirretty", normal: "Tavallinen", code: "Koodi", small: "Pieni", medium: "Keskikoko", large: "Suuri", veryLarge: "Erittäin suuri", solid: "Yhtenäinen", hachure: "Vinoviivoitus", zigzag: "", crossHatch: "Ristiviivoitus", thin: "Ohut", bold: "Lihavoitu", left: "Vasen", center: "Keskitä", right: "Oikea", extraBold: "Erittäin lihavoitu", architect: "Arkkitehti", artist: "Taiteilija", cartoonist: "Sarjakuva", fileTitle: "Tiedostonimi", colorPicker: "Värin valinta", canvasColors: "Käytössä piirtoalueella", canvasBackground: "Piirtoalueen tausta", drawingCanvas: "Piirtoalue", layers: "Tasot", actions: "Toiminnot", language: "Kieli", liveCollaboration: "Live Yhteistyö...", duplicateSelection: "Monista", untitled: "Nimetön", name: "Nimi", yourName: "Nimesi", madeWithExcalidraw: "Tehty Excalidrawilla", group: "Ryhmitä valinta", ungroup: "Pura valittu ryhmä", collaborators: "Yhteistyökumppanit", showGrid: "Näytä ruudukko", addToLibrary: "Lisää kirjastoon", removeFromLibrary: "Poista kirjastosta", libraryLoadingMessage: "Ladataan kirjastoa…", libraries: "Selaa kirjastoja", loadingScene: "Ladataan työtä…", align: "Tasaa", alignTop: "Tasaa ylös", alignBottom: "Tasaa alas", alignLeft: "Tasaa vasemmalle", alignRight: "Tasaa oikealle", centerVertically: "Keskitä pystysuunnassa", centerHorizontally: "Keskitä vaakasuunnassa", distributeHorizontally: "Jaa vaakasuunnassa", distributeVertically: "Jaa pystysuunnassa", flipHorizontal: "Käännä vaakasuunnassa", flipVertical: "Käännä pystysuunnassa", viewMode: "Katselutila", share: "Jaa", showStroke: "Näytä viivan värin valitsin", showBackground: "Näytä taustavärin valitsin", toggleTheme: "Vaihda teema", personalLib: "Oma kirjasto", excalidrawLib: "Excalidraw kirjasto", decreaseFontSize: "Pienennä kirjasinkokoa", increaseFontSize: "Kasvata kirjasinkokoa", unbindText: "Irroita teksti", bindText: "Kiinnitä teksti säiliöön", createContainerFromText: "", link: { edit: "Muokkaa linkkiä", editEmbed: "", create: "Luo linkki", createEmbed: "", label: "Linkki", labelEmbed: "", empty: "" }, lineEditor: { edit: "Muokkaa riviä", exit: "Poistu rivieditorista" }, elementLock: { lock: "Lukitse", unlock: "Poista lukitus", lockAll: "Lukitse kaikki", unlockAll: "Poista lukitus kaikista" }, statusPublished: "Julkaistu", sidebarLock: "Pidä sivupalkki avoinna", selectAllElementsInFrame: "", removeAllElementsFromFrame: "", eyeDropper: "", textToDiagram: "", prompt: "" }, i = { noItems: "Kirjastossa ei ole vielä yhtään kohdetta...", hint_emptyLibrary: "Valitse lisättävä kohde piirtoalueelta, tai asenna alta julkinen kirjasto.", hint_emptyPrivateLibrary: "Valitse lisättävä kohde piirtoalueelta." }, e = { clearReset: "Tyhjennä piirtoalue", exportJSON: "Vie tiedostoon", exportImage: "Vie kuva...", export: "Tallenna nimellä...", copyToClipboard: "Kopioi leikepöydälle", save: "Tallenna nykyiseen tiedostoon", saveAs: "Tallenna nimellä", load: "Avaa", getShareableLink: "Hae jaettava linkki", close: "Sulje", selectLanguage: "Valitse kieli", scrollBackToContent: "Näytä sisältö", zoomIn: "Lähennä", zoomOut: "Loitonna", resetZoom: "Nollaa suurennuksen taso", menu: "Valikko", done: "Valmis", edit: "Muokkaa", undo: "Kumoa", redo: "Tee uudelleen", resetLibrary: "Tyhjennä kirjasto", createNewRoom: "Luo huone", fullScreen: "Koko näyttö", darkMode: "Tumma tila", lightMode: "Vaalea tila", zenMode: "Zen-tila", objectsSnapMode: "", exitZenMode: "Poistu zen-tilasta", cancel: "Peruuta", clear: "Pyyhi", remove: "Poista", embed: "", publishLibrary: "Julkaise", submit: "Lähetä", confirm: "Vahvista", embeddableInteractionButton: "" }, t = { clearReset: "Tämä tyhjentää koko piirtoalueen. Jatketaanko?", couldNotCreateShareableLink: "Jaettavan linkin luominen epäonnistui.", couldNotCreateShareableLinkTooBig: "Jaettavaa linkkiä ei voitu luoda: teos on liian suuri", couldNotLoadInvalidFile: "Virheellistä tiedostoa ei voitu avata", importBackendFailed: "Palvelimelta tuonti epäonnistui.", cannotExportEmptyCanvas: "Tyhjää piirtoaluetta ei voi viedä.", couldNotCopyToClipboard: "Leikepöydälle vieminen epäonnistui.", decryptFailed: "Salauksen purkaminen epäonnistui.", uploadedSecurly: "Lähetys on turvattu päästä-päähän-salauksella. Excalidrawin palvelin ja kolmannet osapuolet eivät voi lukea sisältöä.", loadSceneOverridePrompt: "Ulkopuolisen piirroksen lataaminen korvaa nykyisen sisältösi. Jatketaanko?", collabStopOverridePrompt: `Istunnon lopettaminen korvaa aiemman, paikallisesti tallennetun piirustuksen. Jatketaanko?
3
3
 
4
4
  (Jos haluat säilyttää paikallisesti tallennetun piirustuksen, sulje selaimen välilehti lopettamisen sijaan.)`, errorAddingToLibrary: "Kohdetta ei voitu lisätä kirjastoon", errorRemovingFromLibrary: "Kohdetta ei voitu poistaa kirjastosta", confirmAddLibrary: "Tämä lisää {{numShapes}} muotoa kirjastoosi. Jatketaanko?", imageDoesNotContainScene: "Tämä kuva ei näytä sisältävän piirrostietoja. Oletko ottanut käyttöön piirroksen tallennuksen viennin aikana?", cannotRestoreFromImage: "Teosta ei voitu palauttaa tästä kuvatiedostosta", invalidSceneUrl: "Teosta ei voitu tuoda annetusta URL-osoitteesta. Tallenne on vioittunut, tai osoitteessa ei ole Excalidraw JSON-dataa.", resetLibrary: "Tämä tyhjentää kirjastosi. Jatketaanko?", removeItemsFromsLibrary: "Poista {{count}} kohdetta kirjastosta?", invalidEncryptionKey: "Salausavaimen on oltava 22 merkkiä pitkä. Live-yhteistyö ei ole käytössä.", collabOfflineWarning: `Internet-yhteyttä ei ole saatavilla.