watch-tail 0.7.1 → 0.8.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 (231) hide show
  1. package/README.md +15 -9
  2. package/build/client/_app/immutable/assets/0.zDk3x0WE.css +2 -0
  3. package/build/client/_app/immutable/assets/0.zDk3x0WE.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.zDk3x0WE.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/{EventScatter.DA5sZ1c0.css → EventScatter.CCk6ByS3.css} +1 -1
  6. package/build/client/_app/immutable/assets/EventScatter.CCk6ByS3.css.br +0 -0
  7. package/build/client/_app/immutable/assets/EventScatter.CCk6ByS3.css.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{BF84Orj8.js → 9z7cmAWt.js} +1 -1
  9. package/build/client/_app/immutable/chunks/9z7cmAWt.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/9z7cmAWt.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{BSy__Jrd.js → B26Z2DQX.js} +1 -1
  12. package/build/client/_app/immutable/chunks/B26Z2DQX.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/B26Z2DQX.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{CEw1go7g.js → B5kJ4QGS.js} +1 -1
  15. package/build/client/_app/immutable/chunks/B5kJ4QGS.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/B5kJ4QGS.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{DbWb9_dK.js → BF1MBUT7.js} +1 -1
  18. package/build/client/_app/immutable/chunks/BF1MBUT7.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/BF1MBUT7.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{BnRQs9nz.js → BJEa1AAY.js} +5 -5
  21. package/build/client/_app/immutable/chunks/BJEa1AAY.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/BJEa1AAY.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{8mpn3Xst.js → BKpbhYu9.js} +1 -1
  24. package/build/client/_app/immutable/chunks/BKpbhYu9.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/BKpbhYu9.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/{CgAZPeK7.js → BVlqiKgb.js} +1 -1
  27. package/build/client/_app/immutable/chunks/BVlqiKgb.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/BVlqiKgb.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{3fFVdy92.js → BWGaSL1l.js} +1 -1
  30. package/build/client/_app/immutable/chunks/BWGaSL1l.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/BWGaSL1l.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{CFJEGo4j.js → B_Z4tBMl.js} +1 -1
  33. package/build/client/_app/immutable/chunks/B_Z4tBMl.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/B_Z4tBMl.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{zfc2KyIr.js → Bo46v6NJ.js} +1 -1
  36. package/build/client/_app/immutable/chunks/Bo46v6NJ.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/Bo46v6NJ.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/{DtdjxckD.js → BpDPh_kG.js} +1 -1
  39. package/build/client/_app/immutable/chunks/BpDPh_kG.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/BpDPh_kG.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/{DI6o1zMC.js → BzFqst10.js} +1 -1
  42. package/build/client/_app/immutable/chunks/BzFqst10.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/BzFqst10.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/{BdW_yBQU.js → C3JYac4u.js} +1 -1
  45. package/build/client/_app/immutable/chunks/C3JYac4u.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/C3JYac4u.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/{D-AkVRH7.js → CBzF0p8K.js} +1 -1
  48. package/build/client/_app/immutable/chunks/CBzF0p8K.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/CBzF0p8K.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/{Dh3ZWuG8.js → CM9QBz5w.js} +1 -1
  51. package/build/client/_app/immutable/chunks/CM9QBz5w.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/CM9QBz5w.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/{CtWwlW0t.js → CZqQKfBo.js} +1 -1
  54. package/build/client/_app/immutable/chunks/CZqQKfBo.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/CZqQKfBo.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/{YehCS1lO.js → Cr-NovV3.js} +1 -1
  57. package/build/client/_app/immutable/chunks/Cr-NovV3.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/Cr-NovV3.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/{g-7YfdwH.js → Cz6pnyFa.js} +1 -1
  60. package/build/client/_app/immutable/chunks/Cz6pnyFa.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/Cz6pnyFa.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/{1mB5Ee1Q.js → D2fsDTN5.js} +1 -1
  63. package/build/client/_app/immutable/chunks/D2fsDTN5.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/D2fsDTN5.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{D0IZin0e.js → DBcd9YbV.js} +1 -1
  66. package/build/client/_app/immutable/chunks/DBcd9YbV.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DBcd9YbV.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/{B78Vj1az.js → DC_milOQ.js} +1 -1
  69. package/build/client/_app/immutable/chunks/DC_milOQ.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DC_milOQ.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/{Dp3OTI-g.js → DNiEIfDZ.js} +1 -1
  72. package/build/client/_app/immutable/chunks/DNiEIfDZ.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/DNiEIfDZ.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/{CrmB4MvE.js → DWdskt_Y.js} +1 -1
  75. package/build/client/_app/immutable/chunks/DWdskt_Y.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/DWdskt_Y.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/{CZ3S843d.js → DsMQ6HVM.js} +1 -1
  78. package/build/client/_app/immutable/chunks/DsMQ6HVM.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/DsMQ6HVM.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/Dxeyu30B.js +1 -0
  81. package/build/client/_app/immutable/chunks/Dxeyu30B.js.br +1 -0
  82. package/build/client/_app/immutable/chunks/Dxeyu30B.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/{CY8zQ4KM.js → H4Anb6kP.js} +1 -1
  84. package/build/client/_app/immutable/chunks/H4Anb6kP.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/H4Anb6kP.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/MDK8mPOo.js +1 -0
  87. package/build/client/_app/immutable/chunks/MDK8mPOo.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/MDK8mPOo.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/{B7aS9tS2.js → X7CLxGgV.js} +1 -1
  90. package/build/client/_app/immutable/chunks/X7CLxGgV.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/X7CLxGgV.js.gz +0 -0
  92. package/build/client/_app/immutable/chunks/{D0CZlpgd.js → cK-f5ch_.js} +1 -1
  93. package/build/client/_app/immutable/chunks/cK-f5ch_.js.br +2 -0
  94. package/build/client/_app/immutable/chunks/cK-f5ch_.js.gz +0 -0
  95. package/build/client/_app/immutable/chunks/{BPoZrXrH.js → mhYP0ygJ.js} +1 -1
  96. package/build/client/_app/immutable/chunks/mhYP0ygJ.js.br +0 -0
  97. package/build/client/_app/immutable/chunks/mhYP0ygJ.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/{C6r7NvtG.js → vB0ff9Sn.js} +1 -1
  99. package/build/client/_app/immutable/chunks/vB0ff9Sn.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/vB0ff9Sn.js.gz +0 -0
  101. package/build/client/_app/immutable/entry/{app.C-KKyvGI.js → app.CinEZGkq.js} +2 -2
  102. package/build/client/_app/immutable/entry/app.CinEZGkq.js.br +0 -0
  103. package/build/client/_app/immutable/entry/app.CinEZGkq.js.gz +0 -0
  104. package/build/client/_app/immutable/entry/start.B7e0-3Hk.js +1 -0
  105. package/build/client/_app/immutable/entry/start.B7e0-3Hk.js.br +1 -0
  106. package/build/client/_app/immutable/entry/start.B7e0-3Hk.js.gz +0 -0
  107. package/build/client/_app/immutable/nodes/{1.D5nbnmDb.js → 1.kGO9dV9J.js} +1 -1
  108. package/build/client/_app/immutable/nodes/1.kGO9dV9J.js.br +0 -0
  109. package/build/client/_app/immutable/nodes/1.kGO9dV9J.js.gz +0 -0
  110. package/build/client/_app/immutable/nodes/2.eGSziRQX.js +5 -0
  111. package/build/client/_app/immutable/nodes/2.eGSziRQX.js.br +0 -0
  112. package/build/client/_app/immutable/nodes/2.eGSziRQX.js.gz +0 -0
  113. package/build/client/_app/version.json +1 -1
  114. package/build/client/_app/version.json.br +0 -0
  115. package/build/client/_app/version.json.gz +0 -0
  116. package/build/handler.js +4 -4
  117. package/build/index.js +4 -4
  118. package/build/server/chunks/chunks/{EventScatter.js-Du7AJN9m.js → EventScatter.js-CG0RcOU6.js} +35 -6
  119. package/build/server/chunks/chunks/{EventScatter.js-Du7AJN9m.js.map → EventScatter.js-CG0RcOU6.js.map} +1 -1
  120. package/build/server/chunks/chunks/{internal2.js--RCssYze.js → internal2.js-BMcEVxqN.js} +2 -2
  121. package/build/server/chunks/chunks/{internal2.js--RCssYze.js.map → internal2.js-BMcEVxqN.js.map} +1 -1
  122. package/build/server/chunks/chunks/{series-buckets.js-BmCYga3F.js → series-buckets.js-DFGWkob5.js} +8 -7
  123. package/build/server/chunks/chunks/series-buckets.js-DFGWkob5.js.map +1 -0
  124. package/build/server/chunks/chunks/{state.js-CI2ef6Vi.js → state.js-vZj9lo1I.js} +2 -2
  125. package/build/server/chunks/chunks/{state.js-CI2ef6Vi.js.map → state.js-vZj9lo1I.js.map} +1 -1
  126. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-3ZYI-Za9.js → _server.ts.js-BxXw5K0R.js} +18 -9
  127. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-BxXw5K0R.js.map +1 -0
  128. package/build/server/chunks/entries/fallbacks/{error.svelte.js-DP0OULWi.js → error.svelte.js-bokc4skC.js} +3 -3
  129. package/build/server/chunks/entries/fallbacks/{error.svelte.js-DP0OULWi.js.map → error.svelte.js-bokc4skC.js.map} +1 -1
  130. package/build/server/chunks/entries/pages/{_page.svelte.js-hG1agdw-.js → _page.svelte.js-DRoSEPVH.js} +75 -16
  131. package/build/server/chunks/entries/pages/_page.svelte.js-DRoSEPVH.js.map +1 -0
  132. package/build/server/chunks/{handler-_dxqeJJj.js → handler-BkYErjbr.js} +3 -3
  133. package/build/server/chunks/{handler-_dxqeJJj.js.map → handler-BkYErjbr.js.map} +1 -1
  134. package/build/server/chunks/{index.js-arX1nCCw.js → index.js-5mkIDcpy.js} +2 -2
  135. package/build/server/chunks/{index.js-arX1nCCw.js.map → index.js-5mkIDcpy.js.map} +1 -1
  136. package/build/server/chunks/{manifest.js-D3447-0_.js → manifest.js-BGoS-vRx.js} +6 -6
  137. package/build/server/chunks/{manifest.js-D3447-0_.js.map → manifest.js-BGoS-vRx.js.map} +1 -1
  138. package/build/server/chunks/nodes/{0.js-XM75fTfb.js → 0.js-BIj6k30n.js} +3 -3
  139. package/build/server/chunks/nodes/{0.js-XM75fTfb.js.map → 0.js-BIj6k30n.js.map} +1 -1
  140. package/build/server/chunks/nodes/{1.js-CRIDfcrR.js → 1.js-BQibx33b.js} +3 -3
  141. package/build/server/chunks/nodes/{1.js-CRIDfcrR.js.map → 1.js-BQibx33b.js.map} +1 -1
  142. package/build/server/chunks/nodes/{2.js-1qmqKlMg.js → 2.js-CczDSPv9.js} +4 -4
  143. package/build/server/chunks/nodes/{2.js-1qmqKlMg.js.map → 2.js-CczDSPv9.js.map} +1 -1
  144. package/dist/cli/index.js +13 -6
  145. package/dist/cli/server.js +19 -4
  146. package/package.json +2 -2
  147. package/build/client/_app/immutable/assets/0.DKleCc0-.css +0 -2
  148. package/build/client/_app/immutable/assets/0.DKleCc0-.css.br +0 -0
  149. package/build/client/_app/immutable/assets/0.DKleCc0-.css.gz +0 -0
  150. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.br +0 -0
  151. package/build/client/_app/immutable/assets/EventScatter.DA5sZ1c0.css.gz +0 -0
  152. package/build/client/_app/immutable/chunks/1mB5Ee1Q.js.br +0 -0
  153. package/build/client/_app/immutable/chunks/1mB5Ee1Q.js.gz +0 -0
  154. package/build/client/_app/immutable/chunks/3fFVdy92.js.br +0 -0
  155. package/build/client/_app/immutable/chunks/3fFVdy92.js.gz +0 -0
  156. package/build/client/_app/immutable/chunks/8mpn3Xst.js.br +0 -0
  157. package/build/client/_app/immutable/chunks/8mpn3Xst.js.gz +0 -0
  158. package/build/client/_app/immutable/chunks/B78Vj1az.js.br +0 -0
  159. package/build/client/_app/immutable/chunks/B78Vj1az.js.gz +0 -0
  160. package/build/client/_app/immutable/chunks/B7aS9tS2.js.br +0 -0
  161. package/build/client/_app/immutable/chunks/B7aS9tS2.js.gz +0 -0
  162. package/build/client/_app/immutable/chunks/BF84Orj8.js.br +0 -0
  163. package/build/client/_app/immutable/chunks/BF84Orj8.js.gz +0 -0
  164. package/build/client/_app/immutable/chunks/BIdvnjrP.js +0 -1
  165. package/build/client/_app/immutable/chunks/BIdvnjrP.js.br +0 -1
  166. package/build/client/_app/immutable/chunks/BIdvnjrP.js.gz +0 -0
  167. package/build/client/_app/immutable/chunks/BPoZrXrH.js.br +0 -0
  168. package/build/client/_app/immutable/chunks/BPoZrXrH.js.gz +0 -0
  169. package/build/client/_app/immutable/chunks/BSy__Jrd.js.br +0 -0
  170. package/build/client/_app/immutable/chunks/BSy__Jrd.js.gz +0 -0
  171. package/build/client/_app/immutable/chunks/BdW_yBQU.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/BdW_yBQU.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/BnRQs9nz.js.br +0 -0
  174. package/build/client/_app/immutable/chunks/BnRQs9nz.js.gz +0 -0
  175. package/build/client/_app/immutable/chunks/C6r7NvtG.js.br +0 -0
  176. package/build/client/_app/immutable/chunks/C6r7NvtG.js.gz +0 -0
  177. package/build/client/_app/immutable/chunks/CEw1go7g.js.br +0 -0
  178. package/build/client/_app/immutable/chunks/CEw1go7g.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/CFJEGo4j.js.br +0 -0
  180. package/build/client/_app/immutable/chunks/CFJEGo4j.js.gz +0 -0
  181. package/build/client/_app/immutable/chunks/CGnVqaBL.js +0 -1
  182. package/build/client/_app/immutable/chunks/CGnVqaBL.js.br +0 -0
  183. package/build/client/_app/immutable/chunks/CGnVqaBL.js.gz +0 -0
  184. package/build/client/_app/immutable/chunks/CY8zQ4KM.js.br +0 -0
  185. package/build/client/_app/immutable/chunks/CY8zQ4KM.js.gz +0 -0
  186. package/build/client/_app/immutable/chunks/CZ3S843d.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/CZ3S843d.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/CgAZPeK7.js.br +0 -0
  189. package/build/client/_app/immutable/chunks/CgAZPeK7.js.gz +0 -0
  190. package/build/client/_app/immutable/chunks/CrmB4MvE.js.br +0 -0
  191. package/build/client/_app/immutable/chunks/CrmB4MvE.js.gz +0 -0
  192. package/build/client/_app/immutable/chunks/CtWwlW0t.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/CtWwlW0t.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/D-AkVRH7.js.br +0 -0
  195. package/build/client/_app/immutable/chunks/D-AkVRH7.js.gz +0 -0
  196. package/build/client/_app/immutable/chunks/D0CZlpgd.js.br +0 -0
  197. package/build/client/_app/immutable/chunks/D0CZlpgd.js.gz +0 -0
  198. package/build/client/_app/immutable/chunks/D0IZin0e.js.br +0 -0
  199. package/build/client/_app/immutable/chunks/D0IZin0e.js.gz +0 -0
  200. package/build/client/_app/immutable/chunks/DI6o1zMC.js.br +0 -0
  201. package/build/client/_app/immutable/chunks/DI6o1zMC.js.gz +0 -0
  202. package/build/client/_app/immutable/chunks/DbWb9_dK.js.br +0 -0
  203. package/build/client/_app/immutable/chunks/DbWb9_dK.js.gz +0 -0
  204. package/build/client/_app/immutable/chunks/Dh3ZWuG8.js.br +0 -0
  205. package/build/client/_app/immutable/chunks/Dh3ZWuG8.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/Dp3OTI-g.js.br +0 -0
  207. package/build/client/_app/immutable/chunks/Dp3OTI-g.js.gz +0 -0
  208. package/build/client/_app/immutable/chunks/DtdjxckD.js.br +0 -0
  209. package/build/client/_app/immutable/chunks/DtdjxckD.js.gz +0 -0
  210. package/build/client/_app/immutable/chunks/YehCS1lO.js.br +0 -0
  211. package/build/client/_app/immutable/chunks/YehCS1lO.js.gz +0 -0
  212. package/build/client/_app/immutable/chunks/g-7YfdwH.js.br +0 -0
  213. package/build/client/_app/immutable/chunks/g-7YfdwH.js.gz +0 -0
  214. package/build/client/_app/immutable/chunks/zfc2KyIr.js.br +0 -0
  215. package/build/client/_app/immutable/chunks/zfc2KyIr.js.gz +0 -0
  216. package/build/client/_app/immutable/entry/app.C-KKyvGI.js.br +0 -0
  217. package/build/client/_app/immutable/entry/app.C-KKyvGI.js.gz +0 -0
  218. package/build/client/_app/immutable/entry/start.obx3dQT_.js +0 -1
  219. package/build/client/_app/immutable/entry/start.obx3dQT_.js.br +0 -1
  220. package/build/client/_app/immutable/entry/start.obx3dQT_.js.gz +0 -0
  221. package/build/client/_app/immutable/nodes/1.D5nbnmDb.js.br +0 -0
  222. package/build/client/_app/immutable/nodes/1.D5nbnmDb.js.gz +0 -0
  223. package/build/client/_app/immutable/nodes/2.DAQ4mvAt.js +0 -5
  224. package/build/client/_app/immutable/nodes/2.DAQ4mvAt.js.br +0 -0
  225. package/build/client/_app/immutable/nodes/2.DAQ4mvAt.js.gz +0 -0
  226. package/build/server/chunks/chunks/series-buckets.js-BmCYga3F.js.map +0 -1
  227. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-3ZYI-Za9.js.map +0 -1
  228. package/build/server/chunks/entries/pages/_page.svelte.js-hG1agdw-.js.map +0 -1
  229. /package/build/client/_app/immutable/nodes/{0.2dnHMwE1.js → 0.CFO0Fthy.js} +0 -0
  230. /package/build/client/_app/immutable/nodes/{0.2dnHMwE1.js.br → 0.CFO0Fthy.js.br} +0 -0
  231. /package/build/client/_app/immutable/nodes/{0.2dnHMwE1.js.gz → 0.CFO0Fthy.js.gz} +0 -0
@@ -2,13 +2,13 @@ import { ah as escape_html, ag as attr, ai as attr_style, ac as derived, aj as a
2
2
  import { f as LogStore, g as filterByLevel, h as filterEvents, c as effectiveLevel, t as tokenizeJson, b as detectLevel, j as formatLogMessage, k as eventKey, l as levelColorClass } from '../../chunks/log-buffer.js-A9FA-Qv8.js';
3
3
  import { R as REGION_CODES } from '../../chunks/regions.js-COf7DgnH.js';
4
4
  import { P as PRESET_LABELS, a as presetLabel, H as HISTORIC_PRESETS, t as toDateTimeLocal, d as describeWindow } from '../../chunks/time-range.js-BLMT8aU3.js';
5
- import { p as page, r as replaceState } from '../../chunks/state.js-CI2ef6Vi.js';
6
- import { S as SERIES_LEVEL_COLOR, g as groupByLevel, r as requestRows, L as LEVEL_LABELS, i as isMeaningfulBrush, a as requestDurations, b as bucketEvents } from '../../chunks/series-buckets.js-BmCYga3F.js';
5
+ import { p as page, r as replaceState } from '../../chunks/state.js-vZj9lo1I.js';
6
+ import { S as SERIES_LEVEL_COLOR, g as groupByLevel, r as requestRows, a as requestIdOf, c as collectRequests, L as LEVEL_LABELS, i as isMeaningfulBrush, b as requestDurations, d as bucketEvents } from '../../chunks/series-buckets.js-DFGWkob5.js';
7
7
  import '../../chunks/uneval.js-DaakSYFQ.js';
8
8
  import '../../chunks/index-server.js-DNLOKvM0.js';
9
9
  import '../../chunks/shared.js-CgjUIvRK.js';
10
10
  import '../../chunks/exports.js-ClPPfcHj.js';
11
- import '../../chunks/internal2.js--RCssYze.js';
11
+ import '../../chunks/internal2.js-BMcEVxqN.js';
12
12
  import '../../chunks/legacy-client.js-DJmDw3Zx.js';
13
13
  import '../../chunks/utils.js-BIlHjgGW.js';
14
14
 
@@ -207,7 +207,7 @@ function EventScatterPanel($$renderer, $$props) {
207
207
  * The real loader: a dynamic import, which is what keeps layerchart out of the
208
208
  * initial bundle. It only runs in the browser, and only once the panel is open.
209
209
  */
210
- const loadChartModule = () => import('../../chunks/EventScatter.js-Du7AJN9m.js');
210
+ const loadChartModule = () => import('../../chunks/EventScatter.js-CG0RcOU6.js');
211
211
  /** Bucketed counts for the window. */
212
212
  /** Inclusive start of the window, epoch ms. */
213
213
  /** Inclusive end of the window, epoch ms. */
@@ -219,7 +219,7 @@ function EventScatterPanel($$renderer, $$props) {
219
219
  /** Chart height in px. */
220
220
  /** Start open, which is also what the first visit uses. */
221
221
  /** Chart module loader; defaults to the dynamic import. */
222
- let { metric = "count", onMetricChange, points = [], from = 0, to = 0, bucketMs = 0, groups = [], loading = false, byRequest = true, onBrush, height = 200, open = true, loadChart = loadChartModule } = $$props;
222
+ let { metric = "count", onMetricChange, onSelect, points = [], from = 0, to = 0, bucketMs = 0, groups = [], loading = false, byRequest = true, onBrush, height = 200, open = true, loadChart = loadChartModule } = $$props;
223
223
  let expanded = derived(() => open);
224
224
  /** Totals and labels per level, in severity order. */
225
225
  let levelGroups = derived(() => groupByLevel(points));
@@ -260,7 +260,7 @@ function EventScatterPanel($$renderer, $$props) {
260
260
  $$renderer.push(`<!--]--> `);
261
261
  if (expanded()) {
262
262
  $$renderer.push("<!--[0-->");
263
- $$renderer.push(`<!--[-1--><span class="ml-auto text-neutral-500" data-testid="scatter-hint">drag to zoom · click to clear</span>`);
263
+ $$renderer.push(`<!--[-1--><span class="ml-auto text-neutral-500" data-testid="scatter-hint">select a point to show logs · drag to zoom · click background to clear</span>`);
264
264
  $$renderer.push(`<!--]-->`);
265
265
  } else $$renderer.push("<!--[-1-->");
266
266
  $$renderer.push(`<!--]--></div> `);
@@ -574,6 +574,25 @@ function LogGroupList($$renderer, $$props) {
574
574
  });
575
575
  }
576
576
  //#endregion
577
+ //#region src/lib/chart-selection.ts
578
+ /** Resolve a plotted mark against the loaded events, before display filters. */
579
+ function selectedChartEvents(lines, selection) {
580
+ if (selection === null) return /* @__PURE__ */ new Set();
581
+ const { point, bucketMs, byRequest, fallbackGroup } = selection;
582
+ const events = lines.filter((event) => (event.group ?? fallbackGroup) === point.group);
583
+ if (point.requestId !== void 0) return new Set(events.filter((event) => requestIdOf(event) === point.requestId));
584
+ const inBucket = (timestamp) => Math.floor(timestamp / bucketMs) * bucketMs === point.t;
585
+ const matches = /* @__PURE__ */ new Set();
586
+ if (byRequest) {
587
+ for (const request of collectRequests(events)) if (inBucket(request.first) && request.level === point.level) for (const { event } of request.events) matches.add(event);
588
+ }
589
+ for (const event of events) {
590
+ if (byRequest && requestIdOf(event) !== null) continue;
591
+ if (inBucket(event.timestamp) && (effectiveLevel(event) ?? "unknown") === point.level) matches.add(event);
592
+ }
593
+ return matches;
594
+ }
595
+ //#endregion
577
596
  //#region src/lib/components/StatusBadge.svelte
578
597
  function StatusBadge($$renderer, $$props) {
579
598
  /** Connection status reported by the log stream. */
@@ -641,7 +660,7 @@ function LogViewer($$renderer, $$props) {
641
660
  * default, and owned by the page so the chart counts the same requests.
642
661
  */
643
662
  /** Called when the grouping toggle is pressed. */
644
- let { lines = [], status = "idle", error = null, region = "", group = null, filter = "", paused = false, autoScroll = true, pendingCount = 0, droppedCount = 0, receivedCount = 0, mode = "live", ready = null, endReason = null, archivePath = null, groups = [], level = void 0, onLevelChange, groupRequests = true, onGroupToggle, onFilterChange, onPauseToggle, onClear, onAutoScrollToggle } = $$props;
663
+ let { selection = null, onSelectionClear, lines = [], status = "idle", error = null, region = "", group = null, filter = "", paused = false, autoScroll = true, pendingCount = 0, droppedCount = 0, receivedCount = 0, mode = "live", ready = null, endReason = null, archivePath = null, groups = [], level = void 0, onLevelChange, groupRequests = true, onGroupToggle, onFilterChange, onPauseToggle, onClear, onAutoScrollToggle } = $$props;
645
664
  const TIMESTAMP_COLUMN_PX = remToPx(7.5);
646
665
  const ROW_PADDING_PX = remToPx(.75);
647
666
  const ROW_GAP_PX = remToPx(.5);
@@ -693,8 +712,10 @@ function LogViewer($$renderer, $$props) {
693
712
  activeClass: "border-neutral-700 bg-neutral-800 text-neutral-400"
694
713
  }
695
714
  ];
715
+ let selectedEvents = derived(() => selectedChartEvents(lines, selection));
696
716
  /** Lines matching the text filter and the level filter. */
697
717
  let visible = derived(() => filterByLevel(filterEvents(lines, filter), levelFilter()));
718
+ let visibleSelectedCount = derived(() => visible().filter((event) => selectedEvents().has(event)).length);
698
719
  /** How many lines of each level are loaded, including `unknown`. */
699
720
  let levelCounts = derived(() => {
700
721
  const counts = {
@@ -716,6 +737,7 @@ function LogViewer($$renderer, $$props) {
716
737
  const formatted = formatLogMessage(event.message, { prettyJson: jsonView });
717
738
  const levelClass = levelColorClass(rowLevel);
718
739
  return {
740
+ selected: selectedEvents().has(event),
719
741
  key: eventKey(event, index),
720
742
  time: formatTime(event.timestamp),
721
743
  timestamp: formatTimestamp(event.timestamp),
@@ -809,7 +831,6 @@ function LogViewer($$renderer, $$props) {
809
831
  let grouped = derived(() => displayRows().some((row) => row.kind === "request"));
810
832
  /** Requests in view, shown next to the line count while grouping. */
811
833
  let requestCount = derived(() => displayRows().filter((row) => row.kind === "request").length);
812
- /** Keeps the newest line in view while auto-scroll is on (vertical only). */
813
834
  /** Error text with the group and region context. */
814
835
  let errorText = derived(() => error === null ? null : describeStreamError(region, group, error.message));
815
836
  /** True when the ready frame says the events come from the local archive. */
@@ -897,6 +918,13 @@ function LogViewer($$renderer, $$props) {
897
918
  $$renderer.push(`<!--]--></div> <input type="search" aria-label="Filter log lines" placeholder="Filter lines"${attr("value", filter)} class="w-40 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600"/> <button type="button"${attr("aria-pressed", wrapLines)} title="Wrap long lines instead of scrolling sideways" data-testid="wrap-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${wrapTone()}`)}>Wrap</button> <button type="button"${attr("aria-pressed", jsonView)} title="Pretty-print JSON log entries (off: click a line to open its JSON)" data-testid="json-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${jsonTone()}`)}>JSON</button> <button type="button"${attr("aria-pressed", groupRequests)} title="Group the lines of one request into a single row, coloured by its most critical line (off: one row per line)" data-testid="group-toggle"${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${groupTone()}`)}>By request</button> <button type="button"${attr("aria-pressed", paused)} class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">${escape_html(paused ? "Resume" : "Pause")}</button> <button type="button" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Clear</button> <button type="button"${attr("aria-pressed", autoScroll)}${attr_class(`rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${autoScrollTone()}`)}>Auto-scroll</button></div></div> `);
898
919
  if (errorText() !== null) $$renderer.push(`<!--[0--><p role="alert" data-testid="stream-error" class="border-b border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300">${escape_html(errorText())}</p>`);
899
920
  else $$renderer.push("<!--[-1-->");
921
+ $$renderer.push(`<!--]--> `);
922
+ if (selection !== null) {
923
+ $$renderer.push(`<!--[0--><div class="flex items-center gap-2 px-3 py-1 text-xs text-sky-300" role="status" data-testid="chart-selection-status">`);
924
+ if (selectedEvents().size === 0) $$renderer.push(`<!--[0-->Selected logs are not in the loaded buffer. Zoom into this time range to load them.`);
925
+ else $$renderer.push(`<!--[-1-->${escape_html(visibleSelectedCount())} of ${escape_html(selectedEvents().size)} selected log lines visible${escape_html(visibleSelectedCount() < selectedEvents().size ? " — clear the text or level filter to see all" : "")}.`);
926
+ $$renderer.push(`<!--]--> <button type="button" class="ml-auto underline">Clear selection</button></div>`);
927
+ } else $$renderer.push("<!--[-1-->");
900
928
  $$renderer.push(`<!--]--> <div class="min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950" data-testid="log-scroller">`);
901
929
  if (group === null || group === "") $$renderer.push(`<!--[0--><p class="px-3 py-6 text-sm text-neutral-500" data-testid="viewer-idle">Select a log group to start tailing.</p>`);
902
930
  else if (displayRows().length === 0) $$renderer.push(`<!--[1--><p class="px-3 py-6 text-sm text-neutral-500" data-testid="viewer-empty">${escape_html(emptyText())}</p>`);
@@ -905,7 +933,12 @@ function LogViewer($$renderer, $$props) {
905
933
  function logLine($$renderer, row, child) {
906
934
  const expandable = row.expandable !== null;
907
935
  const open = expandable && isExpanded(row.key);
908
- $$renderer.push(`<li${attr_class(`flex flex-wrap items-baseline gap-2 ${child ? "pl-8" : "px-3"} py-0.5 hover:bg-neutral-900/60 ${listClass()} ${expandable ? "cursor-pointer" : ""}`)} data-testid="log-line"${attr("data-request-child", child ? "true" : void 0)}${attr("data-level", row.level ?? "unknown")}${attr("data-expandable", expandable ? "true" : void 0)}${attr("data-expanded", open ? "true" : void 0)}${attr("role", expandable ? "button" : void 0)}${attr("tabindex", expandable ? 0 : void 0)}${attr("aria-expanded", expandable ? open : void 0)}${attr("title", expandable ? open ? "Hide the JSON in this line" : "Show this line as JSON" : void 0)}><span class="w-[7.5rem] shrink-0 text-neutral-500"${attr("title", row.timestamp)}>${escape_html(row.time)}</span> `);
936
+ $$renderer.push(`<li${attr_class(`flex flex-wrap items-baseline gap-2 ${child ? "pl-8" : "px-3"} py-0.5 hover:bg-neutral-900/60 ${listClass()} ${expandable ? "cursor-pointer" : ""}`, void 0, {
937
+ "bg-sky-950": row.selected,
938
+ "ring-1": row.selected,
939
+ "ring-inset": row.selected,
940
+ "ring-sky-700": row.selected
941
+ })} data-testid="log-line"${attr("data-chart-selected", row.selected ? "true" : void 0)}${attr("data-request-child", child ? "true" : void 0)}${attr("data-level", row.level ?? "unknown")}${attr("data-expandable", expandable ? "true" : void 0)}${attr("data-expanded", open ? "true" : void 0)}${attr("role", expandable ? "button" : void 0)}${attr("tabindex", expandable ? 0 : void 0)}${attr("aria-expanded", expandable ? open : void 0)}${attr("title", expandable ? open ? "Hide the JSON in this line" : "Show this line as JSON" : void 0)}><span class="w-[7.5rem] shrink-0 text-neutral-500"${attr("title", row.timestamp)}>${escape_html(row.time)}</span> `);
909
942
  if (groups.length > 1) $$renderer.push(`<!--[0--><span class="w-[9rem] shrink-0 truncate text-teal-400/80"${attr("title", row.group ?? "")} data-testid="log-group">${escape_html(row.group ?? "")}</span>`);
910
943
  else $$renderer.push("<!--[-1-->");
911
944
  $$renderer.push(`<!--]--> <span class="shrink-0 truncate text-sky-400/80"${attr_style(prefixStyle())}${attr("title", row.streamName ?? "")} data-testid="log-stream">${escape_html(row.streamName ?? "")}</span> `);
@@ -940,7 +973,7 @@ function LogViewer($$renderer, $$props) {
940
973
  if (row.kind === "request") {
941
974
  $$renderer.push("<!--[0-->");
942
975
  const open = isExpanded(row.key);
943
- $$renderer.push(`<li${attr_class(clsx(listClass()))} data-testid="log-request-group"${attr("data-request-id", row.id)}${attr("data-level", row.level)}${attr("data-expanded", open ? "true" : void 0)}${attr("data-lines", row.count)}><button type="button" class="flex w-full flex-wrap items-baseline gap-2 px-3 py-0.5 text-left hover:bg-neutral-900/60"${attr("aria-expanded", open)}${attr("title", open ? "Hide the lines of this request" : "Show every line of this request")} data-testid="request-group-summary"><span class="w-[7.5rem] shrink-0 text-neutral-500"${attr("title", row.timestamp)}>${escape_html(row.time)}</span> `);
976
+ $$renderer.push(`<li${attr_class(clsx(listClass()), void 0, { "bg-sky-950": row.children.some((child) => child.selected) })} data-testid="log-request-group"${attr("data-chart-selected", row.children.some((child) => child.selected) ? "true" : void 0)}${attr("data-request-id", row.id)}${attr("data-level", row.level)}${attr("data-expanded", open ? "true" : void 0)}${attr("data-lines", row.count)}><button type="button" class="flex w-full flex-wrap items-baseline gap-2 px-3 py-0.5 text-left hover:bg-neutral-900/60"${attr("aria-expanded", open)}${attr("title", open ? "Hide the lines of this request" : "Show every line of this request")} data-testid="request-group-summary"><span class="w-[7.5rem] shrink-0 text-neutral-500"${attr("title", row.timestamp)}>${escape_html(row.time)}</span> `);
944
977
  if (groups.length > 1) $$renderer.push(`<!--[0--><span class="w-[9rem] shrink-0 truncate text-teal-400/80"${attr("title", row.group ?? "")} data-testid="log-group">${escape_html(row.group ?? "")}</span>`);
945
978
  else $$renderer.push("<!--[-1-->");
946
979
  $$renderer.push(`<!--]--> <span class="shrink-0 truncate text-sky-400/80"${attr_style(prefixStyle())}${attr("title", row.streamName ?? "")} data-testid="log-stream">${escape_html(row.streamName ?? "")}</span> <span class="shrink-0 text-neutral-600" aria-hidden="true">${escape_html(open ? "▾" : "▸")}</span> <span class="shrink-0 rounded border border-neutral-700 bg-neutral-900 px-1.5 font-mono text-[0.6875rem] text-sky-200" data-testid="request-group-id" title="Request id shared by these lines">${escape_html(row.id)}</span> <span class="shrink-0 text-neutral-400" data-testid="request-group-count">${escape_html(formatCount(row.count))} lines</span> <span class="shrink-0 text-neutral-500" data-testid="request-group-span">${escape_html(row.span)}</span> <span${attr_class(`shrink-0 font-medium ${stringify(row.levelClass)}`)} data-testid="request-group-level">${escape_html(row.levelLabel)}</span> `);
@@ -1320,6 +1353,8 @@ function _page($$renderer, $$props) {
1320
1353
  */
1321
1354
  let groupRequests = true;
1322
1355
  /** Bucketed counts behind the chart. */
1356
+ let chartSelection = null;
1357
+ let seriesBucketMs = 6e4;
1323
1358
  let seriesPoints = [];
1324
1359
  /** True while the archive counts are being fetched. */
1325
1360
  let seriesLoading = false;
@@ -1551,6 +1586,7 @@ function _page($$renderer, $$props) {
1551
1586
  return;
1552
1587
  }
1553
1588
  const { from, to } = chartWindow();
1589
+ seriesBucketMs = chartBucketMs(from, to);
1554
1590
  if (source !== "archive") {
1555
1591
  seriesPoints = (chartMetric === "duration" ? requestDurations : bucketEvents)(stream.lines, {
1556
1592
  from,
@@ -1574,7 +1610,10 @@ function _page($$renderer, $$props) {
1574
1610
  by: groupRequests ? "request" : "event",
1575
1611
  metric: chartMetric
1576
1612
  });
1577
- if (request === seriesRequest) seriesPoints = series.points;
1613
+ if (request === seriesRequest) {
1614
+ seriesPoints = series.points;
1615
+ seriesBucketMs = series.bucketMs;
1616
+ }
1578
1617
  } catch {
1579
1618
  if (request === seriesRequest) seriesPoints = [];
1580
1619
  } finally {
@@ -1644,11 +1683,23 @@ function _page($$renderer, $$props) {
1644
1683
  points: seriesPoints,
1645
1684
  from: chartWindow().from,
1646
1685
  to: chartWindow().to,
1647
- bucketMs: chartBucketMs(chartWindow().from, chartWindow().to),
1686
+ bucketMs: seriesBucketMs,
1648
1687
  groups: selectedGroups,
1649
1688
  byRequest: groupRequests,
1650
1689
  metric: chartMetric,
1651
- onMetricChange: (metric) => chartMetric = metric,
1690
+ onMetricChange: (metric) => {
1691
+ chartSelection = null;
1692
+ chartMetric = metric;
1693
+ },
1694
+ onSelect: (point) => {
1695
+ autoScroll = false;
1696
+ chartSelection = {
1697
+ point,
1698
+ bucketMs: seriesBucketMs,
1699
+ byRequest: groupRequests,
1700
+ fallbackGroup: selectedGroup() ?? ""
1701
+ };
1702
+ },
1652
1703
  loading: seriesLoading,
1653
1704
  onBrush: applyBrush
1654
1705
  });
@@ -1657,6 +1708,8 @@ function _page($$renderer, $$props) {
1657
1708
  else $$renderer.push("<!--[-1-->");
1658
1709
  $$renderer.push(`<!--]--> `);
1659
1710
  LogViewer($$renderer, {
1711
+ selection: chartSelection,
1712
+ onSelectionClear: () => chartSelection = null,
1660
1713
  lines: stream.lines,
1661
1714
  status: stream.status,
1662
1715
  error: stream.lastError,
@@ -1679,12 +1732,18 @@ function _page($$renderer, $$props) {
1679
1732
  receivedCount: stream.receivedCount,
1680
1733
  onFilterChange: (value) => filter = value,
1681
1734
  onPauseToggle: () => stream.togglePause(),
1682
- onClear: () => stream.clear(),
1683
- onAutoScrollToggle: () => autoScroll = !autoScroll
1735
+ onClear: () => {
1736
+ chartSelection = null;
1737
+ stream.clear();
1738
+ },
1739
+ onAutoScrollToggle: () => {
1740
+ chartSelection = null;
1741
+ autoScroll = !autoScroll;
1742
+ }
1684
1743
  });
1685
1744
  $$renderer.push(`<!----></div></div>`);
1686
1745
  });
1687
1746
  }
1688
1747
 
1689
1748
  export { _page as default };
1690
- //# sourceMappingURL=_page.svelte.js-hG1agdw-.js.map
1749
+ //# sourceMappingURL=_page.svelte.js-DRoSEPVH.js.map