watch-tail 0.4.0 → 0.5.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 (379) hide show
  1. package/README.md +130 -0
  2. package/build/client/_app/immutable/assets/0.BQQ1YLPc.css +2 -0
  3. package/build/client/_app/immutable/assets/0.BQQ1YLPc.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.BQQ1YLPc.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/BrushContext.2tkUc39H.css +1 -0
  6. package/build/client/_app/immutable/assets/BrushContext.2tkUc39H.css.br +0 -0
  7. package/build/client/_app/immutable/assets/BrushContext.2tkUc39H.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/ChartAnnotations.Bw8CGteN.css +1 -0
  9. package/build/client/_app/immutable/assets/ChartAnnotations.Bw8CGteN.css.br +0 -0
  10. package/build/client/_app/immutable/assets/ChartAnnotations.Bw8CGteN.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/Circle.C5MKzgk2.css +1 -0
  12. package/build/client/_app/immutable/assets/Circle.C5MKzgk2.css.br +1 -0
  13. package/build/client/_app/immutable/assets/Circle.C5MKzgk2.css.gz +0 -0
  14. package/build/client/_app/immutable/assets/DefaultTooltip.CGOVIm3D.css +1 -0
  15. package/build/client/_app/immutable/assets/DefaultTooltip.CGOVIm3D.css.br +0 -0
  16. package/build/client/_app/immutable/assets/DefaultTooltip.CGOVIm3D.css.gz +0 -0
  17. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css +1 -0
  18. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.br +0 -0
  19. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.gz +0 -0
  20. package/build/client/_app/immutable/assets/Labels.sEaJtb97.css +1 -0
  21. package/build/client/_app/immutable/assets/Labels.sEaJtb97.css.br +0 -0
  22. package/build/client/_app/immutable/assets/Labels.sEaJtb97.css.gz +0 -0
  23. package/build/client/_app/immutable/assets/Legend.DnhxhJ2I.css +1 -0
  24. package/build/client/_app/immutable/assets/Legend.DnhxhJ2I.css.br +0 -0
  25. package/build/client/_app/immutable/assets/Legend.DnhxhJ2I.css.gz +0 -0
  26. package/build/client/_app/immutable/assets/Path.B0wDzTrn.css +1 -0
  27. package/build/client/_app/immutable/assets/Path.B0wDzTrn.css.br +0 -0
  28. package/build/client/_app/immutable/assets/Path.B0wDzTrn.css.gz +0 -0
  29. package/build/client/_app/immutable/assets/TransformContext.1cjyViIk.css +1 -0
  30. package/build/client/_app/immutable/assets/TransformContext.1cjyViIk.css.br +0 -0
  31. package/build/client/_app/immutable/assets/TransformContext.1cjyViIk.css.gz +0 -0
  32. package/build/client/_app/immutable/assets/Voronoi.ce7atosu.css +1 -0
  33. package/build/client/_app/immutable/assets/Voronoi.ce7atosu.css.br +0 -0
  34. package/build/client/_app/immutable/assets/Voronoi.ce7atosu.css.gz +0 -0
  35. package/build/client/_app/immutable/chunks/AUlz4-kZ.js +1 -0
  36. package/build/client/_app/immutable/chunks/AUlz4-kZ.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/AUlz4-kZ.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/B1t8v2wP.js +1 -0
  39. package/build/client/_app/immutable/chunks/B1t8v2wP.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/B1t8v2wP.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/B6nyufJR.js +1 -0
  42. package/build/client/_app/immutable/chunks/B6nyufJR.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/B6nyufJR.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/BR2LaRms.js +1 -0
  45. package/build/client/_app/immutable/chunks/BR2LaRms.js.br +1 -0
  46. package/build/client/_app/immutable/chunks/BR2LaRms.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/BR7qH0F5.js +1 -0
  48. package/build/client/_app/immutable/chunks/BR7qH0F5.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/BR7qH0F5.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/BkXArOra.js +1 -0
  51. package/build/client/_app/immutable/chunks/BkXArOra.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/BkXArOra.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/Bl052uUt.js +1 -0
  54. package/build/client/_app/immutable/chunks/Bl052uUt.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/Bl052uUt.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/Bmk_Voz6.js +1 -0
  57. package/build/client/_app/immutable/chunks/Bmk_Voz6.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/Bmk_Voz6.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/Bp63j1zN.js +1 -0
  60. package/build/client/_app/immutable/chunks/Bp63j1zN.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/Bp63j1zN.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/BwntJtbK.js +1 -0
  63. package/build/client/_app/immutable/chunks/BwntJtbK.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/BwntJtbK.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/C20WvNRq.js +1 -0
  66. package/build/client/_app/immutable/chunks/C20WvNRq.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/C20WvNRq.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/C58PZtCD.js +4 -0
  69. package/build/client/_app/immutable/chunks/C58PZtCD.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/C58PZtCD.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/CCch3uox.js +1 -0
  72. package/build/client/_app/immutable/chunks/CCch3uox.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/CCch3uox.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/CDbeYGlD.js +1 -0
  75. package/build/client/_app/immutable/chunks/CDbeYGlD.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/CDbeYGlD.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/CJFHBop_.js +1 -0
  78. package/build/client/_app/immutable/chunks/CJFHBop_.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/CJFHBop_.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/CYw9ugj1.js +1 -0
  81. package/build/client/_app/immutable/chunks/CYw9ugj1.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/CYw9ugj1.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/CjJd0uRB.js +1 -0
  84. package/build/client/_app/immutable/chunks/CjJd0uRB.js.br +1 -0
  85. package/build/client/_app/immutable/chunks/CjJd0uRB.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/CoEFQJcr.js +1 -0
  87. package/build/client/_app/immutable/chunks/CoEFQJcr.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/CoEFQJcr.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/D-JtVVAo.js +1 -0
  90. package/build/client/_app/immutable/chunks/D-JtVVAo.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/D-JtVVAo.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/DJDlf6lC.js +1 -0
  93. package/build/client/_app/immutable/chunks/DJDlf6lC.js.br +0 -0
  94. package/build/client/_app/immutable/chunks/DJDlf6lC.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/DJLYkl5w.js +1 -0
  96. package/build/client/_app/immutable/chunks/DJLYkl5w.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/DJLYkl5w.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/DPKdNiYi.js +1 -0
  99. package/build/client/_app/immutable/chunks/DPKdNiYi.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/DPKdNiYi.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/DQi7bc16.js +1 -0
  102. package/build/client/_app/immutable/chunks/DQi7bc16.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/DQi7bc16.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/DVTgeA2y.js +2 -0
  105. package/build/client/_app/immutable/chunks/DVTgeA2y.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/DVTgeA2y.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/Db0q5_zr.js +1 -0
  108. package/build/client/_app/immutable/chunks/Db0q5_zr.js.br +0 -0
  109. package/build/client/_app/immutable/chunks/Db0q5_zr.js.gz +0 -0
  110. package/build/client/_app/immutable/chunks/Dfvzj6n2.js +1 -0
  111. package/build/client/_app/immutable/chunks/Dfvzj6n2.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/Dfvzj6n2.js.gz +0 -0
  113. package/build/client/_app/immutable/chunks/Di37PX72.js +1 -0
  114. package/build/client/_app/immutable/chunks/Di37PX72.js.br +0 -0
  115. package/build/client/_app/immutable/chunks/Di37PX72.js.gz +0 -0
  116. package/build/client/_app/immutable/chunks/{Bw_9uNRP.js → DkyYNO4U.js} +1 -1
  117. package/build/client/_app/immutable/chunks/DkyYNO4U.js.br +0 -0
  118. package/build/client/_app/immutable/chunks/DkyYNO4U.js.gz +0 -0
  119. package/build/client/_app/immutable/chunks/DmRhEzIa.js +1 -0
  120. package/build/client/_app/immutable/chunks/DmRhEzIa.js.br +0 -0
  121. package/build/client/_app/immutable/chunks/DmRhEzIa.js.gz +0 -0
  122. package/build/client/_app/immutable/chunks/Dp8S9ymS.js +1 -0
  123. package/build/client/_app/immutable/chunks/Dp8S9ymS.js.br +0 -0
  124. package/build/client/_app/immutable/chunks/Dp8S9ymS.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/DslUcEd-.js +1 -0
  126. package/build/client/_app/immutable/chunks/DslUcEd-.js.br +0 -0
  127. package/build/client/_app/immutable/chunks/DslUcEd-.js.gz +0 -0
  128. package/build/client/_app/immutable/chunks/Dt_Zd6U2.js +1 -0
  129. package/build/client/_app/immutable/chunks/Dt_Zd6U2.js.br +0 -0
  130. package/build/client/_app/immutable/chunks/Dt_Zd6U2.js.gz +0 -0
  131. package/build/client/_app/immutable/chunks/DwezeuNE.js +5 -0
  132. package/build/client/_app/immutable/chunks/DwezeuNE.js.br +0 -0
  133. package/build/client/_app/immutable/chunks/DwezeuNE.js.gz +0 -0
  134. package/build/client/_app/immutable/chunks/HclGiUj8.js +1 -0
  135. package/build/client/_app/immutable/chunks/HclGiUj8.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/HclGiUj8.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/PYzEcuyd.js +10 -0
  138. package/build/client/_app/immutable/chunks/PYzEcuyd.js.br +0 -0
  139. package/build/client/_app/immutable/chunks/PYzEcuyd.js.gz +0 -0
  140. package/build/client/_app/immutable/chunks/RobXhXPM.js +1 -0
  141. package/build/client/_app/immutable/chunks/RobXhXPM.js.br +1 -0
  142. package/build/client/_app/immutable/chunks/RobXhXPM.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/UySfXNq7.js +1 -0
  144. package/build/client/_app/immutable/chunks/UySfXNq7.js.br +0 -0
  145. package/build/client/_app/immutable/chunks/UySfXNq7.js.gz +0 -0
  146. package/build/client/_app/immutable/chunks/Y5urAfNy.js +1 -0
  147. package/build/client/_app/immutable/chunks/Y5urAfNy.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/Y5urAfNy.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/_Zq76xnA.js +15 -0
  150. package/build/client/_app/immutable/chunks/_Zq76xnA.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/_Zq76xnA.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/dbhDrJmm.js +1 -0
  153. package/build/client/_app/immutable/chunks/dbhDrJmm.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/dbhDrJmm.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/pqiPC7Y8.js +3 -0
  156. package/build/client/_app/immutable/chunks/pqiPC7Y8.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/pqiPC7Y8.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/yCfI4PCa.js +1 -0
  159. package/build/client/_app/immutable/chunks/yCfI4PCa.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/yCfI4PCa.js.gz +0 -0
  161. package/build/client/_app/immutable/entry/app.vMZB8_Zr.js +2 -0
  162. package/build/client/_app/immutable/entry/app.vMZB8_Zr.js.br +0 -0
  163. package/build/client/_app/immutable/entry/app.vMZB8_Zr.js.gz +0 -0
  164. package/build/client/_app/immutable/entry/start.pM5lNk_5.js +1 -0
  165. package/build/client/_app/immutable/entry/start.pM5lNk_5.js.br +0 -0
  166. package/build/client/_app/immutable/entry/start.pM5lNk_5.js.gz +0 -0
  167. package/build/client/_app/immutable/nodes/0.CZO0sIxX.js +1 -0
  168. package/build/client/_app/immutable/nodes/0.CZO0sIxX.js.br +0 -0
  169. package/build/client/_app/immutable/nodes/0.CZO0sIxX.js.gz +0 -0
  170. package/build/client/_app/immutable/nodes/1.zcN3R_zF.js +1 -0
  171. package/build/client/_app/immutable/nodes/1.zcN3R_zF.js.br +0 -0
  172. package/build/client/_app/immutable/nodes/1.zcN3R_zF.js.gz +0 -0
  173. package/build/client/_app/immutable/nodes/2.DxevVqut.js +2 -0
  174. package/build/client/_app/immutable/nodes/2.DxevVqut.js.br +0 -0
  175. package/build/client/_app/immutable/nodes/2.DxevVqut.js.gz +0 -0
  176. package/build/client/_app/version.json +1 -1
  177. package/build/client/_app/version.json.br +0 -0
  178. package/build/client/_app/version.json.gz +0 -0
  179. package/build/handler.js +9 -7
  180. package/build/handler.js.map +1 -1
  181. package/build/index.js +9 -7
  182. package/build/index.js.map +1 -1
  183. package/build/server/chunks/chunks/Arc.canvas.js-D6g58nSp.js +701 -0
  184. package/build/server/chunks/chunks/Arc.canvas.js-D6g58nSp.js.map +1 -0
  185. package/build/server/chunks/chunks/Arc.js-D78Cf_4M.js +31 -0
  186. package/build/server/chunks/chunks/Arc.js-D78Cf_4M.js.map +1 -0
  187. package/build/server/chunks/chunks/Bar.js-Cv73T8_D.js +448 -0
  188. package/build/server/chunks/chunks/Bar.js-Cv73T8_D.js.map +1 -0
  189. package/build/server/chunks/chunks/ChartAnnotations.js-Ci22VB_6.js +983 -0
  190. package/build/server/chunks/chunks/ChartAnnotations.js-Ci22VB_6.js.map +1 -0
  191. package/build/server/chunks/chunks/Circle.html.js-BjwyNRG3.js +355 -0
  192. package/build/server/chunks/chunks/Circle.html.js-BjwyNRG3.js.map +1 -0
  193. package/build/server/chunks/chunks/ClipPath.canvas.js-CFTBDWVU.js +170 -0
  194. package/build/server/chunks/chunks/ClipPath.canvas.js-CFTBDWVU.js.map +1 -0
  195. package/build/server/chunks/chunks/DefaultTooltip.js-0r5rbE-1.js +352 -0
  196. package/build/server/chunks/chunks/DefaultTooltip.js-0r5rbE-1.js.map +1 -0
  197. package/build/server/chunks/chunks/EventScatter.js-DqCMPeHG.js +7304 -0
  198. package/build/server/chunks/chunks/EventScatter.js-DqCMPeHG.js.map +1 -0
  199. package/build/server/chunks/chunks/Labels.js-DpagpV6d.js +497 -0
  200. package/build/server/chunks/chunks/Labels.js-DpagpV6d.js.map +1 -0
  201. package/build/server/chunks/chunks/Legend.js-BOpwpe5s.js +343 -0
  202. package/build/server/chunks/chunks/Legend.js-BOpwpe5s.js.map +1 -0
  203. package/build/server/chunks/chunks/Line.html.js-BM5tR11G.js +423 -0
  204. package/build/server/chunks/chunks/Line.html.js-BM5tR11G.js.map +1 -0
  205. package/build/server/chunks/chunks/Link.canvas.js-P8ySzEAw.js +756 -0
  206. package/build/server/chunks/chunks/Link.canvas.js-P8ySzEAw.js.map +1 -0
  207. package/build/server/chunks/chunks/Path.canvas.js-DNAtnEBt.js +1259 -0
  208. package/build/server/chunks/chunks/Path.canvas.js-DNAtnEBt.js.map +1 -0
  209. package/build/server/chunks/chunks/Points.html.js-CLbHD6OP.js +228 -0
  210. package/build/server/chunks/chunks/Points.html.js-CLbHD6OP.js.map +1 -0
  211. package/build/server/chunks/chunks/Points.js-e6g0Re6H.js +14 -0
  212. package/build/server/chunks/chunks/Points.js-e6g0Re6H.js.map +1 -0
  213. package/build/server/chunks/chunks/Points2.js-BMGdkzTE.js +25 -0
  214. package/build/server/chunks/chunks/Points2.js-BMGdkzTE.js.map +1 -0
  215. package/build/server/chunks/chunks/Rect.html.js-Q3UvRwNn.js +547 -0
  216. package/build/server/chunks/chunks/Rect.html.js-Q3UvRwNn.js.map +1 -0
  217. package/build/server/chunks/chunks/Spline.js-BuZPz2PJ.js +516 -0
  218. package/build/server/chunks/chunks/Spline.js-BuZPz2PJ.js.map +1 -0
  219. package/build/server/chunks/chunks/Text.html.js-C8xO5Nz6.js +847 -0
  220. package/build/server/chunks/chunks/Text.html.js-C8xO5Nz6.js.map +1 -0
  221. package/build/server/chunks/chunks/TooltipItem.js-T0cKLjLu.js +314 -0
  222. package/build/server/chunks/chunks/TooltipItem.js-T0cKLjLu.js.map +1 -0
  223. package/build/server/chunks/chunks/Voronoi.js-DevTsXQE.js +2052 -0
  224. package/build/server/chunks/chunks/Voronoi.js-DevTsXQE.js.map +1 -0
  225. package/build/server/chunks/chunks/archive.js-C6rz09rJ.js +584 -0
  226. package/build/server/chunks/chunks/archive.js-C6rz09rJ.js.map +1 -0
  227. package/build/server/chunks/chunks/array.js-CBp0H4t3.js +8 -0
  228. package/build/server/chunks/chunks/array.js-CBp0H4t3.js.map +1 -0
  229. package/build/server/chunks/chunks/attributes.js-BVWo7wbg.js +25 -0
  230. package/build/server/chunks/chunks/attributes.js-BVWo7wbg.js.map +1 -0
  231. package/build/server/chunks/chunks/{env2.js-DXveJt1Y.js → aws.js-DkPqAybc.js} +2 -59
  232. package/build/server/chunks/chunks/aws.js-DkPqAybc.js.map +1 -0
  233. package/build/server/chunks/chunks/band.js-C7izXphE.js +155 -0
  234. package/build/server/chunks/chunks/band.js-C7izXphE.js.map +1 -0
  235. package/build/server/chunks/chunks/centroid.js-BnGN3LH0.js +1356 -0
  236. package/build/server/chunks/chunks/centroid.js-BnGN3LH0.js.map +1 -0
  237. package/build/server/chunks/chunks/common.js-BWQB8Die.js +5760 -0
  238. package/build/server/chunks/chunks/common.js-BWQB8Die.js.map +1 -0
  239. package/build/server/chunks/chunks/env2.js-CcIskxOZ.js +60 -0
  240. package/build/server/chunks/chunks/env2.js-CcIskxOZ.js.map +1 -0
  241. package/build/server/chunks/chunks/{exports.js-CvFPPbaH.js → exports.js-ClPPfcHj.js} +6 -1
  242. package/build/server/chunks/chunks/exports.js-ClPPfcHj.js.map +1 -0
  243. package/build/server/chunks/chunks/group.js-DBFzWAox.js +30 -0
  244. package/build/server/chunks/chunks/group.js-DBFzWAox.js.map +1 -0
  245. package/build/server/chunks/chunks/index-server.js-DNLOKvM0.js +248 -0
  246. package/build/server/chunks/chunks/index-server.js-DNLOKvM0.js.map +1 -0
  247. package/build/server/chunks/chunks/index-server2.js-l0sNRNKZ.js +2 -0
  248. package/build/server/chunks/chunks/index-server2.js-l0sNRNKZ.js.map +1 -0
  249. package/build/server/chunks/chunks/{internal2.js-DZ8ZzzjN.js → internal.js-DZ8ZzzjN.js} +1 -1
  250. package/build/server/chunks/chunks/internal.js-DZ8ZzzjN.js.map +1 -0
  251. package/build/server/chunks/chunks/internal2.js-DDcktblR.js +188 -0
  252. package/build/server/chunks/chunks/internal2.js-DDcktblR.js.map +1 -0
  253. package/build/server/chunks/chunks/key.svelte.js-CWIvXc6L.js +695 -0
  254. package/build/server/chunks/chunks/key.svelte.js-CWIvXc6L.js.map +1 -0
  255. package/build/server/chunks/chunks/{internal.js-Cc3oBhL-.js → legacy-client.js-DJmDw3Zx.js} +13 -439
  256. package/build/server/chunks/chunks/legacy-client.js-DJmDw3Zx.js.map +1 -0
  257. package/build/server/chunks/chunks/level-filter.js-H_AdNbCw.js +297 -0
  258. package/build/server/chunks/chunks/level-filter.js-H_AdNbCw.js.map +1 -0
  259. package/build/server/chunks/chunks/lineRadial.js-Dm0GMqo3.js +126 -0
  260. package/build/server/chunks/chunks/lineRadial.js-Dm0GMqo3.js.map +1 -0
  261. package/build/server/chunks/chunks/linear.js-CTOKrHn9.js +1046 -0
  262. package/build/server/chunks/chunks/linear.js-CTOKrHn9.js.map +1 -0
  263. package/build/server/chunks/chunks/log-buffer.js-CpI7gyom.js +471 -0
  264. package/build/server/chunks/chunks/log-buffer.js-CpI7gyom.js.map +1 -0
  265. package/build/server/chunks/chunks/math.js-BqujbaBs.js +50 -0
  266. package/build/server/chunks/chunks/math.js-BqujbaBs.js.map +1 -0
  267. package/build/server/chunks/chunks/max.js-CuS0BpRI.js +11 -0
  268. package/build/server/chunks/chunks/max.js-CuS0BpRI.js.map +1 -0
  269. package/build/server/chunks/chunks/min.js-DZWt5tPl.js +11 -0
  270. package/build/server/chunks/chunks/min.js-DZWt5tPl.js.map +1 -0
  271. package/build/server/chunks/chunks/motion.svelte.js-DCHSFMu-.js +677 -0
  272. package/build/server/chunks/chunks/motion.svelte.js-DCHSFMu-.js.map +1 -0
  273. package/build/server/chunks/chunks/occlusion.js-DJ-AdK9u.js +33 -0
  274. package/build/server/chunks/chunks/occlusion.js-DJ-AdK9u.js.map +1 -0
  275. package/build/server/chunks/chunks/path.js-BizMrlzb.js +488 -0
  276. package/build/server/chunks/chunks/path.js-BizMrlzb.js.map +1 -0
  277. package/build/server/chunks/chunks/path2.js-pquT2Kg6.js +27 -0
  278. package/build/server/chunks/chunks/path2.js-pquT2Kg6.js.map +1 -0
  279. package/build/server/chunks/chunks/pointRadial.js-Deeu1LXx.js +7 -0
  280. package/build/server/chunks/chunks/pointRadial.js-Deeu1LXx.js.map +1 -0
  281. package/build/server/chunks/chunks/rect.svelte.js-zeS7FWjB.js +187 -0
  282. package/build/server/chunks/chunks/rect.svelte.js-zeS7FWjB.js.map +1 -0
  283. package/build/server/chunks/chunks/scales.svelte.js-D_1popPi.js +276 -0
  284. package/build/server/chunks/chunks/scales.svelte.js-D_1popPi.js.map +1 -0
  285. package/build/server/chunks/chunks/series-buckets.js-CX_rWCeH.js +123 -0
  286. package/build/server/chunks/chunks/series-buckets.js-CX_rWCeH.js.map +1 -0
  287. package/build/server/chunks/chunks/{server.js-ByNB8uti.js → server.js-CAEBuMIH.js} +167 -2
  288. package/build/server/chunks/chunks/server.js-CAEBuMIH.js.map +1 -0
  289. package/build/server/chunks/chunks/source.js-DZEVvuho.js +21 -0
  290. package/build/server/chunks/chunks/source.js-DZEVvuho.js.map +1 -0
  291. package/build/server/chunks/chunks/{state.js-9DxsWxU-.js → state.js-Dves8H8h.js} +5 -4
  292. package/build/server/chunks/chunks/state.js-Dves8H8h.js.map +1 -0
  293. package/build/server/chunks/chunks/types.js-x3GyGPOz.js +11 -0
  294. package/build/server/chunks/chunks/types.js-x3GyGPOz.js.map +1 -0
  295. package/build/server/chunks/entries/endpoints/api/archive/_server.ts.js-sNd3lS0y.js +39 -0
  296. package/build/server/chunks/entries/endpoints/api/archive/_server.ts.js-sNd3lS0y.js.map +1 -0
  297. package/build/server/chunks/entries/endpoints/api/health/{_server.ts.js-BOjix7GN.js → _server.ts.js-VctnBhIJ.js} +5 -4
  298. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-VctnBhIJ.js.map +1 -0
  299. package/build/server/chunks/entries/endpoints/api/identity/{_server.ts.js-g13uvmrX.js → _server.ts.js-Dt540Sio.js} +4 -3
  300. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-Dt540Sio.js.map +1 -0
  301. package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-CmHRxdZK.js → _server.ts.js-BGyWbj78.js} +57 -8
  302. package/build/server/chunks/entries/endpoints/api/log-groups/_server.ts.js-BGyWbj78.js.map +1 -0
  303. package/build/server/chunks/entries/endpoints/api/regions/{_server.ts.js-BgUwioxp.js → _server.ts.js-CBqfN6Pg.js} +5 -4
  304. package/build/server/chunks/entries/endpoints/api/regions/_server.ts.js-CBqfN6Pg.js.map +1 -0
  305. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DjGMqXKo.js +194 -0
  306. package/build/server/chunks/entries/endpoints/api/series/_server.ts.js-DjGMqXKo.js.map +1 -0
  307. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-CIYo4C-0.js → _server.ts.js-C-XDemlx.js} +324 -223
  308. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-C-XDemlx.js.map +1 -0
  309. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CFonuZkV.js → error.svelte.js-DdUYlUJV.js} +7 -5
  310. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CFonuZkV.js.map → error.svelte.js-DdUYlUJV.js.map} +1 -1
  311. package/build/server/chunks/entries/pages/{_layout.svelte.js-Dzluuq12.js → _layout.svelte.js-CBQpEToy.js} +2 -2
  312. package/build/server/chunks/entries/pages/{_layout.svelte.js-Dzluuq12.js.map → _layout.svelte.js-CBQpEToy.js.map} +1 -1
  313. package/build/server/chunks/entries/pages/{_page.svelte.js-CpwYbxbM.js → _page.svelte.js-B-kVwiNh.js} +538 -351
  314. package/build/server/chunks/entries/pages/_page.svelte.js-B-kVwiNh.js.map +1 -0
  315. package/build/server/chunks/{handler-DS32NMsJ.js → handler-BHf-eLnl.js} +3 -3
  316. package/build/server/chunks/{handler-DS32NMsJ.js.map → handler-BHf-eLnl.js.map} +1 -1
  317. package/build/server/chunks/{index.js-HHu-yOEK.js → index.js-D6Auup1Z.js} +6 -5
  318. package/build/server/chunks/index.js-D6Auup1Z.js.map +1 -0
  319. package/build/server/chunks/{manifest.js-BUrA7Zyr.js → manifest.js-B3Q7n9I6.js} +24 -10
  320. package/build/server/chunks/manifest.js-B3Q7n9I6.js.map +1 -0
  321. package/build/server/chunks/nodes/0.js-BMP_Yttt.js +9 -0
  322. package/build/server/chunks/nodes/{0.js-gSRmrAt_.js.map → 0.js-BMP_Yttt.js.map} +1 -1
  323. package/build/server/chunks/nodes/1.js-2HQHUOse.js +9 -0
  324. package/build/server/chunks/nodes/{1.js-D68K7Ad_.js.map → 1.js-2HQHUOse.js.map} +1 -1
  325. package/build/server/chunks/nodes/2.js-7RtHpiHN.js +9 -0
  326. package/build/server/chunks/nodes/2.js-7RtHpiHN.js.map +1 -0
  327. package/dist/cli/completions.js +6 -0
  328. package/dist/cli/index.js +21 -1
  329. package/dist/cli/options.js +28 -2
  330. package/dist/cli/preflight.js +30 -0
  331. package/dist/lib/cli/aws.js +12 -4
  332. package/dist/lib/log-buffer.js +314 -0
  333. package/dist/lib/log-format.js +185 -0
  334. package/dist/lib/types.js +0 -4
  335. package/package.json +6 -2
  336. package/build/client/_app/immutable/assets/0.BPmQoXaO.css +0 -2
  337. package/build/client/_app/immutable/assets/0.BPmQoXaO.css.br +0 -0
  338. package/build/client/_app/immutable/assets/0.BPmQoXaO.css.gz +0 -0
  339. package/build/client/_app/immutable/chunks/Bw_9uNRP.js.br +0 -0
  340. package/build/client/_app/immutable/chunks/Bw_9uNRP.js.gz +0 -0
  341. package/build/client/_app/immutable/chunks/De_x7GQi.js +0 -1
  342. package/build/client/_app/immutable/chunks/De_x7GQi.js.br +0 -0
  343. package/build/client/_app/immutable/chunks/De_x7GQi.js.gz +0 -0
  344. package/build/client/_app/immutable/chunks/ZAD2y5xJ.js +0 -3
  345. package/build/client/_app/immutable/chunks/ZAD2y5xJ.js.br +0 -0
  346. package/build/client/_app/immutable/chunks/ZAD2y5xJ.js.gz +0 -0
  347. package/build/client/_app/immutable/entry/app.Be166AxG.js +0 -2
  348. package/build/client/_app/immutable/entry/app.Be166AxG.js.br +0 -0
  349. package/build/client/_app/immutable/entry/app.Be166AxG.js.gz +0 -0
  350. package/build/client/_app/immutable/entry/start.clEDpQL9.js +0 -1
  351. package/build/client/_app/immutable/entry/start.clEDpQL9.js.br +0 -0
  352. package/build/client/_app/immutable/entry/start.clEDpQL9.js.gz +0 -0
  353. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js +0 -1
  354. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js.br +0 -4
  355. package/build/client/_app/immutable/nodes/0.BJ6Zdc8H.js.gz +0 -0
  356. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js +0 -1
  357. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js.br +0 -0
  358. package/build/client/_app/immutable/nodes/1.xMNWuLLz.js.gz +0 -0
  359. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js +0 -5
  360. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js.br +0 -0
  361. package/build/client/_app/immutable/nodes/2.CaxDXwmh.js.gz +0 -0
  362. package/build/server/chunks/chunks/env2.js-DXveJt1Y.js.map +0 -1
  363. package/build/server/chunks/chunks/exports.js-CvFPPbaH.js.map +0 -1
  364. package/build/server/chunks/chunks/internal.js-Cc3oBhL-.js.map +0 -1
  365. package/build/server/chunks/chunks/internal2.js-DZ8ZzzjN.js.map +0 -1
  366. package/build/server/chunks/chunks/server.js-ByNB8uti.js.map +0 -1
  367. package/build/server/chunks/chunks/state.js-9DxsWxU-.js.map +0 -1
  368. package/build/server/chunks/entries/endpoints/api/health/_server.ts.js-BOjix7GN.js.map +0 -1
  369. package/build/server/chunks/entries/endpoints/api/identity/_server.ts.js-g13uvmrX.js.map +0 -1
  370. package/build/server/chunks/entries/endpoints/api/log-groups/_server.ts.js-CmHRxdZK.js.map +0 -1
  371. package/build/server/chunks/entries/endpoints/api/regions/_server.ts.js-BgUwioxp.js.map +0 -1
  372. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-CIYo4C-0.js.map +0 -1
  373. package/build/server/chunks/entries/pages/_page.svelte.js-CpwYbxbM.js.map +0 -1
  374. package/build/server/chunks/index.js-HHu-yOEK.js.map +0 -1
  375. package/build/server/chunks/manifest.js-BUrA7Zyr.js.map +0 -1
  376. package/build/server/chunks/nodes/0.js-gSRmrAt_.js +0 -9
  377. package/build/server/chunks/nodes/1.js-D68K7Ad_.js +0 -9
  378. package/build/server/chunks/nodes/2.js-ChYsaaoC.js +0 -9
  379. package/build/server/chunks/nodes/2.js-ChYsaaoC.js.map +0 -1
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Pure client-side log storage and filtering for the watch-stream UI.
3
+ *
4
+ * Design decisions (kept in one place so the UI stays predictable):
5
+ *
6
+ * - The visible buffer is a fixed-capacity ring buffer. When it is full the oldest line is
7
+ * dropped, so memory stays bounded while tailing a busy group.
8
+ * - Pausing keeps the SSE connection open and keeps receiving events. Incoming events are held in
9
+ * a bounded pending buffer instead of the visible buffer, and are flushed in arrival order when
10
+ * the user resumes.
11
+ */
12
+ import { findJsonInMessage } from './log-format';
13
+ /** Maximum number of lines kept in the visible client buffer. */
14
+ export const DEFAULT_CAPACITY = 5000;
15
+ const ERROR_PATTERN = /\b(ERROR|FATAL|CRITICAL|CRIT|PANIC|EXCEPTION|TRACEBACK|SEVERE|FAILED|FAILURE)\b/;
16
+ const WARN_PATTERN = /\b(WARN|WARNING)\b/;
17
+ const DEBUG_PATTERN = /\b(DEBUG|TRACE|VERBOSE)\b/;
18
+ /** Payload keys checked, in order, for a level the producer declared. */
19
+ export const LEVEL_KEYS = ['level', 'severity', 'lvl', 'logLevel', 'log_level'];
20
+ /**
21
+ * Declared level words mapped onto the four levels the UI knows.
22
+ *
23
+ * The vocabulary is deliberately small: `fatal` and `critical` are errors to
24
+ * everyone reading a log, and collapsing them keeps the filter and the colours
25
+ * honest instead of inventing levels nothing else understands.
26
+ */
27
+ const LEVEL_WORDS = {
28
+ trace: 'debug',
29
+ verbose: 'debug',
30
+ debug: 'debug',
31
+ info: 'info',
32
+ information: 'info',
33
+ notice: 'info',
34
+ note: 'info',
35
+ warn: 'warn',
36
+ warning: 'warn',
37
+ error: 'error',
38
+ err: 'error',
39
+ exception: 'error',
40
+ fatal: 'error',
41
+ critical: 'error',
42
+ crit: 'error',
43
+ panic: 'error',
44
+ severe: 'error',
45
+ alert: 'error',
46
+ emergency: 'error',
47
+ };
48
+ /**
49
+ * Bunyan/pino style numeric levels.
50
+ *
51
+ * Only exact known values are mapped: a bare number such as `{"level":0}` means
52
+ * different things in different loggers, so an unknown number falls through to
53
+ * the text heuristic instead of being guessed at.
54
+ */
55
+ const NUMERIC_LEVELS = {
56
+ 10: 'debug',
57
+ 20: 'debug',
58
+ 30: 'info',
59
+ 40: 'warn',
60
+ 50: 'error',
61
+ 60: 'error',
62
+ };
63
+ /** True when a value is one of the four known levels. */
64
+ export function isLogLevel(value) {
65
+ return value === 'error' || value === 'warn' || value === 'info' || value === 'debug';
66
+ }
67
+ /** Converts one declared JSON value into a level, or `null` when unrecognised. */
68
+ export function levelFromDeclared(value) {
69
+ if (typeof value === 'number' && Number.isFinite(value)) {
70
+ return NUMERIC_LEVELS[value] ?? null;
71
+ }
72
+ if (typeof value !== 'string')
73
+ return null;
74
+ const word = value.trim().toLowerCase();
75
+ if (word.length === 0)
76
+ return null;
77
+ return LEVEL_WORDS[word] ?? null;
78
+ }
79
+ /**
80
+ * Level the payload declares, when the line carries a JSON object with a known
81
+ * level key. Whole messages and "prefix then payload" lines are both handled,
82
+ * by the same parser the viewer uses to pretty-print JSON.
83
+ */
84
+ function declaredLevel(message) {
85
+ const payload = findJsonInMessage(message);
86
+ if (payload === null || typeof payload !== 'object' || Array.isArray(payload))
87
+ return null;
88
+ const record = payload;
89
+ for (const key of LEVEL_KEYS) {
90
+ const level = levelFromDeclared(record[key]);
91
+ if (level !== null)
92
+ return level;
93
+ }
94
+ return null;
95
+ }
96
+ /**
97
+ * Detects the severity of a log line.
98
+ *
99
+ * A level the payload declares wins, because it is a statement of fact; the
100
+ * text heuristic is the fallback for the many logs that declare nothing. The
101
+ * heuristic matches level words anywhere in the line, so
102
+ * `{"level":"info","msg":"retry after error count 0"}` is `info`, not `error`.
103
+ */
104
+ export function detectLevelWithSource(message) {
105
+ const declared = declaredLevel(message ?? '');
106
+ if (declared !== null)
107
+ return { level: declared, source: 'json' };
108
+ const upper = (message ?? '').toUpperCase();
109
+ if (ERROR_PATTERN.test(upper))
110
+ return { level: 'error', source: 'text' };
111
+ if (WARN_PATTERN.test(upper))
112
+ return { level: 'warn', source: 'text' };
113
+ if (DEBUG_PATTERN.test(upper))
114
+ return { level: 'debug', source: 'text' };
115
+ return { level: null, source: null };
116
+ }
117
+ /**
118
+ * Guesses the severity of a log line from its text, or returns `null` when the
119
+ * line carries no signal at all (a stack-trace continuation, for example).
120
+ */
121
+ export function detectLevel(message) {
122
+ return detectLevelWithSource(message).level;
123
+ }
124
+ /** Level of an event: what the server detected, else a guess from the text. */
125
+ export function effectiveLevel(event) {
126
+ return event.level !== undefined ? event.level : detectLevel(event.message);
127
+ }
128
+ /** True when an event passes a level filter; a `null` filter accepts every line. */
129
+ export function matchesLevel(event, level) {
130
+ return level === null || effectiveLevel(event) === level;
131
+ }
132
+ /** Filters events by level, keeping every line when `level` is `null`. */
133
+ export function filterByLevel(events, level) {
134
+ if (level === null)
135
+ return events.slice();
136
+ return events.filter((event) => matchesLevel(event, level));
137
+ }
138
+ /** Tailwind text colour class for a severity; an unknown level stays neutral. */
139
+ export function levelColorClass(level) {
140
+ switch (level) {
141
+ case 'error':
142
+ return 'text-red-400';
143
+ case 'warn':
144
+ return 'text-amber-300';
145
+ case 'debug':
146
+ return 'text-neutral-500';
147
+ default:
148
+ return 'text-neutral-200';
149
+ }
150
+ }
151
+ /** Stable key for rendering a log line, since event ids can repeat or be missing. */
152
+ export function eventKey(event, index) {
153
+ return `${event.id ?? 'no-id'}:${event.timestamp}:${index}`;
154
+ }
155
+ /** Case-insensitive substring match over the message and the stream name. */
156
+ export function matchesFilter(event, query) {
157
+ const needle = (query ?? '').trim().toLowerCase();
158
+ if (needle === '')
159
+ return true;
160
+ const haystack = `${event.message ?? ''} ${event.streamName ?? ''}`.toLowerCase();
161
+ return haystack.includes(needle);
162
+ }
163
+ /** Returns the events matching `query`, in arrival order. */
164
+ export function filterEvents(events, query) {
165
+ if ((query ?? '').trim() === '')
166
+ return events.slice();
167
+ return events.filter((event) => matchesFilter(event, query));
168
+ }
169
+ /** Creates an array of `length` undefined slots. */
170
+ function emptySlots(length) {
171
+ return Array.from({ length });
172
+ }
173
+ /**
174
+ * Fixed-capacity ring buffer that overwrites the oldest item once it is full.
175
+ */
176
+ export class LogRingBuffer {
177
+ /** Maximum number of items kept. */
178
+ capacity;
179
+ #items;
180
+ #start = 0;
181
+ #size = 0;
182
+ #dropped = 0;
183
+ constructor(capacity = DEFAULT_CAPACITY) {
184
+ if (!Number.isInteger(capacity) || capacity <= 0) {
185
+ throw new RangeError(`capacity must be a positive integer, received ${capacity}`);
186
+ }
187
+ this.capacity = capacity;
188
+ this.#items = emptySlots(capacity);
189
+ }
190
+ /** Number of items currently stored. */
191
+ get size() {
192
+ return this.#size;
193
+ }
194
+ /** Number of items discarded because the buffer was full. */
195
+ get dropped() {
196
+ return this.#dropped;
197
+ }
198
+ /** True when the buffer holds `capacity` items. */
199
+ get full() {
200
+ return this.#size === this.capacity;
201
+ }
202
+ /** Appends one item, dropping the oldest item when the buffer is full. */
203
+ push(item) {
204
+ if (this.#size === this.capacity) {
205
+ this.#dropped += 1;
206
+ this.#start = (this.#start + 1) % this.capacity;
207
+ this.#size -= 1;
208
+ }
209
+ const index = (this.#start + this.#size) % this.capacity;
210
+ this.#items[index] = item;
211
+ this.#size += 1;
212
+ }
213
+ /** Appends several items in order. */
214
+ pushMany(items) {
215
+ for (const item of items)
216
+ this.push(item);
217
+ }
218
+ /** Copies the stored items into an array ordered oldest to newest. */
219
+ toArray() {
220
+ const output = emptySlots(this.#size);
221
+ for (let offset = 0; offset < this.#size; offset += 1) {
222
+ output[offset] = this.#items[(this.#start + offset) % this.capacity];
223
+ }
224
+ // Every slot below `size` was filled by push().
225
+ return output;
226
+ }
227
+ /** Oldest stored item, or `undefined` when empty. */
228
+ first() {
229
+ return this.#size === 0 ? undefined : this.#items[this.#start];
230
+ }
231
+ /** Newest stored item, or `undefined` when empty. */
232
+ last() {
233
+ return this.#size === 0
234
+ ? undefined
235
+ : this.#items[(this.#start + this.#size - 1) % this.capacity];
236
+ }
237
+ /** Removes every item and resets the dropped counter. */
238
+ clear() {
239
+ this.#items = emptySlots(this.capacity);
240
+ this.#start = 0;
241
+ this.#size = 0;
242
+ this.#dropped = 0;
243
+ }
244
+ }
245
+ /**
246
+ * Log store used by the UI: a visible ring buffer plus a pending buffer that fills up while the
247
+ * view is paused. `push()` never drops silent data, it either appends to the visible buffer or to
248
+ * the pending buffer; `resume()` moves the pending events into the visible buffer in order.
249
+ */
250
+ export class LogStore {
251
+ buffer;
252
+ #pending;
253
+ #paused = false;
254
+ constructor(capacity = DEFAULT_CAPACITY) {
255
+ this.buffer = new LogRingBuffer(capacity);
256
+ this.#pending = new LogRingBuffer(capacity);
257
+ }
258
+ /** True when incoming events are buffered instead of appended to the visible buffer. */
259
+ get paused() {
260
+ return this.#paused;
261
+ }
262
+ /** Number of visible lines. */
263
+ get size() {
264
+ return this.buffer.size;
265
+ }
266
+ /** Number of lines held back while paused. */
267
+ get pendingCount() {
268
+ return this.#pending.size;
269
+ }
270
+ /** Number of visible lines dropped because the buffer was full. */
271
+ get droppedCount() {
272
+ return this.buffer.dropped;
273
+ }
274
+ /** Appends events to the visible buffer, or holds them back while paused. */
275
+ push(events) {
276
+ if (this.#paused) {
277
+ this.#pending.pushMany(events);
278
+ return;
279
+ }
280
+ this.buffer.pushMany(events);
281
+ }
282
+ /** Pauses or resumes appending. Resuming flushes the pending events immediately. */
283
+ setPaused(paused) {
284
+ if (paused === this.#paused)
285
+ return [];
286
+ this.#paused = paused;
287
+ return paused ? [] : this.flush();
288
+ }
289
+ /** Pauses appending to the visible buffer. */
290
+ pause() {
291
+ this.#paused = true;
292
+ }
293
+ /** Resumes appending and returns the events flushed from the pending buffer. */
294
+ resume() {
295
+ this.#paused = false;
296
+ return this.flush();
297
+ }
298
+ /** Moves every pending event into the visible buffer, oldest first. */
299
+ flush() {
300
+ const flushed = this.#pending.toArray();
301
+ this.#pending.clear();
302
+ this.buffer.pushMany(flushed);
303
+ return flushed;
304
+ }
305
+ /** Copies the visible lines, oldest first. */
306
+ toArray() {
307
+ return this.buffer.toArray();
308
+ }
309
+ /** Empties the visible buffer and discards pending events. */
310
+ clear() {
311
+ this.buffer.clear();
312
+ this.#pending.clear();
313
+ }
314
+ }
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Formatting helpers for the log viewer.
3
+ *
4
+ * CloudWatch log lines are often JSON (`{"level":"info",...}`); the viewer can
5
+ * pretty-print them so nested payloads stay readable. Everything here is pure so
6
+ * it can be unit tested without a DOM.
7
+ */
8
+ /**
9
+ * Parses a log message that is entirely JSON.
10
+ *
11
+ * Only objects and arrays count: a message that happens to be `42` or `"ok"` is
12
+ * left alone, and anything that does not parse is not JSON. Leading and trailing
13
+ * whitespace is ignored.
14
+ */
15
+ export function detectJson(message) {
16
+ if (typeof message !== 'string')
17
+ return null;
18
+ const trimmed = message.trim();
19
+ if (trimmed.length === 0)
20
+ return null;
21
+ const first = trimmed[0];
22
+ if (first !== '{' && first !== '[')
23
+ return null;
24
+ try {
25
+ const parsed = JSON.parse(trimmed);
26
+ if (parsed === null || typeof parsed !== 'object')
27
+ return null;
28
+ return parsed;
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /**
35
+ * Returns the text to render for a log message.
36
+ *
37
+ * `prettyJson` is normally true: JSON messages are re-serialised with two-space
38
+ * indentation. With `prettyJson` false the raw message is returned unchanged,
39
+ * which is what the viewer's JSON toggle switches to.
40
+ */
41
+ export function formatLogMessage(message, options = {}) {
42
+ const { prettyJson = true } = options;
43
+ const value = detectJson(message);
44
+ if (value === null || !prettyJson) {
45
+ return { text: message, isJson: value !== null, value };
46
+ }
47
+ return { text: JSON.stringify(value, null, 2), isJson: true, value };
48
+ }
49
+ const NUMBER_PATTERN = /^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?$/;
50
+ /**
51
+ * Splits pretty-printed JSON into coloured tokens.
52
+ *
53
+ * The concatenation of every token's `text` is always identical to the input, so
54
+ * rendering tokens can never lose or alter a character. This is a display-only
55
+ * scanner: it assumes well-formed JSON produced by `JSON.stringify`.
56
+ */
57
+ export function tokenizeJson(text) {
58
+ const tokens = [];
59
+ let index = 0;
60
+ const push = (type, value) => {
61
+ if (value.length > 0)
62
+ tokens.push({ type, text: value });
63
+ };
64
+ while (index < text.length) {
65
+ const char = text[index];
66
+ if (char === ' ' || char === '\n' || char === '\t' || char === '\r') {
67
+ let end = index;
68
+ while (end < text.length && ' \n\t\r'.includes(text[end]))
69
+ end += 1;
70
+ push('whitespace', text.slice(index, end));
71
+ index = end;
72
+ continue;
73
+ }
74
+ if (char === '"') {
75
+ // A string: walk to the closing quote, honouring backslash escapes.
76
+ let end = index + 1;
77
+ while (end < text.length) {
78
+ if (text[end] === '\\') {
79
+ end += 2;
80
+ continue;
81
+ }
82
+ if (text[end] === '"')
83
+ break;
84
+ end += 1;
85
+ }
86
+ const raw = text.slice(index, Math.min(end + 1, text.length));
87
+ // A string followed by `:` is an object key.
88
+ let lookahead = index + raw.length;
89
+ while (lookahead < text.length && ' \n\t\r'.includes(text[lookahead]))
90
+ lookahead += 1;
91
+ push(text[lookahead] === ':' ? 'key' : 'string', raw);
92
+ index += raw.length;
93
+ continue;
94
+ }
95
+ if (char === '{' ||
96
+ char === '}' ||
97
+ char === '[' ||
98
+ char === ']' ||
99
+ char === ',' ||
100
+ char === ':') {
101
+ push('punctuation', char);
102
+ index += 1;
103
+ continue;
104
+ }
105
+ if (text.startsWith('true', index) || text.startsWith('false', index)) {
106
+ const literal = text.startsWith('true', index) ? 'true' : 'false';
107
+ push('boolean', literal);
108
+ index += literal.length;
109
+ continue;
110
+ }
111
+ if (text.startsWith('null', index)) {
112
+ push('null', 'null');
113
+ index += 4;
114
+ continue;
115
+ }
116
+ // A number, or anything unexpected: consume up to the next structural byte.
117
+ let end = index;
118
+ while (end < text.length && !'{}[],:" \n\t\r'.includes(text[end]))
119
+ end += 1;
120
+ const raw = text.slice(index, Math.max(end, index + 1));
121
+ push(NUMBER_PATTERN.test(raw) ? 'number' : 'other', raw);
122
+ index += raw.length;
123
+ }
124
+ return tokens;
125
+ }
126
+ /**
127
+ * Finds the first JSON object or array inside a log message.
128
+ *
129
+ * Whole messages are handled by {@link detectJson}; this also copes with the
130
+ * common "prefix then payload" shape (`2026-01-01 INFO {"level":"info"}`), which
131
+ * is what the viewer expands when pretty-printing is switched off.
132
+ *
133
+ * Strings and escapes are respected while matching brackets, so a `}` inside a
134
+ * message value cannot end the scan early.
135
+ */
136
+ export function findJsonInMessage(message) {
137
+ if (typeof message !== 'string')
138
+ return null;
139
+ const whole = detectJson(message);
140
+ if (whole !== null)
141
+ return whole;
142
+ for (let index = 0; index < message.length; index += 1) {
143
+ const opener = message[index];
144
+ if (opener !== '{' && opener !== '[')
145
+ continue;
146
+ const closer = opener === '{' ? '}' : ']';
147
+ let depth = 0;
148
+ let inString = false;
149
+ let escaped = false;
150
+ for (let scan = index; scan < message.length; scan += 1) {
151
+ const char = message[scan];
152
+ if (inString) {
153
+ if (escaped)
154
+ escaped = false;
155
+ else if (char === '\\')
156
+ escaped = true;
157
+ else if (char === '"')
158
+ inString = false;
159
+ continue;
160
+ }
161
+ if (char === '"') {
162
+ inString = true;
163
+ continue;
164
+ }
165
+ if (char === opener)
166
+ depth += 1;
167
+ else if (char === closer) {
168
+ depth -= 1;
169
+ if (depth === 0) {
170
+ const candidate = message.slice(index, scan + 1);
171
+ try {
172
+ const parsed = JSON.parse(candidate);
173
+ if (parsed !== null && typeof parsed === 'object')
174
+ return parsed;
175
+ }
176
+ catch {
177
+ // Not JSON after all: keep scanning for the next opener.
178
+ }
179
+ break;
180
+ }
181
+ }
182
+ }
183
+ }
184
+ return null;
185
+ }
package/dist/lib/types.js CHANGED
@@ -1,5 +1 @@
1
- /**
2
- * Shared wire types between the SvelteKit server routes and the browser UI.
3
- * Keep this file free of runtime imports so both sides can import it.
4
- */
5
1
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "watch-tail",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Tail Amazon CloudWatch Logs in your browser: a local SvelteKit UI with live and historic streaming, ambient AWS credentials and floci support",
5
5
  "keywords": [
6
6
  "aws",
@@ -41,7 +41,8 @@
41
41
  "@aws-sdk/client-sts": "^3.1130.0",
42
42
  "@bomb.sh/args": "^0.3.1",
43
43
  "@bomb.sh/tab": "^0.0.22",
44
- "@clack/prompts": "^1.8.0"
44
+ "@clack/prompts": "^1.8.0",
45
+ "layerchart": "^2.5.0"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@changesets/changelog-github": "^1.0.1",
@@ -65,6 +66,9 @@
65
66
  "vite": "^8.0.16",
66
67
  "vitest": "^4.1.8"
67
68
  },
69
+ "optionalDependencies": {
70
+ "@duckdb/node-api": "^1.5.5-r.4"
71
+ },
68
72
  "engines": {
69
73
  "node": ">=22"
70
74
  },
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-900:oklch(38% .189 293.745);--color-violet-950:oklch(28.3% .141 291.089);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-neutral-100:oklch(97% 0 none);--color-neutral-200:oklch(92.2% 0 none);--color-neutral-300:oklch(87% 0 none);--color-neutral-400:oklch(70.8% 0 none);--color-neutral-500:oklch(55.6% 0 none);--color-neutral-600:oklch(43.9% 0 none);--color-neutral-700:oklch(37.1% 0 none);--color-neutral-800:oklch(26.9% 0 none);--color-neutral-900:oklch(20.5% 0 none);--color-neutral-950:oklch(14.5% 0 none);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-y-0{inset-block:0}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.h-5{height:calc(var(--spacing) * 5)}.h-dvh{height:100dvh}.min-h-0{min-height:0}.min-h-\[30rem\]{min-height:30rem}.min-h-full{min-height:100%}.w-2{width:calc(var(--spacing) * 2)}.w-40{width:calc(var(--spacing) * 40)}.w-\[7\.5rem\]{width:7.5rem}.w-full{width:100%}.w-max{width:max-content}.max-w-\[22rem\]{max-width:22rem}.min-w-0{min-width:0}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-amber-700{border-color:var(--color-amber-700)}.border-amber-900{border-color:var(--color-amber-900)}.border-emerald-900{border-color:var(--color-emerald-900)}.border-neutral-700{border-color:var(--color-neutral-700)}.border-neutral-800{border-color:var(--color-neutral-800)}.border-neutral-900{border-color:var(--color-neutral-900)}.border-red-900{border-color:var(--color-red-900)}.border-sky-700{border-color:var(--color-sky-700)}.border-sky-800{border-color:var(--color-sky-800)}.border-sky-900{border-color:var(--color-sky-900)}.border-transparent{border-color:#0000}.border-violet-900{border-color:var(--color-violet-900)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-950\/40{background-color:#46190166}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/40{background-color:color-mix(in oklab, var(--color-amber-950) 40%, transparent)}}.bg-amber-950\/50{background-color:#46190180}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/50{background-color:color-mix(in oklab, var(--color-amber-950) 50%, transparent)}}.bg-amber-950\/70{background-color:#461901b3}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/70{background-color:color-mix(in oklab, var(--color-amber-950) 70%, transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-950\/70{background-color:#002c22b3}@supports (color:color-mix(in lab, red, red)){.bg-emerald-950\/70{background-color:color-mix(in oklab, var(--color-emerald-950) 70%, transparent)}}.bg-neutral-500{background-color:var(--color-neutral-500)}.bg-neutral-800\/60{background-color:#26262699}@supports (color:color-mix(in lab, red, red)){.bg-neutral-800\/60{background-color:color-mix(in oklab, var(--color-neutral-800) 60%, transparent)}}.bg-neutral-800\/80{background-color:#262626cc}@supports (color:color-mix(in lab, red, red)){.bg-neutral-800\/80{background-color:color-mix(in oklab, var(--color-neutral-800) 80%, transparent)}}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-neutral-900\/40{background-color:#17171766}@supports (color:color-mix(in lab, red, red)){.bg-neutral-900\/40{background-color:color-mix(in oklab, var(--color-neutral-900) 40%, transparent)}}.bg-neutral-900\/60{background-color:#17171799}@supports (color:color-mix(in lab, red, red)){.bg-neutral-900\/60{background-color:color-mix(in oklab, var(--color-neutral-900) 60%, transparent)}}.bg-neutral-900\/70{background-color:#171717b3}@supports (color:color-mix(in lab, red, red)){.bg-neutral-900\/70{background-color:color-mix(in oklab, var(--color-neutral-900) 70%, transparent)}}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-neutral-950\/60{background-color:#0a0a0a99}@supports (color:color-mix(in lab, red, red)){.bg-neutral-950\/60{background-color:color-mix(in oklab, var(--color-neutral-950) 60%, transparent)}}.bg-neutral-950\/90{background-color:#0a0a0ae6}@supports (color:color-mix(in lab, red, red)){.bg-neutral-950\/90{background-color:color-mix(in oklab, var(--color-neutral-950) 90%, transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-950\/50{background-color:#46080980}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/50{background-color:color-mix(in oklab, var(--color-red-950) 50%, transparent)}}.bg-red-950\/70{background-color:#460809b3}@supports (color:color-mix(in lab, red, red)){.bg-red-950\/70{background-color:color-mix(in oklab, var(--color-red-950) 70%, transparent)}}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-950\/50{background-color:#052f4a80}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/50{background-color:color-mix(in oklab, var(--color-sky-950) 50%, transparent)}}.bg-sky-950\/60{background-color:#052f4a99}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/60{background-color:color-mix(in oklab, var(--color-sky-950) 60%, transparent)}}.bg-sky-950\/70{background-color:#052f4ab3}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/70{background-color:color-mix(in oklab, var(--color-sky-950) 70%, transparent)}}.bg-transparent{background-color:#0000}.bg-violet-950\/60{background-color:#2f0d6899}@supports (color:color-mix(in lab, red, red)){.bg-violet-950\/60{background-color:color-mix(in oklab, var(--color-violet-950) 60%, transparent)}}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.pr-1{padding-right:var(--spacing)}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.6875rem\]{font-size:.6875rem}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-200{color:var(--color-amber-200)}.text-amber-300{color:var(--color-amber-300)}.text-amber-300\/80{color:#ffd236cc}@supports (color:color-mix(in lab, red, red)){.text-amber-300\/80{color:color-mix(in oklab, var(--color-amber-300) 80%, transparent)}}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.text-amber-400\/80{color:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400\/80{color:#00d294cc}@supports (color:color-mix(in lab, red, red)){.text-emerald-400\/80{color:color-mix(in oklab, var(--color-emerald-400) 80%, transparent)}}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-sky-200{color:var(--color-sky-200)}.text-sky-300{color:var(--color-sky-300)}.text-sky-400{color:var(--color-sky-400)}.text-sky-400\/80{color:#00bcfecc}@supports (color:color-mix(in lab, red, red)){.text-sky-400\/80{color:color-mix(in oklab, var(--color-sky-400) 80%, transparent)}}.text-violet-300{color:var(--color-violet-300)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.selection\:bg-sky-900\/60 ::selection{background-color:#024a7099}@supports (color:color-mix(in lab, red, red)){.selection\:bg-sky-900\/60 ::selection{background-color:color-mix(in oklab, var(--color-sky-900) 60%, transparent)}}.selection\:bg-sky-900\/60::selection{background-color:#024a7099}@supports (color:color-mix(in lab, red, red)){.selection\:bg-sky-900\/60::selection{background-color:color-mix(in oklab, var(--color-sky-900) 60%, transparent)}}.placeholder\:text-neutral-600::placeholder{color:var(--color-neutral-600)}@media (hover:hover){.hover\:border-neutral-700:hover{border-color:var(--color-neutral-700)}.hover\:border-neutral-800:hover{border-color:var(--color-neutral-800)}.hover\:border-sky-600:hover{border-color:var(--color-sky-600)}.hover\:bg-neutral-900\/60:hover{background-color:#17171799}@supports (color:color-mix(in lab, red, red)){.hover\:bg-neutral-900\/60:hover{background-color:color-mix(in oklab, var(--color-neutral-900) 60%, transparent)}}.hover\:bg-sky-500\/30:hover{background-color:#00a5ef4d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-sky-500\/30:hover{background-color:color-mix(in oklab, var(--color-sky-500) 30%, transparent)}}.hover\:text-neutral-100:hover{color:var(--color-neutral-100)}.hover\:text-neutral-200:hover{color:var(--color-neutral-200)}}.focus\:border-sky-600:focus{border-color:var(--color-sky-600)}.focus\:bg-sky-500\/50:focus{background-color:#00a5ef80}@supports (color:color-mix(in lab, red, red)){.focus\:bg-sky-500\/50:focus{background-color:color-mix(in oklab, var(--color-sky-500) 50%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:inline{display:inline}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}}@media (width>=64rem){.lg\:block{display:block}.lg\:w-2{width:calc(var(--spacing) * 2)}.lg\:shrink-0{flex-shrink:0}.lg\:flex-row{flex-direction:row}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
@@ -1 +0,0 @@
1
- import{A as e,K as t,M as n,U as r,W as i,j as a,k as o,n as s,t as c}from"./ZAD2y5xJ.js";var l=class{constructor(e,t){this.status=e,this.body=typeof t==`string`?{message:t}:t||{message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},u=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},d=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function f(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function p(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function ee(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(){}function g(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function _(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var te=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&v.delete(b(e)),te(e,t));var v=new Map;function y(e,t){let n=b(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=_(e));let i=r.getAttribute(`data-ttl`);return i&&v.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function ne(e,t,n){if(v.size>0){let t=b(e,n),r=v.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);v.delete(t)}}return window.fetch(t,n)}function b(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${g(...e)}"]`}return n}var re=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,ie=/^\/\((?:[^)]+)\)$/;function ae(e){let t=[];return{pattern:e===`/`||ie.test(e)?/^\/$/:RegExp(`^${se(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return le(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return le(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=re.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return le(e)}).join(``)}).join(``)}/?$`),params:t}}function oe(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function se(e){return e.slice(1).split(`/`).filter(oe)}function ce(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0){if(s.rest)c=``;else continue}if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function le(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}function ue({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=ae(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return ce(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function de(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function fe(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var x=globalThis.__sveltekit_nn6fis?.base??``,pe=globalThis.__sveltekit_nn6fis?.assets??x??``,me=`1789172167839`,he=`sveltekit:snapshot`,ge=`sveltekit:scroll`,_e=`sveltekit:states`,ve=`sveltekit:pageurl`,S=`sveltekit:history`,C=`sveltekit:navigation`,w={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},ye=location.origin;function be(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){let e=document.getElementsByTagName(`base`);t=e.length?e[0].href:document.URL}return new URL(e,t)}function T(){return{x:pageXOffset,y:pageYOffset}}function E(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var xe={...w,"":w.hover};function Se(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ce(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Se(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){let e=location.hash.split(`#`)[1]||`/`;r.hash=`#${e}${r.hash}`}}catch{}let i=e instanceof SVGAElement?e.target.baseVal:e.target,a=!r||!!i||O(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===ye&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function D(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=E(s,`preload-code`)),i===null&&(i=E(s,`preload-data`)),t===null&&(t=E(s,`keepfocus`)),n===null&&(n=E(s,`noscroll`)),a===null&&(a=E(s,`reload`)),o===null&&(o=E(s,`replacestate`)),s=Se(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:xe[r??`off`],preload_data:xe[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function Te(e){let n=t(e),r=!0;function i(){r=!0,n.update(e=>e)}function a(e){r=!1,n.set(e)}function o(e){let t;return n.subscribe(n=>{(t===void 0||r&&n!==t)&&e(t=n)})}return{notify:i,set:a,subscribe:o}}var Ee={v:h};function De(){let{set:e,subscribe:n}=t(!1),r;async function i(){clearTimeout(r);try{let t=await fetch(`${pe}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let n=(await t.json()).version!==me;return n&&(e(!0),Ee.v(),clearTimeout(r)),n}catch{return!1}}return{subscribe:n,check:i}}function O(e,t,n){return e.origin!==ye||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Oe(e){}var ke=2**32-1-1,Ae=Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function je(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null||Object.getPrototypeOf(t)===null||Object.getOwnPropertyNames(t).sort().join(`\0`)===Ae}function Me(e){return Object.prototype.toString.call(e).slice(8,-1)}function Ne(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.getOwnPropertyDescriptor(e,t).enumerable)}function Pe(e){return!(!Number.isInteger(e)||e<0||e>ke)}function Fe(e){if(e.length===0||e.length>1&&e.charCodeAt(0)===48)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<48||n>57)return!1}return Pe(+e)}function Ie(e){for(var t=e.length-1;t>=0&&!Fe(e[t]);t--);return t+1}function Le(e){let t=Object.keys(e);return t.length=Ie(t),t}Uint8Array.fromBase64,typeof process==`object`&&process.versions?.node;var Re=Object.freeze({kind:`not-plain`}),ze=Object.freeze({kind:`symbol-keys`});Object.freeze({identify:e=>e,typeOf:e=>e===null?`null`:typeof e,toPrimitive:e=>e,tagOf:e=>Me(e),isThenable:e=>typeof e.then==`function`,toPromise:e=>Promise.resolve(e),unbox:e=>e.valueOf(),toISOString:e=>isNaN(e.getDate())?``:e.toISOString(),toStringValue:e=>e.toString(),regExpInfo:e=>({source:e.source,flags:e.flags}),valuesOf:e=>e,entriesOf:e=>e,viewInfo:e=>({buffer:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength,length:e.length,bufferByteLength:e.buffer.byteLength}),toArrayBuffer:e=>e,lengthOf:e=>e.length,hasOwn:(e,t)=>Object.hasOwn(e,t),indicesOf:e=>Le(e),shapeOf:e=>je(e)?Ne(e).length>0?ze:{kind:Object.getPrototypeOf(e)===null?`null-proto`:`plain`,keys:Object.keys(e)}:Re,get:(e,t)=>e[t]}),Object.freeze({fromPrimitive:e=>e,fromISOString:e=>new Date(e),fromStringValue:(e,t)=>e===`URL`?new URL(t):e===`URLSearchParams`?new URLSearchParams(t):Temporal[e.slice(9)].from(t),fromArrayBuffer:e=>e,fromRegExpInfo:(e,t)=>new RegExp(e,t),fromViewInfo:(e,t,n,r)=>{let i=globalThis[e];return n===void 0?new i(t):new i(t,n,r)},box:e=>Object(e),createArray:e=>Array(e),createSparseArray:e=>{let t=[];return t[ke]=void 0,delete t[ke],t.length=e,t},createObject:()=>({}),createNullPrototypeObject:()=>Object.create(null),createSet:()=>new Set,createMap:()=>new Map,set:(e,t,n)=>{e[t]=n},addValue:(e,t)=>{e.add(t)},addEntry:(e,t,n)=>{e.set(t,n)}});var Be=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...Be],[...new Set([...Be])];function Ve(e){return e.filter(e=>e!=null)}function k(e,t){return e+`/`+t}function He(e){return e instanceof l||e instanceof d?e.status:500}function Ue(e){return e instanceof d?e.text:`Internal Error`}var A,j,We,Ge=s.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(s.toString()),Ke=`a:`;Ge?(A={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Ke)},j={current:null},We={current:!1}):(A=new class{#e=i({});get data(){return o(this.#e)}set data(e){r(this.#e,e)}#t=i(null);get form(){return o(this.#t)}set form(e){r(this.#t,e)}#n=i(null);get error(){return o(this.#n)}set error(e){r(this.#n,e)}#r=i({});get params(){return o(this.#r)}set params(e){r(this.#r,e)}#i=i({id:null});get route(){return o(this.#i)}set route(e){r(this.#i,e)}#a=i({});get state(){return o(this.#a)}set state(e){r(this.#a,e)}#o=i(-1);get status(){return o(this.#o)}set status(e){r(this.#o,e)}#s=i(new URL(Ke));get url(){return o(this.#s)}set url(e){r(this.#s,e)}},j=new class{#e=i(null);get current(){return o(this.#e)}set current(e){r(this.#e,e)}},We=new class{#e=i(!1);get current(){return o(this.#e)}set current(e){r(this.#e,e)}},Ee.v=()=>We.current=!0);function qe(e){Object.assign(A,e)}var{onMount:Je,tick:Ye}=c,Xe=n??(e=>e()),Ze=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),M=null,N=de(`sveltekit:scroll`)??{},P=de(`sveltekit:snapshot`)??{},F={url:Te({}),page:Te({}),navigating:t(null),updated:De()};function Qe(e){N[e]=T()}function $e(e,t){let n=e+1;for(;N[n];)delete N[n],n+=1;for(n=t+1;P[n];)delete P[n],n+=1}function I(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(h)}async function et(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(x||`/`);e&&await e.update()}}var tt,nt,L,R,rt,z,it={},at={},B=[],V=[],H=null;function ot(){H?.fork?.then(e=>e?.discard()),H=null,Q={element:void 0,href:void 0}}var st=new Map,ct=new Set,lt=new Set,U=new Set,W={branch:[],error:null,url:null,nav:null},ut=!1,G=!1,dt=!0,K=!1,q=!1,ft=!1,pt=!1,mt,J,Y,X,ht=new Set,gt=new Map,_t=new Map;async function vt(e,t,n){if(globalThis.__sveltekit_nn6fis.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_nn6fis.data;for(let t in e)it[t]=e[t];for(let e in n)it[e]=n[e];for(let e in r)it[e]=r[e];for(let e in t)at[e]=t[e]}document.URL!==location.href&&(location.href=location.href),z=e,await e.hooks.init?.(),tt=ue(e),R=document.documentElement,rt=t,nt=e.nodes[0],L=e.nodes[1],nt(),L(),J=history.state?.[S],Y=history.state?.[C],J||(J=Y=Date.now(),history.replaceState({...history.state,[S]:J,[C]:Y},``));let r=N[J];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await qt(rt,n)):(await Z({type:`enter`,url:be(z.hash?$t(new URL(location.href)):location.href),replace_state:!0}),i()),Kt()}function yt(){B.length=0,pt=!1}function bt(e){V.some(e=>e?.snapshot)&&(P[e]=V.map(e=>e?.snapshot?.capture()))}function xt(e){P[e]?.forEach((e,t)=>{V[t]?.snapshot?.restore(e)})}function St(){Qe(J),fe(ge,N),bt(Y),fe(he,P)}async function Ct(e,t,n,r){let i,o;t.invalidateAll&&ot(),await Z({type:`goto`,url:be(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:r,accept:()=>{if(t.invalidateAll){pt=!0,i=new Set;for(let[e,t]of gt)for(let[n,r]of t)r.resource?.reset(),i.add(k(e,n));o=new Set;for(let[e,t]of _t)for(let n of t.keys())o.add(k(e,n))}t.invalidate&&t.invalidate.forEach(Wt)}}),t.invalidateAll&&a().then(a).then(()=>{for(let[e,t]of gt)for(let[n,{resource:r}]of t)i?.has(k(e,n))&&r.start();for(let[e,t]of _t)for(let[n,{resource:r}]of t)o?.has(k(e,n))&&r.reconnect()})}async function wt(e){if(e.id!==H?.id){ot();let t={};ht.add(t),H={id:e.id,token:t,promise:Pt({...e,preload:t}).then(e=>(ht.delete(t),e.type===`loaded`&&e.state.error&&ot(),e)),fork:null}}return H.promise}async function Tt(e){let t=(await Rt(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function Et(e,t,n){let r={params:W.params,route:{id:W.route?.id??null},url:new URL(location.href)};if(W={...e.state,nav:r},qe(e.props.page),mt=new z.root({target:t,props:{...e.props,stores:F,components:V},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:N[J]??T()},willUnload:!1,type:`enter`,complete:Promise.resolve()};U.forEach(t=>t(e))}xt(Y),G=!0}async function Dt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(x&&(e.pathname===x||e.pathname===x+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=f(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:Ve(n).map(e=>e.node.component),page:Qt(A)}};s!==void 0&&(l.props.form=s);let u={},d=!A,p=0;for(let e=0;e<Math.max(n.length,W.branch.length);e+=1){let t=n[e],r=W.branch[e];t?.data!==r?.data&&(d=!0),t&&(u={...u,...t.data},d&&(l.props[`data_${p}`]=u),p+=1)}return(!W.url||e.href!==W.url.href||W.error!==a||s!==void 0&&s!==A.form||d)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:d?u:A.data}),l}async function Ot({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},s=await e();return{node:s,loader:e,server:a,universal:s.universal?.load?{type:`data`,data:null,uses:o}:null,data:a?.data??null,slash:s.universal?.trailingSlash??a?.slash}}function kt(e,t,n){let r=e instanceof Request?e.url:e,i=new URL(r,n);return i.origin===n.origin&&(r=i.href.slice(n.origin.length)),{resolved:i,promise:G?ne(r,i.href,t):y(r,t)}}function At(e,t,n,r,i,a){if(pt)return!0;if(!i)return!1;if(i.parent&&e||i.route&&t||i.url&&n)return!0;for(let e of i.search_params)if(r.has(e))return!0;for(let e of i.params)if(a[e]!==W.params[e])return!0;for(let e of i.dependencies)if(B.some(t=>t(new URL(e))))return!0;return!1}function jt(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function Mt(e,t){if(!e)return new Set(t.searchParams.keys());let n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(let r of n){let i=e.searchParams.getAll(r),a=t.searchParams.getAll(r);i.every(e=>a.includes(e))&&a.every(e=>i.includes(e))&&n.delete(r)}return n}function Nt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Qt(A),constructors:[]}}}async function Pt({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(H?.id===e)return ht.delete(H.token),H.promise;let{errors:o,layouts:s,leaf:c}=i,d=[...s,c];o.forEach(e=>e?.().catch(h)),d.forEach(e=>e?.[1]().catch(h));let f=W.url?e!==Bt(W.url):!1,p=W.route?i.id!==W.route.id:!1,ee=Mt(W.url,n),m=!1,g=d.map(async(e,t)=>{if(!e)return;let a=W.branch[t];return e[1]===a?.loader&&!At(m,p,f,ee,a.universal?.uses,r)?a:(m=!0,Ot({loader:e[1],url:n,params:r,route:i,parent:async()=>{let e={};for(let n=0;n<t;n+=1)Object.assign(e,(await g[n])?.data);return e},server_data_node:jt(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of g)e.catch(h);let _=[];for(let e=0;e<d.length;e+=1)if(d[e])try{_.push(await g[e])}catch(t){if(t instanceof u)return{type:`redirect`,location:t.location};if(a&&ht.has(a))return Nt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=He(t),c;if(t instanceof l)c=t.body;else{if(await F.updated.check())return await et(),await I(n);c=await $(t,{params:r,url:n,route:{id:i.id}})}let d=await Ft(e,_,o);return d?Dt({url:n,params:r,branch:_.slice(0,d.idx).concat(d.node),errors:o,status:s,error:c,route:i}):await Ht(n,{id:i.id},c,s)}else _.push(void 0);return Dt({url:n,params:r,branch:_,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Ft(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)--r;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function It({status:e,error:t,url:n,route:r}){let i={};try{return Dt({url:n,params:i,branch:[await Ot({loader:nt,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:jt(null)}),{node:await L(),loader:L,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof u){await Ct(new URL(t.location,location.href),{},0);return}let a=await z.get_error_template(),o=await $(t,{url:n,params:i,route:r}),s=a({status:e,message:String(o?.message??``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}),c=new DOMParser().parseFromString(s,`text/html`);throw document.documentElement.replaceChild(document.adoptNode(c.head),document.head),document.documentElement.replaceChild(document.adoptNode(c.body),document.body),t}}async function Lt(e){let t=e.href;if(st.has(t))return st.get(t);let n;try{let r=(async()=>{let t=await z.hooks.reroute({url:new URL(e),fetch:async(t,n)=>kt(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);z.hash?n.hash=t:n.pathname=t,t=n}return t})();st.set(t,r),n=await r}catch{st.delete(t);return}return n}async function Rt(e,t){if(e&&!O(e,x,z.hash)){let n=await Lt(e);if(!n)return;let r=zt(n);for(let n of tt){let i=n.exec(r);if(i)return{id:Bt(e),invalidating:t,route:n,params:ee(i),url:e}}}}function zt(e){return p(z.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(x.length))||`/`}function Bt(e){return(z.hash?e.hash.replace(/^#/,``):e.pathname)+e.search}function Vt({url:e,type:t,intent:n,delta:r,event:i,scroll:a}){let o=!1,s=Zt(W,n,e,t,a??null);r!==void 0&&(s.navigation.delta=r),i!==void 0&&(s.navigation.event=i);let c={...s.navigation,cancel:()=>{o=!0,s.reject(Error(`navigation cancelled`))}};return K||ct.forEach(e=>e(c)),o?null:s}async function Z({type:t,url:n,popped:r,keepfocus:i,noscroll:o,replace_state:s,state:c={},redirect_count:l=0,nav_token:u={},accept:f=h,block:p=h,event:ee}){let m=X;X=u;let g=await Rt(n,!1),_=t===`enter`?Zt(W,g,n,t):Vt({url:n,type:t,delta:r?.delta,intent:g,scroll:r?.scroll,event:ee});if(!_){p(),X===u&&(X=m);return}let te=J,v=Y;f(),K=!0,G&&_.navigation.type!==`enter`&&F.navigating.set(j.current=_.navigation);let y=g&&await Pt(g);if(!y){if(O(n,x,z.hash))return await I(n,s);y=await Ht(n,{id:null},await $(new d(404,`Not Found`,`Not found: ${n.pathname}`),{url:n,params:{},route:{id:null}}),404,s)}if(n=g?.url||n,X!==u){_.reject(Error(`navigation aborted`));return}if(!y)return;if(y.type===`redirect`){if(l<20){await Z({type:t,url:new URL(y.location,n),popped:r,keepfocus:i,noscroll:o,replace_state:s,state:c,redirect_count:l+1,nav_token:u}),_.fulfil(void 0);return}if(y=await It({status:500,error:await $(Error(`Redirect loop`),{url:n,params:{},route:{id:null}}),url:n,route:{id:null}}),!y)return}else if(y.props.page.status>=400&&await F.updated.check())return await et(),await I(n,s);if(yt(),Qe(te),bt(v),y.props.page.url.pathname!==n.pathname&&(n.pathname=y.props.page.url.pathname),c=r?r.state:c,!r){let e=+!s,t={[S]:J+=e,[C]:Y+=e,[_e]:c};(s?history.replaceState:history.pushState).call(history,t,``,n),s||$e(J,Y)}let ne=g&&H?.id===g.id?H.fork:null;H?.fork&&!ne?ot():(H=null,Q={element:void 0,href:void 0}),y.props.page.state=c;let b;if(G){let t=(await Promise.all(Array.from(lt,e=>e(_.navigation)))).filter(e=>typeof e==`function`);if(t.length>0){function e(){t.forEach(e=>{U.delete(e)})}t.push(e),t.forEach(e=>{U.add(e)})}let r=_.navigation.to;W={...y.state,nav:{params:r.params,route:r.route,url:r.url}},y.props.page&&(y.props.page.url=n),!i&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let a=ne&&await ne;a?b=a.commit():(M=null,mt.$set(y.props),M&&Object.assign(y.props.page,M),qe(y.props.page),b=e?.()),ft=!0}else await Et(y,rt,!1);let{activeElement:re}=document;if(await b,await a(),await a(),X!==u){_.reject(Error(`navigation aborted`));return}y.props.page&&M&&Object.assign(y.props.page,M);let ie=null;if(dt){let e=r?r.scroll:o?T():null;e?scrollTo(e.x,e.y):(ie=n.hash&&document.getElementById(en(n)))?ie.scrollIntoView():scrollTo(0,0)}let ae=document.activeElement!==re&&document.activeElement!==document.body;!i&&!ae&&Xt(n,!ie),dt=!0,K=!1,_.fulfil(void 0),_.navigation.to&&(_.navigation.to.scroll=T()),U.forEach(e=>e(_.navigation)),t===`popstate`&&xt(Y),F.navigating.set(j.current=null)}async function Ht(e,t,n,r,i){return e.origin===ye&&e.pathname===location.pathname&&!ut?await It({status:r,error:n,url:e,route:t}):await I(e,i)}var Q={element:void 0,href:void 0};function Ut(){let e,t;R.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,w.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],w.tap)}R.addEventListener(`mousedown`,n),R.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(Tt(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=Ce(e,R),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=we(r,x,z.hash);if(o||s)return;let c=D(r),l=a&&Bt(W.url)===Bt(a);if(!(c.reload||l)){if(n<=c.preload_data){Q={element:r,href:r.href},t=w.tap;let e=await Rt(a,!1);if(!e)return;wt(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,Tt(a))}}function a(){r.disconnect();for(let e of R.querySelectorAll(`a`)){let{url:t,external:n,download:i}=we(e,x,z.hash);if(n||i)continue;let a=D(e);a.reload||(a.preload_code===w.viewport&&r.observe(e),a.preload_code===w.eager&&Tt(t))}}U.add(a),a()}function $(e,t){if(e instanceof l)return e.body;let n=He(e),r=Ue(e);return z.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Wt(e){if(typeof e==`function`)B.push(e);else{let{href:t}=new URL(e,location.href);B.push(e=>e.href===t)}}function Gt(e,t){let n={[S]:J,[C]:Y,[ve]:A.url.href,[_e]:t};history.replaceState(n,``,be(e)),A.state=t,mt.$set({page:Xe(()=>Qt(A))})}function Kt(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(St(),!K){let e=Zt(W,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};ct.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&St()}),navigator.connection?.saveData||Ut(),R.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=Ce(t.composedPath()[0],R);if(!n)return;let{url:r,external:i,target:a,download:o}=we(n,x,z.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=D(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&r.protocol!==`https:`&&r.protocol!==`http:`||o)return;let[c,l]=(z.hash?r.hash.replace(/^#/,``):r.href).split(`#`),u=c===m(location);if(i||s.reload&&(!u||!l)){Vt({url:r,type:`link`,event:t})?K=!0:t.preventDefault();return}if(l!==void 0&&u){let[,i]=W.url.href.split(`#`);if(i===l){if(t.preventDefault(),l===``||l===`top`&&n.ownerDocument.getElementById(`top`)===null)scrollTo({top:0});else{let e=n.ownerDocument.getElementById(decodeURIComponent(l));e&&(e.scrollIntoView(),e.focus())}return}if(q=!0,Qe(J),e(r),!s.replace_state)return;q=!1}t.preventDefault(),await new Promise(e=>{requestAnimationFrame(()=>{setTimeout(e,0)}),setTimeout(e,100)}),await Z({type:`link`,url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:t})}),R.addEventListener(`submit`,e=>{if(e.defaultPrevented)return;let t=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if((n?.formTarget||t.target)===`_blank`||(n?.formMethod||t.method)!==`get`)return;let r=new URL(n?.hasAttribute(`formaction`)&&n?.formAction||t.action);if(O(r,x,!1))return;let i=e.target,a=D(i);if(a.reload)return;e.preventDefault(),e.stopPropagation();let o=new FormData(i,n);r.search=new URLSearchParams(o).toString(),Z({type:`form`,url:r,keepfocus:a.keepfocus,noscroll:a.noscroll,replace_state:a.replace_state??r.href===location.href,event:e})}),addEventListener(`popstate`,async t=>{if(!Yt){if(t.state?.[`sveltekit:history`]){let n=t.state[S];if(X={},n===J)return;let r=N[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[C],s=W.url?m(location)===m(W.url):!1;if(o===Y&&(ft||s)){i!==A.state&&(A.state=i),e(a),N[J]=T(),r&&scrollTo(r.x,r.y),J=n;return}let c=n-J;await Z({type:`popstate`,url:a,popped:{state:i,scroll:r,delta:c},accept:()=>{J=n,Y=o},block:()=>{history.go(-c)},nav_token:X,event:t})}else q||(e(new URL(location.href)),z.hash&&location.reload())}}),addEventListener(`hashchange`,()=>{q&&(q=!1,history.replaceState({...history.state,[S]:++J,[C]:Y},``,location.href))});for(let e of document.querySelectorAll(`link`))Ze.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&F.navigating.set(j.current=null)});function e(e){W.url=A.url=e,F.page.set(Qt(A)),F.page.notify()}}async function qt(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){ut=!0;let l=new URL(location.href),d;({params:i={},route:a={id:null}}=await Rt(l,!1)||{}),d=tt.find(({id:e})=>e===a.id);let f,p=!0;try{let e=r.map(async(t,n)=>{let r=s[n];return r?.uses&&(r.uses=Jt(r.uses)),Ot({loader:z.nodes[t],url:l,params:i,route:a,parent:async()=>{let t={};for(let r=0;r<n;r+=1)Object.assign(t,(await e[r]).data);return t},server_data_node:jt(r)})}),o=await Promise.all(e);if(d){let e=d.layouts;for(let t=0;t<e.length;t++)e[t]||o.splice(t,0,void 0)}f=await Dt({url:l,params:i,branch:o,status:t,error:n,errors:d?.errors,form:c,route:d??null})}catch(t){if(t instanceof u)return await I(new URL(t.location,location.href));f=await It({status:He(t),error:await $(t,{url:l,params:i,route:a}),url:l,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await Et(f,e,p))}function Jt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}var Yt=!1;function Xt(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=en(e);if(n&&document.getElementById(n)){let{x:r,y:i}=T();setTimeout(()=>{let a=history.state;Yt=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),Yt=!1})}else{let e=document.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)}let r=getSelection();if(r&&r.type!==`None`){let e=[];for(let t=0;t<r.rangeCount;t+=1)e.push(r.getRangeAt(t));setTimeout(()=>{if(r.rangeCount===e.length){for(let t=0;t<r.rangeCount;t+=1){let n=e[t],i=r.getRangeAt(t);if(n.commonAncestorContainer!==i.commonAncestorContainer||n.startContainer!==i.startContainer||n.endContainer!==i.endContainer||n.startOffset!==i.startOffset||n.endOffset!==i.endOffset)return}r.removeAllRanges()}})}}}function Zt(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(h),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:T()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:i},willUnload:!t,type:r,complete:s},fulfil:a,reject:o}}function Qt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function $t(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function en(e){let t;if(z.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Oe as a,A as i,vt as n,j as r,Gt as t};