@chrisjowen/wheelhouse 0.1.0 → 0.2.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 (997) hide show
  1. package/README.md +87 -56
  2. package/build/client/_app/immutable/assets/0.CKUND0qa.css +1 -0
  3. package/build/client/_app/immutable/assets/0.CKUND0qa.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.CKUND0qa.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/DocSheet.CaO2v_qh.css +1 -0
  6. package/build/client/_app/immutable/assets/DocSheet.CaO2v_qh.css.br +0 -0
  7. package/build/client/_app/immutable/assets/DocSheet.CaO2v_qh.css.gz +0 -0
  8. package/build/client/_app/immutable/chunks/08Q01-Mc.js +1 -0
  9. package/build/client/_app/immutable/chunks/08Q01-Mc.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/08Q01-Mc.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/0TvUxbRv.js +1 -0
  12. package/build/client/_app/immutable/chunks/0TvUxbRv.js.br +2 -0
  13. package/build/client/_app/immutable/chunks/0TvUxbRv.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/3Of2kn6M.js +5 -0
  15. package/build/client/_app/immutable/chunks/3Of2kn6M.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/3Of2kn6M.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/5fVeMNeJ.js +1 -0
  18. package/build/client/_app/immutable/chunks/5fVeMNeJ.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/5fVeMNeJ.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/A8GZ5Uuc.js +1 -0
  21. package/build/client/_app/immutable/chunks/A8GZ5Uuc.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/A8GZ5Uuc.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/AHy1Hzhf.js +1 -0
  24. package/build/client/_app/immutable/chunks/AHy1Hzhf.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/AHy1Hzhf.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/B3jXa2LJ.js +1 -0
  27. package/build/client/_app/immutable/chunks/B3jXa2LJ.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/B3jXa2LJ.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/BEDHe9fo.js +1 -0
  30. package/build/client/_app/immutable/chunks/BEDHe9fo.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/BEDHe9fo.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/BJ_s8GdZ.js +2 -0
  33. package/build/client/_app/immutable/chunks/BJ_s8GdZ.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/BJ_s8GdZ.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/BKd0HUNP.js +1 -0
  36. package/build/client/_app/immutable/chunks/BKd0HUNP.js.br +1 -0
  37. package/build/client/_app/immutable/chunks/BKd0HUNP.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/BLL4xbEj.js +1 -0
  39. package/build/client/_app/immutable/chunks/BLL4xbEj.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BLL4xbEj.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/BUUcNufp.js +1 -0
  42. package/build/client/_app/immutable/chunks/BUUcNufp.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BUUcNufp.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/BVXUMEgB.js +1 -0
  45. package/build/client/_app/immutable/chunks/BVXUMEgB.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/BVXUMEgB.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BY5XjwMm.js +1 -0
  48. package/build/client/_app/immutable/chunks/BY5XjwMm.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BY5XjwMm.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/BdZ-2OIO.js +1 -0
  51. package/build/client/_app/immutable/chunks/BdZ-2OIO.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/BdZ-2OIO.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/BdvB_H6l.js +1 -0
  54. package/build/client/_app/immutable/chunks/BdvB_H6l.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/BdvB_H6l.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/BkLV0FAz.js +1 -0
  57. package/build/client/_app/immutable/chunks/BkLV0FAz.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/BkLV0FAz.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/Bm8huziG.js +1 -0
  60. package/build/client/_app/immutable/chunks/Bm8huziG.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/Bm8huziG.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/BnMEvq-8.js +1 -0
  63. package/build/client/_app/immutable/chunks/BnMEvq-8.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/BnMEvq-8.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/BngQrigD.js +1 -0
  66. package/build/client/_app/immutable/chunks/BngQrigD.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/BngQrigD.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/BqQtpLRF.js +5 -0
  69. package/build/client/_app/immutable/chunks/BqQtpLRF.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/BqQtpLRF.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/Bx2K4OII.js +1 -0
  72. package/build/client/_app/immutable/chunks/Bx2K4OII.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/Bx2K4OII.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/Bypc6r1_.js +1 -0
  75. package/build/client/_app/immutable/chunks/Bypc6r1_.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/Bypc6r1_.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/C16DfZ5a.js +1 -0
  78. package/build/client/_app/immutable/chunks/C16DfZ5a.js.br +1 -0
  79. package/build/client/_app/immutable/chunks/C16DfZ5a.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/C3Yi7wCu.js +1 -0
  81. package/build/client/_app/immutable/chunks/C3Yi7wCu.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/C3Yi7wCu.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/C3e5IrpE.js +1 -0
  84. package/build/client/_app/immutable/chunks/C3e5IrpE.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/C3e5IrpE.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/C3o9xHsB.js +1 -0
  87. package/build/client/_app/immutable/chunks/C3o9xHsB.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/C3o9xHsB.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/C6q0X9xa.js +1 -0
  90. package/build/client/_app/immutable/chunks/C6q0X9xa.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/C6q0X9xa.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/C74jQQYs.js +1 -0
  93. package/build/client/_app/immutable/chunks/C74jQQYs.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/C74jQQYs.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/CBHYGBBU.js +4 -0
  96. package/build/client/_app/immutable/chunks/CBHYGBBU.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/CBHYGBBU.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/CD3hbDYc.js +1 -0
  99. package/build/client/_app/immutable/chunks/CD3hbDYc.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/CD3hbDYc.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/CE3Ue5FU.js +1 -0
  102. package/build/client/_app/immutable/chunks/CE3Ue5FU.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/CE3Ue5FU.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/CGGuNYjO.js +1 -0
  105. package/build/client/_app/immutable/chunks/CGGuNYjO.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/CGGuNYjO.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/CH_9Gtej.js +1 -0
  108. package/build/client/_app/immutable/chunks/CH_9Gtej.js.br +0 -0
  109. package/build/client/_app/immutable/chunks/CH_9Gtej.js.gz +0 -0
  110. package/build/client/_app/immutable/chunks/CIj4gWfs.js +1 -0
  111. package/build/client/_app/immutable/chunks/CIj4gWfs.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/CIj4gWfs.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/CJ3NIasv.js +1 -0
  114. package/build/client/_app/immutable/chunks/CJ3NIasv.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/CJ3NIasv.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/CKEJURpk.js +1 -0
  117. package/build/client/_app/immutable/chunks/CKEJURpk.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/CKEJURpk.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/CPmGhju_.js +1 -0
  120. package/build/client/_app/immutable/chunks/CPmGhju_.js.br +1 -0
  121. package/build/client/_app/immutable/chunks/CPmGhju_.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/CXcL7cOb.js +1 -0
  123. package/build/client/_app/immutable/chunks/CXcL7cOb.js.br +0 -0
  124. package/build/client/_app/immutable/chunks/CXcL7cOb.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/CXgAyvD-.js +1 -0
  126. package/build/client/_app/immutable/chunks/CXgAyvD-.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/CXgAyvD-.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/CZBcpBnY.js +1 -0
  129. package/build/client/_app/immutable/chunks/CZBcpBnY.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/CZBcpBnY.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/CZPeboo-.js +1 -0
  132. package/build/client/_app/immutable/chunks/CZPeboo-.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/CZPeboo-.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/Cb-gOV5k.js +1 -0
  135. package/build/client/_app/immutable/chunks/Cb-gOV5k.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/Cb-gOV5k.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/Cl72MTSX.js +1 -0
  138. package/build/client/_app/immutable/chunks/Cl72MTSX.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/Cl72MTSX.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/Cl7r7DFs.js +1 -0
  141. package/build/client/_app/immutable/chunks/Cl7r7DFs.js.br +0 -0
  142. package/build/client/_app/immutable/chunks/Cl7r7DFs.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/Cm8CSK8p.js +1 -0
  144. package/build/client/_app/immutable/chunks/Cm8CSK8p.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/Cm8CSK8p.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/Cng04DK0.js +1 -0
  147. package/build/client/_app/immutable/chunks/Cng04DK0.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/Cng04DK0.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/CqOnPLsz.js +1 -0
  150. package/build/client/_app/immutable/chunks/CqOnPLsz.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/CqOnPLsz.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/Cqy1lT7e.js +1 -0
  153. package/build/client/_app/immutable/chunks/Cqy1lT7e.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/Cqy1lT7e.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/CrjvgIhR.js +1 -0
  156. package/build/client/_app/immutable/chunks/CrjvgIhR.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/CrjvgIhR.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/CsRBDrRN.js +1 -0
  159. package/build/client/_app/immutable/chunks/CsRBDrRN.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/CsRBDrRN.js.gz +0 -0
  161. package/build/client/_app/immutable/chunks/CwwFbl61.js +62 -0
  162. package/build/client/_app/immutable/chunks/CwwFbl61.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/CwwFbl61.js.gz +0 -0
  164. package/build/client/_app/immutable/chunks/D0JSbOCt.js +1 -0
  165. package/build/client/_app/immutable/chunks/D0JSbOCt.js.br +0 -0
  166. package/build/client/_app/immutable/chunks/D0JSbOCt.js.gz +0 -0
  167. package/build/client/_app/immutable/chunks/D25j-NnT.js +1 -0
  168. package/build/client/_app/immutable/chunks/D25j-NnT.js.br +0 -0
  169. package/build/client/_app/immutable/chunks/D25j-NnT.js.gz +0 -0
  170. package/build/client/_app/immutable/chunks/D5hwKKRv.js +1 -0
  171. package/build/client/_app/immutable/chunks/D5hwKKRv.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/D5hwKKRv.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/DBxUIz0k.js +1 -0
  174. package/build/client/_app/immutable/chunks/DBxUIz0k.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/DBxUIz0k.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/DH7t4M9x.js +1 -0
  177. package/build/client/_app/immutable/chunks/DH7t4M9x.js.br +0 -0
  178. package/build/client/_app/immutable/chunks/DH7t4M9x.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/DIsXG5DF.js +1 -0
  180. package/build/client/_app/immutable/chunks/DIsXG5DF.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/DIsXG5DF.js.gz +0 -0
  182. package/build/client/_app/immutable/chunks/DNgh8jh8.js +1 -0
  183. package/build/client/_app/immutable/chunks/DNgh8jh8.js.br +0 -0
  184. package/build/client/_app/immutable/chunks/DNgh8jh8.js.gz +0 -0
  185. package/build/client/_app/immutable/chunks/DOWSzKHL.js +1 -0
  186. package/build/client/_app/immutable/chunks/DOWSzKHL.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/DOWSzKHL.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/DSbOoIPC.js +1 -0
  189. package/build/client/_app/immutable/chunks/DSbOoIPC.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/DSbOoIPC.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/DUYBhCSA.js +1 -0
  192. package/build/client/_app/immutable/chunks/DUYBhCSA.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/DUYBhCSA.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/DfDxKk91.js +2 -0
  195. package/build/client/_app/immutable/chunks/DfDxKk91.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/DfDxKk91.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/DhfQd5fc.js +1 -0
  198. package/build/client/_app/immutable/chunks/DhfQd5fc.js.br +0 -0
  199. package/build/client/_app/immutable/chunks/DhfQd5fc.js.gz +0 -0
  200. package/build/client/_app/immutable/chunks/DmYFgZ4g.js +6 -0
  201. package/build/client/_app/immutable/chunks/DmYFgZ4g.js.br +0 -0
  202. package/build/client/_app/immutable/chunks/DmYFgZ4g.js.gz +0 -0
  203. package/build/client/_app/immutable/chunks/Dn-83VwV.js +1 -0
  204. package/build/client/_app/immutable/chunks/Dn-83VwV.js.br +1 -0
  205. package/build/client/_app/immutable/chunks/Dn-83VwV.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/Dnnuh6qK.js +1 -0
  207. package/build/client/_app/immutable/chunks/Dnnuh6qK.js.br +0 -0
  208. package/build/client/_app/immutable/chunks/Dnnuh6qK.js.gz +0 -0
  209. package/build/client/_app/immutable/chunks/DocaGLjv.js +1 -0
  210. package/build/client/_app/immutable/chunks/DocaGLjv.js.br +0 -0
  211. package/build/client/_app/immutable/chunks/DocaGLjv.js.gz +0 -0
  212. package/build/client/_app/immutable/chunks/Dqlbq2bD.js +2 -0
  213. package/build/client/_app/immutable/chunks/Dqlbq2bD.js.br +0 -0
  214. package/build/client/_app/immutable/chunks/Dqlbq2bD.js.gz +0 -0
  215. package/build/client/_app/immutable/chunks/DugIbHkD.js +1 -0
  216. package/build/client/_app/immutable/chunks/DugIbHkD.js.br +0 -0
  217. package/build/client/_app/immutable/chunks/DugIbHkD.js.gz +0 -0
  218. package/build/client/_app/immutable/chunks/Dy07EIjs.js +1 -0
  219. package/build/client/_app/immutable/chunks/Dy07EIjs.js.br +0 -0
  220. package/build/client/_app/immutable/chunks/Dy07EIjs.js.gz +0 -0
  221. package/build/client/_app/immutable/chunks/Dy_X9Fgu.js +1 -0
  222. package/build/client/_app/immutable/chunks/Dy_X9Fgu.js.br +0 -0
  223. package/build/client/_app/immutable/chunks/Dy_X9Fgu.js.gz +0 -0
  224. package/build/client/_app/immutable/chunks/I26VQaTs.js +2 -0
  225. package/build/client/_app/immutable/chunks/I26VQaTs.js.br +0 -0
  226. package/build/client/_app/immutable/chunks/I26VQaTs.js.gz +0 -0
  227. package/build/client/_app/immutable/chunks/IsTbwoyV.js +1 -0
  228. package/build/client/_app/immutable/chunks/IsTbwoyV.js.br +0 -0
  229. package/build/client/_app/immutable/chunks/IsTbwoyV.js.gz +0 -0
  230. package/build/client/_app/immutable/chunks/Km1CymxJ.js +1 -0
  231. package/build/client/_app/immutable/chunks/Km1CymxJ.js.br +0 -0
  232. package/build/client/_app/immutable/chunks/Km1CymxJ.js.gz +0 -0
  233. package/build/client/_app/immutable/chunks/Me06-nC7.js +1 -0
  234. package/build/client/_app/immutable/chunks/Me06-nC7.js.br +0 -0
  235. package/build/client/_app/immutable/chunks/Me06-nC7.js.gz +0 -0
  236. package/build/client/_app/immutable/chunks/PQApLOOr.js +1 -0
  237. package/build/client/_app/immutable/chunks/PQApLOOr.js.br +0 -0
  238. package/build/client/_app/immutable/chunks/PQApLOOr.js.gz +0 -0
  239. package/build/client/_app/immutable/chunks/WcvPAxq7.js +1 -0
  240. package/build/client/_app/immutable/chunks/WcvPAxq7.js.br +0 -0
  241. package/build/client/_app/immutable/chunks/WcvPAxq7.js.gz +0 -0
  242. package/build/client/_app/immutable/chunks/ZoG8qKMx.js +1 -0
  243. package/build/client/_app/immutable/chunks/ZoG8qKMx.js.br +0 -0
  244. package/build/client/_app/immutable/chunks/ZoG8qKMx.js.gz +0 -0
  245. package/build/client/_app/immutable/chunks/cZnJ0mAm.js +7 -0
  246. package/build/client/_app/immutable/chunks/cZnJ0mAm.js.br +0 -0
  247. package/build/client/_app/immutable/chunks/cZnJ0mAm.js.gz +0 -0
  248. package/build/client/_app/immutable/chunks/qb_JS6rP.js +1 -0
  249. package/build/client/_app/immutable/chunks/qb_JS6rP.js.br +0 -0
  250. package/build/client/_app/immutable/chunks/qb_JS6rP.js.gz +0 -0
  251. package/build/client/_app/immutable/chunks/riwaJFkb.js +3 -0
  252. package/build/client/_app/immutable/chunks/riwaJFkb.js.br +0 -0
  253. package/build/client/_app/immutable/chunks/riwaJFkb.js.gz +0 -0
  254. package/build/client/_app/immutable/chunks/wDLVOANX.js +2 -0
  255. package/build/client/_app/immutable/chunks/wDLVOANX.js.br +0 -0
  256. package/build/client/_app/immutable/chunks/wDLVOANX.js.gz +0 -0
  257. package/build/client/_app/immutable/entry/app.CNnpPQtw.js +2 -0
  258. package/build/client/_app/immutable/entry/app.CNnpPQtw.js.br +0 -0
  259. package/build/client/_app/immutable/entry/app.CNnpPQtw.js.gz +0 -0
  260. package/build/client/_app/immutable/entry/start.BGpEqKH0.js +1 -0
  261. package/build/client/_app/immutable/entry/start.BGpEqKH0.js.br +0 -0
  262. package/build/client/_app/immutable/entry/start.BGpEqKH0.js.gz +0 -0
  263. package/build/client/_app/immutable/nodes/0.CGlGdRWB.js +8 -0
  264. package/build/client/_app/immutable/nodes/0.CGlGdRWB.js.br +0 -0
  265. package/build/client/_app/immutable/nodes/0.CGlGdRWB.js.gz +0 -0
  266. package/build/client/_app/immutable/nodes/1.B4M0q1v4.js +1 -0
  267. package/build/client/_app/immutable/nodes/1.B4M0q1v4.js.br +0 -0
  268. package/build/client/_app/immutable/nodes/1.B4M0q1v4.js.gz +0 -0
  269. package/build/client/_app/immutable/nodes/10.LJhhE6c8.js +3 -0
  270. package/build/client/_app/immutable/nodes/10.LJhhE6c8.js.br +0 -0
  271. package/build/client/_app/immutable/nodes/10.LJhhE6c8.js.gz +0 -0
  272. package/build/client/_app/immutable/nodes/11.CM_xAozz.js +1 -0
  273. package/build/client/_app/immutable/nodes/11.CM_xAozz.js.br +0 -0
  274. package/build/client/_app/immutable/nodes/11.CM_xAozz.js.gz +0 -0
  275. package/build/client/_app/immutable/nodes/12.UENbuJYy.js +14 -0
  276. package/build/client/_app/immutable/nodes/12.UENbuJYy.js.br +0 -0
  277. package/build/client/_app/immutable/nodes/12.UENbuJYy.js.gz +0 -0
  278. package/build/client/_app/immutable/nodes/13.NbAfy9an.js +150 -0
  279. package/build/client/_app/immutable/nodes/13.NbAfy9an.js.br +0 -0
  280. package/build/client/_app/immutable/nodes/13.NbAfy9an.js.gz +0 -0
  281. package/build/client/_app/immutable/nodes/15.BgyPK-jf.js +11 -0
  282. package/build/client/_app/immutable/nodes/15.BgyPK-jf.js.br +0 -0
  283. package/build/client/_app/immutable/nodes/15.BgyPK-jf.js.gz +0 -0
  284. package/build/client/_app/immutable/nodes/16.DcgniGJK.js +9 -0
  285. package/build/client/_app/immutable/nodes/16.DcgniGJK.js.br +0 -0
  286. package/build/client/_app/immutable/nodes/16.DcgniGJK.js.gz +0 -0
  287. package/build/client/_app/immutable/nodes/17.CB9DXHxS.js +2 -0
  288. package/build/client/_app/immutable/nodes/17.CB9DXHxS.js.br +0 -0
  289. package/build/client/_app/immutable/nodes/17.CB9DXHxS.js.gz +0 -0
  290. package/build/client/_app/immutable/nodes/18.BHa-KoGE.js +6 -0
  291. package/build/client/_app/immutable/nodes/18.BHa-KoGE.js.br +0 -0
  292. package/build/client/_app/immutable/nodes/18.BHa-KoGE.js.gz +0 -0
  293. package/build/client/_app/immutable/nodes/19._VaGaWBD.js +1 -0
  294. package/build/client/_app/immutable/nodes/19._VaGaWBD.js.br +0 -0
  295. package/build/client/_app/immutable/nodes/19._VaGaWBD.js.gz +0 -0
  296. package/build/client/_app/immutable/nodes/2.DKxd0T79.js +14 -0
  297. package/build/client/_app/immutable/nodes/2.DKxd0T79.js.br +0 -0
  298. package/build/client/_app/immutable/nodes/2.DKxd0T79.js.gz +0 -0
  299. package/build/client/_app/immutable/nodes/20.C10FVhEw.js +10 -0
  300. package/build/client/_app/immutable/nodes/20.C10FVhEw.js.br +0 -0
  301. package/build/client/_app/immutable/nodes/20.C10FVhEw.js.gz +0 -0
  302. package/build/client/_app/immutable/nodes/21.BhyJIr3P.js +6 -0
  303. package/build/client/_app/immutable/nodes/21.BhyJIr3P.js.br +0 -0
  304. package/build/client/_app/immutable/nodes/21.BhyJIr3P.js.gz +0 -0
  305. package/build/client/_app/immutable/nodes/3.CcRoRYc-.js +5 -0
  306. package/build/client/_app/immutable/nodes/3.CcRoRYc-.js.br +0 -0
  307. package/build/client/_app/immutable/nodes/3.CcRoRYc-.js.gz +0 -0
  308. package/build/client/_app/immutable/nodes/4.BulJqGnt.js +1 -0
  309. package/build/client/_app/immutable/nodes/4.BulJqGnt.js.br +0 -0
  310. package/build/client/_app/immutable/nodes/4.BulJqGnt.js.gz +0 -0
  311. package/build/client/_app/immutable/nodes/5.BT3hraTU.js +1 -0
  312. package/build/client/_app/immutable/nodes/5.BT3hraTU.js.br +0 -0
  313. package/build/client/_app/immutable/nodes/5.BT3hraTU.js.gz +0 -0
  314. package/build/client/_app/immutable/nodes/6.DtNMha3Y.js +7 -0
  315. package/build/client/_app/immutable/nodes/6.DtNMha3Y.js.br +0 -0
  316. package/build/client/_app/immutable/nodes/6.DtNMha3Y.js.gz +0 -0
  317. package/build/client/_app/immutable/nodes/7.Bv6Vn8eC.js +4 -0
  318. package/build/client/_app/immutable/nodes/7.Bv6Vn8eC.js.br +0 -0
  319. package/build/client/_app/immutable/nodes/7.Bv6Vn8eC.js.gz +0 -0
  320. package/build/client/_app/immutable/nodes/9.DgQz7-Cb.js +1 -0
  321. package/build/client/_app/immutable/nodes/9.DgQz7-Cb.js.br +0 -0
  322. package/build/client/_app/immutable/nodes/9.DgQz7-Cb.js.gz +0 -0
  323. package/build/client/_app/version.json +1 -1
  324. package/build/client/_app/version.json.br +0 -0
  325. package/build/client/_app/version.json.gz +0 -0
  326. package/build/handler.js +7 -7
  327. package/build/index.js +7 -7
  328. package/build/server/chunks/chunks/AllowanceMeter.js-DBpmESX6.js +42 -0
  329. package/build/server/chunks/chunks/DecisionCard.js-B1YgF5EF.js +446 -0
  330. package/build/server/chunks/chunks/DictateTextarea.js-CbkGsd1h.js +415 -0
  331. package/build/server/chunks/chunks/DocSheet.js-BPPDMi3P.js +50 -0
  332. package/build/server/chunks/chunks/EtaLine.js-5SCP9O1f.js +79 -0
  333. package/build/server/chunks/chunks/EveryProjectSwitch.js-DzcwkHh4.js +200 -0
  334. package/build/server/chunks/chunks/Icon.js-CVZZ-yuB.js +129 -0
  335. package/build/server/chunks/chunks/InsightsNav.js-Cmn5y1to.js +18 -0
  336. package/build/server/chunks/chunks/InstallPlugin.js-B46b-IrK.js +45 -0
  337. package/build/server/chunks/chunks/LinkedText.js-COjHV297.js +43 -0
  338. package/build/server/chunks/chunks/ProjectBanner.js-ByPp7Y_e.js +111 -0
  339. package/build/server/chunks/chunks/ProjectStateMark.js-BkRD8cX4.js +61 -0
  340. package/build/server/chunks/chunks/QuestionList.js-CppuauNj.js +187 -0
  341. package/build/server/chunks/chunks/ResizableRail.js-BS8hRLV0.js +395 -0
  342. package/build/server/chunks/chunks/SettingsNav.js-BtJIv5cc.js +22 -0
  343. package/build/server/chunks/chunks/SlotContent.js-B4p1QLQN.js +748 -0
  344. package/build/server/chunks/chunks/StageTrack.js-DHvZX7Bl.js +111 -0
  345. package/build/server/chunks/chunks/TimeBar.js-CUFKEJW9.js +32 -0
  346. package/build/server/chunks/chunks/TimeLegend.js-B3Wl61jM.js +29 -0
  347. package/build/server/chunks/chunks/aliases.svelte.js-C_vCoKdk.js +138 -0
  348. package/build/server/chunks/chunks/arrow-down.js-Bt3fQooI.js +18 -0
  349. package/build/server/chunks/chunks/arrow-left.js-BKiSMzvI.js +18 -0
  350. package/build/server/chunks/chunks/arrow-right.js-CNYqcx0M.js +18 -0
  351. package/build/server/chunks/chunks/arrow-up.js-DHbXk79z.js +18 -0
  352. package/build/server/chunks/chunks/attachments.js-BAnnqpd-.js +48 -0
  353. package/build/server/chunks/chunks/bell.js-CXJp-3UZ.js +150 -0
  354. package/build/server/chunks/chunks/berths.js-CuAE9lHW.js +268 -0
  355. package/build/server/chunks/chunks/book-open.js-C2rohN3N.js +23 -0
  356. package/build/server/chunks/chunks/button.js-BF2PsvWw.js +7311 -0
  357. package/build/server/chunks/chunks/chat.svelte.js--pRzj_Xo.js +545 -0
  358. package/build/server/chunks/chunks/check.js-32sYHVxG.js +15 -0
  359. package/build/server/chunks/chunks/checks.js-DR3fVVpO.js +242 -0
  360. package/build/server/chunks/chunks/chevron-down.js-CH53s_me.js +15 -0
  361. package/build/server/chunks/chunks/chevron-left.js-D5RHY-kD.js +15 -0
  362. package/build/server/chunks/chunks/chevron-right.js-DCBAqAae.js +15 -0
  363. package/build/server/chunks/chunks/circle-alert.js-XTuAj7ZH.js +23 -0
  364. package/build/server/chunks/chunks/circle-dashed.js-fXv_bIo-.js +24 -0
  365. package/build/server/chunks/chunks/circle-dot.js-C950Kosw.js +18 -0
  366. package/build/server/chunks/chunks/client.js-B_5mNqUe.js +24 -0
  367. package/build/server/chunks/chunks/clock.js-CHhHTWK_.js +18 -0
  368. package/build/server/chunks/chunks/compass.js-k2sRSGWn.js +23 -0
  369. package/build/server/chunks/chunks/detail.js-DDoqeh1A.js +144 -0
  370. package/build/server/chunks/chunks/docpath.js-D27w_pf9.js +47 -0
  371. package/build/server/chunks/chunks/external-link.js-BQs1euhR.js +24 -0
  372. package/build/server/chunks/chunks/file-text.js-CnuVvHlB.js +26 -0
  373. package/build/server/chunks/chunks/gauge.js-Cbb1aqE7.js +35 -0
  374. package/build/server/chunks/chunks/git-pull-request.js-BMzktlcs.js +20 -0
  375. package/build/server/chunks/chunks/hand.js-BA9yKAan.js +25 -0
  376. package/build/server/chunks/chunks/harbour.js-PHLHOFea.js +117 -0
  377. package/build/server/chunks/chunks/html.js-FW6Ia4bL.js +8 -0
  378. package/build/server/chunks/chunks/http.js-CBM8xgUM.js +25 -0
  379. package/build/server/chunks/chunks/http2.js-fIdVBJaD.js +26 -0
  380. package/build/server/chunks/chunks/inbox.js-Dv8a1ecX.js +184 -0
  381. package/build/server/chunks/chunks/inbox.svelte.js-n7K3YnGB.js +171 -0
  382. package/build/server/chunks/chunks/index-server.js-DsObimPA.js +9 -0
  383. package/build/server/chunks/chunks/index-server2.js-Fb2GE8KQ.js +17 -0
  384. package/build/server/chunks/chunks/index.js-B0NFhRTN.js +1524 -0
  385. package/build/server/chunks/chunks/index2.js-Bxt1T6_K.js +46 -0
  386. package/build/server/chunks/chunks/internal.js-BlgsFxfY.js +146 -0
  387. package/build/server/chunks/chunks/live.svelte.js-By2dseJB.js +253 -0
  388. package/build/server/chunks/chunks/loader-circle.js-rQHvIWN7.js +16 -0
  389. package/build/server/chunks/chunks/markdown.js-CApgGpeX.js +2634 -0
  390. package/build/server/chunks/chunks/message-circle-question-mark.js-DbmaS9k_.js +25 -0
  391. package/build/server/chunks/chunks/message-square-text.js-CyRiNGB8.js +25 -0
  392. package/build/server/chunks/chunks/message-square.js-XK15WVZq.js +22 -0
  393. package/build/server/chunks/chunks/messages-square.js-BXH8BHfd.js +28 -0
  394. package/build/server/chunks/chunks/minus.js-DKvkj8VD.js +15 -0
  395. package/build/server/chunks/chunks/monitor-play.js-4ed3ghDf.js +28 -0
  396. package/build/server/chunks/chunks/nav.js-DwnXJgxd.js +29 -0
  397. package/build/server/chunks/chunks/plus.js-caVrjGZc.js +15 -0
  398. package/build/server/chunks/chunks/preview.js-hrimfbCG.js +69 -0
  399. package/build/server/chunks/chunks/prreview.js-Cg9LDxJp.js +92 -0
  400. package/build/server/chunks/chunks/repo.js-CuWUNKbP.js +33 -0
  401. package/build/server/chunks/chunks/requests.js-DiL4Poa9.js +42 -0
  402. package/build/server/chunks/chunks/restart.js-Dv1_ODgZ.js +12 -0
  403. package/build/server/chunks/chunks/root.js-60iebdW4.js +3105 -0
  404. package/build/server/chunks/chunks/rotate-cw.js-M4SHOpYI.js +21 -0
  405. package/build/server/chunks/chunks/runtime.js-BuGWYyZZ.js +16470 -0
  406. package/build/server/chunks/chunks/scale.js-S5g8YUqL.js +21 -0
  407. package/build/server/chunks/chunks/scroll-lock.js-Ci_ylINL.js +2811 -0
  408. package/build/server/chunks/chunks/service.js-DQK1kj-4.js +914 -0
  409. package/build/server/chunks/chunks/settings.js-C_6kvzhM.js +862 -0
  410. package/build/server/chunks/chunks/square-terminal.js-D9D9_9_V.js +30 -0
  411. package/build/server/chunks/chunks/store.js-XXOawxPN.js +317 -0
  412. package/build/server/chunks/chunks/tone.js-Dxsl-adt.js +31 -0
  413. package/build/server/chunks/chunks/triangle-alert.js-ClLszsZE.js +25 -0
  414. package/build/server/chunks/chunks/uploads.js-D45pIvPk.js +107 -0
  415. package/build/server/chunks/chunks/urls.js-BrlC6XZ8.js +8 -0
  416. package/build/server/chunks/chunks/utils.js-BJgm9WbO.js +2985 -0
  417. package/build/server/chunks/chunks/vault.js-CTaWe09z.js +162 -0
  418. package/build/server/chunks/chunks/view.js-CrOFjYk4.js +76 -0
  419. package/build/server/chunks/chunks/views.js-DyGxvskG.js +124 -0
  420. package/build/server/chunks/chunks/words.js-Cte4wOB4.js +48 -0
  421. package/build/server/chunks/chunks/x.js-YxaUOlq9.js +18 -0
  422. package/build/server/chunks/entries/endpoints/api/apps/_op_/_server.ts.js-DSkVUNdc.js +90 -0
  423. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-CYnLRjOH.js +106 -0
  424. package/build/server/chunks/entries/endpoints/api/files/_server.ts.js-CG8IGmSp.js +49 -0
  425. package/build/server/chunks/entries/endpoints/api/firstmate/chat/_server.ts.js-fmzKkrXb.js +83 -0
  426. package/build/server/chunks/entries/endpoints/api/firstmate/commands/_server.ts.js-BgIU3add.js +119 -0
  427. package/build/server/chunks/entries/endpoints/api/firstmate/dismiss/_server.ts.js-Ba9E_53E.js +45 -0
  428. package/build/server/chunks/entries/endpoints/api/firstmate/input/_server.ts.js-BQZBERsR.js +51 -0
  429. package/build/server/chunks/entries/endpoints/api/firstmate/interrupt/_server.ts.js-BnT3VHSx.js +44 -0
  430. package/build/server/chunks/entries/endpoints/api/firstmate/messages/_server.ts.js-DRYHwJ7R.js +66 -0
  431. package/build/server/chunks/entries/endpoints/api/firstmate/pick/_server.ts.js-BD2B1ByG.js +54 -0
  432. package/build/server/chunks/entries/endpoints/api/firstmate/start/_server.ts.js-DB-m2WWH.js +44 -0
  433. package/build/server/chunks/entries/endpoints/api/firstmate/uploads/_day_/_id_/_name_/_server.ts.js-CK3swjFX.js +32 -0
  434. package/build/server/chunks/entries/endpoints/api/firstmate/uploads/_server.ts.js-WCE63uer.js +40 -0
  435. package/build/server/chunks/entries/endpoints/api/fleet/_server.ts.js-D5-3acjK.js +36 -0
  436. package/build/server/chunks/entries/endpoints/api/gateway/_server.ts.js-B2I7jHdc.js +100 -0
  437. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-BFSqEG5B.js +36 -0
  438. package/build/server/chunks/entries/endpoints/api/inbox/_server.ts.js-BpUaHfsf.js +60 -0
  439. package/build/server/chunks/entries/endpoints/api/inbox/report/_server.ts.js-BNRD4HyF.js +51 -0
  440. package/build/server/chunks/entries/endpoints/api/insights/_server.ts.js-7808SNDM.js +36 -0
  441. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/config/_server.ts.js-B-cQTShG.js +71 -0
  442. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/load/_server.ts.js-CPAHSih2.js +23 -0
  443. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/ui/_...path_/_server.ts.js-DW3M1pzH.js +59 -0
  444. package/build/server/chunks/entries/endpoints/api/plugins/_plugin_/update/_server.ts.js-DDTSw0pX.js +35 -0
  445. package/build/server/chunks/entries/endpoints/api/plugins/_server.ts.js-BlD-1l6V.js +36 -0
  446. package/build/server/chunks/entries/endpoints/api/plugins/inspect/_server.ts.js-IT-jeApI.js +35 -0
  447. package/build/server/chunks/entries/endpoints/api/plugins/install/_server.ts.js-DQqKN2MF.js +38 -0
  448. package/build/server/chunks/entries/endpoints/api/plugins/updates/_server.ts.js-D7rx-bwI.js +23 -0
  449. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/_server.ts.js-BC0HjK9M.js +41 -0
  450. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/commands/_server.ts.js-aVmcjStV.js +50 -0
  451. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/consent/_server.ts.js-BuHN_WYU.js +62 -0
  452. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/draft/_server.ts.js-Dx0x7sws.js +49 -0
  453. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/file/_server.ts.js-CcCDMmmF.js +72 -0
  454. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/test/_server.ts.js-BsOOyTNM.js +55 -0
  455. package/build/server/chunks/entries/endpoints/api/services/_server.ts.js-DGyU8Zmu.js +55 -0
  456. package/build/server/chunks/entries/endpoints/api/slots/_server.ts.js-1B8fEiat.js +44 -0
  457. package/build/server/chunks/entries/endpoints/api/tasks/_id_/_server.ts.js-D4CKazw-.js +41 -0
  458. package/build/server/chunks/entries/endpoints/api/tasks/_id_/artifacts/_...name_/_server.ts.js-CUKo26Ia.js +60 -0
  459. package/build/server/chunks/entries/endpoints/api/tasks/_id_/diff/_server.ts.js-BOa2lgvP.js +48 -0
  460. package/build/server/chunks/entries/endpoints/api/tasks/_id_/output/_server.ts.js-BmI8Ofms.js +93 -0
  461. package/build/server/chunks/entries/endpoints/api/tasks/_id_/preview/_server.ts.js-C2mJi22c.js +110 -0
  462. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/_server.ts.js-8pN6fHl8.js +43 -0
  463. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/ask/_server.ts.js-D6D9O8Su.js +49 -0
  464. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/check/_server.ts.js-BAaCwzOf.js +48 -0
  465. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/guide/_server.ts.js-DfP2iNta.js +48 -0
  466. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/runs/_run_/stop/_server.ts.js-DZDaSSYT.js +41 -0
  467. package/build/server/chunks/entries/endpoints/api/vault/_server.ts.js-CJNUplXf.js +54 -0
  468. package/build/server/chunks/entries/endpoints/api/wheelhouse/update/_server.ts.js-CVqjWsw8.js +23 -0
  469. package/build/server/chunks/entries/endpoints/api/wheelhouse/upgrade/_server.ts.js-CE2zzWtC.js +23 -0
  470. package/build/server/chunks/entries/endpoints/projects/_server.ts.js-uMp6dcat.js +7 -0
  471. package/build/server/chunks/entries/fallbacks/error.svelte.js-DnpcUjRk.js +15 -0
  472. package/build/server/chunks/entries/hooks.server.js-FjSdw_QS.js +54 -0
  473. package/build/server/chunks/entries/pages/_layout.server.ts.js-BkWAC802.js +22 -0
  474. package/build/server/chunks/entries/pages/_layout.svelte.js-DstinFjN.js +8746 -0
  475. package/build/server/chunks/entries/pages/_page.server.ts.js-BXkuWJh7.js +16 -0
  476. package/build/server/chunks/entries/pages/_page.svelte.js-ehBbQlco.js +2194 -0
  477. package/build/server/chunks/entries/pages/decisions/_page.server.ts.js-B2YZfjBk.js +11 -0
  478. package/build/server/chunks/entries/pages/decisions/_page.svelte.js-C3NsHXP-.js +184 -0
  479. package/build/server/chunks/entries/pages/files/_page.server.ts.js-CT3pm5a6.js +17 -0
  480. package/build/server/chunks/entries/pages/files/_page.svelte.js-Bj-5ZaJn.js +61 -0
  481. package/build/server/chunks/entries/pages/harbour/_page.server.ts.js-CcLkegHq.js +46 -0
  482. package/build/server/chunks/entries/pages/harbour/_page.svelte.js-hBC6QUHZ.js +580 -0
  483. package/build/server/chunks/entries/pages/headroom/_page.server.ts.js-BazCFIuz.js +11 -0
  484. package/build/server/chunks/entries/pages/headroom/_page.svelte.js-BLFQjLz8.js +149 -0
  485. package/build/server/chunks/entries/pages/inbox/_page.svelte.js-rjm303kf.js +185 -0
  486. package/build/server/chunks/entries/pages/plugins/_page.server.ts.js-D_nxVVQ0.js +11 -0
  487. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.server.ts.js-BRQpg3kQ.js +16 -0
  488. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.svelte.js-DazeLLT8.js +52 -0
  489. package/build/server/chunks/entries/pages/projects/_id_/_page.server.ts.js-BIypd_XU.js +23 -0
  490. package/build/server/chunks/entries/pages/projects/_id_/_page.svelte.js-DJajtLup.js +945 -0
  491. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.server.ts.js-BwAOIwUv.js +21 -0
  492. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.svelte.js-Cm8mxt61.js +74 -0
  493. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.server.ts.js-CnfqlJgl.js +27 -0
  494. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.svelte.js-CuMA-rCM.js +433 -0
  495. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.server.ts.js-CG14M19O.js +15 -0
  496. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.svelte.js-mtGQO-dJ.js +1880 -0
  497. package/build/server/chunks/entries/pages/settings/_page.server.ts.js-DnBg1UuM.js +11 -0
  498. package/build/server/chunks/entries/pages/settings/gateway/_page.server.ts.js-Zgfe-LX9.js +11 -0
  499. package/build/server/chunks/entries/pages/settings/gateway/_page.svelte.js-BmbSSxk6.js +208 -0
  500. package/build/server/chunks/entries/pages/settings/plugins/_page.server.ts.js-DZ4oJmnj.js +19 -0
  501. package/build/server/chunks/entries/pages/settings/plugins/_page.svelte.js-gBZCjZlg.js +1847 -0
  502. package/build/server/chunks/entries/pages/settings/plugins/_plugin_/_page.server.ts.js-Dm-tgyir.js +17 -0
  503. package/build/server/chunks/entries/pages/settings/plugins/_plugin_/_page.svelte.js-BFGxdrrb.js +220 -0
  504. package/build/server/chunks/entries/pages/tasks/_id_/_page.server.ts.js-Llp3a0Fb.js +25 -0
  505. package/build/server/chunks/entries/pages/tasks/_id_/_page.svelte.js-LgJMZ2RE.js +2107 -0
  506. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.server.ts.js-DuWuEdZ2.js +24 -0
  507. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.svelte.js-BOMmvf6G.js +80 -0
  508. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.server.ts.js-BMQF9I9c.js +15 -0
  509. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.svelte.js-k659tqiw.js +657 -0
  510. package/build/server/chunks/entries/pages/time/_page.server.ts.js-DstGu3ji.js +11 -0
  511. package/build/server/chunks/entries/pages/time/_page.svelte.js-Ckn0YUW_.js +108 -0
  512. package/build/server/chunks/handler-BRidfBIY.js +1474 -0
  513. package/build/server/chunks/index.js-Dhoi5wa_.js +4296 -0
  514. package/build/server/chunks/manifest.js-CF4aVg77.js +537 -0
  515. package/build/server/chunks/nodes/0.js-B2yTHeOL.js +41 -0
  516. package/build/server/chunks/nodes/1.js-BoD2_1or.js +9 -0
  517. package/build/server/chunks/nodes/10.js-C2XmTW8j.js +43 -0
  518. package/build/server/chunks/nodes/11.js-CAJnQkWH.js +42 -0
  519. package/build/server/chunks/nodes/12.js-Cu57dOUj.js +43 -0
  520. package/build/server/chunks/nodes/13.js-1g1BRnk_.js +42 -0
  521. package/build/server/chunks/nodes/14.js-Cl3VZ6XR.js +12 -0
  522. package/build/server/chunks/nodes/15.js-BqL5jpLU.js +41 -0
  523. package/build/server/chunks/nodes/16.js-DibdTAKZ.js +41 -0
  524. package/build/server/chunks/nodes/17.js-BUFA5Avk.js +44 -0
  525. package/build/server/chunks/nodes/18.js-cxLrKmMx.js +42 -0
  526. package/build/server/chunks/nodes/19.js-DMbI3mDp.js +42 -0
  527. package/build/server/chunks/nodes/2.js-8QSIq2KZ.js +41 -0
  528. package/build/server/chunks/nodes/20.js-BNXpftag.js +42 -0
  529. package/build/server/chunks/nodes/21.js-DdJK6h7p.js +41 -0
  530. package/build/server/chunks/nodes/3.js-DHT7fiTy.js +41 -0
  531. package/build/server/chunks/nodes/4.js-DvjrLz8n.js +41 -0
  532. package/build/server/chunks/nodes/5.js-CvUGUQbi.js +45 -0
  533. package/build/server/chunks/nodes/6.js-ptKHsAn6.js +41 -0
  534. package/build/server/chunks/nodes/7.js-BigF9SYG.js +9 -0
  535. package/build/server/chunks/nodes/8.js-D32pPbKa.js +12 -0
  536. package/build/server/chunks/nodes/9.js-DkS4HHqV.js +41 -0
  537. package/dist/cli.js +2156 -62
  538. package/dist/wh-vault.js +1007 -0
  539. package/package.json +5 -3
  540. package/plugins/github-issues/.wheelhouse-plugin/plugin.json +44 -0
  541. package/plugins/github-issues/README.md +16 -0
  542. package/plugins/github-issues/wheelhouse/server/index.js +463 -0
  543. package/plugins/project-links/.wheelhouse-plugin/plugin.json +25 -0
  544. package/plugins/project-links/README.md +17 -0
  545. package/plugins/project-links/wheelhouse/server/index.js +278 -0
  546. package/plugins/project-links/wheelhouse/ui/index.js +87 -0
  547. package/plugins/vault/.wheelhouse-plugin/plugin.json +22 -0
  548. package/plugins/vault/README.md +18 -0
  549. package/plugins/vault/wheelhouse/server/index.js +297 -0
  550. package/build/client/_app/immutable/assets/0.DaQhCSel.css +0 -1
  551. package/build/client/_app/immutable/assets/0.DaQhCSel.css.br +0 -0
  552. package/build/client/_app/immutable/assets/0.DaQhCSel.css.gz +0 -0
  553. package/build/client/_app/immutable/assets/12.DT1C9nmd.css +0 -1
  554. package/build/client/_app/immutable/assets/12.DT1C9nmd.css.br +0 -0
  555. package/build/client/_app/immutable/assets/12.DT1C9nmd.css.gz +0 -0
  556. package/build/client/_app/immutable/assets/14.CjNfSPQ6.css +0 -1
  557. package/build/client/_app/immutable/assets/14.CjNfSPQ6.css.br +0 -0
  558. package/build/client/_app/immutable/assets/14.CjNfSPQ6.css.gz +0 -0
  559. package/build/client/_app/immutable/chunks/36FDwM1G.js +0 -1
  560. package/build/client/_app/immutable/chunks/36FDwM1G.js.br +0 -0
  561. package/build/client/_app/immutable/chunks/36FDwM1G.js.gz +0 -0
  562. package/build/client/_app/immutable/chunks/B1XxiJam.js +0 -1
  563. package/build/client/_app/immutable/chunks/B1XxiJam.js.br +0 -0
  564. package/build/client/_app/immutable/chunks/B1XxiJam.js.gz +0 -0
  565. package/build/client/_app/immutable/chunks/B2wEHue2.js +0 -1
  566. package/build/client/_app/immutable/chunks/B2wEHue2.js.br +0 -0
  567. package/build/client/_app/immutable/chunks/B2wEHue2.js.gz +0 -0
  568. package/build/client/_app/immutable/chunks/BAurN1n6.js +0 -2
  569. package/build/client/_app/immutable/chunks/BAurN1n6.js.br +0 -0
  570. package/build/client/_app/immutable/chunks/BAurN1n6.js.gz +0 -0
  571. package/build/client/_app/immutable/chunks/BEAYWcbT.js +0 -1
  572. package/build/client/_app/immutable/chunks/BEAYWcbT.js.br +0 -0
  573. package/build/client/_app/immutable/chunks/BEAYWcbT.js.gz +0 -0
  574. package/build/client/_app/immutable/chunks/BGINfGsV.js +0 -1
  575. package/build/client/_app/immutable/chunks/BGINfGsV.js.br +0 -4
  576. package/build/client/_app/immutable/chunks/BGINfGsV.js.gz +0 -0
  577. package/build/client/_app/immutable/chunks/BHsdHLbF.js +0 -1
  578. package/build/client/_app/immutable/chunks/BHsdHLbF.js.br +0 -0
  579. package/build/client/_app/immutable/chunks/BHsdHLbF.js.gz +0 -0
  580. package/build/client/_app/immutable/chunks/BR5v76-T.js +0 -1
  581. package/build/client/_app/immutable/chunks/BR5v76-T.js.br +0 -0
  582. package/build/client/_app/immutable/chunks/BR5v76-T.js.gz +0 -0
  583. package/build/client/_app/immutable/chunks/BUo4hMcM.js +0 -1
  584. package/build/client/_app/immutable/chunks/BUo4hMcM.js.br +0 -0
  585. package/build/client/_app/immutable/chunks/BUo4hMcM.js.gz +0 -0
  586. package/build/client/_app/immutable/chunks/BVVO3JPx.js +0 -1
  587. package/build/client/_app/immutable/chunks/BVVO3JPx.js.br +0 -0
  588. package/build/client/_app/immutable/chunks/BVVO3JPx.js.gz +0 -0
  589. package/build/client/_app/immutable/chunks/BZm5e4fE.js +0 -1
  590. package/build/client/_app/immutable/chunks/BZm5e4fE.js.br +0 -0
  591. package/build/client/_app/immutable/chunks/BZm5e4fE.js.gz +0 -0
  592. package/build/client/_app/immutable/chunks/Bfi4vm-w.js +0 -1
  593. package/build/client/_app/immutable/chunks/Bfi4vm-w.js.br +0 -0
  594. package/build/client/_app/immutable/chunks/Bfi4vm-w.js.gz +0 -0
  595. package/build/client/_app/immutable/chunks/BiTivU7x.js +0 -1
  596. package/build/client/_app/immutable/chunks/BiTivU7x.js.br +0 -0
  597. package/build/client/_app/immutable/chunks/BiTivU7x.js.gz +0 -0
  598. package/build/client/_app/immutable/chunks/BiuLIp4b.js +0 -1
  599. package/build/client/_app/immutable/chunks/BiuLIp4b.js.br +0 -0
  600. package/build/client/_app/immutable/chunks/BiuLIp4b.js.gz +0 -0
  601. package/build/client/_app/immutable/chunks/Bns_F-QV.js +0 -1
  602. package/build/client/_app/immutable/chunks/Bns_F-QV.js.br +0 -0
  603. package/build/client/_app/immutable/chunks/Bns_F-QV.js.gz +0 -0
  604. package/build/client/_app/immutable/chunks/Brlpgp90.js +0 -1
  605. package/build/client/_app/immutable/chunks/Brlpgp90.js.br +0 -0
  606. package/build/client/_app/immutable/chunks/Brlpgp90.js.gz +0 -0
  607. package/build/client/_app/immutable/chunks/BunkbzFG.js +0 -1
  608. package/build/client/_app/immutable/chunks/BunkbzFG.js.br +0 -0
  609. package/build/client/_app/immutable/chunks/BunkbzFG.js.gz +0 -0
  610. package/build/client/_app/immutable/chunks/BwOfqJw9.js +0 -1
  611. package/build/client/_app/immutable/chunks/BwOfqJw9.js.br +0 -0
  612. package/build/client/_app/immutable/chunks/BwOfqJw9.js.gz +0 -0
  613. package/build/client/_app/immutable/chunks/C-xrRA1Y.js +0 -1
  614. package/build/client/_app/immutable/chunks/C-xrRA1Y.js.br +0 -0
  615. package/build/client/_app/immutable/chunks/C-xrRA1Y.js.gz +0 -0
  616. package/build/client/_app/immutable/chunks/C2_XZrIO.js +0 -7
  617. package/build/client/_app/immutable/chunks/C2_XZrIO.js.br +0 -0
  618. package/build/client/_app/immutable/chunks/C2_XZrIO.js.gz +0 -0
  619. package/build/client/_app/immutable/chunks/C2d4bDYU.js +0 -1
  620. package/build/client/_app/immutable/chunks/C2d4bDYU.js.br +0 -0
  621. package/build/client/_app/immutable/chunks/C2d4bDYU.js.gz +0 -0
  622. package/build/client/_app/immutable/chunks/C6BQPSOs.js +0 -62
  623. package/build/client/_app/immutable/chunks/C6BQPSOs.js.br +0 -0
  624. package/build/client/_app/immutable/chunks/C6BQPSOs.js.gz +0 -0
  625. package/build/client/_app/immutable/chunks/CDphfOBv.js +0 -1
  626. package/build/client/_app/immutable/chunks/CDphfOBv.js.br +0 -0
  627. package/build/client/_app/immutable/chunks/CDphfOBv.js.gz +0 -0
  628. package/build/client/_app/immutable/chunks/CHoQMvOZ.js +0 -1
  629. package/build/client/_app/immutable/chunks/CHoQMvOZ.js.br +0 -0
  630. package/build/client/_app/immutable/chunks/CHoQMvOZ.js.gz +0 -0
  631. package/build/client/_app/immutable/chunks/CIE0U5Ih.js +0 -1
  632. package/build/client/_app/immutable/chunks/CIE0U5Ih.js.br +0 -0
  633. package/build/client/_app/immutable/chunks/CIE0U5Ih.js.gz +0 -0
  634. package/build/client/_app/immutable/chunks/CLs9Rkbg.js +0 -1
  635. package/build/client/_app/immutable/chunks/CLs9Rkbg.js.br +0 -0
  636. package/build/client/_app/immutable/chunks/CLs9Rkbg.js.gz +0 -0
  637. package/build/client/_app/immutable/chunks/COQ3aAYj.js +0 -1
  638. package/build/client/_app/immutable/chunks/COQ3aAYj.js.br +0 -0
  639. package/build/client/_app/immutable/chunks/COQ3aAYj.js.gz +0 -0
  640. package/build/client/_app/immutable/chunks/COiIt96y.js +0 -1
  641. package/build/client/_app/immutable/chunks/COiIt96y.js.br +0 -0
  642. package/build/client/_app/immutable/chunks/COiIt96y.js.gz +0 -0
  643. package/build/client/_app/immutable/chunks/CQ7gIAH8.js +0 -1
  644. package/build/client/_app/immutable/chunks/CQ7gIAH8.js.br +0 -2
  645. package/build/client/_app/immutable/chunks/CQ7gIAH8.js.gz +0 -0
  646. package/build/client/_app/immutable/chunks/CQlHU-Rx.js +0 -1
  647. package/build/client/_app/immutable/chunks/CQlHU-Rx.js.br +0 -0
  648. package/build/client/_app/immutable/chunks/CQlHU-Rx.js.gz +0 -0
  649. package/build/client/_app/immutable/chunks/CXfdgbLv.js +0 -1
  650. package/build/client/_app/immutable/chunks/CXfdgbLv.js.br +0 -0
  651. package/build/client/_app/immutable/chunks/CXfdgbLv.js.gz +0 -0
  652. package/build/client/_app/immutable/chunks/CeYIQAXD.js +0 -1
  653. package/build/client/_app/immutable/chunks/CeYIQAXD.js.br +0 -0
  654. package/build/client/_app/immutable/chunks/CeYIQAXD.js.gz +0 -0
  655. package/build/client/_app/immutable/chunks/CewXGI4o.js +0 -14
  656. package/build/client/_app/immutable/chunks/CewXGI4o.js.br +0 -0
  657. package/build/client/_app/immutable/chunks/CewXGI4o.js.gz +0 -0
  658. package/build/client/_app/immutable/chunks/CfdzAfq2.js +0 -1
  659. package/build/client/_app/immutable/chunks/CfdzAfq2.js.br +0 -0
  660. package/build/client/_app/immutable/chunks/CfdzAfq2.js.gz +0 -0
  661. package/build/client/_app/immutable/chunks/CkFDaaNz.js +0 -1
  662. package/build/client/_app/immutable/chunks/CkFDaaNz.js.br +0 -0
  663. package/build/client/_app/immutable/chunks/CkFDaaNz.js.gz +0 -0
  664. package/build/client/_app/immutable/chunks/CkLriSVx.js +0 -1
  665. package/build/client/_app/immutable/chunks/CkLriSVx.js.br +0 -0
  666. package/build/client/_app/immutable/chunks/CkLriSVx.js.gz +0 -0
  667. package/build/client/_app/immutable/chunks/Clzs_eXS.js +0 -5
  668. package/build/client/_app/immutable/chunks/Clzs_eXS.js.br +0 -0
  669. package/build/client/_app/immutable/chunks/Clzs_eXS.js.gz +0 -0
  670. package/build/client/_app/immutable/chunks/CrCQ2NNA.js +0 -1
  671. package/build/client/_app/immutable/chunks/CrCQ2NNA.js.br +0 -0
  672. package/build/client/_app/immutable/chunks/CrCQ2NNA.js.gz +0 -0
  673. package/build/client/_app/immutable/chunks/CrgqcyB_.js +0 -1
  674. package/build/client/_app/immutable/chunks/CrgqcyB_.js.br +0 -0
  675. package/build/client/_app/immutable/chunks/CrgqcyB_.js.gz +0 -0
  676. package/build/client/_app/immutable/chunks/CtlVBKf-.js +0 -1
  677. package/build/client/_app/immutable/chunks/CtlVBKf-.js.br +0 -0
  678. package/build/client/_app/immutable/chunks/CtlVBKf-.js.gz +0 -0
  679. package/build/client/_app/immutable/chunks/D4aeBIhU.js +0 -1
  680. package/build/client/_app/immutable/chunks/D4aeBIhU.js.br +0 -0
  681. package/build/client/_app/immutable/chunks/D4aeBIhU.js.gz +0 -0
  682. package/build/client/_app/immutable/chunks/D8Hx-_mj.js +0 -1
  683. package/build/client/_app/immutable/chunks/D8Hx-_mj.js.br +0 -3
  684. package/build/client/_app/immutable/chunks/D8Hx-_mj.js.gz +0 -0
  685. package/build/client/_app/immutable/chunks/DC8T2WRZ.js +0 -1
  686. package/build/client/_app/immutable/chunks/DC8T2WRZ.js.br +0 -0
  687. package/build/client/_app/immutable/chunks/DC8T2WRZ.js.gz +0 -0
  688. package/build/client/_app/immutable/chunks/DGy76IbW.js +0 -2
  689. package/build/client/_app/immutable/chunks/DGy76IbW.js.br +0 -0
  690. package/build/client/_app/immutable/chunks/DGy76IbW.js.gz +0 -0
  691. package/build/client/_app/immutable/chunks/DIABVMrA.js +0 -1
  692. package/build/client/_app/immutable/chunks/DIABVMrA.js.br +0 -0
  693. package/build/client/_app/immutable/chunks/DIABVMrA.js.gz +0 -0
  694. package/build/client/_app/immutable/chunks/DLith9Yi.js +0 -1
  695. package/build/client/_app/immutable/chunks/DLith9Yi.js.br +0 -0
  696. package/build/client/_app/immutable/chunks/DLith9Yi.js.gz +0 -0
  697. package/build/client/_app/immutable/chunks/DPTtvukI.js +0 -1
  698. package/build/client/_app/immutable/chunks/DPTtvukI.js.br +0 -0
  699. package/build/client/_app/immutable/chunks/DPTtvukI.js.gz +0 -0
  700. package/build/client/_app/immutable/chunks/Da92_52d.js +0 -1
  701. package/build/client/_app/immutable/chunks/Da92_52d.js.br +0 -0
  702. package/build/client/_app/immutable/chunks/Da92_52d.js.gz +0 -0
  703. package/build/client/_app/immutable/chunks/Db0WMrvR.js +0 -1
  704. package/build/client/_app/immutable/chunks/Db0WMrvR.js.br +0 -0
  705. package/build/client/_app/immutable/chunks/Db0WMrvR.js.gz +0 -0
  706. package/build/client/_app/immutable/chunks/Dlb_KqyS.js +0 -2
  707. package/build/client/_app/immutable/chunks/Dlb_KqyS.js.br +0 -0
  708. package/build/client/_app/immutable/chunks/Dlb_KqyS.js.gz +0 -0
  709. package/build/client/_app/immutable/chunks/DmcreR7o.js +0 -1
  710. package/build/client/_app/immutable/chunks/DmcreR7o.js.br +0 -0
  711. package/build/client/_app/immutable/chunks/DmcreR7o.js.gz +0 -0
  712. package/build/client/_app/immutable/chunks/Dq9kJk5R.js +0 -1
  713. package/build/client/_app/immutable/chunks/Dq9kJk5R.js.br +0 -0
  714. package/build/client/_app/immutable/chunks/Dq9kJk5R.js.gz +0 -0
  715. package/build/client/_app/immutable/chunks/DxGQT-Hz.js +0 -1
  716. package/build/client/_app/immutable/chunks/DxGQT-Hz.js.br +0 -0
  717. package/build/client/_app/immutable/chunks/DxGQT-Hz.js.gz +0 -0
  718. package/build/client/_app/immutable/chunks/ET-O1REu.js +0 -1
  719. package/build/client/_app/immutable/chunks/ET-O1REu.js.br +0 -0
  720. package/build/client/_app/immutable/chunks/ET-O1REu.js.gz +0 -0
  721. package/build/client/_app/immutable/chunks/Ewrw42Vq.js +0 -1
  722. package/build/client/_app/immutable/chunks/Ewrw42Vq.js.br +0 -0
  723. package/build/client/_app/immutable/chunks/Ewrw42Vq.js.gz +0 -0
  724. package/build/client/_app/immutable/chunks/FQ69txbU.js +0 -1
  725. package/build/client/_app/immutable/chunks/FQ69txbU.js.br +0 -0
  726. package/build/client/_app/immutable/chunks/FQ69txbU.js.gz +0 -0
  727. package/build/client/_app/immutable/chunks/L-6wuY5f.js +0 -2
  728. package/build/client/_app/immutable/chunks/L-6wuY5f.js.br +0 -0
  729. package/build/client/_app/immutable/chunks/L-6wuY5f.js.gz +0 -0
  730. package/build/client/_app/immutable/chunks/M201SoVK.js +0 -1
  731. package/build/client/_app/immutable/chunks/M201SoVK.js.br +0 -1
  732. package/build/client/_app/immutable/chunks/M201SoVK.js.gz +0 -0
  733. package/build/client/_app/immutable/chunks/OeqXO44y.js +0 -1
  734. package/build/client/_app/immutable/chunks/OeqXO44y.js.br +0 -0
  735. package/build/client/_app/immutable/chunks/OeqXO44y.js.gz +0 -0
  736. package/build/client/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  737. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.br +0 -0
  738. package/build/client/_app/immutable/chunks/PPVm8Dsz.js.gz +0 -0
  739. package/build/client/_app/immutable/chunks/QAFSHLn2.js +0 -1
  740. package/build/client/_app/immutable/chunks/QAFSHLn2.js.br +0 -0
  741. package/build/client/_app/immutable/chunks/QAFSHLn2.js.gz +0 -0
  742. package/build/client/_app/immutable/chunks/Tm9AblHs.js +0 -1
  743. package/build/client/_app/immutable/chunks/Tm9AblHs.js.br +0 -0
  744. package/build/client/_app/immutable/chunks/Tm9AblHs.js.gz +0 -0
  745. package/build/client/_app/immutable/chunks/bvY4yrzM.js +0 -4
  746. package/build/client/_app/immutable/chunks/bvY4yrzM.js.br +0 -0
  747. package/build/client/_app/immutable/chunks/bvY4yrzM.js.gz +0 -0
  748. package/build/client/_app/immutable/chunks/eMSiEzFi.js +0 -1
  749. package/build/client/_app/immutable/chunks/eMSiEzFi.js.br +0 -0
  750. package/build/client/_app/immutable/chunks/eMSiEzFi.js.gz +0 -0
  751. package/build/client/_app/immutable/chunks/iVpzjqp1.js +0 -1
  752. package/build/client/_app/immutable/chunks/iVpzjqp1.js.br +0 -0
  753. package/build/client/_app/immutable/chunks/iVpzjqp1.js.gz +0 -0
  754. package/build/client/_app/immutable/chunks/m3YfhLk1.js +0 -1
  755. package/build/client/_app/immutable/chunks/m3YfhLk1.js.br +0 -0
  756. package/build/client/_app/immutable/chunks/m3YfhLk1.js.gz +0 -0
  757. package/build/client/_app/immutable/chunks/p7x6PRF0.js +0 -1
  758. package/build/client/_app/immutable/chunks/p7x6PRF0.js.br +0 -0
  759. package/build/client/_app/immutable/chunks/p7x6PRF0.js.gz +0 -0
  760. package/build/client/_app/immutable/chunks/t4rxsdjl.js +0 -74
  761. package/build/client/_app/immutable/chunks/t4rxsdjl.js.br +0 -0
  762. package/build/client/_app/immutable/chunks/t4rxsdjl.js.gz +0 -0
  763. package/build/client/_app/immutable/chunks/uD7-7yV9.js +0 -1
  764. package/build/client/_app/immutable/chunks/uD7-7yV9.js.br +0 -4
  765. package/build/client/_app/immutable/chunks/uD7-7yV9.js.gz +0 -0
  766. package/build/client/_app/immutable/entry/app.D22_AlD8.js +0 -2
  767. package/build/client/_app/immutable/entry/app.D22_AlD8.js.br +0 -0
  768. package/build/client/_app/immutable/entry/app.D22_AlD8.js.gz +0 -0
  769. package/build/client/_app/immutable/entry/start.xwa7znED.js +0 -1
  770. package/build/client/_app/immutable/entry/start.xwa7znED.js.br +0 -0
  771. package/build/client/_app/immutable/entry/start.xwa7znED.js.gz +0 -0
  772. package/build/client/_app/immutable/nodes/0.DsfUbybd.js +0 -5
  773. package/build/client/_app/immutable/nodes/0.DsfUbybd.js.br +0 -0
  774. package/build/client/_app/immutable/nodes/0.DsfUbybd.js.gz +0 -0
  775. package/build/client/_app/immutable/nodes/1.9tnApS8T.js +0 -1
  776. package/build/client/_app/immutable/nodes/1.9tnApS8T.js.br +0 -0
  777. package/build/client/_app/immutable/nodes/1.9tnApS8T.js.gz +0 -0
  778. package/build/client/_app/immutable/nodes/10.CbyVViLq.js +0 -14
  779. package/build/client/_app/immutable/nodes/10.CbyVViLq.js.br +0 -0
  780. package/build/client/_app/immutable/nodes/10.CbyVViLq.js.gz +0 -0
  781. package/build/client/_app/immutable/nodes/11.xg5UTCOx.js +0 -77
  782. package/build/client/_app/immutable/nodes/11.xg5UTCOx.js.br +0 -0
  783. package/build/client/_app/immutable/nodes/11.xg5UTCOx.js.gz +0 -0
  784. package/build/client/_app/immutable/nodes/12.C6hLGaov.js +0 -32
  785. package/build/client/_app/immutable/nodes/12.C6hLGaov.js.br +0 -0
  786. package/build/client/_app/immutable/nodes/12.C6hLGaov.js.gz +0 -0
  787. package/build/client/_app/immutable/nodes/13.DHbTeLkm.js +0 -5
  788. package/build/client/_app/immutable/nodes/13.DHbTeLkm.js.br +0 -0
  789. package/build/client/_app/immutable/nodes/13.DHbTeLkm.js.gz +0 -0
  790. package/build/client/_app/immutable/nodes/14.BMIOGjF-.js +0 -1
  791. package/build/client/_app/immutable/nodes/14.BMIOGjF-.js.br +0 -0
  792. package/build/client/_app/immutable/nodes/14.BMIOGjF-.js.gz +0 -0
  793. package/build/client/_app/immutable/nodes/15.DYSMqa5A.js +0 -10
  794. package/build/client/_app/immutable/nodes/15.DYSMqa5A.js.br +0 -0
  795. package/build/client/_app/immutable/nodes/15.DYSMqa5A.js.gz +0 -0
  796. package/build/client/_app/immutable/nodes/16.B0mX0t_j.js +0 -6
  797. package/build/client/_app/immutable/nodes/16.B0mX0t_j.js.br +0 -0
  798. package/build/client/_app/immutable/nodes/16.B0mX0t_j.js.gz +0 -0
  799. package/build/client/_app/immutable/nodes/2.CSYV0jmk.js +0 -4
  800. package/build/client/_app/immutable/nodes/2.CSYV0jmk.js.br +0 -0
  801. package/build/client/_app/immutable/nodes/2.CSYV0jmk.js.gz +0 -0
  802. package/build/client/_app/immutable/nodes/3.X5qqsIUa.js +0 -5
  803. package/build/client/_app/immutable/nodes/3.X5qqsIUa.js.br +0 -0
  804. package/build/client/_app/immutable/nodes/3.X5qqsIUa.js.gz +0 -0
  805. package/build/client/_app/immutable/nodes/4.Di4k8SR2.js +0 -3
  806. package/build/client/_app/immutable/nodes/4.Di4k8SR2.js.br +0 -0
  807. package/build/client/_app/immutable/nodes/4.Di4k8SR2.js.gz +0 -0
  808. package/build/client/_app/immutable/nodes/5.DMFYTxVa.js +0 -7
  809. package/build/client/_app/immutable/nodes/5.DMFYTxVa.js.br +0 -0
  810. package/build/client/_app/immutable/nodes/5.DMFYTxVa.js.gz +0 -0
  811. package/build/client/_app/immutable/nodes/6.6yDAURLV.js +0 -4
  812. package/build/client/_app/immutable/nodes/6.6yDAURLV.js.br +0 -0
  813. package/build/client/_app/immutable/nodes/6.6yDAURLV.js.gz +0 -0
  814. package/build/client/_app/immutable/nodes/7.xxvMU05c.js +0 -1
  815. package/build/client/_app/immutable/nodes/7.xxvMU05c.js.br +0 -0
  816. package/build/client/_app/immutable/nodes/7.xxvMU05c.js.gz +0 -0
  817. package/build/client/_app/immutable/nodes/8.GSaWotW8.js +0 -1
  818. package/build/client/_app/immutable/nodes/8.GSaWotW8.js.br +0 -0
  819. package/build/client/_app/immutable/nodes/8.GSaWotW8.js.gz +0 -0
  820. package/build/client/_app/immutable/nodes/9.CEiUwDDg.js +0 -1
  821. package/build/client/_app/immutable/nodes/9.CEiUwDDg.js.br +0 -0
  822. package/build/client/_app/immutable/nodes/9.CEiUwDDg.js.gz +0 -0
  823. package/build/server/chunks/chunks/AllowanceMeter.js-C9jRsAGU.js +0 -42
  824. package/build/server/chunks/chunks/DecisionCard.js-u1VQ9s_v.js +0 -350
  825. package/build/server/chunks/chunks/DictateTextarea.js-BlEnOzcN.js +0 -85
  826. package/build/server/chunks/chunks/EtaLine.js-Pa4_VV6V.js +0 -79
  827. package/build/server/chunks/chunks/Icon.js-D7CY3joB.js +0 -129
  828. package/build/server/chunks/chunks/InsightsNav.js-BlxFBJfj.js +0 -22
  829. package/build/server/chunks/chunks/MicButton.js-BZSQAyuM.js +0 -336
  830. package/build/server/chunks/chunks/QuestionList.js-DglKezUe.js +0 -259
  831. package/build/server/chunks/chunks/SlotContent.js-YqZXXtRz.js +0 -1977
  832. package/build/server/chunks/chunks/StageTrack.js-BaorW-yk.js +0 -59
  833. package/build/server/chunks/chunks/TimeBar.js-k38rc7ZI.js +0 -32
  834. package/build/server/chunks/chunks/TimeLegend.js-BQVvgsvs.js +0 -29
  835. package/build/server/chunks/chunks/access.js-CS2pJasF.js +0 -816
  836. package/build/server/chunks/chunks/anchor.js-ByXDBfbi.js +0 -20
  837. package/build/server/chunks/chunks/arrow-down.js-DXDJc9EE.js +0 -18
  838. package/build/server/chunks/chunks/arrow-left.js-6Yey35CE.js +0 -18
  839. package/build/server/chunks/chunks/arrow-right.js-CfbPWRqu.js +0 -18
  840. package/build/server/chunks/chunks/arrow-up.js-AhghNbhW.js +0 -18
  841. package/build/server/chunks/chunks/bell.js-CAlv92RY.js +0 -143
  842. package/build/server/chunks/chunks/blocks.js-BL9jLCe-.js +0 -710
  843. package/build/server/chunks/chunks/bus.svelte.js-DRTptEhF.js +0 -9
  844. package/build/server/chunks/chunks/button.js-HeBqLheH.js +0 -7311
  845. package/build/server/chunks/chunks/chat.svelte.js-Cgdbtjbw.js +0 -537
  846. package/build/server/chunks/chunks/check.js-bmUhmMEz.js +0 -15
  847. package/build/server/chunks/chunks/checks.js-BnIxIaus.js +0 -175
  848. package/build/server/chunks/chunks/chevron-down.js-D75hVSIe.js +0 -15
  849. package/build/server/chunks/chunks/chevron-right.js-yhLg_GaH.js +0 -15
  850. package/build/server/chunks/chunks/circle-dashed.js-Bm3gZCXK.js +0 -24
  851. package/build/server/chunks/chunks/client.js-BUNengrw.js +0 -24
  852. package/build/server/chunks/chunks/clock.js-D7JTvRbC.js +0 -18
  853. package/build/server/chunks/chunks/compass.js-Tq6uiG8I.js +0 -23
  854. package/build/server/chunks/chunks/detail.js-CSjOmiVi.js +0 -133
  855. package/build/server/chunks/chunks/external-link.js-WxVF0xXO.js +0 -24
  856. package/build/server/chunks/chunks/file-text.js-CAo3vdqd.js +0 -26
  857. package/build/server/chunks/chunks/gauge.js-Dw9bgE72.js +0 -35
  858. package/build/server/chunks/chunks/git-pull-request.js-Cx1w8BQr.js +0 -20
  859. package/build/server/chunks/chunks/hammer.js-fp_Kidfj.js +0 -24
  860. package/build/server/chunks/chunks/hand.js-xkYPYJZj.js +0 -37
  861. package/build/server/chunks/chunks/harbour.js-xu7EfIHk.js +0 -113
  862. package/build/server/chunks/chunks/http.js-TzZuOtxn.js +0 -25
  863. package/build/server/chunks/chunks/http2.js-Cr9xuMRL.js +0 -26
  864. package/build/server/chunks/chunks/inbox.js-CW2sFmx9.js +0 -114
  865. package/build/server/chunks/chunks/inbox.svelte.js-OoKhjjWM.js +0 -134
  866. package/build/server/chunks/chunks/index-server.js-CtyUzIGY.js +0 -17
  867. package/build/server/chunks/chunks/index-server2.js-DMc-UvjC.js +0 -19
  868. package/build/server/chunks/chunks/index.js-Bn6j9diM.js +0 -1524
  869. package/build/server/chunks/chunks/index2.js-CXaRTuov.js +0 -46
  870. package/build/server/chunks/chunks/internal.js-Co-6PAQm.js +0 -146
  871. package/build/server/chunks/chunks/live.svelte.js-BRUTNc9D.js +0 -196
  872. package/build/server/chunks/chunks/loader-circle.js-IYRaUYWq.js +0 -16
  873. package/build/server/chunks/chunks/message-circle-question-mark.js-DwrMi0ty.js +0 -25
  874. package/build/server/chunks/chunks/message-square-text.js-N5uEmy8L.js +0 -25
  875. package/build/server/chunks/chunks/message-square.js-Hp-6BHgG.js +0 -22
  876. package/build/server/chunks/chunks/minus.js-bsfnwE-h.js +0 -15
  877. package/build/server/chunks/chunks/monitor-play.js-B7qbbPH6.js +0 -28
  878. package/build/server/chunks/chunks/preview.js-CVD-Kwks.js +0 -68
  879. package/build/server/chunks/chunks/prreview.js-C5XxDIu2.js +0 -85
  880. package/build/server/chunks/chunks/root.js-CQzYN4Pu.js +0 -3105
  881. package/build/server/chunks/chunks/runtime.js-C0n924wq.js +0 -13280
  882. package/build/server/chunks/chunks/scale.js-vP4G0lZM.js +0 -21
  883. package/build/server/chunks/chunks/shield-check.js-PJLnCKD9.js +0 -23
  884. package/build/server/chunks/chunks/spec.js-B0yI1XqG.js +0 -307
  885. package/build/server/chunks/chunks/split.js-BsCU24rQ.js +0 -20
  886. package/build/server/chunks/chunks/square-terminal.js-D5Z4Sl2-.js +0 -47
  887. package/build/server/chunks/chunks/tone.js-r2qFVrZC.js +0 -30
  888. package/build/server/chunks/chunks/trash.js-DYFbRevY.js +0 -46
  889. package/build/server/chunks/chunks/triangle-alert.js-DuE40HSU.js +0 -38
  890. package/build/server/chunks/chunks/utils.js-DTSGDHlH.js +0 -2956
  891. package/build/server/chunks/chunks/view.js-BtcLmKUY.js +0 -76
  892. package/build/server/chunks/chunks/view2.js-BdUXqNlY.js +0 -87
  893. package/build/server/chunks/chunks/views.js-B0wP-tuB.js +0 -137
  894. package/build/server/chunks/chunks/waypoints.js-D3HN7bje.js +0 -67
  895. package/build/server/chunks/chunks/x.js-tlds9Ooz.js +0 -18
  896. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-DNHG661Q.js +0 -93
  897. package/build/server/chunks/entries/endpoints/api/firstmate/chat/_server.ts.js-XBUQePMq.js +0 -74
  898. package/build/server/chunks/entries/endpoints/api/firstmate/commands/_server.ts.js-D1tzpRWy.js +0 -110
  899. package/build/server/chunks/entries/endpoints/api/firstmate/input/_server.ts.js-DqhQUZUA.js +0 -42
  900. package/build/server/chunks/entries/endpoints/api/firstmate/interrupt/_server.ts.js-LsZer0Bi.js +0 -35
  901. package/build/server/chunks/entries/endpoints/api/firstmate/messages/_server.ts.js-DQob0XkJ.js +0 -57
  902. package/build/server/chunks/entries/endpoints/api/firstmate/pick/_server.ts.js-DgFjtYYL.js +0 -45
  903. package/build/server/chunks/entries/endpoints/api/firstmate/start/_server.ts.js-DOoA4rRW.js +0 -35
  904. package/build/server/chunks/entries/endpoints/api/fleet/_server.ts.js-DZQsFY87.js +0 -27
  905. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-DuSzTlq5.js +0 -27
  906. package/build/server/chunks/entries/endpoints/api/inbox/_server.ts.js-C15XwPXH.js +0 -51
  907. package/build/server/chunks/entries/endpoints/api/insights/_server.ts.js--gavJO4f.js +0 -27
  908. package/build/server/chunks/entries/endpoints/api/plugins/_server.ts.js-CsTy_jT6.js +0 -27
  909. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/_server.ts.js-BWOcGtOU.js +0 -32
  910. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/commands/_server.ts.js-Kjwbc2wm.js +0 -41
  911. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/consent/_server.ts.js-BTIb8CUb.js +0 -53
  912. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/draft/_server.ts.js-Vh52yDJ9.js +0 -40
  913. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/file/_server.ts.js-LJDJLrpB.js +0 -63
  914. package/build/server/chunks/entries/endpoints/api/projects/_id_/passage/test/_server.ts.js-CdDBYH6K.js +0 -46
  915. package/build/server/chunks/entries/endpoints/api/services/_server.ts.js-DoElFmWK.js +0 -46
  916. package/build/server/chunks/entries/endpoints/api/slots/_server.ts.js-KiiPnPLF.js +0 -35
  917. package/build/server/chunks/entries/endpoints/api/specs/_id_/_server.ts.js-LMXTPr04.js +0 -59
  918. package/build/server/chunks/entries/endpoints/api/specs/_id_/build-request/_server.ts.js-bqjJGIjt.js +0 -47
  919. package/build/server/chunks/entries/endpoints/api/specs/_id_/comments/_comment_/_server.ts.js-DD1qQE9w.js +0 -36
  920. package/build/server/chunks/entries/endpoints/api/specs/_id_/comments/_server.ts.js-Bby1xkpH.js +0 -57
  921. package/build/server/chunks/entries/endpoints/api/specs/_id_/images/_name_/_server.ts.js-CPX8OLQa.js +0 -49
  922. package/build/server/chunks/entries/endpoints/api/specs/_id_/images/_server.ts.js-BjBV4SVl.js +0 -55
  923. package/build/server/chunks/entries/endpoints/api/specs/_id_/sent/_server.ts.js-BAqm0IW0.js +0 -36
  924. package/build/server/chunks/entries/endpoints/api/specs/_id_/turn/_server.ts.js-CNFIHA70.js +0 -82
  925. package/build/server/chunks/entries/endpoints/api/specs/_server.ts.js-Bix9PKKr.js +0 -40
  926. package/build/server/chunks/entries/endpoints/api/tasks/_id_/_server.ts.js-CT7cLDQU.js +0 -32
  927. package/build/server/chunks/entries/endpoints/api/tasks/_id_/artifacts/_...name_/_server.ts.js-zCsm8UJT.js +0 -51
  928. package/build/server/chunks/entries/endpoints/api/tasks/_id_/diff/_server.ts.js-ccyEPbua.js +0 -39
  929. package/build/server/chunks/entries/endpoints/api/tasks/_id_/output/_server.ts.js-eZPQtK6T.js +0 -84
  930. package/build/server/chunks/entries/endpoints/api/tasks/_id_/preview/_server.ts.js-CW76hSLW.js +0 -102
  931. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/_server.ts.js-Cjuig1dr.js +0 -34
  932. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/ask/_server.ts.js-C04r1OFS.js +0 -40
  933. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/check/_server.ts.js-Ca5VNJtJ.js +0 -39
  934. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/guide/_server.ts.js-BKLIKSUM.js +0 -39
  935. package/build/server/chunks/entries/endpoints/api/tasks/_id_/review/runs/_run_/stop/_server.ts.js-C-D9zXgK.js +0 -32
  936. package/build/server/chunks/entries/fallbacks/error.svelte.js-DlN_tCrh.js +0 -15
  937. package/build/server/chunks/entries/hooks.server.js-Cgq1_RNe.js +0 -40
  938. package/build/server/chunks/entries/pages/_layout.server.ts.js-B7EWMhm1.js +0 -20
  939. package/build/server/chunks/entries/pages/_layout.svelte.js-BJuZaosz.js +0 -10454
  940. package/build/server/chunks/entries/pages/_page.server.ts.js-CrjekE3C.js +0 -16
  941. package/build/server/chunks/entries/pages/_page.svelte.js-BI4c5H0n.js +0 -3699
  942. package/build/server/chunks/entries/pages/decisions/_page.server.ts.js-Olm_zS-k.js +0 -11
  943. package/build/server/chunks/entries/pages/decisions/_page.svelte.js-ClTz3O_K.js +0 -167
  944. package/build/server/chunks/entries/pages/harbour/_page.server.ts.js-CVhhNUGy.js +0 -20
  945. package/build/server/chunks/entries/pages/harbour/_page.svelte.js-43FRNSVK.js +0 -1346
  946. package/build/server/chunks/entries/pages/headroom/_page.server.ts.js-Bv8GukD1.js +0 -11
  947. package/build/server/chunks/entries/pages/headroom/_page.svelte.js-zmKQdAwy.js +0 -135
  948. package/build/server/chunks/entries/pages/inbox/_page.svelte.js-wTvAFPNM.js +0 -175
  949. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.server.ts.js-BJRmRxez.js +0 -15
  950. package/build/server/chunks/entries/pages/plugins/_plugin_/_page_/_page.svelte.js-DfAqJJ3i.js +0 -55
  951. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.server.ts.js-DawJ61h-.js +0 -15
  952. package/build/server/chunks/entries/pages/projects/_id_/_plugin_/_tab_/_page.svelte.js-B472Pugu.js +0 -66
  953. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.server.ts.js-Cm-4qkeb.js +0 -14
  954. package/build/server/chunks/entries/pages/projects/_id_/passage/_page.svelte.js-CWjEArXY.js +0 -394
  955. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.server.ts.js-DWNW8L5o.js +0 -15
  956. package/build/server/chunks/entries/pages/projects/_id_/passage/edit/_page.svelte.js-iHacn81K.js +0 -1859
  957. package/build/server/chunks/entries/pages/projects/_page.server.ts.js-BVDM5Frg.js +0 -37
  958. package/build/server/chunks/entries/pages/projects/_page.svelte.js-B_NQ-Wg3.js +0 -270
  959. package/build/server/chunks/entries/pages/spec/_page.server.ts.js-B3atEUDm.js +0 -31
  960. package/build/server/chunks/entries/pages/spec/_page.svelte.js-BJjweG9u.js +0 -1561
  961. package/build/server/chunks/entries/pages/tasks/_id_/_page.server.ts.js-BDQIO7Ft.js +0 -25
  962. package/build/server/chunks/entries/pages/tasks/_id_/_page.svelte.js-Dr2wwDJG.js +0 -2063
  963. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.server.ts.js-Bw-3fcQ6.js +0 -24
  964. package/build/server/chunks/entries/pages/tasks/_id_/doc/_page.svelte.js-DOyZ1QzI.js +0 -145
  965. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.server.ts.js-CJek9uLa.js +0 -15
  966. package/build/server/chunks/entries/pages/tasks/_id_/review/_page.svelte.js-BDaRELgE.js +0 -692
  967. package/build/server/chunks/entries/pages/time/_page.server.ts.js-An6F-Ydg.js +0 -11
  968. package/build/server/chunks/entries/pages/time/_page.svelte.js-CSXGxvVs.js +0 -107
  969. package/build/server/chunks/handler-BnRz5A8m.js +0 -1474
  970. package/build/server/chunks/index.js-C8djlQGs.js +0 -4296
  971. package/build/server/chunks/manifest.js-YAglwkb0.js +0 -434
  972. package/build/server/chunks/nodes/0.js-lkzICUiD.js +0 -32
  973. package/build/server/chunks/nodes/1.js-BJHI215Q.js +0 -9
  974. package/build/server/chunks/nodes/10.js-BWB-fD67.js +0 -33
  975. package/build/server/chunks/nodes/11.js-DWkXu85W.js +0 -33
  976. package/build/server/chunks/nodes/12.js-CKTx5eRx.js +0 -37
  977. package/build/server/chunks/nodes/13.js-C9YUj8Wf.js +0 -33
  978. package/build/server/chunks/nodes/14.js-CvfRHrCy.js +0 -33
  979. package/build/server/chunks/nodes/15.js-D_eEoMQb.js +0 -33
  980. package/build/server/chunks/nodes/16.js-BQhgpvij.js +0 -32
  981. package/build/server/chunks/nodes/2.js-C-3t-e-a.js +0 -32
  982. package/build/server/chunks/nodes/3.js-DgwKYi6C.js +0 -32
  983. package/build/server/chunks/nodes/4.js-DRDQ1cZ6.js +0 -34
  984. package/build/server/chunks/nodes/5.js-Bn5aoN6C.js +0 -32
  985. package/build/server/chunks/nodes/6.js-lazTWxVv.js +0 -9
  986. package/build/server/chunks/nodes/7.js-PUjlFfxr.js +0 -32
  987. package/build/server/chunks/nodes/8.js-DYPhaWV-.js +0 -34
  988. package/build/server/chunks/nodes/9.js-C2q_Jaiu.js +0 -32
  989. /package/build/client/_app/immutable/assets/{15.KLSHp5Yu.css → 20.KLSHp5Yu.css} +0 -0
  990. /package/build/client/_app/immutable/assets/{15.KLSHp5Yu.css.br → 20.KLSHp5Yu.css.br} +0 -0
  991. /package/build/client/_app/immutable/assets/{15.KLSHp5Yu.css.gz → 20.KLSHp5Yu.css.gz} +0 -0
  992. /package/build/client/_app/immutable/assets/{4.5dJKCkOT.css → 5.5dJKCkOT.css} +0 -0
  993. /package/build/client/_app/immutable/assets/{4.5dJKCkOT.css.br → 5.5dJKCkOT.css.br} +0 -0
  994. /package/build/client/_app/immutable/assets/{4.5dJKCkOT.css.gz → 5.5dJKCkOT.css.gz} +0 -0
  995. /package/build/client/_app/immutable/assets/{MicButton.Dga9zAug.css → DictateTextarea.Dga9zAug.css} +0 -0
  996. /package/build/client/_app/immutable/assets/{MicButton.Dga9zAug.css.br → DictateTextarea.Dga9zAug.css.br} +0 -0
  997. /package/build/client/_app/immutable/assets/{MicButton.Dga9zAug.css.gz → DictateTextarea.Dga9zAug.css.gz} +0 -0
@@ -1,3699 +0,0 @@
1
- import { af as head, aj as escape_html, ai as attr, ak as stringify, ah as attr_class, aa as ensure_array_like, _ as derived, ae as spread_props } from '../../chunks/index.js-Bn6j9diM.js';
2
- import { p as page } from '../../chunks/index2.js-CXaRTuov.js';
3
- import { l as live, c as currentHealth, a as currentFleet } from '../../chunks/live.svelte.js-BRUTNc9D.js';
4
- import { s as slots } from '../../chunks/slots.svelte.js-0Ejhe-hS.js';
5
- import { s as slotKey } from '../../chunks/keys.js-CdtCzv-v.js';
6
- import { h as harbour, b as headline } from '../../chunks/harbour.js-xu7EfIHk.js';
7
- import { f as firstmateChat, d as duration, p as pendingLabel, a as activitySummary } from '../../chunks/chat.svelte.js-Cgdbtjbw.js';
8
- import { a as ago } from '../../chunks/format.js-D3lWEg6U.js';
9
- import { m as matchBridgeCards } from '../../chunks/blocks.js-BL9jLCe-.js';
10
- import { R as ResizableRail, B as Blocks, S as SlotContent } from '../../chunks/SlotContent.js-YqZXXtRz.js';
11
- import { L as Loader_circle } from '../../chunks/loader-circle.js-IYRaUYWq.js';
12
- import { C as Chevron_right } from '../../chunks/chevron-right.js-yhLg_GaH.js';
13
- import '../../chunks/exports.js-BZBK1HC9.js';
14
- import '../../chunks/utils2.js-BQzn9ikS.js';
15
- import '../../chunks/utils.js-DTSGDHlH.js';
16
- import '../../chunks/root.js-CQzYN4Pu.js';
17
- import { M as MicButton, S as Square, e as editableTarget } from '../../chunks/MicButton.js-BZSQAyuM.js';
18
- import { h as html$2, c as composerBus } from '../../chunks/bus.svelte.js-DRTptEhF.js';
19
- import { A as Arrow_up } from '../../chunks/arrow-up.js-AhghNbhW.js';
20
- import { M as Message_circle_question_mark } from '../../chunks/message-circle-question-mark.js-DwrMi0ty.js';
21
- import { C as Check } from '../../chunks/check.js-bmUhmMEz.js';
22
- import { S as Square_terminal } from '../../chunks/square-terminal.js-D5Z4Sl2-.js';
23
- import { I as Icon } from '../../chunks/Icon.js-D7CY3joB.js';
24
- import '../../chunks/button.js-HeBqLheH.js';
25
- import { B as Bell, G as Gauge } from '../../chunks/gauge.js-Dw9bgE72.js';
26
- import { T as Triangle_alert } from '../../chunks/triangle-alert.js-DuE40HSU.js';
27
- import { H as Hand, A as Arrow_up_right } from '../../chunks/hand.js-xkYPYJZj.js';
28
- import { d as duration$1, t as total, s as sumSplits } from '../../chunks/insights.js-CzzfyHGp.js';
29
- import { C as ChecksStrip, E as EtaLine } from '../../chunks/EtaLine.js-Pa4_VV6V.js';
30
- import { S as StageTrack } from '../../chunks/StageTrack.js-BaorW-yk.js';
31
- import { A as AllowanceMeter } from '../../chunks/AllowanceMeter.js-C9jRsAGU.js';
32
- import { T as TimeBar } from '../../chunks/TimeBar.js-k38rc7ZI.js';
33
- import { i as inbox } from '../../chunks/inbox.svelte.js-OoKhjjWM.js';
34
- import { c as awaitsAnswer } from '../../chunks/inbox.js-CW2sFmx9.js';
35
- import { D as DecisionCard, O as Octagon_alert } from '../../chunks/DecisionCard.js-u1VQ9s_v.js';
36
- import { A as Arrow_right } from '../../chunks/arrow-right.js-CfbPWRqu.js';
37
- import { a as showsChecks } from '../../chunks/checks.js-BnIxIaus.js';
38
- import { X as X$1 } from '../../chunks/x.js-tlds9Ooz.js';
39
- import { S as Scale } from '../../chunks/scale.js-vP4G0lZM.js';
40
- import { M as Message_square } from '../../chunks/message-square.js-Hp-6BHgG.js';
41
- import { G as Git_pull_request } from '../../chunks/git-pull-request.js-Cx1w8BQr.js';
42
- import { M as Message_square_text } from '../../chunks/message-square-text.js-N5uEmy8L.js';
43
- import { A as Anchor } from '../../chunks/anchor.js-ByXDBfbi.js';
44
- import '../../chunks/messages.js-CFyGKoqq.js';
45
- import 'yaml';
46
- import '../../chunks/external-link.js-WxVF0xXO.js';
47
- import '../../chunks/index-server2.js-DMc-UvjC.js';
48
- import '../../chunks/file-text.js-CAo3vdqd.js';
49
- import '../../chunks/split.js-BsCU24rQ.js';
50
- import '../../chunks/chevron-down.js-D75hVSIe.js';
51
- import '../../chunks/circle-dashed.js-Bm3gZCXK.js';
52
- import '../../chunks/index-server.js-CtyUzIGY.js';
53
- import '../../chunks/clock.js-D7JTvRbC.js';
54
- import '../../chunks/tone.js-r2qFVrZC.js';
55
- import '../../chunks/monitor-play.js-B7qbbPH6.js';
56
- import '../../chunks/hammer.js-fp_Kidfj.js';
57
-
58
- /*! @license DOMPurify 3.4.17 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.17/LICENSE */
59
- function _arrayLikeToArray(r, a) {
60
- (null == a || a > r.length) && (a = r.length);
61
- for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
62
- return n;
63
- }
64
- function _arrayWithHoles(r) {
65
- if (Array.isArray(r)) return r;
66
- }
67
- function _iterableToArrayLimit(r, l) {
68
- var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
69
- if (null != t) {
70
- var e, n, i, u, a = [], f = true, o = false;
71
- try {
72
- if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
73
- } catch (r) {
74
- o = true, n = r;
75
- } finally {
76
- try {
77
- if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
78
- } finally {
79
- if (o) throw n;
80
- }
81
- }
82
- return a;
83
- }
84
- }
85
- function _nonIterableRest() {
86
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
87
- }
88
- /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
89
- function _slicedToArray(r, e) {
90
- return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
91
- }
92
- function _unsupportedIterableToArray(r, a) {
93
- if (r) {
94
- if ("string" == typeof r) return _arrayLikeToArray(r, a);
95
- var t = {}.toString.call(r).slice(8, -1);
96
- return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
97
- }
98
- }
99
- const entries = Object.entries;
100
- const setPrototypeOf = Object.setPrototypeOf;
101
- const isFrozen = Object.isFrozen;
102
- const getPrototypeOf = Object.getPrototypeOf;
103
- const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
104
- let freeze = Object.freeze;
105
- let seal = Object.seal;
106
- let create = Object.create;
107
- let _ref = typeof Reflect !== "undefined" && Reflect;
108
- let apply = _ref.apply;
109
- let construct = _ref.construct;
110
- if (!freeze) freeze = function freeze(x) {
111
- return x;
112
- };
113
- if (!seal) seal = function seal(x) {
114
- return x;
115
- };
116
- if (!apply) apply = function apply(func, thisArg) {
117
- for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];
118
- return func.apply(thisArg, args);
119
- };
120
- if (!construct) construct = function construct(Func) {
121
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
122
- return new Func(...args);
123
- };
124
- const arrayForEach = unapply(Array.prototype.forEach);
125
- const arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
126
- const arrayPop = unapply(Array.prototype.pop);
127
- const arrayPush = unapply(Array.prototype.push);
128
- const arraySlice = unapply(Array.prototype.slice);
129
- const arraySplice = unapply(Array.prototype.splice);
130
- const arrayIsArray = Array.isArray;
131
- const setCreate = unconstruct(Set);
132
- const setAdd = unapply(Set.prototype.add);
133
- const setHas = unapply(Set.prototype.has);
134
- const stringToLowerCase = unapply(String.prototype.toLowerCase);
135
- const stringToString = unapply(String.prototype.toString);
136
- const stringMatch = unapply(String.prototype.match);
137
- const stringReplace = unapply(String.prototype.replace);
138
- const stringIndexOf = unapply(String.prototype.indexOf);
139
- const stringTrim = unapply(String.prototype.trim);
140
- const numberToString = unapply(Number.prototype.toString);
141
- const booleanToString = unapply(Boolean.prototype.toString);
142
- const bigintToString = typeof BigInt === "undefined" ? null : unapply(BigInt.prototype.toString);
143
- const symbolToString = typeof Symbol === "undefined" ? null : unapply(Symbol.prototype.toString);
144
- const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
145
- const objectToString = unapply(Object.prototype.toString);
146
- const regExpTest = unapply(RegExp.prototype.test);
147
- const typeErrorCreate = unconstruct(TypeError);
148
- /**
149
- * Creates a new function that calls the given function with a specified thisArg and arguments.
150
- *
151
- * @param func - The function to be wrapped and called.
152
- * @returns A new function that calls the given function with a specified thisArg and arguments.
153
- */
154
- function unapply(func) {
155
- return function(thisArg) {
156
- if (thisArg instanceof RegExp) thisArg.lastIndex = 0;
157
- for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];
158
- return apply(func, thisArg, args);
159
- };
160
- }
161
- /**
162
- * Creates a new function that constructs an instance of the given constructor function with the provided arguments.
163
- *
164
- * @param func - The constructor function to be wrapped and called.
165
- * @returns A new function that constructs an instance of the given constructor function with the provided arguments.
166
- */
167
- function unconstruct(Func) {
168
- return function() {
169
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];
170
- return construct(Func, args);
171
- };
172
- }
173
- /**
174
- * Add properties to a lookup table
175
- *
176
- * @param set - The set to which elements will be added.
177
- * @param array - The array containing elements to be added to the set.
178
- * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.
179
- * @returns The modified set with added elements.
180
- */
181
- function addToSet(set, array) {
182
- let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
183
- if (setPrototypeOf) setPrototypeOf(set, null);
184
- if (!arrayIsArray(array)) return set;
185
- let l = array.length;
186
- while (l--) {
187
- let element = array[l];
188
- if (typeof element === "string") {
189
- const lcElement = transformCaseFunc(element);
190
- if (lcElement !== element) {
191
- if (!isFrozen(array)) array[l] = lcElement;
192
- element = lcElement;
193
- }
194
- }
195
- set[element] = true;
196
- }
197
- return set;
198
- }
199
- /**
200
- * Clean up an array to harden against CSPP
201
- *
202
- * @param array - The array to be cleaned.
203
- * @returns The cleaned version of the array
204
- */
205
- function cleanArray(array) {
206
- for (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;
207
- return array;
208
- }
209
- /**
210
- * Shallow clone an object
211
- *
212
- * @param object - The object to be cloned.
213
- * @returns A new object that copies the original.
214
- */
215
- function clone(object) {
216
- const newObject = create(null);
217
- for (const _ref2 of entries(object)) {
218
- var _ref3 = _slicedToArray(_ref2, 2);
219
- const property = _ref3[0];
220
- const value = _ref3[1];
221
- if (objectHasOwnProperty(object, property)) {
222
- if (arrayIsArray(value)) newObject[property] = cleanArray(value);
223
- else if (value && typeof value === "object" && value.constructor === Object) newObject[property] = clone(value);
224
- else newObject[property] = value;
225
- }
226
- }
227
- return newObject;
228
- }
229
- /**
230
- * Convert non-node values into strings without depending on direct property access.
231
- *
232
- * @param value - The value to stringify.
233
- * @returns A string representation of the provided value.
234
- */
235
- function stringifyValue(value) {
236
- switch (typeof value) {
237
- case "string": return value;
238
- case "number": return numberToString(value);
239
- case "boolean": return booleanToString(value);
240
- case "bigint": return bigintToString ? bigintToString(value) : "0";
241
- case "symbol": return symbolToString ? symbolToString(value) : "Symbol()";
242
- case "undefined": return objectToString(value);
243
- case "function":
244
- case "object": {
245
- if (value === null) return objectToString(value);
246
- const valueAsRecord = value;
247
- const valueToString = lookupGetter(valueAsRecord, "toString");
248
- if (typeof valueToString === "function") {
249
- const stringified = valueToString(valueAsRecord);
250
- return typeof stringified === "string" ? stringified : objectToString(stringified);
251
- }
252
- return objectToString(value);
253
- }
254
- default: return objectToString(value);
255
- }
256
- }
257
- /**
258
- * This method automatically checks if the prop is function or getter and behaves accordingly.
259
- *
260
- * @param object - The object to look up the getter function in its prototype chain.
261
- * @param prop - The property name for which to find the getter function.
262
- * @returns The getter function found in the prototype chain or a fallback function.
263
- */
264
- function lookupGetter(object, prop) {
265
- while (object !== null) {
266
- const desc = getOwnPropertyDescriptor(object, prop);
267
- if (desc) {
268
- if (desc.get) return unapply(desc.get);
269
- if (typeof desc.value === "function") return unapply(desc.value);
270
- }
271
- object = getPrototypeOf(object);
272
- }
273
- function fallbackValue() {
274
- return null;
275
- }
276
- return fallbackValue;
277
- }
278
- /**
279
- * Like lookupGetter, but for accessor properties only, and returns null
280
- * instead of a null-returning fallback when no getter exists on the chain.
281
- * Lets a caller fall back to a direct property read in environments that
282
- * lack the getter, where a fallback returning null would be indistinguishable
283
- * from a legitimate null value (e.g. namespaceURI of a no-namespace element).
284
- *
285
- * @param object - The object (usually a prototype) to start the lookup at.
286
- * @param prop - The accessor property name.
287
- * @returns The unapplied getter, or null if none was found.
288
- */
289
- function lookupAccessor(object, prop) {
290
- while (object !== null) {
291
- const desc = getOwnPropertyDescriptor(object, prop);
292
- if (desc) return desc.get ? unapply(desc.get) : null;
293
- object = getPrototypeOf(object);
294
- }
295
- return null;
296
- }
297
- function isRegex(value) {
298
- try {
299
- regExpTest(value, "");
300
- return true;
301
- } catch (_unused) {
302
- return false;
303
- }
304
- }
305
- const html$1 = freeze([
306
- "a",
307
- "abbr",
308
- "acronym",
309
- "address",
310
- "area",
311
- "article",
312
- "aside",
313
- "audio",
314
- "b",
315
- "bdi",
316
- "bdo",
317
- "big",
318
- "blink",
319
- "blockquote",
320
- "body",
321
- "br",
322
- "button",
323
- "canvas",
324
- "caption",
325
- "center",
326
- "cite",
327
- "code",
328
- "col",
329
- "colgroup",
330
- "content",
331
- "data",
332
- "datalist",
333
- "dd",
334
- "decorator",
335
- "del",
336
- "details",
337
- "dfn",
338
- "dialog",
339
- "dir",
340
- "div",
341
- "dl",
342
- "dt",
343
- "element",
344
- "em",
345
- "fieldset",
346
- "figcaption",
347
- "figure",
348
- "font",
349
- "footer",
350
- "form",
351
- "h1",
352
- "h2",
353
- "h3",
354
- "h4",
355
- "h5",
356
- "h6",
357
- "head",
358
- "header",
359
- "hgroup",
360
- "hr",
361
- "html",
362
- "i",
363
- "img",
364
- "input",
365
- "ins",
366
- "kbd",
367
- "label",
368
- "legend",
369
- "li",
370
- "main",
371
- "map",
372
- "mark",
373
- "marquee",
374
- "menu",
375
- "menuitem",
376
- "meter",
377
- "nav",
378
- "nobr",
379
- "ol",
380
- "optgroup",
381
- "option",
382
- "output",
383
- "p",
384
- "picture",
385
- "pre",
386
- "progress",
387
- "q",
388
- "rp",
389
- "rt",
390
- "ruby",
391
- "s",
392
- "samp",
393
- "search",
394
- "section",
395
- "select",
396
- "shadow",
397
- "slot",
398
- "small",
399
- "source",
400
- "spacer",
401
- "span",
402
- "strike",
403
- "strong",
404
- "style",
405
- "sub",
406
- "summary",
407
- "sup",
408
- "table",
409
- "tbody",
410
- "td",
411
- "template",
412
- "textarea",
413
- "tfoot",
414
- "th",
415
- "thead",
416
- "time",
417
- "tr",
418
- "track",
419
- "tt",
420
- "u",
421
- "ul",
422
- "var",
423
- "video",
424
- "wbr"
425
- ]);
426
- const svg$1 = freeze([
427
- "svg",
428
- "a",
429
- "altglyph",
430
- "altglyphdef",
431
- "altglyphitem",
432
- "animatecolor",
433
- "animatemotion",
434
- "animatetransform",
435
- "circle",
436
- "clippath",
437
- "defs",
438
- "desc",
439
- "ellipse",
440
- "enterkeyhint",
441
- "exportparts",
442
- "filter",
443
- "font",
444
- "g",
445
- "glyph",
446
- "glyphref",
447
- "hkern",
448
- "image",
449
- "inputmode",
450
- "line",
451
- "lineargradient",
452
- "marker",
453
- "mask",
454
- "metadata",
455
- "mpath",
456
- "part",
457
- "path",
458
- "pattern",
459
- "polygon",
460
- "polyline",
461
- "radialgradient",
462
- "rect",
463
- "stop",
464
- "style",
465
- "switch",
466
- "symbol",
467
- "text",
468
- "textpath",
469
- "title",
470
- "tref",
471
- "tspan",
472
- "view",
473
- "vkern"
474
- ]);
475
- const svgFilters = freeze([
476
- "feBlend",
477
- "feColorMatrix",
478
- "feComponentTransfer",
479
- "feComposite",
480
- "feConvolveMatrix",
481
- "feDiffuseLighting",
482
- "feDisplacementMap",
483
- "feDistantLight",
484
- "feDropShadow",
485
- "feFlood",
486
- "feFuncA",
487
- "feFuncB",
488
- "feFuncG",
489
- "feFuncR",
490
- "feGaussianBlur",
491
- "feImage",
492
- "feMerge",
493
- "feMergeNode",
494
- "feMorphology",
495
- "feOffset",
496
- "fePointLight",
497
- "feSpecularLighting",
498
- "feSpotLight",
499
- "feTile",
500
- "feTurbulence"
501
- ]);
502
- const svgDisallowed = freeze([
503
- "animate",
504
- "color-profile",
505
- "cursor",
506
- "discard",
507
- "font-face",
508
- "font-face-format",
509
- "font-face-name",
510
- "font-face-src",
511
- "font-face-uri",
512
- "foreignobject",
513
- "hatch",
514
- "hatchpath",
515
- "mesh",
516
- "meshgradient",
517
- "meshpatch",
518
- "meshrow",
519
- "missing-glyph",
520
- "script",
521
- "set",
522
- "solidcolor",
523
- "unknown",
524
- "use"
525
- ]);
526
- const mathMl$1 = freeze([
527
- "math",
528
- "menclose",
529
- "merror",
530
- "mfenced",
531
- "mfrac",
532
- "mglyph",
533
- "mi",
534
- "mlabeledtr",
535
- "mmultiscripts",
536
- "mn",
537
- "mo",
538
- "mover",
539
- "mpadded",
540
- "mphantom",
541
- "mroot",
542
- "mrow",
543
- "ms",
544
- "mspace",
545
- "msqrt",
546
- "mstyle",
547
- "msub",
548
- "msup",
549
- "msubsup",
550
- "mtable",
551
- "mtd",
552
- "mtext",
553
- "mtr",
554
- "munder",
555
- "munderover",
556
- "mprescripts"
557
- ]);
558
- const mathMlDisallowed = freeze([
559
- "maction",
560
- "maligngroup",
561
- "malignmark",
562
- "mlongdiv",
563
- "mscarries",
564
- "mscarry",
565
- "msgroup",
566
- "mstack",
567
- "msline",
568
- "msrow",
569
- "semantics",
570
- "annotation",
571
- "annotation-xml",
572
- "mprescripts",
573
- "none"
574
- ]);
575
- const text = freeze(["#text"]);
576
- const html = freeze([
577
- "accept",
578
- "action",
579
- "align",
580
- "alt",
581
- "autocapitalize",
582
- "autocomplete",
583
- "autopictureinpicture",
584
- "autoplay",
585
- "background",
586
- "bgcolor",
587
- "border",
588
- "capture",
589
- "cellpadding",
590
- "cellspacing",
591
- "checked",
592
- "cite",
593
- "class",
594
- "clear",
595
- "color",
596
- "cols",
597
- "colspan",
598
- "command",
599
- "commandfor",
600
- "controls",
601
- "controlslist",
602
- "coords",
603
- "crossorigin",
604
- "datetime",
605
- "decoding",
606
- "default",
607
- "dir",
608
- "disabled",
609
- "disablepictureinpicture",
610
- "disableremoteplayback",
611
- "download",
612
- "draggable",
613
- "enctype",
614
- "enterkeyhint",
615
- "exportparts",
616
- "face",
617
- "for",
618
- "headers",
619
- "height",
620
- "hidden",
621
- "high",
622
- "href",
623
- "hreflang",
624
- "id",
625
- "inert",
626
- "inputmode",
627
- "integrity",
628
- "ismap",
629
- "kind",
630
- "label",
631
- "lang",
632
- "list",
633
- "loading",
634
- "loop",
635
- "low",
636
- "max",
637
- "maxlength",
638
- "media",
639
- "method",
640
- "min",
641
- "minlength",
642
- "multiple",
643
- "muted",
644
- "name",
645
- "nonce",
646
- "noshade",
647
- "novalidate",
648
- "nowrap",
649
- "open",
650
- "optimum",
651
- "part",
652
- "pattern",
653
- "placeholder",
654
- "playsinline",
655
- "popover",
656
- "popovertarget",
657
- "popovertargetaction",
658
- "poster",
659
- "preload",
660
- "pubdate",
661
- "radiogroup",
662
- "readonly",
663
- "rel",
664
- "required",
665
- "rev",
666
- "reversed",
667
- "role",
668
- "rows",
669
- "rowspan",
670
- "spellcheck",
671
- "scope",
672
- "selected",
673
- "shape",
674
- "size",
675
- "sizes",
676
- "slot",
677
- "span",
678
- "srclang",
679
- "start",
680
- "src",
681
- "srcset",
682
- "step",
683
- "style",
684
- "summary",
685
- "tabindex",
686
- "title",
687
- "translate",
688
- "type",
689
- "usemap",
690
- "valign",
691
- "value",
692
- "width",
693
- "wrap",
694
- "xmlns"
695
- ]);
696
- const svg = freeze([
697
- "accent-height",
698
- "accumulate",
699
- "additive",
700
- "alignment-baseline",
701
- "amplitude",
702
- "ascent",
703
- "attributename",
704
- "attributetype",
705
- "azimuth",
706
- "basefrequency",
707
- "baseline-shift",
708
- "begin",
709
- "bias",
710
- "by",
711
- "class",
712
- "clip",
713
- "clippathunits",
714
- "clip-path",
715
- "clip-rule",
716
- "color",
717
- "color-interpolation",
718
- "color-interpolation-filters",
719
- "color-profile",
720
- "color-rendering",
721
- "cx",
722
- "cy",
723
- "d",
724
- "dx",
725
- "dy",
726
- "diffuseconstant",
727
- "direction",
728
- "display",
729
- "divisor",
730
- "dominant-baseline",
731
- "dur",
732
- "edgemode",
733
- "elevation",
734
- "end",
735
- "exponent",
736
- "fill",
737
- "fill-opacity",
738
- "fill-rule",
739
- "filter",
740
- "filterunits",
741
- "flood-color",
742
- "flood-opacity",
743
- "font-family",
744
- "font-size",
745
- "font-size-adjust",
746
- "font-stretch",
747
- "font-style",
748
- "font-variant",
749
- "font-weight",
750
- "fx",
751
- "fy",
752
- "g1",
753
- "g2",
754
- "glyph-name",
755
- "glyphref",
756
- "gradientunits",
757
- "gradienttransform",
758
- "height",
759
- "href",
760
- "id",
761
- "image-rendering",
762
- "in",
763
- "in2",
764
- "intercept",
765
- "k",
766
- "k1",
767
- "k2",
768
- "k3",
769
- "k4",
770
- "kerning",
771
- "keypoints",
772
- "keysplines",
773
- "keytimes",
774
- "lang",
775
- "lengthadjust",
776
- "letter-spacing",
777
- "kernelmatrix",
778
- "kernelunitlength",
779
- "lighting-color",
780
- "local",
781
- "marker-end",
782
- "marker-mid",
783
- "marker-start",
784
- "markerheight",
785
- "markerunits",
786
- "markerwidth",
787
- "maskcontentunits",
788
- "maskunits",
789
- "max",
790
- "mask",
791
- "mask-type",
792
- "media",
793
- "method",
794
- "mode",
795
- "min",
796
- "name",
797
- "numoctaves",
798
- "offset",
799
- "operator",
800
- "opacity",
801
- "order",
802
- "orient",
803
- "orientation",
804
- "origin",
805
- "overflow",
806
- "paint-order",
807
- "path",
808
- "pathlength",
809
- "patterncontentunits",
810
- "patterntransform",
811
- "patternunits",
812
- "pointer-events",
813
- "points",
814
- "preservealpha",
815
- "preserveaspectratio",
816
- "primitiveunits",
817
- "r",
818
- "rx",
819
- "ry",
820
- "radius",
821
- "refx",
822
- "refy",
823
- "repeatcount",
824
- "repeatdur",
825
- "restart",
826
- "result",
827
- "rotate",
828
- "scale",
829
- "seed",
830
- "shape-rendering",
831
- "slope",
832
- "specularconstant",
833
- "specularexponent",
834
- "spreadmethod",
835
- "startoffset",
836
- "stddeviation",
837
- "stitchtiles",
838
- "stop-color",
839
- "stop-opacity",
840
- "stroke-dasharray",
841
- "stroke-dashoffset",
842
- "stroke-linecap",
843
- "stroke-linejoin",
844
- "stroke-miterlimit",
845
- "stroke-opacity",
846
- "stroke",
847
- "stroke-width",
848
- "style",
849
- "surfacescale",
850
- "systemlanguage",
851
- "tabindex",
852
- "tablevalues",
853
- "targetx",
854
- "targety",
855
- "transform",
856
- "transform-origin",
857
- "text-anchor",
858
- "text-decoration",
859
- "text-orientation",
860
- "text-rendering",
861
- "textlength",
862
- "type",
863
- "u1",
864
- "u2",
865
- "unicode",
866
- "values",
867
- "vector-effect",
868
- "viewbox",
869
- "visibility",
870
- "version",
871
- "vert-adv-y",
872
- "vert-origin-x",
873
- "vert-origin-y",
874
- "width",
875
- "word-spacing",
876
- "wrap",
877
- "writing-mode",
878
- "xchannelselector",
879
- "ychannelselector",
880
- "x",
881
- "x1",
882
- "x2",
883
- "xmlns",
884
- "y",
885
- "y1",
886
- "y2",
887
- "z",
888
- "zoomandpan"
889
- ]);
890
- const mathMl = freeze([
891
- "accent",
892
- "accentunder",
893
- "align",
894
- "bevelled",
895
- "close",
896
- "columnalign",
897
- "columnlines",
898
- "columnspacing",
899
- "columnspan",
900
- "denomalign",
901
- "depth",
902
- "dir",
903
- "display",
904
- "displaystyle",
905
- "encoding",
906
- "fence",
907
- "frame",
908
- "height",
909
- "href",
910
- "id",
911
- "largeop",
912
- "length",
913
- "linethickness",
914
- "lquote",
915
- "lspace",
916
- "mathbackground",
917
- "mathcolor",
918
- "mathsize",
919
- "mathvariant",
920
- "maxsize",
921
- "minsize",
922
- "movablelimits",
923
- "notation",
924
- "numalign",
925
- "open",
926
- "rowalign",
927
- "rowlines",
928
- "rowspacing",
929
- "rowspan",
930
- "rspace",
931
- "rquote",
932
- "scriptlevel",
933
- "scriptminsize",
934
- "scriptsizemultiplier",
935
- "selection",
936
- "separator",
937
- "separators",
938
- "stretchy",
939
- "subscriptshift",
940
- "supscriptshift",
941
- "symmetric",
942
- "voffset",
943
- "width",
944
- "xmlns"
945
- ]);
946
- const xml = freeze([
947
- "xlink:href",
948
- "xml:id",
949
- "xlink:title",
950
- "xml:space",
951
- "xmlns:xlink"
952
- ]);
953
- const MUSTACHE_EXPR = seal(/{{[\w\W]*|^[\w\W]*}}/g);
954
- const ERB_EXPR = seal(/<%[\w\W]*|^[\w\W]*%>/g);
955
- const TMPLIT_EXPR = seal(/\${[\w\W]*/g);
956
- const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
957
- const ARIA_ATTR = seal(/^aria-[\-\w]+$/);
958
- const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
959
- const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
960
- const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
961
- const DOCTYPE_NAME = seal(/^html$/i);
962
- const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
963
- const ELEMENT_MARKUP_PROBE = seal(/<[/\w!]/g);
964
- const COMMENT_MARKUP_PROBE = seal(/<[/\w]/g);
965
- const FALLBACK_TAG_CLOSE = seal(/<\/no(script|embed|frames)/i);
966
- const SELF_CLOSING_TAG = seal(/\/>/i);
967
- const NODE_TYPE = {
968
- element: 1,
969
- attribute: 2,
970
- text: 3,
971
- cdataSection: 4,
972
- entityReference: 5,
973
- entityNode: 6,
974
- processingInstruction: 7,
975
- comment: 8,
976
- document: 9,
977
- documentType: 10,
978
- documentFragment: 11,
979
- notation: 12
980
- };
981
- const LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, [
982
- "style",
983
- "script",
984
- "xmp",
985
- "iframe",
986
- "noembed",
987
- "noframes",
988
- "plaintext",
989
- "noscript"
990
- ]));
991
- const getGlobal = function getGlobal() {
992
- return typeof window === "undefined" ? null : window;
993
- };
994
- /**
995
- * Creates a no-op policy for internal use only.
996
- * Don't export this function outside this module!
997
- * @param trustedTypes The policy factory.
998
- * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
999
- * @return The policy created (or null, if Trusted Types
1000
- * are not supported or creating the policy failed).
1001
- */
1002
- const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
1003
- if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") return null;
1004
- let suffix = null;
1005
- const ATTR_NAME = "data-tt-policy-suffix";
1006
- if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);
1007
- const policyName = "dompurify" + (suffix ? "#" + suffix : "");
1008
- try {
1009
- return trustedTypes.createPolicy(policyName, {
1010
- createHTML(html) {
1011
- return html;
1012
- },
1013
- createScriptURL(scriptUrl) {
1014
- return scriptUrl;
1015
- }
1016
- });
1017
- } catch (_) {
1018
- console.warn("TrustedTypes policy " + policyName + " could not be created.");
1019
- return null;
1020
- }
1021
- };
1022
- const _createHooksMap = function _createHooksMap() {
1023
- return {
1024
- afterSanitizeAttributes: [],
1025
- afterSanitizeElements: [],
1026
- afterSanitizeShadowDOM: [],
1027
- beforeSanitizeAttributes: [],
1028
- beforeSanitizeElements: [],
1029
- beforeSanitizeShadowDOM: [],
1030
- uponSanitizeAttribute: [],
1031
- uponSanitizeElement: [],
1032
- uponSanitizeShadowNode: []
1033
- };
1034
- };
1035
- /**
1036
- * Resolve a set-valued configuration option: a fresh set built from
1037
- * cfg[key] when it is an own array property (seeded with a clone of
1038
- * options.base when given, case-normalized via options.transform),
1039
- * the fallback set otherwise.
1040
- *
1041
- * @param cfg the cloned, prototype-free configuration object
1042
- * @param key the configuration property to read
1043
- * @param fallback the set to use when the option is absent or not an array
1044
- * @param options transform and optional base set to merge into
1045
- * @returns the resolved set
1046
- */
1047
- const _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {
1048
- return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;
1049
- };
1050
- /**
1051
- * Resolve an object-valued configuration option: a prototype-free clone
1052
- * of cfg[key] when it is an own, truthy object property, else a fresh
1053
- * fallback built by makeFallback (fresh on every parse, so a previous
1054
- * parse can never leak state into the next one).
1055
- *
1056
- * @param cfg the cloned, prototype-free configuration object
1057
- * @param key the configuration property to read
1058
- * @param makeFallback builds the fallback value when the option is absent
1059
- * @returns the resolved object
1060
- */
1061
- const _resolveObjectOption = function _resolveObjectOption(cfg, key, makeFallback) {
1062
- const value = objectHasOwnProperty(cfg, key) ? cfg[key] : void 0;
1063
- return value && typeof value === "object" ? clone(value) : makeFallback();
1064
- };
1065
- function createDOMPurify() {
1066
- let window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
1067
- const DOMPurify = (root) => createDOMPurify(root);
1068
- DOMPurify.version = "3.4.17";
1069
- DOMPurify.removed = [];
1070
- if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
1071
- DOMPurify.isSupported = false;
1072
- return DOMPurify;
1073
- }
1074
- let document = window.document;
1075
- const originalDocument = document;
1076
- const currentScript = originalDocument.currentScript;
1077
- window.DocumentFragment;
1078
- const HTMLTemplateElement = window.HTMLTemplateElement, Node = window.Node, Element = window.Element, NodeFilter = window.NodeFilter;
1079
- window.NamedNodeMap === void 0 && (window.NamedNodeMap || window.MozNamedAttrMap);
1080
- window.HTMLFormElement;
1081
- const DOMParser = window.DOMParser, trustedTypes = window.trustedTypes;
1082
- const ElementPrototype = Element.prototype;
1083
- const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
1084
- const remove = lookupGetter(ElementPrototype, "remove");
1085
- const removeAttributeNode = lookupGetter(ElementPrototype, "removeAttributeNode");
1086
- const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
1087
- const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
1088
- const getParentNode = lookupGetter(ElementPrototype, "parentNode");
1089
- const getShadowRoot = lookupGetter(ElementPrototype, "shadowRoot");
1090
- const getAttributes = lookupGetter(ElementPrototype, "attributes");
1091
- const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, "nodeType") : null;
1092
- const getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, "nodeName") : null;
1093
- const getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, "ownerDocument") : null;
1094
- const _readNodeType = function _readNodeType(node) {
1095
- return getNodeType ? getNodeType(node) : node.nodeType;
1096
- };
1097
- const _readNodeName = function _readNodeName(node) {
1098
- return getNodeName ? getNodeName(node) : node.nodeName;
1099
- };
1100
- const getNamespaceURI = lookupAccessor(ElementPrototype, "namespaceURI");
1101
- const _readNamespaceURI = function _readNamespaceURI(element) {
1102
- return getNamespaceURI ? getNamespaceURI(element) : element.namespaceURI;
1103
- };
1104
- if (typeof HTMLTemplateElement === "function") {
1105
- const template = document.createElement("template");
1106
- if (template.content && template.content.ownerDocument) document = template.content.ownerDocument;
1107
- }
1108
- let trustedTypesPolicy;
1109
- let emptyHTML = "";
1110
- let defaultTrustedTypesPolicy;
1111
- let defaultTrustedTypesPolicyResolved = false;
1112
- let IN_TRUSTED_TYPES_POLICY = 0;
1113
- const _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {
1114
- if (IN_TRUSTED_TYPES_POLICY > 0) throw typeErrorCreate("A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the \"DOMPurify and Trusted Types\" section of the README.");
1115
- };
1116
- const _createTrustedHTML = function _createTrustedHTML(html) {
1117
- _assertNotInTrustedTypesPolicy();
1118
- IN_TRUSTED_TYPES_POLICY++;
1119
- try {
1120
- return trustedTypesPolicy.createHTML(html);
1121
- } finally {
1122
- IN_TRUSTED_TYPES_POLICY--;
1123
- }
1124
- };
1125
- const _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {
1126
- _assertNotInTrustedTypesPolicy();
1127
- IN_TRUSTED_TYPES_POLICY++;
1128
- try {
1129
- return trustedTypesPolicy.createScriptURL(scriptUrl);
1130
- } finally {
1131
- IN_TRUSTED_TYPES_POLICY--;
1132
- }
1133
- };
1134
- const _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {
1135
- if (!defaultTrustedTypesPolicyResolved) {
1136
- defaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
1137
- defaultTrustedTypesPolicyResolved = true;
1138
- }
1139
- return defaultTrustedTypesPolicy;
1140
- };
1141
- const _document = document, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;
1142
- const importNode = originalDocument.importNode;
1143
- let hooks = _createHooksMap();
1144
- /**
1145
- * Expose whether this browser supports running the full DOMPurify.
1146
- */
1147
- DOMPurify.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
1148
- const MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE, CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;
1149
- let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;
1150
- /**
1151
- * We consider the elements and attributes below to be safe. Ideally
1152
- * don't add any new ones but feel free to remove unwanted ones.
1153
- */
1154
- let ALLOWED_TAGS = null;
1155
- const DEFAULT_ALLOWED_TAGS = addToSet({}, [
1156
- ...html$1,
1157
- ...svg$1,
1158
- ...svgFilters,
1159
- ...mathMl$1,
1160
- ...text
1161
- ]);
1162
- let ALLOWED_ATTR = null;
1163
- const DEFAULT_ALLOWED_ATTR = addToSet({}, [
1164
- ...html,
1165
- ...svg,
1166
- ...mathMl,
1167
- ...xml
1168
- ]);
1169
- let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
1170
- tagNameCheck: {
1171
- writable: true,
1172
- configurable: false,
1173
- enumerable: true,
1174
- value: null
1175
- },
1176
- attributeNameCheck: {
1177
- writable: true,
1178
- configurable: false,
1179
- enumerable: true,
1180
- value: null
1181
- },
1182
- allowCustomizedBuiltInElements: {
1183
- writable: true,
1184
- configurable: false,
1185
- enumerable: true,
1186
- value: false
1187
- }
1188
- }));
1189
- let FORBID_TAGS = null;
1190
- let FORBID_ATTR = null;
1191
- const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
1192
- tagCheck: {
1193
- writable: true,
1194
- configurable: false,
1195
- enumerable: true,
1196
- value: null
1197
- },
1198
- attributeCheck: {
1199
- writable: true,
1200
- configurable: false,
1201
- enumerable: true,
1202
- value: null
1203
- }
1204
- }));
1205
- let ALLOW_ARIA_ATTR = true;
1206
- let ALLOW_DATA_ATTR = true;
1207
- let ALLOW_UNKNOWN_PROTOCOLS = false;
1208
- let ALLOW_SELF_CLOSE_IN_ATTR = true;
1209
- let SAFE_FOR_TEMPLATES = false;
1210
- let SAFE_FOR_XML = true;
1211
- let WHOLE_DOCUMENT = false;
1212
- let SET_CONFIG = false;
1213
- let SET_CONFIG_ALLOWED_TAGS = null;
1214
- let SET_CONFIG_ALLOWED_ATTR = null;
1215
- let FORCE_BODY = false;
1216
- let RETURN_DOM = false;
1217
- let RETURN_DOM_FRAGMENT = false;
1218
- let RETURN_TRUSTED_TYPE = false;
1219
- let SANITIZE_DOM = true;
1220
- let SANITIZE_NAMED_PROPS = false;
1221
- const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
1222
- let KEEP_CONTENT = true;
1223
- let IN_PLACE = false;
1224
- let IN_PLACE_VISITED = null;
1225
- let USE_PROFILES = {};
1226
- let FORBID_CONTENTS = null;
1227
- const DEFAULT_FORBID_CONTENTS = addToSet({}, [
1228
- "annotation-xml",
1229
- "audio",
1230
- "colgroup",
1231
- "desc",
1232
- "foreignobject",
1233
- "head",
1234
- "iframe",
1235
- "math",
1236
- "mi",
1237
- "mn",
1238
- "mo",
1239
- "ms",
1240
- "mtext",
1241
- "noembed",
1242
- "noframes",
1243
- "noscript",
1244
- "plaintext",
1245
- "script",
1246
- "selectedcontent",
1247
- "style",
1248
- "svg",
1249
- "template",
1250
- "thead",
1251
- "title",
1252
- "video",
1253
- "xmp"
1254
- ]);
1255
- let DATA_URI_TAGS = null;
1256
- const DEFAULT_DATA_URI_TAGS = addToSet({}, [
1257
- "audio",
1258
- "video",
1259
- "img",
1260
- "source",
1261
- "image",
1262
- "track"
1263
- ]);
1264
- let URI_SAFE_ATTRIBUTES = null;
1265
- const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [
1266
- "alt",
1267
- "class",
1268
- "for",
1269
- "id",
1270
- "label",
1271
- "name",
1272
- "pattern",
1273
- "placeholder",
1274
- "role",
1275
- "summary",
1276
- "title",
1277
- "value",
1278
- "style",
1279
- "xmlns"
1280
- ]);
1281
- const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
1282
- const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
1283
- const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
1284
- let NAMESPACE = HTML_NAMESPACE;
1285
- let IS_EMPTY_INPUT = false;
1286
- let ALLOWED_NAMESPACES = null;
1287
- const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [
1288
- MATHML_NAMESPACE,
1289
- SVG_NAMESPACE,
1290
- HTML_NAMESPACE
1291
- ], stringToString);
1292
- const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze([
1293
- "mi",
1294
- "mo",
1295
- "mn",
1296
- "ms",
1297
- "mtext"
1298
- ]);
1299
- let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);
1300
- const DEFAULT_HTML_INTEGRATION_POINTS = freeze(["annotation-xml"]);
1301
- let HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);
1302
- const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [
1303
- "title",
1304
- "style",
1305
- "font",
1306
- "a",
1307
- "script"
1308
- ]);
1309
- let PARSER_MEDIA_TYPE = null;
1310
- const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
1311
- const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
1312
- let transformCaseFunc = null;
1313
- let CONFIG = null;
1314
- const formElement = document.createElement("form");
1315
- const isRegexOrFunction = function isRegexOrFunction(testValue) {
1316
- return testValue instanceof RegExp || testValue instanceof Function;
1317
- };
1318
- /**
1319
- * _parseConfig
1320
- *
1321
- * @param cfg optional config literal
1322
- */
1323
- const _parseConfig = function _parseConfig() {
1324
- let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
1325
- if (CONFIG && CONFIG === cfg) return;
1326
- if (!cfg || typeof cfg !== "object") cfg = {};
1327
- cfg = clone(cfg);
1328
- PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
1329
- transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
1330
- ALLOWED_TAGS = _resolveSetOption(cfg, "ALLOWED_TAGS", DEFAULT_ALLOWED_TAGS, { transform: transformCaseFunc });
1331
- ALLOWED_ATTR = _resolveSetOption(cfg, "ALLOWED_ATTR", DEFAULT_ALLOWED_ATTR, { transform: transformCaseFunc });
1332
- ALLOWED_NAMESPACES = _resolveSetOption(cfg, "ALLOWED_NAMESPACES", DEFAULT_ALLOWED_NAMESPACES, { transform: stringToString });
1333
- URI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, "ADD_URI_SAFE_ATTR", DEFAULT_URI_SAFE_ATTRIBUTES, {
1334
- transform: transformCaseFunc,
1335
- base: DEFAULT_URI_SAFE_ATTRIBUTES
1336
- });
1337
- DATA_URI_TAGS = _resolveSetOption(cfg, "ADD_DATA_URI_TAGS", DEFAULT_DATA_URI_TAGS, {
1338
- transform: transformCaseFunc,
1339
- base: DEFAULT_DATA_URI_TAGS
1340
- });
1341
- FORBID_CONTENTS = _resolveSetOption(cfg, "FORBID_CONTENTS", DEFAULT_FORBID_CONTENTS, { transform: transformCaseFunc });
1342
- FORBID_TAGS = _resolveSetOption(cfg, "FORBID_TAGS", clone({}), { transform: transformCaseFunc });
1343
- FORBID_ATTR = _resolveSetOption(cfg, "FORBID_ATTR", clone({}), { transform: transformCaseFunc });
1344
- USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === "object" ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;
1345
- ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
1346
- ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
1347
- ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
1348
- ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
1349
- SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
1350
- SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
1351
- WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
1352
- RETURN_DOM = cfg.RETURN_DOM || false;
1353
- RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
1354
- RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
1355
- FORCE_BODY = cfg.FORCE_BODY || false;
1356
- SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
1357
- SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
1358
- KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
1359
- IN_PLACE = cfg.IN_PLACE || false;
1360
- IS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI;
1361
- NAMESPACE = typeof cfg.NAMESPACE === "string" ? cfg.NAMESPACE : HTML_NAMESPACE;
1362
- MATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, "MATHML_TEXT_INTEGRATION_POINTS", () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));
1363
- HTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, "HTML_INTEGRATION_POINTS", () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS));
1364
- const customElementHandling = _resolveObjectOption(cfg, "CUSTOM_ELEMENT_HANDLING", () => create(null));
1365
- CUSTOM_ELEMENT_HANDLING = create(null);
1366
- if (objectHasOwnProperty(customElementHandling, "tagNameCheck") && isRegexOrFunction(customElementHandling.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;
1367
- if (objectHasOwnProperty(customElementHandling, "attributeNameCheck") && isRegexOrFunction(customElementHandling.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;
1368
- if (objectHasOwnProperty(customElementHandling, "allowCustomizedBuiltInElements") && typeof customElementHandling.allowCustomizedBuiltInElements === "boolean") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;
1369
- seal(CUSTOM_ELEMENT_HANDLING);
1370
- if (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;
1371
- if (RETURN_DOM_FRAGMENT) RETURN_DOM = true;
1372
- if (USE_PROFILES) {
1373
- ALLOWED_TAGS = addToSet({}, text);
1374
- ALLOWED_ATTR = create(null);
1375
- if (USE_PROFILES.html === true) {
1376
- addToSet(ALLOWED_TAGS, html$1);
1377
- addToSet(ALLOWED_ATTR, html);
1378
- }
1379
- if (USE_PROFILES.svg === true) {
1380
- addToSet(ALLOWED_TAGS, svg$1);
1381
- addToSet(ALLOWED_ATTR, svg);
1382
- addToSet(ALLOWED_ATTR, xml);
1383
- }
1384
- if (USE_PROFILES.svgFilters === true) {
1385
- addToSet(ALLOWED_TAGS, svgFilters);
1386
- addToSet(ALLOWED_ATTR, svg);
1387
- addToSet(ALLOWED_ATTR, xml);
1388
- }
1389
- if (USE_PROFILES.mathMl === true) {
1390
- addToSet(ALLOWED_TAGS, mathMl$1);
1391
- addToSet(ALLOWED_ATTR, mathMl);
1392
- addToSet(ALLOWED_ATTR, xml);
1393
- }
1394
- }
1395
- EXTRA_ELEMENT_HANDLING.tagCheck = null;
1396
- EXTRA_ELEMENT_HANDLING.attributeCheck = null;
1397
- if (objectHasOwnProperty(cfg, "ADD_TAGS")) {
1398
- if (typeof cfg.ADD_TAGS === "function") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
1399
- else if (arrayIsArray(cfg.ADD_TAGS)) {
1400
- if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);
1401
- addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
1402
- }
1403
- }
1404
- if (objectHasOwnProperty(cfg, "ADD_ATTR")) {
1405
- if (typeof cfg.ADD_ATTR === "function") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
1406
- else if (arrayIsArray(cfg.ADD_ATTR)) {
1407
- if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);
1408
- addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
1409
- }
1410
- }
1411
- if (objectHasOwnProperty(cfg, "ADD_FORBID_CONTENTS") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {
1412
- if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);
1413
- addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
1414
- }
1415
- if (KEEP_CONTENT) ALLOWED_TAGS["#text"] = true;
1416
- if (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [
1417
- "html",
1418
- "head",
1419
- "body"
1420
- ]);
1421
- if (ALLOWED_TAGS.table) {
1422
- addToSet(ALLOWED_TAGS, ["tbody"]);
1423
- delete FORBID_TAGS.tbody;
1424
- }
1425
- if (cfg.TRUSTED_TYPES_POLICY) {
1426
- if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") throw typeErrorCreate("TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.");
1427
- if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") throw typeErrorCreate("TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.");
1428
- const previousTrustedTypesPolicy = trustedTypesPolicy;
1429
- trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
1430
- try {
1431
- emptyHTML = _createTrustedHTML("");
1432
- } catch (error) {
1433
- trustedTypesPolicy = previousTrustedTypesPolicy;
1434
- throw error;
1435
- }
1436
- } else if (cfg.TRUSTED_TYPES_POLICY === null) {
1437
- trustedTypesPolicy = void 0;
1438
- emptyHTML = "";
1439
- } else {
1440
- if (trustedTypesPolicy === void 0) trustedTypesPolicy = _getDefaultTrustedTypesPolicy();
1441
- if (trustedTypesPolicy && typeof emptyHTML === "string") emptyHTML = _createTrustedHTML("");
1442
- }
1443
- if (freeze) freeze(cfg);
1444
- CONFIG = cfg;
1445
- };
1446
- const ALL_SVG_TAGS = addToSet({}, [
1447
- ...svg$1,
1448
- ...svgFilters,
1449
- ...svgDisallowed
1450
- ]);
1451
- const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
1452
- /**
1453
- * Namespace rules for an element in the SVG namespace.
1454
- *
1455
- * @param tagName the element's lowercase tag name
1456
- * @param parent the (possibly simulated) parent node
1457
- * @param parentTagName the parent's lowercase tag name
1458
- * @returns true if a spec-compliant parser could produce this element
1459
- */
1460
- const _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {
1461
- if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "svg";
1462
- if (parent.namespaceURI === MATHML_NAMESPACE) return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
1463
- return Boolean(ALL_SVG_TAGS[tagName]);
1464
- };
1465
- /**
1466
- * Namespace rules for an element in the MathML namespace.
1467
- *
1468
- * @param tagName the element's lowercase tag name
1469
- * @param parent the (possibly simulated) parent node
1470
- * @param parentTagName the parent's lowercase tag name
1471
- * @returns true if a spec-compliant parser could produce this element
1472
- */
1473
- const _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {
1474
- if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "math";
1475
- if (parent.namespaceURI === SVG_NAMESPACE) return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
1476
- return Boolean(ALL_MATHML_TAGS[tagName]);
1477
- };
1478
- /**
1479
- * Namespace rules for an element in the HTML namespace.
1480
- *
1481
- * @param tagName the element's lowercase tag name
1482
- * @param parent the (possibly simulated) parent node
1483
- * @param parentTagName the parent's lowercase tag name
1484
- * @returns true if a spec-compliant parser could produce this element
1485
- */
1486
- const _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {
1487
- if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;
1488
- if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;
1489
- return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
1490
- };
1491
- /**
1492
- * @param element a DOM element whose namespace is being checked
1493
- * @returns Return false if the element has a
1494
- * namespace that a spec-compliant parser would never
1495
- * return. Return true otherwise.
1496
- */
1497
- const _checkValidNamespace = function _checkValidNamespace(element) {
1498
- const elementNamespace = _readNamespaceURI(element);
1499
- const tagName = stringToLowerCase(_readNodeName(element));
1500
- const parentNode = getParentNode(element);
1501
- let parent;
1502
- let parentTagName;
1503
- if (parentNode && _readNodeType(parentNode) === NODE_TYPE.element) {
1504
- parent = { namespaceURI: _readNamespaceURI(parentNode) };
1505
- parentTagName = stringToLowerCase(_readNodeName(parentNode));
1506
- } else {
1507
- parent = { namespaceURI: NAMESPACE };
1508
- parentTagName = "template";
1509
- }
1510
- if (!ALLOWED_NAMESPACES[elementNamespace]) return false;
1511
- if (elementNamespace === SVG_NAMESPACE) return _checkSvgNamespace(tagName, parent, parentTagName);
1512
- if (elementNamespace === MATHML_NAMESPACE) return _checkMathMlNamespace(tagName, parent, parentTagName);
1513
- if (elementNamespace === HTML_NAMESPACE) return _checkHtmlNamespace(tagName, parent, parentTagName);
1514
- if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[elementNamespace]) return true;
1515
- return false;
1516
- };
1517
- /**
1518
- * _forceRemove
1519
- *
1520
- * @param node a DOM node
1521
- */
1522
- const _forceRemove = function _forceRemove(node) {
1523
- arrayPush(DOMPurify.removed, { element: node });
1524
- try {
1525
- getParentNode(node).removeChild(node);
1526
- } catch (_) {
1527
- remove(node);
1528
- if (!getParentNode(node)) throw typeErrorCreate("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place");
1529
- }
1530
- };
1531
- /**
1532
- * _stripAttributeNode
1533
- *
1534
- * Remove a single Attr node case/namespace-exactly on an attribute-teardown
1535
- * path. Name-based removeAttribute() ASCII-lowercases its lookup key for an
1536
- * HTML element in an HTML document and so silently misses a case-preserved
1537
- * handler (e.g. `ONERROR` off an XML/XHTML import) - the same defect
1538
- * _removeAttribute() was fixed for, which a name-based call would reintroduce
1539
- * on these IN_PLACE teardown paths. Unlike _removeAttribute this does not
1540
- * record into DOMPurify.removed: the neutralize passes intentionally do not
1541
- * book-keep. A clobbered/detached node falls back to best-effort name-based
1542
- * removal.
1543
- *
1544
- * @param element the element to strip the attribute from
1545
- * @param attribute the Attr node to remove
1546
- * @param name the attribute's name, for the fallback path
1547
- */
1548
- const _stripAttributeNode = function _stripAttributeNode(element, attribute, name) {
1549
- try {
1550
- removeAttributeNode(element, attribute);
1551
- } catch (_) {
1552
- try {
1553
- element.removeAttribute(name);
1554
- } catch (_) {}
1555
- }
1556
- };
1557
- /**
1558
- * Fail-closed teardown of an in-place root: strip every disallowed attribute
1559
- * in the subtree first, so nothing armed is left behind, then remove all
1560
- * children and the root's own attributes.
1561
- *
1562
- * @param root the in-place root to empty
1563
- */
1564
- const _neutralizeRoot = function _neutralizeRoot(root) {
1565
- _neutralizeSubtree(root);
1566
- const childNodes = getChildNodes(root);
1567
- if (childNodes) arrayForEach(arraySlice(childNodes), (child) => {
1568
- try {
1569
- remove(child);
1570
- } catch (_) {}
1571
- });
1572
- const attributes = _readNodeType(root) === NODE_TYPE.element ? getAttributes(root) : null;
1573
- if (attributes) for (let i = attributes.length - 1; i >= 0; --i) {
1574
- const attribute = attributes[i];
1575
- const name = attribute && attribute.name;
1576
- if (typeof name === "string") _stripAttributeNode(root, attribute, name);
1577
- }
1578
- };
1579
- /**
1580
- * Removes an attribute, preferably as its exact Attr node: name-based
1581
- * removal lowercases the name in HTML documents and misses case-preserved
1582
- * names, e.g. from imported XHTML.
1583
- *
1584
- * @param name an Attribute name
1585
- * @param element a DOM node
1586
- * @param attr the exact Attr node to remove, when the caller has it
1587
- */
1588
- const _removeAttribute = function _removeAttribute(name, element, attr) {
1589
- if (!attr) try {
1590
- attr = element.getAttributeNode(name);
1591
- } catch (_) {
1592
- attr = null;
1593
- }
1594
- arrayPush(DOMPurify.removed, {
1595
- attribute: attr || null,
1596
- from: element
1597
- });
1598
- try {
1599
- if (attr) removeAttributeNode(element, attr);
1600
- else element.removeAttribute(name);
1601
- } catch (_) {
1602
- try {
1603
- element.removeAttribute(name);
1604
- } catch (_) {}
1605
- }
1606
- if (name === "is") {
1607
- if (RETURN_DOM || RETURN_DOM_FRAGMENT) try {
1608
- _forceRemove(element);
1609
- } catch (_) {}
1610
- else try {
1611
- element.setAttribute(name, "");
1612
- } catch (_) {}
1613
- }
1614
- };
1615
- /**
1616
- * Removes every attribute the configuration does not allow. Used to
1617
- * neutralize nodes discarded from an in-place tree.
1618
- *
1619
- * @param element the element to strip
1620
- */
1621
- const _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {
1622
- const attributes = getAttributes(element);
1623
- if (!attributes) return;
1624
- for (let i = attributes.length - 1; i >= 0; --i) {
1625
- const attribute = attributes[i];
1626
- const name = attribute && attribute.name;
1627
- if (typeof name !== "string" || ALLOWED_ATTR[transformCaseFunc(name)]) continue;
1628
- _stripAttributeNode(element, attribute, name);
1629
- }
1630
- };
1631
- /**
1632
- * Iterative depth-first walk, so deep trees cannot overflow the call stack,
1633
- * reading through the cached getters, so clobbering cannot hide children.
1634
- * When `visit` returns false, the node's children are skipped. With
1635
- * `intoShadow`, open shadow roots are walked after their host's children.
1636
- *
1637
- * @param root where to start
1638
- * @param visit called for every node
1639
- * @param intoShadow whether to enter open shadow roots
1640
- */
1641
- const _walkTree = function _walkTree(root, visit) {
1642
- let intoShadow = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
1643
- const stack = [root];
1644
- while (stack.length > 0) {
1645
- const node = stack.pop();
1646
- if (visit(node) === false) continue;
1647
- if (intoShadow && _readNodeType(node) === NODE_TYPE.element) {
1648
- const shadowRoot = getShadowRoot(node);
1649
- if (_isDocumentFragment(shadowRoot)) stack.push(shadowRoot);
1650
- }
1651
- const childNodes = getChildNodes(node);
1652
- if (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push(childNodes[i]);
1653
- }
1654
- };
1655
- /**
1656
- * Strips disallowed attributes from every element of a discarded subtree,
1657
- * so a handler that is already queued (a loading image) cannot fire.
1658
- *
1659
- * @param root the root of a removed subtree
1660
- */
1661
- const _neutralizeSubtree = function _neutralizeSubtree(root) {
1662
- _walkTree(root, (node) => {
1663
- if (_readNodeType(node) === NODE_TYPE.element) _stripDisallowedAttributes(node);
1664
- });
1665
- };
1666
- /**
1667
- * All nodes under `root`, root first, including open shadow roots. Template
1668
- * content is not entered, it is inert.
1669
- *
1670
- * @param root the in-place root
1671
- * @return the nodes
1672
- */
1673
- const _collectLiveNodes = function _collectLiveNodes(root) {
1674
- const nodes = [];
1675
- _walkTree(root, (node) => {
1676
- nodes.push(node);
1677
- }, true);
1678
- return nodes;
1679
- };
1680
- /**
1681
- * Strips disallowed attributes from every element that was under the
1682
- * in-place root when the call started and no longer is, whatever removed
1683
- * or moved it.
1684
- *
1685
- * @param root the in-place root
1686
- * @param before the root's nodes, collected before the walk
1687
- */
1688
- const _neutralizeEscapedElements = function _neutralizeEscapedElements(root, before) {
1689
- const reachable = setCreate();
1690
- arrayForEach(_collectLiveNodes(root), (node) => {
1691
- if (_readNodeType(node) === NODE_TYPE.element) setAdd(reachable, node);
1692
- });
1693
- arrayForEach(before, (node) => {
1694
- if (_readNodeType(node) === NODE_TYPE.element && !setHas(reachable, node)) _stripDisallowedAttributes(node);
1695
- });
1696
- };
1697
- /**
1698
- * Neutralizes everything that left the in-place tree during the call: what
1699
- * DOMPurify removed, and what hooks or custom elements removed or moved out.
1700
- *
1701
- * @param root the in-place root
1702
- * @param before the root's nodes, collected before the walk
1703
- * @return true if the root itself was removed
1704
- */
1705
- const _neutralizeDiscarded = function _neutralizeDiscarded(root, before) {
1706
- let rootRemoved = false;
1707
- arrayForEach(DOMPurify.removed, (entry) => {
1708
- if (entry.element) {
1709
- rootRemoved = rootRemoved || entry.element === root;
1710
- _neutralizeSubtree(entry.element);
1711
- }
1712
- });
1713
- _neutralizeEscapedElements(root, before);
1714
- return rootRemoved;
1715
- };
1716
- const MAX_UNVISITED_ROUNDS = 8;
1717
- /**
1718
- * The walk only moves forward, so a node moved to a position it already
1719
- * passed is never visited. Give every original node that is still in the
1720
- * tree but unvisited the normal treatment, hooks included. Nodes created
1721
- * during the call are left alone. Fails closed if the tree keeps changing.
1722
- *
1723
- * @param root the in-place root
1724
- * @param before the root's nodes, collected before the walk
1725
- */
1726
- const _sanitizeUnvisitedNodes = function _sanitizeUnvisitedNodes(root, before) {
1727
- const visited = IN_PLACE_VISITED;
1728
- let original = null;
1729
- const getOriginal = () => {
1730
- if (!original) {
1731
- original = setCreate();
1732
- arrayForEach(before, (beforeNode) => {
1733
- setAdd(original, beforeNode);
1734
- });
1735
- }
1736
- return original;
1737
- };
1738
- for (let round = 0;; round++) {
1739
- const live = _collectLiveNodes(root);
1740
- const containers = [root];
1741
- let pending = false;
1742
- arrayForEach(live, (node) => {
1743
- if (_readNodeType(node) === NODE_TYPE.documentFragment) arrayPush(containers, node);
1744
- else if (!pending && !setHas(visited, node)) pending = setHas(getOriginal(), node);
1745
- });
1746
- if (!pending) return;
1747
- if (round >= MAX_UNVISITED_ROUNDS) throw typeErrorCreate("the tree kept changing during in-place sanitization; refusing to return it");
1748
- arrayForEach(containers, (container, index) => {
1749
- _sanitizeUnvisitedIn(container, index > 0, root, getOriginal());
1750
- });
1751
- }
1752
- };
1753
- /**
1754
- * One _sanitizeUnvisitedNodes pass over the root or an open shadow root.
1755
- *
1756
- * @param container the root or an open shadow root
1757
- * @param inShadow whether container is a shadow root
1758
- * @param root the in-place root
1759
- * @param original the root's nodes collected before the walk, as a set
1760
- */
1761
- const _sanitizeUnvisitedIn = function _sanitizeUnvisitedIn(container, inShadow, root, original) {
1762
- const iterator = _createNodeIterator(container);
1763
- let node;
1764
- while (node = iterator.nextNode()) {
1765
- if (!setHas(original, node) || setHas(IN_PLACE_VISITED, node)) continue;
1766
- if (inShadow) _executeHooks(hooks.uponSanitizeShadowNode, node, null);
1767
- _sanitizeElements(node, root);
1768
- _sanitizeAttributes(node, root);
1769
- if (_isDocumentFragment(node.content)) _sanitizeShadowDOM2(node.content);
1770
- }
1771
- };
1772
- /**
1773
- * Records that _sanitizeElements processed `node`. No-op outside IN_PLACE.
1774
- *
1775
- * @param node the node being processed
1776
- */
1777
- const _markVisited = function _markVisited(node) {
1778
- if (IN_PLACE_VISITED) setAdd(IN_PLACE_VISITED, node);
1779
- };
1780
- /**
1781
- * Patch-linkage attributes (declarative partial updates): `patchsrc`
1782
- * always, `for` everywhere except on <label> and <output>. Gated on
1783
- * SAFE_FOR_XML. Shared by the IN_PLACE pre-pass and _isValidAttribute.
1784
- *
1785
- * @param lcName the transformCaseFunc'd attribute name
1786
- * @param lcTag the transformCaseFunc'd tag name of the carrying element
1787
- * @return true if the attribute is patch linkage and must be dropped
1788
- */
1789
- const _isPatchLinkageAttribute = function _isPatchLinkageAttribute(lcName, lcTag) {
1790
- if (!SAFE_FOR_XML) return false;
1791
- if (lcName === "patchsrc") return true;
1792
- return lcName === "for" && lcTag !== "label" && lcTag !== "output";
1793
- };
1794
- /**
1795
- * IN_PLACE pre-pass: sever all patch linkage before the walk, so no patch
1796
- * can fire mid-walk into a part of the tree the walker already passed.
1797
- * Removes range markers (processing instructions, comments with markup)
1798
- * and strips linkage attributes. It cannot undo a patch that already fired.
1799
- *
1800
- * TODO: if the shipped feature can patch through `for` on <label>/<output>,
1801
- * drop that pair here too (see test/declarative-patch-probe.html).
1802
- *
1803
- * @param root the in-place root to sweep
1804
- */
1805
- const _neutralizePatchLinkage = function _neutralizePatchLinkage(root) {
1806
- if (!SAFE_FOR_XML) return;
1807
- _walkTree(root, (node) => {
1808
- const nodeType = _readNodeType(node);
1809
- if (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {
1810
- try {
1811
- remove(node);
1812
- } catch (_) {}
1813
- return false;
1814
- }
1815
- if (nodeType === NODE_TYPE.element) {
1816
- const element = node;
1817
- const lcTag = transformCaseFunc(_readNodeName(node));
1818
- try {
1819
- if (element.hasAttribute && element.hasAttribute("patchsrc")) element.removeAttribute("patchsrc");
1820
- if (element.hasAttribute && element.hasAttribute("for") && _isPatchLinkageAttribute("for", lcTag)) element.removeAttribute("for");
1821
- } catch (_) {}
1822
- }
1823
- return true;
1824
- });
1825
- };
1826
- /**
1827
- * _initDocument
1828
- *
1829
- * @param dirty - a string of dirty markup
1830
- * @return a DOM, filled with the dirty markup
1831
- */
1832
- const _initDocument = function _initDocument(dirty) {
1833
- let doc = null;
1834
- let leadingWhitespace = null;
1835
- if (FORCE_BODY) dirty = "<remove></remove>" + dirty;
1836
- else {
1837
- const matches = stringMatch(dirty, /^[\r\n\t ]+/);
1838
- leadingWhitespace = matches && matches[0];
1839
- }
1840
- if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) dirty = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>" + dirty + "</body></html>";
1841
- const dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;
1842
- if (NAMESPACE === HTML_NAMESPACE) try {
1843
- doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
1844
- } catch (_) {}
1845
- if (!doc || !doc.documentElement) {
1846
- doc = implementation.createDocument(NAMESPACE, "template", null);
1847
- try {
1848
- doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
1849
- } catch (_) {}
1850
- }
1851
- const body = doc.body || doc.documentElement;
1852
- if (dirty && leadingWhitespace) body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
1853
- if (NAMESPACE === HTML_NAMESPACE) return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
1854
- return WHOLE_DOCUMENT ? doc.documentElement : body;
1855
- };
1856
- /**
1857
- * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
1858
- *
1859
- * @param root The root element or node to start traversing on.
1860
- * @return The created NodeIterator
1861
- */
1862
- const _createNodeIterator = function _createNodeIterator(root) {
1863
- const doc = getOwnerDocument ? getOwnerDocument(root) : root.ownerDocument;
1864
- return createNodeIterator.call(doc || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
1865
- };
1866
- /**
1867
- * Replace template expression syntax (mustache, ERB, template
1868
- * literal) with a space; shared by all SAFE_FOR_TEMPLATES scrub
1869
- * sites. Order matters: mustache, then ERB, then template literal.
1870
- *
1871
- * @param value the string to scrub
1872
- * @returns the scrubbed string
1873
- */
1874
- const _stripTemplateExpressions = function _stripTemplateExpressions(value) {
1875
- value = stringReplace(value, MUSTACHE_EXPR$1, " ");
1876
- value = stringReplace(value, ERB_EXPR$1, " ");
1877
- value = stringReplace(value, TMPLIT_EXPR$1, " ");
1878
- return value;
1879
- };
1880
- /**
1881
- * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the
1882
- * character data of an element subtree. Used as the final safety net for
1883
- * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions
1884
- * which only form after text-node normalization (e.g. fragments split across
1885
- * stripped elements) cannot survive into a template-evaluating framework.
1886
- *
1887
- * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`
1888
- * in place rather than round-tripping through innerHTML. This preserves
1889
- * descendant node references (important for IN_PLACE callers), avoids a
1890
- * serialize/reparse cycle, and reads literal character data — which means
1891
- * `<%...%>` in text content matches the ERB regex against its real bytes
1892
- * instead of the HTML-entity-escaped form innerHTML would produce.
1893
- *
1894
- * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for
1895
- * attributes is performed during the per-node `_sanitizeAttributes` pass.
1896
- *
1897
- * @param node The root element whose character data should be scrubbed.
1898
- */
1899
- const _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {
1900
- var _node$querySelectorAl;
1901
- _scrubOwnCharacterData(node);
1902
- const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, "template");
1903
- if (templates) arrayForEach(templates, (tmpl) => {
1904
- if (_isDocumentFragment(tmpl.content)) _scrubTemplateExpressions2(tmpl.content);
1905
- });
1906
- };
1907
- /**
1908
- * _scrubOwnCharacterData
1909
- *
1910
- * Non-recursive core of _scrubTemplateExpressions: normalize `node` and
1911
- * strip template expressions from its own character data only. Does not
1912
- * enter <template>.content or attached shadow roots (NodeIterator never
1913
- * does). Used by _sanitizeShadowDOM, where every nested template content
1914
- * and shadow root is already walked - and therefore scrubbed - by its own
1915
- * recursive _sanitizeShadowDOM call; recursing here as well would rescrub
1916
- * each nested fragment once per ancestor, which is quadratic in nesting
1917
- * depth.
1918
- *
1919
- * @param node The root whose own character data should be scrubbed.
1920
- */
1921
- const _scrubOwnCharacterData = function _scrubOwnCharacterData(node) {
1922
- node.normalize();
1923
- const doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;
1924
- const walker = createNodeIterator.call(doc || node, node, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);
1925
- let currentNode = walker.nextNode();
1926
- while (currentNode) {
1927
- currentNode.data = _stripTemplateExpressions(currentNode.data);
1928
- currentNode = walker.nextNode();
1929
- }
1930
- };
1931
- /**
1932
- * _isClobbered
1933
- *
1934
- * Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML
1935
- * interface with [LegacyOverrideBuiltIns]; a descendant element with a
1936
- * `name` attribute matching a prototype property shadows that property
1937
- * on direct reads. We use this check at the IN_PLACE entry-point and
1938
- * during attribute sanitization to refuse clobbered forms.
1939
- *
1940
- * @param element element to check for clobbering attacks
1941
- * @return true if clobbered, false if safe
1942
- */
1943
- const _isClobbered = function _isClobbered(element) {
1944
- const realTagName = getNodeName ? getNodeName(element) : null;
1945
- if (typeof realTagName !== "string") return false;
1946
- if (transformCaseFunc(realTagName) !== "form") return false;
1947
- return typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || element.attributes !== getAttributes(element) || typeof element.removeAttribute !== "function" || typeof element.removeAttributeNode !== "function" || typeof element.getAttributeNode !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function" || element.nodeType !== getNodeType(element) || element.childNodes !== getChildNodes(element);
1948
- };
1949
- /**
1950
- * Checks whether the given value is a DocumentFragment from any realm.
1951
- *
1952
- * The realm-independent replacement reads `nodeType` through the cached
1953
- * Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE
1954
- * constant (11). nodeType is a numeric value resolved from the node's
1955
- * internal slot, identical across realms for the same kind of node.
1956
- *
1957
- * @param value object to check
1958
- * @return true if value is a DocumentFragment-shaped node from any realm
1959
- */
1960
- const _isDocumentFragment = function _isDocumentFragment(value) {
1961
- if (!getNodeType || typeof value !== "object" || value === null) return false;
1962
- try {
1963
- return getNodeType(value) === NODE_TYPE.documentFragment;
1964
- } catch (_) {
1965
- return false;
1966
- }
1967
- };
1968
- /**
1969
- * Checks whether the given object is a DOM node, including nodes that
1970
- * originate from a different window/realm (e.g. an iframe's
1971
- * contentDocument). The previous `value instanceof Node` check was
1972
- * realm-bound: nodes from a different window failed it, causing
1973
- * sanitize() to silently stringify them and reset IN_PLACE to false,
1974
- * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.
1975
- *
1976
- * @param value object to check whether it's a DOM node
1977
- * @return true if value is a DOM node from any realm
1978
- */
1979
- const _isNode = function _isNode(value) {
1980
- if (!getNodeType || typeof value !== "object" || value === null) return false;
1981
- try {
1982
- return typeof getNodeType(value) === "number";
1983
- } catch (_) {
1984
- return false;
1985
- }
1986
- };
1987
- function _executeHooks(hooks, currentNode, data) {
1988
- if (hooks.length === 0) return;
1989
- arrayForEach(hooks, (hook) => {
1990
- hook.call(DOMPurify, currentNode, data, CONFIG);
1991
- });
1992
- }
1993
- /**
1994
- * Structural-threat checks that condemn a node regardless of the
1995
- * allowlists: mXSS via namespace confusion, risky CSS construction,
1996
- * processing instructions, markup-bearing comments. Pure predicate;
1997
- * the caller removes. Check order is load-bearing.
1998
- *
1999
- * @param currentNode the node to inspect
2000
- * @param tagName the node's transformCaseFunc'd tag name
2001
- * @return true if the node must be removed
2002
- */
2003
- const _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {
2004
- if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) return true;
2005
- if (SAFE_FOR_XML && LITERAL_TEXT_ELEMENTS[tagName] && _readNodeType(currentNode) === NODE_TYPE.element && _readNamespaceURI(currentNode) === HTML_NAMESPACE && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === "string" && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent))) return true;
2006
- if (currentNode.nodeType === NODE_TYPE.processingInstruction) return true;
2007
- if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) return true;
2008
- return false;
2009
- };
2010
- /**
2011
- * Evaluate a CUSTOM_ELEMENT_HANDLING check (a RegExp or a predicate
2012
- * function, per the validation in _parseConfig) against a name.
2013
- * Additional arguments are forwarded to predicate functions - the
2014
- * attributeNameCheck predicate receives the tag name as its second
2015
- * argument. A null/absent check never matches.
2016
- *
2017
- * @param check the configured tagNameCheck / attributeNameCheck value
2018
- * @param name the name to test
2019
- * @param args extra arguments forwarded to a predicate function
2020
- * @return true if the check matches the name
2021
- */
2022
- const _matchesNameCheck = function _matchesNameCheck(check, name) {
2023
- if (check instanceof RegExp) return regExpTest(check, name);
2024
- if (check instanceof Function) {
2025
- for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];
2026
- return Boolean(check(name, ...args));
2027
- }
2028
- return false;
2029
- };
2030
- /**
2031
- * Handle a node whose tag is forbidden or not allowlisted: keep
2032
- * allowed custom elements (false return exits _sanitizeElements
2033
- * early - the namespace and fallback-tag removal checks are
2034
- * intentionally skipped for kept custom elements), else hoist
2035
- * content per KEEP_CONTENT and remove.
2036
- *
2037
- * A kept custom element is the ONLY case in which this function
2038
- * returns false, so the caller uses that return value to run the
2039
- * afterSanitizeElements hook on the kept element and keep the
2040
- * element-hook lifecycle consistent with normal allowlisted
2041
- * elements (GHSA-c2j3-45gr-mqc4).
2042
- *
2043
- * @param currentNode the disallowed node
2044
- * @param tagName the node's transformCaseFunc'd tag name
2045
- * @return true if the node was removed, false if kept
2046
- */
2047
- const _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, tagName, root) {
2048
- if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;
2049
- if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && !FORBID_CONTENTS[stringToLowerCase(tagName)]) {
2050
- const parentNode = getParentNode(currentNode);
2051
- const childNodes = getChildNodes(currentNode);
2052
- if (childNodes && parentNode) {
2053
- const childCount = childNodes.length;
2054
- for (let i = childCount - 1; i >= 0; --i) {
2055
- const hoisted = currentNode === root ? cloneNode(childNodes[i], true) : childNodes[i];
2056
- parentNode.insertBefore(hoisted, getNextSibling(currentNode));
2057
- }
2058
- }
2059
- }
2060
- _forceRemove(currentNode);
2061
- return true;
2062
- };
2063
- /**
2064
- * Fork a hook-mutable allowlist off its shared binding the first time a
2065
- * (possibly lazily-installed) uponSanitize* hook is about to see it, so the
2066
- * hook cannot widen the per-instance default or the setConfig binding by
2067
- * reference and leak past the call. Returns the set unchanged once it is
2068
- * already call-local, so repeated calls across elements are idempotent.
2069
- *
2070
- * @param hookList the uponSanitize* hook array for this event
2071
- * @param set the current ALLOWED_TAGS / ALLOWED_ATTR binding
2072
- * @param defaultSet the per-instance DEFAULT_ALLOWED_* constant
2073
- * @param setConfigSet the captured setConfig() binding, or null
2074
- * @return a call-local clone if a hook is present and set is still shared,
2075
- * else set unchanged
2076
- */
2077
- const _forkSharedAllowlist = function _forkSharedAllowlist(hookList, set, defaultSet, setConfigSet) {
2078
- if (hookList.length === 0) return set;
2079
- return set === defaultSet || set === setConfigSet ? clone(set) : set;
2080
- };
2081
- /**
2082
- * A hook may have detached the node it was called for. If so, treat it as
2083
- * removed and stop processing it; the walk root is exempt. On the IN_PLACE
2084
- * path the detached subtree is neutralized right away.
2085
- *
2086
- * @param currentNode the node a hook may have detached
2087
- * @param root the current walk root
2088
- * @return true if the node was detached
2089
- */
2090
- const _handleHookDetachedNode = function _handleHookDetachedNode(currentNode, root) {
2091
- if (currentNode === root || getParentNode(currentNode) !== null) return false;
2092
- if (IN_PLACE) _neutralizeSubtree(currentNode);
2093
- return true;
2094
- };
2095
- /**
2096
- * _sanitizeElements
2097
- *
2098
- * @protect nodeName
2099
- * @protect textContent
2100
- * @protect removeChild
2101
- * @param currentNode to check for permission to exist
2102
- * @return true if node was killed, false if left alive
2103
- */
2104
- const _sanitizeElements = function _sanitizeElements(currentNode, root) {
2105
- _markVisited(currentNode);
2106
- _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
2107
- if (_handleHookDetachedNode(currentNode, root)) return true;
2108
- if (_isClobbered(currentNode)) {
2109
- _forceRemove(currentNode);
2110
- return true;
2111
- }
2112
- const tagName = transformCaseFunc(_readNodeName(currentNode));
2113
- ALLOWED_TAGS = _forkSharedAllowlist(hooks.uponSanitizeElement, ALLOWED_TAGS, DEFAULT_ALLOWED_TAGS, SET_CONFIG_ALLOWED_TAGS);
2114
- _executeHooks(hooks.uponSanitizeElement, currentNode, {
2115
- tagName,
2116
- allowedTags: ALLOWED_TAGS
2117
- });
2118
- if (_handleHookDetachedNode(currentNode, root)) return true;
2119
- if (_isUnsafeNode(currentNode, tagName)) {
2120
- _forceRemove(currentNode);
2121
- return true;
2122
- }
2123
- if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {
2124
- const removed = _sanitizeDisallowedNode(currentNode, tagName, root);
2125
- if (removed === false) {
2126
- _executeHooks(hooks.afterSanitizeElements, currentNode, null);
2127
- if (_handleHookDetachedNode(currentNode, root)) return true;
2128
- }
2129
- return removed;
2130
- }
2131
- if (_readNodeType(currentNode) === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {
2132
- _forceRemove(currentNode);
2133
- return true;
2134
- }
2135
- if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(FALLBACK_TAG_CLOSE, currentNode.innerHTML)) {
2136
- _forceRemove(currentNode);
2137
- return true;
2138
- }
2139
- if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
2140
- const content = _stripTemplateExpressions(currentNode.textContent);
2141
- if (currentNode.textContent !== content) {
2142
- arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });
2143
- currentNode.textContent = content;
2144
- }
2145
- }
2146
- _executeHooks(hooks.afterSanitizeElements, currentNode, null);
2147
- return _handleHookDetachedNode(currentNode, root);
2148
- };
2149
- /**
2150
- * _isValidAttribute
2151
- *
2152
- * @param lcTag Lowercase tag name of containing element.
2153
- * @param lcName Lowercase attribute name.
2154
- * @param value Attribute value.
2155
- * @return Returns true if `value` is valid, otherwise false.
2156
- */
2157
- const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
2158
- if (FORBID_ATTR[lcName]) return false;
2159
- if (_isPatchLinkageAttribute(lcName, lcTag)) return false;
2160
- if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document || value in formElement)) return false;
2161
- const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);
2162
- if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) return true;
2163
- if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) return true;
2164
- if (!nameIsPermitted) return _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value);
2165
- if (URI_SAFE_ATTRIBUTES[lcName]) return true;
2166
- if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ""))) return true;
2167
- if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]) return true;
2168
- if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ""))) return true;
2169
- return !value;
2170
- };
2171
- const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [
2172
- "annotation-xml",
2173
- "color-profile",
2174
- "font-face",
2175
- "font-face-format",
2176
- "font-face-name",
2177
- "font-face-src",
2178
- "font-face-uri",
2179
- "missing-glyph"
2180
- ]);
2181
- /**
2182
- * _isBasicCustomElement
2183
- * checks if at least one dash is included in tagName, and it's not the first char
2184
- * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
2185
- *
2186
- * @param tagName name of the tag of the node to sanitize
2187
- * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
2188
- */
2189
- const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
2190
- return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);
2191
- };
2192
- /**
2193
- * Wrap an attribute value in the matching Trusted Types object when
2194
- * the active policy requires it. Namespaced attributes pass through
2195
- * unchanged (no TT support yet, see
2196
- * https://bugs.chromium.org/p/chromium/issues/detail?id=1305293).
2197
- *
2198
- * @param lcTag lowercase tag name of the containing element
2199
- * @param lcName lowercase attribute name
2200
- * @param namespaceURI the attribute's namespace, if any
2201
- * @param value the attribute value to wrap
2202
- * @return the value, wrapped when Trusted Types demand it
2203
- */
2204
- const _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {
2205
- if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function" && !namespaceURI) switch (trustedTypes.getAttributeType(lcTag, lcName)) {
2206
- case "TrustedHTML": return _createTrustedHTML(value);
2207
- case "TrustedScriptURL": return _createTrustedScriptURL(value);
2208
- }
2209
- return value;
2210
- };
2211
- /**
2212
- * Write a modified attribute value back onto the element. On
2213
- * success, re-probe for clobbering introduced by the new value and
2214
- * remove the element when found; otherwise, when this writeback is the
2215
- * recreate half of the SANITIZE_NAMED_PROPS remove-and-recreate, pop the
2216
- * removal entry that path recorded so it does not show as removed. On
2217
- * failure, remove the attribute instead.
2218
- *
2219
- * Returns true only on a clean write (the value was set and the new value
2220
- * introduced no clobbering). The caller uses that, together with its own
2221
- * knowledge of whether this attribute pushed a DOMPurify.removed record, to
2222
- * decide whether to pop that record. The pop must happen ONLY for the
2223
- * named-prop remove-and-recreate; popping on any other value change (trim,
2224
- * template scrubbing, Trusted Types) would consume an unrelated _forceRemove
2225
- * subtree-cleanup record and let that detached subtree keep a live event
2226
- * handler through the IN_PLACE neutralization pass (SO-001).
2227
- *
2228
- * @param currentNode the element carrying the attribute
2229
- * @param name the attribute name as present on the element
2230
- * @param namespaceURI the attribute's namespace, if any
2231
- * @param value the new attribute value
2232
- * @return true if the value was written without introducing clobbering
2233
- */
2234
- const _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {
2235
- try {
2236
- if (namespaceURI) currentNode.setAttributeNS(namespaceURI, name, value);
2237
- else currentNode.setAttribute(name, value);
2238
- if (_isClobbered(currentNode)) {
2239
- _forceRemove(currentNode);
2240
- return false;
2241
- }
2242
- return true;
2243
- } catch (_) {
2244
- _removeAttribute(name, currentNode);
2245
- return false;
2246
- }
2247
- };
2248
- /**
2249
- * _isUnsafeAttributeValue
2250
- *
2251
- * Value-based attribute checks that the attribute walk applies before any
2252
- * hook can force-keep an attribute, shared with the public
2253
- * isValidAttribute() so that it never approves a value sanitize() would
2254
- * strip.
2255
- *
2256
- * @param name the attribute name as found on the node (case preserved)
2257
- * @param value the attribute value
2258
- * @returns true if the attribute must be removed because of its value
2259
- */
2260
- const _isUnsafeAttributeValue = function _isUnsafeAttributeValue(name, value) {
2261
- if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) return true;
2262
- return stringToLowerCase(name) === "attributename" && stringMatch(value, "href") !== null;
2263
- };
2264
- /**
2265
- * _sanitizeAttributes
2266
- *
2267
- * @protect attributes
2268
- * @protect nodeName
2269
- * @protect removeAttribute
2270
- * @protect setAttribute
2271
- *
2272
- * @param currentNode to sanitize
2273
- * @param root the current walk root
2274
- */
2275
- const _sanitizeAttributes = function _sanitizeAttributes(currentNode, root) {
2276
- _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
2277
- if (_handleHookDetachedNode(currentNode, root)) return;
2278
- const attributes = currentNode.attributes;
2279
- if (!attributes || _isClobbered(currentNode)) return;
2280
- ALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);
2281
- const hookEvent = {
2282
- attrName: "",
2283
- attrValue: "",
2284
- keepAttr: true,
2285
- allowedAttributes: ALLOWED_ATTR,
2286
- forceKeepAttr: void 0
2287
- };
2288
- let l = attributes.length;
2289
- const lcTag = transformCaseFunc(currentNode.nodeName);
2290
- while (l--) {
2291
- const attr = attributes[l];
2292
- const name = attr.name, namespaceURI = attr.namespaceURI, attrValue = attr.value;
2293
- const lcName = transformCaseFunc(name);
2294
- const initValue = attrValue;
2295
- let value = name === "value" ? initValue : stringTrim(initValue);
2296
- let recreatedNamedProp = false;
2297
- hookEvent.attrName = lcName;
2298
- hookEvent.attrValue = value;
2299
- hookEvent.keepAttr = true;
2300
- hookEvent.forceKeepAttr = void 0;
2301
- _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
2302
- value = hookEvent.attrValue;
2303
- if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name") && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {
2304
- _removeAttribute(name, currentNode, attr);
2305
- value = SANITIZE_NAMED_PROPS_PREFIX + value;
2306
- recreatedNamedProp = true;
2307
- }
2308
- if (_isUnsafeAttributeValue(name, value)) {
2309
- _removeAttribute(name, currentNode, attr);
2310
- continue;
2311
- }
2312
- if (hookEvent.forceKeepAttr) continue;
2313
- if (!hookEvent.keepAttr) {
2314
- _removeAttribute(name, currentNode, attr);
2315
- continue;
2316
- }
2317
- if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)) {
2318
- _removeAttribute(name, currentNode, attr);
2319
- continue;
2320
- }
2321
- if (SAFE_FOR_TEMPLATES) value = _stripTemplateExpressions(value);
2322
- if (!_isValidAttribute(lcTag, lcName, value)) {
2323
- _removeAttribute(name, currentNode, attr);
2324
- continue;
2325
- }
2326
- value = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);
2327
- if (value !== initValue) {
2328
- if (_setAttributeValue(currentNode, name, namespaceURI, value) && recreatedNamedProp) arrayPop(DOMPurify.removed);
2329
- }
2330
- }
2331
- _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
2332
- _handleHookDetachedNode(currentNode, root);
2333
- };
2334
- /**
2335
- * _sanitizeShadowDOM
2336
- *
2337
- * @param fragment to iterate over recursively
2338
- */
2339
- const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {
2340
- let shadowNode = null;
2341
- const shadowIterator = _createNodeIterator(fragment);
2342
- _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
2343
- while (shadowNode = shadowIterator.nextNode()) {
2344
- _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
2345
- _sanitizeElements(shadowNode, fragment);
2346
- _sanitizeAttributes(shadowNode, fragment);
2347
- if (_isDocumentFragment(shadowNode.content)) _sanitizeShadowDOM2(shadowNode.content);
2348
- if (_readNodeType(shadowNode) === NODE_TYPE.element) {
2349
- const innerSr = getShadowRoot(shadowNode);
2350
- if (_isDocumentFragment(innerSr)) {
2351
- _sanitizeAttachedShadowRoots(innerSr);
2352
- _sanitizeShadowDOM2(innerSr);
2353
- }
2354
- }
2355
- }
2356
- if (SAFE_FOR_TEMPLATES) _scrubOwnCharacterData(fragment);
2357
- _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
2358
- };
2359
- /**
2360
- * Sanitizes every attached shadow root under `root`, since the node
2361
- * iterator does not enter shadow trees. Needed for IN_PLACE input and for
2362
- * DOM input whose clonable shadow roots were copied by importNode().
2363
- *
2364
- * @param root the subtree root to walk for attached shadow roots
2365
- */
2366
- const _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {
2367
- const stack = [{
2368
- node: root,
2369
- shadow: null
2370
- }];
2371
- while (stack.length > 0) {
2372
- const item = stack.pop();
2373
- if (item.shadow) {
2374
- _sanitizeShadowDOM2(item.shadow);
2375
- continue;
2376
- }
2377
- const node = item.node;
2378
- const isElement = _readNodeType(node) === NODE_TYPE.element;
2379
- const childNodes = getChildNodes(node);
2380
- if (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push({
2381
- node: childNodes[i],
2382
- shadow: null
2383
- });
2384
- if (isElement) {
2385
- const rootName = getNodeName ? getNodeName(node) : null;
2386
- if (typeof rootName === "string" && transformCaseFunc(rootName) === "template") {
2387
- const content = node.content;
2388
- if (_isDocumentFragment(content)) stack.push({
2389
- node: content,
2390
- shadow: null
2391
- });
2392
- }
2393
- }
2394
- if (isElement) {
2395
- const sr = getShadowRoot(node);
2396
- if (_isDocumentFragment(sr)) stack.push({
2397
- node: null,
2398
- shadow: sr
2399
- }, {
2400
- node: sr,
2401
- shadow: null
2402
- });
2403
- }
2404
- }
2405
- };
2406
- DOMPurify.sanitize = function(dirty) {
2407
- let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
2408
- let body = null;
2409
- let importedNode = null;
2410
- let currentNode = null;
2411
- let returnNode = null;
2412
- IS_EMPTY_INPUT = !dirty;
2413
- if (IS_EMPTY_INPUT) dirty = "<!-->";
2414
- if (typeof dirty !== "string" && !_isNode(dirty)) {
2415
- dirty = stringifyValue(dirty);
2416
- if (typeof dirty !== "string") throw typeErrorCreate("dirty is not a string, aborting");
2417
- }
2418
- if (!DOMPurify.isSupported) return dirty;
2419
- if (SET_CONFIG) {
2420
- ALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;
2421
- ALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;
2422
- } else _parseConfig(cfg);
2423
- if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) ALLOWED_TAGS = clone(ALLOWED_TAGS);
2424
- if (hooks.uponSanitizeAttribute.length > 0) ALLOWED_ATTR = clone(ALLOWED_ATTR);
2425
- DOMPurify.removed = [];
2426
- const inPlace = IN_PLACE && typeof dirty !== "string" && _isNode(dirty);
2427
- let inPlaceNodes = [];
2428
- const outerVisited = IN_PLACE_VISITED;
2429
- if (inPlace) {
2430
- _neutralizePatchLinkage(dirty);
2431
- const nn = _readNodeName(dirty);
2432
- if (typeof nn === "string") {
2433
- const tagName = transformCaseFunc(nn);
2434
- if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
2435
- _neutralizeRoot(dirty);
2436
- throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
2437
- }
2438
- }
2439
- if (_isClobbered(dirty)) {
2440
- _neutralizeRoot(dirty);
2441
- throw typeErrorCreate("root node is clobbered and cannot be sanitized in-place");
2442
- }
2443
- inPlaceNodes = _collectLiveNodes(dirty);
2444
- IN_PLACE_VISITED = setCreate();
2445
- } else if (_isNode(dirty)) {
2446
- body = _initDocument("<!---->");
2447
- importedNode = body.ownerDocument.importNode(dirty, true);
2448
- if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") body = importedNode;
2449
- else if (importedNode.nodeName === "HTML") body = importedNode;
2450
- else body.appendChild(importedNode);
2451
- _sanitizeAttachedShadowRoots(body);
2452
- } else {
2453
- if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;
2454
- body = _initDocument(dirty);
2455
- if (!body) return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
2456
- }
2457
- if (body && FORCE_BODY) _forceRemove(body.firstChild);
2458
- const walkRoot = inPlace ? dirty : body;
2459
- try {
2460
- if (inPlace) _sanitizeAttachedShadowRoots(dirty);
2461
- const nodeIterator = _createNodeIterator(walkRoot);
2462
- while (currentNode = nodeIterator.nextNode()) {
2463
- _sanitizeElements(currentNode, walkRoot);
2464
- _sanitizeAttributes(currentNode, walkRoot);
2465
- if (_isDocumentFragment(currentNode.content)) _sanitizeShadowDOM2(currentNode.content);
2466
- }
2467
- if (inPlace) _sanitizeUnvisitedNodes(dirty, inPlaceNodes);
2468
- } catch (error) {
2469
- if (inPlace) {
2470
- _neutralizeRoot(dirty);
2471
- _neutralizeDiscarded(dirty, inPlaceNodes);
2472
- }
2473
- throw error;
2474
- } finally {
2475
- IN_PLACE_VISITED = outerVisited;
2476
- }
2477
- if (inPlace) {
2478
- if (_neutralizeDiscarded(dirty, inPlaceNodes)) throw typeErrorCreate("a node selected for removal could not be safely returned; refusing to sanitize in place");
2479
- if (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(dirty);
2480
- return dirty;
2481
- }
2482
- if (RETURN_DOM) {
2483
- if (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(body);
2484
- if (RETURN_DOM_FRAGMENT) {
2485
- returnNode = createDocumentFragment.call(body.ownerDocument);
2486
- while (body.firstChild) returnNode.appendChild(body.firstChild);
2487
- } else returnNode = body;
2488
- if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) returnNode = importNode.call(originalDocument, returnNode, true);
2489
- return returnNode;
2490
- }
2491
- let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
2492
- if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
2493
- if (SAFE_FOR_TEMPLATES) serializedHTML = _stripTemplateExpressions(serializedHTML);
2494
- return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;
2495
- };
2496
- DOMPurify.setConfig = function() {
2497
- let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
2498
- _parseConfig(cfg);
2499
- SET_CONFIG = true;
2500
- SET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;
2501
- SET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;
2502
- };
2503
- DOMPurify.clearConfig = function() {
2504
- CONFIG = null;
2505
- SET_CONFIG = false;
2506
- SET_CONFIG_ALLOWED_TAGS = null;
2507
- SET_CONFIG_ALLOWED_ATTR = null;
2508
- trustedTypesPolicy = defaultTrustedTypesPolicy;
2509
- emptyHTML = "";
2510
- };
2511
- DOMPurify.isValidAttribute = function(tag, attr, value) {
2512
- if (!CONFIG) _parseConfig({});
2513
- const lcTag = transformCaseFunc(tag);
2514
- const lcName = transformCaseFunc(attr);
2515
- if (typeof value === "string" && (_isUnsafeAttributeValue(attr, value) || !ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value))) return false;
2516
- return _isValidAttribute(lcTag, lcName, value);
2517
- };
2518
- DOMPurify.addHook = function(entryPoint, hookFunction) {
2519
- if (typeof hookFunction !== "function") return;
2520
- if (!objectHasOwnProperty(hooks, entryPoint)) return;
2521
- arrayPush(hooks[entryPoint], hookFunction);
2522
- };
2523
- DOMPurify.removeHook = function(entryPoint, hookFunction) {
2524
- if (!objectHasOwnProperty(hooks, entryPoint)) return;
2525
- if (hookFunction !== void 0) {
2526
- const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
2527
- return index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];
2528
- }
2529
- return arrayPop(hooks[entryPoint]);
2530
- };
2531
- DOMPurify.removeHooks = function(entryPoint) {
2532
- if (!objectHasOwnProperty(hooks, entryPoint)) return;
2533
- hooks[entryPoint] = [];
2534
- };
2535
- DOMPurify.removeAllHooks = function() {
2536
- hooks = _createHooksMap();
2537
- };
2538
- return DOMPurify;
2539
- }
2540
- var purify_default = createDOMPurify();
2541
-
2542
- /**
2543
- * marked v16.4.2 - a markdown parser
2544
- * Copyright (c) 2018-2025, MarkedJS. (MIT License)
2545
- * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)
2546
- * https://github.com/markedjs/marked
2547
- */
2548
-
2549
- /**
2550
- * DO NOT EDIT THIS FILE
2551
- * The code in this file is generated from files in ./src/
2552
- */
2553
-
2554
- function L(){return {async:false,breaks:false,extensions:null,gfm:true,hooks:null,pedantic:false,renderer:null,silent:false,tokenizer:null,walkTokens:null}}var T=L();function G(l){T=l;}var E={exec:()=>null};function d(l,e=""){let t=typeof l=="string"?l:l.source,n={replace:(r,i)=>{let s=typeof i=="string"?i:i.source;return s=s.replace(m.caret,"$1"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var be=(()=>{try{return !!new RegExp("(?<=1)(?<!1)")}catch{return false}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,"i")},Re=/^(?:[ \t]*(?:\n|$))+/,Te=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Oe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,I=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,we=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,F=/(?:[*+-]|\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,oe=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),ye=d(ie).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),j=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Pe=/^[^\n]+/,Q=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Se=d(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Q).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),$e=d(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,F).getRegex(),v="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",U=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,_e=d("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",U).replace("tag",v).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ae=d(j).replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Le=d(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ae).getRegex(),K={blockquote:Le,code:Te,def:Se,fences:Oe,heading:we,hr:I,html:_e,lheading:oe,list:$e,newline:Re,paragraph:ae,table:E,text:Pe},re=d("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Me={...K,lheading:ye,table:re,paragraph:d(j).replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",re).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex()},ze={...K,html:d(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",U).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:E,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:d(j).replace("hr",I).replace("heading",` *#{1,6} *[^
2555
- ]`).replace("lheading",oe).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ae=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ee=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,le=/^( {2,}|\\)\n(?!\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,D=/[\p{P}\p{S}]/u,W=/[\s\p{P}\p{S}]/u,ue=/[^\s\p{P}\p{S}]/u,Ce=d(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,W).getRegex(),pe=/(?!~)[\p{P}\p{S}]/u,Be=/(?!~)[\s\p{P}\p{S}]/u,qe=/(?:[^\s\p{P}\p{S}]|~)/u,ve=d(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",be?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),ce=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,De=d(ce,"u").replace(/punct/g,D).getRegex(),He=d(ce,"u").replace(/punct/g,pe).getRegex(),he="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Ze=d(he,"gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ge=d(he,"gu").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,Be).replace(/punct/g,pe).getRegex(),Ne=d("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ue).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Fe=d(/\\(punct)/,"gu").replace(/punct/g,D).getRegex(),je=d(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=d(U).replace("(?:-->|$)","-->").getRegex(),Ue=d("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Qe).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),q=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,Ke=d(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",q).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),de=d(/^!?\[(label)\]\[(ref)\]/).replace("label",q).replace("ref",Q).getRegex(),ke=d(/^!?\[(ref)\](?:\[\])?/).replace("ref",Q).getRegex(),We=d("reflink|nolink(?!\\()","g").replace("reflink",de).replace("nolink",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:E,anyPunctuation:Fe,autolink:je,blockSkip:ve,br:le,code:Ee,del:E,emStrongLDelim:De,emStrongRDelimAst:Ze,emStrongRDelimUnd:Ne,escape:Ae,link:Ke,nolink:ke,punctuation:Ce,reflink:de,reflinkSearch:We,tag:Ue,text:Ie,url:E},Xe={...X,link:d(/^!?\[(label)\]\((.*?)\)/).replace("label",q).getRegex(),reflink:d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",q).getRegex()},N={...X,emStrongRDelimAst:Ge,emStrongLDelim:He,url:d(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",se).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",se).getRegex()},Je={...N,br:d(le).replace("{2,}","*").getRegex(),text:d(N.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},C={normal:K,gfm:Me,pedantic:ze},M={normal:X,gfm:N,breaks:Je,pedantic:Xe};var Ve={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},ge=l=>Ve[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ge);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,"%");}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,a)=>{let o=false,p=s;for(;--p>=0&&a[p]==="\\";)o=!o;return o?"|":" |"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,"|");return n}function z(l,e,t){let n=l.length;if(n===0)return "";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&true)r++;else break}return l.slice(0,n-r)}function fe(l,e){if(l.indexOf(e[1])===-1)return -1;let t=0;for(let n=0;n<l.length;n++)if(l[n]==="\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function me(l,e,t,n,r){let i=e.href,s=e.title||null,a=l[1].replace(r.other.outputLinkReplace,"$1");n.state.inLink=true;let o={type:l[0].charAt(0)==="!"?"image":"link",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=false,o}function Ye(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`
2556
- `).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`
2557
- `)}var y=class{options;rules;lexer;constructor(e){this.options=e||T;}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return {type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return {type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:z(n,`
2558
- `)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Ye(n,t[3]||"",this.rules);return {type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim());}return {type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return {type:"hr",raw:z(t[0],`
2559
- `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`
2560
- `).split(`
2561
- `),r="",i="",s=[];for(;n.length>0;){let a=false,o=[],p;for(p=0;p<n.length;p++)if(this.rules.other.blockquoteStart.test(n[p]))o.push(n[p]),a=true;else if(!a)o.push(n[p]);else break;n=n.slice(p);let u=o.join(`
2562
- `),c=u.replace(this.rules.other.blockquoteSetextReplace,`
2563
- $1`).replace(this.rules.other.blockquoteSetextReplace2,"");r=r?`${r}
2564
- ${u}`:u,i=i?`${i}
2565
- ${c}`:c;let g=this.lexer.state.top;if(this.lexer.state.top=true,this.lexer.blockTokens(c,s,true),this.lexer.state.top=g,n.length===0)break;let h=s.at(-1);if(h?.type==="code")break;if(h?.type==="blockquote"){let R=h,f=R.raw+`
2566
- `+n.join(`
2567
- `),O=this.blockquote(f);s[s.length-1]=O,r=r.substring(0,r.length-R.raw.length)+O.raw,i=i.substring(0,i.length-R.text.length)+O.text;break}else if(h?.type==="list"){let R=h,f=R.raw+`
2568
- `+n.join(`
2569
- `),O=this.list(f);s[s.length-1]=O,r=r.substring(0,r.length-h.raw.length)+O.raw,i=i.substring(0,i.length-R.raw.length)+O.raw,n=f.substring(s.at(-1).raw.length).split(`
2570
- `);continue}}return {type:"blockquote",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:false,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");let s=this.rules.other.listItemRegex(n),a=false;for(;e;){let p=false,u="",c="";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;u=t[0],e=e.substring(u.length);let g=t[2].split(`
2571
- `,1)[0].replace(this.rules.other.listReplaceTabs,H=>" ".repeat(3*H.length)),h=e.split(`
2572
- `,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(u+=h+`
2573
- `,e=e.substring(h.length+1),p=true),!p){let H=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f);for(;e;){let Z=e.split(`
2574
- `,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),A=h):A=h.replace(this.rules.other.tabCharGlobal," "),te.test(h)||ne.test(h)||xe.test(h)||H.test(h)||ee.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`
2575
- `+A.slice(f);else {if(R||g.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||te.test(g)||ne.test(g)||ee.test(g))break;c+=`
2576
- `+h;}!R&&!h.trim()&&(R=true),u+=Z+`
2577
- `,e=e.substring(Z.length+1),g=A.slice(f);}}i.loose||(a?i.loose=true:this.rules.other.doubleBlankLine.test(u)&&(a=true));let O=null,Y;this.options.gfm&&(O=this.rules.other.listIsTask.exec(c),O&&(Y=O[0]!=="[ ] ",c=c.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:u,task:!!O,checked:Y,loose:false,text:c,tokens:[]}),i.raw+=u;}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let p=0;p<i.items.length;p++)if(this.lexer.state.top=false,i.items[p].tokens=this.lexer.blockTokens(i.items[p].text,[]),!i.loose){let u=i.items[p].tokens.filter(g=>g.type==="space"),c=u.length>0&&u.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c;}if(i.loose)for(let p=0;p<i.items.length;p++)i.items[p].loose=true;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return {type:"html",block:true,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return {type:"def",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
2578
- `):[],s={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push("right"):this.rules.other.tableAlignCenter.test(a)?s.align.push("center"):this.rules.other.tableAlignLeft.test(a)?s.align.push("left"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:true,align:s.align[a]});for(let a of i)s.rows.push(V(a,s.header.length).map((o,p)=>({text:o,tokens:this.lexer.inline(o),header:false,align:s.align[p]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return {type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
2579
- `?t[1].slice(0,-1):t[1];return {type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return {type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return {type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return !this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=true:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=false),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=true:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=false),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:false,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else {let s=fe(t[2],"()");if(s===-2)return;if(s>-1){let o=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]="";}}let r=t[2],i="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3]);}else i=t[3]?t[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return {type:"text",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,p=s,u=0,c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){p+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){u+=o;continue}if(p-=o,p>0)continue;o=Math.min(o,o+p+u);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return {type:"em",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return {type:"strong",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return {type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return {type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]==="@"?(n=t[1],r="mailto:"+n):(n=t[1],r=n),{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]==="@")n=t[0],r="mailto:"+n;else {let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?r="http://"+t[0]:r=t[0];}return {type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return {type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:false,inRawBlock:false,top:true};let t={other:m,block:C.normal,inline:M.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t;}static get rules(){return {block:C,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`
2580
- `),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens);}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=false){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal," ").replace(m.spaceLine,""));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),true):false))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`
2581
- `:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
2582
- `)?"":`
2583
- `)+r.raw,s.text+=`
2584
- `+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
2585
- `)?"":`
2586
- `)+r.raw,s.text+=`
2587
- `+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(p=>{o=p.call({lexer:this},a),typeof o=="number"&&o>=0&&(s=Math.min(s,o));}),s<1/0&&s>=0&&(i=e.substring(0,s+1));}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(`
2588
- `)?"":`
2589
- `)+r.raw,s.text+=`
2590
- `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(`
2591
- `)?"":`
2592
- `)+r.raw,s.text+=`
2593
- `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=true,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=false,a="";for(;e;){s||(a=""),s=false;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),true):false))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type==="text"&&u?.type==="text"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let p=e;if(this.options.extensions?.startInline){let u=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g=="number"&&g>=0&&(u=Math.min(u,g));}),u<1/0&&u>=0&&(p=e.substring(0,u+1));}if(o=this.tokenizer.inlineText(p)){e=e.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(a=o.raw.slice(-1)),s=true;let u=t.at(-1);u?.type==="text"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T;}space(e){return ""}code({text:e,lang:t,escaped:n}){let r=(t||"").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,"")+`
2594
- `;return r?'<pre><code class="language-'+w(r)+'">'+(n?i:w(i,true))+`</code></pre>
2595
- `:"<pre><code>"+(n?i:w(i,true))+`</code></pre>
2596
- `}blockquote({tokens:e}){return `<blockquote>
2597
- ${this.parser.parse(e)}</blockquote>
2598
- `}html({text:e}){return e}def(e){return ""}heading({tokens:e,depth:t}){return `<h${t}>${this.parser.parseInline(e)}</h${t}>
2599
- `}hr(e){return `<hr>
2600
- `}list(e){let t=e.ordered,n=e.start,r="";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o);}let i=t?"ol":"ul",s=t&&n!==1?' start="'+n+'"':"";return "<"+i+s+`>
2601
- `+r+"</"+i+`>
2602
- `}listitem(e){let t="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type==="paragraph"?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type==="text"&&(e.tokens[0].tokens[0].text=n+" "+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=true)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:true}):t+=n+" ";}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>
2603
- `}checkbox({checked:e}){return "<input "+(e?'checked="" ':"")+'disabled="" type="checkbox">'}paragraph({tokens:e}){return `<p>${this.parser.parseInline(e)}</p>
2604
- `}table(e){let t="",n="";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r="";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n="";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n});}return r&&(r=`<tbody>${r}</tbody>`),`<table>
2605
- <thead>
2606
- `+t+`</thead>
2607
- `+r+`</table>
2608
- `}tablerow({text:e}){return `<tr>
2609
- ${e}</tr>
2610
- `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return (e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
2611
- `}strong({tokens:e}){return `<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return `<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return `<code>${w(e,true)}</code>`}br(e){return "<br>"}del({tokens:e}){return `<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href="'+e+'"';return t&&(s+=' title="'+w(t)+'"'),s+=">"+r+"</a>",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src="${e}" alt="${n}"`;return t&&(s+=` title="${w(t)}"`),s+=">",s}text(e){return "tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return ""+e}image({text:e}){return ""+e}br(){return ""}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $;}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=true){let n="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=i,o=this.options.extensions.renderers[a.type].call({parser:this},a);if(o!==false||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){n+=o||"";continue}}let s=i;switch(s.type){case "space":{n+=this.renderer.space(s);continue}case "hr":{n+=this.renderer.hr(s);continue}case "heading":{n+=this.renderer.heading(s);continue}case "code":{n+=this.renderer.code(s);continue}case "table":{n+=this.renderer.table(s);continue}case "blockquote":{n+=this.renderer.blockquote(s);continue}case "list":{n+=this.renderer.list(s);continue}case "html":{n+=this.renderer.html(s);continue}case "def":{n+=this.renderer.def(s);continue}case "paragraph":{n+=this.renderer.paragraph(s);continue}case "text":{let a=s,o=this.renderer.text(a);for(;r+1<e.length&&e[r+1].type==="text";)a=e[++r],o+=`
2612
- `+this.renderer.text(a);t?n+=this.renderer.paragraph({type:"paragraph",raw:o,text:o,tokens:[{type:"text",raw:o,text:o,escaped:true}]}):n+=o;continue}default:{let a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}parseInline(e,t=this.renderer){let n="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==false||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=a||"";continue}}let s=i;switch(s.type){case "escape":{n+=t.text(s);break}case "html":{n+=t.html(s);break}case "link":{n+=t.link(s);break}case "image":{n+=t.image(s);break}case "strong":{n+=t.strong(s);break}case "em":{n+=t.em(s);break}case "codespan":{n+=t.codespan(s);break}case "br":{n+=t.br(s);break}case "del":{n+=t.del(s);break}case "text":{n+=t.text(s);break}default:{let a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}};var S=class{options;block;constructor(e){this.options=e||T;}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(true);parseInline=this.parseMarkdown(false);Parser=b;Renderer=P;TextRenderer=$;Lexer=x;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e);}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case "table":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case "list":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t));}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)));}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||false,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===false&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer;}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]));}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens);}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let a=s,o=n.renderer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===false&&(c=p.apply(i,u)),c||""};}r.renderer=i;}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let a=s,o=n.tokenizer[a],p=i[a];i[a]=(...u)=>{let c=o.apply(i,u);return c===false&&(c=p.apply(i,u)),c};}r.tokenizer=i;}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let a=s,o=n.hooks[a],p=i[a];S.passThroughHooks.has(s)?i[a]=u=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return (async()=>{let g=await o.call(i,u);return p.call(i,g)})();let c=o.call(i,u);return p.call(i,c)}:i[a]=(...u)=>{if(this.defaults.async)return (async()=>{let g=await o.apply(i,u);return g===false&&(g=await p.apply(i,u)),g})();let c=o.apply(i,u);return c===false&&(c=p.apply(i,u)),c};}r.hooks=i;}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o};}this.defaults={...this.defaults,...r};}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return (n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===true&&i.async===false)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return (async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,u=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(u):u;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let p=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`
2613
- Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error occurred:</p><pre>"+w(n.message+"",true)+"</pre>";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function k(l,e){return _.parse(l,e)}k.options=k.setOptions=function(l){return _.setOptions(l),k.defaults=_.defaults,G(k.defaults),k};k.getDefaults=L;k.defaults=T;k.use=function(...l){return _.use(...l),k.defaults=_.defaults,G(k.defaults),k};k.walkTokens=function(l,e){return _.walkTokens(l,e)};k.parseInline=_.parseInline;k.Parser=b;k.parser=b.parse;k.Renderer=P;k.TextRenderer=$;k.Lexer=x;k.lexer=x.lex;k.Tokenizer=y;k.Hooks=S;k.parse=k;k.options;k.setOptions;k.use;k.walkTokens;k.parseInline;b.parse;x.lex;
2614
-
2615
- function Circle_check($$renderer, $$props) {
2616
- let { $$slots, $$events, ...props } = $$props;
2617
- const iconData = {
2618
- "name": "circle-check",
2619
- "size": 24,
2620
- "node": [
2621
- ["circle", { "cx": "12", "cy": "12", "r": "10" }],
2622
- ["path", { "d": "m16 9-5.5 5.5L8 12" }]
2623
- ],
2624
- "aliases": ["check-circle-2"]
2625
- };
2626
- Icon($$renderer, spread_props([props, { icon: iconData }]));
2627
- }
2628
- function Circle_x($$renderer, $$props) {
2629
- let { $$slots, $$events, ...props } = $$props;
2630
- const iconData = {
2631
- "name": "circle-x",
2632
- "size": 24,
2633
- "node": [
2634
- ["circle", { "cx": "12", "cy": "12", "r": "10" }],
2635
- ["path", { "d": "m15 9-6 6" }],
2636
- ["path", { "d": "m9 9 6 6" }]
2637
- ],
2638
- "aliases": ["x-circle"]
2639
- };
2640
- Icon($$renderer, spread_props([props, { icon: iconData }]));
2641
- }
2642
- function Panel_right($$renderer, $$props) {
2643
- let { $$slots, $$events, ...props } = $$props;
2644
- const iconData = {
2645
- "name": "panel-right",
2646
- "size": 24,
2647
- "node": [
2648
- [
2649
- "rect",
2650
- { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" }
2651
- ],
2652
- ["path", { "d": "M15 3v18" }]
2653
- ]
2654
- };
2655
- Icon($$renderer, spread_props([props, { icon: iconData }]));
2656
- }
2657
- function Rotate_cw($$renderer, $$props) {
2658
- let { $$slots, $$events, ...props } = $$props;
2659
- const iconData = {
2660
- "name": "rotate-cw",
2661
- "size": 24,
2662
- "node": [
2663
- [
2664
- "path",
2665
- { "d": "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" }
2666
- ],
2667
- ["path", { "d": "M21 3v5h-5" }]
2668
- ]
2669
- };
2670
- Icon($$renderer, spread_props([props, { icon: iconData }]));
2671
- }
2672
- function Unplug($$renderer, $$props) {
2673
- let { $$slots, $$events, ...props } = $$props;
2674
- const iconData = {
2675
- "name": "unplug",
2676
- "size": 24,
2677
- "node": [
2678
- ["path", { "d": "m19 5 3-3" }],
2679
- ["path", { "d": "m2 22 3-3" }],
2680
- [
2681
- "path",
2682
- {
2683
- "d": "M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z"
2684
- }
2685
- ],
2686
- ["path", { "d": "M7.5 13.5 10 11" }],
2687
- ["path", { "d": "M10.5 16.5 13 14" }],
2688
- [
2689
- "path",
2690
- {
2691
- "d": "m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z"
2692
- }
2693
- ]
2694
- ]
2695
- };
2696
- Icon($$renderer, spread_props([props, { icon: iconData }]));
2697
- }
2698
- function shipHealth(h) {
2699
- if (h.stepFailed.length || h.trouble.some((t) => t.status === "failed")) {
2700
- return { label: "Something failed", tone: "danger" };
2701
- }
2702
- const n = h.needsYou.length;
2703
- if (n) return { label: `${n} need${n === 1 ? "s" : ""} you`, tone: "sea" };
2704
- if (h.trouble.length) return { label: "Keeping an eye on a problem", tone: "warning" };
2705
- return { label: "All well", tone: "success" };
2706
- }
2707
- const cache = /* @__PURE__ */ new Map();
2708
- const MAX_CACHE = 500;
2709
- function markdown(text) {
2710
- let html2 = cache.get(text);
2711
- if (html2 === void 0) {
2712
- html2 = purify_default.sanitize(
2713
- k.parse(text, { async: false, gfm: true, breaks: false })
2714
- );
2715
- html2 = html2.replace(/<a /g, '<a target="_blank" rel="noreferrer" ');
2716
- if (cache.size > MAX_CACHE) cache.clear();
2717
- cache.set(text, html2);
2718
- }
2719
- return html2;
2720
- }
2721
- function chipLabel(r, max = 34) {
2722
- const title = r.title.length > max ? `${r.title.slice(0, max - 1)}…` : r.title;
2723
- const num = r.url?.match(/\/pull\/(\d+)/)?.[1];
2724
- return r.kind === "pr" ? `PR${num ? ` #${num}` : ""} ${title}` : `# ${title}`;
2725
- }
2726
- const EXPANDED = /\[(?:PR (https?:\/\/\S+) — )?task ([A-Za-z0-9][A-Za-z0-9._-]*): ([^\]\n]+)\]/g;
2727
- function parseRefs(text) {
2728
- const out = [];
2729
- let at = 0;
2730
- for (const m of text.matchAll(EXPANDED)) {
2731
- if (m.index > at) out.push(text.slice(at, m.index));
2732
- out.push({
2733
- kind: m[1] ? "pr" : "task",
2734
- id: m[2],
2735
- title: m[3].trim(),
2736
- project: null,
2737
- url: m[1] ?? null
2738
- });
2739
- at = m.index + m[0].length;
2740
- }
2741
- if (at < text.length) out.push(text.slice(at));
2742
- return out;
2743
- }
2744
- function Activity($$renderer, $$props) {
2745
- $$renderer.component(($$renderer2) => {
2746
- let { steps, live: live2 = false } = $$props;
2747
- let open = false;
2748
- function label(s) {
2749
- if (s.kind === "thinking") {
2750
- return {
2751
- verb: s.ms != null && s.ms >= 1e3 ? `Thought for ${duration(s.ms)}` : "Thought",
2752
- summary: ""
2753
- };
2754
- }
2755
- if (s.kind === "context") return { verb: s.label, summary: "" };
2756
- return { verb: s.verb, summary: s.summary };
2757
- }
2758
- const latest = derived(() => label(steps[steps.length - 1]));
2759
- $$renderer2.push(`<div><button class="flex max-w-full cursor-pointer items-center gap-2 rounded-md border border-hair bg-muted/50 px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-expanded", open)}>`);
2760
- if (live2) {
2761
- $$renderer2.push("<!--[0-->");
2762
- Loader_circle($$renderer2, {
2763
- class: "size-3.5 shrink-0 animate-spin text-sea",
2764
- "aria-hidden": "true"
2765
- });
2766
- $$renderer2.push(`<!----> <span class="truncate">${escape_html(latest().verb)} ${escape_html(latest().summary)}</span>`);
2767
- } else {
2768
- $$renderer2.push(`<!--[-1--><span class="truncate">${escape_html(activitySummary(steps))}</span>`);
2769
- }
2770
- $$renderer2.push(`<!--]--> `);
2771
- Chevron_right($$renderer2, {
2772
- class: `size-3.5 shrink-0 transition-transform ${""}`,
2773
- "aria-hidden": "true"
2774
- });
2775
- $$renderer2.push(`<!----></button> `);
2776
- {
2777
- $$renderer2.push("<!--[-1-->");
2778
- }
2779
- $$renderer2.push(`<!--]--></div>`);
2780
- });
2781
- }
2782
- function Avatar($$renderer, $$props) {
2783
- let { class: className = "" } = $$props;
2784
- const SPOKES = [0, 45, 90, 135, 180, 225, 270, 315];
2785
- $$renderer.push(`<svg viewBox="0 0 32 32"${attr_class(`shrink-0 ${stringify(className)}`)} role="img" aria-label="Firstmate" xmlns="http://www.w3.org/2000/svg"><circle cx="16" cy="16" r="15.25" class="fill-primary stroke-brass" stroke-width="1.5"></circle><g class="fill-none stroke-primary-foreground" stroke-linecap="round"><circle cx="16" cy="16" r="7" stroke-width="1.6"></circle><!--[-->`);
2786
- const each_array = ensure_array_like(SPOKES);
2787
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2788
- let a = each_array[$$index];
2789
- $$renderer.push(`<line x1="16" y1="12.4" x2="16" y2="5.6" stroke-width="1.3"${attr("transform", `rotate(${stringify(a)} 16 16)`)}></line>`);
2790
- }
2791
- $$renderer.push(`<!--]--></g><circle cx="16" cy="16" r="2.4" class="fill-primary-foreground"></circle><!--[-->`);
2792
- const each_array_1 = ensure_array_like(SPOKES);
2793
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
2794
- let a = each_array_1[$$index_1];
2795
- $$renderer.push(`<circle cx="16" cy="5.2" r="1.3" class="fill-primary-foreground"${attr("transform", `rotate(${stringify(a)} 16 16)`)}></circle>`);
2796
- }
2797
- $$renderer.push(`<!--]--></svg>`);
2798
- }
2799
- function Composer($$renderer, $$props) {
2800
- $$renderer.component(($$renderer2) => {
2801
- let { via, reason, working } = $$props;
2802
- const canSend = derived(() => via !== null);
2803
- let editor = void 0;
2804
- let empty = true;
2805
- let stopping = false;
2806
- const placeholder = derived(() => via === "session" ? "Message Firstmate · / for commands · # to mention a task" : via === "inbox" ? "Message Firstmate’s inbox · # to mention a task" : reason ?? "Firstmate is not running here.");
2807
- $$renderer2.push(`<div class="relative">`);
2808
- {
2809
- $$renderer2.push("<!--[-1-->");
2810
- }
2811
- $$renderer2.push(`<!--]--> <div${attr_class(`flex items-end gap-2 rounded-lg border border-input bg-card p-2 pl-4 shadow-sm focus-within:ring-2 focus-within:ring-ring/30 ${canSend() ? "" : "opacity-70"}`)}><div${attr("contenteditable", canSend() ? "true" : "false")} role="textbox"${attr("tabindex", canSend() ? 0 : -1)} aria-multiline="true" aria-label="Message Firstmate"${attr("aria-disabled", !canSend())}${attr("data-placeholder", placeholder())}${attr_class(`editor no-scrollbar max-h-48 min-h-10 flex-1 overflow-y-auto py-2 text-base leading-relaxed whitespace-pre-wrap outline-none ${"is-empty"} ${canSend() ? "" : "cursor-not-allowed"}`, "svelte-w61w6e")}></div> `);
2812
- MicButton($$renderer2, {
2813
- field: editor,
2814
- target: () => editableTarget(editor),
2815
- label: "Dictate a message",
2816
- disabled: !canSend()
2817
- });
2818
- $$renderer2.push(`<!----> `);
2819
- if (working && empty && via === "session") {
2820
- $$renderer2.push(`<!--[0--><button aria-label="Stop Firstmate" title="Stop what Firstmate is doing (Escape)"${attr("disabled", stopping, true)} class="flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-full bg-foreground text-background transition-opacity disabled:opacity-40">`);
2821
- {
2822
- $$renderer2.push("<!--[-1-->");
2823
- Square($$renderer2, { class: "size-3.5 fill-current" });
2824
- }
2825
- $$renderer2.push(`<!--]--></button>`);
2826
- } else {
2827
- $$renderer2.push(`<!--[-1--><button aria-label="Send"${attr("disabled", empty, true)} class="flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-full bg-foreground text-background transition-opacity disabled:cursor-not-allowed disabled:opacity-30">`);
2828
- Arrow_up($$renderer2, { class: "size-4" });
2829
- $$renderer2.push(`<!----></button>`);
2830
- }
2831
- $$renderer2.push(`<!--]--></div> `);
2832
- if (composerBus.outgoing && !canSend()) {
2833
- $$renderer2.push(`<!--[2--><p class="mt-2 text-xs text-muted-foreground">Your spec is ready and will be sent as soon as Firstmate can take messages.</p>`);
2834
- } else if (via === "inbox") {
2835
- $$renderer2.push(`<!--[3--><p class="mt-2 text-xs text-muted-foreground">${escape_html("Firstmate runs in another terminal, so messages go to its inbox.")}</p>`);
2836
- } else {
2837
- $$renderer2.push("<!--[-1-->");
2838
- }
2839
- $$renderer2.push(`<!--]--></div>`);
2840
- });
2841
- }
2842
- function PickerCard($$renderer, $$props) {
2843
- $$renderer.component(($$renderer2) => {
2844
- let { picker } = $$props;
2845
- let busy = false;
2846
- $$renderer2.push(`<div class="max-w-[80ch] rounded-lg border border-t-2 border-t-sea bg-card p-4" role="group" aria-label="Firstmate is asking you"><p class="mb-2 flex items-center gap-2 font-display text-[1.15rem] font-medium">`);
2847
- Message_circle_question_mark($$renderer2, { class: "size-4 text-sea", "aria-hidden": "true" });
2848
- $$renderer2.push(`<!---->Firstmate is asking you `);
2849
- {
2850
- $$renderer2.push("<!--[-1-->");
2851
- }
2852
- $$renderer2.push(`<!--]--></p> `);
2853
- if (picker.tabs.length > 1) {
2854
- $$renderer2.push(`<!--[0--><div class="mb-3 flex flex-wrap gap-1.5 text-xs"><!--[-->`);
2855
- const each_array = ensure_array_like(picker.tabs);
2856
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2857
- let tab = each_array[$$index];
2858
- $$renderer2.push(`<span${attr_class(`flex items-center gap-1 rounded border px-1.5 py-0.5 ${tab.done ? "text-muted-foreground" : "border-sea/50 text-foreground"}`)}>`);
2859
- if (tab.done) {
2860
- $$renderer2.push("<!--[0-->");
2861
- Check($$renderer2, { class: "size-3", "aria-label": "Answered" });
2862
- } else {
2863
- $$renderer2.push("<!--[-1-->");
2864
- }
2865
- $$renderer2.push(`<!--]-->${escape_html(tab.label)}</span>`);
2866
- }
2867
- $$renderer2.push(`<!--]--></div>`);
2868
- } else {
2869
- $$renderer2.push("<!--[-1-->");
2870
- }
2871
- $$renderer2.push(`<!--]--> `);
2872
- if (picker.title) {
2873
- $$renderer2.push(`<!--[0--><p class="mb-3 text-base whitespace-pre-line">${escape_html(picker.title)}</p>`);
2874
- } else {
2875
- $$renderer2.push("<!--[-1-->");
2876
- }
2877
- $$renderer2.push(`<!--]--> <div class="flex flex-col gap-1.5"><!--[-->`);
2878
- const each_array_1 = ensure_array_like(picker.options);
2879
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
2880
- let o = each_array_1[$$index_1];
2881
- if (o.freeText) {
2882
- $$renderer2.push(`<!--[0--><button class="flex w-full cursor-pointer items-center gap-3 rounded-lg border border-dashed bg-background px-3 py-2 text-left text-sm text-muted-foreground hover:border-sea/60">`);
2883
- Square_terminal($$renderer2, { class: "size-4 shrink-0", "aria-hidden": "true" });
2884
- $$renderer2.push(`<!----> <span>Type an answer in Firstmate’s terminal</span></button>`);
2885
- } else {
2886
- $$renderer2.push(`<!--[-1--><button${attr_class(`flex w-full cursor-pointer items-start gap-3 rounded-lg border px-3 py-2 text-left text-sm transition-colors disabled:cursor-default ${o.checked ? "border-sea bg-sea/10" : "bg-background hover:border-sea/60"}`)}${attr("disabled", busy, true)}${attr("aria-pressed", o.checked === null ? void 0 : o.checked)}><span class="tabular w-4 shrink-0 text-muted-foreground">`);
2887
- if (o.checked) {
2888
- $$renderer2.push("<!--[0-->");
2889
- Check($$renderer2, { class: "size-4 text-sea", "aria-label": "Chosen" });
2890
- } else {
2891
- $$renderer2.push(`<!--[-1-->${escape_html(o.n)}`);
2892
- }
2893
- $$renderer2.push(`<!--]--></span> <span class="min-w-0"><span class="font-medium">${escape_html(o.label)}</span> `);
2894
- if (o.description) {
2895
- $$renderer2.push(`<!--[0--><span class="block text-xs text-muted-foreground">${escape_html(o.description)}</span>`);
2896
- } else {
2897
- $$renderer2.push("<!--[-1-->");
2898
- }
2899
- $$renderer2.push(`<!--]--></span></button>`);
2900
- }
2901
- $$renderer2.push(`<!--]-->`);
2902
- }
2903
- $$renderer2.push(`<!--]--></div> <div class="mt-3 flex flex-wrap items-center gap-3 text-sm">`);
2904
- if (picker.multiSelect && picker.submitMoves !== null) {
2905
- $$renderer2.push(`<!--[0--><button class="cursor-pointer rounded-lg bg-foreground px-3 py-1.5 font-medium text-background disabled:opacity-40"${attr("disabled", !picker.options.some((o) => o.checked), true)}>Done</button>`);
2906
- } else {
2907
- $$renderer2.push("<!--[-1-->");
2908
- }
2909
- $$renderer2.push(`<!--]--> <button class="flex cursor-pointer items-center gap-1.5 text-muted-foreground hover:text-foreground">`);
2910
- Square_terminal($$renderer2, { class: "size-4", "aria-hidden": "true" });
2911
- $$renderer2.push(`<!---->Answer in the terminal instead</button> `);
2912
- {
2913
- $$renderer2.push("<!--[-1-->");
2914
- }
2915
- $$renderer2.push(`<!--]--></div></div>`);
2916
- });
2917
- }
2918
- function QuestionCard($$renderer, $$props) {
2919
- $$renderer.component(($$renderer2) => {
2920
- let { part } = $$props;
2921
- if (part.answers) {
2922
- $$renderer2.push(`<!--[0--><div class="flex max-w-[80ch] flex-col gap-1 text-sm text-muted-foreground"><!--[-->`);
2923
- const each_array = ensure_array_like(part.questions);
2924
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2925
- let q = each_array[$$index];
2926
- $$renderer2.push(`<p class="flex items-start gap-2">`);
2927
- Circle_check($$renderer2, {
2928
- class: "mt-0.5 size-4 shrink-0 text-success",
2929
- "aria-hidden": "true"
2930
- });
2931
- $$renderer2.push(`<!----> <span>${escape_html(q.question)} <span class="font-medium text-foreground">${escape_html(part.answers[q.question] ?? "No answer")}</span></span></p>`);
2932
- }
2933
- $$renderer2.push(`<!--]--></div>`);
2934
- } else {
2935
- $$renderer2.push("<!--[-1-->");
2936
- }
2937
- $$renderer2.push(`<!--]-->`);
2938
- });
2939
- }
2940
- function Chat($$renderer, $$props) {
2941
- $$renderer.component(($$renderer2) => {
2942
- let {
2943
- railOpen,
2944
- waiting = 0,
2945
- health,
2946
- now,
2947
- pluginEntries = []
2948
- /** Items waiting on the captain, for the rail button's dot. */
2949
- /** Plugin entries for the fleet, whose bridge.card cards follow replies that link them. */
2950
- } = $$props;
2951
- const HEALTH_ICON = {
2952
- success: Circle_check,
2953
- sea: Hand,
2954
- warning: Triangle_alert,
2955
- danger: Circle_x
2956
- };
2957
- const HEALTH_TEXT = {
2958
- success: "text-success",
2959
- sea: "text-sea",
2960
- warning: "text-warning",
2961
- danger: "text-danger"
2962
- };
2963
- const session = derived(() => firstmateChat.session);
2964
- const chat = derived(() => firstmateChat.chat);
2965
- const items = derived(() => chat().items);
2966
- const lastItem = derived(() => items()[items().length - 1]);
2967
- const working = derived(() => session()?.busy === true || lastItem()?.kind === "turn" && !lastItem().done && !lastItem().interrupted);
2968
- const picker = derived(() => session()?.canSend ? session().picker : null);
2969
- const waitingOnAnswer = derived(() => !!picker());
2970
- const lastCheck = derived(() => chat().checks[chat().checks.length - 1]);
2971
- const checking = derived(() => !!lastCheck() && !lastCheck().done);
2972
- const HIcon = derived(() => HEALTH_ICON[health.tone]);
2973
- const canSend = derived(() => session()?.canSend === true);
2974
- const via = derived(() => canSend() ? "session" : session()?.state === "external" && currentHealth()?.messaging.available ? "inbox" : null);
2975
- let showChecks = false;
2976
- let terminalOpen = false;
2977
- let openNotice = {};
2978
- let starting = false;
2979
- const GROUP_MS = 5 * 6e4;
2980
- function groupedWithPrevious(i) {
2981
- const a = items()[i - 1];
2982
- const b = items()[i];
2983
- if (!a || !b || a.kind !== b.kind || b.kind !== "user" && b.kind !== "turn") return false;
2984
- return Date.parse(b.at) - Date.parse(a.at) <= GROUP_MS;
2985
- }
2986
- const time = (at) => new Date(at).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
2987
- const status = derived(() => {
2988
- if (firstmateChat.connection === "lost") return { dot: "bg-danger", label: "Reconnecting" };
2989
- if (!session()) return { dot: "bg-muted-foreground", label: "Connecting" };
2990
- if (session().state === "external") return { dot: "bg-muted-foreground", label: "Read-only" };
2991
- if (session().state === "starting") return { dot: "animate-pulse bg-sea", label: "Starting" };
2992
- if (session().state !== "ours") return { dot: "bg-muted-foreground", label: "Not running" };
2993
- if (waitingOnAnswer()) return { dot: "bg-sea", label: "Asking you" };
2994
- return working() ? { dot: "animate-pulse bg-sea", label: "Working" } : { dot: "bg-success", label: "Waiting for you" };
2995
- });
2996
- const isLive = (item, pi) => working() && item === lastItem() && item.kind === "turn" && pi === item.parts.length - 1;
2997
- $$renderer2.push(`<section class="relative flex min-h-0 min-w-0 flex-1 flex-col bg-panel" aria-label="Firstmate"><div class="border-b"><div class="flex h-11 items-center gap-3 px-4 text-sm sm:px-6 lg:px-10"><span class="font-medium">Firstmate</span> `);
2998
- if (chat().title) {
2999
- $$renderer2.push(`<!--[0--><span class="hidden truncate text-muted-foreground sm:inline">${escape_html(chat().title)}</span>`);
3000
- } else {
3001
- $$renderer2.push("<!--[-1-->");
3002
- }
3003
- $$renderer2.push(`<!--]--> <div class="relative ml-auto shrink-0"><button class="flex cursor-pointer items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs transition-colors hover:bg-muted"${attr("aria-expanded", showChecks)} aria-haspopup="dialog">`);
3004
- if (HIcon()) {
3005
- $$renderer2.push("<!--[-->");
3006
- HIcon()($$renderer2, {
3007
- class: `size-3.5 ${stringify(HEALTH_TEXT[health.tone])}`,
3008
- "aria-hidden": "true"
3009
- });
3010
- $$renderer2.push("<!--]-->");
3011
- } else {
3012
- $$renderer2.push("<!--[!-->");
3013
- $$renderer2.push("<!--]-->");
3014
- }
3015
- $$renderer2.push(` <span class="font-medium">${escape_html(health.label)}</span> <span class="hidden text-muted-foreground md:inline">· `);
3016
- if (checking()) {
3017
- $$renderer2.push(`<!--[0--><span class="inline-flex items-center gap-1">`);
3018
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
3019
- $$renderer2.push(`<!---->checking now</span>`);
3020
- } else if (lastCheck()) {
3021
- $$renderer2.push(`<!--[1-->checked ${escape_html(ago(lastCheck().at, now))}`);
3022
- } else {
3023
- $$renderer2.push(`<!--[-1-->no checks yet`);
3024
- }
3025
- $$renderer2.push(`<!--]--></span></button> `);
3026
- {
3027
- $$renderer2.push("<!--[-1-->");
3028
- }
3029
- $$renderer2.push(`<!--]--></div> <span class="hidden shrink-0 items-center gap-2 text-muted-foreground md:flex"><span${attr_class(`size-2 rounded-full ${stringify(status().dot)}`)} aria-hidden="true"></span>${escape_html(status().label)}</span> `);
3030
- if (canSend()) {
3031
- $$renderer2.push(`<!--[0--><button${attr_class(`flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-md transition-colors hover:bg-muted ${"text-muted-foreground"}`)}${attr("aria-label", "Show Firstmate’s terminal")}${attr("aria-pressed", terminalOpen)} title="Firstmate’s own terminal, for anything the chat cannot show">`);
3032
- Square_terminal($$renderer2, { class: "size-4" });
3033
- $$renderer2.push(`<!----></button>`);
3034
- } else {
3035
- $$renderer2.push("<!--[-1-->");
3036
- }
3037
- $$renderer2.push(`<!--]--> <button class="relative -mr-2 flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-label", railOpen ? "Hide tasks and decisions" : "Show tasks and decisions")}${attr("aria-pressed", railOpen)}>`);
3038
- Panel_right($$renderer2, { class: "size-4" });
3039
- $$renderer2.push(`<!----> `);
3040
- if (waiting && !railOpen) {
3041
- $$renderer2.push(`<!--[0--><span class="absolute top-1.5 right-1.5 size-2 rounded-full bg-sea"${attr("aria-label", `${stringify(waiting)} waiting on you`)}></span>`);
3042
- } else {
3043
- $$renderer2.push("<!--[-1-->");
3044
- }
3045
- $$renderer2.push(`<!--]--></button></div></div> <div class="relative min-h-0 flex-1"><div class="no-scrollbar h-full overflow-y-auto"><div class="flex flex-col gap-6 px-4 pt-8 pb-10 sm:px-6 lg:px-10">`);
3046
- if (firstmateChat.source?.truncated) {
3047
- $$renderer2.push(`<!--[0--><p class="text-xs text-muted-foreground">Earlier messages are not shown here; the full conversation is in Firstmate’s terminal.</p>`);
3048
- } else {
3049
- $$renderer2.push("<!--[-1-->");
3050
- }
3051
- $$renderer2.push(`<!--]--> `);
3052
- if (session() && session().state !== "ours" && session().state !== "external") {
3053
- $$renderer2.push(`<!--[0--><div class="my-8 flex max-w-md flex-col items-start gap-3"><p class="font-medium">${escape_html(session().state === "starting" ? "Starting Firstmate…" : "Firstmate is not running")}</p> `);
3054
- if (session().reason && session().state !== "starting") {
3055
- $$renderer2.push(`<!--[0--><p class="text-sm text-muted-foreground">${escape_html(session().reason)}</p>`);
3056
- } else {
3057
- $$renderer2.push("<!--[-1-->");
3058
- }
3059
- $$renderer2.push(`<!--]--> `);
3060
- if (session().state === "none") {
3061
- $$renderer2.push(`<!--[0--><button class="flex cursor-pointer items-center gap-2 rounded-lg bg-foreground px-4 py-2 text-sm font-medium text-background disabled:opacity-50"${attr("disabled", starting, true)}>`);
3062
- {
3063
- $$renderer2.push("<!--[-1-->");
3064
- }
3065
- $$renderer2.push(`<!--]-->Start Firstmate here</button> <p class="text-xs text-muted-foreground">It runs in Firstmate’s checkout${escape_html(session().skipPermissions ? " with --dangerously-skip-permissions" : "")}, inside a tmux session that keeps going when you close Wheelhouse.</p> `);
3066
- {
3067
- $$renderer2.push("<!--[-1-->");
3068
- }
3069
- $$renderer2.push(`<!--]-->`);
3070
- } else {
3071
- $$renderer2.push("<!--[-1-->");
3072
- }
3073
- $$renderer2.push(`<!--]--></div>`);
3074
- } else if (!items().length) {
3075
- $$renderer2.push(`<!--[1--><p class="py-20 text-sm text-muted-foreground">${escape_html(session() ? "No messages yet. Say hello to Firstmate." : "Reading the conversation…")}</p>`);
3076
- } else {
3077
- $$renderer2.push("<!--[-1-->");
3078
- }
3079
- $$renderer2.push(`<!--]--> <!--[-->`);
3080
- const each_array_1 = ensure_array_like(items());
3081
- for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {
3082
- let item = each_array_1[i];
3083
- const grouped = groupedWithPrevious(i);
3084
- if (item.kind === "user") {
3085
- $$renderer2.push(`<!--[0--><article${attr_class(`msg msg-captain ${grouped ? "msg-grouped" : ""}`)}${attr("aria-label", `You, ${stringify(time(item.at))}`)}>`);
3086
- if (grouped) {
3087
- $$renderer2.push(`<!--[0--><span class="msg-gutter" aria-hidden="true"></span>`);
3088
- } else {
3089
- $$renderer2.push(`<!--[-1--><span class="captain-avatar">C</span>`);
3090
- }
3091
- $$renderer2.push(`<!--]--> <div class="min-w-0 flex-1">`);
3092
- if (!grouped) {
3093
- $$renderer2.push(`<!--[0--><header class="msg-head"><span class="msg-name">You</span><time${attr("datetime", item.at)}>${escape_html(time(item.at))}</time> `);
3094
- if (item.queued) {
3095
- $$renderer2.push(`<!--[0--><span>· sent while Firstmate was working</span>`);
3096
- } else {
3097
- $$renderer2.push("<!--[-1-->");
3098
- }
3099
- $$renderer2.push(`<!--]--></header>`);
3100
- } else {
3101
- $$renderer2.push("<!--[-1-->");
3102
- }
3103
- $$renderer2.push(`<!--]--> <div${attr_class(`bubble bubble-captain ${item.command ? "font-mono text-sm" : ""}`)}><!--[-->`);
3104
- const each_array_2 = ensure_array_like(parseRefs(item.text));
3105
- for (let pi = 0, $$length2 = each_array_2.length; pi < $$length2; pi++) {
3106
- let piece = each_array_2[pi];
3107
- if (typeof piece === "string") {
3108
- $$renderer2.push(`<!--[0-->${escape_html(piece)}`);
3109
- } else {
3110
- $$renderer2.push(`<!--[-1--><a${attr("href", `/tasks/${stringify(encodeURIComponent(piece.id))}`)} class="mx-px inline-block rounded-md bg-sea/15 px-1.5 text-[0.875em] font-medium whitespace-nowrap text-sea no-underline hover:bg-sea/25"${attr("title", piece.url ?? piece.title)}>${escape_html(chipLabel(piece))}</a>`);
3111
- }
3112
- $$renderer2.push(`<!--]-->`);
3113
- }
3114
- $$renderer2.push(`<!--]--></div></div></article>`);
3115
- } else if (item.kind === "output") {
3116
- $$renderer2.push(`<!--[1--><pre class="no-scrollbar max-h-80 max-w-[80ch] overflow-auto rounded-lg bg-muted/60 p-3 font-mono text-xs whitespace-pre-wrap text-muted-foreground">${escape_html(item.text)}</pre>`);
3117
- } else if (item.kind === "notice") {
3118
- $$renderer2.push(`<!--[2--><div class="flex flex-col items-start"><button class="-ml-3 flex max-w-full cursor-pointer items-center gap-2 rounded-full px-3 py-1 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"${attr("aria-expanded", !!openNotice[item.id])}>`);
3119
- Bell($$renderer2, { class: "size-3.5 shrink-0", "aria-hidden": "true" });
3120
- $$renderer2.push(`<!----> <span class="truncate">${escape_html(item.title)} · ${escape_html(time(item.at))}</span> `);
3121
- Chevron_right($$renderer2, {
3122
- class: `size-3.5 shrink-0 transition-transform ${openNotice[item.id] ? "rotate-90" : ""}`,
3123
- "aria-hidden": "true"
3124
- });
3125
- $$renderer2.push(`<!----></button> `);
3126
- if (openNotice[item.id]) {
3127
- $$renderer2.push(`<!--[0--><div class="mt-2 w-full max-w-[80ch] rounded-lg border bg-card px-4 py-3 text-sm whitespace-pre-wrap text-muted-foreground">${escape_html(item.detail)}</div>`);
3128
- } else {
3129
- $$renderer2.push("<!--[-1-->");
3130
- }
3131
- $$renderer2.push(`<!--]--></div>`);
3132
- } else {
3133
- $$renderer2.push(`<!--[-1--><article${attr_class(`msg msg-firstmate ${grouped ? "msg-grouped" : ""}`)}${attr("aria-label", `Firstmate, ${stringify(time(item.at))}`)}>`);
3134
- if (grouped) {
3135
- $$renderer2.push(`<!--[0--><span class="msg-gutter" aria-hidden="true"></span>`);
3136
- } else {
3137
- $$renderer2.push("<!--[-1-->");
3138
- Avatar($$renderer2, { class: "size-8" });
3139
- }
3140
- $$renderer2.push(`<!--]--> <div class="flex min-w-0 flex-1 flex-col gap-2">`);
3141
- if (!grouped) {
3142
- $$renderer2.push(`<!--[0--><header class="msg-head"><span class="msg-name">Firstmate</span><time${attr("datetime", item.at)}>${escape_html(time(item.at))}</time></header>`);
3143
- } else {
3144
- $$renderer2.push("<!--[-1-->");
3145
- }
3146
- $$renderer2.push(`<!--]--> <!--[-->`);
3147
- const each_array_3 = ensure_array_like(item.parts);
3148
- for (let pi = 0, $$length2 = each_array_3.length; pi < $$length2; pi++) {
3149
- let part = each_array_3[pi];
3150
- if (part.kind === "text") {
3151
- $$renderer2.push(`<!--[0--><div class="chat-md bubble bubble-firstmate">${html$2(markdown(part.text))}</div> <!--[-->`);
3152
- const each_array_4 = ensure_array_like(matchBridgeCards(part.text, pluginEntries));
3153
- for (let $$index_2 = 0, $$length3 = each_array_4.length; $$index_2 < $$length3; $$index_2++) {
3154
- let { entry, card } = each_array_4[$$index_2];
3155
- $$renderer2.push(`<div class="max-w-[80ch] rounded-xl border bg-card p-4" data-slot="bridge.card"><p class="font-medium">${escape_html(card.title)}</p> <div class="mt-2">`);
3156
- Blocks($$renderer2, { blocks: card.blocks });
3157
- $$renderer2.push(`<!----></div></div>`);
3158
- }
3159
- $$renderer2.push(`<!--]-->`);
3160
- } else if (part.kind === "question") {
3161
- $$renderer2.push("<!--[1-->");
3162
- QuestionCard($$renderer2, { part });
3163
- } else {
3164
- $$renderer2.push("<!--[-1-->");
3165
- Activity($$renderer2, { steps: part.steps, live: isLive(item, pi) });
3166
- }
3167
- $$renderer2.push(`<!--]-->`);
3168
- }
3169
- $$renderer2.push(`<!--]--> `);
3170
- if (item.interrupted) {
3171
- $$renderer2.push(`<!--[0--><span class="text-xs text-muted-foreground">Stopped</span>`);
3172
- } else if (item.done && item.durationMs) {
3173
- $$renderer2.push(`<!--[1--><span class="text-xs text-muted-foreground">Worked for ${escape_html(duration(item.durationMs))}</span>`);
3174
- } else {
3175
- $$renderer2.push("<!--[-1-->");
3176
- }
3177
- $$renderer2.push(`<!--]--></div></article>`);
3178
- }
3179
- $$renderer2.push(`<!--]-->`);
3180
- }
3181
- $$renderer2.push(`<!--]--> <!--[-->`);
3182
- const each_array_5 = ensure_array_like(firstmateChat.pending);
3183
- for (let pi = 0, $$length = each_array_5.length; pi < $$length; pi++) {
3184
- let p = each_array_5[pi];
3185
- const grouped = pi > 0 || lastItem()?.kind === "user";
3186
- $$renderer2.push(`<article${attr_class(`msg msg-captain ${grouped ? "msg-grouped" : ""}`)}${attr("data-pending", p.state)}${attr("aria-label", `You, ${stringify(pendingLabel(p))}`)}>`);
3187
- if (grouped) {
3188
- $$renderer2.push(`<!--[0--><span class="msg-gutter" aria-hidden="true"></span>`);
3189
- } else {
3190
- $$renderer2.push(`<!--[-1--><span class="captain-avatar">C</span>`);
3191
- }
3192
- $$renderer2.push(`<!--]--> <div class="min-w-0 flex-1">`);
3193
- if (!grouped) {
3194
- $$renderer2.push(`<!--[0--><header class="msg-head"><span class="msg-name">You</span></header>`);
3195
- } else {
3196
- $$renderer2.push("<!--[-1-->");
3197
- }
3198
- $$renderer2.push(`<!--]--> <div${attr_class(`bubble bubble-captain border-dashed ${p.state === "failed" ? "border-danger/60" : "opacity-60"}`)}><!--[-->`);
3199
- const each_array_6 = ensure_array_like(parseRefs(p.text));
3200
- for (let ri = 0, $$length2 = each_array_6.length; ri < $$length2; ri++) {
3201
- let piece = each_array_6[ri];
3202
- if (typeof piece === "string") {
3203
- $$renderer2.push(`<!--[0-->${escape_html(piece)}`);
3204
- } else {
3205
- $$renderer2.push(`<!--[-1--><span class="mx-px inline-block rounded-md bg-sea/15 px-1.5 text-[0.875em] font-medium whitespace-nowrap text-sea">${escape_html(chipLabel(piece))}</span>`);
3206
- }
3207
- $$renderer2.push(`<!--]-->`);
3208
- }
3209
- $$renderer2.push(`<!--]--></div> <p${attr_class(`mt-1.5 flex flex-wrap items-center gap-1.5 text-xs ${p.state === "failed" ? "text-danger" : "text-muted-foreground"}`)} role="status">`);
3210
- if (p.state === "failed") {
3211
- $$renderer2.push("<!--[0-->");
3212
- Circle_x($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
3213
- $$renderer2.push(`<!---->${escape_html(pendingLabel(p))} <button class="ml-1 inline-flex cursor-pointer items-center gap-1 rounded px-1.5 py-0.5 font-medium text-foreground hover:bg-muted">`);
3214
- Rotate_cw($$renderer2, { class: "size-3", "aria-hidden": "true" });
3215
- $$renderer2.push(`<!---->Retry</button> <button class="cursor-pointer rounded px-1.5 py-0.5 text-muted-foreground hover:bg-muted">Discard</button>`);
3216
- } else {
3217
- $$renderer2.push("<!--[-1-->");
3218
- Loader_circle($$renderer2, { class: "size-3 animate-spin", "aria-hidden": "true" });
3219
- $$renderer2.push(`<!---->${escape_html(pendingLabel(p))}`);
3220
- }
3221
- $$renderer2.push(`<!--]--></p></div></article>`);
3222
- }
3223
- $$renderer2.push(`<!--]--> `);
3224
- if (picker()) {
3225
- $$renderer2.push("<!--[0-->");
3226
- PickerCard($$renderer2, {
3227
- picker: picker()
3228
- });
3229
- } else if (working()) {
3230
- $$renderer2.push(`<!--[1--><div class="flex gap-1 py-1" aria-label="Firstmate is working" role="status"><span class="size-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.3s]"></span> <span class="size-1.5 animate-bounce rounded-full bg-muted-foreground [animation-delay:-0.15s]"></span> <span class="size-1.5 animate-bounce rounded-full bg-muted-foreground"></span></div>`);
3231
- } else {
3232
- $$renderer2.push("<!--[-1-->");
3233
- }
3234
- $$renderer2.push(`<!--]--></div></div> `);
3235
- {
3236
- $$renderer2.push("<!--[-1-->");
3237
- }
3238
- $$renderer2.push(`<!--]--> `);
3239
- {
3240
- $$renderer2.push("<!--[-1-->");
3241
- }
3242
- $$renderer2.push(`<!--]--></div> <div class="bg-panel px-4 pb-4 sm:px-6 lg:px-10">`);
3243
- Composer($$renderer2, {
3244
- via: via(),
3245
- reason: session()?.reason ?? null,
3246
- working: working() && !waitingOnAnswer(),
3247
- commands: firstmateChat.commands
3248
- });
3249
- $$renderer2.push(`<!----></div></section>`);
3250
- });
3251
- }
3252
- function DecisionStack($$renderer, $$props) {
3253
- $$renderer.component(($$renderer2) => {
3254
- let { projects, now, scope = null, limit = 3 } = $$props;
3255
- const view = derived(() => inbox.value);
3256
- const cards = derived(() => inbox.shown(now).shown.filter((c) => !scope || c.projectId === scope));
3257
- const waiting = derived(() => cards().filter(awaitsAnswer));
3258
- const stack = derived(() => cards().filter((c) => awaitsAnswer(c) || inbox.pending[c.id]).slice(0, limit));
3259
- const projectName = (id) => !id || id === "unassigned" ? null : projects.find((p) => p.id === id)?.name ?? id;
3260
- const token = derived(() => page.data.sessionToken ?? "");
3261
- const answer = (c, choice) => inbox.answer(c, choice, null, token());
3262
- if (view()?.available && (waiting().length || stack().length)) {
3263
- $$renderer2.push(`<!--[0--><div class="mb-2 flex items-baseline justify-between gap-2"><h2 class="section-label flex-1">Decisions</h2> <a href="/inbox" class="text-xs text-muted-foreground hover:text-foreground">${escape_html(waiting().length > stack().length ? `All ${waiting().length}` : "Open")}</a></div> <ul class="mb-6 flex flex-col gap-2"><!--[-->`);
3264
- const each_array = ensure_array_like(stack());
3265
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
3266
- let c = each_array[$$index];
3267
- $$renderer2.push(`<li>`);
3268
- DecisionCard($$renderer2, {
3269
- card: c,
3270
- project: projectName(c.projectId),
3271
- compact: true,
3272
- canAnswer: view().canAnswer,
3273
- error: inbox.errors[c.id] ?? null,
3274
- now,
3275
- onAnswer: (choice) => answer(c, choice),
3276
- onLater: () => inbox.later(c.id)
3277
- });
3278
- $$renderer2.push(`<!----></li>`);
3279
- }
3280
- $$renderer2.push(`<!--]--></ul> `);
3281
- if (waiting().length > stack().length) {
3282
- $$renderer2.push(`<!--[0--><a href="/inbox" class="-mt-4 mb-6 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground">${escape_html(waiting().length - stack().length)} more in Decisions `);
3283
- Arrow_right($$renderer2, { class: "size-3.5" });
3284
- $$renderer2.push(`<!----></a>`);
3285
- } else {
3286
- $$renderer2.push("<!--[-1-->");
3287
- }
3288
- $$renderer2.push(`<!--]-->`);
3289
- } else {
3290
- $$renderer2.push("<!--[-1-->");
3291
- }
3292
- $$renderer2.push(`<!--]-->`);
3293
- });
3294
- }
3295
- function Rail($$renderer, $$props) {
3296
- $$renderer.component(($$renderer2) => {
3297
- let {
3298
- tasks,
3299
- projects,
3300
- now,
3301
- insights = null,
3302
- scope = null,
3303
- cards = [],
3304
- onClose
3305
- } = $$props;
3306
- const inScope = (projectId) => !scope || projectId === scope;
3307
- const decided = derived(() => (insights?.decisions ?? []).filter((d) => inScope(d.projectId)));
3308
- const midnight = derived(() => new Date(new Date(now).toDateString()).getTime());
3309
- const decidedToday = derived(() => decided().filter((d) => Date.parse(d.decidedAt) >= midnight()).length);
3310
- const today = derived(() => sumSplits((insights?.today ?? []).filter((t) => inScope(t.projectId))));
3311
- const todayTotal = derived(() => total(today()));
3312
- const todayTasks = derived(() => (insights?.today ?? []).filter((t) => inScope(t.projectId)).length);
3313
- const share = (k) => todayTotal() ? Math.round(today()[k] / todayTotal() * 100) : 0;
3314
- const allowance = derived(() => insights?.allowance ?? null);
3315
- const h = derived(() => harbour(tasks, now));
3316
- const failedIds = derived(() => new Set(h().stepFailed.map((t) => t.id)));
3317
- const failed = derived(() => h().stepFailed.filter((t) => !h().needsYou.includes(t)));
3318
- const underWay = derived(() => [...h().waitingOnFirstmate, ...h().underWay].filter((t) => !failedIds().has(t.id)));
3319
- let showQueued = false;
3320
- const tabs = derived(() => [
3321
- {
3322
- id: "needs",
3323
- label: "Needs you",
3324
- count: failed().length + h().needsYou.length,
3325
- strong: true
3326
- },
3327
- {
3328
- id: "under",
3329
- label: "Under way",
3330
- count: underWay().length,
3331
- strong: false
3332
- },
3333
- {
3334
- id: "landed",
3335
- label: "Landed",
3336
- count: h().landedRecent.length,
3337
- strong: false
3338
- },
3339
- ...cards.map((e) => ({
3340
- id: e.key,
3341
- label: e.title,
3342
- count: e.badge ?? 0,
3343
- strong: false
3344
- }))
3345
- ]);
3346
- let picked = "needs";
3347
- const tab = derived(() => tabs().some((t) => t.id === picked) ? picked : "needs");
3348
- const plugin = derived(() => cards.find((e) => e.key === tab()) ?? null);
3349
- const projectName = (t) => projects.find((p) => p.id === t.projectId)?.name ?? (t.projectId === "unassigned" ? null : t.projectId);
3350
- const href = (t) => `/tasks/${encodeURIComponent(t.id)}`;
3351
- const nowText = (t) => t.activity?.text || t.summary || t.statusLabel;
3352
- const prOf = (t) => t.attention?.url ?? t.pr?.url ?? null;
3353
- function problem(t) {
3354
- const step = t.passage.steps[t.passage.current];
3355
- if (step?.failed) return { label: `${step.label} failed`, icon: Circle_x, tone: "danger" };
3356
- if (t.status === "failed") return { label: "Failed", icon: Circle_x, tone: "danger" };
3357
- if (t.status === "blocked") return { label: "Stuck", icon: Octagon_alert, tone: "danger" };
3358
- if (t.status === "lost" || t.status === "unknown") return { label: "Not responding", icon: Unplug, tone: "warning" };
3359
- if (t.attention?.owner === "captain") return t.attention.kind === "review" ? { label: "Your review", icon: Git_pull_request, tone: "sea" } : { label: "Your call", icon: Hand, tone: "sea" };
3360
- if (t.addressingReview) return {
3361
- label: "Addressing your review",
3362
- icon: Message_square_text,
3363
- tone: "muted"
3364
- };
3365
- if (t.status === "with-firstmate") return { label: "Firstmate deciding", icon: Anchor, tone: "muted" };
3366
- return null;
3367
- }
3368
- const TONE = {
3369
- danger: "bg-danger/10 text-danger",
3370
- warning: "bg-warning/10 text-warning",
3371
- sea: "bg-sea/10 text-sea",
3372
- muted: "bg-muted text-muted-foreground"
3373
- };
3374
- const EDGE = {
3375
- danger: "border-l-danger",
3376
- warning: "border-l-warning",
3377
- sea: "border-l-sea",
3378
- muted: "border-l-border"
3379
- };
3380
- function card($$renderer3, t, ask) {
3381
- const p = problem(t);
3382
- const pr = prOf(t);
3383
- const Icon2 = p?.icon;
3384
- $$renderer3.push(`<li${attr_class(`rounded-lg border border-l-[3px] bg-card px-3 pt-2.5 pb-1.5 ${stringify(p ? EDGE[p.tone] : "border-l-border")}`)}><div class="flex flex-wrap items-center gap-1.5">`);
3385
- if (projectName(t)) {
3386
- $$renderer3.push(`<!--[0--><span class="rounded-sm border px-1.5 text-[0.95rem] leading-[1.15rem] font-semibold tracking-[0.08em] text-muted-foreground [font-variant-caps:all-small-caps]">${escape_html(projectName(t))}</span>`);
3387
- } else {
3388
- $$renderer3.push("<!--[-1-->");
3389
- }
3390
- $$renderer3.push(`<!--]--> `);
3391
- if (p && Icon2) {
3392
- $$renderer3.push(`<!--[0--><span${attr_class(`flex items-center gap-1 rounded px-1.5 text-xs leading-[1.15rem] font-medium ${stringify(TONE[p.tone])}`)}>`);
3393
- if (Icon2) {
3394
- $$renderer3.push("<!--[-->");
3395
- Icon2($$renderer3, { class: "size-3", "aria-hidden": "true" });
3396
- $$renderer3.push("<!--]-->");
3397
- } else {
3398
- $$renderer3.push("<!--[!-->");
3399
- $$renderer3.push("<!--]-->");
3400
- }
3401
- $$renderer3.push(`${escape_html(p.label)}</span>`);
3402
- } else if (t.busy) {
3403
- $$renderer3.push(`<!--[1--><span class="flex items-center gap-1.5 text-xs text-muted-foreground"><span class="size-1.5 animate-pulse rounded-full bg-sea" aria-hidden="true"></span>Working</span>`);
3404
- } else {
3405
- $$renderer3.push("<!--[-1-->");
3406
- }
3407
- $$renderer3.push(`<!--]--></div> <a${attr("href", href(t))} class="mt-1.5 line-clamp-2 block text-sm leading-snug font-medium hover:underline">${escape_html(ask ?? t.shortTitle)}</a> `);
3408
- if (ask) {
3409
- $$renderer3.push(`<!--[0--><p class="mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground">${escape_html(t.shortTitle)}</p>`);
3410
- } else {
3411
- $$renderer3.push("<!--[-1-->");
3412
- }
3413
- $$renderer3.push(`<!--]--> `);
3414
- if (showsChecks(t)) {
3415
- $$renderer3.push(`<!--[0--><div class="mt-1.5">`);
3416
- ChecksStrip($$renderer3, { pipeline: t.pipeline, busy: t.busy, size: "rail" });
3417
- $$renderer3.push(`<!----></div>`);
3418
- } else if (!ask) {
3419
- $$renderer3.push(`<!--[1--><p class="mt-0.5 line-clamp-2 text-xs leading-snug text-muted-foreground">${escape_html(nowText(t))}</p>`);
3420
- } else {
3421
- $$renderer3.push("<!--[-1-->");
3422
- }
3423
- $$renderer3.push(`<!--]--> `);
3424
- if (pr) {
3425
- $$renderer3.push(`<!--[0--><a${attr("href", pr)} target="_blank" rel="noreferrer" class="mt-1 block text-xs break-all text-sea hover:underline">${escape_html(pr)}</a>`);
3426
- } else {
3427
- $$renderer3.push("<!--[-1-->");
3428
- }
3429
- $$renderer3.push(`<!--]--> `);
3430
- if (t.passage.steps.length > 1) {
3431
- $$renderer3.push(`<!--[0--><div class="mt-2.5">`);
3432
- StageTrack($$renderer3, { task: t });
3433
- $$renderer3.push(`<!----></div>`);
3434
- } else {
3435
- $$renderer3.push("<!--[-1-->");
3436
- }
3437
- $$renderer3.push(`<!--]--> `);
3438
- if (t.eta) {
3439
- $$renderer3.push(`<!--[0--><div class="mt-2">`);
3440
- EtaLine($$renderer3, { eta: t.eta });
3441
- $$renderer3.push(`<!----></div>`);
3442
- } else {
3443
- $$renderer3.push("<!--[-1-->");
3444
- }
3445
- $$renderer3.push(`<!--]--> <div class="mt-1.5 -mr-1.5 flex justify-end gap-0.5"><a${attr("href", href(t))} class="flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground">`);
3446
- Arrow_up_right($$renderer3, { class: "size-3.5" });
3447
- $$renderer3.push(`<!---->Open</a> <button class="flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground">`);
3448
- Message_square($$renderer3, { class: "size-3.5" });
3449
- $$renderer3.push(`<!---->Chat about this</button></div></li>`);
3450
- }
3451
- $$renderer2.push(`<aside class="flex h-full min-h-0 flex-col" aria-label="Tasks and decisions"><div class="flex h-11 shrink-0 items-center gap-2 border-b px-4 text-sm"><span class="font-display text-[1.15rem] font-medium">On deck</span> `);
3452
- if (onClose) {
3453
- $$renderer2.push(`<!--[0--><button class="-mr-2 ml-auto flex size-9 cursor-pointer items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground" aria-label="Close">`);
3454
- X$1($$renderer2, { class: "size-4" });
3455
- $$renderer2.push(`<!----></button>`);
3456
- } else {
3457
- $$renderer2.push("<!--[-1-->");
3458
- }
3459
- $$renderer2.push(`<!--]--></div> <div class="no-scrollbar min-h-0 flex-1 overflow-y-auto px-4 py-4"><p class="mb-5 text-sm leading-relaxed text-muted-foreground">${escape_html(headline(h()))}</p> `);
3460
- if (allowance()?.state === "ok" && allowance().windows.length) {
3461
- $$renderer2.push(`<!--[0--><a href="/headroom" class="mb-6 block rounded-lg border bg-card px-3 py-2.5 hover:border-foreground/20"><span class="flex items-center gap-1.5 text-xs font-medium">`);
3462
- Gauge($$renderer2, {
3463
- class: "size-3.5 text-muted-foreground",
3464
- "aria-hidden": "true"
3465
- });
3466
- $$renderer2.push(`<!---->Claude headroom</span> <span class="mt-2 flex flex-col gap-1"><!--[-->`);
3467
- const each_array = ensure_array_like(allowance().windows.slice(0, 2));
3468
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
3469
- let w = each_array[$$index];
3470
- AllowanceMeter($$renderer2, { w, now, compact: true });
3471
- }
3472
- $$renderer2.push(`<!--]--></span> `);
3473
- if (insights?.atRisk) {
3474
- $$renderer2.push(`<!--[0--><span class="mt-1.5 block text-xs text-warning">${escape_html(insights.atRisk.label)} may run out before it resets.</span>`);
3475
- } else {
3476
- $$renderer2.push("<!--[-1-->");
3477
- }
3478
- $$renderer2.push(`<!--]--></a>`);
3479
- } else if (allowance()?.state === "connect") {
3480
- $$renderer2.push(`<!--[1--><a href="/headroom" class="mb-6 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground">`);
3481
- Gauge($$renderer2, { class: "size-3.5", "aria-hidden": "true" });
3482
- $$renderer2.push(`<!---->Connect your Claude usage to see what is left</a>`);
3483
- } else {
3484
- $$renderer2.push("<!--[-1-->");
3485
- }
3486
- $$renderer2.push(`<!--]--> <div class="sticky -top-4 z-10 -mx-4 mb-4 no-scrollbar flex justify-between gap-0.5 overflow-x-auto border-b bg-panel px-2.5" role="tablist" aria-label="On deck" tabindex="-1"><!--[-->`);
3487
- const each_array_1 = ensure_array_like(tabs());
3488
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
3489
- let t = each_array_1[$$index_1];
3490
- $$renderer2.push(`<button${attr("id", `rail-tab-${stringify(t.id)}`)} role="tab"${attr("aria-selected", tab() === t.id)} aria-controls="rail-panel"${attr("tabindex", tab() === t.id ? 0 : -1)}${attr_class(`-mb-px flex shrink-0 cursor-pointer items-center gap-1 border-b-2 px-1.5 py-2 text-[0.85rem] whitespace-nowrap transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-ring ${tab() === t.id ? "border-brass font-medium text-foreground" : "border-transparent text-muted-foreground hover:text-foreground"}`)}>${escape_html(t.label)}`);
3491
- if (t.count) {
3492
- $$renderer2.push(`<!--[0--><span${attr_class(`tabular rounded-full px-1.5 text-xs leading-4 font-semibold ${t.strong ? "bg-sea text-white dark:text-slate-950" : "bg-muted text-muted-foreground"}`)}>${escape_html(t.count)}</span>`);
3493
- } else {
3494
- $$renderer2.push("<!--[-1-->");
3495
- }
3496
- $$renderer2.push(`<!--]--></button>`);
3497
- }
3498
- $$renderer2.push(`<!--]--></div> <div id="rail-panel" role="tabpanel"${attr("aria-labelledby", `rail-tab-${stringify(tab())}`)}>`);
3499
- if (tab() === "needs") {
3500
- $$renderer2.push("<!--[0-->");
3501
- DecisionStack($$renderer2, { projects, now, scope });
3502
- $$renderer2.push(`<!----> `);
3503
- if (failed().length || h().needsYou.length) {
3504
- $$renderer2.push(`<!--[0--><ul class="mb-6 flex flex-col gap-2"><!--[-->`);
3505
- const each_array_2 = ensure_array_like(failed());
3506
- for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
3507
- let t = each_array_2[$$index_2];
3508
- card($$renderer2, t, `${t.passage.steps[t.passage.current].label} failed: ${t.shortTitle}`);
3509
- }
3510
- $$renderer2.push(`<!--]--> <!--[-->`);
3511
- const each_array_3 = ensure_array_like(h().needsYou);
3512
- for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
3513
- let t = each_array_3[$$index_3];
3514
- card($$renderer2, t, t.attention?.text || null);
3515
- }
3516
- $$renderer2.push(`<!--]--></ul>`);
3517
- } else {
3518
- $$renderer2.push(`<!--[-1--><p class="mb-6 flex items-center gap-2 text-sm text-muted-foreground">`);
3519
- Check($$renderer2, { class: "size-4 text-success" });
3520
- $$renderer2.push(`<!---->Nothing needs you right now.</p>`);
3521
- }
3522
- $$renderer2.push(`<!--]--> `);
3523
- if (decided().length) {
3524
- $$renderer2.push(`<!--[0--><div class="mb-2 flex items-baseline justify-between gap-2"><h2 class="section-label flex-1">Decided for you</h2> <a href="/decisions" class="text-xs text-muted-foreground hover:text-foreground">See all</a></div> `);
3525
- if (decidedToday()) {
3526
- $$renderer2.push(`<!--[0--><p class="mb-2 text-xs text-muted-foreground">Firstmate settled ${escape_html(decidedToday())} review ${escape_html(decidedToday() === 1 ? "question" : "questions")} for you today.</p>`);
3527
- } else {
3528
- $$renderer2.push("<!--[-1-->");
3529
- }
3530
- $$renderer2.push(`<!--]--> <ul class="mb-6 divide-y rounded-lg border bg-card"><!--[-->`);
3531
- const each_array_4 = ensure_array_like(decided().slice(0, 3));
3532
- for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
3533
- let d = each_array_4[$$index_4];
3534
- $$renderer2.push(`<li><a${attr("href", `/decisions#${stringify(d.id)}`)} class="block px-3 py-2.5 hover:bg-muted/60"><span class="flex items-center gap-2 text-xs">`);
3535
- Scale($$renderer2, {
3536
- class: "size-3.5 shrink-0 text-muted-foreground",
3537
- "aria-hidden": "true"
3538
- });
3539
- $$renderer2.push(`<!----> <span class="shrink-0 font-medium whitespace-nowrap">${escape_html(d.verdict)}</span> <span class="min-w-0 truncate text-muted-foreground">· ${escape_html(d.taskTitle)}</span> <span class="ml-auto shrink-0 text-muted-foreground">${escape_html(ago(d.decidedAt, now))}</span></span> <span class="mt-1 line-clamp-2 block text-xs text-muted-foreground">${escape_html(d.question)}</span></a></li>`);
3540
- }
3541
- $$renderer2.push(`<!--]--></ul>`);
3542
- } else {
3543
- $$renderer2.push("<!--[-1-->");
3544
- }
3545
- $$renderer2.push(`<!--]-->`);
3546
- } else if (tab() === "under") {
3547
- $$renderer2.push("<!--[1-->");
3548
- if (underWay().length) {
3549
- $$renderer2.push(`<!--[0--><ul class="mb-6 flex flex-col gap-2"><!--[-->`);
3550
- const each_array_5 = ensure_array_like(underWay());
3551
- for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {
3552
- let t = each_array_5[$$index_5];
3553
- card($$renderer2, t, null);
3554
- }
3555
- $$renderer2.push(`<!--]--></ul>`);
3556
- } else {
3557
- $$renderer2.push(`<!--[-1--><p class="mb-6 text-sm text-muted-foreground">Nothing under way.</p>`);
3558
- }
3559
- $$renderer2.push(`<!--]--> `);
3560
- if (h().queued.length) {
3561
- $$renderer2.push(`<!--[0--><button class="mb-2 flex w-full cursor-pointer items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground"${attr("aria-expanded", showQueued)}>Up next · ${escape_html(h().queued.length)} `);
3562
- Chevron_right($$renderer2, {
3563
- class: `size-3.5 transition-transform ${""}`
3564
- });
3565
- $$renderer2.push(`<!----></button> `);
3566
- {
3567
- $$renderer2.push("<!--[-1-->");
3568
- }
3569
- $$renderer2.push(`<!--]-->`);
3570
- } else {
3571
- $$renderer2.push("<!--[-1-->");
3572
- }
3573
- $$renderer2.push(`<!--]-->`);
3574
- } else if (tab() === "landed") {
3575
- $$renderer2.push("<!--[2-->");
3576
- if (h().landedRecent.length) {
3577
- $$renderer2.push(`<!--[0--><ul class="mb-6 flex flex-col"><!--[-->`);
3578
- const each_array_7 = ensure_array_like(h().landedRecent);
3579
- for (let $$index_7 = 0, $$length = each_array_7.length; $$index_7 < $$length; $$index_7++) {
3580
- let t = each_array_7[$$index_7];
3581
- $$renderer2.push(`<li><a${attr("href", href(t))} class="flex items-center gap-2 rounded-md px-2 py-1.5 text-sm text-muted-foreground hover:bg-muted hover:text-foreground">`);
3582
- Check($$renderer2, {
3583
- class: "size-3.5 shrink-0 text-success",
3584
- "aria-label": "Landed"
3585
- });
3586
- $$renderer2.push(`<!---->`);
3587
- if (projectName(t)) {
3588
- $$renderer2.push(`<!--[0--><span class="shrink-0 rounded border px-1 font-mono text-xs leading-4">${escape_html(projectName(t))}</span>`);
3589
- } else {
3590
- $$renderer2.push("<!--[-1-->");
3591
- }
3592
- $$renderer2.push(`<!--]--><span class="truncate">${escape_html(t.shortTitle)}</span></a></li>`);
3593
- }
3594
- $$renderer2.push(`<!--]--></ul>`);
3595
- } else {
3596
- $$renderer2.push(`<!--[-1--><p class="mb-6 text-sm text-muted-foreground">Nothing landed in the last day.</p>`);
3597
- }
3598
- $$renderer2.push(`<!--]--> `);
3599
- if (todayTotal() > 0) {
3600
- $$renderer2.push(`<!--[0--><div class="mb-2 flex items-baseline justify-between gap-2"><h2 class="section-label flex-1">Where time went today</h2> <a href="/time" class="text-xs text-muted-foreground hover:text-foreground">Details</a></div> <a href="/time" class="block rounded-lg border bg-card p-3 hover:border-foreground/20"><span class="block text-sm"><span class="font-medium">${escape_html(duration$1(todayTotal()))}</span> <span class="text-muted-foreground">of crew time on ${escape_html(todayTasks())}
3601
- ${escape_html(todayTasks() === 1 ? "task" : "tasks")}</span></span> <span class="mt-2 block">`);
3602
- TimeBar($$renderer2, { seconds: today(), label: "Today" });
3603
- $$renderer2.push(`<!----></span> <span class="mt-2 block text-xs text-muted-foreground">${escape_html(share("build"))}% building · ${escape_html(share("review"))}% automated review · ${escape_html(share("captain"))}% waiting on you</span></a>`);
3604
- } else {
3605
- $$renderer2.push("<!--[-1-->");
3606
- }
3607
- $$renderer2.push(`<!--]-->`);
3608
- } else if (plugin()) {
3609
- $$renderer2.push(`<!--[3--><div data-slot="home.card">`);
3610
- SlotContent($$renderer2, { entry: plugin(), now });
3611
- $$renderer2.push(`<!----></div>`);
3612
- } else {
3613
- $$renderer2.push("<!--[-1-->");
3614
- }
3615
- $$renderer2.push(`<!--]--></div> <a href="/harbour" class="mt-4 flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground">Open the full board in Harbour `);
3616
- Arrow_right($$renderer2, { class: "size-3.5" });
3617
- $$renderer2.push(`<!----></a></div></aside>`);
3618
- });
3619
- }
3620
- const REFRESH_MS = 6e4;
3621
- class Insights {
3622
- value = null;
3623
- seed(v) {
3624
- if (v) this.value = v;
3625
- }
3626
- connect() {
3627
- let stopped = false;
3628
- const read = async () => {
3629
- try {
3630
- const r = await fetch("/api/insights");
3631
- if (r.ok && !stopped) this.value = await r.json();
3632
- } catch {
3633
- }
3634
- };
3635
- const timer = setInterval(read, REFRESH_MS);
3636
- return () => {
3637
- stopped = true;
3638
- clearInterval(timer);
3639
- };
3640
- }
3641
- }
3642
- const railInsights = new Insights();
3643
- function _page($$renderer, $$props) {
3644
- $$renderer.component(($$renderer2) => {
3645
- let { data } = $$props;
3646
- const fleet = derived(currentFleet);
3647
- const scope = derived(() => page.url.searchParams.get("project"));
3648
- const tasks = derived(() => (fleet()?.tasks ?? []).filter((t) => !scope() || t.projectId === scope()));
3649
- const h = derived(() => harbour(tasks(), live.now));
3650
- const health = derived(() => shipHealth(h()));
3651
- const waiting = derived(() => h().needsYou.length + h().stepFailed.length);
3652
- const pluginEntries = derived(() => slots.entries(slotKey.fleet, data.slots, data.slotsAt));
3653
- const cards = derived(() => pluginEntries().filter((e) => e.slot === "home.card"));
3654
- const insights = derived(() => railInsights.value ?? data.insights);
3655
- let railOpen = true;
3656
- head("1uha8ag", $$renderer2, ($$renderer3) => {
3657
- $$renderer3.title(($$renderer4) => {
3658
- $$renderer4.push(`<title>Firstmate · Wheelhouse</title>`);
3659
- });
3660
- });
3661
- $$renderer2.push(`<main class="flex min-h-0 flex-1">`);
3662
- Chat($$renderer2, {
3663
- token: data.sessionToken,
3664
- railOpen,
3665
- waiting: waiting(),
3666
- health: health(),
3667
- now: live.now,
3668
- pluginEntries: pluginEntries()
3669
- });
3670
- $$renderer2.push(`<!----> `);
3671
- {
3672
- $$renderer2.push("<!--[0-->");
3673
- ResizableRail($$renderer2, {
3674
- storageKey: "wheelhouse-rail-width",
3675
- label: "Resize the rail",
3676
- defaultWidth: 460,
3677
- class: "bg-panel",
3678
- children: ($$renderer3) => {
3679
- Rail($$renderer3, {
3680
- tasks: tasks(),
3681
- projects: fleet()?.projects ?? [],
3682
- now: live.now,
3683
- insights: insights(),
3684
- scope: scope(),
3685
- cards: cards()
3686
- });
3687
- }
3688
- });
3689
- }
3690
- $$renderer2.push(`<!--]--></main> `);
3691
- {
3692
- $$renderer2.push("<!--[-1-->");
3693
- }
3694
- $$renderer2.push(`<!--]-->`);
3695
- });
3696
- }
3697
-
3698
- export { _page as default };
3699
- //# sourceMappingURL=_page.svelte.js-BI4c5H0n.js.map