@layers-app/editor 0.7.48 → 0.7.49

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 (219) hide show
  1. package/README.md +4 -14
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.d.ts +17 -11
  4. package/dist/index.js +2 -2
  5. package/dist/{layers.DiHUvl0o.js → layers.2sxk2h9p.js} +1 -1
  6. package/dist/{layers.DEjh8HqA.js → layers.3fhqDXGQ.js} +1 -1
  7. package/dist/{layers.yZYCg_En.js → layers.6LJL3iMX.js} +1 -1
  8. package/dist/{layers.BsoRVzDP.js → layers.6lVF0vjp.js} +2 -2
  9. package/dist/{layers.B9vco1Tm.js → layers.6vQhCrMO.js} +1 -1
  10. package/dist/{layers.BEXIxuBF.js → layers.8jPh7nZ7.js} +1 -1
  11. package/dist/{layers.Dpw_9ymJ.js → layers.9YYn67yF.js} +1 -1
  12. package/dist/{layers.C4DDZaZs.js → layers.9o0Jdg-U.js} +1 -1
  13. package/dist/{layers.CGoSj1av.js → layers.B0L7owR9.js} +5 -5
  14. package/dist/{layers.DOq-L3gG.js → layers.B124trWB.js} +1 -1
  15. package/dist/{layers.Ctocb96g.js → layers.B4bJKqOt.js} +1 -1
  16. package/dist/{layers.DBmtL6ZZ.js → layers.B50R5EaK.js} +1 -1
  17. package/dist/{layers.rUzSMgAT.js → layers.B74E_Mhu.js} +1 -1
  18. package/dist/{layers.CmF7I89w.js → layers.B7c71bAt.js} +1 -1
  19. package/dist/{layers.LiJvf-Xh.js → layers.B96L1hG2.js} +1 -1
  20. package/dist/{layers.CX1TPIiJ.js → layers.B9Rx2foX.js} +4 -4
  21. package/dist/{layers._beiaL7T.js → layers.BB461pvX.js} +1 -1
  22. package/dist/{layers.BdBmAIrs.js → layers.BBix4GLX.js} +2 -2
  23. package/dist/{layers.BvhD2Hex.js → layers.BKyEhTMV.js} +1 -1
  24. package/dist/{layers.BE1X7OZN.js → layers.BLUQsSE-.js} +1 -1
  25. package/dist/{layers.Cl2CJFNx.js → layers.BNuBcDIb.js} +1 -1
  26. package/dist/{layers.B3ebXuRR.js → layers.BPHAY1-9.js} +4 -4
  27. package/dist/{layers.OxWb2lcf.js → layers.BQ2I5acy.js} +1 -1
  28. package/dist/{layers.Bl4j3Wpr.js → layers.BRWyWzwh.js} +1 -1
  29. package/dist/{layers.9Ei77wJG.js → layers.BS6VvqxC.js} +1 -1
  30. package/dist/{layers.ClLKdjmI.js → layers.BTbPm8pR.js} +1 -1
  31. package/dist/{layers.CMiTJnad.js → layers.BV-egvVp.js} +1 -1
  32. package/dist/{layers.DIa1shbs.js → layers.BVr10oU3.js} +1 -1
  33. package/dist/{layers.C_poBEYa.js → layers.BWw1mK7X.js} +1 -1
  34. package/dist/{layers.CH7sIJoO.js → layers.BXIUEFQw.js} +1 -1
  35. package/dist/{layers.BDlIrLZ6.js → layers.BXS2uNb0.js} +1 -1
  36. package/dist/{layers.CJFGEsgQ.js → layers.BaGJS1l7.js} +1 -1
  37. package/dist/{layers.BtPwy6-y.js → layers.Bc8eVF2x.js} +1 -1
  38. package/dist/{layers.BAdbzzKU.js → layers.BdYtCOnE.js} +1 -1
  39. package/dist/{layers.C-9tvKsH.js → layers.Be6CBZHC.js} +1 -1
  40. package/dist/{layers.CFKLwcKm.js → layers.BeKf3u57.js} +1 -1
  41. package/dist/{layers.Cu_3bkpd.js → layers.BgQO_ULY.js} +1 -1
  42. package/dist/{layers.DqkMTScX.js → layers.BhDueLVc.js} +1 -1
  43. package/dist/{layers.CW3RPoeB.js → layers.BhDyoOpp.js} +1 -1
  44. package/dist/{layers.DhkSgCGH.js → layers.BiakMAVz.js} +1 -1
  45. package/dist/{layers.CFs5s8T3.js → layers.Bpw9JnCv.js} +1 -1
  46. package/dist/{layers.CU6rRFWz.js → layers.Bq2f36dx.js} +1 -1
  47. package/dist/{layers.Bp180gHt.js → layers.BsA7eoz8.js} +1 -1
  48. package/dist/{layers.E-_P3Hgt.js → layers.BsxmtGhi.js} +1 -1
  49. package/dist/{layers.CRxZsox1.js → layers.BszXwlqm.js} +1 -1
  50. package/dist/{layers.C_H8CF1f.js → layers.Bt2v9ZR3.js} +1 -1
  51. package/dist/{layers.CPkIaDFg.js → layers.BtKGefaP.js} +1 -1
  52. package/dist/{layers.-XXFcZ-Q.js → layers.BtLFUN9L.js} +1 -1
  53. package/dist/{layers.CNfAcY6Y.js → layers.BtTn3DWi.js} +1 -1
  54. package/dist/{layers.DSMzl4c7.js → layers.BtWDGtLj.js} +1 -1
  55. package/dist/{layers.BOm3l9Y2.js → layers.Bw7qkQsX.js} +1 -1
  56. package/dist/{layers.BE5c8LWk.js → layers.BwxPrRZD.js} +1 -1
  57. package/dist/{layers.C239vlHa.js → layers.Bxcxrsy_.js} +3 -3
  58. package/dist/{layers.sHJHq9SR.js → layers.C-XVPziT.js} +1 -1
  59. package/dist/{layers.DHWPE8JP.js → layers.C3E0dLDD.js} +1 -1
  60. package/dist/{layers.BGNKNfpx.js → layers.C3ctqQ_d.js} +4 -4
  61. package/dist/{layers.CzBOl45X.js → layers.C57RR3BP.js} +1 -1
  62. package/dist/{layers.DwKuuHvW.js → layers.C5TvEQpd.js} +1 -1
  63. package/dist/{layers.DvEpZu0k.js → layers.C5XJmJhy.js} +5 -5
  64. package/dist/{layers.48nWXuMb.js → layers.C5XRUPsP.js} +3 -3
  65. package/dist/{layers.D9Q1WK3D.js → layers.C6lFx_9o.js} +1 -1
  66. package/dist/{layers.Dsyqs-lC.js → layers.C6vIa6gn.js} +1 -1
  67. package/dist/{layers.9vsoRdca.js → layers.CAXlMwAW.js} +1 -1
  68. package/dist/{layers.Ds-YCD3f.js → layers.CBwlQeze.js} +1 -1
  69. package/dist/{layers.DMQHD7SZ.js → layers.CCVxi5hB.js} +1 -1
  70. package/dist/{layers.Bm3vF-Ge.js → layers.CDVEdgbo.js} +1 -1
  71. package/dist/{layers.DSXwzG0l.js → layers.CEWorf-C.js} +1 -1
  72. package/dist/{layers.CefLOoC8.js → layers.CFHq5644.js} +1 -1
  73. package/dist/{layers.i2bcEL4B.js → layers.CG7r3vnU.js} +1 -1
  74. package/dist/{layers.iSx5HVBW.js → layers.CGJlI-Xk.js} +1 -1
  75. package/dist/{layers.bdZaUQNB.js → layers.CHh5bEfC.js} +1 -1
  76. package/dist/{layers.QOZfLJOU.js → layers.CI55as3L.js} +4 -4
  77. package/dist/{layers.6JZIYhnG.js → layers.CIleDfVS.js} +4 -4
  78. package/dist/{layers.BXwHF1c0.js → layers.CImHWuWy.js} +1 -1
  79. package/dist/{layers.CqHFUbCh.js → layers.CJaUnfvI.js} +1 -1
  80. package/dist/{layers.fCcqSwty.js → layers.CKmkJeNx.js} +1 -1
  81. package/dist/{layers.DsQYlSSa.js → layers.CLCDYoNw.js} +1 -1
  82. package/dist/layers.CLLW_-MM.js +1 -0
  83. package/dist/{layers.DIhuprWj.js → layers.CLSq6d5G.js} +1 -1
  84. package/dist/{layers.q8HcJw1z.js → layers.CPK-8aJ9.js} +1 -1
  85. package/dist/{layers.vO27jqdn.js → layers.CQrT2kiR.js} +1 -1
  86. package/dist/layers.CROEZPe3.js +1 -0
  87. package/dist/{layers.D0dYIayl.js → layers.CTizu7k3.js} +1 -1
  88. package/dist/{layers.BKqs5g_B.js → layers.CTtXyJIC.js} +1 -1
  89. package/dist/{layers.BHstW68e.js → layers.CUFmR0uO.js} +3 -3
  90. package/dist/{layers.DtEAEu5Y.js → layers.CUQCdPfS.js} +1 -1
  91. package/dist/{layers.DQ3x1v0k.js → layers.CXwIo_E2.js} +3 -3
  92. package/dist/{layers.DhlqqsI-.js → layers.Cbh8488l.js} +1 -1
  93. package/dist/{layers.D5T2vOzx.js → layers.CeWHZgFl.js} +4 -4
  94. package/dist/{layers.CtAhktPZ.js → layers.ChByNJR4.js} +1 -1
  95. package/dist/{layers.Bp-6Ampr.js → layers.CiayK_jX.js} +1 -1
  96. package/dist/{layers.CKTftm3f.js → layers.CiloWOji.js} +1 -1
  97. package/dist/{layers.DnRoER-T.js → layers.CivvhzLf.js} +1 -1
  98. package/dist/{layers.B2hK-O3y.js → layers.CjKkiQ-5.js} +1 -1
  99. package/dist/{layers.Df7-26ey.js → layers.Cm1JRCTb.js} +4 -4
  100. package/dist/{layers.BXVqLjUh.js → layers.Cn0EJP31.js} +1 -1
  101. package/dist/{layers.CZpHZoB0.js → layers.CoUMygdc.js} +1 -1
  102. package/dist/{layers.ClVfKZ9h.js → layers.CqJ3U1Dv.js} +1 -1
  103. package/dist/{layers.Dfl1_GY-.js → layers.CrTPxY8M.js} +1 -1
  104. package/dist/{layers.DbRchKwe.js → layers.CrhlCVRH.js} +1 -1
  105. package/dist/{layers.CcZMrh49.js → layers.CvKfVfgR.js} +1 -1
  106. package/dist/{layers.4NkfZAG8.js → layers.Cw1UVYRF.js} +1 -1
  107. package/dist/{layers.BrFRnEbi.js → layers.Cw6AQ1zH.js} +1 -1
  108. package/dist/{layers.CUuGcjpi.js → layers.Cw76BJN2.js} +1 -1
  109. package/dist/{layers.BZbUfGYp.js → layers.CxuRP1lw.js} +1 -1
  110. package/dist/{layers.lgAtpBQI.js → layers.Cyu04oeV.js} +1 -1
  111. package/dist/{layers.By9AhVvm.js → layers.CzYE0Ooc.js} +1 -1
  112. package/dist/{layers.D8gdqeYc.js → layers.D16HelAS.js} +2 -2
  113. package/dist/{layers.BtYjjZLM.js → layers.D1BZqHRU.js} +1 -1
  114. package/dist/{layers.DwrUaEvN.js → layers.D2PgPKOo.js} +1 -1
  115. package/dist/{layers.CnmwOTKT.js → layers.D5Kikhmz.js} +3 -3
  116. package/dist/{layers.CbWg4Qj_.js → layers.D5vKDO3Z.js} +1 -1
  117. package/dist/{layers.lY3SrA49.js → layers.D634RCv2.js} +1 -1
  118. package/dist/{layers.DcGOrQq5.js → layers.D6fxuXiV.js} +1 -1
  119. package/dist/{layers.CXmM9Bvj.js → layers.D77Lwa5B.js} +1 -1
  120. package/dist/{layers.tjc2yfO8.js → layers.D9Aq-VH-.js} +1 -1
  121. package/dist/{layers.Ckdux2po.js → layers.DAN-8W9x.js} +6 -6
  122. package/dist/{layers.qaJdLFHI.js → layers.DB59_4ZT.js} +1 -1
  123. package/dist/{layers.CJb1-QAi.js → layers.DBKCfxsn.js} +1 -1
  124. package/dist/{layers.R8OXBVYp.js → layers.DC44PHoe.js} +1 -1
  125. package/dist/{layers.BM2O77Wh.js → layers.DDIKIPEl.js} +1 -1
  126. package/dist/{layers.BeIBKBJG.js → layers.DDNSbyH9.js} +1 -1
  127. package/dist/{layers.a_6-TFT0.js → layers.DE-1MOCW.js} +1 -1
  128. package/dist/{layers.Dj-z0EfD.js → layers.DEJLOhUD.js} +1 -1
  129. package/dist/{layers.DnNdcruU.js → layers.DF5Jf3M9.js} +1 -1
  130. package/dist/{layers.CAo4nRSe.js → layers.DFEtOzCz.js} +1 -1
  131. package/dist/{layers.B9jC1uEF.js → layers.DFiKSx4e.js} +1 -1
  132. package/dist/{layers.CYHiWIYN.js → layers.DGwBwWGl.js} +3 -3
  133. package/dist/layers.DJtJoK2T.js +8 -0
  134. package/dist/layers.DJugFK-r.js +129 -0
  135. package/dist/{layers.C_Z4dR-0.js → layers.DJuxVMes.js} +1 -1
  136. package/dist/{layers.DjzsPlhY.js → layers.DLOvj2ew.js} +1 -1
  137. package/dist/{layers.BCmyFF5n.js → layers.DLmk4e9A.js} +1 -1
  138. package/dist/{layers.C_8cg569.js → layers.DMRUFJsX.js} +1 -1
  139. package/dist/{layers.rddzpnjy.js → layers.DO0X6c0O.js} +2 -2
  140. package/dist/{layers.DHoGHrwb.js → layers.DPlZKJgj.js} +3 -3
  141. package/dist/{layers.RZvZoVxE.js → layers.DQxhNW5R.js} +1 -1
  142. package/dist/layers.DReq7_oC.js +296 -0
  143. package/dist/{layers.Umldr18w.js → layers.DT9rsUtv.js} +7 -7
  144. package/dist/{layers.BHGjfW2R.js → layers.DU05EaWA.js} +3 -3
  145. package/dist/{layers.DL3G4Rrb.js → layers.DUEmMZLx.js} +1 -1
  146. package/dist/{layers.8L97LNWM.js → layers.DWAsYusl.js} +1 -1
  147. package/dist/{layers.DXWOVogE.js → layers.DWYk3UK6.js} +1 -1
  148. package/dist/{layers.CzP0RBWK.js → layers.DWhMR9ZJ.js} +1 -1
  149. package/dist/{layers.DR3nuNQY.js → layers.DXS1j64l.js} +4 -4
  150. package/dist/{layers.BLa-XNid.js → layers.DYURS4FP.js} +1 -1
  151. package/dist/{layers.Bp2T5L9r.js → layers.D_RUDzWv.js} +8 -8
  152. package/dist/layers.DbVdGKld.js +1 -0
  153. package/dist/{layers.Ct7Z5o-U.js → layers.DcAdQwtK.js} +1 -1
  154. package/dist/{layers.D6CzgZCn.js → layers.DcMkjKaG.js} +1 -1
  155. package/dist/{layers.orP2yP91.js → layers.DgvrVyqi.js} +3 -3
  156. package/dist/{layers._d6q9aen.js → layers.Dhq37bku.js} +1 -1
  157. package/dist/{layers.C5kfbdNQ.js → layers.DjkEwMtb.js} +3 -3
  158. package/dist/{layers.BFRwalLF.js → layers.Dl8xQWMG.js} +1 -1
  159. package/dist/{layers.CaPMI1KH.js → layers.DlufDKX8.js} +1 -1
  160. package/dist/{layers.DJYCnlhb.js → layers.DnJXYiZP.js} +1 -1
  161. package/dist/{layers.R3a4GOcm.js → layers.DnXs_pNB.js} +1 -1
  162. package/dist/{layers.E2Pg6Xkc.js → layers.Do15drP1.js} +1 -1
  163. package/dist/{layers.Bkv-oShk.js → layers.DokfH0hd.js} +1 -1
  164. package/dist/{layers.BRbQRhez.js → layers.DpNZa-jp.js} +1 -1
  165. package/dist/{layers.n5OStkpA.js → layers.Dr3MCGOM.js} +3 -3
  166. package/dist/{layers.DJ64BwjI.js → layers.DrQ8hvnX.js} +1 -1
  167. package/dist/{layers.DsjBnsF_.js → layers.DsptZoFe.js} +1 -1
  168. package/dist/{layers.CTAkgg4R.js → layers.DtD3skoW.js} +1 -1
  169. package/dist/{layers.CCqA6oPh.js → layers.Dtms4fW5.js} +1 -1
  170. package/dist/{layers.SdU27KL4.js → layers.Du0f9MLd.js} +1 -1
  171. package/dist/{layers.BTYE7zXl.js → layers.DuZA4Xas.js} +1 -1
  172. package/dist/{layers.zF6RU9h5.js → layers.Dwh8gx1i.js} +1 -1
  173. package/dist/{layers.KFn2whtk.js → layers.DwizeusR.js} +1 -1
  174. package/dist/layers.DyL1tlRE.js +276 -0
  175. package/dist/{layers.my0yWZmR.js → layers.DyRolv1I.js} +1 -1
  176. package/dist/{layers.DUWcbGsB.js → layers.DzFqkluR.js} +4 -4
  177. package/dist/{layers.Cn30_EV4.js → layers.DzSq4y89.js} +2 -2
  178. package/dist/{layers.BZO72u-D.js → layers.Gsg2l9lj.js} +1 -1
  179. package/dist/{layers.D5n5uB-V.js → layers.H6NhhT0Z.js} +1 -1
  180. package/dist/layers.MmOx3Q5y.js +28376 -0
  181. package/dist/{layers.3jBLdifJ.js → layers.NYVxQ2J0.js} +1 -1
  182. package/dist/{layers.BW7u2_1T.js → layers.Oz9AvXqT.js} +3 -3
  183. package/dist/layers.TMqEBNpX.js +1 -0
  184. package/dist/{layers.DUGRqDUB.js → layers.Te010ICg.js} +24 -24
  185. package/dist/{layers.CitJ-LcP.js → layers.VN0Yeq2V.js} +1 -1
  186. package/dist/{layers.CvFNr8Uu.js → layers.WnvKMTKL.js} +1 -1
  187. package/dist/{layers.ovEMwqYP.js → layers.WxQ6m-UP.js} +1 -1
  188. package/dist/{layers.BjauJJl_.js → layers.X0_Gx5lN.js} +1 -1
  189. package/dist/{layers.BYA27mAA.js → layers.Y9FRICz5.js} +1 -1
  190. package/dist/{layers.Dop4IJqp.js → layers.ZGwk_KWb.js} +1 -1
  191. package/dist/{layers.DBYWjvtj.js → layers.blh6SXpL.js} +1 -1
  192. package/dist/{layers.DL2VBsfE.js → layers.d5j1lEFQ.js} +1 -1
  193. package/dist/{layers.CfGk77zR.js → layers.eGX8dSo1.js} +1 -1
  194. package/dist/{layers.B4eocW2U.js → layers.eIIS5NDC.js} +1 -1
  195. package/dist/{layers.Cye7d0Ye.js → layers.fxqbBEns.js} +1 -1
  196. package/dist/layers.hAT_4n_i.js +6 -0
  197. package/dist/{layers.CRYQyJW8.js → layers.jPwVCOt0.js} +1 -1
  198. package/dist/{layers.BAxiKghG.js → layers.jgfr1mFT.js} +2 -2
  199. package/dist/{layers.COeBHfJh.js → layers.lMAyLkuo.js} +1 -1
  200. package/dist/{layers.DngDRzM2.js → layers.lX16IRwc.js} +1 -1
  201. package/dist/{layers.BKutBTDw.js → layers.oFuJymzn.js} +1 -1
  202. package/dist/{layers.DQD1IQ6W.js → layers.p872qi0O.js} +1 -1
  203. package/dist/{layers.DJuBjYUv.js → layers.pHpJOB6N.js} +1 -1
  204. package/dist/{layers.CVuk5gp9.js → layers.pgbpWh46.js} +1 -1
  205. package/dist/{layers.Upsmcdyi.js → layers.pixPTfNv.js} +1 -1
  206. package/dist/{layers.BLqn32Nb.js → layers.rmoiicvu.js} +1 -1
  207. package/dist/{layers.BRWktvhi.js → layers.rvTNl4lr.js} +1 -1
  208. package/dist/{layers.Bz2bAm_o.js → layers.ssiSYLMt.js} +1 -1
  209. package/dist/{layers.CI9mIisM.js → layers.xcmbrsYu.js} +1 -1
  210. package/dist/{layers.BPwJ27pe.js → layers.xtkyz0Y7.js} +2 -2
  211. package/package.json +7 -13
  212. package/dist/layers.8I_XubBt.js +0 -1
  213. package/dist/layers.BFl0k28S.js +0 -6
  214. package/dist/layers.BSgSDW2J.js +0 -1
  215. package/dist/layers.CCNu5Rkf.js +0 -1
  216. package/dist/layers.CFSawE7c.js +0 -8
  217. package/dist/layers.CM9U_WY6.js +0 -304
  218. package/dist/layers.G1XGzBxR.js +0 -297
  219. package/dist/layers.fldW-Ogr.js +0 -30328
package/README.md CHANGED
@@ -153,7 +153,6 @@ Use **StylesProvider** to add styling to your HTML content.
153
153
 
154
154
  To start working with image uploads, use the **fetchUploadMedia** function, which takes three parameters: **file**, **success**, and **error**. After successfully uploading the image to your service, you should call the **success** function and pass two required arguments: the **URL** of the image and its **ID**.
155
155
  Optional: You can also pass two optional parameters: **signal** and **onProgress**. The **signal** allows you to cancel an ongoing upload using an AbortController, and **onProgress** provides the current upload progress in percent — useful for displaying a progress bar or loading state.
156
-
157
156
  ```
158
157
  const fetchUploadMedia = async (
159
158
  file: File,
@@ -371,9 +370,9 @@ For uploading a file or audio, you might need the third parameter "data".
371
370
  }
372
371
  };
373
372
  ```
374
-
375
373
  </details>
376
374
 
375
+
377
376
  <details>
378
377
  <summary>
379
378
  🤖 AI
@@ -381,6 +380,7 @@ For uploading a file or audio, you might need the third parameter "data".
381
380
 
382
381
  ## Connect AI
383
382
 
383
+
384
384
  ```
385
385
  const fetchPromptResult = async (
386
386
  prompt: string,
@@ -423,9 +423,9 @@ For uploading a file or audio, you might need the third parameter "data".
423
423
  fetchPromptResult={fetchPromptResult}
424
424
  />
425
425
  ```
426
-
427
426
  </details>
428
427
 
428
+
429
429
  <details>
430
430
  <summary>
431
431
  📊 Analytics (onTrack)
@@ -622,7 +622,6 @@ npm run test-unit-watch
622
622
  ```
623
623
 
624
624
  ### Unit Test Files Location
625
-
626
625
  - `__tests__/unit/` - Unit test files
627
626
  - Test files follow the pattern: `*.test.ts` or `*.test.tsx`
628
627
 
@@ -647,13 +646,11 @@ npm run test:e2e:headed
647
646
  ```
648
647
 
649
648
  ### E2E Test Files Location
650
-
651
649
  - `__tests__/e2e/` - End-to-end test files
652
650
  - `__tests__/regression/` - Regression test files
653
651
  - Test files follow the pattern: `*.spec.js`, `*.spec.mjs`, or `*.spec.ts`
654
652
 
655
653
  ### Browser Support
656
-
657
654
  - **WebKit** (Safari) - Primary browser for CI/CD
658
655
  - **Chromium** and **Firefox** - Available for local testing
659
656
 
@@ -673,7 +670,6 @@ npm run start-test-server
673
670
  ## Test Configuration
674
671
 
675
672
  ### Playwright Configuration
676
-
677
673
  - **Config file**: `playwright.config.js`
678
674
  - **Test directory**: `./__tests__/e2e/`
679
675
  - **Browser**: WebKit (optimized for CI)
@@ -682,7 +678,6 @@ npm run start-test-server
682
678
  - **Retries**: 2 retries in CI, 0 locally
683
679
 
684
680
  ### Vitest Configuration
685
-
686
681
  - **Config file**: `vitest.config.mts`
687
682
  - **Environment**: jsdom
688
683
  - **Setup file**: `vitest.setup.mts`
@@ -691,13 +686,11 @@ npm run start-test-server
691
686
  ## CI/CD Testing
692
687
 
693
688
  Tests run automatically on:
694
-
695
689
  - **Push** to `main` or `dev` branches
696
690
  - **Pull requests** to `main` or `dev` branches
697
691
  - **Manual trigger** via GitHub Actions
698
692
 
699
693
  ### GitHub Actions Workflow
700
-
701
694
  - **File**: `.github/workflows/tests.yml`
702
695
  - **Runner**: Ubuntu Latest
703
696
  - **Node.js**: Version 20
@@ -710,8 +703,7 @@ Tests run automatically on:
710
703
 
711
704
  ```javascript
712
705
  // __tests__/e2e/example.spec.mjs
713
- import { expect, test } from '@playwright/test';
714
-
706
+ import { test, expect } from '@playwright/test';
715
707
  import { focusEditor } from '../utils/index.mjs';
716
708
 
717
709
  test('Can type text in editor', async ({ page }) => {
@@ -779,13 +771,11 @@ Common test utilities are available in `__tests__/utils/index.mjs`:
779
771
  ## Performance
780
772
 
781
773
  ### Test Execution Times
782
-
783
774
  - **Unit Tests**: ~10-30 seconds
784
775
  - **E2E Tests (first run)**: ~3-4 minutes (includes browser installation)
785
776
  - **E2E Tests (cached)**: ~1-2 minutes (uses cached browsers)
786
777
 
787
778
  ### Optimization Features
788
-
789
779
  - **Browser Caching**: Playwright browsers cached in CI
790
780
  - **Single Worker**: Prevents race conditions in CI
791
781
  - **WebKit Only**: Faster than multi-browser matrix