@layers-app/editor 0.7.23 → 0.7.24-beta.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 (235) hide show
  1. package/README.md +14 -4
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.d.ts +7 -79
  4. package/dist/index.js +9 -15
  5. package/dist/{layers.DrEc52LK.js → layers.-58OrB2h.js} +1 -1
  6. package/dist/{layers.RWijwG9P.js → layers.-qmjZJBI.js} +1 -1
  7. package/dist/layers.1s4BbICk.js +1 -0
  8. package/dist/{layers.-cpLB214.js → layers.53hChJFF.js} +6 -6
  9. package/dist/{layers.DnEkqLVp.js → layers.5R_vfSOI.js} +1 -1
  10. package/dist/{layers.DJw2J7bw.js → layers.5U6DsNQ8.js} +6 -9
  11. package/dist/{layers.CMYe7bYN.js → layers.6Og6_hox.js} +1 -1
  12. package/dist/{layers.BazhlVmO.js → layers.8HXImnXe.js} +7 -7
  13. package/dist/{layers.B9UnUe7h.js → layers.90LiGxII.js} +5 -8
  14. package/dist/{layers.NrGhQL7i.js → layers.A6MvZ2Sd.js} +4 -4
  15. package/dist/{layers.DYzee1AM.js → layers.Aw65tqqV.js} +1 -1
  16. package/dist/{layers.gaS1bI-f.js → layers.B-Ftwt7z.js} +1 -1
  17. package/dist/{layers.DT2omWm7.js → layers.B0gBsd1G.js} +15 -18
  18. package/dist/{layers.DXJdiDQR.js → layers.B1l2IEoW.js} +1 -1
  19. package/dist/{layers.BOn89qn9.js → layers.B2SmhxzW.js} +1 -1
  20. package/dist/{layers.CM1N26Bn.js → layers.B2nS5rBS.js} +1 -1
  21. package/dist/{layers.CQ_qc_P4.js → layers.B4ZRP4dv.js} +1 -1
  22. package/dist/{layers.CE4cvR9M.js → layers.B5V9R6dS.js} +89 -92
  23. package/dist/{layers.D7NU7knG.js → layers.B6C5kDa3.js} +1 -1
  24. package/dist/{layers.Pdfj-rps.js → layers.B8qo87mf.js} +1 -1
  25. package/dist/{layers.DWi6TS6_.js → layers.BB-2khdc.js} +4 -4
  26. package/dist/{layers.CZhCCCF4.js → layers.BBgqB-dj.js} +1 -1
  27. package/dist/{layers.Dk79hkeN.js → layers.BCDRxkn5.js} +84 -86
  28. package/dist/{layers.D15hEfXi.js → layers.BDuP7QP1.js} +7 -7
  29. package/dist/{layers.Dlx8_WlO.js → layers.BE_-JA1T.js} +1 -1
  30. package/dist/{layers.D_ElsD-x.js → layers.BFDXAxa6.js} +1 -1
  31. package/dist/{layers.CJuRPa36.js → layers.BFclfxlH.js} +3 -3
  32. package/dist/{layers.DgSp_qNb.js → layers.BG9jBVsg.js} +1 -1
  33. package/dist/{layers.D60upjIB.js → layers.BGGuOo27.js} +1 -1
  34. package/dist/{layers.I6dVKb2e.js → layers.BI0TTMdG.js} +1 -1
  35. package/dist/{layers.D8mfmXuz.js → layers.BJOmz-8E.js} +1 -1
  36. package/dist/{layers.CNaC0uOJ.js → layers.BKOg8e2U.js} +1 -1
  37. package/dist/{layers.CD5MZRoU.js → layers.BKWiI_4a.js} +1 -1
  38. package/dist/{layers.CHgOkwRS.js → layers.BLERpK_S.js} +1 -1
  39. package/dist/layers.BLvWGmxZ.js +304 -0
  40. package/dist/{layers.CaaLILN3.js → layers.BNxa_eCc.js} +1 -1
  41. package/dist/{layers.Bk57FuHz.js → layers.BOWoLhye.js} +3 -3
  42. package/dist/layers.BPXa6Xko.js +8 -0
  43. package/dist/{layers.CY50u5GH.js → layers.BSwRsFvu.js} +7 -7
  44. package/dist/layers.BUT_cQlY.js +1 -0
  45. package/dist/{layers.YI-YTy5V.js → layers.BV2fpDYI.js} +1 -1
  46. package/dist/{layers.CiInvjHq.js → layers.BVHCv5uJ.js} +4 -7
  47. package/dist/{layers.BMiwXEvW.js → layers.BVSO7aWV.js} +1 -1
  48. package/dist/{layers.CPa8seQC.js → layers.BW593_YD.js} +1 -1
  49. package/dist/{layers.Bhsf0xTD.js → layers.BY9o3NTY.js} +1 -1
  50. package/dist/layers.BZMHF27f.js +6 -0
  51. package/dist/{layers.BUGfxwRr.js → layers.BZv7cxTR.js} +89 -92
  52. package/dist/{layers.BO79CD9P.js → layers.BbDBKF7d.js} +1 -1
  53. package/dist/{layers.DxlYXQXW.js → layers.BdiCSpJ4.js} +1 -1
  54. package/dist/{layers.BGdjq9k4.js → layers.Bdzg4UkM.js} +1 -1
  55. package/dist/{layers.CGjdGBZm.js → layers.BfK7Zksy.js} +1 -1
  56. package/dist/layers.Bfcc7TOH.js +1 -0
  57. package/dist/{layers.DK3yoXNH.js → layers.BhOCkx36.js} +1 -1
  58. package/dist/{layers.29-Qh75h.js → layers.Bi8uSmnl.js} +1 -1
  59. package/dist/{layers.COELVm2I.js → layers.BiD-9uwr.js} +1 -1
  60. package/dist/layers.BjtEPALX.js +19 -0
  61. package/dist/layers.BlT1aHiA.js +1 -0
  62. package/dist/{layers.D_LRJFEv.js → layers.Bq3WRO3x.js} +1 -1
  63. package/dist/{layers.bc_jaTfK.js → layers.BqikkqHY.js} +1 -1
  64. package/dist/{layers.uRZ4uGOB.js → layers.BqkB6bfG.js} +1 -1
  65. package/dist/{layers.Bm6lNIVW.js → layers.BqxiZwrm.js} +1 -1
  66. package/dist/layers.Br5DTynl.js +74 -0
  67. package/dist/{layers.Dv6WAMwH.js → layers.BrUMsy26.js} +1 -1
  68. package/dist/{layers.D1jHpzKw.js → layers.BsV8AKqE.js} +6 -9
  69. package/dist/{layers.BvzZuQYi.js → layers.BuGAznjj.js} +4 -4
  70. package/dist/{layers.BZETNwke.js → layers.Bv1xDmd0.js} +1 -1
  71. package/dist/{layers.B2KFTJGl.js → layers.Bvra5UGQ.js} +1 -1
  72. package/dist/{layers.73y0cSdc.js → layers.BwHEZWKu.js} +1 -1
  73. package/dist/{layers.BCqWj4Xz.js → layers.BwtMeyCj.js} +3 -3
  74. package/dist/{layers.DjfEK9cQ.js → layers.BxX_THjw.js} +1 -1
  75. package/dist/{layers.BiqSW2by.js → layers.Bzrkz_Q7.js} +1 -1
  76. package/dist/{layers.ij555eO_.js → layers.C-UCCxZT.js} +1 -1
  77. package/dist/{layers.DPnWbB6j.js → layers.C0BLZbdT.js} +1 -1
  78. package/dist/{layers.Cw-HPQf-.js → layers.C2-P7-v8.js} +1 -1
  79. package/dist/{layers.Z4nbVM_-.js → layers.C20Qi890.js} +1 -1
  80. package/dist/{layers.tfwszVHU.js → layers.C47JbXwl.js} +1 -1
  81. package/dist/{layers.BIG9YKzs.js → layers.C5JgdF76.js} +1 -1
  82. package/dist/{layers.BffDLyKk.js → layers.CA5feGxW.js} +1 -1
  83. package/dist/{layers.BDD1KfeR.js → layers.CCqe9zp9.js} +1 -1
  84. package/dist/{layers.TYxUe44n.js → layers.CDPIcOqa.js} +1 -1
  85. package/dist/{layers.BSfmVK7z.js → layers.CDexQZa_.js} +5 -8
  86. package/dist/{layers.C0OvS3X2.js → layers.CFSfvSsm.js} +1 -1
  87. package/dist/{layers.CcDkFL6P.js → layers.CH4plVEu.js} +3 -3
  88. package/dist/{layers.DBMV9sVv.js → layers.CHa9lFoT.js} +1 -1
  89. package/dist/{layers.CXDrUFaD.js → layers.CLT1Xhw2.js} +1 -1
  90. package/dist/{layers.2g3p410y.js → layers.CP3EufOe.js} +1 -1
  91. package/dist/{layers.Jso1Rtcd.js → layers.CPIxu6GO.js} +5 -8
  92. package/dist/{layers.D3HS9TbW.js → layers.CQMssu5A.js} +1 -1
  93. package/dist/layers.CQR0Nl7I.js +1 -0
  94. package/dist/{layers.35jlOcdS.js → layers.CR8SQeln.js} +224 -227
  95. package/dist/{layers.CJdUktnw.js → layers.CRKCl3-s.js} +1 -1
  96. package/dist/{layers.CHZLcfzW.js → layers.CSi2XRJ2.js} +1 -1
  97. package/dist/{layers.CxxIH2di.js → layers.CUV1fBKt.js} +12 -15
  98. package/dist/{layers.C2uP3dSX.js → layers.CV3PBAi0.js} +1 -1
  99. package/dist/{layers.BqRK5hcw.js → layers.CXPJGJnh.js} +1 -1
  100. package/dist/{layers.hgaybOo2.js → layers.CXp0yiA_.js} +1 -1
  101. package/dist/{layers.zxBrRE1P.js → layers.CYMmJIgK.js} +4 -7
  102. package/dist/{layers.D6MKuxHB.js → layers.Ca_hxCzh.js} +1 -1
  103. package/dist/{layers.CvQemHpn.js → layers.CadrukAB.js} +1 -1
  104. package/dist/{layers.Cz08SEjI.js → layers.Cc1VRWwn.js} +1 -1
  105. package/dist/{layers.pU2_Gt2w.js → layers.CeuPBpSS.js} +1 -1
  106. package/dist/{layers.DxJkl90c.js → layers.Cf85CE4j.js} +1 -1
  107. package/dist/{layers.CsMF9Mcc.js → layers.CfJUJqdv.js} +1 -1
  108. package/dist/layers.CgDb5aPr.js +2 -0
  109. package/dist/{layers.Bk6_Os8z.js → layers.CiFtNCp_.js} +1 -1
  110. package/dist/{layers.CA6t_Bjs.js → layers.CkEhuwys.js} +8 -11
  111. package/dist/{layers.BVKQ1q-V.js → layers.CmWWurhR.js} +1 -1
  112. package/dist/layers.CmxZ8EKk.js +1 -0
  113. package/dist/{layers.Q_PS-tRN.js → layers.Co1X8jDP.js} +1 -1
  114. package/dist/{layers.B2HAS3jD.js → layers.CoCdUjOH.js} +1 -1
  115. package/dist/layers.Cp63Ydn2.js +50707 -0
  116. package/dist/{layers.C4B4dvWx.js → layers.CqggRfmv.js} +1 -1
  117. package/dist/layers.CtCTIWni.js +1 -0
  118. package/dist/layers.Ctzw3Xb5.js +1 -0
  119. package/dist/{layers.DTuGifBE.js → layers.CvU_g0Ek.js} +1 -1
  120. package/dist/layers.Cw5bBQfp.js +118 -0
  121. package/dist/{layers.CP2XIdh_.js → layers.Cynva3D_.js} +1 -1
  122. package/dist/{layers.KlKmfsBA.js → layers.Czdt779o.js} +1 -1
  123. package/dist/{layers.-Tff0gbg.js → layers.D-iLQKYz.js} +1 -1
  124. package/dist/layers.D0GEGoV_.js +373 -0
  125. package/dist/{layers.uzQ-2V7t.js → layers.D0ptqEmo.js} +1 -1
  126. package/dist/{layers.CwqZ78CF.js → layers.D33lu-eC.js} +1 -1
  127. package/dist/{layers.CIBX4kN6.js → layers.D4VJ5B0e.js} +1 -1
  128. package/dist/layers.D5DNThwz.js +208 -0
  129. package/dist/{layers.Bu85fkOP.js → layers.D6XgZ8Az.js} +1 -1
  130. package/dist/layers.D71D_04V.js +1359 -0
  131. package/dist/{layers.D2f2ApIk.js → layers.D8vSQAh0.js} +8 -8
  132. package/dist/{layers.CnjADqOy.js → layers.D9yXBIuK.js} +1 -1
  133. package/dist/{layers.Cnqb7wKB.js → layers.DAF65Eyh.js} +1 -1
  134. package/dist/{layers.C4mOUFRJ.js → layers.DD5DttRP.js} +1 -1
  135. package/dist/{layers.C24-EacD.js → layers.DH-cj5fE.js} +2 -2
  136. package/dist/{layers.B-kCa5Od.js → layers.DJ7ZL_sW.js} +6 -9
  137. package/dist/layers.DJnnhy8m.js +96 -0
  138. package/dist/{layers.CMxdtuyk.js → layers.DM9hpazD.js} +1 -1
  139. package/dist/{layers.CSqoVmKS.js → layers.DNJEfwiQ.js} +1 -1
  140. package/dist/{layers.CupTWZsA.js → layers.DNOD_LF5.js} +1 -1
  141. package/dist/{layers.BLzus7b8.js → layers.DO1NcRAM.js} +1 -1
  142. package/dist/{layers.DbhnKU2H.js → layers.DPP6_cbD.js} +6 -9
  143. package/dist/{layers.C7SPnzuD.js → layers.DQIT2lCm.js} +1 -1
  144. package/dist/{layers.V47hYk_p.js → layers.DRZylWPP.js} +1 -1
  145. package/dist/{layers.uaIfPWsI.js → layers.DU7EZINs.js} +1 -1
  146. package/dist/{layers.4pgTRQX0.js → layers.DXyBsBF5.js} +1 -1
  147. package/dist/{layers.BJzTny2j.js → layers.D_XM1OQx.js} +3 -3
  148. package/dist/{layers.CJAH6bhp.js → layers.DcKjvxHE.js} +1 -1
  149. package/dist/{layers.BhTu7lKR.js → layers.DenZLHkn.js} +1 -1
  150. package/dist/{layers.BsHOozaJ.js → layers.Df79MJjN.js} +3 -3
  151. package/dist/{layers.DV77DVIT.js → layers.DfgtWeVl.js} +1 -1
  152. package/dist/layers.DgCaJXYg.js +257 -0
  153. package/dist/{layers.BOMJfSmk.js → layers.DjGdrDC1.js} +1 -1
  154. package/dist/{layers.Ba0U3m_a.js → layers.DmEW632Y.js} +2 -2
  155. package/dist/{layers.CG2UCtoJ.js → layers.DnvUnO-4.js} +1 -1
  156. package/dist/{layers.CfE7zjUC.js → layers.DpAWXloN.js} +7 -10
  157. package/dist/{layers.2nKKnihc.js → layers.Dq9b1xqh.js} +1 -1
  158. package/dist/{layers.CO_gtBDp.js → layers.DrZAE5o5.js} +1 -1
  159. package/dist/{layers.DDIAJqfF.js → layers.DrprvZC4.js} +1 -1
  160. package/dist/{layers.HUBCzsU0.js → layers.DvNvJZss.js} +1 -1
  161. package/dist/layers.Dvl1mlTI.js +1 -0
  162. package/dist/{layers.CbbuOQ3N.js → layers.DyvnTlHi.js} +1 -1
  163. package/dist/layers.DzDR_oG4.js +8 -0
  164. package/dist/{layers.Cf41PJM_.js → layers.DzghPRf3.js} +3813 -3230
  165. package/dist/{layers._pWN5IRm.js → layers.EXQpfQWq.js} +1 -1
  166. package/dist/{layers.y9K1nFwM.js → layers.FBzg3C04.js} +50 -50
  167. package/dist/{layers.DHXWA0Q_.js → layers.FlOgidCp.js} +1 -1
  168. package/dist/{layers.CyXyFV7h.js → layers.I85BW5o2.js} +1 -1
  169. package/dist/{layers.DYQ3Thdf.js → layers.IPxhkSfj.js} +1 -1
  170. package/dist/{layers.CPCRYtsi.js → layers.Lc29kAuz.js} +1 -1
  171. package/dist/{layers.DdfRdbPy.js → layers.MHEFRzDP.js} +5 -8
  172. package/dist/{layers.Cbgf19EI.js → layers.MNW-ShKu.js} +11 -14
  173. package/dist/{layers.CtKHNDRt.js → layers.Me9S-22r.js} +7 -10
  174. package/dist/{layers.u5kr3hHk.js → layers.Q-xFVVwC.js} +1 -1
  175. package/dist/layers.Qn6nodoY.js +2 -0
  176. package/dist/layers.R8mPlCA0.js +261 -0
  177. package/dist/{layers.BO4uJmfR.js → layers.RpoUh8kq.js} +1 -1
  178. package/dist/{layers.8ytQIYJn.js → layers.SsSYgMGG.js} +1 -1
  179. package/dist/{layers.BwTGqVnK.js → layers.V-9Fvifr.js} +1 -1
  180. package/dist/{layers.SlCB94vp.js → layers.W66NF2U9.js} +1 -1
  181. package/dist/{layers.CkH00BH2.js → layers.WwL-1p8w.js} +1 -1
  182. package/dist/{layers.CJc3FMhy.js → layers.X0J3BhYy.js} +4 -7
  183. package/dist/{layers.B9y931t5.js → layers.XS2AIvBG.js} +1 -1
  184. package/dist/{layers.CGId_znN.js → layers.XZft6Ook.js} +1 -1
  185. package/dist/{layers.BTZO4D1M.js → layers.adnwY8ML.js} +1 -1
  186. package/dist/layers.b9B2NY7n.js +11690 -0
  187. package/dist/{layers.7RM-Rgpr.js → layers.cf3uaysm.js} +1 -1
  188. package/dist/{layers.B2lIQaKn.js → layers.d9OooXQC.js} +1 -1
  189. package/dist/{layers.RDvNC_8V.js → layers.eNGl-u4H.js} +1 -1
  190. package/dist/{layers.SgNVpv0G.js → layers.eaKLR5Q2.js} +1 -1
  191. package/dist/{layers.BqssQgQi.js → layers.edPrT81i.js} +1 -1
  192. package/dist/{layers.C2gSNxMr.js → layers.ekCtLRbA.js} +1 -1
  193. package/dist/{layers.CiWApQBX.js → layers.fiMaf-_a.js} +3 -3
  194. package/dist/{layers.CnYkQAte.js → layers.gnAUWHV-.js} +1 -1
  195. package/dist/{layers.CnwMf9I0.js → layers.h4L4Mc41.js} +1 -1
  196. package/dist/{layers.C92eHUWa.js → layers.iyoop3cH.js} +3 -3
  197. package/dist/{layers.CrJ6Ln86.js → layers.jTaJiZzk.js} +1 -1
  198. package/dist/{layers.Dx6XWGBv.js → layers.jZvrWKJt.js} +1 -1
  199. package/dist/{layers.BNduWBRP.js → layers.l-ywSwa2.js} +1 -1
  200. package/dist/{layers.CuHedZYG.js → layers.lG7Mase1.js} +1 -1
  201. package/dist/{layers.B-9SWmBm.js → layers.mgh4Cwfx.js} +1 -1
  202. package/dist/{layers.ovBuAp5w.js → layers.mnoq184J.js} +1 -1
  203. package/dist/{layers.bHAHcDTt.js → layers.nFMauJSN.js} +1 -1
  204. package/dist/{layers.BuwjUr0U.js → layers.nNlLwZ_E.js} +1 -1
  205. package/dist/{layers.nVkvDfax.js → layers.oJ61CNkw.js} +1 -1
  206. package/dist/{layers.D3iO0BYj.js → layers.rzToPUAK.js} +1 -1
  207. package/dist/{layers.CdbUVvAx.js → layers.soJefnD3.js} +1 -1
  208. package/dist/{layers.mLGxc7Zs.js → layers.waYEJRmN.js} +1 -1
  209. package/dist/{layers.PUiCNtZG.js → layers.y0ia1Vp6.js} +1 -1
  210. package/dist/{layers.3URzBh7V.js → layers.zDfwTCmT.js} +1 -1
  211. package/package.json +9 -4
  212. package/dist/layers.BORw_DXM.js +0 -1
  213. package/dist/layers.BPXfA_Bi.js +0 -389
  214. package/dist/layers.Bn96IwAe.js +0 -96
  215. package/dist/layers.C5Ndiwef.js +0 -8
  216. package/dist/layers.C7XeME1v.js +0 -6
  217. package/dist/layers.C9iwVv2g.js +0 -1
  218. package/dist/layers.CCjwwvUf.js +0 -1
  219. package/dist/layers.CCsKL6P-.js +0 -1
  220. package/dist/layers.CTq-VHKd.js +0 -8
  221. package/dist/layers.D0BbR-kO.js +0 -76
  222. package/dist/layers.D1-NVvB4.js +0 -2
  223. package/dist/layers.D3ej58GE.js +0 -118
  224. package/dist/layers.D3kEalRl.js +0 -1
  225. package/dist/layers.DNR3bB9r.js +0 -2
  226. package/dist/layers.DVRVApG_.js +0 -22
  227. package/dist/layers.DzXJQPQT.js +0 -257
  228. package/dist/layers.GYLtRKCK.js +0 -1
  229. package/dist/layers.KJwFQi9T.js +0 -1
  230. package/dist/layers.RUMhBCMz.js +0 -1
  231. package/dist/layers.TF5UbhSz.js +0 -39287
  232. package/dist/layers.WIHPbs6I.js +0 -1225
  233. package/dist/layers.XvSvPUQo.js +0 -213
  234. package/dist/layers._fDrpnXx.js +0 -1
  235. package/dist/layers.fQ35NBL8.js +0 -271
package/README.md CHANGED
@@ -153,6 +153,7 @@ 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
+
156
157
  ```
157
158
  const fetchUploadMedia = async (
158
159
  file: File,
@@ -370,8 +371,8 @@ For uploading a file or audio, you might need the third parameter "data".
370
371
  }
371
372
  };
372
373
  ```
373
- </details>
374
374
 
375
+ </details>
375
376
 
376
377
  <details>
377
378
  <summary>
@@ -380,7 +381,6 @@ For uploading a file or audio, you might need the third parameter "data".
380
381
 
381
382
  ## Connect AI
382
383
 
383
-
384
384
  ```
385
385
  const fetchPromptResult = async (
386
386
  prompt: string,
@@ -423,8 +423,8 @@ For uploading a file or audio, you might need the third parameter "data".
423
423
  fetchPromptResult={fetchPromptResult}
424
424
  />
425
425
  ```
426
- </details>
427
426
 
427
+ </details>
428
428
 
429
429
  <details>
430
430
  <summary>
@@ -512,6 +512,7 @@ npm run test-unit-watch
512
512
  ```
513
513
 
514
514
  ### Unit Test Files Location
515
+
515
516
  - `__tests__/unit/` - Unit test files
516
517
  - Test files follow the pattern: `*.test.ts` or `*.test.tsx`
517
518
 
@@ -536,11 +537,13 @@ npm run test:e2e:headed
536
537
  ```
537
538
 
538
539
  ### E2E Test Files Location
540
+
539
541
  - `__tests__/e2e/` - End-to-end test files
540
542
  - `__tests__/regression/` - Regression test files
541
543
  - Test files follow the pattern: `*.spec.js`, `*.spec.mjs`, or `*.spec.ts`
542
544
 
543
545
  ### Browser Support
546
+
544
547
  - **WebKit** (Safari) - Primary browser for CI/CD
545
548
  - **Chromium** and **Firefox** - Available for local testing
546
549
 
@@ -560,6 +563,7 @@ npm run start-test-server
560
563
  ## Test Configuration
561
564
 
562
565
  ### Playwright Configuration
566
+
563
567
  - **Config file**: `playwright.config.js`
564
568
  - **Test directory**: `./__tests__/e2e/`
565
569
  - **Browser**: WebKit (optimized for CI)
@@ -568,6 +572,7 @@ npm run start-test-server
568
572
  - **Retries**: 2 retries in CI, 0 locally
569
573
 
570
574
  ### Vitest Configuration
575
+
571
576
  - **Config file**: `vitest.config.mts`
572
577
  - **Environment**: jsdom
573
578
  - **Setup file**: `vitest.setup.mts`
@@ -576,11 +581,13 @@ npm run start-test-server
576
581
  ## CI/CD Testing
577
582
 
578
583
  Tests run automatically on:
584
+
579
585
  - **Push** to `main` or `dev` branches
580
586
  - **Pull requests** to `main` or `dev` branches
581
587
  - **Manual trigger** via GitHub Actions
582
588
 
583
589
  ### GitHub Actions Workflow
590
+
584
591
  - **File**: `.github/workflows/tests.yml`
585
592
  - **Runner**: Ubuntu Latest
586
593
  - **Node.js**: Version 20
@@ -593,7 +600,8 @@ Tests run automatically on:
593
600
 
594
601
  ```javascript
595
602
  // __tests__/e2e/example.spec.mjs
596
- import { test, expect } from '@playwright/test';
603
+ import { expect, test } from '@playwright/test';
604
+
597
605
  import { focusEditor } from '../utils/index.mjs';
598
606
 
599
607
  test('Can type text in editor', async ({ page }) => {
@@ -661,11 +669,13 @@ Common test utilities are available in `__tests__/utils/index.mjs`:
661
669
  ## Performance
662
670
 
663
671
  ### Test Execution Times
672
+
664
673
  - **Unit Tests**: ~10-30 seconds
665
674
  - **E2E Tests (first run)**: ~3-4 minutes (includes browser installation)
666
675
  - **E2E Tests (cached)**: ~1-2 minutes (uses cached browsers)
667
676
 
668
677
  ### Optimization Features
678
+
669
679
  - **Browser Caching**: Playwright browsers cached in CI
670
680
  - **Single Worker**: Prevents race conditions in CI
671
681
  - **WebKit Only**: Faster than multi-browser matrix