@piwitests/server 0.22.1 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{By5qkOq8.js → -COcylA_.js} +1 -1
  3. package/.output/public/_nuxt/03FA4-rI.js +1 -0
  4. package/.output/public/_nuxt/{2VtBYkNh.js → 5a7jHE9s.js} +1 -1
  5. package/.output/public/_nuxt/6Z_ZwH8I.js +1 -0
  6. package/.output/public/_nuxt/7ZHq6PCI.js +1 -0
  7. package/.output/public/_nuxt/{cSeAgciy.js → 98sAB6Gu.js} +1 -1
  8. package/.output/public/_nuxt/{CoPntblj.js → B--J7VNt.js} +1 -1
  9. package/.output/public/_nuxt/{Dj-TetcW.js → B1LUinhp.js} +1 -1
  10. package/.output/public/_nuxt/{CCP6Tyle.js → B33YjaHr.js} +1 -1
  11. package/.output/public/_nuxt/B69RP95P.js +1 -0
  12. package/.output/public/_nuxt/{x8YSyy4c.js → B8H4XydJ.js} +1 -1
  13. package/.output/public/_nuxt/{DpalT0nH.js → B8Xm4_S_.js} +1 -1
  14. package/.output/public/_nuxt/{9N6hSApy.js → BBhrClA9.js} +1 -1
  15. package/.output/public/_nuxt/{BhH0TNTi.js → BCGljaM0.js} +1 -1
  16. package/.output/public/_nuxt/{BVN50jIb.js → BFxvHlO9.js} +1 -1
  17. package/.output/public/_nuxt/{DsX5CCb5.js → BKrWWV14.js} +1 -1
  18. package/.output/public/_nuxt/BN1zZw5b.js +9 -0
  19. package/.output/public/_nuxt/{iubpj2qv.js → BPXqL9vK.js} +1 -1
  20. package/.output/public/_nuxt/{CAZpjzvB.js → BUnwEAjq.js} +1 -1
  21. package/.output/public/_nuxt/{D6Mo5HeX.js → BVLqydCr.js} +1 -1
  22. package/.output/public/_nuxt/{9P8iHISX.js → BWMSVSNM.js} +1 -1
  23. package/.output/public/_nuxt/B_r0xHVS.js +1 -0
  24. package/.output/public/_nuxt/{DtSn2Q9-.js → BakMHV79.js} +1 -1
  25. package/.output/public/_nuxt/{_VzR8bwc.js → Bd8B-yeR.js} +1 -1
  26. package/.output/public/_nuxt/{BUMoU50-.js → BevElZaK.js} +1 -1
  27. package/.output/public/_nuxt/BfA6lfg4.js +1 -0
  28. package/.output/public/_nuxt/{DGyGmFem.js → Bg93Rnts.js} +1 -1
  29. package/.output/public/_nuxt/BgABj4Ty.js +4 -0
  30. package/.output/public/_nuxt/{CkKCKAYp.js → BkM2KXUo.js} +2 -2
  31. package/.output/public/_nuxt/{DQnsFoJn.js → BkxRbXIj.js} +1 -1
  32. package/.output/public/_nuxt/{CNcu4khZ.js → Bme1UkOl.js} +1 -1
  33. package/.output/public/_nuxt/{CobveFaj.js → BmzxRbcg.js} +1 -1
  34. package/.output/public/_nuxt/Bn0jaRxI.js +1 -0
  35. package/.output/public/_nuxt/{SBmMTKQb.js → BoNKdx5o.js} +1 -1
  36. package/.output/public/_nuxt/{BQzG26t0.js → Bp3FRuEm.js} +1 -1
  37. package/.output/public/_nuxt/{DOLeth7M.js → BrUBOQ0y.js} +1 -1
  38. package/.output/public/_nuxt/{nANaAHCd.js → BtSGUY-7.js} +1 -1
  39. package/.output/public/_nuxt/{BfS8BZTO.js → BtbpLWDs.js} +1 -1
  40. package/.output/public/_nuxt/{Cwwe5bRS.js → BvAfKk6C.js} +1 -1
  41. package/.output/public/_nuxt/{BqCiYSVY.js → BwEN1fJ1.js} +1 -1
  42. package/.output/public/_nuxt/{B0hK-xDF.js → C-XjxjG5.js} +1 -1
  43. package/.output/public/_nuxt/{kfFeu9tK.js → C3W_wyr9.js} +1 -1
  44. package/.output/public/_nuxt/{h49q_GXF.js → C5TrTuWv.js} +42 -42
  45. package/.output/public/_nuxt/{B2a-Phk3.js → C7D5Wl7T.js} +1 -1
  46. package/.output/public/_nuxt/{B09ddw9C.js → C7fq_rHE.js} +1 -1
  47. package/.output/public/_nuxt/{CWoSSKhQ.js → C8Paf_V1.js} +1 -1
  48. package/.output/public/_nuxt/{BQOWm9mQ.js → CD8ZzAFC.js} +1 -1
  49. package/.output/public/_nuxt/{DwyFnMoY.js → CDTeSrLO.js} +1 -1
  50. package/.output/public/_nuxt/{Cf52zHyB.js → CGHV0Y2d.js} +1 -1
  51. package/.output/public/_nuxt/{BtaTvcz6.js → CIpF9l75.js} +1 -1
  52. package/.output/public/_nuxt/{CkyMZI-0.js → CJ1rmnk4.js} +1 -1
  53. package/.output/public/_nuxt/{DOBSrxzY.js → CMuzkARi.js} +1 -1
  54. package/.output/public/_nuxt/{3xlGO1qT.js → COuZu9FO.js} +1 -1
  55. package/.output/public/_nuxt/{BZnfiR67.js → CX5Q0dZ8.js} +1 -1
  56. package/.output/public/_nuxt/{DBhdObsO.js → CX_G-FHC.js} +14 -14
  57. package/.output/public/_nuxt/{DDN2tt0a.js → Ce5_Tq63.js} +1 -1
  58. package/.output/public/_nuxt/{BlRWlfdD.js → Cf4MFOuf.js} +1 -1
  59. package/.output/public/_nuxt/{BYB8NVJZ.js → CgkXEZMo.js} +1 -1
  60. package/.output/public/_nuxt/{BFcdtAzg.js → CjBktNrC.js} +1 -1
  61. package/.output/public/_nuxt/{DXXnDejN.js → CjtjQV60.js} +1 -1
  62. package/.output/public/_nuxt/{x8w_1_rn.js → CpcrljrH.js} +1 -1
  63. package/.output/public/_nuxt/{C0v6l4pr.js → Cq33x7yV.js} +1 -1
  64. package/.output/public/_nuxt/{BDQCwxpX.js → CsV7pmcT.js} +1 -1
  65. package/.output/public/_nuxt/{C9p0YCAi.js → Cu2Q4iPh.js} +1 -1
  66. package/.output/public/_nuxt/CyLcEDg2.js +2 -0
  67. package/.output/public/_nuxt/{PdEEuEsg.js → D0Kop4bS.js} +1 -1
  68. package/.output/public/_nuxt/D1Y43xM1.js +2 -0
  69. package/.output/public/_nuxt/{DK7xciFW.js → D1vqYZsL.js} +1 -1
  70. package/.output/public/_nuxt/{BmJUhCIO.js → D2rZosKf.js} +1 -1
  71. package/.output/public/_nuxt/D7jpwkRG.js +5 -0
  72. package/.output/public/_nuxt/{CZ9ThISn.js → D8NAb7VE.js} +1 -1
  73. package/.output/public/_nuxt/{6-ivqM_I.js → D8vguZKg.js} +1 -1
  74. package/.output/public/_nuxt/{Hot1UcKY.js → DEvYVl9M.js} +1 -1
  75. package/.output/public/_nuxt/{CMhK1PvI.js → DF6Mes5z.js} +1 -1
  76. package/.output/public/_nuxt/{Sgis3xif.js → DGq4A2Pd.js} +1 -1
  77. package/.output/public/_nuxt/{BKJetfRH.js → DH5H1DJh.js} +1 -1
  78. package/.output/public/_nuxt/{Gik813Ek.js → DL8knjzi.js} +1 -1
  79. package/.output/public/_nuxt/{b_yFgp5S.js → DM3bDZC6.js} +1 -1
  80. package/.output/public/_nuxt/{DLNNAYfu.js → DMAiMrNr.js} +1 -1
  81. package/.output/public/_nuxt/{DLn-VPtK.js → DMWfVJCj.js} +1 -1
  82. package/.output/public/_nuxt/{BNAHBHbY.js → DMsm-RGQ.js} +1 -1
  83. package/.output/public/_nuxt/{CD3R-ggS.js → DMtrFQqi.js} +1 -1
  84. package/.output/public/_nuxt/{B9kt7ySS.js → DPZBpFOX.js} +1 -1
  85. package/.output/public/_nuxt/DVEGfqtt.js +2 -0
  86. package/.output/public/_nuxt/{D4UlSVir.js → D_y2VS8k.js} +1 -1
  87. package/.output/public/_nuxt/DaNC-xl1.js +1 -0
  88. package/.output/public/_nuxt/{DzM9oeLa.js → DbmGeOus.js} +1 -1
  89. package/.output/public/_nuxt/{DHUT-BKj.js → DcLbz6DV.js} +1 -1
  90. package/.output/public/_nuxt/{CWw9WGlv.js → DcR0Mmdl.js} +1 -1
  91. package/.output/public/_nuxt/{CDh_Qt7h.js → DhYznn-U.js} +1 -1
  92. package/.output/public/_nuxt/DhuRRlmK.js +1 -0
  93. package/.output/public/_nuxt/{CBZD8ym8.js → Drw8yQg6.js} +1 -1
  94. package/.output/public/_nuxt/{Bt4FLbe0.js → DuO5wfAC.js} +1 -1
  95. package/.output/public/_nuxt/{CRPt9SfB.js → DuOH5jcQ.js} +1 -1
  96. package/.output/public/_nuxt/{BH-ym1CI.js → DvEsAuE9.js} +1 -1
  97. package/.output/public/_nuxt/Dz6g_QJT.js +1 -0
  98. package/.output/public/_nuxt/{4yvOL9PC.js → DzZpIs4W.js} +1 -1
  99. package/.output/public/_nuxt/DzzNS-K1.js +1 -0
  100. package/.output/public/_nuxt/{COP3KBCA.js → Fsw2W4TA.js} +1 -1
  101. package/.output/public/_nuxt/{DWEkQ7bl.js → LwoTUb-r.js} +1 -1
  102. package/.output/public/_nuxt/{BjU3HZuS.js → OfPjZaky.js} +1 -1
  103. package/.output/public/_nuxt/{czXrP7NB.js → P5uOaRUZ.js} +1 -1
  104. package/.output/public/_nuxt/{BTvE9qca.js → Qo6oszaF.js} +1 -1
  105. package/.output/public/_nuxt/{Cd8r0xk5.js → T5UuMUxA.js} +1 -1
  106. package/.output/public/_nuxt/UY8pjaZA.js +1 -0
  107. package/.output/public/_nuxt/{B6s20NbT.js → V9p3z39z.js} +1 -1
  108. package/.output/public/_nuxt/{CJEp4i0N.js → VACXezo0.js} +1 -1
  109. package/.output/public/_nuxt/{CrOA9onF.js → YmCeJkZ2.js} +1 -1
  110. package/.output/public/_nuxt/builds/latest.json +1 -1
  111. package/.output/public/_nuxt/builds/meta/70224ee0-4d1f-45d2-b380-2ecb18064bf1.json +1 -0
  112. package/.output/public/_nuxt/entry.DzPSf_u5.css +1 -0
  113. package/.output/public/_nuxt/fXUwH_3d.js +1 -0
  114. package/.output/public/_nuxt/{t-juTK3X.js → opwuUqHG.js} +1 -1
  115. package/.output/public/_nuxt/{B_mN5eMV.js → opyDpgSw.js} +1 -1
  116. package/.output/public/_nuxt/{HwFFbACq.js → sVV8xB9f.js} +1 -1
  117. package/.output/public/_nuxt/{DSvBQHzW.js → xa5UHCot.js} +1 -1
  118. package/.output/server/chunks/_/collect.mjs +1 -1
  119. package/.output/server/chunks/_/markers.mjs +1 -1
  120. package/.output/server/chunks/_/quarantine.mjs +1 -1
  121. package/.output/server/chunks/_/users.mjs +1 -1
  122. package/.output/server/chunks/build/{Alert-DAb8nKVs.mjs → Alert-He-UxEt6.mjs} +2 -2
  123. package/.output/server/chunks/build/Alert-He-UxEt6.mjs.map +1 -0
  124. package/.output/server/chunks/build/{Breadcrumb-DJp5WvUM.mjs → Breadcrumb-DEP2dVCZ.mjs} +3 -3
  125. package/.output/server/chunks/build/Breadcrumb-DEP2dVCZ.mjs.map +1 -0
  126. package/.output/server/chunks/build/{BreadcrumbNav-BrQwfL8G.mjs → BreadcrumbNav-y6nMDYcR.mjs} +3 -3
  127. package/.output/server/chunks/build/BreadcrumbNav-y6nMDYcR.mjs.map +1 -0
  128. package/.output/server/chunks/build/{BrowserBadge-Djw_e_I9.mjs → BrowserBadge-DIASU8Gf.mjs} +6 -66
  129. package/.output/server/chunks/build/BrowserBadge-DIASU8Gf.mjs.map +1 -0
  130. package/.output/server/chunks/build/{ChartCard-B2gd_8HP.mjs → ChartCard-ZTsCvItQ.mjs} +2 -2
  131. package/.output/server/chunks/build/ChartCard-ZTsCvItQ.mjs.map +1 -0
  132. package/.output/server/chunks/build/{Checkbox-C1khEdTh.mjs → Checkbox-BisdHf8n.mjs} +7 -7
  133. package/.output/server/chunks/build/Checkbox-BisdHf8n.mjs.map +1 -0
  134. package/.output/server/chunks/build/{CodeBlock-CjnDrO3Y.mjs → CodeBlock-B8BNtZAe.mjs} +3 -3
  135. package/.output/server/chunks/build/CodeBlock-B8BNtZAe.mjs.map +1 -0
  136. package/.output/server/chunks/build/{DashboardNavbar-DYtmVlhy.mjs → DashboardNavbar-D7-3zBUU.mjs} +3 -3
  137. package/.output/server/chunks/build/DashboardNavbar-D7-3zBUU.mjs.map +1 -0
  138. package/.output/server/chunks/build/{DashboardSidebarToggle-BPNxODwj.mjs → DashboardSidebarToggle-C3HdHvlE.mjs} +3 -3
  139. package/.output/server/chunks/build/DashboardSidebarToggle-C3HdHvlE.mjs.map +1 -0
  140. package/.output/server/chunks/build/{DataLocationCard-2B-sVSMr.mjs → DataLocationCard-CC2-lHiP.mjs} +3 -3
  141. package/.output/server/chunks/build/DataLocationCard-CC2-lHiP.mjs.map +1 -0
  142. package/.output/server/chunks/build/{MetaStripGroup-BBByVvpR.mjs → DesktopRunLocallyButton-iNzrDsEs.mjs} +601 -623
  143. package/.output/server/chunks/build/DesktopRunLocallyButton-iNzrDsEs.mjs.map +1 -0
  144. package/.output/server/chunks/build/{DiagnosisPanel-D6QO30FQ.mjs → DiagnosisPanel-BVb2LgHu.mjs} +6 -6
  145. package/.output/server/chunks/build/DiagnosisPanel-BVb2LgHu.mjs.map +1 -0
  146. package/.output/server/chunks/build/{DiagnosisResult-ujB5Lt2A.mjs → DiagnosisResult-xVgZlfKK.mjs} +9 -9
  147. package/.output/server/chunks/build/DiagnosisResult-xVgZlfKK.mjs.map +1 -0
  148. package/.output/server/chunks/build/{EntityLinks-F8_kC-IH.mjs → EntityLinks-Dzn73fbq.mjs} +3 -3
  149. package/.output/server/chunks/build/EntityLinks-Dzn73fbq.mjs.map +1 -0
  150. package/.output/server/chunks/build/{EnvManagedBadge-D6e-10M9.mjs → EnvManagedBadge-C-agmABK.mjs} +3 -3
  151. package/.output/server/chunks/build/EnvManagedBadge-C-agmABK.mjs.map +1 -0
  152. package/.output/server/chunks/build/{FeatureUnavailable-BMw4euTk.mjs → FeatureUnavailable-DHFkwI7t.mjs} +2 -2
  153. package/.output/server/chunks/build/FeatureUnavailable-DHFkwI7t.mjs.map +1 -0
  154. package/.output/server/chunks/build/{FormField-QptK0rPg.mjs → FormField-GYHKiSI6.mjs} +2 -2
  155. package/.output/server/chunks/build/FormField-GYHKiSI6.mjs.map +1 -0
  156. package/.output/server/chunks/build/{GetStartedWizard-DxT8T14Y.mjs → GetStartedWizard-BpcGYsm2.mjs} +3 -3
  157. package/.output/server/chunks/build/GetStartedWizard-BpcGYsm2.mjs.map +1 -0
  158. package/.output/server/chunks/build/{HelpHint-C5Ru8BCc.mjs → HelpHint-plioHKA0.mjs} +29 -2
  159. package/.output/server/chunks/build/HelpHint-plioHKA0.mjs.map +1 -0
  160. package/.output/server/chunks/build/MetaStripGroup-A0a72vt5.mjs +193 -0
  161. package/.output/server/chunks/build/MetaStripGroup-A0a72vt5.mjs.map +1 -0
  162. package/.output/server/chunks/build/{Modal-BacZmQCX.mjs → Modal-hKLvVFNp.mjs} +2 -2
  163. package/.output/server/chunks/build/Modal-hKLvVFNp.mjs.map +1 -0
  164. package/.output/server/chunks/build/{NavigationMenu-sTiKSWDm.mjs → NavigationMenu-RfBOyS32.mjs} +5 -5
  165. package/.output/server/chunks/build/NavigationMenu-RfBOyS32.mjs.map +1 -0
  166. package/.output/server/chunks/build/{OpenInIdeLink-Crc8y0Yx.mjs → OpenInIdeLink-Jp6SzEtD.mjs} +5 -5
  167. package/.output/server/chunks/build/{OpenInIdeLink-Crc8y0Yx.mjs.map → OpenInIdeLink-Jp6SzEtD.mjs.map} +1 -1
  168. package/.output/server/chunks/build/{ProjectTestCasesTable-DwjqZ2i5.mjs → ProjectTestCasesTable-DxOTfhi4.mjs} +8 -8
  169. package/.output/server/chunks/build/{ProjectTestCasesTable-DwjqZ2i5.mjs.map → ProjectTestCasesTable-DxOTfhi4.mjs.map} +1 -1
  170. package/.output/server/chunks/build/{RovingFocusItem--OEHI2P3.mjs → RovingFocusItem-BOSx1Z9Z.mjs} +2 -2
  171. package/.output/server/chunks/build/RovingFocusItem-BOSx1Z9Z.mjs.map +1 -0
  172. package/.output/server/chunks/build/RunReports-nuLb-Nm3.mjs +1 -1
  173. package/.output/server/chunks/build/{SectionCard-C753B3Yo.mjs → SectionCard-DHAFvJxm.mjs} +2 -2
  174. package/.output/server/chunks/build/SectionCard-DHAFvJxm.mjs.map +1 -0
  175. package/.output/server/chunks/build/{Select-BAyYwPuo.mjs → Select-CEyw7HGK.mjs} +4 -4
  176. package/.output/server/chunks/build/Select-CEyw7HGK.mjs.map +1 -0
  177. package/.output/server/chunks/build/{SelectMenu-zE_AhMX8.mjs → SelectMenu-C02Hs2_F.mjs} +5 -5
  178. package/.output/server/chunks/build/{SelectMenu-zE_AhMX8.mjs.map → SelectMenu-C02Hs2_F.mjs.map} +1 -1
  179. package/.output/server/chunks/build/{Separator-BbgCfKKJ.mjs → Separator-lrN70ODV.mjs} +2 -2
  180. package/.output/server/chunks/build/Separator-lrN70ODV.mjs.map +1 -0
  181. package/.output/server/chunks/build/{SettingsField-D-VriK9X.mjs → SettingsField-tRmytcEJ.mjs} +5 -5
  182. package/.output/server/chunks/build/SettingsField-tRmytcEJ.mjs.map +1 -0
  183. package/.output/server/chunks/build/{Slideover-CNbGvbUF.mjs → Slideover-D6cRIqch.mjs} +3 -3
  184. package/.output/server/chunks/build/Slideover-D6cRIqch.mjs.map +1 -0
  185. package/.output/server/chunks/build/{Switch-DdkA3Fii.mjs → Switch-R2n82ncQ.mjs} +4 -4
  186. package/.output/server/chunks/build/Switch-R2n82ncQ.mjs.map +1 -0
  187. package/.output/server/chunks/build/{Table-CfDVAuUJ.mjs → Table-qZdnm9t2.mjs} +3 -3
  188. package/.output/server/chunks/build/Table-qZdnm9t2.mjs.map +1 -0
  189. package/.output/server/chunks/build/{Tabs-BCOhHEB9.mjs → Tabs-BDP7MWl4.mjs} +3 -3
  190. package/.output/server/chunks/build/Tabs-BDP7MWl4.mjs.map +1 -0
  191. package/.output/server/chunks/build/{TestStatusBar-wquHQqtp.mjs → TestStatusBar-CvsmKJ4D.mjs} +2 -2
  192. package/.output/server/chunks/build/TestStatusBar-CvsmKJ4D.mjs.map +1 -0
  193. package/.output/server/chunks/build/{Textarea-Ohs6QTXf.mjs → Textarea-DpmpM-lN.mjs} +2 -2
  194. package/.output/server/chunks/build/Textarea-DpmpM-lN.mjs.map +1 -0
  195. package/.output/server/chunks/build/{Tooltip-BRBnl4pE.mjs → Tooltip-BI3WQErw.mjs} +3 -3
  196. package/.output/server/chunks/build/Tooltip-BI3WQErw.mjs.map +1 -0
  197. package/.output/server/chunks/build/{VisuallyHiddenInput-BHvzNumK.mjs → VisuallyHiddenInput-D4E5aJCQ.mjs} +2 -2
  198. package/.output/server/chunks/build/VisuallyHiddenInput-D4E5aJCQ.mjs.map +1 -0
  199. package/.output/server/chunks/build/{_id_-BesWjK_d.mjs → _id_-26komi8G.mjs} +47 -37
  200. package/.output/server/chunks/build/{_id_-BesWjK_d.mjs.map → _id_-26komi8G.mjs.map} +1 -1
  201. package/.output/server/chunks/build/{_id_-CQ0lolEK.mjs → _id_-T965GKYC.mjs} +58 -15
  202. package/.output/server/chunks/build/_id_-T965GKYC.mjs.map +1 -0
  203. package/.output/server/chunks/build/{_id_-CGs0u8Fr.mjs → _id_-w7YCSiiy.mjs} +70 -41
  204. package/.output/server/chunks/build/{_id_-CGs0u8Fr.mjs.map → _id_-w7YCSiiy.mjs.map} +1 -1
  205. package/.output/server/chunks/build/{_id_-D1-06Fcl.mjs → _id_-wiULjAVc.mjs} +44 -40
  206. package/.output/server/chunks/build/{_id_-D1-06Fcl.mjs.map → _id_-wiULjAVc.mjs.map} +1 -1
  207. package/.output/server/chunks/build/{about-DdyOj-dj.mjs → about-B3V_OEiu.mjs} +5 -5
  208. package/.output/server/chunks/build/about-B3V_OEiu.mjs.map +1 -0
  209. package/.output/server/chunks/build/{account-7aVMKekZ.mjs → account-DpBdYE46.mjs} +6 -6
  210. package/.output/server/chunks/build/account-DpBdYE46.mjs.map +1 -0
  211. package/.output/server/chunks/build/{ai-zw3T9b5u.mjs → ai-DYhpzbqp.mjs} +16 -16
  212. package/.output/server/chunks/build/{ai-zw3T9b5u.mjs.map → ai-DYhpzbqp.mjs.map} +1 -1
  213. package/.output/server/chunks/build/{analytics-CeCzKwEX.mjs → analytics-CZJEU0an.mjs} +17 -17
  214. package/.output/server/chunks/build/{analytics-CeCzKwEX.mjs.map → analytics-CZJEU0an.mjs.map} +1 -1
  215. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  216. package/.output/server/chunks/build/{db.client-Bdqk_eYQ.mjs → db.client-DijpEH6i.mjs} +3 -1
  217. package/.output/server/chunks/build/db.client-DijpEH6i.mjs.map +1 -0
  218. package/.output/server/chunks/build/{default-CkyAx_Mu.mjs → default-CQa_bmAf.mjs} +505 -89
  219. package/.output/server/chunks/build/default-CQa_bmAf.mjs.map +1 -0
  220. package/.output/server/chunks/build/{docs-Dhj-wEks.mjs → docs-C8bndVXg.mjs} +11 -11
  221. package/.output/server/chunks/build/{docs-Dhj-wEks.mjs.map → docs-C8bndVXg.mjs.map} +1 -1
  222. package/.output/server/chunks/build/{edit-CVz_gdoe.mjs → edit-BdfF9er2.mjs} +12 -12
  223. package/.output/server/chunks/build/edit-BdfF9er2.mjs.map +1 -0
  224. package/.output/server/chunks/build/{fetch-Be-j7hF1.mjs → fetch-tkz5_OA-.mjs} +3 -3
  225. package/.output/server/chunks/build/fetch-tkz5_OA-.mjs.map +1 -0
  226. package/.output/server/chunks/build/{forgot-password-CwdjL7BO.mjs → forgot-password-swZRcvXE.mjs} +3 -3
  227. package/.output/server/chunks/build/forgot-password-swZRcvXE.mjs.map +1 -0
  228. package/.output/server/chunks/build/{import-DyQEw4V3.mjs → import-B27Sv7h5.mjs} +11 -11
  229. package/.output/server/chunks/build/import-B27Sv7h5.mjs.map +1 -0
  230. package/.output/server/chunks/build/{index-DcnICCZU.mjs → index-BdZmxLtC.mjs} +17 -17
  231. package/.output/server/chunks/build/{index-DcnICCZU.mjs.map → index-BdZmxLtC.mjs.map} +1 -1
  232. package/.output/server/chunks/build/{index-D7Bmj6bq.mjs → index-C7m32bRI.mjs} +9 -9
  233. package/.output/server/chunks/build/index-C7m32bRI.mjs.map +1 -0
  234. package/.output/server/chunks/build/{index-DghAFpNR.mjs → index-Dq6nk6OB.mjs} +385 -104
  235. package/.output/server/chunks/build/index-Dq6nk6OB.mjs.map +1 -0
  236. package/.output/server/chunks/build/{isValueEqualOrExist-D2qw9YEr.mjs → isValueEqualOrExist-D4lZ8uRY.mjs} +3 -3
  237. package/.output/server/chunks/build/isValueEqualOrExist-D4lZ8uRY.mjs.map +1 -0
  238. package/.output/server/chunks/build/{login-rXKF63j6.mjs → login-hxCF06JT.mjs} +5 -5
  239. package/.output/server/chunks/build/login-hxCF06JT.mjs.map +1 -0
  240. package/.output/server/chunks/build/{mcp-ByNvFy4o.mjs → mcp-BVW1llyW.mjs} +12 -12
  241. package/.output/server/chunks/build/mcp-BVW1llyW.mjs.map +1 -0
  242. package/.output/server/chunks/build/{notifications-CbLAZnKJ.mjs → notifications-Dn-evqXM.mjs} +11 -11
  243. package/.output/server/chunks/build/notifications-Dn-evqXM.mjs.map +1 -0
  244. package/.output/server/chunks/build/{performance-C93MEPaZ.mjs → performance-CV8qm94u.mjs} +10 -10
  245. package/.output/server/chunks/build/performance-CV8qm94u.mjs.map +1 -0
  246. package/.output/server/chunks/build/{pr-feedback-DKCB0bDE.mjs → pr-feedback-gKDz8LyA.mjs} +9 -9
  247. package/.output/server/chunks/build/pr-feedback-gKDz8LyA.mjs.map +1 -0
  248. package/.output/server/chunks/build/{reset-password-BBoHKMqD.mjs → reset-password-DtEISa1I.mjs} +3 -3
  249. package/.output/server/chunks/build/reset-password-DtEISa1I.mjs.map +1 -0
  250. package/.output/server/chunks/build/server.mjs +87 -33
  251. package/.output/server/chunks/build/{settings-DiG0JjzC.mjs → settings-BJDnuLpc.mjs} +8 -8
  252. package/.output/server/chunks/build/settings-BJDnuLpc.mjs.map +1 -0
  253. package/.output/server/chunks/build/settings-metadata-DnAK4Rzg.mjs +1 -1
  254. package/.output/server/chunks/build/{setup-0-1O6Hjz.mjs → setup-BO9tXa_G.mjs} +14 -14
  255. package/.output/server/chunks/build/{setup-0-1O6Hjz.mjs.map → setup-BO9tXa_G.mjs.map} +1 -1
  256. package/.output/server/chunks/build/{storage-3JiFJ843.mjs → storage-zN92cA9q.mjs} +11 -11
  257. package/.output/server/chunks/build/storage-zN92cA9q.mjs.map +1 -0
  258. package/.output/server/chunks/build/{tags-CqYcp7js.mjs → tags-CJFnoyQc.mjs} +5 -5
  259. package/.output/server/chunks/build/tags-CJFnoyQc.mjs.map +1 -0
  260. package/.output/server/chunks/build/{test-cases-y1HSgPX2.mjs → test-cases-0Q6rT73d.mjs} +18 -18
  261. package/.output/server/chunks/build/test-cases-0Q6rT73d.mjs.map +1 -0
  262. package/.output/server/chunks/build/{test-functions-D2ju95Ly.mjs → test-functions-DVRJgiWo.mjs} +9 -9
  263. package/.output/server/chunks/build/test-functions-DVRJgiWo.mjs.map +1 -0
  264. package/.output/server/chunks/build/{useCopyRich-CVFeYfkG.mjs → useCopyRich-BM9GTjJi.mjs} +75 -29
  265. package/.output/server/chunks/build/{useCopyRich-CVFeYfkG.mjs.map → useCopyRich-BM9GTjJi.mjs.map} +1 -1
  266. package/.output/server/chunks/build/useDesktopLocalRuns-k7Gw3Fv3.mjs +319 -0
  267. package/.output/server/chunks/build/useDesktopLocalRuns-k7Gw3Fv3.mjs.map +1 -0
  268. package/.output/server/chunks/build/useDesktopProjectLink-WwLte59P.mjs +67 -0
  269. package/.output/server/chunks/build/useDesktopProjectLink-WwLte59P.mjs.map +1 -0
  270. package/.output/server/chunks/build/{useFormControl-CZ9So7iX.mjs → useFormControl-8skMOTIf.mjs} +2 -2
  271. package/.output/server/chunks/build/useFormControl-8skMOTIf.mjs.map +1 -0
  272. package/.output/server/chunks/build/{useOpenInIde--6Me0WlL.mjs → useOpenInIde-D74FmDNg.mjs} +2 -2
  273. package/.output/server/chunks/build/useOpenInIde-D74FmDNg.mjs.map +1 -0
  274. package/.output/server/chunks/build/{users-IdmY9JZV.mjs → users-C9bjOBde.mjs} +6 -6
  275. package/.output/server/chunks/build/users-C9bjOBde.mjs.map +1 -0
  276. package/.output/server/chunks/nitro/nitro.mjs +982 -664
  277. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  278. package/.output/server/chunks/routes/__piwi/session.get.mjs +1 -1
  279. package/.output/server/chunks/routes/api/ai/step-resolution.post.mjs +88 -0
  280. package/.output/server/chunks/routes/api/ai/step-resolution.post.mjs.map +1 -0
  281. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +1 -1
  282. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +1 -1
  283. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +1 -1
  284. package/.output/server/chunks/routes/api/auth/login.post.mjs +1 -1
  285. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -1
  286. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -1
  287. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -1
  288. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -1
  289. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -1
  290. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +1 -1
  291. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -1
  292. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -1
  293. package/.output/server/chunks/routes/api/auth/setup.post.mjs +1 -1
  294. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -1
  295. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -1
  296. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -1
  297. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -1
  298. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -1
  299. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +1 -1
  300. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
  301. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
  302. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
  303. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
  304. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
  305. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
  306. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
  307. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
  308. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
  309. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +1 -1
  310. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
  311. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +1 -1
  312. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
  313. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
  314. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
  315. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
  316. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  317. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  318. package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
  319. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  320. package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
  321. package/.output/server/chunks/routes/api/index.get5.mjs +1 -1
  322. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  323. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  324. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  325. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  326. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  327. package/.output/server/chunks/routes/api/index.post6.mjs +1 -1
  328. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -1
  329. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
  330. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
  331. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
  332. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
  333. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
  334. package/.output/server/chunks/routes/api/projects/_id/ai-steps.get.mjs +63 -0
  335. package/.output/server/chunks/routes/api/projects/_id/ai-steps.get.mjs.map +1 -0
  336. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
  337. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
  338. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
  339. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
  340. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
  341. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -1
  342. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
  343. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -1
  344. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
  345. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -1
  346. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +1 -1
  347. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +1 -1
  348. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +1 -1
  349. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
  350. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
  351. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
  352. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +1 -1
  353. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +1 -1
  354. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +1 -1
  355. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +1 -1
  356. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +1 -1
  357. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
  358. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
  359. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
  360. package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
  361. package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
  362. package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
  363. package/.output/server/chunks/routes/api/search.get.mjs +1 -1
  364. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
  365. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
  366. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
  367. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
  368. package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
  369. package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
  370. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +1 -1
  371. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +1 -1
  372. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +1 -1
  373. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
  374. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +1 -1
  375. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +1 -1
  376. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
  377. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
  378. package/.output/server/chunks/routes/api/setup-status.get.mjs +1 -1
  379. package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
  380. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
  381. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  382. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +1 -1
  383. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  384. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +1 -1
  385. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
  386. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
  387. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +1 -1
  388. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +1 -1
  389. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
  390. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
  391. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
  392. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +1 -1
  393. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
  394. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
  395. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
  396. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
  397. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +1 -1
  398. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +1 -1
  399. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
  400. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
  401. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
  402. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
  403. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
  404. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
  405. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
  406. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
  407. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
  408. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +1 -1
  409. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
  410. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
  411. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
  412. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
  413. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
  414. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
  415. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
  416. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
  417. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
  418. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +1 -1
  419. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +1 -1
  420. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
  421. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
  422. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
  423. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
  424. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  426. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +2 -1
  428. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
  430. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -1
  431. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -1
  432. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  433. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
  434. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
  435. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  436. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  437. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +1 -1
  438. package/.output/server/chunks/routes/api/version.get.mjs +1 -1
  439. package/.output/server/chunks/routes/mcp.post.mjs +1 -1
  440. package/.output/server/chunks/routes/renderer.mjs +1 -1
  441. package/.output/server/database/migrations/0045_productive_stingray.sql +1 -0
  442. package/.output/server/database/migrations/meta/0045_snapshot.json +3779 -0
  443. package/.output/server/database/migrations/meta/_journal.json +7 -0
  444. package/.output/server/database/migrations-pg/0046_gorgeous_hercules.sql +1 -0
  445. package/.output/server/database/migrations-pg/meta/0046_snapshot.json +4486 -0
  446. package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
  447. package/.output/server/index.mjs +1 -1
  448. package/.output/server/package.json +1 -1
  449. package/package.json +1 -1
  450. package/.output/public/_nuxt/B-6GGrhr.js +0 -1
  451. package/.output/public/_nuxt/B9FSuKdA.js +0 -1
  452. package/.output/public/_nuxt/BaDhDBCV.js +0 -1
  453. package/.output/public/_nuxt/Bb7Uckln.js +0 -5
  454. package/.output/public/_nuxt/Be4c943G.js +0 -2
  455. package/.output/public/_nuxt/BpUXqOVj.js +0 -2
  456. package/.output/public/_nuxt/BtSJxOdh.js +0 -1
  457. package/.output/public/_nuxt/CI_q0F1O.js +0 -9
  458. package/.output/public/_nuxt/CScusXhF.js +0 -1
  459. package/.output/public/_nuxt/Cot8fIp5.js +0 -2
  460. package/.output/public/_nuxt/D0ROfwV0.js +0 -1
  461. package/.output/public/_nuxt/D4oheDIm.js +0 -4
  462. package/.output/public/_nuxt/DS2ANCQh.js +0 -1
  463. package/.output/public/_nuxt/DslnXfcH.js +0 -1
  464. package/.output/public/_nuxt/builds/meta/28bca36d-5571-4157-b1b8-7f62c934eed6.json +0 -1
  465. package/.output/public/_nuxt/entry.BAvBQY-h.css +0 -1
  466. package/.output/public/_nuxt/hzsG6cAc.js +0 -1
  467. package/.output/public/_nuxt/jjOqY9Tv.js +0 -1
  468. package/.output/public/_nuxt/xbO0VmDX.js +0 -1
  469. package/.output/server/chunks/build/Alert-DAb8nKVs.mjs.map +0 -1
  470. package/.output/server/chunks/build/Breadcrumb-DJp5WvUM.mjs.map +0 -1
  471. package/.output/server/chunks/build/BreadcrumbNav-BrQwfL8G.mjs.map +0 -1
  472. package/.output/server/chunks/build/BrowserBadge-Djw_e_I9.mjs.map +0 -1
  473. package/.output/server/chunks/build/ChartCard-B2gd_8HP.mjs.map +0 -1
  474. package/.output/server/chunks/build/Checkbox-C1khEdTh.mjs.map +0 -1
  475. package/.output/server/chunks/build/CodeBlock-CjnDrO3Y.mjs.map +0 -1
  476. package/.output/server/chunks/build/DashboardNavbar-DYtmVlhy.mjs.map +0 -1
  477. package/.output/server/chunks/build/DashboardSidebarToggle-BPNxODwj.mjs.map +0 -1
  478. package/.output/server/chunks/build/DataLocationCard-2B-sVSMr.mjs.map +0 -1
  479. package/.output/server/chunks/build/DiagnosisPanel-D6QO30FQ.mjs.map +0 -1
  480. package/.output/server/chunks/build/DiagnosisResult-ujB5Lt2A.mjs.map +0 -1
  481. package/.output/server/chunks/build/EntityLinks-F8_kC-IH.mjs.map +0 -1
  482. package/.output/server/chunks/build/EnvManagedBadge-D6e-10M9.mjs.map +0 -1
  483. package/.output/server/chunks/build/FeatureUnavailable-BMw4euTk.mjs.map +0 -1
  484. package/.output/server/chunks/build/FormField-QptK0rPg.mjs.map +0 -1
  485. package/.output/server/chunks/build/GetStartedWizard-DxT8T14Y.mjs.map +0 -1
  486. package/.output/server/chunks/build/HelpHint-C5Ru8BCc.mjs.map +0 -1
  487. package/.output/server/chunks/build/MetaStripGroup-BBByVvpR.mjs.map +0 -1
  488. package/.output/server/chunks/build/Modal-BacZmQCX.mjs.map +0 -1
  489. package/.output/server/chunks/build/NavigationMenu-sTiKSWDm.mjs.map +0 -1
  490. package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +0 -1
  491. package/.output/server/chunks/build/SectionCard-C753B3Yo.mjs.map +0 -1
  492. package/.output/server/chunks/build/Select-BAyYwPuo.mjs.map +0 -1
  493. package/.output/server/chunks/build/Separator-BbgCfKKJ.mjs.map +0 -1
  494. package/.output/server/chunks/build/SettingsField-D-VriK9X.mjs.map +0 -1
  495. package/.output/server/chunks/build/Slideover-CNbGvbUF.mjs.map +0 -1
  496. package/.output/server/chunks/build/Switch-DdkA3Fii.mjs.map +0 -1
  497. package/.output/server/chunks/build/Table-CfDVAuUJ.mjs.map +0 -1
  498. package/.output/server/chunks/build/Tabs-BCOhHEB9.mjs.map +0 -1
  499. package/.output/server/chunks/build/TestStatusBar-wquHQqtp.mjs.map +0 -1
  500. package/.output/server/chunks/build/Textarea-Ohs6QTXf.mjs.map +0 -1
  501. package/.output/server/chunks/build/Tooltip-BRBnl4pE.mjs.map +0 -1
  502. package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +0 -1
  503. package/.output/server/chunks/build/_id_-CQ0lolEK.mjs.map +0 -1
  504. package/.output/server/chunks/build/about-DdyOj-dj.mjs.map +0 -1
  505. package/.output/server/chunks/build/account-7aVMKekZ.mjs.map +0 -1
  506. package/.output/server/chunks/build/db.client-Bdqk_eYQ.mjs.map +0 -1
  507. package/.output/server/chunks/build/default-CkyAx_Mu.mjs.map +0 -1
  508. package/.output/server/chunks/build/edit-CVz_gdoe.mjs.map +0 -1
  509. package/.output/server/chunks/build/fetch-Be-j7hF1.mjs.map +0 -1
  510. package/.output/server/chunks/build/forgot-password-CwdjL7BO.mjs.map +0 -1
  511. package/.output/server/chunks/build/import-DyQEw4V3.mjs.map +0 -1
  512. package/.output/server/chunks/build/index-D7Bmj6bq.mjs.map +0 -1
  513. package/.output/server/chunks/build/index-DghAFpNR.mjs.map +0 -1
  514. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +0 -1
  515. package/.output/server/chunks/build/login-rXKF63j6.mjs.map +0 -1
  516. package/.output/server/chunks/build/mcp-ByNvFy4o.mjs.map +0 -1
  517. package/.output/server/chunks/build/notifications-CbLAZnKJ.mjs.map +0 -1
  518. package/.output/server/chunks/build/performance-C93MEPaZ.mjs.map +0 -1
  519. package/.output/server/chunks/build/pr-feedback-DKCB0bDE.mjs.map +0 -1
  520. package/.output/server/chunks/build/reset-password-BBoHKMqD.mjs.map +0 -1
  521. package/.output/server/chunks/build/settings-DiG0JjzC.mjs.map +0 -1
  522. package/.output/server/chunks/build/storage-3JiFJ843.mjs.map +0 -1
  523. package/.output/server/chunks/build/tags-CqYcp7js.mjs.map +0 -1
  524. package/.output/server/chunks/build/test-cases-y1HSgPX2.mjs.map +0 -1
  525. package/.output/server/chunks/build/test-functions-D2ju95Ly.mjs.map +0 -1
  526. package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +0 -1
  527. package/.output/server/chunks/build/useOpenInIde--6Me0WlL.mjs.map +0 -1
  528. package/.output/server/chunks/build/users-IdmY9JZV.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "date": "2026-07-31T03:48:57.451Z",
2
+ "date": "2026-08-01T17:27:59.414Z",
3
3
  "preset": "node-server",
4
4
  "framework": {
5
5
  "name": "nuxt",
@@ -1 +1 @@
1
- import{d as I,u as q,a as F,b as S,c as g,j as t,g as n,o as i,k as e,f as h,F as T,v as j,i as d,C as A,E as M,l as k,_ as E,m as b,t as x,G as z,p as D,h as V,r as u}from"./h49q_GXF.js";import{_ as G}from"./9N6hSApy.js";import{_ as L}from"./BKJetfRH.js";import{_ as O}from"./CWoSSKhQ.js";import"./D4UlSVir.js";const H={class:"min-h-screen flex items-center justify-center bg-elevated/50"},J={class:"flex items-center gap-2"},K={class:"text-2xl font-bold"},Q={class:"mt-4 text-center"},te=I({__name:"reset-password",setup(W){const f=q(),U=F(),$=S(),m=V(()=>f.query.token),p=V(()=>f.query.mode==="invite"),o=u(""),c=u(""),r=u(!1),a=u("");async function B(){if(a.value="",!m.value){a.value="Missing reset token";return}if(o.value.length<8){a.value="Password must be at least 8 characters";return}if(o.value!==c.value){a.value="Passwords do not match";return}r.value=!0;try{await $fetch("/api/auth/reset-password",{method:"POST",body:{token:m.value,password:o.value}}),$.add({title:p.value?"Account activated!":"Password reset!",color:"success"}),U.push("/login")}catch(l){const s=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;a.value=s||"Invalid or expired link"}finally{r.value=!1}}return(l,s)=>{const C=D,v=G,w=M,y=L,N=E,P=z,R=O;return i(),g("div",H,[t(R,{class:"w-full max-w-md"},{header:n(()=>[d("div",J,[t(C,{name:"i-lucide-lock",class:"size-6"}),d("h1",K,x(e(p)?"Set your password":"Reset your password"),1)])]),default:n(()=>[e(m)?(i(),g(T,{key:1},[e(a)?(i(),h(v,{key:0,color:"error",title:e(a),variant:"subtle",class:"mb-4"},null,8,["title"])):j("",!0),d("form",{class:"space-y-4",onSubmit:A(B,["prevent"])},[t(y,{label:"New password",name:"password",required:""},{default:n(()=>[t(w,{modelValue:e(o),"onUpdate:modelValue":s[0]||(s[0]=_=>k(o)?o.value=_:null),type:"password",placeholder:"Min 8 characters",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(y,{label:"Confirm password",name:"confirmPassword",required:""},{default:n(()=>[t(w,{modelValue:e(c),"onUpdate:modelValue":s[1]||(s[1]=_=>k(c)?c.value=_:null),type:"password",placeholder:"Repeat password",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(N,{type:"submit",block:"",loading:e(r)},{default:n(()=>[b(x(e(p)?"Activate account":"Reset password"),1)]),_:1},8,["loading"])],32)],64)):(i(),h(v,{key:0,color:"error",title:"Invalid link",description:"This link is missing or malformed."})),d("div",Q,[t(P,{to:"/login",class:"text-sm text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"},{default:n(()=>[...s[2]||(s[2]=[b(" Back to login ",-1)])]),_:1})])]),_:1})])}}});export{te as default};
1
+ import{d as I,u as q,a as F,b as S,c as g,j as t,g as n,o as i,k as e,f as h,F as T,v as j,i as d,C as A,E as M,l as k,_ as E,m as b,t as x,G as z,p as D,h as V,r as u}from"./C5TrTuWv.js";import{_ as G}from"./BBhrClA9.js";import{_ as L}from"./DH5H1DJh.js";import{_ as O}from"./C8Paf_V1.js";import"./D_y2VS8k.js";const H={class:"min-h-screen flex items-center justify-center bg-elevated/50"},J={class:"flex items-center gap-2"},K={class:"text-2xl font-bold"},Q={class:"mt-4 text-center"},te=I({__name:"reset-password",setup(W){const f=q(),U=F(),$=S(),m=V(()=>f.query.token),p=V(()=>f.query.mode==="invite"),o=u(""),c=u(""),r=u(!1),a=u("");async function B(){if(a.value="",!m.value){a.value="Missing reset token";return}if(o.value.length<8){a.value="Password must be at least 8 characters";return}if(o.value!==c.value){a.value="Passwords do not match";return}r.value=!0;try{await $fetch("/api/auth/reset-password",{method:"POST",body:{token:m.value,password:o.value}}),$.add({title:p.value?"Account activated!":"Password reset!",color:"success"}),U.push("/login")}catch(l){const s=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;a.value=s||"Invalid or expired link"}finally{r.value=!1}}return(l,s)=>{const C=D,v=G,w=M,y=L,N=E,P=z,R=O;return i(),g("div",H,[t(R,{class:"w-full max-w-md"},{header:n(()=>[d("div",J,[t(C,{name:"i-lucide-lock",class:"size-6"}),d("h1",K,x(e(p)?"Set your password":"Reset your password"),1)])]),default:n(()=>[e(m)?(i(),g(T,{key:1},[e(a)?(i(),h(v,{key:0,color:"error",title:e(a),variant:"subtle",class:"mb-4"},null,8,["title"])):j("",!0),d("form",{class:"space-y-4",onSubmit:A(B,["prevent"])},[t(y,{label:"New password",name:"password",required:""},{default:n(()=>[t(w,{modelValue:e(o),"onUpdate:modelValue":s[0]||(s[0]=_=>k(o)?o.value=_:null),type:"password",placeholder:"Min 8 characters",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(y,{label:"Confirm password",name:"confirmPassword",required:""},{default:n(()=>[t(w,{modelValue:e(c),"onUpdate:modelValue":s[1]||(s[1]=_=>k(c)?c.value=_:null),type:"password",placeholder:"Repeat password",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(N,{type:"submit",block:"",loading:e(r)},{default:n(()=>[b(x(e(p)?"Activate account":"Reset password"),1)]),_:1},8,["loading"])],32)],64)):(i(),h(v,{key:0,color:"error",title:"Invalid link",description:"This link is missing or malformed."})),d("div",Q,[t(P,{to:"/login",class:"text-sm text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"},{default:n(()=>[...s[2]||(s[2]=[b(" Back to login ",-1)])]),_:1})])]),_:1})])}}});export{te as default};
@@ -0,0 +1 @@
1
+ import{aw as o}from"./C5TrTuWv.js";function n(){const e=o()?.vnode?.scopeId;return e?{[e]:""}:{}}export{n as u};
@@ -1 +1 @@
1
- import{_ as P}from"./CkyMZI-0.js";import{_ as M}from"./DtSn2Q9-.js";import{_ as L}from"./DLNNAYfu.js";import{d as R,b as F,B as H,ao as U,k as e,f as v,g as i,v as k,r as h,o as a,i as _,c as f,j as s,m as l,t as S,_ as q,z as O,F as Q,ap as Y,h as z,x as j,am as J,p as E,w as K,A as W}from"./h49q_GXF.js";import{e as A,f as X}from"./CD3R-ggS.js";import{_ as Z}from"./9N6hSApy.js";import{a as ee}from"./BtSJxOdh.js";import{u as te}from"./BaDhDBCV.js";import{u as ne}from"./Cd8r0xk5.js";import"./CWoSSKhQ.js";import"./BjaRappk.js";const se={class:"space-y-3"},oe={key:0,class:"flex items-center justify-between gap-3"},ae={key:1,class:"text-sm text-muted"},ie={key:2,class:"flex items-center justify-between gap-3"},le={class:"text-sm flex items-center gap-2"},re={class:"flex items-start justify-between gap-3"},ce={class:"space-y-1 min-w-0"},ue={class:"text-sm font-medium"},de={key:0,class:"text-xs text-muted whitespace-pre-wrap line-clamp-6"},pe={key:1,class:"text-xs text-muted"},me=R({__name:"DesktopUpdateCard",props:{currentVersion:{}},setup(T){const p=F(),b=h(!1),r=h(!1),u=h(!1),x=h(!1),c=h(null),d=h(null);let m=null;H(()=>{b.value=!!U()}),J(()=>{m?.()});async function g(){const n=U();if(!(!n||r.value)){r.value=!0;try{c.value=await n.invoke("desktop_check_update")}catch(t){p.add({title:"Update check failed",description:A(t),color:"error"})}finally{r.value=!1}}}async function V(){const n=U(),t=Y();if(!(!n||u.value)){u.value=!0,d.value={downloaded:0,total:null};try{t&&!m&&(m=await t.listen("piwi:update-progress",({payload:o})=>{d.value=o})),await n.invoke("desktop_install_update"),x.value=!0}catch(o){p.add({title:"Update failed",description:A(o),color:"error"}),d.value=null}finally{u.value=!1}}}async function y(){const n=U();if(n)try{await n.invoke("desktop_restart_app")}catch{}}const w=z(()=>{const n=d.value;return n?.total?Math.min(100,Math.round(n.downloaded/n.total*100)):null});return(n,t)=>{const o=q,D=j,C=E,$=O,B=L;return e(b)?(a(),v(B,{key:0,icon:"i-lucide-arrow-up-circle",title:"Updates"},{subtitle:i(()=>[l(" Updates install from GitHub releases and apply on restart"+S(T.currentVersion?` — you are on v${T.currentVersion}`:"")+". ",1)]),default:i(()=>[_("div",se,[e(c)?e(c).state==="unsupported"?(a(),f("p",ae,[t[3]||(t[3]=l(" This build has no update channel — dev builds and releases made without the update signing key cannot self-update. Grab new versions from the ",-1)),s(D,{to:"https://github.com/piwitests/platform/releases/latest",target:"_blank",rel:"noopener noreferrer",class:"text-primary hover:underline"},{default:i(()=>[...t[2]||(t[2]=[l("latest release",-1)])]),_:1}),t[4]||(t[4]=l(". ",-1))])):e(c).state==="uptodate"?(a(),f("div",ie,[_("p",le,[s(C,{name:"i-lucide-check-circle",class:"size-4 text-success"}),t[5]||(t[5]=l(" You're on the latest version. ",-1))]),s(o,{size:"xs",color:"neutral",variant:"soft",icon:"i-lucide-refresh-cw",loading:e(r),onClick:g},{default:i(()=>[...t[6]||(t[6]=[l(" Check again ",-1)])]),_:1},8,["loading"])])):(a(),f(Q,{key:3},[_("div",re,[_("div",ce,[_("p",ue,"Version "+S(e(c).version)+" is available",1),e(c).notes?(a(),f("p",de,S(e(c).notes),1)):k("",!0)]),e(x)?(a(),v(o,{key:1,size:"xs",color:"success",icon:"i-lucide-rotate-cw",class:"shrink-0",onClick:y},{default:i(()=>[...t[7]||(t[7]=[l(" Restart now ",-1)])]),_:1})):(a(),v(o,{key:0,size:"xs",icon:"i-lucide-download",loading:e(u),class:"shrink-0",onClick:V},{default:i(()=>[l(S(e(u)?"Installing…":"Install update"),1)]),_:1},8,["loading"]))]),e(u)&&e(w)!==null?(a(),v($,{key:0,"model-value":e(w),size:"sm"},null,8,["model-value"])):k("",!0),e(x)?(a(),f("p",pe," The update is installed — it applies the next time the app starts. ")):k("",!0)],64)):(a(),f("div",oe,[t[1]||(t[1]=_("p",{class:"text-sm text-muted"},"Check GitHub for a newer version of the desktop app.",-1)),s(o,{size:"xs",icon:"i-lucide-refresh-cw",loading:e(r),onClick:g},{default:i(()=>[...t[0]||(t[0]=[l("Check for updates",-1)])]),_:1},8,["loading"])]))])]),_:1})):k("",!0)}}}),_e=Object.assign(me,{__name:"DesktopUpdateCard"}),fe={class:"space-y-6"},ve={class:"flex flex-wrap items-center gap-x-6 gap-y-3 text-sm"},Ve=R({__name:"about",async setup(T){let p,b;const r=W(),u=te(),{data:x}=([p,b]=K(()=>ne("/api/version","$PC3uzh76dT")),p=await p,b(),p),c=r.public.appVersion,d=r.public.buildSha,m=r.public.buildTime,g=r.public.nodeVersion,V=r.public.authEnabled,y=z(()=>d?d.slice(0,7):null),w=z(()=>{const n=x.value?.dbBackend;return n==="postgresql"?"PostgreSQL":n==="sqlite"?"SQLite":n??null});return(n,t)=>{const o=P,D=M,C=L,$=_e,B=Z,G=ee,I=j,N=E;return a(),f("div",fe,[s(C,{icon:"i-lucide-info",title:"Application"},{default:i(()=>[s(D,null,{default:i(()=>[s(o,{label:"Version",value:`v${e(c)}`},null,8,["value"]),e(y)?(a(),v(o,{key:0,label:"Build",value:e(y),hint:e(d)},null,8,["value","hint"])):k("",!0),e(m)?(a(),v(o,{key:1,label:"Built",value:("formatRelativeTime"in n?n.formatRelativeTime:e(X))(e(m)),hint:e(m)},null,8,["value","hint"])):k("",!0),s(o,{label:"Node.js",value:e(g)},null,8,["value"]),s(o,{label:"Database",value:e(w)},null,8,["value"]),s(o,{label:"Authentication",value:e(V)?"Enabled":"Disabled"},null,8,["value"])]),_:1})]),_:1}),s($,{"current-version":e(c)},null,8,["current-version"]),e(u)?(a(),v(B,{key:0,icon:"i-lucide-rocket",color:"neutral",variant:"subtle",title:"Connecting the reporter and AI clients",description:"The URL and access token for this local instance, the data location, and background-service control are on the Setup page.",actions:[{label:"Open Setup",to:"/setup",color:"neutral",variant:"solid",size:"xs"}]})):k("",!0),s(C,{icon:"i-lucide-book-open",title:"Resources"},{default:i(()=>[_("div",ve,[s(G,{to:""},{default:i(()=>[...t[0]||(t[0]=[l("Documentation",-1)])]),_:1}),s(I,{to:"/docs",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:i(()=>[...t[1]||(t[1]=[l(" API reference ",-1)])]),_:1}),s(I,{to:"https://github.com/piwitests/platform",target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:i(()=>[t[2]||(t[2]=l(" GitHub ",-1)),s(N,{name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"})]),_:1})])]),_:1})])}}});export{Ve as default};
1
+ import{_ as N}from"./CJ1rmnk4.js";import{_ as P}from"./BakMHV79.js";import{_ as L}from"./DMAiMrNr.js";import{d as R,b as F,B as H,ak as U,k as e,f as v,g as i,v as k,r as h,o as a,i as _,c as f,j as s,m as l,t as S,_ as q,z as O,F as Q,aM as Y,h as z,x as j,an as J,p as E,w as K,A as W}from"./C5TrTuWv.js";import{e as A,f as X}from"./DMtrFQqi.js";import{_ as Z}from"./BBhrClA9.js";import{a as ee}from"./B69RP95P.js";import{u as te}from"./fXUwH_3d.js";import{u as ne}from"./T5UuMUxA.js";import"./C8Paf_V1.js";import"./BjaRappk.js";const se={class:"space-y-3"},oe={key:0,class:"flex items-center justify-between gap-3"},ae={key:1,class:"text-sm text-muted"},ie={key:2,class:"flex items-center justify-between gap-3"},le={class:"text-sm flex items-center gap-2"},re={class:"flex items-start justify-between gap-3"},ce={class:"space-y-1 min-w-0"},ue={class:"text-sm font-medium"},de={key:0,class:"text-xs text-muted whitespace-pre-wrap line-clamp-6"},pe={key:1,class:"text-xs text-muted"},me=R({__name:"DesktopUpdateCard",props:{currentVersion:{}},setup(T){const p=F(),b=h(!1),r=h(!1),u=h(!1),x=h(!1),c=h(null),d=h(null);let m=null;H(()=>{b.value=!!U()}),J(()=>{m?.()});async function g(){const n=U();if(!(!n||r.value)){r.value=!0;try{c.value=await n.invoke("desktop_check_update")}catch(t){p.add({title:"Update check failed",description:A(t),color:"error"})}finally{r.value=!1}}}async function V(){const n=U(),t=Y();if(!(!n||u.value)){u.value=!0,d.value={downloaded:0,total:null};try{t&&!m&&(m=await t.listen("piwi:update-progress",({payload:o})=>{d.value=o})),await n.invoke("desktop_install_update"),x.value=!0}catch(o){p.add({title:"Update failed",description:A(o),color:"error"}),d.value=null}finally{u.value=!1}}}async function y(){const n=U();if(n)try{await n.invoke("desktop_restart_app")}catch{}}const w=z(()=>{const n=d.value;return n?.total?Math.min(100,Math.round(n.downloaded/n.total*100)):null});return(n,t)=>{const o=q,D=j,C=E,$=O,B=L;return e(b)?(a(),v(B,{key:0,icon:"i-lucide-arrow-up-circle",title:"Updates"},{subtitle:i(()=>[l(" Updates install from GitHub releases and apply on restart"+S(T.currentVersion?` — you are on v${T.currentVersion}`:"")+". ",1)]),default:i(()=>[_("div",se,[e(c)?e(c).state==="unsupported"?(a(),f("p",ae,[t[3]||(t[3]=l(" This build has no update channel — dev builds and releases made without the update signing key cannot self-update. Grab new versions from the ",-1)),s(D,{to:"https://github.com/piwitests/platform/releases/latest",target:"_blank",rel:"noopener noreferrer",class:"text-primary hover:underline"},{default:i(()=>[...t[2]||(t[2]=[l("latest release",-1)])]),_:1}),t[4]||(t[4]=l(". ",-1))])):e(c).state==="uptodate"?(a(),f("div",ie,[_("p",le,[s(C,{name:"i-lucide-check-circle",class:"size-4 text-success"}),t[5]||(t[5]=l(" You're on the latest version. ",-1))]),s(o,{size:"xs",color:"neutral",variant:"soft",icon:"i-lucide-refresh-cw",loading:e(r),onClick:g},{default:i(()=>[...t[6]||(t[6]=[l(" Check again ",-1)])]),_:1},8,["loading"])])):(a(),f(Q,{key:3},[_("div",re,[_("div",ce,[_("p",ue,"Version "+S(e(c).version)+" is available",1),e(c).notes?(a(),f("p",de,S(e(c).notes),1)):k("",!0)]),e(x)?(a(),v(o,{key:1,size:"xs",color:"success",icon:"i-lucide-rotate-cw",class:"shrink-0",onClick:y},{default:i(()=>[...t[7]||(t[7]=[l(" Restart now ",-1)])]),_:1})):(a(),v(o,{key:0,size:"xs",icon:"i-lucide-download",loading:e(u),class:"shrink-0",onClick:V},{default:i(()=>[l(S(e(u)?"Installing…":"Install update"),1)]),_:1},8,["loading"]))]),e(u)&&e(w)!==null?(a(),v($,{key:0,"model-value":e(w),size:"sm"},null,8,["model-value"])):k("",!0),e(x)?(a(),f("p",pe," The update is installed — it applies the next time the app starts. ")):k("",!0)],64)):(a(),f("div",oe,[t[1]||(t[1]=_("p",{class:"text-sm text-muted"},"Check GitHub for a newer version of the desktop app.",-1)),s(o,{size:"xs",icon:"i-lucide-refresh-cw",loading:e(r),onClick:g},{default:i(()=>[...t[0]||(t[0]=[l("Check for updates",-1)])]),_:1},8,["loading"])]))])]),_:1})):k("",!0)}}}),_e=Object.assign(me,{__name:"DesktopUpdateCard"}),fe={class:"space-y-6"},ve={class:"flex flex-wrap items-center gap-x-6 gap-y-3 text-sm"},Ve=R({__name:"about",async setup(T){let p,b;const r=W(),u=te(),{data:x}=([p,b]=K(()=>ne("/api/version","$PC3uzh76dT")),p=await p,b(),p),c=r.public.appVersion,d=r.public.buildSha,m=r.public.buildTime,g=r.public.nodeVersion,V=r.public.authEnabled,y=z(()=>d?d.slice(0,7):null),w=z(()=>{const n=x.value?.dbBackend;return n==="postgresql"?"PostgreSQL":n==="sqlite"?"SQLite":n??null});return(n,t)=>{const o=N,D=P,C=L,$=_e,B=Z,G=ee,I=j,M=E;return a(),f("div",fe,[s(C,{icon:"i-lucide-info",title:"Application"},{default:i(()=>[s(D,null,{default:i(()=>[s(o,{label:"Version",value:`v${e(c)}`},null,8,["value"]),e(y)?(a(),v(o,{key:0,label:"Build",value:e(y),hint:e(d)},null,8,["value","hint"])):k("",!0),e(m)?(a(),v(o,{key:1,label:"Built",value:("formatRelativeTime"in n?n.formatRelativeTime:e(X))(e(m)),hint:e(m)},null,8,["value","hint"])):k("",!0),s(o,{label:"Node.js",value:e(g)},null,8,["value"]),s(o,{label:"Database",value:e(w)},null,8,["value"]),s(o,{label:"Authentication",value:e(V)?"Enabled":"Disabled"},null,8,["value"])]),_:1})]),_:1}),s($,{"current-version":e(c)},null,8,["current-version"]),e(u)?(a(),v(B,{key:0,icon:"i-lucide-rocket",color:"neutral",variant:"subtle",title:"Connecting the reporter and AI clients",description:"The URL and access token for this local instance, the data location, and background-service control are on the Setup page.",actions:[{label:"Open Setup",to:"/setup",color:"neutral",variant:"solid",size:"xs"}]})):k("",!0),s(C,{icon:"i-lucide-book-open",title:"Resources"},{default:i(()=>[_("div",ve,[s(G,{to:""},{default:i(()=>[...t[0]||(t[0]=[l("Documentation",-1)])]),_:1}),s(I,{to:"/docs",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:i(()=>[...t[1]||(t[1]=[l(" API reference ",-1)])]),_:1}),s(I,{to:"https://github.com/piwitests/platform",target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:i(()=>[t[2]||(t[2]=l(" GitHub ",-1)),s(M,{name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"})]),_:1})])]),_:1})])}}});export{Ve as default};
@@ -0,0 +1 @@
1
+ import{d as O,Z as Q,Y as ee,V as f,k as e,r as R,$ as te,U as B,o as r,f as i,g as u,W as D,X as I,aC as V,B as Y,bz as z,j as k,bK as oe,c5 as ae,bJ as se,c6 as x,bH as le,J as N,h as F,P as L,ae as j,aE as G,bF as re,C as ne,v as g,a0 as W,a1 as X,bO as ue,a2 as ie,a3 as de,a4 as pe,a5 as fe,a6 as ce,a7 as ve,bP as ye,b9 as U,b8 as me,c3 as _e,bY as ge,m as A,t as M,c as E,q as h,_ as be,bS as De,F as Oe,a8 as Ce,c7 as qe}from"./C5TrTuWv.js";const[w,Be]=te("DialogRoot");var we=O({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(d,{emit:n}){const a=d,o=Q(a,"open",n,{defaultValue:a.defaultOpen,passive:a.open===void 0}),t=R(),y=R(),{modal:p,unmountOnHide:c}=ee(a);return Be({open:o,modal:p,unmountOnHide:c,openModal:()=>{o.value=!0},onOpenChange:l=>{o.value=l},onOpenToggle:()=>{o.value=!o.value},contentId:"",titleId:"",descriptionId:"",triggerElement:t,contentElement:y}),(l,m)=>f(l.$slots,"default",{open:e(o),close:()=>o.value=!1})}}),he=we,ke=O({__name:"DialogClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(d){const n=d;B();const a=w();return(s,o)=>(r(),i(e(I),D(n,{type:s.as==="button"?"button":void 0,onClick:o[0]||(o[0]=t=>e(a).onOpenChange(!1))}),{default:u(()=>[f(s.$slots,"default")]),_:3},16,["type"]))}}),Pe=ke,$e=O({__name:"DialogContentImpl",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,s=n,o=w(),{forwardRef:t,currentElement:y}=B();return o.titleId||=V(void 0,"reka-dialog-title"),o.descriptionId||=V(void 0,"reka-dialog-description"),Y(()=>{o.contentElement=y,z()!==document.body&&(o.triggerElement.value=z())}),(p,c)=>(r(),i(e(se),{"as-child":"",loop:"",trapped:a.trapFocus,present:a.present,onMountAutoFocus:c[5]||(c[5]=l=>s("openAutoFocus",l)),onUnmountAutoFocus:c[6]||(c[6]=l=>s("closeAutoFocus",l))},{default:u(()=>[k(e(oe),D({id:e(o).contentId,ref:e(t),as:p.as,"as-child":p.asChild,present:a.present,"disable-outside-pointer-events":p.disableOutsidePointerEvents,role:"dialog","aria-describedby":e(o).descriptionId,"aria-labelledby":e(o).titleId,"data-state":e(ae)(e(o).open.value)},p.$attrs,{onDismiss:c[0]||(c[0]=l=>e(o).onOpenChange(!1)),onEscapeKeyDown:c[1]||(c[1]=l=>s("escapeKeyDown",l)),onFocusOutside:c[2]||(c[2]=l=>s("focusOutside",l)),onInteractOutside:c[3]||(c[3]=l=>s("interactOutside",l)),onPointerDownOutside:c[4]||(c[4]=l=>s("pointerDownOutside",l))}),{default:u(()=>[f(p.$slots,"default")]),_:3},16,["id","as","as-child","present","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped","present"]))}}),Z=$e,Ee=O({__name:"DialogContentModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,s=n,o=w(),t=x(s),{forwardRef:y,currentElement:p}=B(),c=F(()=>a.present?p.value:void 0);le(c);const l=F(()=>{const{present:m,...v}=a;return v});return N(()=>a.present,(m,v)=>{!m&&v&&o.triggerElement.value?.focus()}),(m,v)=>(r(),i(Z,D({...l.value,...e(t)},{ref:e(y),present:m.present,"trap-focus":e(o).open.value,"disable-outside-pointer-events":a.disableOutsidePointerEvents,onCloseAutoFocus:v[0]||(v[0]=C=>{C.defaultPrevented||(C.preventDefault(),e(o).triggerElement.value?.focus())}),onPointerDownOutside:v[1]||(v[1]=C=>{const P=C.detail.originalEvent,b=P.button===0&&P.ctrlKey===!0;(P.button===2||b)&&C.preventDefault()}),onFocusOutside:v[2]||(v[2]=C=>{C.preventDefault()})}),{default:u(()=>[f(m.$slots,"default")]),_:3},16,["present","trap-focus","disable-outside-pointer-events"]))}}),Fe=Ee,Ie=O({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,o=x(n);B();const t=w(),y=R(!1),p=R(!1),c=F(()=>{const{present:l,...m}=a;return m});return N(()=>a.present,(l,m)=>{!l&&m&&(y.value||t.triggerElement.value?.focus(),y.value=!1,p.value=!1)}),(l,m)=>(r(),i(Z,D({...c.value,...e(o)},{present:l.present,"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:m[0]||(m[0]=v=>{v.defaultPrevented||(y.value||e(t).triggerElement.value?.focus(),v.preventDefault()),y.value=!1,p.value=!1}),onInteractOutside:m[1]||(m[1]=v=>{v.defaultPrevented||(y.value=!0,v.detail.originalEvent.type==="pointerdown"&&(p.value=!0));const C=v.target;e(t).triggerElement.value?.contains(C)&&v.preventDefault(),v.detail.originalEvent.type==="focusin"&&p.value&&v.preventDefault()})}),{default:u(()=>[f(l.$slots,"default")]),_:3},16,["present"]))}}),Ae=Ie,Me=O({__name:"DialogContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,s=n,o=w(),t=x(s),{forwardRef:y}=B();return(p,c)=>(r(),i(e(G),{present:p.forceMount||e(o).open.value,"force-mount":p.forceMount||!e(o).unmountOnHide.value},{default:u(({present:l})=>[e(o).modal.value?L((r(),i(Fe,D({key:0,ref:e(y),present:e(o).unmountOnHide.value||l},{...a,...e(t),...p.$attrs}),{default:u(()=>[f(p.$slots,"default")]),_:2},1040,["present"])),[[j,e(o).unmountOnHide.value||l]]):L((r(),i(Ae,D({key:1,ref:e(y),present:e(o).unmountOnHide.value||l},{...a,...e(t),...p.$attrs}),{default:u(()=>[f(p.$slots,"default")]),_:2},1040,["present"])),[[j,e(o).unmountOnHide.value||l]])]),_:3},8,["present","force-mount"]))}}),Re=Me,He=O({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(d){const n=d;B();const a=w();return(s,o)=>(r(),i(e(I),D(n,{id:e(a).descriptionId}),{default:u(()=>[f(s.$slots,"default")]),_:3},16,["id"]))}}),S=He,Te=O({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1,default:!0}},setup(d){const n=d,a=w(),s=re(n.present);return N(()=>n.present,o=>s.value=o),B(),(o,t)=>(r(),i(e(I),{as:o.as,"as-child":o.asChild,"data-state":e(a).open.value?"open":"closed",style:{"pointer-events":"auto"},onPointerdown:t[0]||(t[0]=ne(()=>{},["left","self","prevent"]))},{default:u(()=>[f(o.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),Se=Te,Ke=O({__name:"DialogOverlay",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const n=w(),{forwardRef:a}=B();return(s,o)=>e(n)?.modal.value?(r(),i(e(G),{key:0,present:s.forceMount||e(n).open.value,"force-mount":s.forceMount||!e(n).unmountOnHide.value},{default:u(({present:t})=>[L(k(Se,D(s.$attrs,{ref:e(a),as:s.as,"as-child":s.asChild,present:e(n).unmountOnHide.value||t}),{default:u(()=>[f(s.$slots,"default")]),_:2},1040,["as","as-child","present"]),[[j,e(n).unmountOnHide.value||t]])]),_:3},8,["present","force-mount"])):g("v-if",!0)}}),J=Ke,Ve=O({__name:"DialogPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(d){const n=d;return(a,s)=>(r(),i(e(ue),W(X(n)),{default:u(()=>[f(a.$slots,"default")]),_:3},16))}}),Le=Ve,je=O({__name:"DialogTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h2"}},setup(d){const n=d,a=w();return B(),(s,o)=>(r(),i(e(I),D(n,{id:e(a).titleId}),{default:u(()=>[f(s.$slots,"default")]),_:3},16,["id"]))}}),K=je,xe=O({__name:"DialogTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(d){const n=d,a=w(),{forwardRef:s,currentElement:o}=B();return a.contentId||=V(void 0,"reka-dialog-content"),Y(()=>{a.triggerElement.value=o.value}),(t,y)=>(r(),i(e(I),D(n,{ref:e(s),type:t.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":e(a).open.value||!1,"aria-controls":e(a).open.value?e(a).contentId:void 0,"data-state":e(a).open.value?"open":"closed",onClick:e(a).onOpenToggle}),{default:u(()=>[f(t.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","onClick"]))}}),Ne=xe;const ze={slots:{overlay:"fixed inset-0",content:"bg-default divide-y divide-default flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]",content:"data-[state=open]:animate-[scale-in_200ms_ease-out] data-[state=closed]:animate-[scale-out_200ms_ease-in]"}},fullscreen:{true:{content:"inset-0"},false:{content:"w-[calc(100vw-2rem)] max-w-lg rounded-lg shadow-lg ring ring-default"}},overlay:{true:{overlay:"bg-elevated/75"}},scrollable:{true:{overlay:"overflow-y-auto",content:"relative"},false:{content:"fixed",body:"overflow-y-auto"}}},compoundVariants:[{scrollable:!0,fullscreen:!1,class:{overlay:"grid place-items-center p-4 sm:py-8"}},{scrollable:!1,fullscreen:!1,class:{content:"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 max-h-[calc(100dvh-2rem)] sm:max-h-[calc(100dvh-4rem)] overflow-hidden"}}]},Je={__name:"UModal",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},scrollable:{type:Boolean,required:!1},transition:{type:Boolean,required:!1,default:!0},fullscreen:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1}},emits:["leave","after:leave","enter","after:enter","close:prevent","update:open"],setup(d,{emit:n}){const a=d,s=n,o=ie(),t=de("modal",a),{t:y}=pe(),p=fe(),c=ce(ve(t,"open","defaultOpen","modal","unmountOnHide"),s),l=ye(U(()=>t.portal)),m=U(()=>t.content),v=F(()=>t.dismissible?{pointerDownOutside:_=>qe(_,{scrollable:t.scrollable})}:["interactOutside","escapeKeyDown"].reduce((q,H)=>(q[H]=$=>{$.preventDefault(),s("close:prevent")},q),{})),[C,P]=me(),b=F(()=>Ce({extend:ze,...p.ui?.modal||{}})({transition:t.transition,fullscreen:t.fullscreen,overlay:t.overlay,scrollable:t.scrollable}));return(_,q)=>(r(),i(e(he),W(X(e(c))),{default:u(({open:H,close:$})=>[k(e(C),null,{default:u(()=>[k(e(Re),D({"data-slot":"content",class:b.value.content({class:[!o.default&&e(t).class,e(t).ui?.content]})},m.value,{onEnter:q[0]||(q[0]=T=>s("enter")),onAfterEnter:q[1]||(q[1]=T=>s("after:enter")),onLeave:q[2]||(q[2]=T=>s("leave")),onAfterLeave:q[3]||(q[3]=T=>s("after:leave"))},_e(v.value)),{default:u(()=>[!e(t).title&&!o.title||!e(t).description&&!o.description||o.content?(r(),i(e(ge),{key:0},{default:u(()=>[!e(t).title&&!o.title?(r(),i(e(K),{key:0})):o.content?(r(),i(e(K),{key:1},{default:u(()=>[f(_.$slots,"title",{},()=>[A(M(e(t).title),1)])]),_:3})):g("",!0),!e(t).description&&!o.description?(r(),i(e(S),{key:2})):o.content?(r(),i(e(S),{key:3},{default:u(()=>[f(_.$slots,"description",{},()=>[A(M(e(t).description),1)])]),_:3})):g("",!0)]),_:3})):g("",!0),f(_.$slots,"content",{close:$},()=>[o.header||e(t).title||o.title||e(t).description||o.description||e(t).close||o.close?(r(),E("div",{key:0,"data-slot":"header",class:h(b.value.header({class:e(t).ui?.header}))},[f(_.$slots,"header",{close:$},()=>[e(t).title||o.title||e(t).description||o.description?(r(),E("div",{key:0,"data-slot":"wrapper",class:h(b.value.wrapper({class:e(t).ui?.wrapper}))},[e(t).title||o.title?(r(),i(e(K),{key:0,"data-slot":"title",class:h(b.value.title({class:e(t).ui?.title}))},{default:u(()=>[f(_.$slots,"title",{},()=>[A(M(e(t).title),1)])]),_:3},8,["class"])):g("",!0),e(t).description||o.description?(r(),i(e(S),{key:1,"data-slot":"description",class:h(b.value.description({class:e(t).ui?.description}))},{default:u(()=>[f(_.$slots,"description",{},()=>[A(M(e(t).description),1)])]),_:3},8,["class"])):g("",!0)],2)):g("",!0),f(_.$slots,"actions"),e(t).close||o.close?(r(),i(e(Pe),{key:1,"as-child":""},{default:u(()=>[f(_.$slots,"close",{ui:b.value},()=>[e(t).close?(r(),i(be,D({key:0,icon:e(t).closeIcon||e(p).ui.icons.close,color:"neutral",variant:"ghost","aria-label":e(y)("modal.close")},typeof e(t).close=="object"?e(t).close:{},{"data-slot":"close",class:b.value.close({class:e(t).ui?.close})}),null,16,["icon","aria-label","class"])):g("",!0)])]),_:2},1024)):g("",!0)])],2)):g("",!0),o.body?(r(),E("div",{key:1,"data-slot":"body",class:h(b.value.body({class:e(t).ui?.body}))},[f(_.$slots,"body",{close:$})],2)):g("",!0),o.footer?(r(),E("div",{key:2,"data-slot":"footer",class:h(b.value.footer({class:e(t).ui?.footer}))},[f(_.$slots,"footer",{close:$})],2)):g("",!0)])]),_:2},1040,["class"])]),_:2},1024),o.default?(r(),i(e(Ne),{key:0,"as-child":"",class:h(e(t).class)},{default:u(()=>[f(_.$slots,"default",{open:H})]),_:2},1032,["class"])):g("",!0),k(e(Le),D(e(l),{"force-mount":e(l).disabled&&e(t).unmountOnHide===!1||void 0}),{default:u(()=>[k(e(De),null,{default:u(()=>[e(t).scrollable?(r(),i(e(J),{key:0,"data-slot":"overlay",class:h(b.value.overlay({class:e(t).ui?.overlay}))},{default:u(()=>[k(e(P))]),_:1},8,["class"])):(r(),E(Oe,{key:1},[e(t).overlay?(r(),i(e(J),{key:0,"data-slot":"overlay",class:h(b.value.overlay({class:e(t).ui?.overlay}))},null,8,["class"])):g("",!0),k(e(P))],64))]),_:1})]),_:1},16,["force-mount"])]),_:3},16))}};export{Ne as D,Je as _,Le as a,J as b,Re as c,K as d,S as e,Pe as f,he as g};
@@ -0,0 +1 @@
1
+ import{_ as Y}from"./Cu2Q4iPh.js";import{_ as Z}from"./Qo6oszaF.js";import{_ as tt}from"./CyLcEDg2.js";import{_ as et}from"./Drw8yQg6.js";import{_ as st,a as at}from"./opyDpgSw.js";import{_ as ot}from"./D0Kop4bS.js";import{d as rt,u as nt,w,J as it,e as lt,f as u,g as a,h as j,o as r,i,t as l,k as t,v as d,c as _,j as o,s as ct,m,G as ut,_ as dt,F as S,y as D,q as _t,p as mt,r as pt,n as ft}from"./C5TrTuWv.js";import{_ as gt}from"./CJ1rmnk4.js";import{_ as ht}from"./LwoTUb-r.js";import{_ as yt}from"./B69RP95P.js";import{_ as xt}from"./BakMHV79.js";import{_ as bt}from"./DM3bDZC6.js";import{_ as vt}from"./BkxRbXIj.js";import{_ as kt}from"./DuOH5jcQ.js";import{_ as $t}from"./Bg93Rnts.js";import{_ as jt}from"./BFxvHlO9.js";import{_ as Rt}from"./DMAiMrNr.js";import{_ as Ct}from"./BWMSVSNM.js";import{f as Tt,j as wt}from"./DMtrFQqi.js";import{u as I}from"./T5UuMUxA.js";import"./BCGljaM0.js";import"./BBhrClA9.js";import"./Ce5_Tq63.js";import"./DaNC-xl1.js";import"./DH5H1DJh.js";import"./D_y2VS8k.js";import"./C-XjxjG5.js";import"./03FA4-rI.js";import"./DMsm-RGQ.js";import"./B1LUinhp.js";import"./6Z_ZwH8I.js";import"./Bn0jaRxI.js";import"./CX5Q0dZ8.js";import"./BrUBOQ0y.js";import"./BjaRappk.js";import"./DGq4A2Pd.js";import"./BvAfKk6C.js";import"./D7W_4Sqc.js";import"./P5uOaRUZ.js";import"./V9p3z39z.js";import"./C8Paf_V1.js";const St={class:"flex flex-col gap-4 p-4"},Dt={class:"flex items-start gap-4 flex-wrap"},It={class:"flex-1 min-w-0"},zt={class:"text-xl font-bold truncate"},Lt={key:1,class:"flex items-center gap-2 mt-2"},Nt={key:0,class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},Pt={class:"flex items-center gap-1 flex-wrap max-h-[200px] overflow-y-auto py-1"},Ut={key:0,class:"text-sm text-gray-400"},Et={key:1,class:"text-center py-6 text-gray-400"},At={class:"text-xs whitespace-nowrap"},Bt={class:"text-gray-500"},Vt={class:"text-gray-400 ml-1"},Ft={key:1,class:"text-gray-400"},Kt=["title"],Ht={class:"flex justify-end"},Gt={class:"space-y-2"},Mt={class:"flex items-center gap-2 min-w-0"},Ot={class:"text-sm truncate"},qt={key:0,class:"text-xs text-gray-400 shrink-0"},Ae=rt({__name:"[id]",async setup(Jt){let p,y;const h=nt().params.id,{data:s,refresh:z}=([p,y]=w(()=>I(`/api/test-cases/${h}`,"$IiVoRdAdzb")),p=await p,y(),p),{data:f}=([p,y]=w(()=>I(`/api/test-cases/${h}/history`,"$cuQ0G6KeIS")),p=await p,y(),p),R=pt([]);it(()=>s.value?.project?.id,async n=>{if(n)try{R.value=(await $fetch(`/api/projects/${n}/markers`)).markers??[]}catch{}},{immediate:!0});function L(){const n=s.value?.project?.id;n&&ft(`/projects/${n}?tab=timeline`)}lt(j(()=>({title:`${s.value?.title||`Test case #${h}`} — Piwi Dashboard`})));const x=j(()=>{const n=s.value;return!n||!n.totalRuns?null:Math.round((n.passedRuns+n.skippedRuns)/n.totalRuns*100)}),N=j(()=>s.value?.filePath?[{filePath:s.value.filePath,title:s.value.title,line:null}]:[]),P=n=>n==="open"?"error":n==="resolved"?"success":"neutral",U=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"},{id:"actions",header:"Actions"}];return(n,c)=>{const E=Y,A=Z,B=tt,V=et,F=at,K=ot,b=ct,v=dt,k=ut,g=gt,C=ht,H=yt,G=xt,M=bt,T=vt,O=kt,q=mt,J=$t,Q=jt,$=Rt,W=Ct,X=st;return r(),u(X,{id:"test-case-evolution"},{header:a(()=>[o(F,null,{leading:a(()=>[o(E),o(A,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...t(s)?.project?.id?[{label:t(s).project.name||"Project",to:`/projects/${t(s).project.id}`}]:[{label:"Project"}],{label:t(s)?.title||`Test case #${t(h)}`}]},null,8,["items"])]),right:a(()=>[o(B,{"project-id":t(s)?.project?.id,"project-label":t(s)?.project?.label??t(s)?.project?.name,cases:t(N),label:"Reproduce locally","preset-options":{mode:"grep",repeatEach:20,trace:!0},class:"mr-2"},null,8,["project-id","project-label","cases"]),o(V,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>t(z)()}]},null,8,["actions"])]),_:1})]),body:a(()=>[i("div",St,[i("div",Dt,[i("div",It,[i("h1",zt,l(t(s)?.title),1),t(s)?.filePath?(r(),u(K,{key:0,"file-path":t(s).filePath,"project-key":t(s)?.project?.id,"project-name":t(s)?.project?.name,class:"text-sm text-gray-500 mt-0.5"},null,8,["file-path","project-key","project-name"])):d("",!0),t(s)?.project?(r(),_("div",Lt,[o(b,{color:"neutral",variant:"soft",size:"xs",class:"font-mono"},{default:a(()=>[m(l(t(s).project.name),1)]),_:1}),t(s)?.flakyRuns>0?(r(),u(b,{key:0,color:"warning",variant:"soft",size:"xs"},{default:a(()=>[m(l(t(s).flakyRuns)+" flaky run"+l(t(s).flakyRuns===1?"":"s"),1)]),_:1})):d("",!0)])):d("",!0)]),t(s)?.lastExecutionId?(r(),u(k,{key:0,to:`/test-run-cases/${t(s).lastExecutionId}`,class:"shrink-0"},{default:a(()=>[o(v,{size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[0]||(c[0]=[m(" Latest execution ",-1)])]),_:1})]),_:1},8,["to"])):d("",!0)]),o(G,null,{default:a(()=>[o(g,{label:"Total runs",value:t(s)?.totalRuns??0},null,8,["value"]),o(g,{label:"Pass rate",value:t(x)!==null?`${t(x)}%`:"—","value-class":(t(x)??0)>=80?"text-green-600":(t(x)??0)>=50?"text-yellow-600":"text-red-600"},null,8,["value","value-class"]),o(g,{label:"Failed",value:t(s)?.failedRuns??0,"value-class":"text-red-600"},null,8,["value"]),o(g,{label:"Avg duration"},{default:a(()=>[o(C,{ms:t(s)?.avgDuration},null,8,["ms"])]),_:1}),o(g,{label:"Flaky",value:t(s)?.flakyRuns??0,"value-class":(t(s)?.flakyRuns??0)>0?"text-purple-600":""},{label:a(()=>[c[1]||(c[1]=m(" Flaky ",-1)),o(H,{topic:"case.flaky-count"})]),_:1},8,["value","value-class"]),o(g,{label:"Last run",size:"sm",value:t(s)?.lastRunAt?("formatRelativeTime"in n?n.formatRelativeTime:t(Tt))(t(s).lastRunAt):"—"},null,8,["value"])]),_:1}),t(f)&&t(f).length>1?(r(),_("div",Nt,[o(T,{title:"Duration trend",icon:"i-lucide-trending-up",help:"case.history-chart"},{default:a(()=>[o(M,{data:t(f),height:200,markers:t(R),onMarkerClick:L},null,8,["data","markers"])]),_:1}),o(T,{title:"Status history",icon:"i-lucide-check-circle",help:"case.sparkline"},{default:a(()=>[i("div",Pt,[(r(!0),_(S,null,D(t(f),(e,Wt)=>(r(),u(O,{key:e.id,text:`Run #${e.runId}: ${e.status} — ${new Date(e.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},{default:a(()=>[o(k,{to:`/test-run-cases/${e.id}`,class:_t([{"bg-red-500 hover:bg-red-600":e.status==="failed"||e.status==="timedOut","bg-green-500 hover:bg-green-600":e.status==="passed","bg-yellow-500 hover:bg-yellow-600":e.status==="skipped","bg-gray-400 hover:bg-gray-500":!["passed","failed","skipped","timedOut"].includes(e.status)},"size-3.5 rounded-sm inline-block transition-colors"]),title:`Run #${e.runId}: ${e.status}`},null,8,["to","class","title"])]),_:2},1032,["text"]))),128)),t(f).length===0?(r(),_("span",Ut,"No history yet")):d("",!0)])]),_:1})])):t(f)&&t(f).length<=1?(r(),_("div",Et,[o(q,{name:"i-lucide-trending-up",class:"size-6 mx-auto mb-1"}),c[2]||(c[2]=i("p",{class:"text-sm"},"Need at least 2 runs to show trends.",-1))])):d("",!0),o($,{icon:"i-lucide-list-checks",title:`Recent executions (${t(s)?.recentExecutions?.length??0})`},{default:a(()=>[t(s)?.recentExecutions?.length?(r(),u(J,{key:0,data:t(s).recentExecutions,columns:U,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"startTime-cell":a(({row:e})=>[i("span",At,[i("span",Bt,l(new Date(e.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),i("span",Vt,l(new Date(e.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":a(({row:e})=>[o(b,{color:("getStatusColor"in n?n.getStatusColor:t(wt))(e.original.status),variant:"subtle",class:"capitalize"},{default:a(()=>[m(l(e.original.status),1)]),_:2},1032,["color"])]),"duration-cell":a(({row:e})=>[e.original.duration!==null?(r(),u(C,{key:0,ms:e.original.duration},null,8,["ms"])):(r(),_("span",Ft,"—"))]),"retries-cell":a(({row:e})=>[m(l(e.original.retries&&e.original.retries>0?e.original.retries:""),1)]),"runId-cell":a(({row:e})=>[o(k,{to:`/test-runs/${e.original.runId}`,class:"text-primary hover:underline"},{default:a(()=>[m(l(e.original.runLabel?`${e.original.runLabel} (#${e.original.runId})`:`#${e.original.runId}`),1)]),_:2},1032,["to"])]),"error-cell":a(({row:e})=>[e.original.error?(r(),_("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:e.original.error},l(e.original.error.length>80?`${e.original.error.substring(0,80)}…`:e.original.error),9,Kt)):d("",!0)]),"actions-header":a(()=>[...c[3]||(c[3]=[i("div",{class:"text-right"},"Actions",-1)])]),"actions-cell":a(({row:e})=>[i("div",Ht,[o(v,{to:`/test-run-cases/${e.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[4]||(c[4]=[m(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])):(r(),u(Q,{key:1,icon:"i-lucide-inbox",text:"No executions yet"}))]),_:1},8,["title"]),t(s)?.failureClusters?.length?(r(),u($,{key:2,icon:"i-lucide-bug",title:`Failure clusters (${t(s).failureClusters.length})`,help:"cluster.concept"},{default:a(()=>[i("div",Gt,[(r(!0),_(S,null,D(t(s).failureClusters,e=>(r(),_("div",{key:e.id,class:"flex items-center justify-between py-2 px-2 rounded hover:bg-gray-50 dark:hover:bg-gray-800"},[i("div",Mt,[o(b,{color:P(e.status),variant:"soft",size:"xs",class:"capitalize"},{default:a(()=>[m(l(e.status),1)]),_:2},1032,["color"]),i("span",Ot,l(e.signature),1),e.occurrences>1?(r(),_("span",qt,l(e.occurrences)+" occurrences ",1)):d("",!0)]),o(v,{to:`/failure-clusters/${e.id}`,size:"xs",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[5]||(c[5]=[m(" View ",-1)])]),_:1},8,["to"])]))),128))])]),_:1},8,["title"])):d("",!0),t(s)?.links?.length?(r(),u($,{key:3,icon:"i-lucide-link",title:"Links",help:"shared.entity-links"},{default:a(()=>[o(W,{"entity-type":"test_case","entity-id":Number(t(h)),links:t(s).links??null},null,8,["entity-id","links"])]),_:1})):d("",!0)])]),_:1})}}});export{Ae as default};
@@ -1 +1 @@
1
- import{d as m,k as r,o as c,f as _,g,j as b,p as w,R as v,q as x,c as $,h as t}from"./h49q_GXF.js";import{_ as C}from"./CRPt9SfB.js";import{C as S,D as k}from"./CD3R-ggS.js";const z={key:1,class:"text-xs text-gray-400 dark:text-gray-500 italic"},B=m({__name:"BrowserBadge",props:{browser:{},size:{}},setup(a){const n=a,s=t(()=>n.browser?.projectName??null),l=t(()=>S(s.value)),p=t(()=>k(s.value)),u=t(()=>n.size==="sm"?"size-3.5":n.size==="lg"?"size-5":"size-4"),i=t(()=>{const e=n.browser;if(!e)return[];const o=[];return e.browserName&&e.browserName!==s.value&&o.push(`Browser: ${e.browserName}`),e.channel&&o.push(`Channel: ${e.channel}`),e.viewport&&o.push(`Viewport: ${e.viewport.width}×${e.viewport.height}`),e.deviceScaleFactor&&e.deviceScaleFactor!==1&&o.push(`Scale: ${e.deviceScaleFactor}x`),e.isMobile&&o.push("Mobile"),e.hasTouch&&!e.isMobile&&o.push("Touch"),e.locale&&o.push(`Locale: ${e.locale}`),e.timezoneId&&o.push(`TZ: ${e.timezoneId}`),e.colorScheme&&e.colorScheme!=="light"&&o.push(`Color: ${e.colorScheme}`),e.reducedMotion&&e.reducedMotion!=="no-preference"&&o.push(`Motion: ${e.reducedMotion}`),e.forcedColors&&e.forcedColors!=="none"&&o.push("Colors: forced"),e.offline&&o.push("Offline"),e.bypassCSP&&o.push("CSP bypassed"),e.javaScriptEnabled===!1&&o.push("JS disabled"),e.serviceWorkers==="block"&&o.push("SW blocked"),e.geolocation&&o.push(`Geo: ${e.geolocation.latitude.toFixed(2)},${e.geolocation.longitude.toFixed(2)}`),e.userAgent&&o.push(`UA: ${e.userAgent.length>60?e.userAgent.slice(0,60)+"…":e.userAgent}`),o}),h=t(()=>s.value?i.value.length?`${s.value} · ${i.value.join(" · ")}`:s.value:"");return(e,o)=>{const f=w,d=C;return r(s)?(c(),_(d,{key:0,text:r(h),popper:{placement:"top"}},{default:g(()=>[b(f,{name:r(l),class:x(["shrink-0 cursor-help",r(u)]),style:v({color:r(p)})},null,8,["name","class","style"])]),_:1},8,["text"])):(c(),$("span",z,"—"))}}}),A=Object.assign(B,{__name:"BrowserBadge"});export{A as _};
1
+ import{d as m,k as r,o as c,f as _,g,j as b,p as w,R as v,q as x,c as $,h as t}from"./C5TrTuWv.js";import{_ as C}from"./DuOH5jcQ.js";import{C as S,D as k}from"./DMtrFQqi.js";const z={key:1,class:"text-xs text-gray-400 dark:text-gray-500 italic"},B=m({__name:"BrowserBadge",props:{browser:{},size:{}},setup(a){const n=a,s=t(()=>n.browser?.projectName??null),l=t(()=>S(s.value)),p=t(()=>k(s.value)),u=t(()=>n.size==="sm"?"size-3.5":n.size==="lg"?"size-5":"size-4"),i=t(()=>{const e=n.browser;if(!e)return[];const o=[];return e.browserName&&e.browserName!==s.value&&o.push(`Browser: ${e.browserName}`),e.channel&&o.push(`Channel: ${e.channel}`),e.viewport&&o.push(`Viewport: ${e.viewport.width}×${e.viewport.height}`),e.deviceScaleFactor&&e.deviceScaleFactor!==1&&o.push(`Scale: ${e.deviceScaleFactor}x`),e.isMobile&&o.push("Mobile"),e.hasTouch&&!e.isMobile&&o.push("Touch"),e.locale&&o.push(`Locale: ${e.locale}`),e.timezoneId&&o.push(`TZ: ${e.timezoneId}`),e.colorScheme&&e.colorScheme!=="light"&&o.push(`Color: ${e.colorScheme}`),e.reducedMotion&&e.reducedMotion!=="no-preference"&&o.push(`Motion: ${e.reducedMotion}`),e.forcedColors&&e.forcedColors!=="none"&&o.push("Colors: forced"),e.offline&&o.push("Offline"),e.bypassCSP&&o.push("CSP bypassed"),e.javaScriptEnabled===!1&&o.push("JS disabled"),e.serviceWorkers==="block"&&o.push("SW blocked"),e.geolocation&&o.push(`Geo: ${e.geolocation.latitude.toFixed(2)},${e.geolocation.longitude.toFixed(2)}`),e.userAgent&&o.push(`UA: ${e.userAgent.length>60?e.userAgent.slice(0,60)+"…":e.userAgent}`),o}),h=t(()=>s.value?i.value.length?`${s.value} · ${i.value.join(" · ")}`:s.value:"");return(e,o)=>{const f=w,d=C;return r(s)?(c(),_(d,{key:0,text:r(h),popper:{placement:"top"}},{default:g(()=>[b(f,{name:r(l),class:x(["shrink-0 cursor-help",r(u)]),style:v({color:r(p)})},null,8,["name","class","style"])]),_:1},8,["text"])):(c(),$("span",z,"—"))}}}),A=Object.assign(B,{__name:"BrowserBadge"});export{A as _};
@@ -1 +1 @@
1
- import{_ as pe}from"./C9p0YCAi.js";import{_ as me}from"./BTvE9qca.js";import{_ as he,a as fe}from"./B_mN5eMV.js";import{_ as ye}from"./Dj-TetcW.js";import{_ as X}from"./9N6hSApy.js";import{_ as ge}from"./DLNNAYfu.js";import{d as Y,o as v,c as C,i as b,t as I,k as e,j as E,g as S,p as J,q,m as R,s as ve,f as A,v as B,x as _e,F as K,y as Q,h as U,_ as Z,z as be,A as ee,r as F,u as xe,w as we,e as ke,B as $e,C as O}from"./h49q_GXF.js";import{_ as Te}from"./BVN50jIb.js";import{f as V}from"./D-c8ZSws.js";import{u as Ce}from"./Cd8r0xk5.js";import"./BhH0TNTi.js";import"./CD3R-ggS.js";import"./BtSJxOdh.js";import"./BjaRappk.js";import"./CWoSSKhQ.js";const Ie={class:"p-3 sm:p-4 space-y-2"},Be={class:"flex items-start justify-between gap-3"},ze={class:"min-w-0 space-y-1"},Ee={class:"font-medium text-sm break-all"},Ue={class:"text-xs text-gray-500"},Re={class:"flex items-center gap-2 shrink-0"},Ae={key:2,class:"text-xs"},je={key:0,class:"text-xs text-gray-500"},Le={class:"text-default"},Pe={key:1,class:"flex flex-wrap gap-x-4 gap-y-1 text-xs text-gray-500"},Se={key:0},De={key:1},Fe={key:2},Ne={key:3},Me={key:3,class:"text-xs text-gray-500"},Ve={class:"space-y-0.5"},He={class:"text-[11px]"},Oe=Y({__name:"ImportFileRow",props:{entry:{},removable:{type:Boolean}},emits:["remove"],setup(p){const c=p,a={hashing:{label:"Reading",color:"neutral",icon:"i-lucide-loader-circle"},checking:{label:"Checking",color:"neutral",icon:"i-lucide-loader-circle"},ready:{label:"Ready",color:"primary",icon:"i-lucide-circle-check"},uploading:{label:"Importing",color:"primary",icon:"i-lucide-loader-circle"},imported:{label:"Imported",color:"success",icon:"i-lucide-check"},duplicate:{label:"Already imported",color:"neutral",icon:"i-lucide-copy-check"},"too-large":{label:"Too large",color:"warning",icon:"i-lucide-weight"},invalid:{label:"Not importable",color:"warning",icon:"i-lucide-file-x"},failed:{label:"Failed",color:"error",icon:"i-lucide-circle-alert"}},d=U(()=>a[c.entry.state]),m=U(()=>["hashing","checking","uploading"].includes(c.entry.state)),o=U(()=>c.entry.result),t=U(()=>c.entry.state==="imported"?o.value:null),h=U(()=>t.value?.kind==="trace");function n(l,i){return`${l} ${i}${l===1?"":"s"}`}return(l,i)=>{const f=J,y=ve,k=Z,$=be,x=_e,T=X;return v(),C("div",Ie,[b("div",Be,[b("div",ze,[b("p",Ee,I(p.entry.name),1),b("p",Ue,I(("formatBytes"in l?l.formatBytes:e(V))(p.entry.size)),1)]),b("div",Re,[E(y,{color:e(d).color,variant:"subtle",size:"sm"},{default:S(()=>[E(f,{name:e(d).icon,class:q(["size-3.5 mr-1",e(m)&&"animate-spin"])},null,8,["name","class"]),R(" "+I(e(d).label),1)]),_:1},8,["color"]),p.removable?(v(),A(k,{key:0,icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"xs",title:"Remove from the list",onClick:i[0]||(i[0]=s=>l.$emit("remove",p.entry.id))})):B("",!0)])]),p.entry.state==="uploading"||p.entry.state==="hashing"?(v(),A($,{key:0,"model-value":Math.round(p.entry.progress*100),size:"sm"},null,8,["model-value"])):B("",!0),p.entry.message?(v(),C("p",{key:1,class:q(["text-xs",p.entry.state==="failed"?"text-error":"text-gray-500"])},I(p.entry.message),3)):B("",!0),e(o)?.testRunId?(v(),C("div",Ae,[E(x,{to:`/test-runs/${e(o).testRunId}`,class:"text-primary hover:underline"},{default:S(()=>[R(" View run #"+I(e(o).testRunId),1)]),_:1},8,["to"])])):B("",!0),e(t)?(v(),C(K,{key:3},[e(h)?(v(),C("p",je,[i[1]||(i[1]=R(" Added ",-1)),b("span",Le,I(e(t).caseTitle),1),i[2]||(i[2]=R(" to this run. ",-1))])):(v(),C("div",Pe,[b("span",null,I(n(e(t).totalTests,"execution")),1),b("span",null,I(e(t).passedTests)+" passed",1),b("span",null,I(e(t).failedTests)+" failed",1),e(t).skippedTests?(v(),C("span",Se,I(e(t).skippedTests)+" skipped",1)):B("",!0),e(t).flakyTests?(v(),C("span",De,I(e(t).flakyTests)+" flaky",1)):B("",!0),e(t).traceCount?(v(),C("span",Fe,I(n(e(t).traceCount,"trace")),1)):B("",!0),e(t).attachmentCount?(v(),C("span",Ne,I(n(e(t).attachmentCount,"attachment")),1)):B("",!0)])),e(t).shard?(v(),A(T,{key:2,color:"warning",variant:"subtle",icon:"i-lucide-split",description:`This archive is shard ${e(t).shard.current} of ${e(t).shard.total}. Each shard imports as its own run — they are not merged.`,ui:{description:"text-xs"}},null,8,["description"])):B("",!0),e(t).filePaths.length&&!e(h)?(v(),C("div",Me,[i[3]||(i[3]=b("p",{class:"mb-1"},[R(" Spec files recorded as "),b("span",{class:"text-gray-400"},"(these must match the paths your live runs report for history to line up)"),R(": ")],-1)),b("ul",Ve,[(v(!0),C(K,null,Q(e(t).filePaths,s=>(v(),C("li",{key:s},[b("code",He,I(s),1)]))),128))])])):B("",!0)],64)):B("",!0)])}}}),qe=Object.assign(Oe,{__name:"ImportFileRow"}),P=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ke=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),We=Array.from({length:256},(p,c)=>c.toString(16).padStart(2,"0"));class te{#r=new Uint32Array(Ke);#t=new Uint8Array(64);#e=0;#n=0;#i=new Uint32Array(64);#o=!1;update(c){if(this.#o)throw new Error("Sha256: update() after digest()");this.#n+=c.length;let a=0;if(this.#e>0){const d=Math.min(64-this.#e,c.length);if(this.#t.set(c.subarray(0,d),this.#e),this.#e+=d,a=d,this.#e<64)return this;this.#s(this.#t,0),this.#e=0}for(;a+64<=c.length;a+=64)this.#s(c,a);return a<c.length&&(this.#t.set(c.subarray(a),0),this.#e=c.length-a),this}digest(){if(this.#o)throw new Error("Sha256: digest() called twice");this.#o=!0;const c=this.#n*8;this.#t[this.#e++]=128,this.#e>56&&(this.#t.fill(0,this.#e),this.#s(this.#t,0),this.#e=0),this.#t.fill(0,this.#e,56);const a=new DataView(this.#t.buffer,this.#t.byteOffset,64);a.setUint32(56,Math.floor(c/4294967296),!1),a.setUint32(60,c>>>0,!1),this.#s(this.#t,0);const d=new Uint8Array(32),m=new DataView(d.buffer);for(let o=0;o<8;o++)m.setUint32(o*4,this.#r[o],!1);return d}hex(){const c=this.digest();let a="";for(let d=0;d<32;d++)a+=We[c[d]];return a}#s(c,a){const d=this.#i,m=this.#r;for(let r=0;r<16;r++){const _=a+r*4;d[r]=c[_]<<24|c[_+1]<<16|c[_+2]<<8|c[_+3]}for(let r=16;r<64;r++){const _=d[r-15],z=d[r-2],g=(_>>>7|_<<25)^(_>>>18|_<<14)^_>>>3,D=(z>>>17|z<<15)^(z>>>19|z<<13)^z>>>10;d[r]=d[r-16]+g+d[r-7]+D|0}let o=m[0],t=m[1],h=m[2],n=m[3],l=m[4],i=m[5],f=m[6],y=m[7],k=0,$=0,x=0,T=0,s=0,u=0;for(let r=0;r<64;r+=8)$=(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7),x=l&i^~l&f,s=y+$+x+P[r]+d[r]|0,k=(o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10),T=o&t^o&h^t&h,u=k+T|0,n=n+s|0,y=s+u|0,$=(n>>>6|n<<26)^(n>>>11|n<<21)^(n>>>25|n<<7),x=n&l^~n&i,s=f+$+x+P[r+1]+d[r+1]|0,k=(y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10),T=y&o^y&t^o&t,u=k+T|0,h=h+s|0,f=s+u|0,$=(h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7),x=h&n^~h&l,s=i+$+x+P[r+2]+d[r+2]|0,k=(f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10),T=f&y^f&o^y&o,u=k+T|0,t=t+s|0,i=s+u|0,$=(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7),x=t&h^~t&n,s=l+$+x+P[r+3]+d[r+3]|0,k=(i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10),T=i&f^i&y^f&y,u=k+T|0,o=o+s|0,l=s+u|0,$=(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7),x=o&t^~o&h,s=n+$+x+P[r+4]+d[r+4]|0,k=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),T=l&i^l&f^i&f,u=k+T|0,y=y+s|0,n=s+u|0,$=(y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7),x=y&o^~y&t,s=h+$+x+P[r+5]+d[r+5]|0,k=(n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10),T=n&l^n&i^l&i,u=k+T|0,f=f+s|0,h=s+u|0,$=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),x=f&y^~f&o,s=t+$+x+P[r+6]+d[r+6]|0,k=(h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),T=h&n^h&l^n&l,u=k+T|0,i=i+s|0,t=s+u|0,$=(i>>>6|i<<26)^(i>>>11|i<<21)^(i>>>25|i<<7),x=i&f^~i&y,s=o+$+x+P[r+7]+d[r+7]|0,k=(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10),T=t&h^t&n^h&n,u=k+T|0,l=l+s|0,o=s+u|0;m[0]=m[0]+o|0,m[1]=m[1]+t|0,m[2]=m[2]+h|0,m[3]=m[3]+n|0,m[4]=m[4]+l|0,m[5]=m[5]+i|0,m[6]=m[6]+f|0,m[7]=m[7]+y|0}}async function Ge(p,c){const a=new te,d=p.stream().getReader();let m=0;for(;;){const{done:o,value:t}=await d.read();if(o)break;a.update(t),m+=t.length,c&&c(p.size?m/p.size:1)}return c&&c(1),a.hex()}const G=["ready","failed"],Xe={ok:"ready",duplicate:"duplicate","too-large":"too-large",invalid:"invalid"};function Ye(p){const c=Je("/api/test-runs/import"),a=F([]),d=F(null),m=F(null),o=F(!1);let t=1;const h=U(()=>a.value.filter(s=>G.includes(s.state)).length),n=U(()=>a.value.filter(s=>s.state==="imported").length),l=U(()=>a.value.some(s=>s.state==="hashing"||s.state==="checking")),i=F({done:0,total:0});async function f(){if(p.value)try{const s=await $fetch("/api/test-runs/import/check",{method:"POST",body:{projectName:p.value,files:[]}});d.value=s.maxBytes,m.value=null}catch(s){m.value=M(s,"Could not reach the server to read its upload limit.")}}async function y(s){const u=s.map(g=>({id:t++,file:g,name:g.name,size:g.size,state:"hashing",progress:0}));a.value=[...a.value,...u];const r=a.value.slice(-u.length),_=[];for(const g of r)d.value!=null&&g.size>d.value?(g.state="too-large",g.message=`${V(g.size)} exceeds the ${V(d.value)} limit.`):g.size===0?(g.state="invalid",g.message="The file is empty."):g.name.toLowerCase().endsWith(".zip")?_.push(g):(g.state="invalid",g.message="Expected a .zip blob report (blob-report/report-*.zip).");if(_.length===0)return;for(const g of _)try{g.progress=0,g.hash=await Ge(g.file,D=>{g.progress=D}),g.state="checking"}catch(D){g.state="failed",g.message=M(D,"Could not read the file.")}finally{g.progress=0}const z=await Qe(_);for(const g of _)g.group=z??void 0;await k(_.filter(g=>g.state==="checking"))}async function k(s){if(!(s.length===0||!p.value))try{const u=await $fetch("/api/test-runs/import/check",{method:"POST",body:{projectName:p.value,files:s.map(r=>({name:r.name,size:r.size,hash:r.hash}))}});d.value=u.maxBytes,u.results.forEach((r,_)=>{const z=s[_];z&&(z.state=Xe[r.status]??"ready",z.message=r.message,r.testRunId&&(z.result={testRunId:r.testRunId}))})}catch(u){const r=M(u,"Pre-flight check failed.");for(const _ of s)_.state="ready",_.message=`${r} Importing will still verify it.`}}async function $(){if(o.value||!p.value)return;o.value=!0;const s=a.value.filter(u=>G.includes(u.state));i.value={done:0,total:s.length};try{for(const u of s){u.state="uploading",u.message=void 0,u.progress=0;try{const r=await Ze(c,p.value,u,u.group??null,_=>{u.progress=_});u.result=r,u.state=r.status==="duplicate"?"duplicate":"imported",u.message=r.status==="duplicate"?"Already imported into this project.":void 0}catch(r){u.state="failed",u.message=M(r,"The import failed.")}finally{u.progress=0,i.value={...i.value,done:i.value.done+1}}}}finally{o.value=!1}}function x(s){a.value=a.value.filter(u=>u.id!==s)}function T(){a.value=a.value.filter(s=>!["imported","duplicate"].includes(s.state))}return{entries:a,maxBytes:d,limitError:m,importing:o,readyCount:h,importedCount:n,busy:l,batch:i,loadLimit:f,addFiles:y,startImport:$,remove:x,clearFinished:T}}function Je(p){return`${(ee().app.baseURL||"/").replace(/\/$/,"")}${p}`}async function Qe(p){const c=p.map(a=>a.hash).filter(a=>!!a);return c.length===0?null:new te().update(new TextEncoder().encode([...c].sort().join(""))).hex()}function Ze(p,c,a,d,m){return new Promise((o,t)=>{const h=new FormData;h.append("projectName",c),d&&h.append("importGroup",d),h.append("archive",a.file,a.name);const n=new XMLHttpRequest;n.open("POST",p),n.responseType="json",n.upload.addEventListener("progress",l=>{l.lengthComputable&&m(l.loaded/l.total)}),n.addEventListener("load",()=>{const l=n.response;if(n.status>=200&&n.status<300){o(l);return}const i=typeof l?.message=="string"?l.message:null;t(new Error(i??et(n.status)))}),n.addEventListener("error",()=>t(new Error("The connection dropped during the upload."))),n.addEventListener("abort",()=>t(new Error("The upload was cancelled."))),n.addEventListener("timeout",()=>t(new Error("The upload timed out."))),n.send(h)})}function et(p){return p===413?"The server (or a proxy in front of it) rejected the archive as too large.":p===401||p===403?"You do not have permission to import into this project.":p===0?"The connection dropped during the upload.":p>=500?`The server failed while importing (HTTP ${p}).`:`The import was rejected (HTTP ${p}).`}function M(p,c){const a=p?.data;return typeof a?.message=="string"&&a.message?a.message:p?.message||c}const tt={class:"p-4 space-y-4"},st={class:"space-y-4"},ot={class:"text-sm text-gray-600 dark:text-gray-400 space-y-2"},rt={class:"flex items-center gap-2"},nt={key:0,class:"text-xs text-gray-500 tabular-nums"},it={class:"space-y-4"},at={key:0,class:"text-xs text-gray-500 mt-3"},lt={key:1,class:"divide-y divide-gray-100 dark:divide-gray-800 border rounded-lg border-gray-200 dark:border-gray-800"},ct={key:2,class:"flex justify-end"},Tt=Y({__name:"import",async setup(p){let c,a;const m=xe().params.id,{data:o}=([c,a]=we(()=>Ce(`/api/projects/${m}`,"$GhVKHsNemL")),c=await c,a(),c);ke(U(()=>({title:`Import runs — ${o.value?.label||o.value?.name||"Project"} — Piwi Dashboard`})));const t=ee().public.demoMode,h=U(()=>o.value?.name),{entries:n,maxBytes:l,limitError:i,importing:f,readyCount:y,importedCount:k,busy:$,batch:x,loadLimit:T,addFiles:s,startImport:u,remove:r,clearFinished:_}=Ye(h);$e(T);const z=F(null),g=F(!1);function D(j){const w=j.target;w.files?.length&&s([...w.files]),w.value=""}function se(j){g.value=!1;const w=[...j.dataTransfer?.files??[]];w.length&&s(w)}const oe=U(()=>n.value.filter(j=>["imported","duplicate"].includes(j.state)).length);return(j,w)=>{const re=pe,ne=me,ie=fe,ae=ye,H=X,W=ge,N=Z,le=J,ce=Te,de=qe,ue=he;return v(),A(ue,{id:"project-import"},{header:S(()=>[E(ie,null,{leading:S(()=>[E(re),E(ne,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:e(o)?.label||e(o)?.name||"Project",to:`/projects/${e(m)}`},{label:"Import runs"}]},null,8,["items"])]),_:1})]),body:S(()=>[b("div",tt,[E(W,{title:"Import past runs",icon:"i-lucide-import",help:"project.import",subtitle:"Backfill runs recorded before you started using Piwi, from Playwright's own blob reports."},{default:S(()=>[b("div",st,[b("div",ot,[w[5]||(w[5]=b("p",null,[R(" Run your suite with the blob reporter and upload the archives it writes to "),b("code",null,"blob-report/"),R(": ")],-1)),E(ae,{code:"npx playwright test --reporter=blob",language:"bash"}),w[6]||(w[6]=b("p",null," Each archive imports as one completed run, with its traces, screenshots and videos. Importing the same archive twice does nothing, so an interrupted batch is safe to repeat. ",-1))]),e(t)?(v(),A(H,{key:0,color:"primary",variant:"subtle",icon:"i-lucide-monitor-smartphone",title:"Nothing leaves your browser",description:"This is the demo: the archive is read by a service worker and stored in your browser, not uploaded. It is cleared when the demo's sample data is refreshed, or when you reset the demo.",ui:{description:"text-xs"}})):B("",!0),E(H,{color:"neutral",variant:"subtle",icon:"i-lucide-info",title:"What imported runs carry",description:"Failures still cluster, and traces, screenshots and videos open exactly as they do for reported runs. Web vitals, page state and locator healing come from Piwi's own capture fixtures, so historical runs have none — they start once the reporter is in place.",ui:{description:"text-xs"}}),e(i)?(v(),A(H,{key:1,color:"error",variant:"subtle",icon:"i-lucide-circle-alert",description:e(i)},null,8,["description"])):B("",!0)])]),_:1}),E(W,{title:"Archives",icon:"i-lucide-files",count:e(n).length||null},{actions:S(()=>[b("div",rt,[e(f)?(v(),C("span",nt,I(e(x).done)+" of "+I(e(x).total)+" done ",1)):B("",!0),e(oe)>0&&!e(f)?(v(),A(N,{key:1,label:"Clear finished",icon:"i-lucide-eraser",color:"neutral",variant:"ghost",size:"sm",disabled:e(f),onClick:w[0]||(w[0]=L=>e(_)())},null,8,["disabled"])):B("",!0),E(N,{label:e(y)>0?`Import ${e(y)} archive${e(y)===1?"":"s"}`:"Import",icon:"i-lucide-upload",size:"sm",loading:e(f),disabled:e(y)===0||e($),onClick:w[1]||(w[1]=L=>e(u)())},null,8,["label","loading","disabled"])])]),default:S(()=>[b("div",it,[b("div",{class:q(["rounded-lg border-2 border-dashed p-6 text-center transition-colors",e(g)?"border-primary bg-primary/5":"border-gray-200 dark:border-gray-700"]),onDragover:w[3]||(w[3]=O(L=>g.value=!0,["prevent"])),onDragleave:w[4]||(w[4]=O(L=>g.value=!1,["prevent"])),onDrop:O(se,["prevent"])},[E(le,{name:"i-lucide-file-archive",class:"size-7 text-gray-400 mb-2"}),w[7]||(w[7]=b("p",{class:"text-sm text-gray-600 dark:text-gray-400"},[R("Drop "),b("code",null,"report-*.zip"),R(" files here, or")],-1)),E(N,{label:"Choose files",icon:"i-lucide-folder-open",variant:"outline",size:"sm",class:"mt-2",disabled:e(f),onClick:w[2]||(w[2]=L=>e(z)?.click())},null,8,["disabled"]),e(l)?(v(),C("p",at," Up to "+I(("formatBytes"in j?j.formatBytes:e(V))(e(l)))+" per archive. Larger ones are rejected here, before uploading. ",1)):B("",!0),b("input",{ref_key:"fileInput",ref:z,type:"file",accept:".zip",multiple:"",class:"hidden",onChange:D},null,544)],34),e(n).length===0?(v(),A(ce,{key:0,icon:"i-lucide-inbox",text:"No archives selected yet."})):(v(),C("div",lt,[(v(!0),C(K,null,Q(e(n),L=>(v(),A(de,{key:L.id,entry:L,removable:!e(f)&&L.state!=="uploading",onRemove:e(r)},null,8,["entry","removable","onRemove"]))),128))])),e(k)>0?(v(),C("div",ct,[E(N,{label:`Open ${e(o)?.label||e(o)?.name||"project"}`,icon:"i-lucide-arrow-right",trailing:"",variant:"ghost",size:"sm",to:`/projects/${e(m)}`},null,8,["label","to"])])):B("",!0)])]),_:1},8,["count"])])]),_:1})}}});export{Tt as default};
1
+ import{_ as pe}from"./Cu2Q4iPh.js";import{_ as me}from"./Qo6oszaF.js";import{_ as he,a as fe}from"./opyDpgSw.js";import{_ as ye}from"./B1LUinhp.js";import{_ as X}from"./BBhrClA9.js";import{_ as ge}from"./DMAiMrNr.js";import{d as Y,o as v,c as C,i as b,t as I,k as e,j as E,g as S,p as J,q,m as R,s as ve,f as A,v as B,x as _e,F as K,y as Q,h as U,_ as Z,z as be,A as ee,r as F,u as xe,w as we,e as ke,B as $e,C as O}from"./C5TrTuWv.js";import{_ as Te}from"./BFxvHlO9.js";import{f as V}from"./D-c8ZSws.js";import{u as Ce}from"./T5UuMUxA.js";import"./BCGljaM0.js";import"./DMtrFQqi.js";import"./B69RP95P.js";import"./BjaRappk.js";import"./C8Paf_V1.js";const Ie={class:"p-3 sm:p-4 space-y-2"},Be={class:"flex items-start justify-between gap-3"},ze={class:"min-w-0 space-y-1"},Ee={class:"font-medium text-sm break-all"},Ue={class:"text-xs text-gray-500"},Re={class:"flex items-center gap-2 shrink-0"},Ae={key:2,class:"text-xs"},je={key:0,class:"text-xs text-gray-500"},Le={class:"text-default"},Pe={key:1,class:"flex flex-wrap gap-x-4 gap-y-1 text-xs text-gray-500"},Se={key:0},De={key:1},Fe={key:2},Ne={key:3},Me={key:3,class:"text-xs text-gray-500"},Ve={class:"space-y-0.5"},He={class:"text-[11px]"},Oe=Y({__name:"ImportFileRow",props:{entry:{},removable:{type:Boolean}},emits:["remove"],setup(p){const c=p,a={hashing:{label:"Reading",color:"neutral",icon:"i-lucide-loader-circle"},checking:{label:"Checking",color:"neutral",icon:"i-lucide-loader-circle"},ready:{label:"Ready",color:"primary",icon:"i-lucide-circle-check"},uploading:{label:"Importing",color:"primary",icon:"i-lucide-loader-circle"},imported:{label:"Imported",color:"success",icon:"i-lucide-check"},duplicate:{label:"Already imported",color:"neutral",icon:"i-lucide-copy-check"},"too-large":{label:"Too large",color:"warning",icon:"i-lucide-weight"},invalid:{label:"Not importable",color:"warning",icon:"i-lucide-file-x"},failed:{label:"Failed",color:"error",icon:"i-lucide-circle-alert"}},d=U(()=>a[c.entry.state]),m=U(()=>["hashing","checking","uploading"].includes(c.entry.state)),o=U(()=>c.entry.result),t=U(()=>c.entry.state==="imported"?o.value:null),h=U(()=>t.value?.kind==="trace");function n(l,i){return`${l} ${i}${l===1?"":"s"}`}return(l,i)=>{const f=J,y=ve,k=Z,$=be,x=_e,T=X;return v(),C("div",Ie,[b("div",Be,[b("div",ze,[b("p",Ee,I(p.entry.name),1),b("p",Ue,I(("formatBytes"in l?l.formatBytes:e(V))(p.entry.size)),1)]),b("div",Re,[E(y,{color:e(d).color,variant:"subtle",size:"sm"},{default:S(()=>[E(f,{name:e(d).icon,class:q(["size-3.5 mr-1",e(m)&&"animate-spin"])},null,8,["name","class"]),R(" "+I(e(d).label),1)]),_:1},8,["color"]),p.removable?(v(),A(k,{key:0,icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"xs",title:"Remove from the list",onClick:i[0]||(i[0]=s=>l.$emit("remove",p.entry.id))})):B("",!0)])]),p.entry.state==="uploading"||p.entry.state==="hashing"?(v(),A($,{key:0,"model-value":Math.round(p.entry.progress*100),size:"sm"},null,8,["model-value"])):B("",!0),p.entry.message?(v(),C("p",{key:1,class:q(["text-xs",p.entry.state==="failed"?"text-error":"text-gray-500"])},I(p.entry.message),3)):B("",!0),e(o)?.testRunId?(v(),C("div",Ae,[E(x,{to:`/test-runs/${e(o).testRunId}`,class:"text-primary hover:underline"},{default:S(()=>[R(" View run #"+I(e(o).testRunId),1)]),_:1},8,["to"])])):B("",!0),e(t)?(v(),C(K,{key:3},[e(h)?(v(),C("p",je,[i[1]||(i[1]=R(" Added ",-1)),b("span",Le,I(e(t).caseTitle),1),i[2]||(i[2]=R(" to this run. ",-1))])):(v(),C("div",Pe,[b("span",null,I(n(e(t).totalTests,"execution")),1),b("span",null,I(e(t).passedTests)+" passed",1),b("span",null,I(e(t).failedTests)+" failed",1),e(t).skippedTests?(v(),C("span",Se,I(e(t).skippedTests)+" skipped",1)):B("",!0),e(t).flakyTests?(v(),C("span",De,I(e(t).flakyTests)+" flaky",1)):B("",!0),e(t).traceCount?(v(),C("span",Fe,I(n(e(t).traceCount,"trace")),1)):B("",!0),e(t).attachmentCount?(v(),C("span",Ne,I(n(e(t).attachmentCount,"attachment")),1)):B("",!0)])),e(t).shard?(v(),A(T,{key:2,color:"warning",variant:"subtle",icon:"i-lucide-split",description:`This archive is shard ${e(t).shard.current} of ${e(t).shard.total}. Each shard imports as its own run — they are not merged.`,ui:{description:"text-xs"}},null,8,["description"])):B("",!0),e(t).filePaths.length&&!e(h)?(v(),C("div",Me,[i[3]||(i[3]=b("p",{class:"mb-1"},[R(" Spec files recorded as "),b("span",{class:"text-gray-400"},"(these must match the paths your live runs report for history to line up)"),R(": ")],-1)),b("ul",Ve,[(v(!0),C(K,null,Q(e(t).filePaths,s=>(v(),C("li",{key:s},[b("code",He,I(s),1)]))),128))])])):B("",!0)],64)):B("",!0)])}}}),qe=Object.assign(Oe,{__name:"ImportFileRow"}),P=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ke=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),We=Array.from({length:256},(p,c)=>c.toString(16).padStart(2,"0"));class te{#r=new Uint32Array(Ke);#t=new Uint8Array(64);#e=0;#n=0;#i=new Uint32Array(64);#o=!1;update(c){if(this.#o)throw new Error("Sha256: update() after digest()");this.#n+=c.length;let a=0;if(this.#e>0){const d=Math.min(64-this.#e,c.length);if(this.#t.set(c.subarray(0,d),this.#e),this.#e+=d,a=d,this.#e<64)return this;this.#s(this.#t,0),this.#e=0}for(;a+64<=c.length;a+=64)this.#s(c,a);return a<c.length&&(this.#t.set(c.subarray(a),0),this.#e=c.length-a),this}digest(){if(this.#o)throw new Error("Sha256: digest() called twice");this.#o=!0;const c=this.#n*8;this.#t[this.#e++]=128,this.#e>56&&(this.#t.fill(0,this.#e),this.#s(this.#t,0),this.#e=0),this.#t.fill(0,this.#e,56);const a=new DataView(this.#t.buffer,this.#t.byteOffset,64);a.setUint32(56,Math.floor(c/4294967296),!1),a.setUint32(60,c>>>0,!1),this.#s(this.#t,0);const d=new Uint8Array(32),m=new DataView(d.buffer);for(let o=0;o<8;o++)m.setUint32(o*4,this.#r[o],!1);return d}hex(){const c=this.digest();let a="";for(let d=0;d<32;d++)a+=We[c[d]];return a}#s(c,a){const d=this.#i,m=this.#r;for(let r=0;r<16;r++){const _=a+r*4;d[r]=c[_]<<24|c[_+1]<<16|c[_+2]<<8|c[_+3]}for(let r=16;r<64;r++){const _=d[r-15],z=d[r-2],g=(_>>>7|_<<25)^(_>>>18|_<<14)^_>>>3,D=(z>>>17|z<<15)^(z>>>19|z<<13)^z>>>10;d[r]=d[r-16]+g+d[r-7]+D|0}let o=m[0],t=m[1],h=m[2],n=m[3],l=m[4],i=m[5],f=m[6],y=m[7],k=0,$=0,x=0,T=0,s=0,u=0;for(let r=0;r<64;r+=8)$=(l>>>6|l<<26)^(l>>>11|l<<21)^(l>>>25|l<<7),x=l&i^~l&f,s=y+$+x+P[r]+d[r]|0,k=(o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10),T=o&t^o&h^t&h,u=k+T|0,n=n+s|0,y=s+u|0,$=(n>>>6|n<<26)^(n>>>11|n<<21)^(n>>>25|n<<7),x=n&l^~n&i,s=f+$+x+P[r+1]+d[r+1]|0,k=(y>>>2|y<<30)^(y>>>13|y<<19)^(y>>>22|y<<10),T=y&o^y&t^o&t,u=k+T|0,h=h+s|0,f=s+u|0,$=(h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7),x=h&n^~h&l,s=i+$+x+P[r+2]+d[r+2]|0,k=(f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10),T=f&y^f&o^y&o,u=k+T|0,t=t+s|0,i=s+u|0,$=(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7),x=t&h^~t&n,s=l+$+x+P[r+3]+d[r+3]|0,k=(i>>>2|i<<30)^(i>>>13|i<<19)^(i>>>22|i<<10),T=i&f^i&y^f&y,u=k+T|0,o=o+s|0,l=s+u|0,$=(o>>>6|o<<26)^(o>>>11|o<<21)^(o>>>25|o<<7),x=o&t^~o&h,s=n+$+x+P[r+4]+d[r+4]|0,k=(l>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),T=l&i^l&f^i&f,u=k+T|0,y=y+s|0,n=s+u|0,$=(y>>>6|y<<26)^(y>>>11|y<<21)^(y>>>25|y<<7),x=y&o^~y&t,s=h+$+x+P[r+5]+d[r+5]|0,k=(n>>>2|n<<30)^(n>>>13|n<<19)^(n>>>22|n<<10),T=n&l^n&i^l&i,u=k+T|0,f=f+s|0,h=s+u|0,$=(f>>>6|f<<26)^(f>>>11|f<<21)^(f>>>25|f<<7),x=f&y^~f&o,s=t+$+x+P[r+6]+d[r+6]|0,k=(h>>>2|h<<30)^(h>>>13|h<<19)^(h>>>22|h<<10),T=h&n^h&l^n&l,u=k+T|0,i=i+s|0,t=s+u|0,$=(i>>>6|i<<26)^(i>>>11|i<<21)^(i>>>25|i<<7),x=i&f^~i&y,s=o+$+x+P[r+7]+d[r+7]|0,k=(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10),T=t&h^t&n^h&n,u=k+T|0,l=l+s|0,o=s+u|0;m[0]=m[0]+o|0,m[1]=m[1]+t|0,m[2]=m[2]+h|0,m[3]=m[3]+n|0,m[4]=m[4]+l|0,m[5]=m[5]+i|0,m[6]=m[6]+f|0,m[7]=m[7]+y|0}}async function Ge(p,c){const a=new te,d=p.stream().getReader();let m=0;for(;;){const{done:o,value:t}=await d.read();if(o)break;a.update(t),m+=t.length,c&&c(p.size?m/p.size:1)}return c&&c(1),a.hex()}const G=["ready","failed"],Xe={ok:"ready",duplicate:"duplicate","too-large":"too-large",invalid:"invalid"};function Ye(p){const c=Je("/api/test-runs/import"),a=F([]),d=F(null),m=F(null),o=F(!1);let t=1;const h=U(()=>a.value.filter(s=>G.includes(s.state)).length),n=U(()=>a.value.filter(s=>s.state==="imported").length),l=U(()=>a.value.some(s=>s.state==="hashing"||s.state==="checking")),i=F({done:0,total:0});async function f(){if(p.value)try{const s=await $fetch("/api/test-runs/import/check",{method:"POST",body:{projectName:p.value,files:[]}});d.value=s.maxBytes,m.value=null}catch(s){m.value=M(s,"Could not reach the server to read its upload limit.")}}async function y(s){const u=s.map(g=>({id:t++,file:g,name:g.name,size:g.size,state:"hashing",progress:0}));a.value=[...a.value,...u];const r=a.value.slice(-u.length),_=[];for(const g of r)d.value!=null&&g.size>d.value?(g.state="too-large",g.message=`${V(g.size)} exceeds the ${V(d.value)} limit.`):g.size===0?(g.state="invalid",g.message="The file is empty."):g.name.toLowerCase().endsWith(".zip")?_.push(g):(g.state="invalid",g.message="Expected a .zip blob report (blob-report/report-*.zip).");if(_.length===0)return;for(const g of _)try{g.progress=0,g.hash=await Ge(g.file,D=>{g.progress=D}),g.state="checking"}catch(D){g.state="failed",g.message=M(D,"Could not read the file.")}finally{g.progress=0}const z=await Qe(_);for(const g of _)g.group=z??void 0;await k(_.filter(g=>g.state==="checking"))}async function k(s){if(!(s.length===0||!p.value))try{const u=await $fetch("/api/test-runs/import/check",{method:"POST",body:{projectName:p.value,files:s.map(r=>({name:r.name,size:r.size,hash:r.hash}))}});d.value=u.maxBytes,u.results.forEach((r,_)=>{const z=s[_];z&&(z.state=Xe[r.status]??"ready",z.message=r.message,r.testRunId&&(z.result={testRunId:r.testRunId}))})}catch(u){const r=M(u,"Pre-flight check failed.");for(const _ of s)_.state="ready",_.message=`${r} Importing will still verify it.`}}async function $(){if(o.value||!p.value)return;o.value=!0;const s=a.value.filter(u=>G.includes(u.state));i.value={done:0,total:s.length};try{for(const u of s){u.state="uploading",u.message=void 0,u.progress=0;try{const r=await Ze(c,p.value,u,u.group??null,_=>{u.progress=_});u.result=r,u.state=r.status==="duplicate"?"duplicate":"imported",u.message=r.status==="duplicate"?"Already imported into this project.":void 0}catch(r){u.state="failed",u.message=M(r,"The import failed.")}finally{u.progress=0,i.value={...i.value,done:i.value.done+1}}}}finally{o.value=!1}}function x(s){a.value=a.value.filter(u=>u.id!==s)}function T(){a.value=a.value.filter(s=>!["imported","duplicate"].includes(s.state))}return{entries:a,maxBytes:d,limitError:m,importing:o,readyCount:h,importedCount:n,busy:l,batch:i,loadLimit:f,addFiles:y,startImport:$,remove:x,clearFinished:T}}function Je(p){return`${(ee().app.baseURL||"/").replace(/\/$/,"")}${p}`}async function Qe(p){const c=p.map(a=>a.hash).filter(a=>!!a);return c.length===0?null:new te().update(new TextEncoder().encode([...c].sort().join(""))).hex()}function Ze(p,c,a,d,m){return new Promise((o,t)=>{const h=new FormData;h.append("projectName",c),d&&h.append("importGroup",d),h.append("archive",a.file,a.name);const n=new XMLHttpRequest;n.open("POST",p),n.responseType="json",n.upload.addEventListener("progress",l=>{l.lengthComputable&&m(l.loaded/l.total)}),n.addEventListener("load",()=>{const l=n.response;if(n.status>=200&&n.status<300){o(l);return}const i=typeof l?.message=="string"?l.message:null;t(new Error(i??et(n.status)))}),n.addEventListener("error",()=>t(new Error("The connection dropped during the upload."))),n.addEventListener("abort",()=>t(new Error("The upload was cancelled."))),n.addEventListener("timeout",()=>t(new Error("The upload timed out."))),n.send(h)})}function et(p){return p===413?"The server (or a proxy in front of it) rejected the archive as too large.":p===401||p===403?"You do not have permission to import into this project.":p===0?"The connection dropped during the upload.":p>=500?`The server failed while importing (HTTP ${p}).`:`The import was rejected (HTTP ${p}).`}function M(p,c){const a=p?.data;return typeof a?.message=="string"&&a.message?a.message:p?.message||c}const tt={class:"p-4 space-y-4"},st={class:"space-y-4"},ot={class:"text-sm text-gray-600 dark:text-gray-400 space-y-2"},rt={class:"flex items-center gap-2"},nt={key:0,class:"text-xs text-gray-500 tabular-nums"},it={class:"space-y-4"},at={key:0,class:"text-xs text-gray-500 mt-3"},lt={key:1,class:"divide-y divide-gray-100 dark:divide-gray-800 border rounded-lg border-gray-200 dark:border-gray-800"},ct={key:2,class:"flex justify-end"},Tt=Y({__name:"import",async setup(p){let c,a;const m=xe().params.id,{data:o}=([c,a]=we(()=>Ce(`/api/projects/${m}`,"$GhVKHsNemL")),c=await c,a(),c);ke(U(()=>({title:`Import runs — ${o.value?.label||o.value?.name||"Project"} — Piwi Dashboard`})));const t=ee().public.demoMode,h=U(()=>o.value?.name),{entries:n,maxBytes:l,limitError:i,importing:f,readyCount:y,importedCount:k,busy:$,batch:x,loadLimit:T,addFiles:s,startImport:u,remove:r,clearFinished:_}=Ye(h);$e(T);const z=F(null),g=F(!1);function D(j){const w=j.target;w.files?.length&&s([...w.files]),w.value=""}function se(j){g.value=!1;const w=[...j.dataTransfer?.files??[]];w.length&&s(w)}const oe=U(()=>n.value.filter(j=>["imported","duplicate"].includes(j.state)).length);return(j,w)=>{const re=pe,ne=me,ie=fe,ae=ye,H=X,W=ge,N=Z,le=J,ce=Te,de=qe,ue=he;return v(),A(ue,{id:"project-import"},{header:S(()=>[E(ie,null,{leading:S(()=>[E(re),E(ne,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:e(o)?.label||e(o)?.name||"Project",to:`/projects/${e(m)}`},{label:"Import runs"}]},null,8,["items"])]),_:1})]),body:S(()=>[b("div",tt,[E(W,{title:"Import past runs",icon:"i-lucide-import",help:"project.import",subtitle:"Backfill runs recorded before you started using Piwi, from Playwright's own blob reports."},{default:S(()=>[b("div",st,[b("div",ot,[w[5]||(w[5]=b("p",null,[R(" Run your suite with the blob reporter and upload the archives it writes to "),b("code",null,"blob-report/"),R(": ")],-1)),E(ae,{code:"npx playwright test --reporter=blob",language:"bash"}),w[6]||(w[6]=b("p",null," Each archive imports as one completed run, with its traces, screenshots and videos. Importing the same archive twice does nothing, so an interrupted batch is safe to repeat. ",-1))]),e(t)?(v(),A(H,{key:0,color:"primary",variant:"subtle",icon:"i-lucide-monitor-smartphone",title:"Nothing leaves your browser",description:"This is the demo: the archive is read by a service worker and stored in your browser, not uploaded. It is cleared when the demo's sample data is refreshed, or when you reset the demo.",ui:{description:"text-xs"}})):B("",!0),E(H,{color:"neutral",variant:"subtle",icon:"i-lucide-info",title:"What imported runs carry",description:"Failures still cluster, and traces, screenshots and videos open exactly as they do for reported runs. Web vitals, page state and locator healing come from Piwi's own capture fixtures, so historical runs have none — they start once the reporter is in place.",ui:{description:"text-xs"}}),e(i)?(v(),A(H,{key:1,color:"error",variant:"subtle",icon:"i-lucide-circle-alert",description:e(i)},null,8,["description"])):B("",!0)])]),_:1}),E(W,{title:"Archives",icon:"i-lucide-files",count:e(n).length||null},{actions:S(()=>[b("div",rt,[e(f)?(v(),C("span",nt,I(e(x).done)+" of "+I(e(x).total)+" done ",1)):B("",!0),e(oe)>0&&!e(f)?(v(),A(N,{key:1,label:"Clear finished",icon:"i-lucide-eraser",color:"neutral",variant:"ghost",size:"sm",disabled:e(f),onClick:w[0]||(w[0]=L=>e(_)())},null,8,["disabled"])):B("",!0),E(N,{label:e(y)>0?`Import ${e(y)} archive${e(y)===1?"":"s"}`:"Import",icon:"i-lucide-upload",size:"sm",loading:e(f),disabled:e(y)===0||e($),onClick:w[1]||(w[1]=L=>e(u)())},null,8,["label","loading","disabled"])])]),default:S(()=>[b("div",it,[b("div",{class:q(["rounded-lg border-2 border-dashed p-6 text-center transition-colors",e(g)?"border-primary bg-primary/5":"border-gray-200 dark:border-gray-700"]),onDragover:w[3]||(w[3]=O(L=>g.value=!0,["prevent"])),onDragleave:w[4]||(w[4]=O(L=>g.value=!1,["prevent"])),onDrop:O(se,["prevent"])},[E(le,{name:"i-lucide-file-archive",class:"size-7 text-gray-400 mb-2"}),w[7]||(w[7]=b("p",{class:"text-sm text-gray-600 dark:text-gray-400"},[R("Drop "),b("code",null,"report-*.zip"),R(" files here, or")],-1)),E(N,{label:"Choose files",icon:"i-lucide-folder-open",variant:"outline",size:"sm",class:"mt-2",disabled:e(f),onClick:w[2]||(w[2]=L=>e(z)?.click())},null,8,["disabled"]),e(l)?(v(),C("p",at," Up to "+I(("formatBytes"in j?j.formatBytes:e(V))(e(l)))+" per archive. Larger ones are rejected here, before uploading. ",1)):B("",!0),b("input",{ref_key:"fileInput",ref:z,type:"file",accept:".zip",multiple:"",class:"hidden",onChange:D},null,544)],34),e(n).length===0?(v(),A(ce,{key:0,icon:"i-lucide-inbox",text:"No archives selected yet."})):(v(),C("div",lt,[(v(!0),C(K,null,Q(e(n),L=>(v(),A(de,{key:L.id,entry:L,removable:!e(f)&&L.state!=="uploading",onRemove:e(r)},null,8,["entry","removable","onRemove"]))),128))])),e(k)>0?(v(),C("div",ct,[E(N,{label:`Open ${e(o)?.label||e(o)?.name||"project"}`,icon:"i-lucide-arrow-right",trailing:"",variant:"ghost",size:"sm",to:`/projects/${e(m)}`},null,8,["label","to"])])):B("",!0)])]),_:1},8,["count"])])]),_:1})}}});export{Tt as default};
@@ -1,3 +1,3 @@
1
- import{as as ut,d as ft,o as tn,c as sn,i as an,k as ue,t as bt,v as pt,j as ht,_ as Et,r as mt,h as _t}from"./h49q_GXF.js";import{h as Nt}from"./CD3R-ggS.js";import{a as St}from"./Cd8r0xk5.js";var $e,rn;function yt(){if(rn)return $e;rn=1;function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{const s=e[t],b=typeof s;(b==="object"||b==="function")&&!Object.isFrozen(s)&&n(s)}),e}class o{constructor(t){t.data===void 0&&(t.data={}),this.data=t.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function l(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function d(e,...t){const s=Object.create(null);for(const b in e)s[b]=e[b];return t.forEach(function(b){for(const k in b)s[k]=b[k]}),s}const R="</span>",M=e=>!!e.scope,_=(e,{prefix:t})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const s=e.split(".");return[`${t}${s.shift()}`,...s.map((b,k)=>`${b}${"_".repeat(k+1)}`)].join(" ")}return`${t}${e}`};class E{constructor(t,s){this.buffer="",this.classPrefix=s.classPrefix,t.walk(this)}addText(t){this.buffer+=l(t)}openNode(t){if(!M(t))return;const s=_(t.scope,{prefix:this.classPrefix});this.span(s)}closeNode(t){M(t)&&(this.buffer+=R)}value(){return this.buffer}span(t){this.buffer+=`<span class="${t}">`}}const w=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class y{constructor(){this.rootNode=w(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){const s=w({scope:t});this.add(s),this.stack.push(s)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,s){return typeof s=="string"?t.addText(s):s.children&&(t.openNode(s),s.children.forEach(b=>this._walk(t,b)),t.closeNode(s)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(s=>typeof s=="string")?t.children=[t.children.join("")]:t.children.forEach(s=>{y._collapse(s)}))}}class P extends y{constructor(t){super(),this.options=t}addText(t){t!==""&&this.add(t)}startScope(t){this.openNode(t)}endScope(){this.closeNode()}__addSublanguage(t,s){const b=t.root;s&&(b.scope=`language:${s}`),this.add(b)}toHTML(){return new E(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function x(e){return e?typeof e=="string"?e:e.source:null}function N(e){return A("(?=",e,")")}function B(e){return A("(?:",e,")*")}function C(e){return A("(?:",e,")?")}function A(...e){return e.map(s=>x(s)).join("")}function z(e){const t=e[e.length-1];return typeof t=="object"&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function H(...e){return"("+(z(e).capture?"":"?:")+e.map(b=>x(b)).join("|")+")"}function F(e){return new RegExp(e.toString()+"|").exec("").length-1}function J(e,t){const s=e&&e.exec(t);return s&&s.index===0}const ne=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function W(e,{joinWith:t}){let s=0;return e.map(b=>{s+=1;const k=s;let I=x(b),c="";for(;I.length>0;){const r=ne.exec(I);if(!r){c+=I;break}c+=I.substring(0,r.index),I=I.substring(r.index+r[0].length),r[0][0]==="\\"&&r[1]?c+="\\"+String(Number(r[1])+k):(c+=r[0],r[0]==="("&&s++)}return c}).map(b=>`(${b})`).join(t)}const X=/\b\B/,fe="[a-zA-Z]\\w*",te="[a-zA-Z_]\\w*",be="\\b\\d+(\\.\\d+)?",pe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",he="\\b(0b[01]+)",_e="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Ne=(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=A(t,/.*\b/,e.binary,/\b.*/)),d({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(s,b)=>{s.index!==0&&b.ignoreMatch()}},e)},ie={begin:"\\\\[\\s\\S]",relevance:0},Se={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[ie]},ce={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[ie]},ye={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},S=function(e,t,s={}){const b=d({scope:"comment",begin:e,end:t,contains:[]},s);b.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const k=H("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return b.contains.push({begin:A(/[ ]+/,"(",k,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),b},K=S("//","$"),Y=S("/\\*","\\*/"),j=S("#","$"),se={scope:"number",begin:be,relevance:0},le={scope:"number",begin:pe,relevance:0},An={scope:"number",begin:he,relevance:0},Tn={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[ie,{begin:/\[/,end:/\]/,relevance:0,contains:[ie]}]},Rn={scope:"title",begin:fe,relevance:0},wn={scope:"title",begin:te,relevance:0},On={begin:"\\.\\s*"+te,relevance:0};var Te=Object.freeze({__proto__:null,APOS_STRING_MODE:Se,BACKSLASH_ESCAPE:ie,BINARY_NUMBER_MODE:An,BINARY_NUMBER_RE:he,COMMENT:S,C_BLOCK_COMMENT_MODE:Y,C_LINE_COMMENT_MODE:K,C_NUMBER_MODE:le,C_NUMBER_RE:pe,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(t,s)=>{s.data._beginMatch=t[1]},"on:end":(t,s)=>{s.data._beginMatch!==t[1]&&s.ignoreMatch()}})},HASH_COMMENT_MODE:j,IDENT_RE:fe,MATCH_NOTHING_RE:X,METHOD_GUARD:On,NUMBER_MODE:se,NUMBER_RE:be,PHRASAL_WORDS_MODE:ye,QUOTE_STRING_MODE:ce,REGEXP_MODE:Tn,RE_STARTERS_RE:_e,SHEBANG:Ne,TITLE_MODE:Rn,UNDERSCORE_IDENT_RE:te,UNDERSCORE_TITLE_MODE:wn});function vn(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function xn(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function Mn(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=vn,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function kn(e,t){Array.isArray(e.illegal)&&(e.illegal=H(...e.illegal))}function In(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function Cn(e,t){e.relevance===void 0&&(e.relevance=1)}const Ln=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const s=Object.assign({},e);Object.keys(e).forEach(b=>{delete e[b]}),e.keywords=s.keywords,e.begin=A(s.beforeMatch,N(s.begin)),e.starts={relevance:0,contains:[Object.assign(s,{endsParent:!0})]},e.relevance=0,delete s.beforeMatch},Bn=["of","and","for","in","not","or","if","then","parent","list","value"],Dn="keyword";function ze(e,t,s=Dn){const b=Object.create(null);return typeof e=="string"?k(s,e.split(" ")):Array.isArray(e)?k(s,e):Object.keys(e).forEach(function(I){Object.assign(b,ze(e[I],t,I))}),b;function k(I,c){t&&(c=c.map(r=>r.toLowerCase())),c.forEach(function(r){const f=r.split("|");b[f[0]]=[I,Pn(f[0],f[1])]})}}function Pn(e,t){return t?Number(t):Un(e)?0:1}function Un(e){return Bn.includes(e.toLowerCase())}const He={},de=e=>{console.error(e)},Ge=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Ee=(e,t)=>{He[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),He[`${e}/${t}`]=!0)},Re=new Error;function Fe(e,t,{key:s}){let b=0;const k=e[s],I={},c={};for(let r=1;r<=t.length;r++)c[r+b]=k[r],I[r+b]=!0,b+=F(t[r-1]);e[s]=c,e[s]._emit=I,e[s]._multi=!0}function $n(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw de("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Re;if(typeof e.beginScope!="object"||e.beginScope===null)throw de("beginScope must be object"),Re;Fe(e,e.begin,{key:"beginScope"}),e.begin=W(e.begin,{joinWith:""})}}function zn(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw de("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Re;if(typeof e.endScope!="object"||e.endScope===null)throw de("endScope must be object"),Re;Fe(e,e.end,{key:"endScope"}),e.end=W(e.end,{joinWith:""})}}function Hn(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function Gn(e){Hn(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),$n(e),zn(e)}function Fn(e){function t(c,r){return new RegExp(x(c),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(r?"g":""))}class s{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(r,f){f.position=this.position++,this.matchIndexes[this.matchAt]=f,this.regexes.push([f,r]),this.matchAt+=F(r)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const r=this.regexes.map(f=>f[1]);this.matcherRe=t(W(r,{joinWith:"|"}),!0),this.lastIndex=0}exec(r){this.matcherRe.lastIndex=this.lastIndex;const f=this.matcherRe.exec(r);if(!f)return null;const U=f.findIndex((Ae,Ce)=>Ce>0&&Ae!==void 0),L=this.matchIndexes[U];return f.splice(0,U),Object.assign(f,L)}}class b{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(r){if(this.multiRegexes[r])return this.multiRegexes[r];const f=new s;return this.rules.slice(r).forEach(([U,L])=>f.addRule(U,L)),f.compile(),this.multiRegexes[r]=f,f}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(r,f){this.rules.push([r,f]),f.type==="begin"&&this.count++}exec(r){const f=this.getMatcher(this.regexIndex);f.lastIndex=this.lastIndex;let U=f.exec(r);if(this.resumingScanAtSamePosition()&&!(U&&U.index===this.lastIndex)){const L=this.getMatcher(0);L.lastIndex=this.lastIndex+1,U=L.exec(r)}return U&&(this.regexIndex+=U.position+1,this.regexIndex===this.count&&this.considerAll()),U}}function k(c){const r=new b;return c.contains.forEach(f=>r.addRule(f.begin,{rule:f,type:"begin"})),c.terminatorEnd&&r.addRule(c.terminatorEnd,{type:"end"}),c.illegal&&r.addRule(c.illegal,{type:"illegal"}),r}function I(c,r){const f=c;if(c.isCompiled)return f;[xn,In,Gn,Ln].forEach(L=>L(c,r)),e.compilerExtensions.forEach(L=>L(c,r)),c.__beforeBegin=null,[Mn,kn,Cn].forEach(L=>L(c,r)),c.isCompiled=!0;let U=null;return typeof c.keywords=="object"&&c.keywords.$pattern&&(c.keywords=Object.assign({},c.keywords),U=c.keywords.$pattern,delete c.keywords.$pattern),U=U||/\w+/,c.keywords&&(c.keywords=ze(c.keywords,e.case_insensitive)),f.keywordPatternRe=t(U,!0),r&&(c.begin||(c.begin=/\B|\b/),f.beginRe=t(f.begin),!c.end&&!c.endsWithParent&&(c.end=/\B|\b/),c.end&&(f.endRe=t(f.end)),f.terminatorEnd=x(f.end)||"",c.endsWithParent&&r.terminatorEnd&&(f.terminatorEnd+=(c.end?"|":"")+r.terminatorEnd)),c.illegal&&(f.illegalRe=t(c.illegal)),c.contains||(c.contains=[]),c.contains=[].concat(...c.contains.map(function(L){return Kn(L==="self"?c:L)})),c.contains.forEach(function(L){I(L,f)}),c.starts&&I(c.starts,r),f.matcher=k(f),f}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=d(e.classNameAliases||{}),I(e)}function Ke(e){return e?e.endsWithParent||Ke(e.starts):!1}function Kn(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return d(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:Ke(e)?d(e,{starts:e.starts?d(e.starts):null}):Object.isFrozen(e)?d(e):e}var Zn="11.11.1";class Wn extends Error{constructor(t,s){super(t),this.name="HTMLInjectionError",this.html=s}}const Ie=l,Ze=d,We=Symbol("nomatch"),Xn=7,Xe=function(e){const t=Object.create(null),s=Object.create(null),b=[];let k=!0;const I="Could not find the language '{}', did you forget to load/include a language module?",c={disableAutodetect:!0,name:"Plain text",contains:[]};let r={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:P};function f(i){return r.noHighlightRe.test(i)}function U(i){let u=i.className+" ";u+=i.parentNode?i.parentNode.className:"";const m=r.languageDetectRe.exec(u);if(m){const O=re(m[1]);return O||(Ge(I.replace("{}",m[1])),Ge("Falling back to no-highlight mode for this block.",i)),O?m[1]:"no-highlight"}return u.split(/\s+/).find(O=>f(O)||re(O))}function L(i,u,m){let O="",D="";typeof u=="object"?(O=i,m=u.ignoreIllegals,D=u.language):(Ee("10.7.0","highlight(lang, code, ...args) has been deprecated."),Ee("10.7.0",`Please use highlight(code, options) instead.
1
+ import{at as ut,d as ft,o as tn,c as sn,i as an,k as ue,t as bt,v as pt,j as ht,_ as Et,r as mt,h as _t}from"./C5TrTuWv.js";import{h as Nt}from"./DMtrFQqi.js";import{a as St}from"./T5UuMUxA.js";var $e,rn;function yt(){if(rn)return $e;rn=1;function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(t=>{const s=e[t],b=typeof s;(b==="object"||b==="function")&&!Object.isFrozen(s)&&n(s)}),e}class o{constructor(t){t.data===void 0&&(t.data={}),this.data=t.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function l(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function d(e,...t){const s=Object.create(null);for(const b in e)s[b]=e[b];return t.forEach(function(b){for(const k in b)s[k]=b[k]}),s}const R="</span>",M=e=>!!e.scope,_=(e,{prefix:t})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const s=e.split(".");return[`${t}${s.shift()}`,...s.map((b,k)=>`${b}${"_".repeat(k+1)}`)].join(" ")}return`${t}${e}`};class E{constructor(t,s){this.buffer="",this.classPrefix=s.classPrefix,t.walk(this)}addText(t){this.buffer+=l(t)}openNode(t){if(!M(t))return;const s=_(t.scope,{prefix:this.classPrefix});this.span(s)}closeNode(t){M(t)&&(this.buffer+=R)}value(){return this.buffer}span(t){this.buffer+=`<span class="${t}">`}}const w=(e={})=>{const t={children:[]};return Object.assign(t,e),t};class y{constructor(){this.rootNode=w(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(t){this.top.children.push(t)}openNode(t){const s=w({scope:t});this.add(s),this.stack.push(s)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(t){return this.constructor._walk(t,this.rootNode)}static _walk(t,s){return typeof s=="string"?t.addText(s):s.children&&(t.openNode(s),s.children.forEach(b=>this._walk(t,b)),t.closeNode(s)),t}static _collapse(t){typeof t!="string"&&t.children&&(t.children.every(s=>typeof s=="string")?t.children=[t.children.join("")]:t.children.forEach(s=>{y._collapse(s)}))}}class P extends y{constructor(t){super(),this.options=t}addText(t){t!==""&&this.add(t)}startScope(t){this.openNode(t)}endScope(){this.closeNode()}__addSublanguage(t,s){const b=t.root;s&&(b.scope=`language:${s}`),this.add(b)}toHTML(){return new E(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function x(e){return e?typeof e=="string"?e:e.source:null}function N(e){return A("(?=",e,")")}function B(e){return A("(?:",e,")*")}function C(e){return A("(?:",e,")?")}function A(...e){return e.map(s=>x(s)).join("")}function z(e){const t=e[e.length-1];return typeof t=="object"&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function H(...e){return"("+(z(e).capture?"":"?:")+e.map(b=>x(b)).join("|")+")"}function F(e){return new RegExp(e.toString()+"|").exec("").length-1}function J(e,t){const s=e&&e.exec(t);return s&&s.index===0}const ne=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function W(e,{joinWith:t}){let s=0;return e.map(b=>{s+=1;const k=s;let I=x(b),c="";for(;I.length>0;){const r=ne.exec(I);if(!r){c+=I;break}c+=I.substring(0,r.index),I=I.substring(r.index+r[0].length),r[0][0]==="\\"&&r[1]?c+="\\"+String(Number(r[1])+k):(c+=r[0],r[0]==="("&&s++)}return c}).map(b=>`(${b})`).join(t)}const X=/\b\B/,fe="[a-zA-Z]\\w*",te="[a-zA-Z_]\\w*",be="\\b\\d+(\\.\\d+)?",pe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",he="\\b(0b[01]+)",_e="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Ne=(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=A(t,/.*\b/,e.binary,/\b.*/)),d({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(s,b)=>{s.index!==0&&b.ignoreMatch()}},e)},ie={begin:"\\\\[\\s\\S]",relevance:0},Se={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[ie]},ce={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[ie]},ye={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},S=function(e,t,s={}){const b=d({scope:"comment",begin:e,end:t,contains:[]},s);b.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const k=H("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return b.contains.push({begin:A(/[ ]+/,"(",k,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),b},K=S("//","$"),Y=S("/\\*","\\*/"),j=S("#","$"),se={scope:"number",begin:be,relevance:0},le={scope:"number",begin:pe,relevance:0},An={scope:"number",begin:he,relevance:0},Tn={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[ie,{begin:/\[/,end:/\]/,relevance:0,contains:[ie]}]},Rn={scope:"title",begin:fe,relevance:0},wn={scope:"title",begin:te,relevance:0},On={begin:"\\.\\s*"+te,relevance:0};var Te=Object.freeze({__proto__:null,APOS_STRING_MODE:Se,BACKSLASH_ESCAPE:ie,BINARY_NUMBER_MODE:An,BINARY_NUMBER_RE:he,COMMENT:S,C_BLOCK_COMMENT_MODE:Y,C_LINE_COMMENT_MODE:K,C_NUMBER_MODE:le,C_NUMBER_RE:pe,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(t,s)=>{s.data._beginMatch=t[1]},"on:end":(t,s)=>{s.data._beginMatch!==t[1]&&s.ignoreMatch()}})},HASH_COMMENT_MODE:j,IDENT_RE:fe,MATCH_NOTHING_RE:X,METHOD_GUARD:On,NUMBER_MODE:se,NUMBER_RE:be,PHRASAL_WORDS_MODE:ye,QUOTE_STRING_MODE:ce,REGEXP_MODE:Tn,RE_STARTERS_RE:_e,SHEBANG:Ne,TITLE_MODE:Rn,UNDERSCORE_IDENT_RE:te,UNDERSCORE_TITLE_MODE:wn});function vn(e,t){e.input[e.index-1]==="."&&t.ignoreMatch()}function xn(e,t){e.className!==void 0&&(e.scope=e.className,delete e.className)}function Mn(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=vn,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function kn(e,t){Array.isArray(e.illegal)&&(e.illegal=H(...e.illegal))}function In(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function Cn(e,t){e.relevance===void 0&&(e.relevance=1)}const Ln=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const s=Object.assign({},e);Object.keys(e).forEach(b=>{delete e[b]}),e.keywords=s.keywords,e.begin=A(s.beforeMatch,N(s.begin)),e.starts={relevance:0,contains:[Object.assign(s,{endsParent:!0})]},e.relevance=0,delete s.beforeMatch},Bn=["of","and","for","in","not","or","if","then","parent","list","value"],Dn="keyword";function ze(e,t,s=Dn){const b=Object.create(null);return typeof e=="string"?k(s,e.split(" ")):Array.isArray(e)?k(s,e):Object.keys(e).forEach(function(I){Object.assign(b,ze(e[I],t,I))}),b;function k(I,c){t&&(c=c.map(r=>r.toLowerCase())),c.forEach(function(r){const f=r.split("|");b[f[0]]=[I,Pn(f[0],f[1])]})}}function Pn(e,t){return t?Number(t):Un(e)?0:1}function Un(e){return Bn.includes(e.toLowerCase())}const He={},de=e=>{console.error(e)},Ge=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Ee=(e,t)=>{He[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),He[`${e}/${t}`]=!0)},Re=new Error;function Fe(e,t,{key:s}){let b=0;const k=e[s],I={},c={};for(let r=1;r<=t.length;r++)c[r+b]=k[r],I[r+b]=!0,b+=F(t[r-1]);e[s]=c,e[s]._emit=I,e[s]._multi=!0}function $n(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw de("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Re;if(typeof e.beginScope!="object"||e.beginScope===null)throw de("beginScope must be object"),Re;Fe(e,e.begin,{key:"beginScope"}),e.begin=W(e.begin,{joinWith:""})}}function zn(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw de("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Re;if(typeof e.endScope!="object"||e.endScope===null)throw de("endScope must be object"),Re;Fe(e,e.end,{key:"endScope"}),e.end=W(e.end,{joinWith:""})}}function Hn(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function Gn(e){Hn(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),$n(e),zn(e)}function Fn(e){function t(c,r){return new RegExp(x(c),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(r?"g":""))}class s{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(r,f){f.position=this.position++,this.matchIndexes[this.matchAt]=f,this.regexes.push([f,r]),this.matchAt+=F(r)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const r=this.regexes.map(f=>f[1]);this.matcherRe=t(W(r,{joinWith:"|"}),!0),this.lastIndex=0}exec(r){this.matcherRe.lastIndex=this.lastIndex;const f=this.matcherRe.exec(r);if(!f)return null;const U=f.findIndex((Ae,Ce)=>Ce>0&&Ae!==void 0),L=this.matchIndexes[U];return f.splice(0,U),Object.assign(f,L)}}class b{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(r){if(this.multiRegexes[r])return this.multiRegexes[r];const f=new s;return this.rules.slice(r).forEach(([U,L])=>f.addRule(U,L)),f.compile(),this.multiRegexes[r]=f,f}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(r,f){this.rules.push([r,f]),f.type==="begin"&&this.count++}exec(r){const f=this.getMatcher(this.regexIndex);f.lastIndex=this.lastIndex;let U=f.exec(r);if(this.resumingScanAtSamePosition()&&!(U&&U.index===this.lastIndex)){const L=this.getMatcher(0);L.lastIndex=this.lastIndex+1,U=L.exec(r)}return U&&(this.regexIndex+=U.position+1,this.regexIndex===this.count&&this.considerAll()),U}}function k(c){const r=new b;return c.contains.forEach(f=>r.addRule(f.begin,{rule:f,type:"begin"})),c.terminatorEnd&&r.addRule(c.terminatorEnd,{type:"end"}),c.illegal&&r.addRule(c.illegal,{type:"illegal"}),r}function I(c,r){const f=c;if(c.isCompiled)return f;[xn,In,Gn,Ln].forEach(L=>L(c,r)),e.compilerExtensions.forEach(L=>L(c,r)),c.__beforeBegin=null,[Mn,kn,Cn].forEach(L=>L(c,r)),c.isCompiled=!0;let U=null;return typeof c.keywords=="object"&&c.keywords.$pattern&&(c.keywords=Object.assign({},c.keywords),U=c.keywords.$pattern,delete c.keywords.$pattern),U=U||/\w+/,c.keywords&&(c.keywords=ze(c.keywords,e.case_insensitive)),f.keywordPatternRe=t(U,!0),r&&(c.begin||(c.begin=/\B|\b/),f.beginRe=t(f.begin),!c.end&&!c.endsWithParent&&(c.end=/\B|\b/),c.end&&(f.endRe=t(f.end)),f.terminatorEnd=x(f.end)||"",c.endsWithParent&&r.terminatorEnd&&(f.terminatorEnd+=(c.end?"|":"")+r.terminatorEnd)),c.illegal&&(f.illegalRe=t(c.illegal)),c.contains||(c.contains=[]),c.contains=[].concat(...c.contains.map(function(L){return Kn(L==="self"?c:L)})),c.contains.forEach(function(L){I(L,f)}),c.starts&&I(c.starts,r),f.matcher=k(f),f}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=d(e.classNameAliases||{}),I(e)}function Ke(e){return e?e.endsWithParent||Ke(e.starts):!1}function Kn(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(t){return d(e,{variants:null},t)})),e.cachedVariants?e.cachedVariants:Ke(e)?d(e,{starts:e.starts?d(e.starts):null}):Object.isFrozen(e)?d(e):e}var Zn="11.11.1";class Wn extends Error{constructor(t,s){super(t),this.name="HTMLInjectionError",this.html=s}}const Ie=l,Ze=d,We=Symbol("nomatch"),Xn=7,Xe=function(e){const t=Object.create(null),s=Object.create(null),b=[];let k=!0;const I="Could not find the language '{}', did you forget to load/include a language module?",c={disableAutodetect:!0,name:"Plain text",contains:[]};let r={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:P};function f(i){return r.noHighlightRe.test(i)}function U(i){let u=i.className+" ";u+=i.parentNode?i.parentNode.className:"";const m=r.languageDetectRe.exec(u);if(m){const O=re(m[1]);return O||(Ge(I.replace("{}",m[1])),Ge("Falling back to no-highlight mode for this block.",i)),O?m[1]:"no-highlight"}return u.split(/\s+/).find(O=>f(O)||re(O))}function L(i,u,m){let O="",D="";typeof u=="object"?(O=i,m=u.ignoreIllegals,D=u.language):(Ee("10.7.0","highlight(lang, code, ...args) has been deprecated."),Ee("10.7.0",`Please use highlight(code, options) instead.
2
2
  https://github.com/highlightjs/highlight.js/issues/2277`),D=i,O=u),m===void 0&&(m=!0);const q={code:O,language:D};Oe("before:highlight",q);const oe=q.result?q.result:Ae(q.language,q.code,m);return oe.code=q.code,Oe("after:highlight",oe),oe}function Ae(i,u,m,O){const D=Object.create(null);function q(a,g){return a.keywords[g]}function oe(){if(!p.keywords){$.addText(v);return}let a=0;p.keywordPatternRe.lastIndex=0;let g=p.keywordPatternRe.exec(v),h="";for(;g;){h+=v.substring(a,g.index);const T=ee.case_insensitive?g[0].toLowerCase():g[0],G=q(p,T);if(G){const[ae,dt]=G;if($.addText(h),h="",D[T]=(D[T]||0)+1,D[T]<=Xn&&(Me+=dt),ae.startsWith("_"))h+=g[0];else{const gt=ee.classNameAliases[ae]||ae;Q(g[0],gt)}}else h+=g[0];a=p.keywordPatternRe.lastIndex,g=p.keywordPatternRe.exec(v)}h+=v.substring(a),$.addText(h)}function ve(){if(v==="")return;let a=null;if(typeof p.subLanguage=="string"){if(!t[p.subLanguage]){$.addText(v);return}a=Ae(p.subLanguage,v,!0,nn[p.subLanguage]),nn[p.subLanguage]=a._top}else a=Le(v,p.subLanguage.length?p.subLanguage:null);p.relevance>0&&(Me+=a.relevance),$.__addSublanguage(a._emitter,a.language)}function V(){p.subLanguage!=null?ve():oe(),v=""}function Q(a,g){a!==""&&($.startScope(g),$.addText(a),$.endScope())}function je(a,g){let h=1;const T=g.length-1;for(;h<=T;){if(!a._emit[h]){h++;continue}const G=ee.classNameAliases[a[h]]||a[h],ae=g[h];G?Q(ae,G):(v=ae,oe(),v=""),h++}}function qe(a,g){return a.scope&&typeof a.scope=="string"&&$.openNode(ee.classNameAliases[a.scope]||a.scope),a.beginScope&&(a.beginScope._wrap?(Q(v,ee.classNameAliases[a.beginScope._wrap]||a.beginScope._wrap),v=""):a.beginScope._multi&&(je(a.beginScope,g),v="")),p=Object.create(a,{parent:{value:p}}),p}function Qe(a,g,h){let T=J(a.endRe,h);if(T){if(a["on:end"]){const G=new o(a);a["on:end"](g,G),G.isMatchIgnored&&(T=!1)}if(T){for(;a.endsParent&&a.parent;)a=a.parent;return a}}if(a.endsWithParent)return Qe(a.parent,g,h)}function at(a){return p.matcher.regexIndex===0?(v+=a[0],1):(Ue=!0,0)}function rt(a){const g=a[0],h=a.rule,T=new o(h),G=[h.__beforeBegin,h["on:begin"]];for(const ae of G)if(ae&&(ae(a,T),T.isMatchIgnored))return at(g);return h.skip?v+=g:(h.excludeBegin&&(v+=g),V(),!h.returnBegin&&!h.excludeBegin&&(v=g)),qe(h,a),h.returnBegin?0:g.length}function ot(a){const g=a[0],h=u.substring(a.index),T=Qe(p,a,h);if(!T)return We;const G=p;p.endScope&&p.endScope._wrap?(V(),Q(g,p.endScope._wrap)):p.endScope&&p.endScope._multi?(V(),je(p.endScope,a)):G.skip?v+=g:(G.returnEnd||G.excludeEnd||(v+=g),V(),G.excludeEnd&&(v=g));do p.scope&&$.closeNode(),!p.skip&&!p.subLanguage&&(Me+=p.relevance),p=p.parent;while(p!==T.parent);return T.starts&&qe(T.starts,a),G.returnEnd?0:g.length}function ct(){const a=[];for(let g=p;g!==ee;g=g.parent)g.scope&&a.unshift(g.scope);a.forEach(g=>$.openNode(g))}let xe={};function en(a,g){const h=g&&g[0];if(v+=a,h==null)return V(),0;if(xe.type==="begin"&&g.type==="end"&&xe.index===g.index&&h===""){if(v+=u.slice(g.index,g.index+1),!k){const T=new Error(`0 width match regex (${i})`);throw T.languageName=i,T.badRule=xe.rule,T}return 1}if(xe=g,g.type==="begin")return rt(g);if(g.type==="illegal"&&!m){const T=new Error('Illegal lexeme "'+h+'" for mode "'+(p.scope||"<unnamed>")+'"');throw T.mode=p,T}else if(g.type==="end"){const T=ot(g);if(T!==We)return T}if(g.type==="illegal"&&h==="")return v+=`
3
3
  `,1;if(Pe>1e5&&Pe>g.index*3)throw new Error("potential infinite loop, way more iterations than matches");return v+=h,h.length}const ee=re(i);if(!ee)throw de(I.replace("{}",i)),new Error('Unknown language: "'+i+'"');const lt=Fn(ee);let De="",p=O||lt;const nn={},$=new r.__emitter(r);ct();let v="",Me=0,ge=0,Pe=0,Ue=!1;try{if(ee.__emitTokens)ee.__emitTokens(u,$);else{for(p.matcher.considerAll();;){Pe++,Ue?Ue=!1:p.matcher.considerAll(),p.matcher.lastIndex=ge;const a=p.matcher.exec(u);if(!a)break;const g=u.substring(ge,a.index),h=en(g,a);ge=a.index+h}en(u.substring(ge))}return $.finalize(),De=$.toHTML(),{language:i,value:De,relevance:Me,illegal:!1,_emitter:$,_top:p}}catch(a){if(a.message&&a.message.includes("Illegal"))return{language:i,value:Ie(u),illegal:!0,relevance:0,_illegalBy:{message:a.message,index:ge,context:u.slice(ge-100,ge+100),mode:a.mode,resultSoFar:De},_emitter:$};if(k)return{language:i,value:Ie(u),illegal:!1,relevance:0,errorRaised:a,_emitter:$,_top:p};throw a}}function Ce(i){const u={value:Ie(i),illegal:!1,relevance:0,_top:c,_emitter:new r.__emitter(r)};return u._emitter.addText(i),u}function Le(i,u){u=u||r.languages||Object.keys(t);const m=Ce(i),O=u.filter(re).filter(Je).map(V=>Ae(V,i,!1));O.unshift(m);const D=O.sort((V,Q)=>{if(V.relevance!==Q.relevance)return Q.relevance-V.relevance;if(V.language&&Q.language){if(re(V.language).supersetOf===Q.language)return 1;if(re(Q.language).supersetOf===V.language)return-1}return 0}),[q,oe]=D,ve=q;return ve.secondBest=oe,ve}function Yn(i,u,m){const O=u&&s[u]||m;i.classList.add("hljs"),i.classList.add(`language-${O}`)}function Be(i){let u=null;const m=U(i);if(f(m))return;if(Oe("before:highlightElement",{el:i,language:m}),i.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",i);return}if(i.children.length>0&&(r.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(i)),r.throwUnescapedHTML))throw new Wn("One of your code blocks includes unescaped HTML.",i.innerHTML);u=i;const O=u.textContent,D=m?L(O,{language:m,ignoreIllegals:!0}):Le(O);i.innerHTML=D.value,i.dataset.highlighted="yes",Yn(i,m,D.language),i.result={language:D.language,re:D.relevance,relevance:D.relevance},D.secondBest&&(i.secondBest={language:D.secondBest.language,relevance:D.secondBest.relevance}),Oe("after:highlightElement",{el:i,result:D,text:O})}function Vn(i){r=Ze(r,i)}const Jn=()=>{we(),Ee("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function jn(){we(),Ee("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let Ye=!1;function we(){function i(){we()}if(document.readyState==="loading"){Ye||window.addEventListener("DOMContentLoaded",i,!1),Ye=!0;return}document.querySelectorAll(r.cssSelector).forEach(Be)}function qn(i,u){let m=null;try{m=u(e)}catch(O){if(de("Language definition for '{}' could not be registered.".replace("{}",i)),k)de(O);else throw O;m=c}m.name||(m.name=i),t[i]=m,m.rawDefinition=u.bind(null,e),m.aliases&&Ve(m.aliases,{languageName:i})}function Qn(i){delete t[i];for(const u of Object.keys(s))s[u]===i&&delete s[u]}function et(){return Object.keys(t)}function re(i){return i=(i||"").toLowerCase(),t[i]||t[s[i]]}function Ve(i,{languageName:u}){typeof i=="string"&&(i=[i]),i.forEach(m=>{s[m.toLowerCase()]=u})}function Je(i){const u=re(i);return u&&!u.disableAutodetect}function nt(i){i["before:highlightBlock"]&&!i["before:highlightElement"]&&(i["before:highlightElement"]=u=>{i["before:highlightBlock"](Object.assign({block:u.el},u))}),i["after:highlightBlock"]&&!i["after:highlightElement"]&&(i["after:highlightElement"]=u=>{i["after:highlightBlock"](Object.assign({block:u.el},u))})}function tt(i){nt(i),b.push(i)}function it(i){const u=b.indexOf(i);u!==-1&&b.splice(u,1)}function Oe(i,u){const m=i;b.forEach(function(O){O[m]&&O[m](u)})}function st(i){return Ee("10.7.0","highlightBlock will be removed entirely in v12.0"),Ee("10.7.0","Please use highlightElement now."),Be(i)}Object.assign(e,{highlight:L,highlightAuto:Le,highlightAll:we,highlightElement:Be,highlightBlock:st,configure:Vn,initHighlighting:Jn,initHighlightingOnLoad:jn,registerLanguage:qn,unregisterLanguage:Qn,listLanguages:et,getLanguage:re,registerAliases:Ve,autoDetection:Je,inherit:Ze,addPlugin:tt,removePlugin:it}),e.debugMode=function(){k=!1},e.safeMode=function(){k=!0},e.versionString=Zn,e.regex={concat:A,lookahead:N,either:H,optional:C,anyNumberOfTimes:B};for(const i in Te)typeof Te[i]=="object"&&n(Te[i]);return Object.assign(e,Te),e},me=Xe({});return me.newInstance=()=>Xe({}),$e=me,me.HighlightJS=me,me.default=me,$e}var At=yt();const Z=ut(At);function cn(n){const o=n.regex,l={},d={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[l]}]};Object.assign(l,{className:"variable",variants:[{begin:o.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},d]});const R={className:"subst",begin:/\$\(/,end:/\)/,contains:[n.BACKSLASH_ESCAPE]},M=n.inherit(n.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),_={begin:/<<-?\s*(?=\w+)/,starts:{contains:[n.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},E={className:"string",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE,l,R]};R.contains.push(E);const w={match:/\\"/},y={className:"string",begin:/'/,end:/'/},P={match:/\\'/},x={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},n.NUMBER_MODE,l]},N=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],B=n.SHEBANG({binary:`(${N.join("|")})`,relevance:10}),C={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[n.inherit(n.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},A=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],z=["true","false"],H={match:/(\/[a-z._-]+)+/},F=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],J=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],ne=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],W=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:A,literal:z,built_in:[...F,...J,"set","shopt",...ne,...W]},contains:[B,n.SHEBANG(),C,x,M,_,H,E,w,y,P,l]}}const Tt=n=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:n.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:n.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),Rt=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],wt=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],Ot=[...Rt,...wt],vt=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),xt=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),Mt=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),kt=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function It(n){const o=n.regex,l=Tt(n),d={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},R="and or not only",M=/@-?\w[\w]*(-\w+)*/,_="[a-zA-Z-][a-zA-Z0-9_-]*",E=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,d,l.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+_,relevance:0},l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+xt.join("|")+")"},{begin:":(:)?("+Mt.join("|")+")"}]},l.CSS_VARIABLE,{className:"attribute",begin:"\\b("+kt.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...E,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...E,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:o.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:M},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:R,attribute:vt.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...E,l.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+Ot.join("|")+")\\b"}]}}function Ct(n){const o=n.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:o.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:o.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}const on="[A-Za-z$_][0-9A-Za-z$_]*",Lt=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],Bt=["true","false","null","undefined","NaN","Infinity"],ln=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],dn=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],gn=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],Dt=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],Pt=[].concat(gn,ln,dn);function un(n){const o=n.regex,l=(S,{after:K})=>{const Y="</"+S[0].slice(1);return S.input.indexOf(Y,K)!==-1},d=on,R={begin:"<>",end:"</>"},M=/<[A-Za-z0-9\\._:-]+\s*\/>/,_={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(S,K)=>{const Y=S[0].length+S.index,j=S.input[Y];if(j==="<"||j===","){K.ignoreMatch();return}j===">"&&(l(S,{after:Y})||K.ignoreMatch());let se;const le=S.input.substring(Y);if(se=le.match(/^\s*=/)){K.ignoreMatch();return}if((se=le.match(/^\s+extends\s+/))&&se.index===0){K.ignoreMatch();return}}},E={$pattern:on,keyword:Lt,literal:Bt,built_in:Pt,"variable.language":Dt},w="[0-9](_?[0-9])*",y=`\\.(${w})`,P="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",x={className:"number",variants:[{begin:`(\\b(${P})((${y})|\\.)?|(${y}))[eE][+-]?(${w})\\b`},{begin:`\\b(${P})\\b((${y})\\b|\\.)?|(${y})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},N={className:"subst",begin:"\\$\\{",end:"\\}",keywords:E,contains:[]},B={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,N],subLanguage:"xml"}},C={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,N],subLanguage:"css"}},A={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,N],subLanguage:"graphql"}},z={className:"string",begin:"`",end:"`",contains:[n.BACKSLASH_ESCAPE,N]},F={className:"comment",variants:[n.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),n.C_BLOCK_COMMENT_MODE,n.C_LINE_COMMENT_MODE]},J=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,B,C,A,z,{match:/\$\d+/},x];N.contains=J.concat({begin:/\{/,end:/\}/,keywords:E,contains:["self"].concat(J)});const ne=[].concat(F,N.contains),W=ne.concat([{begin:/(\s*)\(/,end:/\)/,keywords:E,contains:["self"].concat(ne)}]),X={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:W},fe={variants:[{match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,o.concat(d,"(",o.concat(/\./,d),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},te={relevance:0,match:o.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...ln,...dn]}},be={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},pe={variants:[{match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[X],illegal:/%/},he={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function _e(S){return o.concat("(?!",S.join("|"),")")}const Ne={match:o.concat(/\b/,_e([...gn,"super","import"].map(S=>`${S}\\s*\\(`)),d,o.lookahead(/\s*\(/)),className:"title.function",relevance:0},ie={begin:o.concat(/\./,o.lookahead(o.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Se={match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},X]},ce="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+n.UNDERSCORE_IDENT_RE+")\\s*=>",ye={match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,o.lookahead(ce)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[X]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:E,exports:{PARAMS_CONTAINS:W,CLASS_REFERENCE:te},illegal:/#(?![$_A-z])/,contains:[n.SHEBANG({label:"shebang",binary:"node",relevance:5}),be,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,B,C,A,z,F,{match:/\$\d+/},x,te,{scope:"attr",match:d+o.lookahead(":"),relevance:0},ye,{begin:"("+n.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[F,n.REGEXP_MODE,{className:"function",begin:ce,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:n.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:W}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:R.begin,end:R.end},{match:M},{begin:_.begin,"on:begin":_.isTrulyOpeningTag,end:_.end}],subLanguage:"xml",contains:[{begin:_.begin,end:_.end,skip:!0,contains:["self"]}]}]},pe,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+n.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[X,n.inherit(n.TITLE_MODE,{begin:d,className:"title.function"})]},{match:/\.\.\./,relevance:0},ie,{match:"\\$"+d,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[X]},Ne,he,fe,Se,{match:/\$[(.]/}]}}function Ut(n){const o={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},l={match:/[{}[\],:]/,className:"punctuation",relevance:0},d=["true","false","null"],R={scope:"literal",beginKeywords:d.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:d},contains:[o,l,n.QUOTE_STRING_MODE,R,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function $t(n){const o=n.regex,l=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),d=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],E={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:d,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},w={className:"meta",begin:/^(>>>|\.\.\.) /},y={className:"subst",begin:/\{/,end:/\}/,keywords:E,illegal:/#/},P={begin:/\{\{/,relevance:0},x={className:"string",contains:[n.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[n.BACKSLASH_ESCAPE,w],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[n.BACKSLASH_ESCAPE,w],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[n.BACKSLASH_ESCAPE,w,P,y]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[n.BACKSLASH_ESCAPE,w,P,y]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[n.BACKSLASH_ESCAPE,P,y]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[n.BACKSLASH_ESCAPE,P,y]},n.APOS_STRING_MODE,n.QUOTE_STRING_MODE]},N="[0-9](_?[0-9])*",B=`(\\b(${N}))?\\.(${N})|\\b(${N})\\.`,C=`\\b|${d.join("|")}`,A={className:"number",relevance:0,variants:[{begin:`(\\b(${N})|(${B}))[eE][+-]?(${N})[jJ]?(?=${C})`},{begin:`(${B})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${C})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${C})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${C})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${C})`},{begin:`\\b(${N})[jJ](?=${C})`}]},z={className:"comment",begin:o.lookahead(/# type:/),end:/$/,keywords:E,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},H={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:["self",w,A,x,n.HASH_COMMENT_MODE]}]};return y.contains=[x,A,w],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:E,illegal:/(<\/|\?)|=>/,contains:[w,A,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},x,z,n.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,l],scope:{1:"keyword",3:"title.function"},contains:[H]},{variants:[{match:[/\bclass/,/\s+/,l,/\s*/,/\(\s*/,l,/\s*\)/]},{match:[/\bclass/,/\s+/,l]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[A,H,x]}]}}const ke="[A-Za-z$_][0-9A-Za-z$_]*",fn=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],bn=["true","false","null","undefined","NaN","Infinity"],pn=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],hn=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],En=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],mn=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],_n=[].concat(En,pn,hn);function zt(n){const o=n.regex,l=(S,{after:K})=>{const Y="</"+S[0].slice(1);return S.input.indexOf(Y,K)!==-1},d=ke,R={begin:"<>",end:"</>"},M=/<[A-Za-z0-9\\._:-]+\s*\/>/,_={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(S,K)=>{const Y=S[0].length+S.index,j=S.input[Y];if(j==="<"||j===","){K.ignoreMatch();return}j===">"&&(l(S,{after:Y})||K.ignoreMatch());let se;const le=S.input.substring(Y);if(se=le.match(/^\s*=/)){K.ignoreMatch();return}if((se=le.match(/^\s+extends\s+/))&&se.index===0){K.ignoreMatch();return}}},E={$pattern:ke,keyword:fn,literal:bn,built_in:_n,"variable.language":mn},w="[0-9](_?[0-9])*",y=`\\.(${w})`,P="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",x={className:"number",variants:[{begin:`(\\b(${P})((${y})|\\.)?|(${y}))[eE][+-]?(${w})\\b`},{begin:`\\b(${P})\\b((${y})\\b|\\.)?|(${y})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},N={className:"subst",begin:"\\$\\{",end:"\\}",keywords:E,contains:[]},B={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,N],subLanguage:"xml"}},C={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,N],subLanguage:"css"}},A={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,N],subLanguage:"graphql"}},z={className:"string",begin:"`",end:"`",contains:[n.BACKSLASH_ESCAPE,N]},F={className:"comment",variants:[n.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:d+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),n.C_BLOCK_COMMENT_MODE,n.C_LINE_COMMENT_MODE]},J=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,B,C,A,z,{match:/\$\d+/},x];N.contains=J.concat({begin:/\{/,end:/\}/,keywords:E,contains:["self"].concat(J)});const ne=[].concat(F,N.contains),W=ne.concat([{begin:/(\s*)\(/,end:/\)/,keywords:E,contains:["self"].concat(ne)}]),X={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:W},fe={variants:[{match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,o.concat(d,"(",o.concat(/\./,d),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,d],scope:{1:"keyword",3:"title.class"}}]},te={relevance:0,match:o.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...pn,...hn]}},be={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},pe={variants:[{match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[X],illegal:/%/},he={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function _e(S){return o.concat("(?!",S.join("|"),")")}const Ne={match:o.concat(/\b/,_e([...En,"super","import"].map(S=>`${S}\\s*\\(`)),d,o.lookahead(/\s*\(/)),className:"title.function",relevance:0},ie={begin:o.concat(/\./,o.lookahead(o.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Se={match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},X]},ce="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+n.UNDERSCORE_IDENT_RE+")\\s*=>",ye={match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,o.lookahead(ce)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[X]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:E,exports:{PARAMS_CONTAINS:W,CLASS_REFERENCE:te},illegal:/#(?![$_A-z])/,contains:[n.SHEBANG({label:"shebang",binary:"node",relevance:5}),be,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,B,C,A,z,F,{match:/\$\d+/},x,te,{scope:"attr",match:d+o.lookahead(":"),relevance:0},ye,{begin:"("+n.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[F,n.REGEXP_MODE,{className:"function",begin:ce,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:n.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:E,contains:W}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:R.begin,end:R.end},{match:M},{begin:_.begin,"on:begin":_.isTrulyOpeningTag,end:_.end}],subLanguage:"xml",contains:[{begin:_.begin,end:_.end,skip:!0,contains:["self"]}]}]},pe,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+n.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[X,n.inherit(n.TITLE_MODE,{begin:d,className:"title.function"})]},{match:/\.\.\./,relevance:0},ie,{match:"\\$"+d,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[X]},Ne,he,fe,Se,{match:/\$[(.]/}]}}function Nn(n){const o=n.regex,l=zt(n),d=ke,R=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],M={begin:[/namespace/,/\s+/,n.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},_={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:R},contains:[l.exports.CLASS_REFERENCE]},E={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},w=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],y={$pattern:ke,keyword:fn.concat(w),literal:bn,built_in:_n.concat(R),"variable.language":mn},P={className:"meta",begin:"@"+d},x=(A,z,H)=>{const F=A.contains.findIndex(J=>J.label===z);if(F===-1)throw new Error("can not find mode to replace");A.contains.splice(F,1,H)};Object.assign(l.keywords,y),l.exports.PARAMS_CONTAINS.push(P);const N=l.contains.find(A=>A.scope==="attr"),B=Object.assign({},N,{match:o.concat(d,o.lookahead(/\s*\?:/))});l.exports.PARAMS_CONTAINS.push([l.exports.CLASS_REFERENCE,N,B]),l.contains=l.contains.concat([P,M,_,B]),x(l,"shebang",n.SHEBANG()),x(l,"use_strict",E);const C=l.contains.find(A=>A.label==="func.def");return C.relevance=0,Object.assign(l,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),l}function Sn(n){const o=n.regex,l=o.concat(/[\p{L}_]/u,o.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),d=/[\p{L}0-9._:-]+/u,R={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},M={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},_=n.inherit(M,{begin:/\(/,end:/\)/}),E=n.inherit(n.APOS_STRING_MODE,{className:"string"}),w=n.inherit(n.QUOTE_STRING_MODE,{className:"string"}),y={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:d,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[R]},{begin:/'/,end:/'/,contains:[R]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[M,w,E,_,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[M,_,w,E]}]}]},n.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},R,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[w]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[y],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[y],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:o.concat(/</,o.lookahead(o.concat(l,o.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:l,relevance:0,starts:y}]},{className:"tag",begin:o.concat(/<\//,o.lookahead(o.concat(l,/>/))),contains:[{className:"name",begin:l,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function yn(n){const o="true false yes no null",l="[\\w#;/?:@&=+$,.~*'()[\\]]+",d={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},R={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},M={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},_={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[n.BACKSLASH_ESCAPE,R]},E=n.inherit(_,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),N={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},B={end:",",endsWithParent:!0,excludeEnd:!0,keywords:o,relevance:0},C={begin:/\{/,end:/\}/,contains:[B],illegal:"\\n",relevance:0},A={begin:"\\[",end:"\\]",contains:[B],illegal:"\\n",relevance:0},z=[d,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+l},{className:"type",begin:"!<"+l+">"},{className:"type",begin:"!"+l},{className:"type",begin:"!!"+l},{className:"meta",begin:"&"+n.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+n.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},n.HASH_COMMENT_MODE,{beginKeywords:o,keywords:{literal:o}},N,{className:"number",begin:n.C_NUMBER_RE+"\\b",relevance:0},C,A,M,_],H=[...z];return H.pop(),H.push(E),B.contains=H,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:z}}const Ht={bash:cn,css:It,diff:Ct,javascript:un,json:Ut,python:$t,typescript:Nn,xml:Sn,yaml:yn};for(const[n,o]of Object.entries(Ht))Z.getLanguage(n)||Z.registerLanguage(n,o);Z.getLanguage("sh")||Z.registerLanguage("sh",cn);Z.getLanguage("ts")||Z.registerLanguage("ts",Nn);Z.getLanguage("js")||Z.registerLanguage("js",un);Z.getLanguage("yml")||Z.registerLanguage("yml",yn);Z.getLanguage("html")||Z.registerLanguage("html",Sn);const Gt=1e5;function Ft(n,o){try{if(o&&Z.getLanguage(o))return{html:Z.highlight(n,{language:o,ignoreIllegals:!0}).value,language:o};if(n.length<=Gt){const l=Z.highlightAuto(n);return{html:l.value,language:l.language??""}}}catch{}return{html:Kt(n),language:""}}function Kt(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}const Zt={class:"relative"},Wt={class:"bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg px-4 pt-8 pb-3 text-sm font-mono overflow-x-auto leading-relaxed"},Xt=["innerHTML"],Yt={key:0,class:"absolute top-2 left-3 text-[10px] font-medium uppercase tracking-wide text-gray-400 dark:text-gray-500 select-none pointer-events-none"},Vt=ft({__name:"CodeBlock",props:{code:{},lang:{}},setup(n){const o=n,{copy:l,copied:d}=St(),R=mt(""),M=_t(()=>{const _=Ft(o.code,o.lang);return R.value=_.language,_.html});return(_,E)=>{const w=Et;return tn(),sn("div",Zt,[an("pre",Wt,[an("code",{class:"hljs !bg-transparent",innerHTML:ue(M)},null,8,Xt)]),ue(R)?(tn(),sn("span",Yt,bt(ue(R)),1)):pt("",!0),ht(w,{size:"xs",color:"neutral",variant:"ghost",icon:ue(d)?"i-lucide-check":"i-lucide-clipboard",title:ue(d)?"Copied!":("copyPreview"in _?_.copyPreview:ue(Nt))(n.code),class:"absolute top-1.5 right-1.5 opacity-40 hover:opacity-100 transition-opacity",onClick:E[0]||(E[0]=y=>ue(l)(n.code,{toast:!0}))},null,8,["icon","title"])])}}}),ei=Object.assign(Vt,{__name:"CodeBlock"});export{ei as _,Ft as h};
@@ -1 +1 @@
1
- import{_ as x,a as $}from"./C9p0YCAi.js";import{_ as w,a as y}from"./B_mN5eMV.js";import{_ as B}from"./iubpj2qv.js";import{a3 as C,a5 as M,o as m,f as d,g as l,V as c,i as u,q as p,k as t,X as S,h as U,a8 as k,B as D,r as N,d as P,e as q,j as o,aK as T}from"./h49q_GXF.js";import{u as j}from"./B-6GGrhr.js";import"./BhH0TNTi.js";import"./x8w_1_rn.js";import"./CRPt9SfB.js";import"./CobveFaj.js";import"./BjaRappk.js";import"./BaDhDBCV.js";const V={slots:{root:"shrink-0 flex items-center justify-between border-b border-default px-4 sm:px-6 gap-1.5 overflow-x-auto min-h-[49px]",left:"flex items-center gap-1.5",right:"flex items-center gap-1.5"}},H={__name:"UDashboardToolbar",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const a=C("dashboardToolbar",s),e=M(),r=U(()=>k({extend:V,...e.ui?.dashboardToolbar||{}})());return(i,f)=>(m(),d(t(S),{as:t(a).as,"data-slot":"root",class:p(r.value.root({class:[t(a).ui?.root,t(a).class]}))},{default:l(()=>[c(i.$slots,"default",{},()=>[u("div",{"data-slot":"left",class:p(r.value.left({class:[t(a).ui?.left]}))},[c(i.$slots,"left")],2),u("div",{"data-slot":"right",class:p(r.value.right({class:[t(a).ui?.right]}))},[c(i.$slots,"right")],2)])]),_:3},8,["as","class"]))}};function z(){const s=N({account:!1,users:!1,notifications:!1,tags:!1,storage:!1,performance:!1,"pr-feedback":!1,ai:!1,about:!1});async function n(){const a=[];a.push($fetch("/api/settings/ai").then(e=>{s.value.ai=!!e.envManaged}).catch(()=>{})),a.push($fetch("/api/settings/wasted-waits").then(e=>{s.value.performance=!!e.envManaged}).catch(()=>{})),a.push($fetch("/api/settings/smtp").then(e=>{s.value.notifications=!!(e.envManaged&&e.configured)}).catch(()=>{})),await Promise.all(a)}return D(()=>{n()}),{envManaged:s,refresh:n}}const A={class:"flex flex-col gap-4 sm:gap-6 lg:gap-12 w-full lg:max-w-4xl mx-auto"},W=P({__name:"settings",setup(s){q({title:"Settings — Piwi Dashboard"});const{envManaged:n}=z(),a=j(n);return(e,r)=>{const i=x,f=$,_=y,g=B,h=H,b=T,v=w;return m(),d(v,{id:"settings",ui:{body:"lg:py-12"}},{header:l(()=>[o(_,null,{leading:l(()=>[o(i),o(f,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Settings"}]})]),_:1}),o(h,null,{default:l(()=>[o(g,{items:t(a),highlight:"",class:"-mx-1 flex-1",ui:{list:"overflow-x-auto",root:"min-w-0"}},null,8,["items"])]),_:1})]),body:l(()=>[u("div",A,[o(b)])]),_:1})}}});export{W as default};
1
+ import{_ as x,a as $}from"./Cu2Q4iPh.js";import{_ as w,a as y}from"./opyDpgSw.js";import{_ as B}from"./BPXqL9vK.js";import{a3 as C,a5 as M,o as m,f as d,g as l,V as c,i as u,q as p,k as t,X as S,h as U,a8 as k,B as D,r as N,d as P,e as q,j as o,aL as T}from"./C5TrTuWv.js";import{u as j}from"./UY8pjaZA.js";import"./BCGljaM0.js";import"./CpcrljrH.js";import"./DuOH5jcQ.js";import"./BmzxRbcg.js";import"./BjaRappk.js";import"./fXUwH_3d.js";const V={slots:{root:"shrink-0 flex items-center justify-between border-b border-default px-4 sm:px-6 gap-1.5 overflow-x-auto min-h-[49px]",left:"flex items-center gap-1.5",right:"flex items-center gap-1.5"}},H={__name:"UDashboardToolbar",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(s){const a=C("dashboardToolbar",s),e=M(),r=U(()=>k({extend:V,...e.ui?.dashboardToolbar||{}})());return(i,f)=>(m(),d(t(S),{as:t(a).as,"data-slot":"root",class:p(r.value.root({class:[t(a).ui?.root,t(a).class]}))},{default:l(()=>[c(i.$slots,"default",{},()=>[u("div",{"data-slot":"left",class:p(r.value.left({class:[t(a).ui?.left]}))},[c(i.$slots,"left")],2),u("div",{"data-slot":"right",class:p(r.value.right({class:[t(a).ui?.right]}))},[c(i.$slots,"right")],2)])]),_:3},8,["as","class"]))}};function z(){const s=N({account:!1,users:!1,notifications:!1,tags:!1,storage:!1,performance:!1,"pr-feedback":!1,ai:!1,about:!1});async function n(){const a=[];a.push($fetch("/api/settings/ai").then(e=>{s.value.ai=!!e.envManaged}).catch(()=>{})),a.push($fetch("/api/settings/wasted-waits").then(e=>{s.value.performance=!!e.envManaged}).catch(()=>{})),a.push($fetch("/api/settings/smtp").then(e=>{s.value.notifications=!!(e.envManaged&&e.configured)}).catch(()=>{})),await Promise.all(a)}return D(()=>{n()}),{envManaged:s,refresh:n}}const A={class:"flex flex-col gap-4 sm:gap-6 lg:gap-12 w-full lg:max-w-4xl mx-auto"},W=P({__name:"settings",setup(s){q({title:"Settings — Piwi Dashboard"});const{envManaged:n}=z(),a=j(n);return(e,r)=>{const i=x,f=$,_=y,g=B,h=H,b=T,v=w;return m(),d(v,{id:"settings",ui:{body:"lg:py-12"}},{header:l(()=>[o(_,null,{leading:l(()=>[o(i),o(f,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Settings"}]})]),_:1}),o(h,null,{default:l(()=>[o(g,{items:t(a),highlight:"",class:"-mx-1 flex-1",ui:{list:"overflow-x-auto",root:"min-w-0"}},null,8,["items"])]),_:1})]),body:l(()=>[u("div",A,[o(b)])]),_:1})}}});export{W as default};