watch-tail 0.8.0 → 0.10.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.
- package/README.md +107 -9
- package/build/client/_app/immutable/assets/0.B5hI3s8c.css +2 -0
- package/build/client/_app/immutable/assets/0.B5hI3s8c.css.br +0 -0
- package/build/client/_app/immutable/assets/0.B5hI3s8c.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.Cn4w1JYv.css +1 -0
- package/build/client/_app/immutable/assets/2.Cn4w1JYv.css.br +0 -0
- package/build/client/_app/immutable/assets/2.Cn4w1JYv.css.gz +0 -0
- package/build/client/_app/immutable/assets/{EventScatter.CCk6ByS3.css → EventScatter.0BkgJO-l.css} +1 -1
- package/build/client/_app/immutable/assets/EventScatter.0BkgJO-l.css.br +0 -0
- package/build/client/_app/immutable/assets/EventScatter.0BkgJO-l.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B2En4t_E.js +3 -0
- package/build/client/_app/immutable/chunks/B2En4t_E.js.br +0 -0
- package/build/client/_app/immutable/chunks/B2En4t_E.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BJ7fEbY9.js +1 -0
- package/build/client/_app/immutable/chunks/BJ7fEbY9.js.br +0 -0
- package/build/client/_app/immutable/chunks/BJ7fEbY9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BF1MBUT7.js → BX0v2q9h.js} +1 -1
- package/build/client/_app/immutable/chunks/BX0v2q9h.js.br +0 -0
- package/build/client/_app/immutable/chunks/BX0v2q9h.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{9z7cmAWt.js → B_AZHMkI.js} +1 -1
- package/build/client/_app/immutable/chunks/B_AZHMkI.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_AZHMkI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BKpbhYu9.js → Bb9UOIo-.js} +1 -1
- package/build/client/_app/immutable/chunks/Bb9UOIo-.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bb9UOIo-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BzFqst10.js → BdV_pkVs.js} +1 -1
- package/build/client/_app/immutable/chunks/BdV_pkVs.js.br +0 -0
- package/build/client/_app/immutable/chunks/BdV_pkVs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CBzF0p8K.js → BsrUsB47.js} +1 -1
- package/build/client/_app/immutable/chunks/BsrUsB47.js.br +0 -0
- package/build/client/_app/immutable/chunks/BsrUsB47.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Cr-NovV3.js → CBZpkDc1.js} +1 -1
- package/build/client/_app/immutable/chunks/CBZpkDc1.js.br +0 -0
- package/build/client/_app/immutable/chunks/CBZpkDc1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{X7CLxGgV.js → CHnbfiIG.js} +1 -1
- package/build/client/_app/immutable/chunks/CHnbfiIG.js.br +0 -0
- package/build/client/_app/immutable/chunks/CHnbfiIG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BVlqiKgb.js → CNomy7CF.js} +1 -1
- package/build/client/_app/immutable/chunks/CNomy7CF.js.br +0 -0
- package/build/client/_app/immutable/chunks/CNomy7CF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CPbNf3ya.js +1 -0
- package/build/client/_app/immutable/chunks/CPbNf3ya.js.br +0 -0
- package/build/client/_app/immutable/chunks/CPbNf3ya.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CZ2PC-zH.js +1 -0
- package/build/client/_app/immutable/chunks/CZ2PC-zH.js.br +0 -0
- package/build/client/_app/immutable/chunks/CZ2PC-zH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CljxK204.js +1 -0
- package/build/client/_app/immutable/chunks/CljxK204.js.br +1 -0
- package/build/client/_app/immutable/chunks/CljxK204.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CzU0cUz4.js +1 -0
- package/build/client/_app/immutable/chunks/CzU0cUz4.js.br +0 -0
- package/build/client/_app/immutable/chunks/CzU0cUz4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{cK-f5ch_.js → D6vIi1r5.js} +1 -1
- package/build/client/_app/immutable/chunks/D6vIi1r5.js.br +3 -0
- package/build/client/_app/immutable/chunks/D6vIi1r5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DAxERhtN.js +1 -0
- package/build/client/_app/immutable/chunks/DAxERhtN.js.br +0 -0
- package/build/client/_app/immutable/chunks/DAxERhtN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DIzgJaYS.js +1 -0
- package/build/client/_app/immutable/chunks/DIzgJaYS.js.br +0 -0
- package/build/client/_app/immutable/chunks/DIzgJaYS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DSHrbzz3.js +1 -0
- package/build/client/_app/immutable/chunks/DSHrbzz3.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSHrbzz3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DBcd9YbV.js → DSvLImpl.js} +1 -1
- package/build/client/_app/immutable/chunks/DSvLImpl.js.br +0 -0
- package/build/client/_app/immutable/chunks/DSvLImpl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{vB0ff9Sn.js → DWBod19x.js} +1 -1
- package/build/client/_app/immutable/chunks/DWBod19x.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWBod19x.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BWGaSL1l.js → Dicxo5h-.js} +1 -1
- package/build/client/_app/immutable/chunks/Dicxo5h-.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dicxo5h-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjjHmSG3.js +1 -0
- package/build/client/_app/immutable/chunks/DjjHmSG3.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjjHmSG3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DlDLXtam.js +1 -0
- package/build/client/_app/immutable/chunks/DlDLXtam.js.br +0 -0
- package/build/client/_app/immutable/chunks/DlDLXtam.js.gz +0 -0
- package/build/client/_app/immutable/chunks/EZJqWoh3.js +1 -0
- package/build/client/_app/immutable/chunks/EZJqWoh3.js.br +0 -0
- package/build/client/_app/immutable/chunks/EZJqWoh3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Fg8W5tkO.js +15 -0
- package/build/client/_app/immutable/chunks/Fg8W5tkO.js.br +0 -0
- package/build/client/_app/immutable/chunks/Fg8W5tkO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/LGzrUxfF.js +1 -0
- package/build/client/_app/immutable/chunks/LGzrUxfF.js.br +0 -0
- package/build/client/_app/immutable/chunks/LGzrUxfF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/McME9wI6.js +10 -0
- package/build/client/_app/immutable/chunks/McME9wI6.js.br +0 -0
- package/build/client/_app/immutable/chunks/McME9wI6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/N78Fm5Ux.js +1 -0
- package/build/client/_app/immutable/chunks/N78Fm5Ux.js.br +0 -0
- package/build/client/_app/immutable/chunks/N78Fm5Ux.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B_Z4tBMl.js → XrAcf7YH.js} +1 -1
- package/build/client/_app/immutable/chunks/XrAcf7YH.js.br +0 -0
- package/build/client/_app/immutable/chunks/XrAcf7YH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CM9QBz5w.js → _PJhUOmT.js} +1 -1
- package/build/client/_app/immutable/chunks/_PJhUOmT.js.br +0 -0
- package/build/client/_app/immutable/chunks/_PJhUOmT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/gXyWwJbW.js +1 -0
- package/build/client/_app/immutable/chunks/gXyWwJbW.js.br +0 -0
- package/build/client/_app/immutable/chunks/gXyWwJbW.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{B5kJ4QGS.js → vMHl7jRw.js} +1 -1
- package/build/client/_app/immutable/chunks/vMHl7jRw.js.br +0 -0
- package/build/client/_app/immutable/chunks/vMHl7jRw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/xJTjOoUQ.js +2 -0
- package/build/client/_app/immutable/chunks/xJTjOoUQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/xJTjOoUQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.ycJtqzGh.js +2 -0
- package/build/client/_app/immutable/entry/app.ycJtqzGh.js.br +0 -0
- package/build/client/_app/immutable/entry/app.ycJtqzGh.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.DOq0-PiA.js +1 -0
- package/build/client/_app/immutable/entry/start.DOq0-PiA.js.br +0 -0
- package/build/client/_app/immutable/entry/start.DOq0-PiA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D63E8Q6i.js +1 -0
- package/build/client/_app/immutable/nodes/0.D63E8Q6i.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D63E8Q6i.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.B63I-h1v.js +1 -0
- package/build/client/_app/immutable/nodes/1.B63I-h1v.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.B63I-h1v.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DXy8PMWZ.js +5 -0
- package/build/client/_app/immutable/nodes/2.DXy8PMWZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DXy8PMWZ.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/handler.js +7 -7
- package/build/index.js +7 -7
- package/build/server/chunks/chunks/{Arc.canvas.js-D6g58nSp.js → Arc.canvas.js-DqfSjlnB.js} +8 -8
- package/build/server/chunks/chunks/Arc.canvas.js-DqfSjlnB.js.map +1 -0
- package/build/server/chunks/chunks/{Arc.js-D78Cf_4M.js → Arc.js-DNywwEq7.js} +10 -10
- package/build/server/chunks/chunks/Arc.js-DNywwEq7.js.map +1 -0
- package/build/server/chunks/chunks/{Bar.js-Cv73T8_D.js → Bar.js-BHJrwOa1.js} +14 -14
- package/build/server/chunks/chunks/Bar.js-BHJrwOa1.js.map +1 -0
- package/build/server/chunks/chunks/{ChartAnnotations.js-Ci22VB_6.js → ChartAnnotations.js-DXt38zkt.js} +18 -18
- package/build/server/chunks/chunks/ChartAnnotations.js-DXt38zkt.js.map +1 -0
- package/build/server/chunks/chunks/{Circle.html.js-BjwyNRG3.js → Circle.html.js-KngSXZUe.js} +5 -5
- package/build/server/chunks/chunks/Circle.html.js-KngSXZUe.js.map +1 -0
- package/build/server/chunks/chunks/{ClipPath.canvas.js-CFTBDWVU.js → ClipPath.canvas.js-BsGsfzQK.js} +4 -4
- package/build/server/chunks/chunks/ClipPath.canvas.js-BsGsfzQK.js.map +1 -0
- package/build/server/chunks/chunks/{DefaultTooltip.js-0r5rbE-1.js → DefaultTooltip.js-CbyljZUi.js} +8 -8
- package/build/server/chunks/chunks/DefaultTooltip.js-CbyljZUi.js.map +1 -0
- package/build/server/chunks/chunks/{EventScatter.js-CG0RcOU6.js → EventScatter.js-DHlLEn_7.js} +39 -38
- package/build/server/chunks/chunks/EventScatter.js-DHlLEn_7.js.map +1 -0
- package/build/server/chunks/chunks/{Labels.js-DpagpV6d.js → Labels.js-DhpbhJmV.js} +18 -18
- package/build/server/chunks/chunks/Labels.js-DhpbhJmV.js.map +1 -0
- package/build/server/chunks/chunks/{Legend.js-BOpwpe5s.js → Legend.js-D25j2DRt.js} +6 -6
- package/build/server/chunks/chunks/Legend.js-D25j2DRt.js.map +1 -0
- package/build/server/chunks/chunks/{Line.html.js-BM5tR11G.js → Line.html.js-CKb2T7JC.js} +6 -6
- package/build/server/chunks/chunks/Line.html.js-CKb2T7JC.js.map +1 -0
- package/build/server/chunks/chunks/{Link.canvas.js-P8ySzEAw.js → Link.canvas.js-c0r05107.js} +9 -9
- package/build/server/chunks/chunks/Link.canvas.js-c0r05107.js.map +1 -0
- package/build/server/chunks/chunks/{Path.canvas.js-DNAtnEBt.js → Path.canvas.js-opfoYzQB.js} +5 -5
- package/build/server/chunks/chunks/Path.canvas.js-opfoYzQB.js.map +1 -0
- package/build/server/chunks/chunks/{Points.html.js-CLbHD6OP.js → Points.html.js-CJ75UtkE.js} +7 -7
- package/build/server/chunks/chunks/Points.html.js-CJ75UtkE.js.map +1 -0
- package/build/server/chunks/chunks/Points.js-Bx_vB0po.js +14 -0
- package/build/server/chunks/chunks/Points.js-Bx_vB0po.js.map +1 -0
- package/build/server/chunks/chunks/{Points2.js-BMGdkzTE.js → Points2.js-Br2MMKbn.js} +4 -4
- package/build/server/chunks/chunks/Points2.js-Br2MMKbn.js.map +1 -0
- package/build/server/chunks/chunks/{Rect.html.js-Q3UvRwNn.js → Rect.html.js-D_-JSZ22.js} +6 -6
- package/build/server/chunks/chunks/Rect.html.js-D_-JSZ22.js.map +1 -0
- package/build/server/chunks/chunks/{Spline.js-BuZPz2PJ.js → Spline.js-DpD4175j.js} +12 -12
- package/build/server/chunks/chunks/Spline.js-DpD4175j.js.map +1 -0
- package/build/server/chunks/chunks/{Text.html.js-C8xO5Nz6.js → Text.html.js-Clxo39Ky.js} +6 -6
- package/build/server/chunks/chunks/Text.html.js-Clxo39Ky.js.map +1 -0
- package/build/server/chunks/chunks/{TooltipItem.js-T0cKLjLu.js → TooltipItem.js-CgYSF3I3.js} +6 -6
- package/build/server/chunks/chunks/{TooltipItem.js-T0cKLjLu.js.map → TooltipItem.js-CgYSF3I3.js.map} +1 -1
- package/build/server/chunks/chunks/{Voronoi.js-DevTsXQE.js → Voronoi.js-CX8bqc1A.js} +7 -7
- package/build/server/chunks/chunks/Voronoi.js-CX8bqc1A.js.map +1 -0
- package/build/server/chunks/chunks/{archive.js-D2jtMmDo.js → archive.js-BRlkdj2X.js} +331 -30
- package/build/server/chunks/chunks/archive.js-BRlkdj2X.js.map +1 -0
- package/build/server/chunks/chunks/{attributes.js-BVWo7wbg.js → attributes.js-ECgqVV_7.js} +2 -2
- package/build/server/chunks/chunks/{attributes.js-BVWo7wbg.js.map → attributes.js-ECgqVV_7.js.map} +1 -1
- package/build/server/chunks/chunks/{band.js-C7izXphE.js → band.js-BcI84M0Z.js} +3 -3
- package/build/server/chunks/chunks/{band.js-C7izXphE.js.map → band.js-BcI84M0Z.js.map} +1 -1
- package/build/server/chunks/chunks/{common.js-BWQB8Die.js → common.js-DeZxUyRN.js} +2 -2
- package/build/server/chunks/chunks/{common.js-BWQB8Die.js.map → common.js-DeZxUyRN.js.map} +1 -1
- package/build/server/chunks/chunks/events.js-oxLu7lhH.js +95 -0
- package/build/server/chunks/chunks/events.js-oxLu7lhH.js.map +1 -0
- package/build/server/chunks/chunks/{group.js-DBFzWAox.js → group.js-C8H9Tpr6.js} +2 -2
- package/build/server/chunks/chunks/{group.js-DBFzWAox.js.map → group.js-C8H9Tpr6.js.map} +1 -1
- package/build/server/chunks/chunks/{server.js-CAEBuMIH.js → index-server.js-Dsi44azJ.js} +245 -4
- package/build/server/chunks/chunks/index-server.js-Dsi44azJ.js.map +1 -0
- package/build/server/chunks/chunks/{internal2.js-BMcEVxqN.js → internal2.js-Dm0TlpeP.js} +5 -5
- package/build/server/chunks/chunks/internal2.js-Dm0TlpeP.js.map +1 -0
- package/build/server/chunks/chunks/{key.svelte.js-CWIvXc6L.js → key.svelte.js-C9G4pBhE.js} +4 -4
- package/build/server/chunks/chunks/key.svelte.js-C9G4pBhE.js.map +1 -0
- package/build/server/chunks/chunks/{legacy-client.js-DJmDw3Zx.js → legacy-client.js-C8Upo6IB.js} +3 -3
- package/build/server/chunks/chunks/legacy-client.js-C8Upo6IB.js.map +1 -0
- package/build/server/chunks/chunks/{level-filter.js-D9MNrew3.js → level-filter.js-H0nc-2BG.js} +2 -2
- package/build/server/chunks/chunks/{level-filter.js-D9MNrew3.js.map → level-filter.js-H0nc-2BG.js.map} +1 -1
- package/build/server/chunks/chunks/{lineRadial.js-Dm0GMqo3.js → lineRadial.js-B0m9ujVX.js} +2 -2
- package/build/server/chunks/chunks/{lineRadial.js-Dm0GMqo3.js.map → lineRadial.js-B0m9ujVX.js.map} +1 -1
- package/build/server/chunks/chunks/{linear.js-CTOKrHn9.js → linear.js-CJ07spu6.js} +2 -2
- package/build/server/chunks/chunks/{linear.js-CTOKrHn9.js.map → linear.js-CJ07spu6.js.map} +1 -1
- package/build/server/chunks/chunks/{motion.svelte.js-DCHSFMu-.js → motion.svelte.js-DB7vkWmD.js} +3 -3
- package/build/server/chunks/chunks/motion.svelte.js-DB7vkWmD.js.map +1 -0
- package/build/server/chunks/chunks/{occlusion.js-DJ-AdK9u.js → occlusion.js-DtcqoJjc.js} +2 -2
- package/build/server/chunks/chunks/{occlusion.js-DJ-AdK9u.js.map → occlusion.js-DtcqoJjc.js.map} +1 -1
- package/build/server/chunks/chunks/{path2.js-pquT2Kg6.js → path2.js-B3tNByoS.js} +2 -2
- package/build/server/chunks/chunks/{path2.js-pquT2Kg6.js.map → path2.js-B3tNByoS.js.map} +1 -1
- package/build/server/chunks/chunks/{rect.svelte.js-zeS7FWjB.js → rect.svelte.js-C6R1SgCx.js} +4 -4
- package/build/server/chunks/chunks/rect.svelte.js-C6R1SgCx.js.map +1 -0
- package/build/server/chunks/chunks/{scales.svelte.js-D_1popPi.js → scales.svelte.js-C4lRvUAb.js} +4 -4
- package/build/server/chunks/chunks/scales.svelte.js-C4lRvUAb.js.map +1 -0
- package/build/server/chunks/chunks/{series-buckets.js-DFGWkob5.js → series-buckets.js-C-vMEJT2.js} +6 -6
- package/build/server/chunks/chunks/series-buckets.js-C-vMEJT2.js.map +1 -0
- package/build/server/chunks/chunks/{state.js-vZj9lo1I.js → state.js-qsHzjuJU.js} +3 -4
- package/build/server/chunks/chunks/state.js-qsHzjuJU.js.map +1 -0
- package/build/server/chunks/chunks/text-size.svelte.js-CqGaHRr3.js +310 -0
- package/build/server/chunks/chunks/text-size.svelte.js-CqGaHRr3.js.map +1 -0
- package/build/server/chunks/chunks/{time-range.js-BLMT8aU3.js → time-range.js-__87ZPq6.js} +10 -5
- package/build/server/chunks/chunks/time-range.js-__87ZPq6.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/archive/{_server.ts.js-C4hWyXuu.js → _server.ts.js-C6WY-ljy.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/archive/{_server.ts.js-C4hWyXuu.js.map → _server.ts.js-C6WY-ljy.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-D4y43Vwe.js → _server.ts.js-DTcVSbpV.js} +2 -2
- package/build/server/chunks/entries/endpoints/api/log-groups/{_server.ts.js-D4y43Vwe.js.map → _server.ts.js-DTcVSbpV.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/series/{_server.ts.js-DibT3Hjc.js → _server.ts.js-CzJ_bXh8.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/series/{_server.ts.js-DibT3Hjc.js.map → _server.ts.js-CzJ_bXh8.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-BxXw5K0R.js → _server.ts.js-U2naV16N.js} +211 -48
- package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-U2naV16N.js.map +1 -0
- package/build/server/chunks/entries/fallbacks/{error.svelte.js-bokc4skC.js → error.svelte.js-ClTGKP0-.js} +6 -6
- package/build/server/chunks/entries/fallbacks/error.svelte.js-ClTGKP0-.js.map +1 -0
- package/build/server/chunks/entries/pages/_layout.svelte.js-DNuWb03K.js +622 -0
- package/build/server/chunks/entries/pages/_layout.svelte.js-DNuWb03K.js.map +1 -0
- package/build/server/chunks/entries/pages/{_page.svelte.js-DRoSEPVH.js → _page.svelte.js-CVlL2UsO.js} +341 -175
- package/build/server/chunks/entries/pages/_page.svelte.js-CVlL2UsO.js.map +1 -0
- package/build/server/chunks/{handler-BkYErjbr.js → handler-CrpvMheE.js} +3 -3
- package/build/server/chunks/{handler-BkYErjbr.js.map → handler-CrpvMheE.js.map} +1 -1
- package/build/server/chunks/{index.js-5mkIDcpy.js → index.js-9Dk7Q13E.js} +3 -4
- package/build/server/chunks/index.js-9Dk7Q13E.js.map +1 -0
- package/build/server/chunks/{manifest.js-BGoS-vRx.js → manifest.js-DIaODzKX.js} +9 -9
- package/build/server/chunks/{manifest.js-BGoS-vRx.js.map → manifest.js-DIaODzKX.js.map} +1 -1
- package/build/server/chunks/nodes/0.js-CQ960AOW.js +9 -0
- package/build/server/chunks/nodes/0.js-CQ960AOW.js.map +1 -0
- package/build/server/chunks/nodes/1.js-CtTei4sV.js +9 -0
- package/build/server/chunks/nodes/{1.js-BQibx33b.js.map → 1.js-CtTei4sV.js.map} +1 -1
- package/build/server/chunks/nodes/2.js-BbKDb_M6.js +9 -0
- package/build/server/chunks/nodes/2.js-BbKDb_M6.js.map +1 -0
- package/dist/cli/completions.js +24 -0
- package/dist/cli/index.js +144 -3
- package/dist/cli/mcp/agents.js +344 -0
- package/dist/cli/mcp/backend.js +235 -0
- package/dist/cli/mcp/run.js +245 -0
- package/dist/cli/mcp/stdio.js +103 -0
- package/dist/cli/mcp/tools.js +245 -0
- package/dist/cli/options.js +138 -25
- package/dist/cli/server.js +28 -0
- package/dist/cli/ui.js +20 -1
- package/dist/lib/time-range.js +14 -3
- package/package.json +8 -2
- package/build/client/_app/immutable/assets/0.zDk3x0WE.css +0 -2
- package/build/client/_app/immutable/assets/0.zDk3x0WE.css.br +0 -0
- package/build/client/_app/immutable/assets/0.zDk3x0WE.css.gz +0 -0
- package/build/client/_app/immutable/assets/EventScatter.CCk6ByS3.css.br +0 -0
- package/build/client/_app/immutable/assets/EventScatter.CCk6ByS3.css.gz +0 -0
- package/build/client/_app/immutable/chunks/9z7cmAWt.js.br +0 -0
- package/build/client/_app/immutable/chunks/9z7cmAWt.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B26Z2DQX.js +0 -1
- package/build/client/_app/immutable/chunks/B26Z2DQX.js.br +0 -0
- package/build/client/_app/immutable/chunks/B26Z2DQX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5kJ4QGS.js.br +0 -0
- package/build/client/_app/immutable/chunks/B5kJ4QGS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BF1MBUT7.js.br +0 -0
- package/build/client/_app/immutable/chunks/BF1MBUT7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BJEa1AAY.js +0 -10
- package/build/client/_app/immutable/chunks/BJEa1AAY.js.br +0 -0
- package/build/client/_app/immutable/chunks/BJEa1AAY.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BKpbhYu9.js.br +0 -0
- package/build/client/_app/immutable/chunks/BKpbhYu9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BVlqiKgb.js.br +0 -0
- package/build/client/_app/immutable/chunks/BVlqiKgb.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BWGaSL1l.js.br +0 -0
- package/build/client/_app/immutable/chunks/BWGaSL1l.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_Z4tBMl.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_Z4tBMl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bo46v6NJ.js +0 -1
- package/build/client/_app/immutable/chunks/Bo46v6NJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bo46v6NJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BpDPh_kG.js +0 -1
- package/build/client/_app/immutable/chunks/BpDPh_kG.js.br +0 -0
- package/build/client/_app/immutable/chunks/BpDPh_kG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BzFqst10.js.br +0 -0
- package/build/client/_app/immutable/chunks/BzFqst10.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C3JYac4u.js +0 -1
- package/build/client/_app/immutable/chunks/C3JYac4u.js.br +0 -0
- package/build/client/_app/immutable/chunks/C3JYac4u.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CBzF0p8K.js.br +0 -0
- package/build/client/_app/immutable/chunks/CBzF0p8K.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CM9QBz5w.js.br +0 -0
- package/build/client/_app/immutable/chunks/CM9QBz5w.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CZqQKfBo.js +0 -15
- package/build/client/_app/immutable/chunks/CZqQKfBo.js.br +0 -0
- package/build/client/_app/immutable/chunks/CZqQKfBo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cr-NovV3.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cr-NovV3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cz6pnyFa.js +0 -1
- package/build/client/_app/immutable/chunks/Cz6pnyFa.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cz6pnyFa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D2fsDTN5.js +0 -1
- package/build/client/_app/immutable/chunks/D2fsDTN5.js.br +0 -0
- package/build/client/_app/immutable/chunks/D2fsDTN5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DBcd9YbV.js.br +0 -0
- package/build/client/_app/immutable/chunks/DBcd9YbV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DC_milOQ.js +0 -1
- package/build/client/_app/immutable/chunks/DC_milOQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DC_milOQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DNiEIfDZ.js +0 -1
- package/build/client/_app/immutable/chunks/DNiEIfDZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/DNiEIfDZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DWdskt_Y.js +0 -2
- package/build/client/_app/immutable/chunks/DWdskt_Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/DWdskt_Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DsMQ6HVM.js +0 -1
- package/build/client/_app/immutable/chunks/DsMQ6HVM.js.br +0 -0
- package/build/client/_app/immutable/chunks/DsMQ6HVM.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dxeyu30B.js +0 -1
- package/build/client/_app/immutable/chunks/Dxeyu30B.js.br +0 -1
- package/build/client/_app/immutable/chunks/Dxeyu30B.js.gz +0 -0
- package/build/client/_app/immutable/chunks/H4Anb6kP.js +0 -1
- package/build/client/_app/immutable/chunks/H4Anb6kP.js.br +0 -0
- package/build/client/_app/immutable/chunks/H4Anb6kP.js.gz +0 -0
- package/build/client/_app/immutable/chunks/MDK8mPOo.js +0 -1
- package/build/client/_app/immutable/chunks/MDK8mPOo.js.br +0 -0
- package/build/client/_app/immutable/chunks/MDK8mPOo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/X7CLxGgV.js.br +0 -0
- package/build/client/_app/immutable/chunks/X7CLxGgV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/cK-f5ch_.js.br +0 -2
- package/build/client/_app/immutable/chunks/cK-f5ch_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/mhYP0ygJ.js +0 -1
- package/build/client/_app/immutable/chunks/mhYP0ygJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/mhYP0ygJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/pqiPC7Y8.js +0 -3
- package/build/client/_app/immutable/chunks/pqiPC7Y8.js.br +0 -0
- package/build/client/_app/immutable/chunks/pqiPC7Y8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/vB0ff9Sn.js.br +0 -0
- package/build/client/_app/immutable/chunks/vB0ff9Sn.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CinEZGkq.js +0 -2
- package/build/client/_app/immutable/entry/app.CinEZGkq.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CinEZGkq.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B7e0-3Hk.js +0 -1
- package/build/client/_app/immutable/entry/start.B7e0-3Hk.js.br +0 -1
- package/build/client/_app/immutable/entry/start.B7e0-3Hk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CFO0Fthy.js +0 -1
- package/build/client/_app/immutable/nodes/0.CFO0Fthy.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CFO0Fthy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.kGO9dV9J.js +0 -1
- package/build/client/_app/immutable/nodes/1.kGO9dV9J.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.kGO9dV9J.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.eGSziRQX.js +0 -5
- package/build/client/_app/immutable/nodes/2.eGSziRQX.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.eGSziRQX.js.gz +0 -0
- package/build/server/chunks/chunks/Arc.canvas.js-D6g58nSp.js.map +0 -1
- package/build/server/chunks/chunks/Arc.js-D78Cf_4M.js.map +0 -1
- package/build/server/chunks/chunks/Bar.js-Cv73T8_D.js.map +0 -1
- package/build/server/chunks/chunks/ChartAnnotations.js-Ci22VB_6.js.map +0 -1
- package/build/server/chunks/chunks/Circle.html.js-BjwyNRG3.js.map +0 -1
- package/build/server/chunks/chunks/ClipPath.canvas.js-CFTBDWVU.js.map +0 -1
- package/build/server/chunks/chunks/DefaultTooltip.js-0r5rbE-1.js.map +0 -1
- package/build/server/chunks/chunks/EventScatter.js-CG0RcOU6.js.map +0 -1
- package/build/server/chunks/chunks/Labels.js-DpagpV6d.js.map +0 -1
- package/build/server/chunks/chunks/Legend.js-BOpwpe5s.js.map +0 -1
- package/build/server/chunks/chunks/Line.html.js-BM5tR11G.js.map +0 -1
- package/build/server/chunks/chunks/Link.canvas.js-P8ySzEAw.js.map +0 -1
- package/build/server/chunks/chunks/Path.canvas.js-DNAtnEBt.js.map +0 -1
- package/build/server/chunks/chunks/Points.html.js-CLbHD6OP.js.map +0 -1
- package/build/server/chunks/chunks/Points.js-e6g0Re6H.js +0 -14
- package/build/server/chunks/chunks/Points.js-e6g0Re6H.js.map +0 -1
- package/build/server/chunks/chunks/Points2.js-BMGdkzTE.js.map +0 -1
- package/build/server/chunks/chunks/Rect.html.js-Q3UvRwNn.js.map +0 -1
- package/build/server/chunks/chunks/Spline.js-BuZPz2PJ.js.map +0 -1
- package/build/server/chunks/chunks/Text.html.js-C8xO5Nz6.js.map +0 -1
- package/build/server/chunks/chunks/Voronoi.js-DevTsXQE.js.map +0 -1
- package/build/server/chunks/chunks/archive.js-D2jtMmDo.js.map +0 -1
- package/build/server/chunks/chunks/index-server.js-DNLOKvM0.js +0 -248
- package/build/server/chunks/chunks/index-server.js-DNLOKvM0.js.map +0 -1
- package/build/server/chunks/chunks/internal2.js-BMcEVxqN.js.map +0 -1
- package/build/server/chunks/chunks/key.svelte.js-CWIvXc6L.js.map +0 -1
- package/build/server/chunks/chunks/legacy-client.js-DJmDw3Zx.js.map +0 -1
- package/build/server/chunks/chunks/motion.svelte.js-DCHSFMu-.js.map +0 -1
- package/build/server/chunks/chunks/rect.svelte.js-zeS7FWjB.js.map +0 -1
- package/build/server/chunks/chunks/scales.svelte.js-D_1popPi.js.map +0 -1
- package/build/server/chunks/chunks/series-buckets.js-DFGWkob5.js.map +0 -1
- package/build/server/chunks/chunks/server.js-CAEBuMIH.js.map +0 -1
- package/build/server/chunks/chunks/state.js-vZj9lo1I.js.map +0 -1
- package/build/server/chunks/chunks/time-range.js-BLMT8aU3.js.map +0 -1
- package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-BxXw5K0R.js.map +0 -1
- package/build/server/chunks/entries/fallbacks/error.svelte.js-bokc4skC.js.map +0 -1
- package/build/server/chunks/entries/pages/_layout.svelte.js-8U7ZeKYO.js +0 -22
- package/build/server/chunks/entries/pages/_layout.svelte.js-8U7ZeKYO.js.map +0 -1
- package/build/server/chunks/entries/pages/_page.svelte.js-DRoSEPVH.js.map +0 -1
- package/build/server/chunks/index.js-5mkIDcpy.js.map +0 -1
- package/build/server/chunks/nodes/0.js-BIj6k30n.js +0 -9
- package/build/server/chunks/nodes/0.js-BIj6k30n.js.map +0 -1
- package/build/server/chunks/nodes/1.js-BQibx33b.js +0 -9
- package/build/server/chunks/nodes/2.js-CczDSPv9.js +0 -9
- package/build/server/chunks/nodes/2.js-CczDSPv9.js.map +0 -1
|
@@ -1,17 +1,68 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ae as escape_html, ac as attr, ad as attr_class, af as attr_style, a6 as ensure_array_like, ag as stringify, a1 as derived, ah as spread_props, al as bind_props, am as clsx } from '../../chunks/index-server.js-Dsi44azJ.js';
|
|
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
|
-
import { P as PRESET_LABELS, a as presetLabel, H as HISTORIC_PRESETS, t as toDateTimeLocal, d as describeWindow } from '../../chunks/time-range.js-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { P as PRESET_LABELS, a as presetLabel, H as HISTORIC_PRESETS, t as toDateTimeLocal, d as describeWindow } from '../../chunks/time-range.js-__87ZPq6.js';
|
|
5
|
+
import { I as Icon, t as textSize, p as puppy } from '../../chunks/text-size.svelte.js-CqGaHRr3.js';
|
|
6
|
+
import { p as page, r as replaceState } from '../../chunks/state.js-qsHzjuJU.js';
|
|
7
|
+
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-C-vMEJT2.js';
|
|
7
8
|
import '../../chunks/uneval.js-DaakSYFQ.js';
|
|
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-
|
|
12
|
-
import '../../chunks/legacy-client.js-
|
|
11
|
+
import '../../chunks/internal2.js-Dm0TlpeP.js';
|
|
12
|
+
import '../../chunks/legacy-client.js-C8Upo6IB.js';
|
|
13
|
+
import '../../chunks/events.js-oxLu7lhH.js';
|
|
13
14
|
import '../../chunks/utils.js-BIlHjgGW.js';
|
|
14
15
|
|
|
16
|
+
//#region node_modules/.pnpm/@lucide+svelte@1.47.0_svelte@5.57.0/node_modules/@lucide/svelte/dist/icons/arrow-right.svelte
|
|
17
|
+
function Arrow_right($$renderer, $$props) {
|
|
18
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
19
|
+
Icon($$renderer, spread_props([props, { icon: {
|
|
20
|
+
"name": "arrow-right",
|
|
21
|
+
"size": 24,
|
|
22
|
+
"node": [["path", { "d": "M5 12h14" }], ["path", { "d": "m12 5 7 7-7 7" }]]
|
|
23
|
+
} }]));
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region node_modules/.pnpm/@lucide+svelte@1.47.0_svelte@5.57.0/node_modules/@lucide/svelte/dist/icons/chevron-down.svelte
|
|
27
|
+
function Chevron_down($$renderer, $$props) {
|
|
28
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
29
|
+
Icon($$renderer, spread_props([props, { icon: {
|
|
30
|
+
"name": "chevron-down",
|
|
31
|
+
"size": 24,
|
|
32
|
+
"node": [["path", { "d": "m6 9 6 6 6-6" }]]
|
|
33
|
+
} }]));
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region node_modules/.pnpm/@lucide+svelte@1.47.0_svelte@5.57.0/node_modules/@lucide/svelte/dist/icons/chevron-left.svelte
|
|
37
|
+
function Chevron_left($$renderer, $$props) {
|
|
38
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
39
|
+
Icon($$renderer, spread_props([props, { icon: {
|
|
40
|
+
"name": "chevron-left",
|
|
41
|
+
"size": 24,
|
|
42
|
+
"node": [["path", { "d": "m15 18-6-6 6-6" }]]
|
|
43
|
+
} }]));
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region node_modules/.pnpm/@lucide+svelte@1.47.0_svelte@5.57.0/node_modules/@lucide/svelte/dist/icons/chevron-right.svelte
|
|
47
|
+
function Chevron_right($$renderer, $$props) {
|
|
48
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
49
|
+
Icon($$renderer, spread_props([props, { icon: {
|
|
50
|
+
"name": "chevron-right",
|
|
51
|
+
"size": 24,
|
|
52
|
+
"node": [["path", { "d": "m9 18 6-6-6-6" }]]
|
|
53
|
+
} }]));
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region node_modules/.pnpm/@lucide+svelte@1.47.0_svelte@5.57.0/node_modules/@lucide/svelte/dist/icons/chevron-up.svelte
|
|
57
|
+
function Chevron_up($$renderer, $$props) {
|
|
58
|
+
let { $$slots, $$events, ...props } = $$props;
|
|
59
|
+
Icon($$renderer, spread_props([props, { icon: {
|
|
60
|
+
"name": "chevron-up",
|
|
61
|
+
"size": 24,
|
|
62
|
+
"node": [["path", { "d": "m18 15-6-6-6 6" }]]
|
|
63
|
+
} }]));
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
15
66
|
//#region src/lib/format.ts
|
|
16
67
|
/**
|
|
17
68
|
* Formatting helpers for the watch-tail UI. Every function here is pure so it can be unit
|
|
@@ -159,10 +210,14 @@ function EndpointBadge($$renderer, $$props) {
|
|
|
159
210
|
/** `localStorage` keys, prefixed so they are easy to spot in a browser. */
|
|
160
211
|
var STORAGE_KEYS = {
|
|
161
212
|
sidebarWidth: "watch-tail:sidebar-width",
|
|
213
|
+
sidebarOpen: "watch-tail:sidebar-open",
|
|
162
214
|
prefixWidth: "watch-tail:prefix-width",
|
|
215
|
+
timestampWidth: "watch-tail:timestamp-width",
|
|
216
|
+
groupWidth: "watch-tail:group-width",
|
|
163
217
|
wrap: "watch-tail:wrap",
|
|
164
218
|
jsonView: "watch-tail:json-view",
|
|
165
219
|
chartOpen: "watch-tail:chart-open",
|
|
220
|
+
logOpen: "watch-tail:log-open",
|
|
166
221
|
groupRequests: "watch-tail:group-requests"
|
|
167
222
|
};
|
|
168
223
|
/** Default width of the group-list pane, in rem (matches the original layout). */
|
|
@@ -177,11 +232,6 @@ var PREFIX_WIDTH = {
|
|
|
177
232
|
minRem: 4,
|
|
178
233
|
maxRem: 40
|
|
179
234
|
};
|
|
180
|
-
/** Converts a CSS pixel width to `rem` for use in a Tailwind `style` attribute. */
|
|
181
|
-
function pxToRem(px, rootFontSize = 16) {
|
|
182
|
-
const rem = px / rootFontSize;
|
|
183
|
-
return `${Number.isInteger(rem) ? rem : Number(rem.toFixed(3))}rem`;
|
|
184
|
-
}
|
|
185
235
|
/** Parses a `rem` value into CSS pixels. */
|
|
186
236
|
function remToPx(rem, rootFontSize = 16) {
|
|
187
237
|
return rem * rootFontSize;
|
|
@@ -207,7 +257,7 @@ function EventScatterPanel($$renderer, $$props) {
|
|
|
207
257
|
* The real loader: a dynamic import, which is what keeps layerchart out of the
|
|
208
258
|
* initial bundle. It only runs in the browser, and only once the panel is open.
|
|
209
259
|
*/
|
|
210
|
-
const loadChartModule = () => import('../../chunks/EventScatter.js-
|
|
260
|
+
const loadChartModule = () => import('../../chunks/EventScatter.js-DHlLEn_7.js');
|
|
211
261
|
/** Bucketed counts for the window. */
|
|
212
262
|
/** Inclusive start of the window, epoch ms. */
|
|
213
263
|
/** Inclusive end of the window, epoch ms. */
|
|
@@ -217,9 +267,10 @@ function EventScatterPanel($$renderer, $$props) {
|
|
|
217
267
|
/** True while the counts are being fetched. */
|
|
218
268
|
/** Called with the brushed range when the drag ends, or `null` on clear. */
|
|
219
269
|
/** Chart height in px. */
|
|
270
|
+
/** True to grow into the space its parent gives instead of a fixed height. */
|
|
220
271
|
/** Start open, which is also what the first visit uses. */
|
|
221
272
|
/** Chart module loader; defaults to the dynamic import. */
|
|
222
|
-
let { metric = "
|
|
273
|
+
let { metric = "duration", onMetricChange, onSelect, points = [], from = 0, to = 0, bucketMs = 0, groups = [], loading = false, byRequest = true, onBrush, height = 200, fill = false, open = true, loadChart = loadChartModule } = $$props;
|
|
223
274
|
let expanded = derived(() => open);
|
|
224
275
|
/** Totals and labels per level, in severity order. */
|
|
225
276
|
let levelGroups = derived(() => groupByLevel(points));
|
|
@@ -227,56 +278,53 @@ function EventScatterPanel($$renderer, $$props) {
|
|
|
227
278
|
let totalEvents = derived(() => levelGroups().reduce((sum, entry) => sum + entry.events, 0));
|
|
228
279
|
/** Buckets drawn. */
|
|
229
280
|
let bucketCount = derived(() => new Set(points.map((point) => point.t)).size);
|
|
230
|
-
/** True when there is something to draw. */
|
|
231
|
-
let hasPoints = derived(() => points.length > 0);
|
|
232
281
|
/** What one mark stands for, which is what the totals count. */
|
|
233
282
|
let unit = derived(() => metric === "duration" || byRequest ? "requests" : "events");
|
|
234
283
|
/** Clears the brush, for the host's Reset zoom control. */
|
|
235
284
|
function reset() {
|
|
236
285
|
onBrush?.(null);
|
|
237
286
|
}
|
|
238
|
-
$$renderer.push(`<section
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
287
|
+
$$renderer.push(`<section${attr_class(`flex min-w-0 flex-col border-b border-neutral-800 bg-neutral-950/60 ${fill && expanded() ? "min-h-0 flex-1" : "shrink-0"}`)} data-testid="event-scatter"${attr("aria-label", metric === "duration" ? "Request duration over time" : "Events over time")}><div class="flex min-h-9 flex-none flex-wrap items-center gap-x-3 gap-y-1 border-b border-neutral-800 bg-neutral-900/40 px-3 py-1.5 text-[0.6875rem]"><button type="button"${attr("aria-expanded", expanded())}${attr("title", expanded() ? "Hide the chart" : "Show the chart")} data-testid="scatter-toggle" class="flex items-center gap-1 text-sm font-semibold text-neutral-200 transition-colors hover:text-sky-300">`);
|
|
288
|
+
if (expanded()) {
|
|
289
|
+
$$renderer.push("<!--[0-->");
|
|
290
|
+
Chevron_down($$renderer, { size: "1em" });
|
|
291
|
+
} else {
|
|
292
|
+
$$renderer.push("<!--[-1-->");
|
|
293
|
+
Chevron_right($$renderer, { size: "1em" });
|
|
243
294
|
}
|
|
244
|
-
$$renderer.push(`<!--]
|
|
245
|
-
${escape_html(unit())}`);
|
|
246
|
-
if (metric === "count") $$renderer.push(`<!--[0--> in ${escape_html(formatCount(bucketCount()))} buckets`);
|
|
247
|
-
else $$renderer.push("<!--[-1-->");
|
|
248
|
-
$$renderer.push(`<!--]--></span> `);
|
|
295
|
+
$$renderer.push(`<!--]--> Chart - ${escape_html(metric === "duration" ? "Request duration" : "Events over time")}</button> `);
|
|
249
296
|
if (groups.length > 1) $$renderer.push(`<!--[0--><span class="text-neutral-500" data-testid="scatter-groups">across ${escape_html(groups.length)} groups</span>`);
|
|
250
297
|
else $$renderer.push("<!--[-1-->");
|
|
251
298
|
$$renderer.push(`<!--]--> <!--[-->`);
|
|
252
|
-
const
|
|
253
|
-
for (let $$
|
|
254
|
-
let entry =
|
|
299
|
+
const each_array = ensure_array_like(levelGroups());
|
|
300
|
+
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
|
301
|
+
let entry = each_array[$$index];
|
|
255
302
|
$$renderer.push(`<span class="flex items-center gap-1 text-neutral-400"${attr("data-testid", `scatter-legend-${stringify(entry.level)}`)}><span class="inline-block h-2 w-2 rounded-full"${attr_style(`background-color: ${stringify(SERIES_LEVEL_COLOR[entry.level])}`)}></span> ${escape_html(entry.label)} <span class="text-neutral-500">${escape_html(formatCount(entry.events))}</span></span>`);
|
|
256
303
|
}
|
|
257
304
|
$$renderer.push(`<!--]--> `);
|
|
258
305
|
if (loading && expanded()) $$renderer.push(`<!--[0--><span class="text-amber-300" data-testid="scatter-loading">loading…</span>`);
|
|
259
306
|
else $$renderer.push("<!--[-1-->");
|
|
260
|
-
$$renderer.push(`<!--]-->
|
|
307
|
+
$$renderer.push(`<!--]--> <span class="ml-auto text-neutral-400" data-testid="scatter-summary">${escape_html(formatCount(totalEvents()))}
|
|
308
|
+
${escape_html(unit())}`);
|
|
309
|
+
if (metric === "count") $$renderer.push(`<!--[0--> in ${escape_html(formatCount(bucketCount()))} buckets`);
|
|
310
|
+
else $$renderer.push("<!--[-1-->");
|
|
311
|
+
$$renderer.push(`<!--]--></span></div> `);
|
|
261
312
|
if (expanded()) {
|
|
262
|
-
$$renderer.push("
|
|
313
|
+
$$renderer.push(`<!--[0--><div${attr_class(`flex flex-col gap-1 p-2 ${fill ? "min-h-0 flex-1" : ""}`)}><div class="flex flex-wrap items-center gap-x-3 gap-y-1 text-[0.6875rem]"><div role="group" aria-label="Chart metric" class="flex rounded-md border border-neutral-800 p-0.5"><!--[-->`);
|
|
314
|
+
const each_array_1 = ensure_array_like(["count", "duration"]);
|
|
315
|
+
for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
|
|
316
|
+
let choice = each_array_1[$$index_1];
|
|
317
|
+
$$renderer.push(`<button type="button"${attr("data-testid", `chart-metric-${choice}`)}${attr("aria-pressed", metric === choice)}${attr_class(`rounded px-2 py-0.5 transition-colors ${metric === choice ? "bg-sky-950 text-sky-300" : "text-neutral-400 hover:text-neutral-200"}`)}>${escape_html(choice === "count" ? "Count" : "Duration (ms)")}</button>`);
|
|
318
|
+
}
|
|
319
|
+
$$renderer.push(`<!--]--></div> `);
|
|
263
320
|
$$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
|
-
$$renderer.push(`<!--]
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
if (expanded()) {
|
|
268
|
-
$$renderer.push("<!--[0-->");
|
|
321
|
+
$$renderer.push(`<!--]--></div> <div${attr_class(`relative overflow-hidden ${fill ? "min-h-0 flex-1" : ""}`)}${attr_style(fill ? void 0 : `height: ${height}px`)} data-testid="chart-body">`);
|
|
322
|
+
$$renderer.push(`<!--[-1--><div${attr_class(`w-full animate-pulse rounded bg-neutral-900/60 ${fill ? "h-full" : ""}`)}${attr_style(fill ? void 0 : `height: ${height}px`)}></div>`);
|
|
323
|
+
$$renderer.push(`<!--]--></div> `);
|
|
269
324
|
if (metric === "duration") $$renderer.push(`<!--[0--><p class="px-1 text-[0.6875rem] text-neutral-500" data-testid="duration-note">Observed duration (ms) · last event + its duration − first event · partial requests may
|
|
270
|
-
|
|
325
|
+
appear shorter</p>`);
|
|
271
326
|
else $$renderer.push("<!--[-1-->");
|
|
272
|
-
$$renderer.push(`<!--]
|
|
273
|
-
if (hasPoints()) {
|
|
274
|
-
$$renderer.push("<!--[1-->");
|
|
275
|
-
$$renderer.push(`<!--[-1--><div class="w-full animate-pulse rounded bg-neutral-900/60"${attr_style(`height: ${stringify(height)}px`)}></div>`);
|
|
276
|
-
$$renderer.push(`<!--]-->`);
|
|
277
|
-
} else if (!loading) $$renderer.push(`<!--[2--><p class="px-1 py-6 text-xs text-neutral-500" data-testid="scatter-empty">${escape_html(metric === "duration" ? "No requests with a request ID in this window yet." : "No events in this window yet.")}</p>`);
|
|
278
|
-
else $$renderer.push("<!--[-1-->");
|
|
279
|
-
$$renderer.push(`<!--]-->`);
|
|
327
|
+
$$renderer.push(`<!--]--></div>`);
|
|
280
328
|
} else $$renderer.push("<!--[-1-->");
|
|
281
329
|
$$renderer.push(`<!--]--></section>`);
|
|
282
330
|
bind_props($$props, { reset });
|
|
@@ -313,8 +361,12 @@ function RangeControls($$renderer, $$props) {
|
|
|
313
361
|
/** True when the source cannot follow live events, such as the local archive. */
|
|
314
362
|
/** Called when the user switches mode or applies a range. */
|
|
315
363
|
let { mode = "live", range = "15m", from = null, to = null, disabled = false, loading = false, liveDisabled = false} = $$props;
|
|
316
|
-
/**
|
|
317
|
-
let
|
|
364
|
+
/** True when the custom chip stands for an explicit window with both bounds. */
|
|
365
|
+
let customActive = derived(() => mode === "historic" && range === "" && from !== null && to !== null);
|
|
366
|
+
/** Start bound on the custom chip, formatted for display. */
|
|
367
|
+
let customFromLabel = derived(() => from === null ? "" : toDateTimeLocal(from).replace("T", " "));
|
|
368
|
+
/** End bound on the custom chip, formatted for display. */
|
|
369
|
+
let customToLabel = derived(() => to === null ? "" : toDateTimeLocal(to).replace("T", " "));
|
|
318
370
|
$$renderer.push(`<div class="flex flex-wrap items-center gap-2" data-testid="range-controls"><div class="flex items-center gap-1 rounded-lg border border-neutral-800 bg-neutral-900 p-0.5" role="group" aria-label="Tail mode"><button type="button"${attr("aria-pressed", mode === "live")}${attr("disabled", liveDisabled, true)}${attr("title", liveDisabled ? "There is nothing to tail: the local archive holds historic windows" : void 0)} data-testid="mode-live"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${mode === "live" ? "border-sky-700 bg-sky-950/60 text-sky-300" : "border-transparent text-neutral-400 hover:text-neutral-200"} disabled:opacity-40`)}>Live</button> <button type="button"${attr("aria-pressed", mode === "historic")} data-testid="mode-historic"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${mode === "historic" ? "border-amber-700 bg-amber-950/50 text-amber-300" : "border-transparent text-neutral-400 hover:text-neutral-200"}`)}>Historic</button></div> `);
|
|
319
371
|
if (mode === "historic") {
|
|
320
372
|
$$renderer.push(`<!--[0--><div class="flex flex-wrap items-center gap-1" role="group" aria-label="Historic range"><!--[-->`);
|
|
@@ -323,7 +375,13 @@ function RangeControls($$renderer, $$props) {
|
|
|
323
375
|
let preset = each_array[$$index];
|
|
324
376
|
$$renderer.push(`<button type="button"${attr("aria-pressed", range === preset)}${attr("data-testid", `preset-${stringify(preset)}`)}${attr("disabled", disabled, true)}${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${range === preset ? "border-amber-700 bg-amber-950/50 text-amber-200" : "border-neutral-800 bg-neutral-900 text-neutral-300 hover:border-neutral-700"} disabled:opacity-40`)}>${escape_html(PRESET_LABELS[preset])}</button>`);
|
|
325
377
|
}
|
|
326
|
-
$$renderer.push(`<!--]--> <button type="button"${attr("aria-pressed", range === "")} data-testid="preset-custom"${attr("disabled", disabled, true)}${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${range === "" ? "border-amber-700 bg-amber-950/50 text-amber-200" : "border-neutral-800 bg-neutral-900 text-neutral-300 hover:border-neutral-700"}`)}
|
|
378
|
+
$$renderer.push(`<!--]--> <button type="button"${attr("aria-pressed", range === "")} data-testid="preset-custom"${attr("disabled", disabled, true)}${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${range === "" ? "border-amber-700 bg-amber-950/50 text-amber-200" : "border-neutral-800 bg-neutral-900 text-neutral-300 hover:border-neutral-700"}`)}>`);
|
|
379
|
+
if (customActive()) {
|
|
380
|
+
$$renderer.push(`<!--[0--><span class="inline-flex items-center gap-1"><span>${escape_html(customFromLabel())}</span> `);
|
|
381
|
+
Arrow_right($$renderer, { size: "1em" });
|
|
382
|
+
$$renderer.push(`<!----> <span>${escape_html(customToLabel())}</span></span>`);
|
|
383
|
+
} else $$renderer.push(`<!--[-1-->Custom…`);
|
|
384
|
+
$$renderer.push(`<!--]--></button></div>`);
|
|
327
385
|
} else $$renderer.push("<!--[-1-->");
|
|
328
386
|
$$renderer.push(`<!--]--> `);
|
|
329
387
|
if (loading) $$renderer.push(`<!--[0--><span class="text-xs text-amber-300" data-testid="range-loading">loading window…</span>`);
|
|
@@ -529,7 +587,7 @@ function LogGroupList($$renderer, $$props) {
|
|
|
529
587
|
function rowTone(name) {
|
|
530
588
|
return isSelected(name) ? "border-sky-800 bg-sky-950/50 text-sky-200" : "border-transparent bg-neutral-900/60 text-neutral-300 hover:border-neutral-800 hover:text-neutral-100";
|
|
531
589
|
}
|
|
532
|
-
$$renderer.push(`<section class="flex min-h-0 flex-1 flex-col gap-3"><div class="flex items-center justify-between gap-2"><div class="flex items-baseline gap-2"><
|
|
590
|
+
$$renderer.push(`<section class="flex min-h-0 flex-1 flex-col gap-3"><div class="flex items-center justify-between gap-2"><div class="flex items-baseline gap-2"><span class="text-xs text-neutral-500" data-testid="group-count">${escape_html(formatCount(filtered().length))} of ${escape_html(formatCount(groups.length))}</span> `);
|
|
533
591
|
if (activeSelection().length > 1) $$renderer.push(`<!--[0--><span class="text-xs font-medium text-sky-400" data-testid="selected-count">${escape_html(formatCount(activeSelection().length))} selected</span>`);
|
|
534
592
|
else $$renderer.push("<!--[-1-->");
|
|
535
593
|
$$renderer.push(`<!--]--> `);
|
|
@@ -548,17 +606,17 @@ function LogGroupList($$renderer, $$props) {
|
|
|
548
606
|
} else if (groups.length === 0) $$renderer.push(`<!--[2--><p data-testid="group-empty" class="rounded-md border border-neutral-800 bg-neutral-900/60 px-3 py-2 text-xs leading-5 text-neutral-400">${escape_html(archived() ? noArchivedGroupsMessage(region) : noGroupsMessage(region))}</p>`);
|
|
549
607
|
else if (visible().length === 0) $$renderer.push(`<!--[3--><p data-testid="group-no-match" class="px-1 py-2 text-xs text-neutral-500">No log groups match “${escape_html(query())}”.</p>`);
|
|
550
608
|
else {
|
|
551
|
-
$$renderer.push(`<!--[-1--><ul class="flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto pr-1"><!--[-->`);
|
|
609
|
+
$$renderer.push(`<!--[-1--><ul class="@container flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto pr-1"><!--[-->`);
|
|
552
610
|
const each_array_1 = ensure_array_like(visible());
|
|
553
611
|
for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
|
|
554
612
|
let group = each_array_1[$$index_1];
|
|
555
|
-
$$renderer.push(`<li class="flex items-center gap-1.5"><input type="checkbox"${attr("data-testid", `group-check-${stringify(group.name)}`)}${attr("aria-label", `Include ${group.name} in the selection`)}${attr("checked", isSelected(group.name), true)} class="size-3.5 shrink-0 cursor-pointer accent-sky-500"/> <button type="button" data-testid="group-row"${attr("aria-current", isSelected(group.name) ? "true" : void 0)}${attr_class(`flex min-w-0 flex-1 items-center justify-between gap-2 rounded-md border px-2.5 py-1.5 text-left text-xs transition-colors ${stringify(rowTone(group.name))}`)}><span class="
|
|
613
|
+
$$renderer.push(`<li class="flex items-center gap-1.5"><input type="checkbox"${attr("data-testid", `group-check-${stringify(group.name)}`)}${attr("aria-label", `Include ${group.name} in the selection`)}${attr("checked", isSelected(group.name), true)} class="size-3.5 shrink-0 cursor-pointer accent-sky-500"/> <button type="button" data-testid="group-row"${attr("data-group-name", group.name)}${attr("aria-label", group.name)}${attr("title", group.name)}${attr("aria-current", isSelected(group.name) ? "true" : void 0)}${attr_class(`flex min-w-0 flex-1 items-center justify-between gap-2 rounded-md border px-2.5 py-1.5 text-left text-xs transition-colors ${stringify(rowTone(group.name))}`)}><span class="min-w-16 flex-1 overflow-hidden whitespace-nowrap font-mono" aria-hidden="true">${escape_html(group.name)}</span> `);
|
|
556
614
|
if (archived()) {
|
|
557
615
|
$$renderer.push(`<!--[0--><span class="flex shrink-0 items-center gap-1.5">`);
|
|
558
616
|
if (archivedCount(group) !== null) $$renderer.push(`<!--[0--><span data-testid="group-archived-count"${attr("title", archivedSpan(group) ?? "Events held in the local DuckDB archive")} class="rounded-full border border-teal-900 bg-teal-950/50 px-1.5 py-0.5 text-[0.625rem] font-medium text-teal-300">${escape_html(archivedCount(group))}</span>`);
|
|
559
617
|
else $$renderer.push("<!--[-1-->");
|
|
560
618
|
$$renderer.push(`<!--]--> `);
|
|
561
|
-
if (archivedSpan(group) !== null) $$renderer.push(`<!--[0--><span class="hidden text-[0.6875rem] text-neutral-500
|
|
619
|
+
if (archivedSpan(group) !== null) $$renderer.push(`<!--[0--><span class="hidden text-[0.6875rem] text-neutral-500 @2xl:inline" data-testid="group-archived-span">${escape_html(archivedSpan(group))}</span>`);
|
|
562
620
|
else $$renderer.push("<!--[-1-->");
|
|
563
621
|
$$renderer.push(`<!--]--></span>`);
|
|
564
622
|
} else if (group.storedBytes !== void 0) $$renderer.push(`<!--[1--><span class="shrink-0 text-[0.6875rem] text-neutral-500">${escape_html(formatBytes(group.storedBytes))}</span>`);
|
|
@@ -660,10 +718,13 @@ function LogViewer($$renderer, $$props) {
|
|
|
660
718
|
* default, and owned by the page so the chart counts the same requests.
|
|
661
719
|
*/
|
|
662
720
|
/** Called when the grouping toggle is pressed. */
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
721
|
+
/** True while the lines are shown; collapsed, the viewer keeps only its header. */
|
|
722
|
+
/** Called when the header's collapse toggle is pressed. */
|
|
723
|
+
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, open = true, onToggle, onFilterChange, onPauseToggle, onClear, onAutoScrollToggle } = $$props;
|
|
724
|
+
let timestampPx = remToPx(7.5);
|
|
725
|
+
let groupPx = 144;
|
|
726
|
+
let rowPaddingPx = derived(() => remToPx(.75, textSize.rootFontPx));
|
|
727
|
+
let rowGapPx = derived(() => remToPx(.5, textSize.rootFontPx));
|
|
667
728
|
const PREFIX_MIN_PX = remToPx(PREFIX_WIDTH.minRem);
|
|
668
729
|
const PREFIX_MAX_PX = remToPx(PREFIX_WIDTH.maxRem);
|
|
669
730
|
const PREFIX_DEFAULT_PX = remToPx(PREFIX_WIDTH.defaultRem);
|
|
@@ -861,9 +922,9 @@ function LogViewer($$renderer, $$props) {
|
|
|
861
922
|
/** Message cell: wrapped text or a single long line that scrolls sideways. */
|
|
862
923
|
let messageClass = derived(() => "whitespace-pre");
|
|
863
924
|
/** Left edge of the prefix resize handle, in pixels from the scrolled content edge. */
|
|
864
|
-
let handleLeft = derived(() =>
|
|
925
|
+
let handleLeft = derived(() => rowPaddingPx() + timestampPx + rowGapPx() + (groups.length > 1 ? groupPx + rowGapPx() : 0) + prefixPx);
|
|
865
926
|
/** Prefix column width as a CSS length. */
|
|
866
|
-
let prefixStyle = derived(() => `
|
|
927
|
+
let prefixStyle = derived(() => `width: ${prefixPx}px`);
|
|
867
928
|
/** Rows the user has opened, keyed by row key. */
|
|
868
929
|
let expandedRows = {};
|
|
869
930
|
/** True when a row is open. */
|
|
@@ -886,7 +947,15 @@ function LogViewer($$renderer, $$props) {
|
|
|
886
947
|
function savePrefixWidth() {
|
|
887
948
|
writePref(STORAGE_KEYS.prefixWidth, String(Math.round(prefixPx)));
|
|
888
949
|
}
|
|
889
|
-
$$renderer.push(`<section
|
|
950
|
+
$$renderer.push(`<section${attr_class(`flex min-h-0 min-w-0 flex-col overflow-hidden bg-neutral-950 ${open ? "flex-1" : "flex-none"}`)}><div class="flex min-h-9 flex-none flex-wrap items-center gap-x-3 gap-y-2 border-b border-neutral-800 bg-neutral-900/40 px-3 py-1"><button type="button"${attr("aria-expanded", open)}${attr("title", open ? "Hide the log lines" : "Show the log lines")} data-testid="log-toggle" class="flex items-center gap-1 text-sm font-semibold text-neutral-200 transition-colors hover:text-sky-300">`);
|
|
951
|
+
if (open) {
|
|
952
|
+
$$renderer.push("<!--[0-->");
|
|
953
|
+
Chevron_down($$renderer, { size: "1em" });
|
|
954
|
+
} else {
|
|
955
|
+
$$renderer.push("<!--[-1-->");
|
|
956
|
+
Chevron_right($$renderer, { size: "1em" });
|
|
957
|
+
}
|
|
958
|
+
$$renderer.push(`<!--]--> Log lines</button> <div class="ml-auto flex flex-wrap items-center gap-x-3 gap-y-1">`);
|
|
890
959
|
StatusBadge($$renderer, { status: displayStatus() });
|
|
891
960
|
$$renderer.push(`<!----> `);
|
|
892
961
|
if (archived()) $$renderer.push(`<!--[0--><span data-testid="archive-badge"${attr("title", archiveTitle())} class="rounded-full border border-teal-900 bg-teal-950/60 px-2 py-0.5 text-[0.6875rem] font-medium text-teal-300">local archive</span>`);
|
|
@@ -900,117 +969,187 @@ function LogViewer($$renderer, $$props) {
|
|
|
900
969
|
$$renderer.push(`<!--]--> `);
|
|
901
970
|
if (droppedCount > 0) $$renderer.push(`<!--[0--><span class="text-xs text-amber-300/80" data-testid="dropped-count">${escape_html(formatCount(droppedCount))} dropped</span>`);
|
|
902
971
|
else $$renderer.push("<!--[-1-->");
|
|
903
|
-
$$renderer.push(`<!--]--> <span${attr_class(`rounded-full border px-2 py-0.5 text-[0.6875rem] font-medium ${windowSummary().mode === "historic" ? "border-amber-900 bg-amber-950/40 text-amber-300" : "border-neutral-800 bg-neutral-900 text-neutral-400"}`)}${attr("title", windowSummary().title)} data-testid="window-chip"
|
|
972
|
+
$$renderer.push(`<!--]--> <span${attr_class(`inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[0.6875rem] font-medium ${windowSummary().mode === "historic" ? "border-amber-900 bg-amber-950/40 text-amber-300" : "border-neutral-800 bg-neutral-900 text-neutral-400"}`)}${attr("title", windowSummary().title)} data-testid="window-chip">`);
|
|
973
|
+
if (windowSummary().mode === "live") $$renderer.push(`<!--[0--><span>live</span>`);
|
|
974
|
+
else {
|
|
975
|
+
$$renderer.push("<!--[-1-->");
|
|
976
|
+
if (windowSummary().preset !== null) $$renderer.push(`<!--[0--><span>${escape_html(windowSummary().preset)} ·</span>`);
|
|
977
|
+
else $$renderer.push("<!--[-1-->");
|
|
978
|
+
$$renderer.push(`<!--]--> <span>${escape_html(windowSummary().from)}</span> `);
|
|
979
|
+
Arrow_right($$renderer, { size: "1em" });
|
|
980
|
+
$$renderer.push(`<!----> <span>${escape_html(windowSummary().to)}</span>`);
|
|
981
|
+
}
|
|
982
|
+
$$renderer.push(`<!--]--></span> `);
|
|
904
983
|
if (windowSummary().clamped) $$renderer.push(`<!--[0--><span class="text-[0.6875rem] text-amber-400/80" data-testid="window-clamped">14-day limit</span>`);
|
|
905
984
|
else $$renderer.push("<!--[-1-->");
|
|
906
985
|
$$renderer.push(`<!--]--> `);
|
|
907
986
|
if (windowComplete()) $$renderer.push(`<!--[0--><span class="text-[0.6875rem] text-emerald-400/80" data-testid="window-complete">window complete</span>`);
|
|
908
987
|
else $$renderer.push("<!--[-1-->");
|
|
909
|
-
$$renderer.push(`<!--]
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
}
|
|
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> `);
|
|
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>`);
|
|
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-->");
|
|
928
|
-
$$renderer.push(`<!--]--> <div class="min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950" data-testid="log-scroller">`);
|
|
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>`);
|
|
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>`);
|
|
931
|
-
else {
|
|
932
|
-
$$renderer.push("<!--[-1-->");
|
|
933
|
-
function logLine($$renderer, row, child) {
|
|
934
|
-
const expandable = row.expandable !== null;
|
|
935
|
-
const open = expandable && isExpanded(row.key);
|
|
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> `);
|
|
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>`);
|
|
943
|
-
else $$renderer.push("<!--[-1-->");
|
|
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> `);
|
|
945
|
-
if (expandable) $$renderer.push(`<!--[0--><span class="shrink-0 text-neutral-600" aria-hidden="true">${escape_html(open ? "▾" : "▸")}</span>`);
|
|
988
|
+
$$renderer.push(`<!--]--></div></div> `);
|
|
989
|
+
if (open) {
|
|
990
|
+
$$renderer.push(`<!--[0--><div class="flex flex-none flex-wrap items-center gap-2 border-b border-neutral-800 bg-neutral-900/40 px-3 py-1.5"><div class="flex items-center gap-1" role="group" aria-label="Filter by level"><button type="button"${attr("aria-pressed", levelFilter() === null)} title="Show every level, including lines with no level" data-testid="level-all"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${levelFilter() === null ? "border-sky-700 bg-sky-950/60 text-sky-200" : "border-neutral-800 bg-neutral-900 text-neutral-400 hover:border-neutral-700"}`)}>All</button> <!--[-->`);
|
|
991
|
+
const each_array = ensure_array_like(LEVEL_CHIPS);
|
|
992
|
+
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
|
993
|
+
let chip = each_array[$$index];
|
|
994
|
+
$$renderer.push(`<button type="button"${attr("aria-pressed", levelFilter() === chip.level)}${attr("title", `Show only ${stringify(chip.label)} lines (${stringify(levelCounts()[chip.level] ?? 0)} loaded)`)}${attr("data-testid", `level-${stringify(chip.level)}`)}${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors hover:border-neutral-700 ${stringify(levelFilter() === chip.level ? chip.activeClass : "border-neutral-800 bg-neutral-900 text-neutral-400 hover:border-neutral-700")}`)}>${escape_html(chip.label)} `);
|
|
995
|
+
if ((levelCounts()[chip.level] ?? 0) > 0) $$renderer.push(`<!--[0--><span class="ml-1 opacity-70">${escape_html(formatCount(levelCounts()[chip.level] ?? 0))}</span>`);
|
|
946
996
|
else $$renderer.push("<!--[-1-->");
|
|
947
|
-
$$renderer.push(`<!--]
|
|
948
|
-
if (row.tokens !== null) {
|
|
949
|
-
$$renderer.push(`<!--[0--><!--[-->`);
|
|
950
|
-
const each_array_1 = ensure_array_like(row.tokens);
|
|
951
|
-
for (let tokenIndex = 0, $$length = each_array_1.length; tokenIndex < $$length; tokenIndex++) {
|
|
952
|
-
let token = each_array_1[tokenIndex];
|
|
953
|
-
$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);
|
|
954
|
-
}
|
|
955
|
-
$$renderer.push(`<!--]-->`);
|
|
956
|
-
} else $$renderer.push(`<!--[-1-->${escape_html(row.message)}`);
|
|
957
|
-
$$renderer.push(`<!--]--></span> `);
|
|
958
|
-
if (open && row.expandable !== null) {
|
|
959
|
-
$$renderer.push(`<!--[0--><span class="w-full whitespace-pre text-xs text-neutral-300" data-testid="log-json-expanded"><!--[-->`);
|
|
960
|
-
const each_array_2 = ensure_array_like(tokenizeJson(row.expandable));
|
|
961
|
-
for (let tokenIndex = 0, $$length = each_array_2.length; tokenIndex < $$length; tokenIndex++) {
|
|
962
|
-
let token = each_array_2[tokenIndex];
|
|
963
|
-
$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);
|
|
964
|
-
}
|
|
965
|
-
$$renderer.push(`<!--]--></span>`);
|
|
966
|
-
} else $$renderer.push("<!--[-1-->");
|
|
967
|
-
$$renderer.push(`<!--]--></li>`);
|
|
997
|
+
$$renderer.push(`<!--]--></button>`);
|
|
968
998
|
}
|
|
969
|
-
$$renderer.push(
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
999
|
+
$$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> `);
|
|
1000
|
+
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>`);
|
|
1001
|
+
else $$renderer.push("<!--[-1-->");
|
|
1002
|
+
$$renderer.push(`<!--]--> `);
|
|
1003
|
+
if (selection !== null) {
|
|
1004
|
+
$$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">`);
|
|
1005
|
+
if (selectedEvents().size === 0) $$renderer.push(`<!--[0-->Selected logs are not in the loaded buffer. Zoom into this time range to load them.`);
|
|
1006
|
+
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" : "")}.`);
|
|
1007
|
+
$$renderer.push(`<!--]--> <button type="button" class="ml-auto underline">Clear selection</button></div>`);
|
|
1008
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1009
|
+
$$renderer.push(`<!--]--> <div class="min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950" data-testid="log-scroller">`);
|
|
1010
|
+
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>`);
|
|
1011
|
+
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>`);
|
|
1012
|
+
else {
|
|
1013
|
+
$$renderer.push("<!--[-1-->");
|
|
1014
|
+
function logLine($$renderer, row, child) {
|
|
1015
|
+
const expandable = row.expandable !== null;
|
|
1016
|
+
const open = expandable && isExpanded(row.key);
|
|
1017
|
+
$$renderer.push(`<li${attr_class(`flex flex-wrap items-baseline gap-2 px-3 py-0.5 hover:bg-neutral-900/60 ${listClass()} ${expandable ? "cursor-pointer" : ""}`, void 0, {
|
|
1018
|
+
"bg-sky-950": row.selected,
|
|
1019
|
+
"ring-1": row.selected,
|
|
1020
|
+
"ring-inset": row.selected,
|
|
1021
|
+
"ring-sky-700": row.selected
|
|
1022
|
+
})} 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="shrink-0 truncate text-neutral-500"${attr_style(`width: ${stringify(timestampPx)}px`)}${attr("title", row.timestamp)}>${escape_html(row.time)}</span> `);
|
|
1023
|
+
if (groups.length > 1) $$renderer.push(`<!--[0--><span class="shrink-0 truncate text-teal-400/80"${attr_style(`width: ${stringify(groupPx)}px`)}${attr("title", row.group ?? "")} data-testid="log-group">${escape_html(row.group ?? "")}</span>`);
|
|
981
1024
|
else $$renderer.push("<!--[-1-->");
|
|
982
|
-
$$renderer.push(`<!--]
|
|
983
|
-
if (
|
|
984
|
-
$$renderer.push(
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
1025
|
+
$$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> `);
|
|
1026
|
+
if (expandable) {
|
|
1027
|
+
$$renderer.push("<!--[0-->");
|
|
1028
|
+
if (open) {
|
|
1029
|
+
$$renderer.push("<!--[0-->");
|
|
1030
|
+
Chevron_down($$renderer, {
|
|
1031
|
+
class: "shrink-0 text-neutral-600",
|
|
1032
|
+
size: "1em"
|
|
1033
|
+
});
|
|
1034
|
+
} else {
|
|
1035
|
+
$$renderer.push("<!--[-1-->");
|
|
1036
|
+
Chevron_right($$renderer, {
|
|
1037
|
+
class: "shrink-0 text-neutral-600",
|
|
1038
|
+
size: "1em"
|
|
1039
|
+
});
|
|
989
1040
|
}
|
|
990
|
-
$$renderer.push(`<!--]
|
|
1041
|
+
$$renderer.push(`<!--]-->`);
|
|
1042
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1043
|
+
$$renderer.push(`<!--]--> <span${attr_class(`${messageClass()} ${stringify(row.levelClass)}`)} data-testid="log-message">`);
|
|
1044
|
+
if (row.tokens !== null) {
|
|
1045
|
+
$$renderer.push(`<!--[0--><!--[-->`);
|
|
1046
|
+
const each_array_1 = ensure_array_like(row.tokens);
|
|
1047
|
+
for (let tokenIndex = 0, $$length = each_array_1.length; tokenIndex < $$length; tokenIndex++) {
|
|
1048
|
+
let token = each_array_1[tokenIndex];
|
|
1049
|
+
$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);
|
|
1050
|
+
}
|
|
1051
|
+
$$renderer.push(`<!--]-->`);
|
|
1052
|
+
} else $$renderer.push(`<!--[-1-->${escape_html(row.message)}`);
|
|
1053
|
+
$$renderer.push(`<!--]--></span> `);
|
|
1054
|
+
if (open && row.expandable !== null) {
|
|
1055
|
+
$$renderer.push(`<!--[0--><span class="w-full whitespace-pre text-xs text-neutral-300" data-testid="log-json-expanded"><!--[-->`);
|
|
1056
|
+
const each_array_2 = ensure_array_like(tokenizeJson(row.expandable));
|
|
1057
|
+
for (let tokenIndex = 0, $$length = each_array_2.length; tokenIndex < $$length; tokenIndex++) {
|
|
1058
|
+
let token = each_array_2[tokenIndex];
|
|
1059
|
+
$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);
|
|
1060
|
+
}
|
|
1061
|
+
$$renderer.push(`<!--]--></span>`);
|
|
991
1062
|
} else $$renderer.push("<!--[-1-->");
|
|
992
1063
|
$$renderer.push(`<!--]--></li>`);
|
|
993
|
-
} else {
|
|
994
|
-
$$renderer.push("<!--[-1-->");
|
|
995
|
-
logLine($$renderer, row, false);
|
|
996
1064
|
}
|
|
997
|
-
$$renderer.push(
|
|
1065
|
+
$$renderer.push(`<div${attr_class(`relative min-h-full ${listClass()}`)} data-testid="log-canvas"${attr_style("", { "min-width": void 0 })}><ol class="font-mono text-xs leading-5" data-testid="log-lines"><!--[-->`);
|
|
1066
|
+
const each_array_3 = ensure_array_like(displayRows());
|
|
1067
|
+
for (let $$index_4 = 0, $$length = each_array_3.length; $$index_4 < $$length; $$index_4++) {
|
|
1068
|
+
let row = each_array_3[$$index_4];
|
|
1069
|
+
if (row.kind === "request") {
|
|
1070
|
+
$$renderer.push("<!--[0-->");
|
|
1071
|
+
const open = isExpanded(row.key);
|
|
1072
|
+
$$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="shrink-0 truncate text-neutral-500"${attr_style(`width: ${stringify(timestampPx)}px`)}${attr("title", row.timestamp)}>${escape_html(row.time)}</span> `);
|
|
1073
|
+
if (groups.length > 1) $$renderer.push(`<!--[0--><span class="shrink-0 truncate text-teal-400/80"${attr_style(`width: ${stringify(groupPx)}px`)}${attr("title", row.group ?? "")} data-testid="log-group">${escape_html(row.group ?? "")}</span>`);
|
|
1074
|
+
else $$renderer.push("<!--[-1-->");
|
|
1075
|
+
$$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> `);
|
|
1076
|
+
if (open) {
|
|
1077
|
+
$$renderer.push("<!--[0-->");
|
|
1078
|
+
Chevron_down($$renderer, {
|
|
1079
|
+
class: "shrink-0 text-neutral-600",
|
|
1080
|
+
size: "1em"
|
|
1081
|
+
});
|
|
1082
|
+
} else {
|
|
1083
|
+
$$renderer.push("<!--[-1-->");
|
|
1084
|
+
Chevron_right($$renderer, {
|
|
1085
|
+
class: "shrink-0 text-neutral-600",
|
|
1086
|
+
size: "1em"
|
|
1087
|
+
});
|
|
1088
|
+
}
|
|
1089
|
+
$$renderer.push(`<!--]--> <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> `);
|
|
1090
|
+
if (!open) $$renderer.push(`<!--[0--><span class="min-w-0 truncate text-neutral-500" data-testid="request-group-preview">${escape_html(row.preview)}</span>`);
|
|
1091
|
+
else $$renderer.push("<!--[-1-->");
|
|
1092
|
+
$$renderer.push(`<!--]--></button> `);
|
|
1093
|
+
if (open) {
|
|
1094
|
+
$$renderer.push(`<!--[0--><ul class="contents"><!--[-->`);
|
|
1095
|
+
const each_array_4 = ensure_array_like(row.children);
|
|
1096
|
+
for (let $$index_3 = 0, $$length = each_array_4.length; $$index_3 < $$length; $$index_3++) {
|
|
1097
|
+
let child = each_array_4[$$index_3];
|
|
1098
|
+
logLine($$renderer, child, true);
|
|
1099
|
+
}
|
|
1100
|
+
$$renderer.push(`<!--]--></ul>`);
|
|
1101
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1102
|
+
$$renderer.push(`<!--]--></li>`);
|
|
1103
|
+
} else {
|
|
1104
|
+
$$renderer.push("<!--[-1-->");
|
|
1105
|
+
logLine($$renderer, row, false);
|
|
1106
|
+
}
|
|
1107
|
+
$$renderer.push(`<!--]-->`);
|
|
1108
|
+
}
|
|
1109
|
+
$$renderer.push(`<!--]--></ol> `);
|
|
1110
|
+
ColumnResizer($$renderer, {
|
|
1111
|
+
label: "Resize timestamp column",
|
|
1112
|
+
width: timestampPx,
|
|
1113
|
+
min: 64,
|
|
1114
|
+
max: 320,
|
|
1115
|
+
testId: "timestamp-resizer",
|
|
1116
|
+
onChange: (next) => timestampPx = next,
|
|
1117
|
+
onCommit: (next) => writePref(STORAGE_KEYS.timestampWidth, String(next)),
|
|
1118
|
+
class: "absolute inset-y-0 w-2 border-r border-neutral-800/40",
|
|
1119
|
+
style: `left: ${stringify(rowPaddingPx() + timestampPx - 4)}px`
|
|
1120
|
+
});
|
|
1121
|
+
$$renderer.push(`<!----> `);
|
|
1122
|
+
if (groups.length > 1) {
|
|
1123
|
+
$$renderer.push("<!--[0-->");
|
|
1124
|
+
ColumnResizer($$renderer, {
|
|
1125
|
+
label: "Resize log group column",
|
|
1126
|
+
width: groupPx,
|
|
1127
|
+
min: 64,
|
|
1128
|
+
max: 640,
|
|
1129
|
+
testId: "group-resizer",
|
|
1130
|
+
onChange: (next) => groupPx = next,
|
|
1131
|
+
onCommit: (next) => writePref(STORAGE_KEYS.groupWidth, String(next)),
|
|
1132
|
+
class: "absolute inset-y-0 w-2 border-r border-neutral-800/40",
|
|
1133
|
+
style: `left: ${stringify(rowPaddingPx() + timestampPx + rowGapPx() + groupPx - 4)}px`
|
|
1134
|
+
});
|
|
1135
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1136
|
+
$$renderer.push(`<!--]--> `);
|
|
1137
|
+
ColumnResizer($$renderer, {
|
|
1138
|
+
label: "Resize stream column",
|
|
1139
|
+
width: prefixPx,
|
|
1140
|
+
min: PREFIX_MIN_PX,
|
|
1141
|
+
max: PREFIX_MAX_PX,
|
|
1142
|
+
testId: "prefix-resizer",
|
|
1143
|
+
onChange: (next) => prefixPx = next,
|
|
1144
|
+
onCommit: () => savePrefixWidth(),
|
|
1145
|
+
class: "absolute inset-y-0 w-2 border-r border-neutral-800/40",
|
|
1146
|
+
style: `left: ${stringify(handleLeft() - 4)}px`
|
|
1147
|
+
});
|
|
1148
|
+
$$renderer.push(`<!----></div>`);
|
|
998
1149
|
}
|
|
999
|
-
$$renderer.push(`<!--]--></
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
width: prefixPx,
|
|
1003
|
-
min: PREFIX_MIN_PX,
|
|
1004
|
-
max: PREFIX_MAX_PX,
|
|
1005
|
-
testId: "prefix-resizer",
|
|
1006
|
-
onChange: (next) => prefixPx = next,
|
|
1007
|
-
onCommit: () => savePrefixWidth(),
|
|
1008
|
-
class: "absolute inset-y-0 w-2",
|
|
1009
|
-
style: `left: ${stringify(handleLeft() - 4)}px`
|
|
1010
|
-
});
|
|
1011
|
-
$$renderer.push(`<!----></div>`);
|
|
1012
|
-
}
|
|
1013
|
-
$$renderer.push(`<!--]--></div></section>`);
|
|
1150
|
+
$$renderer.push(`<!--]--></div>`);
|
|
1151
|
+
} else $$renderer.push("<!--[-1-->");
|
|
1152
|
+
$$renderer.push(`<!--]--></section>`);
|
|
1014
1153
|
});
|
|
1015
1154
|
}
|
|
1016
1155
|
//#endregion
|
|
@@ -1352,13 +1491,17 @@ function _page($$renderer, $$props) {
|
|
|
1352
1491
|
* A stored preference wins, so a reader who wants every line keeps every line.
|
|
1353
1492
|
*/
|
|
1354
1493
|
let groupRequests = true;
|
|
1494
|
+
/** True while the group-list sidebar is open; collapsing gives the logs the full width. */
|
|
1495
|
+
let sidebarOpen = true;
|
|
1496
|
+
/** True while the log lines are shown; collapsing keeps only the viewer's header. */
|
|
1497
|
+
let logOpen = true;
|
|
1355
1498
|
/** Bucketed counts behind the chart. */
|
|
1356
1499
|
let chartSelection = null;
|
|
1357
1500
|
let seriesBucketMs = 6e4;
|
|
1358
1501
|
let seriesPoints = [];
|
|
1359
1502
|
/** True while the archive counts are being fetched. */
|
|
1360
1503
|
let seriesLoading = false;
|
|
1361
|
-
let chartMetric = "
|
|
1504
|
+
let chartMetric = "duration";
|
|
1362
1505
|
let seriesRequest = 0;
|
|
1363
1506
|
/** True only when the local archive reports that it can be read. */
|
|
1364
1507
|
let archiveAvailable = derived(() => archiveStatus?.available === true);
|
|
@@ -1371,7 +1514,7 @@ function _page($$renderer, $$props) {
|
|
|
1371
1514
|
/** Largest sidebar width allowed: 44vw, but never below the minimum. */
|
|
1372
1515
|
let sidebarMaxPx = derived(() => remToPx(SIDEBAR_WIDTH.defaultRem));
|
|
1373
1516
|
let sidebarMinPx = remToPx(SIDEBAR_WIDTH.minRem);
|
|
1374
|
-
let sidebarStyle = derived(() =>
|
|
1517
|
+
let sidebarStyle = derived(() => `--sidebar-width: min(${sidebarPx}px, ${SIDEBAR_WIDTH.maxVw}vw)`);
|
|
1375
1518
|
/** Persists the sidebar width; failures are ignored (private mode, quota). */
|
|
1376
1519
|
function saveSidebarWidth() {
|
|
1377
1520
|
try {
|
|
@@ -1409,6 +1552,7 @@ function _page($$renderer, $$props) {
|
|
|
1409
1552
|
if (target !== region || requestedSource !== source) return;
|
|
1410
1553
|
if (response.endpoint !== null) endpoint = response.endpoint;
|
|
1411
1554
|
groups = response.groups;
|
|
1555
|
+
puppy.wag();
|
|
1412
1556
|
} catch (error) {
|
|
1413
1557
|
if (target !== region || requestedSource !== source) return;
|
|
1414
1558
|
groups = [];
|
|
@@ -1484,6 +1628,14 @@ function _page($$renderer, $$props) {
|
|
|
1484
1628
|
localStorage?.setItem(STORAGE_KEYS.groupRequests, groupRequests ? "true" : "false");
|
|
1485
1629
|
} catch {}
|
|
1486
1630
|
}
|
|
1631
|
+
/** Collapses or expands the log lines, and remembers the choice. */
|
|
1632
|
+
function toggleLog() {
|
|
1633
|
+
logOpen = !logOpen;
|
|
1634
|
+
puppy.wag();
|
|
1635
|
+
try {
|
|
1636
|
+
localStorage?.setItem(STORAGE_KEYS.logOpen, logOpen ? "true" : "false");
|
|
1637
|
+
} catch {}
|
|
1638
|
+
}
|
|
1487
1639
|
/** Switches region: stops the stream, clears the list and reloads the groups. */
|
|
1488
1640
|
function changeRegion(next) {
|
|
1489
1641
|
if (next === "" || next === region) return;
|
|
@@ -1530,6 +1682,7 @@ function _page($$renderer, $$props) {
|
|
|
1530
1682
|
* Keeps the chart in step with the view: a new window, selection, source, level
|
|
1531
1683
|
* or a new batch of lines all re-load the counts.
|
|
1532
1684
|
*/
|
|
1685
|
+
/** Every batch of log lines that arrives gives the puppy (when shown) a wag. */
|
|
1533
1686
|
/**
|
|
1534
1687
|
* Reacts to `archive-unavailable` from the stream (the file was locked or removed after boot) by
|
|
1535
1688
|
* re-checking the archive, so the toggle hides itself instead of offering a source that fails.
|
|
@@ -1613,6 +1766,7 @@ function _page($$renderer, $$props) {
|
|
|
1613
1766
|
if (request === seriesRequest) {
|
|
1614
1767
|
seriesPoints = series.points;
|
|
1615
1768
|
seriesBucketMs = series.bucketMs;
|
|
1769
|
+
puppy.wag();
|
|
1616
1770
|
}
|
|
1617
1771
|
} catch {
|
|
1618
1772
|
if (request === seriesRequest) seriesPoints = [];
|
|
@@ -1620,7 +1774,16 @@ function _page($$renderer, $$props) {
|
|
|
1620
1774
|
if (request === seriesRequest) seriesLoading = false;
|
|
1621
1775
|
}
|
|
1622
1776
|
}
|
|
1623
|
-
$$renderer.push(`<div class="flex flex-wrap items-center gap-x-3 gap-y-2"
|
|
1777
|
+
$$renderer.push(`<div class="flex flex-wrap items-center gap-x-3 gap-y-2">`);
|
|
1778
|
+
RangeControls($$renderer, {
|
|
1779
|
+
mode,
|
|
1780
|
+
range,
|
|
1781
|
+
from: windowFrom,
|
|
1782
|
+
to: windowTo,
|
|
1783
|
+
loading: rangeLoading,
|
|
1784
|
+
disabled: selectedGroup() === null,
|
|
1785
|
+
liveDisabled: source === "archive"});
|
|
1786
|
+
$$renderer.push(`<!----> <div class="ml-auto flex flex-wrap items-center gap-x-3 gap-y-2"><span class="text-[0.6875rem] font-semibold uppercase tracking-wider text-neutral-500">Watching</span> <span class="max-w-[22rem] truncate rounded-md border border-neutral-800 bg-neutral-900 px-2 py-1 font-mono text-xs text-neutral-200">${escape_html(selectedGroup() ?? "no group selected")}</span> <span class="text-xs text-neutral-500">in</span> <span class="font-mono text-xs text-neutral-300">${escape_html(region === "" ? "resolving region…" : region)}</span> `);
|
|
1624
1787
|
if (source === "archive") {
|
|
1625
1788
|
$$renderer.push("<!--[0-->");
|
|
1626
1789
|
EndpointBadge($$renderer, {
|
|
@@ -1637,18 +1800,15 @@ function _page($$renderer, $$props) {
|
|
|
1637
1800
|
}
|
|
1638
1801
|
$$renderer.push(`<!--]--> `);
|
|
1639
1802
|
$$renderer.push("<!--[-1-->");
|
|
1640
|
-
$$renderer.push(`<!--]--></div> `);
|
|
1803
|
+
$$renderer.push(`<!--]--></div></div> `);
|
|
1641
1804
|
$$renderer.push("<!--[-1-->");
|
|
1642
|
-
$$renderer.push(`<!--]--> `);
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
disabled: selectedGroup() === null,
|
|
1650
|
-
liveDisabled: source === "archive"});
|
|
1651
|
-
$$renderer.push(`<!----> <div class="flex min-h-0 min-w-0 flex-1 flex-col gap-3 lg:flex-row"><div class="flex min-h-0 w-full flex-col gap-3 rounded-lg border border-neutral-800 bg-neutral-950/60 p-3 lg:shrink-0"${attr_style(sidebarStyle())} data-testid="sidebar">`);
|
|
1805
|
+
$$renderer.push(`<!--]--> <div class="flex min-h-0 min-w-0 flex-1 flex-col border border-neutral-800 lg:flex-row"><div id="log-group-sidebar"${attr_class(`relative flex min-h-0 w-full flex-col border-b border-neutral-800 bg-neutral-950/60 lg:shrink-0 lg:border-b-0 lg:border-r `, "svelte-1uha8ag")}${attr_style(sidebarStyle())} data-testid="sidebar"><div class="flex min-h-9 flex-none items-center gap-x-3 border-b border-neutral-800 bg-neutral-900/40 px-3 py-1.5"><button type="button"${attr("aria-expanded", sidebarOpen)} aria-controls="log-group-sidebar"${attr("title", "Hide the group list")} data-testid="sidebar-collapse" class="flex items-center gap-1 text-sm font-semibold text-neutral-200 transition-colors hover:text-sky-300"><span class="hidden lg:inline-flex">`);
|
|
1806
|
+
Chevron_left($$renderer, { size: "1em" });
|
|
1807
|
+
$$renderer.push(`<!----></span> <span class="lg:hidden">`);
|
|
1808
|
+
$$renderer.push("<!--[0-->");
|
|
1809
|
+
Chevron_up($$renderer, { size: "1em" });
|
|
1810
|
+
$$renderer.push(`<!--]--></span> ${escape_html(source === "archive" ? "Archived groups" : "Log groups")}</button></div> `);
|
|
1811
|
+
$$renderer.push(`<!--[0--><div class="flex min-h-0 flex-1 flex-col gap-3 p-3" data-testid="sidebar-body">`);
|
|
1652
1812
|
SourceControls($$renderer, {
|
|
1653
1813
|
source,
|
|
1654
1814
|
archiveAvailable: archiveAvailable(),
|
|
@@ -1676,9 +1836,12 @@ function _page($$renderer, $$props) {
|
|
|
1676
1836
|
testId: "sidebar-resizer",
|
|
1677
1837
|
onChange: (next) => sidebarPx = next,
|
|
1678
1838
|
onCommit: () => saveSidebarWidth(),
|
|
1679
|
-
class: "hidden lg:block
|
|
1839
|
+
class: "absolute inset-y-0 -right-1 z-10 hidden w-2 lg:block"
|
|
1680
1840
|
});
|
|
1681
|
-
$$renderer.push(
|
|
1841
|
+
$$renderer.push(`<!---->`);
|
|
1842
|
+
$$renderer.push(`<!--]--></div> `);
|
|
1843
|
+
$$renderer.push("<!--[-1-->");
|
|
1844
|
+
$$renderer.push(`<!--]--> <div class="flex min-h-0 min-w-0 flex-1 flex-col">`);
|
|
1682
1845
|
EventScatterPanel($$renderer, {
|
|
1683
1846
|
points: seriesPoints,
|
|
1684
1847
|
from: chartWindow().from,
|
|
@@ -1686,6 +1849,7 @@ function _page($$renderer, $$props) {
|
|
|
1686
1849
|
bucketMs: seriesBucketMs,
|
|
1687
1850
|
groups: selectedGroups,
|
|
1688
1851
|
byRequest: groupRequests,
|
|
1852
|
+
fill: !logOpen,
|
|
1689
1853
|
metric: chartMetric,
|
|
1690
1854
|
onMetricChange: (metric) => {
|
|
1691
1855
|
chartSelection = null;
|
|
@@ -1704,7 +1868,7 @@ function _page($$renderer, $$props) {
|
|
|
1704
1868
|
onBrush: applyBrush
|
|
1705
1869
|
});
|
|
1706
1870
|
$$renderer.push(`<!----> `);
|
|
1707
|
-
if (windowFrom !== null && windowTo !== null && mode === "historic") $$renderer.push(`<!--[0--><div class="flex flex-wrap items-center gap-2 text-[0.6875rem] text-neutral-500"><span data-testid="brush-window">zoomed to ${escape_html(new Date(windowFrom).toLocaleTimeString())} – ${escape_html(new Date(windowTo).toLocaleTimeString())}</span> <button type="button" data-testid="brush-clear" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-0.5 font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Reset zoom</button></div>`);
|
|
1871
|
+
if (windowFrom !== null && windowTo !== null && mode === "historic") $$renderer.push(`<!--[0--><div class="flex flex-wrap items-center gap-2 border-b border-neutral-800 bg-neutral-950/60 px-3 py-1.5 text-[0.6875rem] text-neutral-500"><span data-testid="brush-window">zoomed to ${escape_html(new Date(windowFrom).toLocaleTimeString())} – ${escape_html(new Date(windowTo).toLocaleTimeString())}</span> <button type="button" data-testid="brush-clear" class="rounded-md border border-neutral-800 bg-neutral-900 px-2 py-0.5 font-medium text-neutral-300 transition-colors hover:border-neutral-700 hover:text-neutral-100">Reset zoom</button></div>`);
|
|
1708
1872
|
else $$renderer.push("<!--[-1-->");
|
|
1709
1873
|
$$renderer.push(`<!--]--> `);
|
|
1710
1874
|
LogViewer($$renderer, {
|
|
@@ -1724,6 +1888,8 @@ function _page($$renderer, $$props) {
|
|
|
1724
1888
|
onLevelChange: (next) => levelFilter = next,
|
|
1725
1889
|
groupRequests,
|
|
1726
1890
|
onGroupToggle: toggleGroupRequests,
|
|
1891
|
+
open: logOpen,
|
|
1892
|
+
onToggle: toggleLog,
|
|
1727
1893
|
filter,
|
|
1728
1894
|
paused: stream.paused,
|
|
1729
1895
|
autoScroll,
|
|
@@ -1746,4 +1912,4 @@ function _page($$renderer, $$props) {
|
|
|
1746
1912
|
}
|
|
1747
1913
|
|
|
1748
1914
|
export { _page as default };
|
|
1749
|
-
//# sourceMappingURL=_page.svelte.js-
|
|
1915
|
+
//# sourceMappingURL=_page.svelte.js-CVlL2UsO.js.map
|