watch-tail 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +97 -350
  2. package/build/client/_app/immutable/chunks/{C_aXFBl3.js → 1cmfrS0o.js} +1 -1
  3. package/build/client/_app/immutable/chunks/1cmfrS0o.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/1cmfrS0o.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{DU0OQtdJ.js → 8x_7TBuS.js} +1 -1
  6. package/build/client/_app/immutable/chunks/8x_7TBuS.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/8x_7TBuS.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{D76YLq-2.js → AAWh0-tL.js} +1 -1
  9. package/build/client/_app/immutable/chunks/AAWh0-tL.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/AAWh0-tL.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{Amq8zxdJ.js → BKpsnTLG.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BKpsnTLG.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BKpsnTLG.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{B5q6rkQ-.js → BNDRPiSt.js} +1 -1
  15. package/build/client/_app/immutable/chunks/BNDRPiSt.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BNDRPiSt.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{C1lycbEF.js → BWDKMHXq.js} +1 -1
  18. package/build/client/_app/immutable/chunks/BWDKMHXq.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/BWDKMHXq.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{BZFYtRPj.js → CBRk0OGa.js} +1 -1
  21. package/build/client/_app/immutable/chunks/CBRk0OGa.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/CBRk0OGa.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{CT_NYh_-.js → CG0TPRkn.js} +1 -1
  24. package/build/client/_app/immutable/chunks/CG0TPRkn.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/CG0TPRkn.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/CGReuhGk.js +1 -0
  27. package/build/client/_app/immutable/chunks/CGReuhGk.js.br +1 -0
  28. package/build/client/_app/immutable/chunks/CGReuhGk.js.gz +0 -0
  29. package/build/client/_app/immutable/chunks/{CyncJW0D.js → CIDBs8t6.js} +1 -1
  30. package/build/client/_app/immutable/chunks/CIDBs8t6.js.br +0 -0
  31. package/build/client/_app/immutable/chunks/CIDBs8t6.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/{BDlvDAqe.js → CfPyeeq3.js} +1 -1
  33. package/build/client/_app/immutable/chunks/CfPyeeq3.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/CfPyeeq3.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/{CEU4ihsz.js → CpeJ2iPd.js} +1 -1
  36. package/build/client/_app/immutable/chunks/CpeJ2iPd.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/CpeJ2iPd.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/{CZIk93qi.js → D0IrjYE5.js} +1 -1
  39. package/build/client/_app/immutable/chunks/D0IrjYE5.js.br +0 -0
  40. package/build/client/_app/immutable/chunks/D0IrjYE5.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/{B43Eeyih.js → D1Hr4tKw.js} +1 -1
  42. package/build/client/_app/immutable/chunks/D1Hr4tKw.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/D1Hr4tKw.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/{BsH4MNzX.js → D6rwn6Ed.js} +1 -1
  45. package/build/client/_app/immutable/chunks/D6rwn6Ed.js.br +1 -0
  46. package/build/client/_app/immutable/chunks/D6rwn6Ed.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/{B3p3umIY.js → DQCjzVyz.js} +1 -1
  48. package/build/client/_app/immutable/chunks/DQCjzVyz.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/DQCjzVyz.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/{BAynhd7i.js → DWm-CGbg.js} +1 -1
  51. package/build/client/_app/immutable/chunks/DWm-CGbg.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/DWm-CGbg.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/{BJpWBbAS.js → DYDQbI6D.js} +1 -1
  54. package/build/client/_app/immutable/chunks/DYDQbI6D.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/DYDQbI6D.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/{CG6rRxUy.js → Dc9It0QB.js} +1 -1
  57. package/build/client/_app/immutable/chunks/Dc9It0QB.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/Dc9It0QB.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/{BOT2hFMn.js → DkQY3T0m.js} +1 -1
  60. package/build/client/_app/immutable/chunks/DkQY3T0m.js.br +0 -0
  61. package/build/client/_app/immutable/chunks/DkQY3T0m.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/{ByhwhtiG.js → DqJI6J5U.js} +1 -1
  63. package/build/client/_app/immutable/chunks/DqJI6J5U.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/DqJI6J5U.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{zHL7lw4G.js → DtV-MjyX.js} +1 -1
  66. package/build/client/_app/immutable/chunks/DtV-MjyX.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DtV-MjyX.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/{wx-wtMGx.js → DznDQzx1.js} +1 -1
  69. package/build/client/_app/immutable/chunks/DznDQzx1.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DznDQzx1.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/{BGmgUZMc.js → F4LqKrLs.js} +5 -5
  72. package/build/client/_app/immutable/chunks/F4LqKrLs.js.br +0 -0
  73. package/build/client/_app/immutable/chunks/F4LqKrLs.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/{jO4fmY1N.js → KA1QvXmu.js} +1 -1
  75. package/build/client/_app/immutable/chunks/KA1QvXmu.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/KA1QvXmu.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/{D4sC5v3c.js → KsLFdNDs.js} +1 -1
  78. package/build/client/_app/immutable/chunks/KsLFdNDs.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/KsLFdNDs.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/{D8H_ivbb.js → OoMmWNOu.js} +1 -1
  81. package/build/client/_app/immutable/chunks/OoMmWNOu.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/OoMmWNOu.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/{Yk6ZJZnu.js → UsO0MS14.js} +1 -1
  84. package/build/client/_app/immutable/chunks/UsO0MS14.js.br +0 -0
  85. package/build/client/_app/immutable/chunks/UsO0MS14.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/{snfmbqby.js → sf5kQ3yV.js} +1 -1
  87. package/build/client/_app/immutable/chunks/sf5kQ3yV.js.br +0 -0
  88. package/build/client/_app/immutable/chunks/sf5kQ3yV.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/{CM5sQDq_.js → w7c5E2ms.js} +1 -1
  90. package/build/client/_app/immutable/chunks/w7c5E2ms.js.br +0 -0
  91. package/build/client/_app/immutable/chunks/w7c5E2ms.js.gz +0 -0
  92. package/build/client/_app/immutable/entry/{app.DFSifnlU.js → app.FQLd-NC-.js} +2 -2
  93. package/build/client/_app/immutable/entry/app.FQLd-NC-.js.br +0 -0
  94. package/build/client/_app/immutable/entry/app.FQLd-NC-.js.gz +0 -0
  95. package/build/client/_app/immutable/entry/start.DqW_lChD.js +1 -0
  96. package/build/client/_app/immutable/entry/start.DqW_lChD.js.br +1 -0
  97. package/build/client/_app/immutable/entry/start.DqW_lChD.js.gz +0 -0
  98. package/build/client/_app/immutable/nodes/{1.Djdw1GzA.js → 1.5EZfoLCg.js} +1 -1
  99. package/build/client/_app/immutable/nodes/1.5EZfoLCg.js.br +0 -0
  100. package/build/client/_app/immutable/nodes/1.5EZfoLCg.js.gz +0 -0
  101. package/build/client/_app/immutable/nodes/{2.CjvaJDQJ.js → 2.CbcDv2oO.js} +2 -2
  102. package/build/client/_app/immutable/nodes/2.CbcDv2oO.js.br +0 -0
  103. package/build/client/_app/immutable/nodes/2.CbcDv2oO.js.gz +0 -0
  104. package/build/client/_app/version.json +1 -1
  105. package/build/client/_app/version.json.br +0 -0
  106. package/build/client/_app/version.json.gz +0 -0
  107. package/build/handler.js +4 -4
  108. package/build/index.js +4 -4
  109. package/build/server/chunks/chunks/{internal2.js-BPo5dcDi.js → internal2.js-627EG4am.js} +2 -2
  110. package/build/server/chunks/chunks/{internal2.js-BPo5dcDi.js.map → internal2.js-627EG4am.js.map} +1 -1
  111. package/build/server/chunks/chunks/{state.js-DgkwfYFo.js → state.js-DbqJPX0Y.js} +2 -2
  112. package/build/server/chunks/chunks/{state.js-DgkwfYFo.js.map → state.js-DbqJPX0Y.js.map} +1 -1
  113. package/build/server/chunks/entries/endpoints/api/stream/{_server.ts.js-BWRHawY8.js → _server.ts.js-B9_-4ssJ.js} +36 -1
  114. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-B9_-4ssJ.js.map +1 -0
  115. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CsCL5PMW.js → error.svelte.js-B8dLO9gT.js} +3 -3
  116. package/build/server/chunks/entries/fallbacks/{error.svelte.js-CsCL5PMW.js.map → error.svelte.js-B8dLO9gT.js.map} +1 -1
  117. package/build/server/chunks/entries/pages/{_page.svelte.js-qqtU0apo.js → _page.svelte.js-BwuzE25P.js} +3 -3
  118. package/build/server/chunks/entries/pages/{_page.svelte.js-qqtU0apo.js.map → _page.svelte.js-BwuzE25P.js.map} +1 -1
  119. package/build/server/chunks/{handler-DlfTB05m.js → handler-hlKcUyVP.js} +3 -3
  120. package/build/server/chunks/{handler-DlfTB05m.js.map → handler-hlKcUyVP.js.map} +1 -1
  121. package/build/server/chunks/{index.js-BMrd9hfO.js → index.js-BfPWKsz6.js} +2 -2
  122. package/build/server/chunks/{index.js-BMrd9hfO.js.map → index.js-BfPWKsz6.js.map} +1 -1
  123. package/build/server/chunks/{manifest.js-D1kCuVe5.js → manifest.js-uuijI5lm.js} +5 -5
  124. package/build/server/chunks/{manifest.js-D1kCuVe5.js.map → manifest.js-uuijI5lm.js.map} +1 -1
  125. package/build/server/chunks/nodes/{1.js-B5FPLYnf.js → 1.js-bi9PXX_2.js} +3 -3
  126. package/build/server/chunks/nodes/{1.js-B5FPLYnf.js.map → 1.js-bi9PXX_2.js.map} +1 -1
  127. package/build/server/chunks/nodes/{2.js-BEuxzw6b.js → 2.js-3MYCPEqM.js} +3 -3
  128. package/build/server/chunks/nodes/{2.js-BEuxzw6b.js.map → 2.js-3MYCPEqM.js.map} +1 -1
  129. package/dist/cli/server.js +10 -0
  130. package/package.json +3 -2
  131. package/build/client/_app/immutable/chunks/Amq8zxdJ.js.br +0 -0
  132. package/build/client/_app/immutable/chunks/Amq8zxdJ.js.gz +0 -0
  133. package/build/client/_app/immutable/chunks/B3p3umIY.js.br +0 -0
  134. package/build/client/_app/immutable/chunks/B3p3umIY.js.gz +0 -0
  135. package/build/client/_app/immutable/chunks/B43Eeyih.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/B43Eeyih.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/B5q6rkQ-.js.br +0 -0
  138. package/build/client/_app/immutable/chunks/B5q6rkQ-.js.gz +0 -0
  139. package/build/client/_app/immutable/chunks/BAynhd7i.js.br +0 -0
  140. package/build/client/_app/immutable/chunks/BAynhd7i.js.gz +0 -0
  141. package/build/client/_app/immutable/chunks/BDlvDAqe.js.br +0 -0
  142. package/build/client/_app/immutable/chunks/BDlvDAqe.js.gz +0 -0
  143. package/build/client/_app/immutable/chunks/BGmgUZMc.js.br +0 -0
  144. package/build/client/_app/immutable/chunks/BGmgUZMc.js.gz +0 -0
  145. package/build/client/_app/immutable/chunks/BJpWBbAS.js.br +0 -0
  146. package/build/client/_app/immutable/chunks/BJpWBbAS.js.gz +0 -0
  147. package/build/client/_app/immutable/chunks/BOT2hFMn.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/BOT2hFMn.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/BZFYtRPj.js.br +0 -0
  150. package/build/client/_app/immutable/chunks/BZFYtRPj.js.gz +0 -0
  151. package/build/client/_app/immutable/chunks/BsH4MNzX.js.br +0 -0
  152. package/build/client/_app/immutable/chunks/BsH4MNzX.js.gz +0 -0
  153. package/build/client/_app/immutable/chunks/ByhwhtiG.js.br +0 -0
  154. package/build/client/_app/immutable/chunks/ByhwhtiG.js.gz +0 -0
  155. package/build/client/_app/immutable/chunks/C1lycbEF.js.br +0 -0
  156. package/build/client/_app/immutable/chunks/C1lycbEF.js.gz +0 -0
  157. package/build/client/_app/immutable/chunks/CEU4ihsz.js.br +0 -0
  158. package/build/client/_app/immutable/chunks/CEU4ihsz.js.gz +0 -0
  159. package/build/client/_app/immutable/chunks/CG6rRxUy.js.br +0 -0
  160. package/build/client/_app/immutable/chunks/CG6rRxUy.js.gz +0 -0
  161. package/build/client/_app/immutable/chunks/CM5sQDq_.js.br +0 -0
  162. package/build/client/_app/immutable/chunks/CM5sQDq_.js.gz +0 -0
  163. package/build/client/_app/immutable/chunks/CT_NYh_-.js.br +0 -0
  164. package/build/client/_app/immutable/chunks/CT_NYh_-.js.gz +0 -0
  165. package/build/client/_app/immutable/chunks/CZIk93qi.js.br +0 -0
  166. package/build/client/_app/immutable/chunks/CZIk93qi.js.gz +0 -0
  167. package/build/client/_app/immutable/chunks/C_aXFBl3.js.br +0 -0
  168. package/build/client/_app/immutable/chunks/C_aXFBl3.js.gz +0 -0
  169. package/build/client/_app/immutable/chunks/CqWPu3PG.js +0 -1
  170. package/build/client/_app/immutable/chunks/CqWPu3PG.js.br +0 -1
  171. package/build/client/_app/immutable/chunks/CqWPu3PG.js.gz +0 -0
  172. package/build/client/_app/immutable/chunks/CyncJW0D.js.br +0 -0
  173. package/build/client/_app/immutable/chunks/CyncJW0D.js.gz +0 -0
  174. package/build/client/_app/immutable/chunks/D4sC5v3c.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/D4sC5v3c.js.gz +0 -0
  176. package/build/client/_app/immutable/chunks/D76YLq-2.js.br +0 -0
  177. package/build/client/_app/immutable/chunks/D76YLq-2.js.gz +0 -0
  178. package/build/client/_app/immutable/chunks/D8H_ivbb.js.br +0 -0
  179. package/build/client/_app/immutable/chunks/D8H_ivbb.js.gz +0 -0
  180. package/build/client/_app/immutable/chunks/DU0OQtdJ.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/DU0OQtdJ.js.gz +0 -0
  182. package/build/client/_app/immutable/chunks/Yk6ZJZnu.js.br +0 -0
  183. package/build/client/_app/immutable/chunks/Yk6ZJZnu.js.gz +0 -0
  184. package/build/client/_app/immutable/chunks/jO4fmY1N.js.br +0 -0
  185. package/build/client/_app/immutable/chunks/jO4fmY1N.js.gz +0 -0
  186. package/build/client/_app/immutable/chunks/snfmbqby.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/snfmbqby.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/wx-wtMGx.js.br +0 -0
  189. package/build/client/_app/immutable/chunks/wx-wtMGx.js.gz +0 -0
  190. package/build/client/_app/immutable/chunks/zHL7lw4G.js.br +0 -0
  191. package/build/client/_app/immutable/chunks/zHL7lw4G.js.gz +0 -0
  192. package/build/client/_app/immutable/entry/app.DFSifnlU.js.br +0 -0
  193. package/build/client/_app/immutable/entry/app.DFSifnlU.js.gz +0 -0
  194. package/build/client/_app/immutable/entry/start.2H5s3Lol.js +0 -1
  195. package/build/client/_app/immutable/entry/start.2H5s3Lol.js.br +0 -1
  196. package/build/client/_app/immutable/entry/start.2H5s3Lol.js.gz +0 -0
  197. package/build/client/_app/immutable/nodes/1.Djdw1GzA.js.br +0 -0
  198. package/build/client/_app/immutable/nodes/1.Djdw1GzA.js.gz +0 -0
  199. package/build/client/_app/immutable/nodes/2.CjvaJDQJ.js.br +0 -0
  200. package/build/client/_app/immutable/nodes/2.CjvaJDQJ.js.gz +0 -0
  201. package/build/server/chunks/entries/endpoints/api/stream/_server.ts.js-BWRHawY8.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"_page.svelte.js-qqtU0apo.js","sources":["../../../../../.svelte-kit/output/server/entries/pages/_page.svelte.js"],"sourcesContent":["import \"../../chunks/index-server.js\";\nimport { D as escape_html, T as clsx, a as bind_props, f as stringify, n as attr_style, o as derived, s as ensure_array_like, t as attr_class, w as attr } from \"../../chunks/server.js\";\nimport { c as eventKey, f as levelColorClass, g as tokenizeJson, h as formatLogMessage, i as detectLevel, l as filterByLevel, r as LogStore, s as effectiveLevel, u as filterEvents } from \"../../chunks/log-buffer.js\";\nimport { t as REGION_CODES } from \"../../chunks/regions.js\";\nimport { n as PRESET_LABELS, o as presetLabel, r as describeWindow, s as toDateTimeLocal, t as HISTORIC_PRESETS } from \"../../chunks/time-range.js\";\nimport { n as replaceState, t as page } from \"../../chunks/state.js\";\nimport { a as isMeaningfulBrush, i as groupByLevel, n as SERIES_LEVEL_COLOR, o as requestRows, r as bucketEvents, t as LEVEL_LABELS } from \"../../chunks/series-buckets.js\";\n//#region src/lib/format.ts\n/**\n* Formatting helpers for the watch-stream UI. Every function here is pure so it can be unit\n* tested without a DOM.\n*/\n/** Placeholder shown when a timestamp is missing or not a number. */\nvar EMPTY_TIME = \"--:--:--.---\";\n/** Left-pads a non-negative integer with zeros. */\nfunction pad(value, size = 2) {\n\treturn String(Math.trunc(Math.abs(value))).padStart(size, \"0\");\n}\n/**\n* Formats an epoch-millisecond timestamp as `HH:MM:SS.mmm` in UTC.\n* UTC keeps rendering stable no matter where the browser runs.\n*/\nfunction formatTime(timestamp) {\n\tif (typeof timestamp !== \"number\" || !Number.isFinite(timestamp)) return EMPTY_TIME;\n\tconst date = new Date(timestamp);\n\tif (Number.isNaN(date.getTime())) return EMPTY_TIME;\n\treturn `${`${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`}.${pad(date.getUTCMilliseconds(), 3)}`;\n}\n/** Formats an epoch-millisecond timestamp as an ISO 8601 string, for tooltips. */\nfunction formatTimestamp(timestamp) {\n\tif (typeof timestamp !== \"number\" || !Number.isFinite(timestamp)) return \"—\";\n\tconst date = new Date(timestamp);\n\tif (Number.isNaN(date.getTime())) return \"—\";\n\treturn date.toISOString();\n}\n/** Formats a number with at most one decimal, dropping a trailing `.0`. */\nfunction trimZero(value) {\n\tconst fixed = value >= 100 ? value.toFixed(0) : value.toFixed(1);\n\treturn fixed.endsWith(\".0\") ? fixed.slice(0, -2) : fixed;\n}\n/**\n* Formats a duration as `250ms`, `1.2s`, `2m 5s` or `1h 2m`, for a request's span.\n* Sub-second spans keep a millisecond value, because that is what a slow request\n* is measured in; longer spans stop at the first two units a reader needs.\n*/\nfunction formatSpan(ms) {\n\tif (typeof ms !== \"number\" || !Number.isFinite(ms) || ms < 0) return \"—\";\n\tconst total = Math.round(ms);\n\tif (total < 1e3) return `${total}ms`;\n\tconst seconds = total / 1e3;\n\tif (seconds < 60) return `${trimZero(seconds)}s`;\n\tconst wholeSeconds = Math.floor(seconds);\n\tconst minutes = Math.floor(wholeSeconds / 60);\n\tconst restSeconds = wholeSeconds % 60;\n\tif (minutes < 60) return restSeconds === 0 ? `${minutes}m` : `${minutes}m ${restSeconds}s`;\n\tconst hours = Math.floor(minutes / 60);\n\tconst restMinutes = minutes % 60;\n\treturn restMinutes === 0 ? `${hours}h` : `${hours}h ${restMinutes}m`;\n}\n/**\n* Formats a byte count as `B`, `KiB`, `MiB` or `GiB`, with at most one decimal for scaled units.\n* Returns {@link EMPTY_VALUE} for a missing or negative value.\n*/\nfunction formatBytes(bytes) {\n\tif (typeof bytes !== \"number\" || !Number.isFinite(bytes) || bytes < 0) return \"—\";\n\tif (bytes < 1024) return `${Math.trunc(bytes)} B`;\n\tconst units = [\n\t\t\"KiB\",\n\t\t\"MiB\",\n\t\t\"GiB\",\n\t\t\"TiB\"\n\t];\n\tlet value = bytes / 1024;\n\tlet unit = units[0];\n\tfor (let index = 1; index < units.length && value >= 1024; index += 1) {\n\t\tvalue /= 1024;\n\t\tunit = units[index];\n\t}\n\treturn `${trimZero(value)} ${unit}`;\n}\n/** Formats an integer count with thousands separators, for example `1,234`. */\nfunction formatCount(value) {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.trunc(value);\n\treturn (rounded < 0 ? \"-\" : \"\") + String(Math.abs(rounded)).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n/**\n* Names the emulator behind a CloudWatch Logs endpoint override.\n* Returns `null` when the endpoint is empty, which means real AWS.\n*/\nfunction emulatorLabel(endpoint) {\n\tconst trimmed = typeof endpoint === \"string\" ? endpoint.trim() : \"\";\n\tif (trimmed === \"\") return null;\n\tconst lower = trimmed.toLowerCase();\n\tif (lower.includes(\"floci\")) return \"floci\";\n\tif (lower.includes(\"localstack\")) return \"localstack\";\n\tif (endpointPort(trimmed) === \"4566\") return \"floci\";\n\treturn \"local emulator\";\n}\n/** Reads the port of an endpoint URL, or `null` when it cannot be parsed. */\nfunction endpointPort(endpoint) {\n\treturn parseEndpoint(endpoint)?.port || null;\n}\n/** Parses an endpoint URL, returning `null` when it is not a URL. */\nfunction parseEndpoint(endpoint) {\n\ttry {\n\t\treturn new URL(endpoint);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Builds the header badge text for an endpoint, for example `floci http://localhost:4566`.\n* Returns `null` when the app talks to real AWS.\n*/\nfunction describeEndpoint(endpoint) {\n\tconst trimmed = typeof endpoint === \"string\" ? endpoint.trim() : \"\";\n\tif (trimmed === \"\") return null;\n\tconst label = emulatorLabel(trimmed);\n\tif (label === null) return null;\n\treturn (parseEndpoint(trimmed)?.hostname.toLowerCase() ?? trimmed.toLowerCase()).startsWith(label) ? trimmed : `${label} ${trimmed}`;\n}\n//#endregion\n//#region src/lib/components/EndpointBadge.svelte\nfunction EndpointBadge($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Resolved CloudWatch Logs endpoint, or `null` when talking to real AWS. */\n\t\t/** Credential mode from `GET /api/health`, or `null` when it is unknown. */\n\t\tlet { endpoint = null, credentials = null } = $$props;\n\t\t/** Badge text, for example `floci http://localhost:4566`; `null` hides the badge. */\n\t\tlet label = derived(() => describeEndpoint(endpoint));\n\t\t/** True when the server fell back to the emulator's throwaway credentials. */\n\t\tlet emulatorDefault = derived(() => credentials === \"emulator-default\");\n\t\tlet hint = derived(() => emulatorDefault() ? \"Local emulator endpoint - using floci's throwaway credentials (no ambient AWS credentials found)\" : \"Local emulator endpoint\");\n\t\tif (label() !== null) {\n\t\t\t$$renderer.push(`<!--[0--><span class=\"inline-flex items-center gap-1.5\"${attr(\"title\", hint())}><span data-testid=\"endpoint-badge\"${attr(\"title\", hint())} class=\"rounded-full border border-violet-900 bg-violet-950/60 px-2.5 py-1 text-xs font-medium text-violet-300\">${escape_html(label())}</span> `);\n\t\t\tif (emulatorDefault()) $$renderer.push(`<!--[0--><span data-testid=\"credentials-hint\" class=\"text-[0.6875rem] text-neutral-500\">dev creds</span>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}\n//#endregion\n//#region src/lib/resize.ts\n/**\n* Pure helpers for the drag-resizable columns in the UI.\n*\n* The components own the pointer events and the persistence; everything that can\n* be reasoned about without a DOM lives here so it can be unit tested.\n*/\n/** `localStorage` keys, prefixed so they are easy to spot in a browser. */\nvar STORAGE_KEYS = {\n\tsidebarWidth: \"watch-stream:sidebar-width\",\n\tprefixWidth: \"watch-stream:prefix-width\",\n\twrap: \"watch-stream:wrap\",\n\tjsonView: \"watch-stream:json-view\",\n\tchartOpen: \"watch-stream:chart-open\",\n\tgroupRequests: \"watch-stream:group-requests\"\n};\n/** Default width of the group-list pane, in rem (matches the original layout). */\nvar SIDEBAR_WIDTH = {\n\tdefaultRem: 22,\n\tminRem: 16,\n\tmaxVw: 44\n};\n/** Width constraints for the log line prefix (timestamp + stream name). */\nvar PREFIX_WIDTH = {\n\tdefaultRem: 14,\n\tminRem: 4,\n\tmaxRem: 40\n};\n/** Converts a CSS pixel width to `rem` for use in a Tailwind `style` attribute. */\nfunction pxToRem(px, rootFontSize = 16) {\n\tconst rem = px / rootFontSize;\n\treturn `${Number.isInteger(rem) ? rem : Number(rem.toFixed(3))}rem`;\n}\n/** Parses a `rem` value into CSS pixels. */\nfunction remToPx(rem, rootFontSize = 16) {\n\treturn rem * rootFontSize;\n}\n//#endregion\n//#region src/lib/components/EventScatterPanel.svelte\nfunction EventScatterPanel($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/**\n\t\t* The chart panel above the log view: a header that is always cheap to render\n\t\t* (title, totals, per-level legend) and the chart below it, loaded on demand.\n\t\t*\n\t\t* The charting library is imported dynamically and only once the panel is open,\n\t\t* so layerchart never delays the first paint of the log view. The header stays\n\t\t* available while the chart chunk is still loading, and the whole panel\n\t\t* collapses to that header so a user who does not want the chart can reclaim\n\t\t* the space - the choice is remembered.\n\t\t*/\n\t\t/** Props the lazily loaded chart takes. */\n\t\t/** The chart component, as its module exports it. */\n\t\t/** Fetches the chart module; injectable so tests need no chunk fetch. */\n\t\t/**\n\t\t* The real loader: a dynamic import, which is what keeps layerchart out of the\n\t\t* initial bundle. It only runs in the browser, and only once the panel is open.\n\t\t*/\n\t\tconst loadChartModule = () => import(\"../../chunks/EventScatter.js\");\n\t\t/** Bucketed counts for the window. */\n\t\t/** Inclusive start of the window, epoch ms. */\n\t\t/** Inclusive end of the window, epoch ms. */\n\t\t/** Bucket width in ms, shown in the summary. */\n\t\t/** Log groups the points cover, for the summary. */\n\t\t/** True when one mark stands for one request rather than one line. */\n\t\t/** True while the counts are being fetched. */\n\t\t/** Called with the brushed range when the drag ends, or `null` on clear. */\n\t\t/** Chart height in px. */\n\t\t/** Start open, which is also what the first visit uses. */\n\t\t/** Chart module loader; defaults to the dynamic import. */\n\t\tlet { points = [], from = 0, to = 0, bucketMs = 0, groups = [], loading = false, byRequest = true, onBrush, height = 200, open = true, loadChart = loadChartModule } = $$props;\n\t\tlet expanded = derived(() => open);\n\t\t/**\n\t\t* Bumped by {@link reset} to remount the chart. Remounting is how the brush is\n\t\t* cleared without holding an imperative handle on a lazily loaded component.\n\t\t*/\n\t\tlet chartKey = 0;\n\t\t/** Totals and labels per level, in severity order. */\n\t\tlet levelGroups = derived(() => groupByLevel(points));\n\t\t/** Total events drawn. */\n\t\tlet totalEvents = derived(() => levelGroups().reduce((sum, entry) => sum + entry.events, 0));\n\t\t/** Buckets drawn. */\n\t\tlet bucketCount = derived(() => new Set(points.map((point) => point.t)).size);\n\t\t/** True when there is something to draw. */\n\t\tlet hasPoints = derived(() => points.length > 0);\n\t\t/** What one mark stands for, which is what the totals count. */\n\t\tlet unit = derived(() => byRequest ? \"requests\" : \"events\");\n\t\t/** Clears the brush, for the host's Reset zoom control. */\n\t\tfunction reset() {\n\t\t\tchartKey += 1;\n\t\t\tonBrush?.(null);\n\t\t}\n\t\t$$renderer.push(`<section class=\"flex min-w-0 flex-col gap-1 rounded-lg border border-neutral-800 bg-neutral-950/60 p-2\" data-testid=\"event-scatter\" aria-label=\"Events over time\"><div class=\"flex flex-wrap items-center gap-x-3 gap-y-1 px-1 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 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-0.5 font-semibold uppercase tracking-wider text-neutral-400 transition-colors hover:border-neutral-700 hover:text-neutral-200\"><span aria-hidden=\"true\">${escape_html(expanded() ? \"▾\" : \"▸\")}</span> Events over time</button> <span class=\"text-neutral-400\" data-testid=\"scatter-summary\">${escape_html(formatCount(totalEvents()))}\n\t\t\t${escape_html(unit())} in ${escape_html(formatCount(bucketCount()))} buckets</span> `);\n\t\tif (groups.length > 1) $$renderer.push(`<!--[0--><span class=\"text-neutral-500\" data-testid=\"scatter-groups\">across ${escape_html(groups.length)} groups</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <!--[-->`);\n\t\tconst each_array = ensure_array_like(levelGroups());\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet entry = each_array[$$index];\n\t\t\t$$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>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (loading && expanded()) $$renderer.push(`<!--[0--><span class=\"text-amber-300\" data-testid=\"scatter-loading\">counting…</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (expanded()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<!--[-1--><span class=\"ml-auto text-neutral-500\" data-testid=\"scatter-hint\">drag to zoom · click to clear</span>`);\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> `);\n\t\tif (expanded()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tif (hasPoints()) {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\t$$renderer.push(`<!--[-1--><div class=\"w-full animate-pulse rounded bg-neutral-900/60\"${attr_style(`height: ${stringify(height)}px`)}></div>`);\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t} else if (!loading) $$renderer.push(`<!--[2--><p class=\"px-1 py-6 text-xs text-neutral-500\" data-testid=\"scatter-empty\">No events in this window yet.</p>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></section>`);\n\t\tbind_props($$props, { reset });\n\t});\n}\n//#endregion\n//#region src/lib/components/ColumnResizer.svelte\nfunction ColumnResizer($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Accessible name, for example \"Resize group list\". */\n\t\t/** Current width in CSS pixels. */\n\t\t/** Lower bound in CSS pixels. */\n\t\t/** Upper bound in CSS pixels. */\n\t\t/** `data-testid` value. */\n\t\t/** Called on every pointer move and arrow key with the clamped width. */\n\t\t/** Called when a drag ends or an arrow key is handled, for persistence. */\n\t\t/** Extra classes, used for positioning. */\n\t\t/** Extra inline style, for example `left: 120px`. */\n\t\tlet { label, width, min, max, testId, onChange, onCommit, class: className = \"\", style = \"\" } = $$props;\n\t\t$$renderer.push(`<div role=\"separator\" aria-orientation=\"vertical\"${attr(\"aria-label\", label)}${attr(\"aria-valuemin\", min)}${attr(\"aria-valuemax\", max)}${attr(\"aria-valuenow\", Math.round(width))} tabindex=\"0\"${attr(\"title\", `${stringify(label)} (drag or use the arrow keys)`)}${attr(\"data-testid\", testId)}${attr_class(`cursor-col-resize touch-none bg-transparent hover:bg-sky-500/30 focus:bg-sky-500/50 focus:outline-none ${stringify(className)}`)}${attr_style(style)}></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/RangeControls.svelte\nfunction RangeControls($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Preset name when a preset is active, otherwise an empty string. */\n\t\t/** Custom bounds as epoch ms, or `null` when a preset/live window is active. */\n\t\t/** Active mode, owned by the page. */\n\t\t/** Active preset, owned by the page. */\n\t\t/** Active custom bounds as epoch ms, owned by the page. */\n\t\t/** True when no group is selected, so there is nothing to scope. */\n\t\t/** True while a historic window is being fetched. */\n\t\t/** True when the source cannot follow live events, such as the local archive. */\n\t\t/** Called when the user switches mode or applies a range. */\n\t\tlet { mode = \"live\", range = \"15m\", from = null, to = null, disabled = false, loading = false, liveDisabled = false, onApply } = $$props;\n\t\t/** Label shown on the custom chip. */\n\t\tlet customLabel = derived(() => mode === \"historic\" && range === \"\" && from !== null && to !== null ? `${toDateTimeLocal(from).replace(\"T\", \" \")} → ${toDateTimeLocal(to).replace(\"T\", \" \")}` : \"Custom…\");\n\t\t$$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> `);\n\t\tif (mode === \"historic\") {\n\t\t\t$$renderer.push(`<!--[0--><div class=\"flex flex-wrap items-center gap-1\" role=\"group\" aria-label=\"Historic range\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(HISTORIC_PRESETS);\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet preset = each_array[$$index];\n\t\t\t\t$$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>`);\n\t\t\t}\n\t\t\t$$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\"}`)}>${escape_html(customLabel())}</button></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (loading) $$renderer.push(`<!--[0--><span class=\"text-xs text-amber-300\" data-testid=\"range-loading\">loading window…</span>`);\n\t\telse if (mode === \"historic\" && range !== \"\") $$renderer.push(`<!--[1--><span class=\"text-xs text-neutral-500\">last ${escape_html(presetLabel(range))}</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/groups-client.ts\n/**\n* Browser-side fetch helpers for the watch-stream JSON API (`/api/health`, `/api/regions`,\n* `/api/log-groups`, `/api/archive`). Every helper throws {@link ApiError} on a non-2xx response so\n* the UI can show the API `error` message instead of an opaque failure.\n*/\n/** Region list used by the picker before (or instead of) `/api/regions`. */\nvar DEFAULT_REGIONS = REGION_CODES;\n/** Error carrying the parsed `ApiErrorBody` returned by the API. */\nvar ApiError = class extends Error {\n\t/** HTTP status, or `0` when the request never reached the server. */\n\tstatus;\n\t/** Optional machine-readable code from the API. */\n\tcode;\n\t/** Optional extra detail from the API. */\n\tdetails;\n\tconstructor(message, options = {}) {\n\t\tsuper(message, { cause: options.cause });\n\t\tthis.name = \"ApiError\";\n\t\tthis.status = options.status ?? 0;\n\t\tthis.code = options.code;\n\t\tthis.details = options.details;\n\t}\n};\n/** Reads a string field from an unknown JSON value. */\nfunction readField(value, key) {\n\tif (typeof value !== \"object\" || value === null) return void 0;\n\tconst field = value[key];\n\treturn typeof field === \"string\" ? field : void 0;\n}\n/** Extracts the API `error` message, falling back when the body has none. */\nfunction apiErrorMessage(value, fallback = \"Unexpected API error\") {\n\treturn readField(value, \"error\") ?? fallback;\n}\n/** Builds the `/api/log-groups` URL, including only the parameters that are set. */\nfunction buildLogGroupsUrl(query) {\n\tconst search = new URLSearchParams();\n\tif (query.region) search.set(\"region\", query.region);\n\tif (query.source) search.set(\"source\", query.source);\n\tif (query.prefix) search.set(\"prefix\", query.prefix);\n\tif (typeof query.limit === \"number\" && Number.isFinite(query.limit)) search.set(\"limit\", String(query.limit));\n\tconst suffix = search.toString();\n\treturn suffix === \"\" ? \"/api/log-groups\" : `/api/log-groups?${suffix}`;\n}\n/** Builds the `/api/series` URL for a query. */\nfunction buildSeriesUrl(query) {\n\tconst search = new URLSearchParams();\n\tif (query.region) search.set(\"region\", query.region);\n\tsearch.set(\"source\", \"archive\");\n\tconst groups = (query.groups ?? []).filter((name) => name.length > 0);\n\tif (groups.length > 0) search.set(\"groups\", groups.join(\",\"));\n\tif (typeof query.from === \"number\" && Number.isFinite(query.from)) search.set(\"from\", String(Math.round(query.from)));\n\tif (typeof query.to === \"number\" && Number.isFinite(query.to)) search.set(\"to\", String(Math.round(query.to)));\n\tconst levels = (query.levels ?? []).filter((level) => level.length > 0);\n\tif (levels.length > 0) search.set(\"level\", levels.join(\",\"));\n\tif (query.by === \"request\" || query.by === \"event\") search.set(\"by\", query.by);\n\tif (typeof query.bucketMs === \"number\" && Number.isFinite(query.bucketMs) && query.bucketMs > 0) search.set(\"bucket\", String(Math.round(query.bucketMs)));\n\treturn `/api/series?${search.toString()}`;\n}\n/** `GET /api/series` - bucketed event counts for the chart. */\nfunction fetchSeries(query) {\n\treturn getJson(buildSeriesUrl(query), query);\n}\n/** True for an abort, which is a normal way to cancel a request. */\nfunction isAbort(error) {\n\treturn error instanceof Error && error.name === \"AbortError\";\n}\n/** Performs a JSON request and maps failures onto {@link ApiError}. */\nasync function getJson(url, options) {\n\tconst fetchImpl = options.fetchImpl ?? fetch;\n\tlet response;\n\ttry {\n\t\tresponse = await fetchImpl(url, {\n\t\t\theaders: { accept: \"application/json\" },\n\t\t\tsignal: options.signal\n\t\t});\n\t} catch (cause) {\n\t\tif (isAbort(cause)) throw cause;\n\t\tthrow new ApiError(`Could not reach ${url}.`, { cause });\n\t}\n\tconst text = await response.text();\n\tlet body = null;\n\tif (text.trim() !== \"\") try {\n\t\tbody = JSON.parse(text);\n\t} catch {\n\t\tbody = null;\n\t}\n\tif (!response.ok) throw new ApiError(apiErrorMessage(body, `Request to ${url} failed with ${response.status}.`), {\n\t\tstatus: response.status,\n\t\tcode: readField(body, \"code\"),\n\t\tdetails: readField(body, \"details\")\n\t});\n\treturn body;\n}\n/**\n* `GET /api/log-groups` - log groups for a region, from CloudWatch or the local archive.\n*\n* The archive list needs no credentials and never reaches AWS.\n*/\nfunction fetchLogGroups(query) {\n\treturn getJson(buildLogGroupsUrl(query), query);\n}\n/** Message shown when a region has no log groups at all. */\nfunction noGroupsMessage(region) {\n\treturn `No log groups found in ${region}. Start floci and run \\`pnpm seed\\` to create sample groups.`;\n}\n/** Plain statement of what the archive source shows, used next to the toggle. */\nvar ARCHIVE_NOTE = \"Locally archived events - read from the local DuckDB file, no CloudWatch credentials, historic windows only.\";\n/** Tooltip for the archive indicator: what it shows and which file backs it. */\nfunction describeArchive(path) {\n\tconst trimmed = typeof path === \"string\" ? path.trim() : \"\";\n\tconst head = \"Locally archived events instead of live CloudWatch data\";\n\treturn trimmed === \"\" ? head : `${head} (${trimmed})`;\n}\n/** Message shown when the archive holds nothing for a region. */\nfunction noArchivedGroupsMessage(region) {\n\treturn `Nothing archived for ${region === \"\" ? \"this region\" : region} yet - stream a group from CloudWatch once and it will appear here.`;\n}\n/** Drops a trailing period so an appended sentence does not double up. */\nfunction trimSentence(text) {\n\treturn text.trim().replace(/\\.+$/, \"\");\n}\n/** Adds region context to a failed group list request. */\nfunction describeGroupsError(region, error) {\n\tif (error instanceof ApiError) {\n\t\tconst details = error.details ? ` ${error.details}` : \"\";\n\t\treturn `Could not list log groups in ${region}: ${trimSentence(error.message)}.${details}`;\n\t}\n\treturn `Could not reach the watch-stream API for ${region}. ${error instanceof Error && error.message !== \"\" ? error.message : String(error)}`;\n}\n/** Adds group and region context to a stream error payload. */\nfunction describeStreamError(region, group, message) {\n\treturn `${message} (${group === null || group === \"\" ? region : `${group} in ${region}`})`;\n}\n//#endregion\n//#region src/lib/components/LogGroupList.svelte\nfunction LogGroupList($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Groups returned for the active region. */\n\t\t/** Where the list came from; the archive list shows local counts instead of sizes. */\n\t\t/** Active region, used for context in the empty state. */\n\t\t/** Names of the groups currently being tailed; empty when none are selected. */\n\t\t/** API error message, shown instead of the list. */\n\t\t/** Row cap; defaults to {@link MAX_GROUP_ROWS}. */\n\t\t/** Called with the group name when a row is clicked, replacing the selection. */\n\t\t/** Called with the group name when its checkbox is toggled in or out of the selection. */\n\t\t/** Called when the refresh button is clicked. */\n\t\tlet { groups = [], source = \"cloudwatch\", region = \"\", selected = [], loading = false, error = null, maxRows = 500, onSelect, onToggle, onRefresh } = $$props;\n\t\tlet search = \"\";\n\t\t/** True when the list holds archived groups rather than live CloudWatch ones. */\n\t\tlet archived = derived(() => source === \"archive\");\n\t\t/** Badge text for a group: how many events the archive holds for it. */\n\t\tfunction archivedCount(group) {\n\t\t\treturn group.archivedEvents === void 0 ? null : `${formatCount(group.archivedEvents)} archived`;\n\t\t}\n\t\t/** `oldest -> newest` span of a group's archived events, or `null` when unknown. */\n\t\tfunction archivedSpan(group) {\n\t\t\tif (group.archivedOldest === void 0 || group.archivedNewest === void 0) return null;\n\t\t\treturn `${formatTimestamp(group.archivedOldest)} \\u2192 ${formatTimestamp(group.archivedNewest)}`;\n\t\t}\n\t\t/** Groups matching the search box, case-insensitively. */\n\t\tlet filtered = derived(() => groups.filter((group) => group.name.toLowerCase().includes(search.trim().toLowerCase())));\n\t\t/** Rows actually rendered, capped at `maxRows`. */\n\t\tlet visible = derived(() => filtered().slice(0, maxRows));\n\t\tlet truncated = derived(() => filtered().length > visible().length);\n\t\tlet query = derived(() => search.trim());\n\t\t/**\n\t\t* Selection as a flat list of names. `selected` is typed as a list, but callers that have not\n\t\t* migrated yet may still pass a single name (or `null`), so those are normalised here.\n\t\t*/\n\t\tfunction selectionList(value) {\n\t\t\tif (value === null || value === void 0) return [];\n\t\t\treturn Array.isArray(value) ? value : [value];\n\t\t}\n\t\tlet activeSelection = derived(() => selectionList(selected));\n\t\t/** True when `name` is part of the current (possibly multi-group) selection. */\n\t\tfunction isSelected(name) {\n\t\t\treturn activeSelection().includes(name);\n\t\t}\n\t\t/** Row styling, highlighting every group that is currently being tailed. */\n\t\tfunction rowTone(name) {\n\t\t\treturn 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\";\n\t\t}\n\t\t$$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\"><h2 class=\"text-sm font-semibold text-neutral-200\">${escape_html(archived() ? \"Archived groups\" : \"Log groups\")}</h2> <span class=\"text-xs text-neutral-500\" data-testid=\"group-count\">${escape_html(formatCount(filtered().length))} of ${escape_html(formatCount(groups.length))}</span> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (archived()) $$renderer.push(`<!--[0--><span 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\" data-testid=\"group-source-badge\">local</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> <button type=\"button\"${attr(\"disabled\", loading, true)} 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 disabled:cursor-not-allowed disabled:opacity-50\">${escape_html(loading ? \"Refreshing…\" : \"Refresh\")}</button></div> <div class=\"flex flex-col gap-1.5\"><label class=\"sr-only\" for=\"group-search\">Search log groups</label> <input id=\"group-search\" type=\"search\" placeholder=\"Search log groups\"${attr(\"value\", search)} class=\"w-full rounded-md border border-neutral-800 bg-neutral-900 px-2.5 py-1.5 text-sm text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600\"/></div> `);\n\t\tif (error !== null && error !== \"\") $$renderer.push(`<!--[0--><p role=\"alert\" data-testid=\"group-error\" class=\"rounded-md border border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300\">${escape_html(error)}</p>`);\n\t\telse if (loading && groups.length === 0) {\n\t\t\t$$renderer.push(`<!--[1--><div class=\"flex flex-col gap-2\" data-testid=\"group-loading\" aria-busy=\"true\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(Array.from({ length: 5 }));\n\t\t\tfor (let index = 0, $$length = each_array.length; index < $$length; index++) {\n\t\t\t\teach_array[index];\n\t\t\t\t$$renderer.push(`<div class=\"h-5 animate-pulse rounded bg-neutral-800/80\"></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <p class=\"text-xs text-neutral-500\">Loading log groups…</p></div>`);\n\t\t} 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>`);\n\t\telse 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>`);\n\t\telse {\n\t\t\t$$renderer.push(`<!--[-1--><ul class=\"flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto pr-1\"><!--[-->`);\n\t\t\tconst each_array_1 = ensure_array_like(visible());\n\t\t\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\tlet group = each_array_1[$$index_1];\n\t\t\t\t$$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=\"truncate font-mono\">${escape_html(group.name)}</span> `);\n\t\t\t\tif (archived()) {\n\t\t\t\t\t$$renderer.push(`<!--[0--><span class=\"flex shrink-0 items-center gap-1.5\">`);\n\t\t\t\t\tif (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>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\tif (archivedSpan(group) !== null) $$renderer.push(`<!--[0--><span class=\"hidden text-[0.6875rem] text-neutral-500 xl:inline\" data-testid=\"group-archived-span\">${escape_html(archivedSpan(group))}</span>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--></span>`);\n\t\t\t\t} 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>`);\n\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--></button></li>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></ul> `);\n\t\t\tif (truncated()) $$renderer.push(`<!--[0--><p class=\"text-[0.6875rem] text-neutral-500\" data-testid=\"group-truncated\">Showing first ${escape_html(formatCount(maxRows))} of ${escape_html(formatCount(filtered().length))} groups.</p>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></section>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/StatusBadge.svelte\nfunction StatusBadge($$renderer, $$props) {\n\t/** Connection status reported by the log stream. */\n\tlet { status } = $$props;\n\t/** Pill text per status. */\n\tconst LABELS = {\n\t\tidle: \"idle\",\n\t\tconnecting: \"connecting\",\n\t\tlive: \"live\",\n\t\treconnecting: \"reconnecting\",\n\t\terror: \"error\",\n\t\tended: \"ended\"\n\t};\n\t/** Pill colours per status. */\n\tconst TONES = {\n\t\tidle: \"border-neutral-700 bg-neutral-800/60 text-neutral-400\",\n\t\tconnecting: \"border-sky-900 bg-sky-950/70 text-sky-300\",\n\t\tlive: \"border-emerald-900 bg-emerald-950/70 text-emerald-300\",\n\t\treconnecting: \"border-amber-900 bg-amber-950/70 text-amber-300\",\n\t\terror: \"border-red-900 bg-red-950/70 text-red-300\",\n\t\tended: \"border-neutral-700 bg-neutral-800/60 text-neutral-400\"\n\t};\n\t/** Dot colours per status. */\n\tconst DOTS = {\n\t\tidle: \"bg-neutral-500\",\n\t\tconnecting: \"bg-sky-400 animate-pulse\",\n\t\tlive: \"bg-emerald-400\",\n\t\treconnecting: \"bg-amber-400 animate-pulse\",\n\t\terror: \"bg-red-400\",\n\t\tended: \"bg-neutral-500\"\n\t};\n\tlet tone = derived(() => TONES[status]);\n\tlet dot = derived(() => DOTS[status]);\n\tlet text = derived(() => LABELS[status]);\n\t$$renderer.push(`<span data-testid=\"status-badge\"${attr(\"data-status\", status)}${attr_class(`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium ${stringify(tone())}`)}><span${attr_class(`size-1.5 rounded-full ${stringify(dot())}`)} aria-hidden=\"true\"></span> ${escape_html(text())}</span>`);\n}\n//#endregion\n//#region src/lib/components/LogViewer.svelte\nfunction LogViewer($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Lines held by the client buffer, oldest first. */\n\t\t/** Connection status. */\n\t\t/** Last stream error, or `null`. */\n\t\t/** Active region, used for error and empty-state context. */\n\t\t/** Group being tailed, or `null` when nothing is selected. */\n\t\t/** Client-side text filter, controlled by the parent. */\n\t\t/** True while the visible buffer is frozen. */\n\t\t/** True when new lines scroll the view. */\n\t\t/** Lines held back while paused. */\n\t\t/** Lines dropped by the cap. */\n\t\t/** Total events received since the last reset. */\n\t\t/** Active tail mode, used for the window chip. */\n\t\t/** Last `ready` payload, which describes the window the server is scanning. */\n\t\t/** Reason the server ended the stream, for example `window-complete`. */\n\t\t/** Database file behind the local archive, shown in the archive tooltip. */\n\t\t/** Log groups in the view; more than one adds a group column. */\n\t\t/**\n\t\t* Active level filter. Leave it undefined to let the viewer own the filter;\n\t\t* pass a value (including `null`) to control it from outside, which is how\n\t\t* the chart above stays in step with the chips.\n\t\t*/\n\t\t/** Called when the level filter changes while it is controlled. */\n\t\t/**\n\t\t* Group lines that share a request id into one row, opened on demand. On by\n\t\t* default, and owned by the page so the chart counts the same requests.\n\t\t*/\n\t\t/** Called when the grouping toggle is pressed. */\n\t\tlet { lines = [], status = \"idle\", error = null, region = \"\", group = null, filter = \"\", paused = false, autoScroll = true, pendingCount = 0, droppedCount = 0, receivedCount = 0, mode = \"live\", ready = null, endReason = null, archivePath = null, groups = [], level = void 0, onLevelChange, groupRequests = true, onGroupToggle, onFilterChange, onPauseToggle, onClear, onAutoScrollToggle } = $$props;\n\t\tconst TIMESTAMP_COLUMN_PX = remToPx(7.5);\n\t\tconst ROW_PADDING_PX = remToPx(.75);\n\t\tconst ROW_GAP_PX = remToPx(.5);\n\t\tconst PREFIX_MIN_PX = remToPx(PREFIX_WIDTH.minRem);\n\t\tconst PREFIX_MAX_PX = remToPx(PREFIX_WIDTH.maxRem);\n\t\tconst PREFIX_DEFAULT_PX = remToPx(PREFIX_WIDTH.defaultRem);\n\t\t/** Persists a preference; failures are ignored (private mode, quota). */\n\t\tfunction writePref(key, value) {\n\t\t\ttry {\n\t\t\t\tif (typeof localStorage === \"undefined\") return;\n\t\t\t\tlocalStorage.setItem(key, value);\n\t\t\t} catch {}\n\t\t}\n\t\t/** View preferences, restored in `onMount` so SSR output stays deterministic. */\n\t\tlet wrapLines = false;\n\t\tlet jsonView = true;\n\t\tlet prefixPx = PREFIX_DEFAULT_PX;\n\t\t/** One rendered row, pre-formatted so the template stays declarative. */\n\t\t/**\n\t\t* Payload found inside the raw line, used when pretty-printing is off and\n\t\t* the row is expanded. `null` when the line carries no JSON.\n\t\t*/\n\t\t/** Log group the line came from, when the payload carries one. */\n\t\t/** Detected level, or `null` when the line carried no signal. */\n\t\t/** Level the viewer owns when the parent does not control it. */\n\t\tlet ownLevelFilter = null;\n\t\t/** Active level filter: the parent's when given, otherwise the viewer's. */\n\t\tlet levelFilter = derived(() => level === void 0 ? ownLevelFilter : level);\n\t\t/** The four levels offered as filter chips, in severity order. */\n\t\tconst LEVEL_CHIPS = [\n\t\t\t{\n\t\t\t\tlevel: \"error\",\n\t\t\t\tlabel: \"Error\",\n\t\t\t\tactiveClass: \"border-red-800 bg-red-950/50 text-red-300\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tlabel: \"Warn\",\n\t\t\t\tactiveClass: \"border-amber-800 bg-amber-950/40 text-amber-300\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlevel: \"info\",\n\t\t\t\tlabel: \"Info\",\n\t\t\t\tactiveClass: \"border-neutral-700 bg-neutral-800 text-neutral-100\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tlabel: \"Debug\",\n\t\t\t\tactiveClass: \"border-neutral-700 bg-neutral-800 text-neutral-400\"\n\t\t\t}\n\t\t];\n\t\t/** Lines matching the text filter and the level filter. */\n\t\tlet visible = derived(() => filterByLevel(filterEvents(lines, filter), levelFilter()));\n\t\t/** How many lines of each level are loaded, including `unknown`. */\n\t\tlet levelCounts = derived(() => {\n\t\t\tconst counts = {\n\t\t\t\terror: 0,\n\t\t\t\twarn: 0,\n\t\t\t\tinfo: 0,\n\t\t\t\tdebug: 0,\n\t\t\t\tunknown: 0\n\t\t\t};\n\t\t\tfor (const event of lines) {\n\t\t\t\tconst rowLevel = effectiveLevel(event);\n\t\t\t\tcounts[rowLevel ?? \"unknown\"] = (counts[rowLevel ?? \"unknown\"] ?? 0) + 1;\n\t\t\t}\n\t\t\treturn counts;\n\t\t});\n\t\t/** Presentation rows for the visible lines, one per line in buffer order. */\n\t\tlet lineRows = derived(() => visible().map((event, index) => {\n\t\t\tconst rowLevel = event.level !== void 0 ? event.level : detectLevel(event.message);\n\t\t\tconst formatted = formatLogMessage(event.message, { prettyJson: jsonView });\n\t\t\tconst levelClass = levelColorClass(rowLevel);\n\t\t\treturn {\n\t\t\t\tkey: eventKey(event, index),\n\t\t\t\ttime: formatTime(event.timestamp),\n\t\t\t\ttimestamp: formatTimestamp(event.timestamp),\n\t\t\t\tstreamName: event.streamName,\n\t\t\t\tgroup: event.group ?? null,\n\t\t\t\tmessage: formatted.text,\n\t\t\t\ttokens: formatted.isJson ? tokenizeJson(formatted.text) : null,\n\t\t\t\texpandable: null,\n\t\t\t\tlevel: rowLevel,\n\t\t\t\tlevelClass\n\t\t\t};\n\t\t}));\n\t\t/**\n\t\t* One row of the list: a line, or a request that holds its lines.\n\t\t*\n\t\t* A request row carries everything the header shows, so the template stays\n\t\t* declarative and the list never re-formats a line it already formatted.\n\t\t*/\n\t\t/** Request id every line in the group carries. */\n\t\t/** Clock time of the first line, and its full timestamp for the tooltip. */\n\t\t/** Number of lines in the group. */\n\t\t/** First to last line, as `1.2s`. */\n\t\t/** Most critical level in the group. */\n\t\t/** Log group and stream, when every line in the request shares them. */\n\t\t/** Worst line, trimmed to one short line for the collapsed row. */\n\t\t/** Longest preview kept for a collapsed request, in characters. */\n\t\tconst PREVIEW_LENGTH = 160;\n\t\t/** Prefixes a formatted line row with its kind. */\n\t\tfunction asLine(row) {\n\t\t\treturn {\n\t\t\t\tkind: \"line\",\n\t\t\t\t...row\n\t\t\t};\n\t\t}\n\t\t/** Builds the request header row from the lines it holds. */\n\t\tfunction requestDisplayRow(row) {\n\t\t\tconst children = row.request.events.map((entry) => lineRows()[entry.index]).filter((child) => child !== void 0);\n\t\t\tconst worstLevel = row.request.level;\n\t\t\tconst first = children[0];\n\t\t\treturn {\n\t\t\t\tkind: \"request\",\n\t\t\t\tkey: row.key,\n\t\t\t\tid: row.request.id,\n\t\t\t\ttime: first?.time ?? \"\",\n\t\t\t\ttimestamp: first?.timestamp ?? \"\",\n\t\t\t\tcount: children.length,\n\t\t\t\tspan: formatSpan(row.request.last - row.request.first),\n\t\t\t\tlevel: worstLevel,\n\t\t\t\tlevelLabel: LEVEL_LABELS[worstLevel],\n\t\t\t\tlevelClass: levelColorClass(worstLevel === \"unknown\" ? null : worstLevel),\n\t\t\t\tgroup: sharedField(children.map((child) => child.group)),\n\t\t\t\tstreamName: sharedField(children.map((child) => child.streamName)),\n\t\t\t\tpreview: requestPreview(row.request),\n\t\t\t\tchildren\n\t\t\t};\n\t\t}\n\t\t/** The value every entry shares, or `null` when they differ. */\n\t\tfunction sharedField(values) {\n\t\t\tconst first = values[0];\n\t\t\tif (first === null || first === void 0) return null;\n\t\t\treturn values.every((value) => value === first) ? first : null;\n\t\t}\n\t\t/**\n\t\t* One short line for a collapsed request: its most critical line, because that\n\t\t* is the line that explains why the request is coloured the way it is.\n\t\t*/\n\t\tfunction requestPreview(request) {\n\t\t\tconst worst = request.events.find((entry) => effectiveLevel(visible()[entry.index] ?? { message: \"\" }) === request.level) ?? request.events[0];\n\t\t\tconst [firstLine = \"\"] = (visible()[worst?.index ?? -1]?.message ?? \"\").split(\"\\n\");\n\t\t\treturn firstLine.replace(/\\s+/g, \" \").trim().slice(0, PREVIEW_LENGTH);\n\t\t}\n\t\t/** Rows the list renders: grouped by request when the preference is on. */\n\t\tlet displayRows = derived(() => {\n\t\t\tif (!groupRequests) return lineRows().map(asLine);\n\t\t\tconst rows = [];\n\t\t\tfor (const row of requestRows(visible())) {\n\t\t\t\tif (row.kind === \"line\") {\n\t\t\t\t\trows.push(asLine(lineRows()[row.index]));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (row.request.events.length === 1) {\n\t\t\t\t\tconst only = lineRows()[row.request.events[0]?.index ?? -1];\n\t\t\t\t\tif (only !== void 0) rows.push(asLine(only));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trows.push(requestDisplayRow(row));\n\t\t\t}\n\t\t\treturn rows;\n\t\t});\n\t\t/** True when the list is showing request rows. */\n\t\tlet grouped = derived(() => displayRows().some((row) => row.kind === \"request\"));\n\t\t/** Requests in view, shown next to the line count while grouping. */\n\t\tlet requestCount = derived(() => displayRows().filter((row) => row.kind === \"request\").length);\n\t\t/** Keeps the newest line in view while auto-scroll is on (vertical only). */\n\t\t/** Error text with the group and region context. */\n\t\tlet errorText = derived(() => error === null ? null : describeStreamError(region, group, error.message));\n\t\t/** True when the ready frame says the events come from the local archive. */\n\t\tlet archived = derived(() => ready?.source === \"archive\");\n\t\t/**\n\t\t* Status the badge shows. The archive has no live tail: it replays a fixed window and ends by\n\t\t* itself, so its connecting/live/reconnecting states would all be misleading.\n\t\t*/\n\t\tlet displayStatus = derived(() => archived() && (status === \"connecting\" || status === \"live\" || status === \"reconnecting\") ? \"idle\" : status);\n\t\t/** Tooltip of the archive indicator, naming the database file it reads. */\n\t\tlet archiveTitle = derived(() => describeArchive(archivePath));\n\t\t/** Body text when there is nothing to render. */\n\t\tlet emptyText = derived(() => group === null || group === \"\" ? \"Select a log group to start tailing.\" : filter.trim() !== \"\" ? \"No lines match the filter.\" : archived() ? `No archived events for ${group} in this window.` : `Waiting for events from ${group}\\u2026`);\n\t\t/** Auto-scroll button colour. */\n\t\tlet autoScrollTone = derived(() => autoScroll ? \"text-sky-300\" : \"text-neutral-400\");\n\t\t/** Chip describing the active window. */\n\t\tlet windowSummary = derived(() => describeWindow(ready, Date.now()));\n\t\t/** True when a historic scan finished on its own. */\n\t\tlet windowComplete = derived(() => mode === \"historic\" && endReason === \"window-complete\");\n\t\t/** Wrap toggle colour. */\n\t\tlet wrapTone = derived(() => \"text-neutral-400\");\n\t\t/** JSON toggle colour. */\n\t\tlet jsonTone = derived(() => \"text-sky-300\");\n\t\t/** Grouping toggle colour. */\n\t\tlet groupTone = derived(() => groupRequests ? \"text-sky-300\" : \"text-neutral-400\");\n\t\t/** Rows fill the window when wrapping, and grow to their content otherwise. */\n\t\tlet listClass = derived(() => \"w-max min-w-full\");\n\t\t/** Message cell: wrapped text or a single long line that scrolls sideways. */\n\t\tlet messageClass = derived(() => \"whitespace-pre\");\n\t\t/** Left edge of the prefix resize handle, in pixels from the scrolled content edge. */\n\t\tlet handleLeft = derived(() => ROW_PADDING_PX + TIMESTAMP_COLUMN_PX + ROW_GAP_PX + prefixPx);\n\t\t/** Prefix column width as a CSS length. */\n\t\tlet prefixStyle = derived(() => `max-width: ${pxToRem(prefixPx)}`);\n\t\t/** Rows the user has opened, keyed by row key. */\n\t\tlet expandedRows = {};\n\t\t/** True when a row is open. */\n\t\tfunction isExpanded(key) {\n\t\t\treturn expandedRows[key] === true;\n\t\t}\n\t\t/** Colour for a JSON token, keeping punctuation and whitespace quiet. */\n\t\tfunction tokenClass(type) {\n\t\t\tswitch (type) {\n\t\t\t\tcase \"key\": return \"text-sky-300\";\n\t\t\t\tcase \"string\": return \"text-emerald-300\";\n\t\t\t\tcase \"number\": return \"text-amber-300\";\n\t\t\t\tcase \"boolean\": return \"text-fuchsia-300\";\n\t\t\t\tcase \"null\": return \"text-neutral-500\";\n\t\t\t\tcase \"punctuation\": return \"text-neutral-600\";\n\t\t\t\tdefault: return \"\";\n\t\t\t}\n\t\t}\n\t\t/** Persists the current prefix width. */\n\t\tfunction savePrefixWidth() {\n\t\t\twritePref(STORAGE_KEYS.prefixWidth, String(Math.round(prefixPx)));\n\t\t}\n\t\t$$renderer.push(`<section class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-lg border border-neutral-800 bg-neutral-950\"><div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 border-b border-neutral-800 bg-neutral-900/40 px-3 py-2\">`);\n\t\tStatusBadge($$renderer, { status: displayStatus() });\n\t\t$$renderer.push(`<!----> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <span class=\"text-xs text-neutral-400\" data-testid=\"visible-count\">${escape_html(formatCount(visible().length))} shown</span> `);\n\t\tif (grouped()) $$renderer.push(`<!--[0--><span class=\"text-xs text-neutral-400\" data-testid=\"request-count\">${escape_html(formatCount(requestCount()))} requests</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <span class=\"text-xs text-neutral-500\" data-testid=\"received-count\">${escape_html(formatCount(receivedCount))} received</span> `);\n\t\tif (pendingCount > 0) $$renderer.push(`<!--[0--><span class=\"text-xs text-amber-300\" data-testid=\"pending-count\">${escape_html(formatCount(pendingCount))} buffered</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (droppedCount > 0) $$renderer.push(`<!--[0--><span class=\"text-xs text-amber-300/80\" data-testid=\"dropped-count\">${escape_html(formatCount(droppedCount))} dropped</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$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\">${escape_html(windowSummary().label)}</span> `);\n\t\tif (windowSummary().clamped) $$renderer.push(`<!--[0--><span class=\"text-[0.6875rem] text-amber-400/80\" data-testid=\"window-clamped\">14-day limit</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (windowComplete()) $$renderer.push(`<!--[0--><span class=\"text-[0.6875rem] text-emerald-400/80\" data-testid=\"window-complete\">window complete</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"ml-auto flex flex-wrap items-center gap-2\"><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> <!--[-->`);\n\t\tconst each_array = ensure_array_like(LEVEL_CHIPS);\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet chip = each_array[$$index];\n\t\t\t$$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)} `);\n\t\t\tif ((levelCounts()[chip.level] ?? 0) > 0) $$renderer.push(`<!--[0--><span class=\"ml-1 opacity-70\">${escape_html(formatCount(levelCounts()[chip.level] ?? 0))}</span>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></button>`);\n\t\t}\n\t\t$$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> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950\" data-testid=\"log-scroller\">`);\n\t\tif (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>`);\n\t\telse 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>`);\n\t\telse {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\tfunction logLine($$renderer, row, child) {\n\t\t\t\tconst expandable = row.expandable !== null;\n\t\t\t\tconst open = expandable && isExpanded(row.key);\n\t\t\t\t$$renderer.push(`<li${attr_class(`flex flex-wrap items-baseline gap-2 ${child ? \"pl-8\" : \"px-3\"} py-0.5 hover:bg-neutral-900/60 ${listClass()} ${expandable ? \"cursor-pointer\" : \"\"}`)} data-testid=\"log-line\"${attr(\"data-request-child\", child ? \"true\" : void 0)}${attr(\"data-level\", row.level ?? \"unknown\")}${attr(\"data-expandable\", expandable ? \"true\" : void 0)}${attr(\"data-expanded\", open ? \"true\" : void 0)}${attr(\"role\", expandable ? \"button\" : void 0)}${attr(\"tabindex\", expandable ? 0 : void 0)}${attr(\"aria-expanded\", expandable ? open : void 0)}${attr(\"title\", expandable ? open ? \"Hide the JSON in this line\" : \"Show this line as JSON\" : void 0)}><span class=\"w-[7.5rem] shrink-0 text-neutral-500\"${attr(\"title\", row.timestamp)}>${escape_html(row.time)}</span> `);\n\t\t\t\tif (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>`);\n\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$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> `);\n\t\t\t\tif (expandable) $$renderer.push(`<!--[0--><span class=\"shrink-0 text-neutral-600\" aria-hidden=\"true\">${escape_html(open ? \"▾\" : \"▸\")}</span>`);\n\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--> <span${attr_class(`${messageClass()} ${stringify(row.levelClass)}`)} data-testid=\"log-message\">`);\n\t\t\t\tif (row.tokens !== null) {\n\t\t\t\t\t$$renderer.push(`<!--[0--><!--[-->`);\n\t\t\t\t\tconst each_array_1 = ensure_array_like(row.tokens);\n\t\t\t\t\tfor (let tokenIndex = 0, $$length = each_array_1.length; tokenIndex < $$length; tokenIndex++) {\n\t\t\t\t\t\tlet token = each_array_1[tokenIndex];\n\t\t\t\t\t\t$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t} else $$renderer.push(`<!--[-1-->${escape_html(row.message)}`);\n\t\t\t\t$$renderer.push(`<!--]--></span> `);\n\t\t\t\tif (open && row.expandable !== null) {\n\t\t\t\t\t$$renderer.push(`<!--[0--><span class=\"w-full whitespace-pre text-xs text-neutral-300\" data-testid=\"log-json-expanded\"><!--[-->`);\n\t\t\t\t\tconst each_array_2 = ensure_array_like(tokenizeJson(row.expandable));\n\t\t\t\t\tfor (let tokenIndex = 0, $$length = each_array_2.length; tokenIndex < $$length; tokenIndex++) {\n\t\t\t\t\t\tlet token = each_array_2[tokenIndex];\n\t\t\t\t\t\t$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]--></span>`);\n\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--></li>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<div${attr_class(`relative min-h-full ${listClass()}`)} data-testid=\"log-canvas\"><ol class=\"font-mono text-xs leading-5\" data-testid=\"log-lines\"><!--[-->`);\n\t\t\tconst each_array_3 = ensure_array_like(displayRows());\n\t\t\tfor (let $$index_4 = 0, $$length = each_array_3.length; $$index_4 < $$length; $$index_4++) {\n\t\t\t\tlet row = each_array_3[$$index_4];\n\t\t\t\tif (row.kind === \"request\") {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\tconst open = isExpanded(row.key);\n\t\t\t\t\t$$renderer.push(`<li${attr_class(clsx(listClass()))} data-testid=\"log-request-group\"${attr(\"data-request-id\", row.id)}${attr(\"data-level\", row.level)}${attr(\"data-expanded\", open ? \"true\" : void 0)}${attr(\"data-lines\", row.count)}><button type=\"button\" class=\"flex w-full flex-wrap items-baseline gap-2 px-3 py-0.5 text-left hover:bg-neutral-900/60\"${attr(\"aria-expanded\", open)}${attr(\"title\", open ? \"Hide the lines of this request\" : \"Show every line of this request\")} data-testid=\"request-group-summary\"><span class=\"w-[7.5rem] shrink-0 text-neutral-500\"${attr(\"title\", row.timestamp)}>${escape_html(row.time)}</span> `);\n\t\t\t\t\tif (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>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <span class=\"shrink-0 truncate text-sky-400/80\"${attr_style(prefixStyle())}${attr(\"title\", row.streamName ?? \"\")} data-testid=\"log-stream\">${escape_html(row.streamName ?? \"\")}</span> <span class=\"shrink-0 text-neutral-600\" aria-hidden=\"true\">${escape_html(open ? \"▾\" : \"▸\")}</span> <span class=\"shrink-0 rounded border border-neutral-700 bg-neutral-900 px-1.5 font-mono text-[0.6875rem] text-sky-200\" data-testid=\"request-group-id\" title=\"Request id shared by these lines\">${escape_html(row.id)}</span> <span class=\"shrink-0 text-neutral-400\" data-testid=\"request-group-count\">${escape_html(formatCount(row.count))} lines</span> <span class=\"shrink-0 text-neutral-500\" data-testid=\"request-group-span\">${escape_html(row.span)}</span> <span${attr_class(`shrink-0 font-medium ${stringify(row.levelClass)}`)} data-testid=\"request-group-level\">${escape_html(row.levelLabel)}</span> `);\n\t\t\t\t\tif (!open) $$renderer.push(`<!--[0--><span class=\"min-w-0 truncate text-neutral-500\" data-testid=\"request-group-preview\">${escape_html(row.preview)}</span>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--></button> `);\n\t\t\t\t\tif (open) {\n\t\t\t\t\t\t$$renderer.push(`<!--[0--><ul class=\"contents\"><!--[-->`);\n\t\t\t\t\t\tconst each_array_4 = ensure_array_like(row.children);\n\t\t\t\t\t\tfor (let $$index_3 = 0, $$length = each_array_4.length; $$index_3 < $$length; $$index_3++) {\n\t\t\t\t\t\t\tlet child = each_array_4[$$index_3];\n\t\t\t\t\t\t\tlogLine($$renderer, child, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$$renderer.push(`<!--]--></ul>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--></li>`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\tlogLine($$renderer, row, false);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></ol> `);\n\t\t\tColumnResizer($$renderer, {\n\t\t\t\tlabel: \"Resize prefix column\",\n\t\t\t\twidth: prefixPx,\n\t\t\t\tmin: PREFIX_MIN_PX,\n\t\t\t\tmax: PREFIX_MAX_PX,\n\t\t\t\ttestId: \"prefix-resizer\",\n\t\t\t\tonChange: (next) => prefixPx = next,\n\t\t\t\tonCommit: () => savePrefixWidth(),\n\t\t\t\tclass: \"absolute inset-y-0 w-2\",\n\t\t\t\tstyle: `left: ${stringify(handleLeft() - 4)}px`\n\t\t\t});\n\t\t\t$$renderer.push(`<!----></div>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></section>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/RegionSelect.svelte\nfunction RegionSelect($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Regions offered by the picker; defaults to {@link DEFAULT_REGIONS}. */\n\t\t/** Currently selected region. */\n\t\t/** Called with the newly selected region. */\n\t\tlet { regions = DEFAULT_REGIONS, value = \"\", disabled = false, label = \"Region\", id = \"region-select\", onchange } = $$props;\n\t\t/** Offered regions, plus the current value when the server does not list it. */\n\t\tlet options = derived(() => value !== \"\" && !regions.includes(value) ? [value, ...regions] : [...regions]);\n\t\t$$renderer.push(`<div class=\"flex flex-col gap-1.5\"><label${attr(\"for\", id)} class=\"text-[0.6875rem] font-semibold uppercase tracking-wider text-neutral-500\">${escape_html(label)}</label> `);\n\t\t$$renderer.select({\n\t\t\tid,\n\t\t\tdisabled,\n\t\t\tvalue,\n\t\t\tonchange: (event) => onchange?.(event.currentTarget.value),\n\t\t\tclass: \"w-full rounded-md border border-neutral-800 bg-neutral-900 px-2.5 py-1.5 text-sm text-neutral-100 outline-none transition-colors hover:border-neutral-700 focus:border-sky-600 disabled:cursor-not-allowed disabled:opacity-50\"\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\tconst each_array = ensure_array_like(options());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet option = each_array[$$index];\n\t\t\t\t$$renderer.option({ value: option }, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`${escape_html(option)}`);\n\t\t\t\t});\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t});\n\t\t$$renderer.push(`</div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/SourceControls.svelte\nfunction SourceControls($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Active source, owned by the page. */\n\t\t/**\n\t\t* True only when `GET /api/archive` reported `available: true`.\n\t\t* The toggle is hidden otherwise, so the app keeps its CloudWatch-only look.\n\t\t*/\n\t\t/** Database file behind the archive, shown in the tooltip. */\n\t\t/** Called with the newly chosen source. */\n\t\tlet { source = \"cloudwatch\", archiveAvailable = false, archivePath = null, onChange } = $$props;\n\t\t/** Tooltip of the archive button: what it reads and which file backs it. */\n\t\tlet archiveTitle = derived(() => describeArchive(archivePath));\n\t\tif (archiveAvailable) {\n\t\t\t$$renderer.push(`<!--[0--><div class=\"flex flex-col gap-1.5\"><div class=\"flex items-center gap-1 rounded-lg border border-neutral-800 bg-neutral-900 p-0.5\" role=\"group\" aria-label=\"Log source\"><button type=\"button\"${attr(\"aria-pressed\", source === \"cloudwatch\")} title=\"Stream from CloudWatch Logs with your AWS credentials\" data-testid=\"source-cloudwatch\"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${source === \"cloudwatch\" ? \"border-sky-700 bg-sky-950/60 text-sky-300\" : \"border-transparent text-neutral-400 hover:text-neutral-200\"}`)}>CloudWatch</button> <button type=\"button\"${attr(\"aria-pressed\", source === \"archive\")}${attr(\"title\", archiveTitle())} data-testid=\"source-archive\"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${source === \"archive\" ? \"border-teal-700 bg-teal-950/60 text-teal-300\" : \"border-transparent text-neutral-400 hover:text-neutral-200\"}`)}>Local archive</button></div> `);\n\t\t\tif (source === \"archive\") $$renderer.push(`<!--[0--><p class=\"text-[0.6875rem] leading-4 text-teal-300/80\"${attr(\"title\", archiveTitle())} data-testid=\"archive-note\">${escape_html(ARCHIVE_NOTE)}</p>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}\nfunction createBrowserEventSource(url) {\n\treturn new EventSource(url);\n}\n/** Builds the `/api/stream` SSE URL for a target. `base` allows an absolute URL in tests. */\nfunction buildStreamUrl(target, base = \"\") {\n\tconst search = new URLSearchParams();\n\tsearch.set(\"region\", target.region);\n\tconst groups = (target.groups ?? []).filter((name) => name.length > 0);\n\tif (groups.length > 1) search.set(\"groups\", groups.join(\",\"));\n\telse search.set(\"group\", groups[0] ?? target.group);\n\tif (target.source === \"archive\") search.set(\"source\", \"archive\");\n\tif (target.filterPattern) search.set(\"filterPattern\", target.filterPattern);\n\tif (target.mode === \"historic\") {\n\t\tsearch.set(\"mode\", \"historic\");\n\t\tif (target.range) search.set(\"range\", target.range);\n\t\tif (target.from !== void 0 && target.from !== \"\") search.set(\"from\", String(target.from));\n\t\tif (target.to !== void 0 && target.to !== \"\") search.set(\"to\", String(target.to));\n\t} else if (target.mode === \"live\") search.set(\"mode\", \"live\");\n\tif (target.startTime !== void 0 && target.startTime !== \"\") search.set(\"startTime\", String(target.startTime));\n\tif (target.lookback) search.set(\"lookback\", target.lookback);\n\tif (typeof target.poll === \"number\" && Number.isFinite(target.poll)) search.set(\"poll\", String(target.poll));\n\treturn `${base}/api/stream?${search.toString()}`;\n}\n/** Parses an SSE payload, returning `null` instead of throwing on malformed JSON. */\nfunction parsePayload(data) {\n\ttry {\n\t\treturn JSON.parse(data);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* View over one log group: the live CloudWatch stream, or the local archive replay.\n*\n* Pause policy: pausing keeps the connection open and keeps receiving events; those events are\n* held in a pending buffer and flushed into the visible buffer on resume.\n*/\nvar LogStream = class {\n\t/** Connection status shown by the status badge. */\n\tstatus = \"idle\";\n\t/** Last server-side or transport error, or `null`. */\n\tlastError = null;\n\t/** Payload of the last `ready` event. */\n\tready = null;\n\t/** Current target, or `null` after `stop()`. */\n\ttarget = null;\n\t/** Visible log lines, oldest first, capped by the buffer capacity. */\n\tlines = [];\n\t/** Total number of events received since the last reset. */\n\treceivedCount = 0;\n\t/** Lines dropped because the visible buffer was full. */\n\tdroppedCount = 0;\n\t/** Lines held back while paused. */\n\tpendingCount = 0;\n\t/** True when the visible buffer is frozen and events are buffered. */\n\tpaused = false;\n\t/** Timestamp of the last `ping` or `log` event. */\n\tlastEventAt = null;\n\t/** Reason given by the last `end` event. */\n\tendReason = null;\n\t#store;\n\t#source = null;\n\t#listeners = [];\n\t#reconnectTimer = null;\n\t#createEventSource;\n\t#reconnectDelayMs;\n\t#url;\n\t#schedule;\n\t#cancel;\n\tconstructor(options = {}) {\n\t\tthis.#store = new LogStore(options.capacity ?? 5e3);\n\t\tthis.#createEventSource = options.createEventSource ?? createBrowserEventSource;\n\t\tthis.#reconnectDelayMs = options.reconnectDelayMs ?? 1e3;\n\t\tthis.#url = options.url ?? ((target) => buildStreamUrl(target));\n\t\tthis.#schedule = options.schedule ?? ((callback, delayMs) => setTimeout(callback, delayMs));\n\t\tthis.#cancel = options.cancel ?? ((handle) => clearTimeout(handle));\n\t}\n\t/** Starts tailing a target, replacing any previous stream and clearing the buffer. */\n\tstart(target) {\n\t\tthis.#closeSource();\n\t\tthis.#clearReconnect();\n\t\tthis.clear();\n\t\tthis.status = \"connecting\";\n\t\tthis.lastError = null;\n\t\tthis.ready = null;\n\t\tthis.endReason = null;\n\t\tthis.target = { ...target };\n\t\tthis.#connect(false);\n\t}\n\t/** Stops tailing and forgets the target; the buffered lines stay visible. */\n\tstop() {\n\t\tthis.#clearReconnect();\n\t\tthis.#closeSource();\n\t\tthis.target = null;\n\t\tthis.status = \"idle\";\n\t}\n\t/** Freezes the visible buffer; incoming events are held until {@link resume}. */\n\tpause() {\n\t\tthis.#store.pause();\n\t\tthis.paused = true;\n\t}\n\t/** Thaws the visible buffer and flushes the events held while paused. */\n\tresume() {\n\t\tthis.#store.resume();\n\t\tthis.paused = false;\n\t\tthis.#syncStore();\n\t}\n\t/** Pauses or resumes, depending on the current state. */\n\ttogglePause() {\n\t\tif (this.paused) this.resume();\n\t\telse this.pause();\n\t}\n\t/** Empties the visible buffer, the pending buffer and the counters. */\n\tclear() {\n\t\tthis.#store.clear();\n\t\tthis.paused = false;\n\t\tthis.lines = [];\n\t\tthis.receivedCount = 0;\n\t\tthis.droppedCount = 0;\n\t\tthis.pendingCount = 0;\n\t}\n\t/** Number of visible lines. */\n\tget size() {\n\t\treturn this.#store.size;\n\t}\n\t/** Opens a connection for the current target. */\n\t#connect(retry) {\n\t\tconst target = this.target;\n\t\tif (target === null) return;\n\t\tthis.#closeSource();\n\t\tthis.status = retry ? \"reconnecting\" : \"connecting\";\n\t\tlet source;\n\t\ttry {\n\t\t\tsource = this.#createEventSource(this.#url(target));\n\t\t} catch (error) {\n\t\t\tthis.status = \"error\";\n\t\t\tthis.lastError = { message: error instanceof Error ? error.message : String(error) };\n\t\t\treturn;\n\t\t}\n\t\tthis.#source = source;\n\t\tthis.#listen(source, \"open\", () => {\n\t\t\tthis.status = \"live\";\n\t\t\tthis.lastError = null;\n\t\t});\n\t\tthis.#listen(source, \"error\", (event) => this.#handleErrorEvent(event));\n\t\tthis.#listen(source, \"ready\", (event) => this.#handleReady(event));\n\t\tthis.#listen(source, \"log\", (event) => this.#handleLog(event));\n\t\tthis.#listen(source, \"ping\", (event) => this.#handlePing(event));\n\t\tthis.#listen(source, \"end\", (event) => this.#handleEnd(event));\n\t}\n\t/** Registers a named-event listener and remembers it for cleanup. */\n\t#listen(source, type, handler) {\n\t\tsource.addEventListener(type, handler);\n\t\tthis.#listeners.push({\n\t\t\tsource,\n\t\t\ttype,\n\t\t\thandler\n\t\t});\n\t}\n\t/** Detaches listeners and closes the current connection. */\n\t#closeSource() {\n\t\tfor (const listener of this.#listeners) listener.source.removeEventListener(listener.type, listener.handler);\n\t\tthis.#listeners = [];\n\t\tthis.#source?.close();\n\t\tthis.#source = null;\n\t}\n\t/**\n\t* Handles every `error` event. A payload means the server reported a problem; an empty payload\n\t* means the connection dropped, which {@link #handleTransportError} deals with.\n\t*/\n\t#handleErrorEvent(event) {\n\t\tconst data = typeof event.data === \"string\" ? event.data.trim() : \"\";\n\t\tif (data === \"\") {\n\t\t\tthis.#handleTransportError();\n\t\t\treturn;\n\t\t}\n\t\tthis.lastError = parsePayload(data) ?? { message: data };\n\t\tthis.status = \"error\";\n\t}\n\t/**\n\t* Handles a transport failure. While the source is still `CONNECTING` the browser keeps retrying\n\t* on its own; a `CLOSED` source is rebuilt after {@link LogStreamOptions.reconnectDelayMs}.\n\t*/\n\t#handleTransportError() {\n\t\tconst source = this.#source;\n\t\tif (source === null) return;\n\t\tthis.status = \"reconnecting\";\n\t\tif (source.readyState === 2) this.#scheduleReconnect();\n\t}\n\t/** Schedules one reconnect attempt, unless one is already pending. */\n\t#scheduleReconnect() {\n\t\tif (this.#reconnectTimer !== null) return;\n\t\tthis.#reconnectTimer = this.#schedule(() => {\n\t\t\tthis.#reconnectTimer = null;\n\t\t\tif (this.target !== null) this.#connect(true);\n\t\t}, this.#reconnectDelayMs);\n\t}\n\t/** Drops a pending reconnect attempt. */\n\t#clearReconnect() {\n\t\tif (this.#reconnectTimer === null) return;\n\t\tthis.#cancel(this.#reconnectTimer);\n\t\tthis.#reconnectTimer = null;\n\t}\n\t/** Marks the stream as live after receiving data. */\n\t#markLive() {\n\t\tthis.lastEventAt = Date.now();\n\t\tif (this.status !== \"ended\") this.status = \"live\";\n\t}\n\t/** Copies buffer state onto the reactive fields. */\n\t#syncStore() {\n\t\tthis.lines = this.#store.toArray();\n\t\tthis.pendingCount = this.#store.pendingCount;\n\t\tthis.droppedCount = this.#store.droppedCount;\n\t}\n\t#handleReady(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tif (payload !== null) this.ready = payload;\n\t\tthis.#markLive();\n\t}\n\t#handleLog(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tconst events = payload !== null && Array.isArray(payload.events) ? payload.events : [];\n\t\tif (events.length === 0) return;\n\t\tthis.#store.push(events);\n\t\tthis.#syncStore();\n\t\tthis.receivedCount += events.length;\n\t\tthis.#markLive();\n\t}\n\t#handlePing(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tthis.lastEventAt = payload?.at ?? Date.now();\n\t\tif (this.status !== \"ended\") this.status = \"live\";\n\t}\n\t#handleEnd(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tthis.endReason = payload?.reason ?? null;\n\t\tthis.status = \"ended\";\n\t\tthis.#clearReconnect();\n\t\tthis.#closeSource();\n\t}\n};\n//#endregion\n//#region src/routes/+page.svelte\nfunction _page($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Owns the SSE connection; the page only wires it to the UI. */\n\t\tconst stream = new LogStream();\n\t\t/** Region picker state. Seeded from the URL so a shared link restores the view. */\n\t\tlet region = page.url.searchParams.get(\"region\") ?? \"\";\n\t\t/**\n\t\t* Where the view reads from, seeded from the URL. `archive` is only offered while the local\n\t\t* DuckDB archive reports `available: true`, so the fallback below is applied during bootstrap.\n\t\t*/\n\t\tlet source = page.url.searchParams.get(\"source\") === \"archive\" ? \"archive\" : \"cloudwatch\";\n\t\t/** Tail mode and historic window, seeded from the URL; bootstrap forces historic for the archive. */\n\t\tlet mode = page.url.searchParams.get(\"mode\") === \"historic\" ? \"historic\" : \"live\";\n\t\tlet range = page.url.searchParams.get(\"range\") ?? \"15m\";\n\t\tlet windowFrom = parseUrlEpoch(page.url.searchParams.get(\"from\"));\n\t\tlet windowTo = parseUrlEpoch(page.url.searchParams.get(\"to\"));\n\t\tlet rangeLoading = false;\n\t\tlet regions = [...DEFAULT_REGIONS];\n\t\tlet groups = [];\n\t\tlet groupsLoading = false;\n\t\tlet groupsError = null;\n\t\tlet endpoint = null;\n\t\tlet filter = \"\";\n\t\tlet autoScroll = true;\n\t\t/**\n\t\t* Log groups in the view, seeded from the URL. One entry is the normal case;\n\t\t* more than one tails them together and adds a group column.\n\t\t*/\n\t\tlet selectedGroups = parseUrlGroups(page.url.searchParams);\n\t\t/** Primary group: the one the viewer names the view after. */\n\t\tlet selectedGroup = derived(() => selectedGroups[0] ?? null);\n\t\t/** Level filter shared by the log view and the chart. */\n\t\tlet levelFilter = null;\n\t\t/**\n\t\t* Group lines by request id, in the log view and in the chart.\n\t\t*\n\t\t* On by default: an incident is read as requests, not as the lines they wrote.\n\t\t* A stored preference wins, so a reader who wants every line keeps every line.\n\t\t*/\n\t\tlet groupRequests = true;\n\t\t/** Bucketed counts behind the chart. */\n\t\tlet seriesPoints = [];\n\t\t/** True while the archive counts are being fetched. */\n\t\tlet seriesLoading = false;\n\t\t/** True only when the local archive reports that it can be read. */\n\t\tlet archiveAvailable = derived(() => false);\n\t\t/** Database file behind the archive, or `null` when it is unknown. */\n\t\tlet archivePath = derived(() => null);\n\t\t/** Tooltip of the archive badge in the header. */\n\t\tlet archiveTitle = derived(() => describeArchive(archivePath()));\n\t\t/** Sidebar width in pixels; the layout default is 22rem. */\n\t\tlet sidebarPx = remToPx(SIDEBAR_WIDTH.defaultRem);\n\t\t/** Largest sidebar width allowed: 44vw, but never below the minimum. */\n\t\tlet sidebarMaxPx = derived(() => remToPx(SIDEBAR_WIDTH.defaultRem));\n\t\tlet sidebarMinPx = remToPx(SIDEBAR_WIDTH.minRem);\n\t\tlet sidebarStyle = derived(() => `width: min(${sidebarPx}px, ${SIDEBAR_WIDTH.maxVw}vw)`);\n\t\t/** Persists the sidebar width; failures are ignored (private mode, quota). */\n\t\tfunction saveSidebarWidth() {\n\t\t\ttry {\n\t\t\t\tif (typeof localStorage === \"undefined\") return;\n\t\t\t\tlocalStorage.setItem(STORAGE_KEYS.sidebarWidth, String(Math.round(sidebarPx)));\n\t\t\t} catch {}\n\t\t}\n\t\t/**\n\t\t* Loads the log groups of a region from the active source; a newer region or source change wins\n\t\t* the race. The CloudWatch URL is left exactly as it was, so only the archive names its source.\n\t\t*/\n\t\tasync function loadGroups(target) {\n\t\t\tgroupsLoading = true;\n\t\t\tgroupsError = null;\n\t\t\tconst requestedSource = source;\n\t\t\tconst query = requestedSource === \"archive\" ? {\n\t\t\t\tregion: target,\n\t\t\t\tsource: requestedSource\n\t\t\t} : { region: target };\n\t\t\ttry {\n\t\t\t\tconst response = await fetchLogGroups(query);\n\t\t\t\tif (target !== region || requestedSource !== source) return;\n\t\t\t\tif (response.endpoint !== null) endpoint = response.endpoint;\n\t\t\t\tgroups = response.groups;\n\t\t\t} catch (error) {\n\t\t\t\tif (target !== region || requestedSource !== source) return;\n\t\t\t\tgroups = [];\n\t\t\t\tgroupsError = describeGroupsError(target, error);\n\t\t\t} finally {\n\t\t\t\tif (target === region && requestedSource === source) groupsLoading = false;\n\t\t\t}\n\t\t}\n\t\t/** Parses an epoch-millisecond URL parameter, or `null`. */\n\t\tfunction parseUrlEpoch(value) {\n\t\t\tif (value === null || value.trim() === \"\") return null;\n\t\t\tconst parsed = Number(value);\n\t\t\treturn Number.isFinite(parsed) ? parsed : null;\n\t\t}\n\t\t/** The window the current mode asks for. The archive is always a historic window. */\n\t\tfunction windowParams() {\n\t\t\tif (mode === \"live\" && source !== \"archive\") return { mode: \"live\" };\n\t\t\tif (range === \"\" && windowFrom !== null && windowTo !== null) return {\n\t\t\t\tmode: \"historic\",\n\t\t\t\tfrom: windowFrom,\n\t\t\t\tto: windowTo\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tmode: \"historic\",\n\t\t\t\trange: range === \"\" ? \"15m\" : range\n\t\t\t};\n\t\t}\n\t\t/** Stream target for the active source, region, groups and window. */\n\t\tfunction streamTarget() {\n\t\t\tconst window = windowParams();\n\t\t\tconst [primary, ...rest] = selectedGroups;\n\t\t\tconst target = {\n\t\t\t\tregion,\n\t\t\t\tgroup: primary ?? \"\",\n\t\t\t\tgroups: [...selectedGroups],\n\t\t\t\t...window\n\t\t\t};\n\t\t\tif (source === \"archive\") target.source = \"archive\";\n\t\t\treturn target;\n\t\t}\n\t\t/** Starts the stream for the current selection, or stops it when nothing is selected. */\n\t\tfunction restartStream() {\n\t\t\tif (region === \"\" || selectedGroups.length === 0) {\n\t\t\t\tstream.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trangeLoading = mode === \"historic\";\n\t\t\tstream.start(streamTarget());\n\t\t\tloadSeries();\n\t\t}\n\t\t/** Selects one group, replacing the selection. */\n\t\tfunction selectGroup(name) {\n\t\t\tif (region === \"\" || name === \"\") return;\n\t\t\tselectedGroups = [name];\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\trestartStream();\n\t\t}\n\t\t/**\n\t\t* Adds a group to the selection or removes it.\n\t\t*\n\t\t* The view keeps at least the groups it had: removing the last one leaves the\n\t\t* stream stopped and the list without a selection, which is a valid state.\n\t\t*/\n\t\tfunction toggleGroup(name) {\n\t\t\tif (region === \"\" || name === \"\") return;\n\t\t\tselectedGroups = selectedGroups.includes(name) ? selectedGroups.filter((entry) => entry !== name) : [...selectedGroups, name];\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\tif (selectedGroups.length === 0) {\n\t\t\t\tstream.stop();\n\t\t\t\tseriesPoints = [];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trestartStream();\n\t\t}\n\t\t/** Applies a mode or range change: restarts the stream and mirrors it into the URL. */\n\t\tfunction applyRange(payload) {\n\t\t\tif (source === \"archive\" && payload.mode === \"live\") return;\n\t\t\tmode = payload.mode;\n\t\t\trange = payload.range;\n\t\t\twindowFrom = payload.from;\n\t\t\twindowTo = payload.to;\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\tif (selectedGroups.length === 0) return;\n\t\t\trangeLoading = payload.mode === \"historic\";\n\t\t\tstream.start(streamTarget());\n\t\t\tloadSeries();\n\t\t}\n\t\t/**\n\t\t* Applies a brushed range from the chart as the new historic window, which\n\t\t* re-scopes the log view to exactly what was brushed.\n\t\t*/\n\t\tfunction applyBrush(selection) {\n\t\t\tif (selection === null) return;\n\t\t\tconst window = chartWindow();\n\t\t\tif (!isMeaningfulBrush(selection, window, chartBucketMs(window.from, window.to))) return;\n\t\t\tapplyRange({\n\t\t\t\tmode: \"historic\",\n\t\t\t\trange: \"\",\n\t\t\t\tfrom: selection.from,\n\t\t\t\tto: selection.to\n\t\t\t});\n\t\t}\n\t\t/** Turns request grouping on or off, and remembers the choice. */\n\t\tfunction toggleGroupRequests() {\n\t\t\tgroupRequests = !groupRequests;\n\t\t\ttry {\n\t\t\t\tlocalStorage?.setItem(STORAGE_KEYS.groupRequests, groupRequests ? \"true\" : \"false\");\n\t\t\t} catch {}\n\t\t}\n\t\t/**\n\t\t* Switches between CloudWatch and the local archive.\n\t\t*\n\t\t* The archive forces historic mode, restarts the stream for the selected group and reloads the\n\t\t* group list from the new source, so the sidebar and the viewer always agree.\n\t\t*/\n\t\tfunction changeSource(next) {\n\t\t\tif (next === source) return;\n\t\t\tif (next === \"archive\" && !archiveAvailable()) return;\n\t\t\tsource = next;\n\t\t\tif (next === \"archive\" && mode !== \"historic\") {\n\t\t\t\tmode = \"historic\";\n\t\t\t\tif (range === \"\") {\n\t\t\t\t\trange = \"15m\";\n\t\t\t\t\twindowFrom = null;\n\t\t\t\t\twindowTo = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (selectedGroups.length > 0) {\n\t\t\t\trangeLoading = mode === \"historic\";\n\t\t\t\tstream.start(streamTarget());\n\t\t\t}\n\t\t\tgroups = [];\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\tloadGroups(region);\n\t\t\tloadSeries();\n\t\t}\n\t\t/** Switches region: stops the stream, clears the list and reloads the groups. */\n\t\tfunction changeRegion(next) {\n\t\t\tif (next === \"\" || next === region) return;\n\t\t\tregion = next;\n\t\t\tstream.stop();\n\t\t\tgroups = [];\n\t\t\tselectedGroups = [];\n\t\t\tseriesPoints = [];\n\t\t\tsyncUrl(next, []);\n\t\t\tloadGroups(next);\n\t\t}\n\t\t/** Reloads the groups of the active region. */\n\t\tfunction refreshGroups() {\n\t\t\tloadGroups(region);\n\t\t}\n\t\t/** Replaces the view parameters in the address bar. */\n\t\tfunction syncUrl(nextRegion, nextGroups) {\n\t\t\tconst url = new URL(page.url);\n\t\t\tif (nextRegion === \"\") url.searchParams.delete(\"region\");\n\t\t\telse url.searchParams.set(\"region\", nextRegion);\n\t\t\tif (source === \"archive\") url.searchParams.set(\"source\", \"archive\");\n\t\t\telse url.searchParams.delete(\"source\");\n\t\t\turl.searchParams.delete(\"group\");\n\t\t\turl.searchParams.delete(\"groups\");\n\t\t\tconst names = nextGroups.filter((name) => name.length > 0);\n\t\t\tif (names.length === 1) url.searchParams.set(\"group\", names[0]);\n\t\t\telse if (names.length > 1) url.searchParams.set(\"groups\", names.join(\",\"));\n\t\t\tif (mode === \"live\") {\n\t\t\t\turl.searchParams.delete(\"mode\");\n\t\t\t\turl.searchParams.delete(\"range\");\n\t\t\t\turl.searchParams.delete(\"from\");\n\t\t\t\turl.searchParams.delete(\"to\");\n\t\t\t} else {\n\t\t\t\turl.searchParams.set(\"mode\", \"historic\");\n\t\t\t\turl.searchParams.delete(\"from\");\n\t\t\t\turl.searchParams.delete(\"to\");\n\t\t\t\turl.searchParams.delete(\"range\");\n\t\t\t\tif (range === \"\" && windowFrom !== null && windowTo !== null) {\n\t\t\t\t\turl.searchParams.set(\"from\", String(windowFrom));\n\t\t\t\t\turl.searchParams.set(\"to\", String(windowTo));\n\t\t\t\t} else url.searchParams.set(\"range\", range === \"\" ? \"15m\" : range);\n\t\t\t}\n\t\t\tif (url.href !== page.url.href) replaceState(url, {});\n\t\t}\n\t\t/** Clears the loading hint once the server reports its window. */\n\t\t/**\n\t\t* Keeps the chart in step with the view: a new window, selection, source, level\n\t\t* or a new batch of lines all re-load the counts.\n\t\t*/\n\t\t/**\n\t\t* Reacts to `archive-unavailable` from the stream (the file was locked or removed after boot) by\n\t\t* re-checking the archive, so the toggle hides itself instead of offering a source that fails.\n\t\t*/\n\t\t/** Parses the group selection from the URL, accepting both parameter shapes. */\n\t\tfunction parseUrlGroups(params) {\n\t\t\tconst names = (params.get(\"groups\") ?? \"\").split(\",\").map((name) => name.trim()).filter((name) => name.length > 0);\n\t\t\tif (names.length > 0) return [...new Set(names)];\n\t\t\tconst single = params.get(\"group\")?.trim() ?? \"\";\n\t\t\treturn single.length > 0 ? [single] : [];\n\t\t}\n\t\t/** Bucket width for the chart of one window, mirroring the server's choice. */\n\t\tfunction chartBucketMs(from, to) {\n\t\t\tconst span = Math.max(1, to - from);\n\t\t\treturn [\n\t\t\t\t1e3,\n\t\t\t\t5e3,\n\t\t\t\t1e4,\n\t\t\t\t3e4,\n\t\t\t\t6e4,\n\t\t\t\t3e5,\n\t\t\t\t9e5,\n\t\t\t\t18e5\n\t\t\t].find((step) => span / step <= 90) ?? 36e5;\n\t\t}\n\t\t/** Window the chart describes: the active historic window, or a rolling quarter hour. */\n\t\tfunction chartWindow() {\n\t\t\tif (mode === \"historic\") {\n\t\t\t\tconst to = windowTo ?? stream.ready?.endTime ?? Date.now();\n\t\t\t\tconst from = windowFrom ?? stream.ready?.startTime ?? to - 9e5;\n\t\t\t\treturn {\n\t\t\t\t\tfrom: Math.min(from, to - 1e3),\n\t\t\t\t\tto\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst to = Date.now();\n\t\t\treturn {\n\t\t\t\tfrom: to - 9e5,\n\t\t\t\tto\n\t\t\t};\n\t\t}\n\t\t/**\n\t\t* Loads the counts behind the chart.\n\t\t*\n\t\t* The archive can count a whole window in one statement, so it is asked for\n\t\t* them; a CloudWatch view has no aggregate endpoint, so the events already\n\t\t* streamed are bucketed here. Both end up as the same points.\n\t\t*/\n\t\tasync function loadSeries() {\n\t\t\tif (selectedGroups.length === 0 || region === \"\") {\n\t\t\t\tseriesPoints = [];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { from, to } = chartWindow();\n\t\t\tif (source !== \"archive\") {\n\t\t\t\tseriesPoints = bucketEvents(stream.lines, {\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\tbucketMs: chartBucketMs(from, to),\n\t\t\t\t\tlevel: levelFilter,\n\t\t\t\t\tfallbackGroup: selectedGroup() ?? \"\",\n\t\t\t\t\tbyRequest: groupRequests\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tseriesLoading = true;\n\t\t\ttry {\n\t\t\t\tseriesPoints = (await fetchSeries({\n\t\t\t\t\tregion,\n\t\t\t\t\tgroups: selectedGroups,\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\tlevels: levelFilter === null ? [] : [levelFilter],\n\t\t\t\t\tby: groupRequests ? \"request\" : \"event\"\n\t\t\t\t})).points;\n\t\t\t} catch {\n\t\t\t\tseriesPoints = [];\n\t\t\t} finally {\n\t\t\t\tseriesLoading = false;\n\t\t\t}\n\t\t}\n\t\t$$renderer.push(`<div class=\"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> `);\n\t\tif (source === \"archive\") {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tEndpointBadge($$renderer, {\n\t\t\t\tendpoint: null,\n\t\t\t\tcredentials: null\n\t\t\t});\n\t\t\t$$renderer.push(`<!----> <span data-testid=\"archive-source-badge\"${attr(\"title\", archiveTitle())} class=\"rounded-full border border-teal-900 bg-teal-950/60 px-2.5 py-1 text-xs font-medium text-teal-300\">local archive</span>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\tEndpointBadge($$renderer, {\n\t\t\t\tendpoint,\n\t\t\t\tcredentials: null\n\t\t\t});\n\t\t}\n\t\t$$renderer.push(`<!--]--> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tRangeControls($$renderer, {\n\t\t\tmode,\n\t\t\trange,\n\t\t\tfrom: windowFrom,\n\t\t\tto: windowTo,\n\t\t\tloading: rangeLoading,\n\t\t\tdisabled: selectedGroup() === null,\n\t\t\tliveDisabled: source === \"archive\",\n\t\t\tonApply: applyRange\n\t\t});\n\t\t$$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\">`);\n\t\tSourceControls($$renderer, {\n\t\t\tsource,\n\t\t\tarchiveAvailable: archiveAvailable(),\n\t\t\tarchivePath: archivePath(),\n\t\t\tonChange: changeSource\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tRegionSelect($$renderer, {\n\t\t\tregions,\n\t\t\tvalue: region,\n\t\t\tonchange: changeRegion\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tLogGroupList($$renderer, {\n\t\t\tgroups,\n\t\t\tsource,\n\t\t\tregion,\n\t\t\tselected: selectedGroups,\n\t\t\tloading: groupsLoading,\n\t\t\terror: groupsError,\n\t\t\tonSelect: selectGroup,\n\t\t\tonToggle: toggleGroup,\n\t\t\tonRefresh: refreshGroups\n\t\t});\n\t\t$$renderer.push(`<!----></div> `);\n\t\tColumnResizer($$renderer, {\n\t\t\tlabel: \"Resize group list\",\n\t\t\twidth: sidebarPx,\n\t\t\tmin: sidebarMinPx,\n\t\t\tmax: sidebarMaxPx(),\n\t\t\ttestId: \"sidebar-resizer\",\n\t\t\tonChange: (next) => sidebarPx = next,\n\t\t\tonCommit: () => saveSidebarWidth(),\n\t\t\tclass: \"hidden lg:block lg:w-2\"\n\t\t});\n\t\t$$renderer.push(`<!----> <div class=\"flex min-h-0 min-w-0 flex-1 flex-col\">`);\n\t\tEventScatterPanel($$renderer, {\n\t\t\tpoints: seriesPoints,\n\t\t\tfrom: chartWindow().from,\n\t\t\tto: chartWindow().to,\n\t\t\tbucketMs: chartBucketMs(chartWindow().from, chartWindow().to),\n\t\t\tgroups: selectedGroups,\n\t\t\tbyRequest: groupRequests,\n\t\t\tloading: seriesLoading,\n\t\t\tonBrush: applyBrush\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tLogViewer($$renderer, {\n\t\t\tlines: stream.lines,\n\t\t\tstatus: stream.status,\n\t\t\terror: stream.lastError,\n\t\t\tmode,\n\t\t\tready: stream.ready,\n\t\t\tendReason: stream.endReason,\n\t\t\tarchivePath: archivePath(),\n\t\t\tregion,\n\t\t\tgroup: selectedGroup(),\n\t\t\tgroups: selectedGroups,\n\t\t\tlevel: levelFilter,\n\t\t\tonLevelChange: (next) => levelFilter = next,\n\t\t\tgroupRequests,\n\t\t\tonGroupToggle: toggleGroupRequests,\n\t\t\tfilter,\n\t\t\tpaused: stream.paused,\n\t\t\tautoScroll,\n\t\t\tpendingCount: stream.pendingCount,\n\t\t\tdroppedCount: stream.droppedCount,\n\t\t\treceivedCount: stream.receivedCount,\n\t\t\tonFilterChange: (value) => filter = value,\n\t\t\tonPauseToggle: () => stream.togglePause(),\n\t\t\tonClear: () => stream.clear(),\n\t\t\tonAutoScrollToggle: () => autoScroll = !autoScroll\n\t\t});\n\t\t$$renderer.push(`<!----></div></div>`);\n\t});\n}\n//#endregion\nexport { _page as default };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_page.svelte.js-BwuzE25P.js","sources":["../../../../../.svelte-kit/output/server/entries/pages/_page.svelte.js"],"sourcesContent":["import \"../../chunks/index-server.js\";\nimport { D as escape_html, T as clsx, a as bind_props, f as stringify, n as attr_style, o as derived, s as ensure_array_like, t as attr_class, w as attr } from \"../../chunks/server.js\";\nimport { c as eventKey, f as levelColorClass, g as tokenizeJson, h as formatLogMessage, i as detectLevel, l as filterByLevel, r as LogStore, s as effectiveLevel, u as filterEvents } from \"../../chunks/log-buffer.js\";\nimport { t as REGION_CODES } from \"../../chunks/regions.js\";\nimport { n as PRESET_LABELS, o as presetLabel, r as describeWindow, s as toDateTimeLocal, t as HISTORIC_PRESETS } from \"../../chunks/time-range.js\";\nimport { n as replaceState, t as page } from \"../../chunks/state.js\";\nimport { a as isMeaningfulBrush, i as groupByLevel, n as SERIES_LEVEL_COLOR, o as requestRows, r as bucketEvents, t as LEVEL_LABELS } from \"../../chunks/series-buckets.js\";\n//#region src/lib/format.ts\n/**\n* Formatting helpers for the watch-stream UI. Every function here is pure so it can be unit\n* tested without a DOM.\n*/\n/** Placeholder shown when a timestamp is missing or not a number. */\nvar EMPTY_TIME = \"--:--:--.---\";\n/** Left-pads a non-negative integer with zeros. */\nfunction pad(value, size = 2) {\n\treturn String(Math.trunc(Math.abs(value))).padStart(size, \"0\");\n}\n/**\n* Formats an epoch-millisecond timestamp as `HH:MM:SS.mmm` in UTC.\n* UTC keeps rendering stable no matter where the browser runs.\n*/\nfunction formatTime(timestamp) {\n\tif (typeof timestamp !== \"number\" || !Number.isFinite(timestamp)) return EMPTY_TIME;\n\tconst date = new Date(timestamp);\n\tif (Number.isNaN(date.getTime())) return EMPTY_TIME;\n\treturn `${`${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`}.${pad(date.getUTCMilliseconds(), 3)}`;\n}\n/** Formats an epoch-millisecond timestamp as an ISO 8601 string, for tooltips. */\nfunction formatTimestamp(timestamp) {\n\tif (typeof timestamp !== \"number\" || !Number.isFinite(timestamp)) return \"—\";\n\tconst date = new Date(timestamp);\n\tif (Number.isNaN(date.getTime())) return \"—\";\n\treturn date.toISOString();\n}\n/** Formats a number with at most one decimal, dropping a trailing `.0`. */\nfunction trimZero(value) {\n\tconst fixed = value >= 100 ? value.toFixed(0) : value.toFixed(1);\n\treturn fixed.endsWith(\".0\") ? fixed.slice(0, -2) : fixed;\n}\n/**\n* Formats a duration as `250ms`, `1.2s`, `2m 5s` or `1h 2m`, for a request's span.\n* Sub-second spans keep a millisecond value, because that is what a slow request\n* is measured in; longer spans stop at the first two units a reader needs.\n*/\nfunction formatSpan(ms) {\n\tif (typeof ms !== \"number\" || !Number.isFinite(ms) || ms < 0) return \"—\";\n\tconst total = Math.round(ms);\n\tif (total < 1e3) return `${total}ms`;\n\tconst seconds = total / 1e3;\n\tif (seconds < 60) return `${trimZero(seconds)}s`;\n\tconst wholeSeconds = Math.floor(seconds);\n\tconst minutes = Math.floor(wholeSeconds / 60);\n\tconst restSeconds = wholeSeconds % 60;\n\tif (minutes < 60) return restSeconds === 0 ? `${minutes}m` : `${minutes}m ${restSeconds}s`;\n\tconst hours = Math.floor(minutes / 60);\n\tconst restMinutes = minutes % 60;\n\treturn restMinutes === 0 ? `${hours}h` : `${hours}h ${restMinutes}m`;\n}\n/**\n* Formats a byte count as `B`, `KiB`, `MiB` or `GiB`, with at most one decimal for scaled units.\n* Returns {@link EMPTY_VALUE} for a missing or negative value.\n*/\nfunction formatBytes(bytes) {\n\tif (typeof bytes !== \"number\" || !Number.isFinite(bytes) || bytes < 0) return \"—\";\n\tif (bytes < 1024) return `${Math.trunc(bytes)} B`;\n\tconst units = [\n\t\t\"KiB\",\n\t\t\"MiB\",\n\t\t\"GiB\",\n\t\t\"TiB\"\n\t];\n\tlet value = bytes / 1024;\n\tlet unit = units[0];\n\tfor (let index = 1; index < units.length && value >= 1024; index += 1) {\n\t\tvalue /= 1024;\n\t\tunit = units[index];\n\t}\n\treturn `${trimZero(value)} ${unit}`;\n}\n/** Formats an integer count with thousands separators, for example `1,234`. */\nfunction formatCount(value) {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.trunc(value);\n\treturn (rounded < 0 ? \"-\" : \"\") + String(Math.abs(rounded)).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n/**\n* Names the emulator behind a CloudWatch Logs endpoint override.\n* Returns `null` when the endpoint is empty, which means real AWS.\n*/\nfunction emulatorLabel(endpoint) {\n\tconst trimmed = typeof endpoint === \"string\" ? endpoint.trim() : \"\";\n\tif (trimmed === \"\") return null;\n\tconst lower = trimmed.toLowerCase();\n\tif (lower.includes(\"floci\")) return \"floci\";\n\tif (lower.includes(\"localstack\")) return \"localstack\";\n\tif (endpointPort(trimmed) === \"4566\") return \"floci\";\n\treturn \"local emulator\";\n}\n/** Reads the port of an endpoint URL, or `null` when it cannot be parsed. */\nfunction endpointPort(endpoint) {\n\treturn parseEndpoint(endpoint)?.port || null;\n}\n/** Parses an endpoint URL, returning `null` when it is not a URL. */\nfunction parseEndpoint(endpoint) {\n\ttry {\n\t\treturn new URL(endpoint);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Builds the header badge text for an endpoint, for example `floci http://localhost:4566`.\n* Returns `null` when the app talks to real AWS.\n*/\nfunction describeEndpoint(endpoint) {\n\tconst trimmed = typeof endpoint === \"string\" ? endpoint.trim() : \"\";\n\tif (trimmed === \"\") return null;\n\tconst label = emulatorLabel(trimmed);\n\tif (label === null) return null;\n\treturn (parseEndpoint(trimmed)?.hostname.toLowerCase() ?? trimmed.toLowerCase()).startsWith(label) ? trimmed : `${label} ${trimmed}`;\n}\n//#endregion\n//#region src/lib/components/EndpointBadge.svelte\nfunction EndpointBadge($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Resolved CloudWatch Logs endpoint, or `null` when talking to real AWS. */\n\t\t/** Credential mode from `GET /api/health`, or `null` when it is unknown. */\n\t\tlet { endpoint = null, credentials = null } = $$props;\n\t\t/** Badge text, for example `floci http://localhost:4566`; `null` hides the badge. */\n\t\tlet label = derived(() => describeEndpoint(endpoint));\n\t\t/** True when the server fell back to the emulator's throwaway credentials. */\n\t\tlet emulatorDefault = derived(() => credentials === \"emulator-default\");\n\t\tlet hint = derived(() => emulatorDefault() ? \"Local emulator endpoint - using floci's throwaway credentials (no ambient AWS credentials found)\" : \"Local emulator endpoint\");\n\t\tif (label() !== null) {\n\t\t\t$$renderer.push(`<!--[0--><span class=\"inline-flex items-center gap-1.5\"${attr(\"title\", hint())}><span data-testid=\"endpoint-badge\"${attr(\"title\", hint())} class=\"rounded-full border border-violet-900 bg-violet-950/60 px-2.5 py-1 text-xs font-medium text-violet-300\">${escape_html(label())}</span> `);\n\t\t\tif (emulatorDefault()) $$renderer.push(`<!--[0--><span data-testid=\"credentials-hint\" class=\"text-[0.6875rem] text-neutral-500\">dev creds</span>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}\n//#endregion\n//#region src/lib/resize.ts\n/**\n* Pure helpers for the drag-resizable columns in the UI.\n*\n* The components own the pointer events and the persistence; everything that can\n* be reasoned about without a DOM lives here so it can be unit tested.\n*/\n/** `localStorage` keys, prefixed so they are easy to spot in a browser. */\nvar STORAGE_KEYS = {\n\tsidebarWidth: \"watch-stream:sidebar-width\",\n\tprefixWidth: \"watch-stream:prefix-width\",\n\twrap: \"watch-stream:wrap\",\n\tjsonView: \"watch-stream:json-view\",\n\tchartOpen: \"watch-stream:chart-open\",\n\tgroupRequests: \"watch-stream:group-requests\"\n};\n/** Default width of the group-list pane, in rem (matches the original layout). */\nvar SIDEBAR_WIDTH = {\n\tdefaultRem: 22,\n\tminRem: 16,\n\tmaxVw: 44\n};\n/** Width constraints for the log line prefix (timestamp + stream name). */\nvar PREFIX_WIDTH = {\n\tdefaultRem: 14,\n\tminRem: 4,\n\tmaxRem: 40\n};\n/** Converts a CSS pixel width to `rem` for use in a Tailwind `style` attribute. */\nfunction pxToRem(px, rootFontSize = 16) {\n\tconst rem = px / rootFontSize;\n\treturn `${Number.isInteger(rem) ? rem : Number(rem.toFixed(3))}rem`;\n}\n/** Parses a `rem` value into CSS pixels. */\nfunction remToPx(rem, rootFontSize = 16) {\n\treturn rem * rootFontSize;\n}\n//#endregion\n//#region src/lib/components/EventScatterPanel.svelte\nfunction EventScatterPanel($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/**\n\t\t* The chart panel above the log view: a header that is always cheap to render\n\t\t* (title, totals, per-level legend) and the chart below it, loaded on demand.\n\t\t*\n\t\t* The charting library is imported dynamically and only once the panel is open,\n\t\t* so layerchart never delays the first paint of the log view. The header stays\n\t\t* available while the chart chunk is still loading, and the whole panel\n\t\t* collapses to that header so a user who does not want the chart can reclaim\n\t\t* the space - the choice is remembered.\n\t\t*/\n\t\t/** Props the lazily loaded chart takes. */\n\t\t/** The chart component, as its module exports it. */\n\t\t/** Fetches the chart module; injectable so tests need no chunk fetch. */\n\t\t/**\n\t\t* The real loader: a dynamic import, which is what keeps layerchart out of the\n\t\t* initial bundle. It only runs in the browser, and only once the panel is open.\n\t\t*/\n\t\tconst loadChartModule = () => import(\"../../chunks/EventScatter.js\");\n\t\t/** Bucketed counts for the window. */\n\t\t/** Inclusive start of the window, epoch ms. */\n\t\t/** Inclusive end of the window, epoch ms. */\n\t\t/** Bucket width in ms, shown in the summary. */\n\t\t/** Log groups the points cover, for the summary. */\n\t\t/** True when one mark stands for one request rather than one line. */\n\t\t/** True while the counts are being fetched. */\n\t\t/** Called with the brushed range when the drag ends, or `null` on clear. */\n\t\t/** Chart height in px. */\n\t\t/** Start open, which is also what the first visit uses. */\n\t\t/** Chart module loader; defaults to the dynamic import. */\n\t\tlet { points = [], from = 0, to = 0, bucketMs = 0, groups = [], loading = false, byRequest = true, onBrush, height = 200, open = true, loadChart = loadChartModule } = $$props;\n\t\tlet expanded = derived(() => open);\n\t\t/**\n\t\t* Bumped by {@link reset} to remount the chart. Remounting is how the brush is\n\t\t* cleared without holding an imperative handle on a lazily loaded component.\n\t\t*/\n\t\tlet chartKey = 0;\n\t\t/** Totals and labels per level, in severity order. */\n\t\tlet levelGroups = derived(() => groupByLevel(points));\n\t\t/** Total events drawn. */\n\t\tlet totalEvents = derived(() => levelGroups().reduce((sum, entry) => sum + entry.events, 0));\n\t\t/** Buckets drawn. */\n\t\tlet bucketCount = derived(() => new Set(points.map((point) => point.t)).size);\n\t\t/** True when there is something to draw. */\n\t\tlet hasPoints = derived(() => points.length > 0);\n\t\t/** What one mark stands for, which is what the totals count. */\n\t\tlet unit = derived(() => byRequest ? \"requests\" : \"events\");\n\t\t/** Clears the brush, for the host's Reset zoom control. */\n\t\tfunction reset() {\n\t\t\tchartKey += 1;\n\t\t\tonBrush?.(null);\n\t\t}\n\t\t$$renderer.push(`<section class=\"flex min-w-0 flex-col gap-1 rounded-lg border border-neutral-800 bg-neutral-950/60 p-2\" data-testid=\"event-scatter\" aria-label=\"Events over time\"><div class=\"flex flex-wrap items-center gap-x-3 gap-y-1 px-1 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 rounded-md border border-neutral-800 bg-neutral-900 px-2 py-0.5 font-semibold uppercase tracking-wider text-neutral-400 transition-colors hover:border-neutral-700 hover:text-neutral-200\"><span aria-hidden=\"true\">${escape_html(expanded() ? \"▾\" : \"▸\")}</span> Events over time</button> <span class=\"text-neutral-400\" data-testid=\"scatter-summary\">${escape_html(formatCount(totalEvents()))}\n\t\t\t${escape_html(unit())} in ${escape_html(formatCount(bucketCount()))} buckets</span> `);\n\t\tif (groups.length > 1) $$renderer.push(`<!--[0--><span class=\"text-neutral-500\" data-testid=\"scatter-groups\">across ${escape_html(groups.length)} groups</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <!--[-->`);\n\t\tconst each_array = ensure_array_like(levelGroups());\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet entry = each_array[$$index];\n\t\t\t$$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>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (loading && expanded()) $$renderer.push(`<!--[0--><span class=\"text-amber-300\" data-testid=\"scatter-loading\">counting…</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (expanded()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<!--[-1--><span class=\"ml-auto text-neutral-500\" data-testid=\"scatter-hint\">drag to zoom · click to clear</span>`);\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> `);\n\t\tif (expanded()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tif (hasPoints()) {\n\t\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t\t$$renderer.push(`<!--[-1--><div class=\"w-full animate-pulse rounded bg-neutral-900/60\"${attr_style(`height: ${stringify(height)}px`)}></div>`);\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t} else if (!loading) $$renderer.push(`<!--[2--><p class=\"px-1 py-6 text-xs text-neutral-500\" data-testid=\"scatter-empty\">No events in this window yet.</p>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></section>`);\n\t\tbind_props($$props, { reset });\n\t});\n}\n//#endregion\n//#region src/lib/components/ColumnResizer.svelte\nfunction ColumnResizer($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Accessible name, for example \"Resize group list\". */\n\t\t/** Current width in CSS pixels. */\n\t\t/** Lower bound in CSS pixels. */\n\t\t/** Upper bound in CSS pixels. */\n\t\t/** `data-testid` value. */\n\t\t/** Called on every pointer move and arrow key with the clamped width. */\n\t\t/** Called when a drag ends or an arrow key is handled, for persistence. */\n\t\t/** Extra classes, used for positioning. */\n\t\t/** Extra inline style, for example `left: 120px`. */\n\t\tlet { label, width, min, max, testId, onChange, onCommit, class: className = \"\", style = \"\" } = $$props;\n\t\t$$renderer.push(`<div role=\"separator\" aria-orientation=\"vertical\"${attr(\"aria-label\", label)}${attr(\"aria-valuemin\", min)}${attr(\"aria-valuemax\", max)}${attr(\"aria-valuenow\", Math.round(width))} tabindex=\"0\"${attr(\"title\", `${stringify(label)} (drag or use the arrow keys)`)}${attr(\"data-testid\", testId)}${attr_class(`cursor-col-resize touch-none bg-transparent hover:bg-sky-500/30 focus:bg-sky-500/50 focus:outline-none ${stringify(className)}`)}${attr_style(style)}></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/RangeControls.svelte\nfunction RangeControls($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Preset name when a preset is active, otherwise an empty string. */\n\t\t/** Custom bounds as epoch ms, or `null` when a preset/live window is active. */\n\t\t/** Active mode, owned by the page. */\n\t\t/** Active preset, owned by the page. */\n\t\t/** Active custom bounds as epoch ms, owned by the page. */\n\t\t/** True when no group is selected, so there is nothing to scope. */\n\t\t/** True while a historic window is being fetched. */\n\t\t/** True when the source cannot follow live events, such as the local archive. */\n\t\t/** Called when the user switches mode or applies a range. */\n\t\tlet { mode = \"live\", range = \"15m\", from = null, to = null, disabled = false, loading = false, liveDisabled = false, onApply } = $$props;\n\t\t/** Label shown on the custom chip. */\n\t\tlet customLabel = derived(() => mode === \"historic\" && range === \"\" && from !== null && to !== null ? `${toDateTimeLocal(from).replace(\"T\", \" \")} → ${toDateTimeLocal(to).replace(\"T\", \" \")}` : \"Custom…\");\n\t\t$$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> `);\n\t\tif (mode === \"historic\") {\n\t\t\t$$renderer.push(`<!--[0--><div class=\"flex flex-wrap items-center gap-1\" role=\"group\" aria-label=\"Historic range\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(HISTORIC_PRESETS);\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet preset = each_array[$$index];\n\t\t\t\t$$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>`);\n\t\t\t}\n\t\t\t$$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\"}`)}>${escape_html(customLabel())}</button></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (loading) $$renderer.push(`<!--[0--><span class=\"text-xs text-amber-300\" data-testid=\"range-loading\">loading window…</span>`);\n\t\telse if (mode === \"historic\" && range !== \"\") $$renderer.push(`<!--[1--><span class=\"text-xs text-neutral-500\">last ${escape_html(presetLabel(range))}</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div>`);\n\t});\n}\n//#endregion\n//#region src/lib/groups-client.ts\n/**\n* Browser-side fetch helpers for the watch-stream JSON API (`/api/health`, `/api/regions`,\n* `/api/log-groups`, `/api/archive`). Every helper throws {@link ApiError} on a non-2xx response so\n* the UI can show the API `error` message instead of an opaque failure.\n*/\n/** Region list used by the picker before (or instead of) `/api/regions`. */\nvar DEFAULT_REGIONS = REGION_CODES;\n/** Error carrying the parsed `ApiErrorBody` returned by the API. */\nvar ApiError = class extends Error {\n\t/** HTTP status, or `0` when the request never reached the server. */\n\tstatus;\n\t/** Optional machine-readable code from the API. */\n\tcode;\n\t/** Optional extra detail from the API. */\n\tdetails;\n\tconstructor(message, options = {}) {\n\t\tsuper(message, { cause: options.cause });\n\t\tthis.name = \"ApiError\";\n\t\tthis.status = options.status ?? 0;\n\t\tthis.code = options.code;\n\t\tthis.details = options.details;\n\t}\n};\n/** Reads a string field from an unknown JSON value. */\nfunction readField(value, key) {\n\tif (typeof value !== \"object\" || value === null) return void 0;\n\tconst field = value[key];\n\treturn typeof field === \"string\" ? field : void 0;\n}\n/** Extracts the API `error` message, falling back when the body has none. */\nfunction apiErrorMessage(value, fallback = \"Unexpected API error\") {\n\treturn readField(value, \"error\") ?? fallback;\n}\n/** Builds the `/api/log-groups` URL, including only the parameters that are set. */\nfunction buildLogGroupsUrl(query) {\n\tconst search = new URLSearchParams();\n\tif (query.region) search.set(\"region\", query.region);\n\tif (query.source) search.set(\"source\", query.source);\n\tif (query.prefix) search.set(\"prefix\", query.prefix);\n\tif (typeof query.limit === \"number\" && Number.isFinite(query.limit)) search.set(\"limit\", String(query.limit));\n\tconst suffix = search.toString();\n\treturn suffix === \"\" ? \"/api/log-groups\" : `/api/log-groups?${suffix}`;\n}\n/** Builds the `/api/series` URL for a query. */\nfunction buildSeriesUrl(query) {\n\tconst search = new URLSearchParams();\n\tif (query.region) search.set(\"region\", query.region);\n\tsearch.set(\"source\", \"archive\");\n\tconst groups = (query.groups ?? []).filter((name) => name.length > 0);\n\tif (groups.length > 0) search.set(\"groups\", groups.join(\",\"));\n\tif (typeof query.from === \"number\" && Number.isFinite(query.from)) search.set(\"from\", String(Math.round(query.from)));\n\tif (typeof query.to === \"number\" && Number.isFinite(query.to)) search.set(\"to\", String(Math.round(query.to)));\n\tconst levels = (query.levels ?? []).filter((level) => level.length > 0);\n\tif (levels.length > 0) search.set(\"level\", levels.join(\",\"));\n\tif (query.by === \"request\" || query.by === \"event\") search.set(\"by\", query.by);\n\tif (typeof query.bucketMs === \"number\" && Number.isFinite(query.bucketMs) && query.bucketMs > 0) search.set(\"bucket\", String(Math.round(query.bucketMs)));\n\treturn `/api/series?${search.toString()}`;\n}\n/** `GET /api/series` - bucketed event counts for the chart. */\nfunction fetchSeries(query) {\n\treturn getJson(buildSeriesUrl(query), query);\n}\n/** True for an abort, which is a normal way to cancel a request. */\nfunction isAbort(error) {\n\treturn error instanceof Error && error.name === \"AbortError\";\n}\n/** Performs a JSON request and maps failures onto {@link ApiError}. */\nasync function getJson(url, options) {\n\tconst fetchImpl = options.fetchImpl ?? fetch;\n\tlet response;\n\ttry {\n\t\tresponse = await fetchImpl(url, {\n\t\t\theaders: { accept: \"application/json\" },\n\t\t\tsignal: options.signal\n\t\t});\n\t} catch (cause) {\n\t\tif (isAbort(cause)) throw cause;\n\t\tthrow new ApiError(`Could not reach ${url}.`, { cause });\n\t}\n\tconst text = await response.text();\n\tlet body = null;\n\tif (text.trim() !== \"\") try {\n\t\tbody = JSON.parse(text);\n\t} catch {\n\t\tbody = null;\n\t}\n\tif (!response.ok) throw new ApiError(apiErrorMessage(body, `Request to ${url} failed with ${response.status}.`), {\n\t\tstatus: response.status,\n\t\tcode: readField(body, \"code\"),\n\t\tdetails: readField(body, \"details\")\n\t});\n\treturn body;\n}\n/**\n* `GET /api/log-groups` - log groups for a region, from CloudWatch or the local archive.\n*\n* The archive list needs no credentials and never reaches AWS.\n*/\nfunction fetchLogGroups(query) {\n\treturn getJson(buildLogGroupsUrl(query), query);\n}\n/** Message shown when a region has no log groups at all. */\nfunction noGroupsMessage(region) {\n\treturn `No log groups found in ${region}. Start floci and run \\`pnpm seed\\` to create sample groups.`;\n}\n/** Plain statement of what the archive source shows, used next to the toggle. */\nvar ARCHIVE_NOTE = \"Locally archived events - read from the local DuckDB file, no CloudWatch credentials, historic windows only.\";\n/** Tooltip for the archive indicator: what it shows and which file backs it. */\nfunction describeArchive(path) {\n\tconst trimmed = typeof path === \"string\" ? path.trim() : \"\";\n\tconst head = \"Locally archived events instead of live CloudWatch data\";\n\treturn trimmed === \"\" ? head : `${head} (${trimmed})`;\n}\n/** Message shown when the archive holds nothing for a region. */\nfunction noArchivedGroupsMessage(region) {\n\treturn `Nothing archived for ${region === \"\" ? \"this region\" : region} yet - stream a group from CloudWatch once and it will appear here.`;\n}\n/** Drops a trailing period so an appended sentence does not double up. */\nfunction trimSentence(text) {\n\treturn text.trim().replace(/\\.+$/, \"\");\n}\n/** Adds region context to a failed group list request. */\nfunction describeGroupsError(region, error) {\n\tif (error instanceof ApiError) {\n\t\tconst details = error.details ? ` ${error.details}` : \"\";\n\t\treturn `Could not list log groups in ${region}: ${trimSentence(error.message)}.${details}`;\n\t}\n\treturn `Could not reach the watch-stream API for ${region}. ${error instanceof Error && error.message !== \"\" ? error.message : String(error)}`;\n}\n/** Adds group and region context to a stream error payload. */\nfunction describeStreamError(region, group, message) {\n\treturn `${message} (${group === null || group === \"\" ? region : `${group} in ${region}`})`;\n}\n//#endregion\n//#region src/lib/components/LogGroupList.svelte\nfunction LogGroupList($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Groups returned for the active region. */\n\t\t/** Where the list came from; the archive list shows local counts instead of sizes. */\n\t\t/** Active region, used for context in the empty state. */\n\t\t/** Names of the groups currently being tailed; empty when none are selected. */\n\t\t/** API error message, shown instead of the list. */\n\t\t/** Row cap; defaults to {@link MAX_GROUP_ROWS}. */\n\t\t/** Called with the group name when a row is clicked, replacing the selection. */\n\t\t/** Called with the group name when its checkbox is toggled in or out of the selection. */\n\t\t/** Called when the refresh button is clicked. */\n\t\tlet { groups = [], source = \"cloudwatch\", region = \"\", selected = [], loading = false, error = null, maxRows = 500, onSelect, onToggle, onRefresh } = $$props;\n\t\tlet search = \"\";\n\t\t/** True when the list holds archived groups rather than live CloudWatch ones. */\n\t\tlet archived = derived(() => source === \"archive\");\n\t\t/** Badge text for a group: how many events the archive holds for it. */\n\t\tfunction archivedCount(group) {\n\t\t\treturn group.archivedEvents === void 0 ? null : `${formatCount(group.archivedEvents)} archived`;\n\t\t}\n\t\t/** `oldest -> newest` span of a group's archived events, or `null` when unknown. */\n\t\tfunction archivedSpan(group) {\n\t\t\tif (group.archivedOldest === void 0 || group.archivedNewest === void 0) return null;\n\t\t\treturn `${formatTimestamp(group.archivedOldest)} \\u2192 ${formatTimestamp(group.archivedNewest)}`;\n\t\t}\n\t\t/** Groups matching the search box, case-insensitively. */\n\t\tlet filtered = derived(() => groups.filter((group) => group.name.toLowerCase().includes(search.trim().toLowerCase())));\n\t\t/** Rows actually rendered, capped at `maxRows`. */\n\t\tlet visible = derived(() => filtered().slice(0, maxRows));\n\t\tlet truncated = derived(() => filtered().length > visible().length);\n\t\tlet query = derived(() => search.trim());\n\t\t/**\n\t\t* Selection as a flat list of names. `selected` is typed as a list, but callers that have not\n\t\t* migrated yet may still pass a single name (or `null`), so those are normalised here.\n\t\t*/\n\t\tfunction selectionList(value) {\n\t\t\tif (value === null || value === void 0) return [];\n\t\t\treturn Array.isArray(value) ? value : [value];\n\t\t}\n\t\tlet activeSelection = derived(() => selectionList(selected));\n\t\t/** True when `name` is part of the current (possibly multi-group) selection. */\n\t\tfunction isSelected(name) {\n\t\t\treturn activeSelection().includes(name);\n\t\t}\n\t\t/** Row styling, highlighting every group that is currently being tailed. */\n\t\tfunction rowTone(name) {\n\t\t\treturn 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\";\n\t\t}\n\t\t$$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\"><h2 class=\"text-sm font-semibold text-neutral-200\">${escape_html(archived() ? \"Archived groups\" : \"Log groups\")}</h2> <span class=\"text-xs text-neutral-500\" data-testid=\"group-count\">${escape_html(formatCount(filtered().length))} of ${escape_html(formatCount(groups.length))}</span> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (archived()) $$renderer.push(`<!--[0--><span 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\" data-testid=\"group-source-badge\">local</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> <button type=\"button\"${attr(\"disabled\", loading, true)} 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 disabled:cursor-not-allowed disabled:opacity-50\">${escape_html(loading ? \"Refreshing…\" : \"Refresh\")}</button></div> <div class=\"flex flex-col gap-1.5\"><label class=\"sr-only\" for=\"group-search\">Search log groups</label> <input id=\"group-search\" type=\"search\" placeholder=\"Search log groups\"${attr(\"value\", search)} class=\"w-full rounded-md border border-neutral-800 bg-neutral-900 px-2.5 py-1.5 text-sm text-neutral-100 outline-none transition-colors placeholder:text-neutral-600 hover:border-neutral-700 focus:border-sky-600\"/></div> `);\n\t\tif (error !== null && error !== \"\") $$renderer.push(`<!--[0--><p role=\"alert\" data-testid=\"group-error\" class=\"rounded-md border border-red-900 bg-red-950/50 px-3 py-2 text-xs leading-5 text-red-300\">${escape_html(error)}</p>`);\n\t\telse if (loading && groups.length === 0) {\n\t\t\t$$renderer.push(`<!--[1--><div class=\"flex flex-col gap-2\" data-testid=\"group-loading\" aria-busy=\"true\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(Array.from({ length: 5 }));\n\t\t\tfor (let index = 0, $$length = each_array.length; index < $$length; index++) {\n\t\t\t\teach_array[index];\n\t\t\t\t$$renderer.push(`<div class=\"h-5 animate-pulse rounded bg-neutral-800/80\"></div>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--> <p class=\"text-xs text-neutral-500\">Loading log groups…</p></div>`);\n\t\t} 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>`);\n\t\telse 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>`);\n\t\telse {\n\t\t\t$$renderer.push(`<!--[-1--><ul class=\"flex min-h-0 flex-1 flex-col gap-1 overflow-y-auto pr-1\"><!--[-->`);\n\t\t\tconst each_array_1 = ensure_array_like(visible());\n\t\t\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\t\t\tlet group = each_array_1[$$index_1];\n\t\t\t\t$$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=\"truncate font-mono\">${escape_html(group.name)}</span> `);\n\t\t\t\tif (archived()) {\n\t\t\t\t\t$$renderer.push(`<!--[0--><span class=\"flex shrink-0 items-center gap-1.5\">`);\n\t\t\t\t\tif (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>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> `);\n\t\t\t\t\tif (archivedSpan(group) !== null) $$renderer.push(`<!--[0--><span class=\"hidden text-[0.6875rem] text-neutral-500 xl:inline\" data-testid=\"group-archived-span\">${escape_html(archivedSpan(group))}</span>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--></span>`);\n\t\t\t\t} 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>`);\n\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--></button></li>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></ul> `);\n\t\t\tif (truncated()) $$renderer.push(`<!--[0--><p class=\"text-[0.6875rem] text-neutral-500\" data-testid=\"group-truncated\">Showing first ${escape_html(formatCount(maxRows))} of ${escape_html(formatCount(filtered().length))} groups.</p>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></section>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/StatusBadge.svelte\nfunction StatusBadge($$renderer, $$props) {\n\t/** Connection status reported by the log stream. */\n\tlet { status } = $$props;\n\t/** Pill text per status. */\n\tconst LABELS = {\n\t\tidle: \"idle\",\n\t\tconnecting: \"connecting\",\n\t\tlive: \"live\",\n\t\treconnecting: \"reconnecting\",\n\t\terror: \"error\",\n\t\tended: \"ended\"\n\t};\n\t/** Pill colours per status. */\n\tconst TONES = {\n\t\tidle: \"border-neutral-700 bg-neutral-800/60 text-neutral-400\",\n\t\tconnecting: \"border-sky-900 bg-sky-950/70 text-sky-300\",\n\t\tlive: \"border-emerald-900 bg-emerald-950/70 text-emerald-300\",\n\t\treconnecting: \"border-amber-900 bg-amber-950/70 text-amber-300\",\n\t\terror: \"border-red-900 bg-red-950/70 text-red-300\",\n\t\tended: \"border-neutral-700 bg-neutral-800/60 text-neutral-400\"\n\t};\n\t/** Dot colours per status. */\n\tconst DOTS = {\n\t\tidle: \"bg-neutral-500\",\n\t\tconnecting: \"bg-sky-400 animate-pulse\",\n\t\tlive: \"bg-emerald-400\",\n\t\treconnecting: \"bg-amber-400 animate-pulse\",\n\t\terror: \"bg-red-400\",\n\t\tended: \"bg-neutral-500\"\n\t};\n\tlet tone = derived(() => TONES[status]);\n\tlet dot = derived(() => DOTS[status]);\n\tlet text = derived(() => LABELS[status]);\n\t$$renderer.push(`<span data-testid=\"status-badge\"${attr(\"data-status\", status)}${attr_class(`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium ${stringify(tone())}`)}><span${attr_class(`size-1.5 rounded-full ${stringify(dot())}`)} aria-hidden=\"true\"></span> ${escape_html(text())}</span>`);\n}\n//#endregion\n//#region src/lib/components/LogViewer.svelte\nfunction LogViewer($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Lines held by the client buffer, oldest first. */\n\t\t/** Connection status. */\n\t\t/** Last stream error, or `null`. */\n\t\t/** Active region, used for error and empty-state context. */\n\t\t/** Group being tailed, or `null` when nothing is selected. */\n\t\t/** Client-side text filter, controlled by the parent. */\n\t\t/** True while the visible buffer is frozen. */\n\t\t/** True when new lines scroll the view. */\n\t\t/** Lines held back while paused. */\n\t\t/** Lines dropped by the cap. */\n\t\t/** Total events received since the last reset. */\n\t\t/** Active tail mode, used for the window chip. */\n\t\t/** Last `ready` payload, which describes the window the server is scanning. */\n\t\t/** Reason the server ended the stream, for example `window-complete`. */\n\t\t/** Database file behind the local archive, shown in the archive tooltip. */\n\t\t/** Log groups in the view; more than one adds a group column. */\n\t\t/**\n\t\t* Active level filter. Leave it undefined to let the viewer own the filter;\n\t\t* pass a value (including `null`) to control it from outside, which is how\n\t\t* the chart above stays in step with the chips.\n\t\t*/\n\t\t/** Called when the level filter changes while it is controlled. */\n\t\t/**\n\t\t* Group lines that share a request id into one row, opened on demand. On by\n\t\t* default, and owned by the page so the chart counts the same requests.\n\t\t*/\n\t\t/** Called when the grouping toggle is pressed. */\n\t\tlet { lines = [], status = \"idle\", error = null, region = \"\", group = null, filter = \"\", paused = false, autoScroll = true, pendingCount = 0, droppedCount = 0, receivedCount = 0, mode = \"live\", ready = null, endReason = null, archivePath = null, groups = [], level = void 0, onLevelChange, groupRequests = true, onGroupToggle, onFilterChange, onPauseToggle, onClear, onAutoScrollToggle } = $$props;\n\t\tconst TIMESTAMP_COLUMN_PX = remToPx(7.5);\n\t\tconst ROW_PADDING_PX = remToPx(.75);\n\t\tconst ROW_GAP_PX = remToPx(.5);\n\t\tconst PREFIX_MIN_PX = remToPx(PREFIX_WIDTH.minRem);\n\t\tconst PREFIX_MAX_PX = remToPx(PREFIX_WIDTH.maxRem);\n\t\tconst PREFIX_DEFAULT_PX = remToPx(PREFIX_WIDTH.defaultRem);\n\t\t/** Persists a preference; failures are ignored (private mode, quota). */\n\t\tfunction writePref(key, value) {\n\t\t\ttry {\n\t\t\t\tif (typeof localStorage === \"undefined\") return;\n\t\t\t\tlocalStorage.setItem(key, value);\n\t\t\t} catch {}\n\t\t}\n\t\t/** View preferences, restored in `onMount` so SSR output stays deterministic. */\n\t\tlet wrapLines = false;\n\t\tlet jsonView = true;\n\t\tlet prefixPx = PREFIX_DEFAULT_PX;\n\t\t/** One rendered row, pre-formatted so the template stays declarative. */\n\t\t/**\n\t\t* Payload found inside the raw line, used when pretty-printing is off and\n\t\t* the row is expanded. `null` when the line carries no JSON.\n\t\t*/\n\t\t/** Log group the line came from, when the payload carries one. */\n\t\t/** Detected level, or `null` when the line carried no signal. */\n\t\t/** Level the viewer owns when the parent does not control it. */\n\t\tlet ownLevelFilter = null;\n\t\t/** Active level filter: the parent's when given, otherwise the viewer's. */\n\t\tlet levelFilter = derived(() => level === void 0 ? ownLevelFilter : level);\n\t\t/** The four levels offered as filter chips, in severity order. */\n\t\tconst LEVEL_CHIPS = [\n\t\t\t{\n\t\t\t\tlevel: \"error\",\n\t\t\t\tlabel: \"Error\",\n\t\t\t\tactiveClass: \"border-red-800 bg-red-950/50 text-red-300\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tlabel: \"Warn\",\n\t\t\t\tactiveClass: \"border-amber-800 bg-amber-950/40 text-amber-300\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlevel: \"info\",\n\t\t\t\tlabel: \"Info\",\n\t\t\t\tactiveClass: \"border-neutral-700 bg-neutral-800 text-neutral-100\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tlabel: \"Debug\",\n\t\t\t\tactiveClass: \"border-neutral-700 bg-neutral-800 text-neutral-400\"\n\t\t\t}\n\t\t];\n\t\t/** Lines matching the text filter and the level filter. */\n\t\tlet visible = derived(() => filterByLevel(filterEvents(lines, filter), levelFilter()));\n\t\t/** How many lines of each level are loaded, including `unknown`. */\n\t\tlet levelCounts = derived(() => {\n\t\t\tconst counts = {\n\t\t\t\terror: 0,\n\t\t\t\twarn: 0,\n\t\t\t\tinfo: 0,\n\t\t\t\tdebug: 0,\n\t\t\t\tunknown: 0\n\t\t\t};\n\t\t\tfor (const event of lines) {\n\t\t\t\tconst rowLevel = effectiveLevel(event);\n\t\t\t\tcounts[rowLevel ?? \"unknown\"] = (counts[rowLevel ?? \"unknown\"] ?? 0) + 1;\n\t\t\t}\n\t\t\treturn counts;\n\t\t});\n\t\t/** Presentation rows for the visible lines, one per line in buffer order. */\n\t\tlet lineRows = derived(() => visible().map((event, index) => {\n\t\t\tconst rowLevel = event.level !== void 0 ? event.level : detectLevel(event.message);\n\t\t\tconst formatted = formatLogMessage(event.message, { prettyJson: jsonView });\n\t\t\tconst levelClass = levelColorClass(rowLevel);\n\t\t\treturn {\n\t\t\t\tkey: eventKey(event, index),\n\t\t\t\ttime: formatTime(event.timestamp),\n\t\t\t\ttimestamp: formatTimestamp(event.timestamp),\n\t\t\t\tstreamName: event.streamName,\n\t\t\t\tgroup: event.group ?? null,\n\t\t\t\tmessage: formatted.text,\n\t\t\t\ttokens: formatted.isJson ? tokenizeJson(formatted.text) : null,\n\t\t\t\texpandable: null,\n\t\t\t\tlevel: rowLevel,\n\t\t\t\tlevelClass\n\t\t\t};\n\t\t}));\n\t\t/**\n\t\t* One row of the list: a line, or a request that holds its lines.\n\t\t*\n\t\t* A request row carries everything the header shows, so the template stays\n\t\t* declarative and the list never re-formats a line it already formatted.\n\t\t*/\n\t\t/** Request id every line in the group carries. */\n\t\t/** Clock time of the first line, and its full timestamp for the tooltip. */\n\t\t/** Number of lines in the group. */\n\t\t/** First to last line, as `1.2s`. */\n\t\t/** Most critical level in the group. */\n\t\t/** Log group and stream, when every line in the request shares them. */\n\t\t/** Worst line, trimmed to one short line for the collapsed row. */\n\t\t/** Longest preview kept for a collapsed request, in characters. */\n\t\tconst PREVIEW_LENGTH = 160;\n\t\t/** Prefixes a formatted line row with its kind. */\n\t\tfunction asLine(row) {\n\t\t\treturn {\n\t\t\t\tkind: \"line\",\n\t\t\t\t...row\n\t\t\t};\n\t\t}\n\t\t/** Builds the request header row from the lines it holds. */\n\t\tfunction requestDisplayRow(row) {\n\t\t\tconst children = row.request.events.map((entry) => lineRows()[entry.index]).filter((child) => child !== void 0);\n\t\t\tconst worstLevel = row.request.level;\n\t\t\tconst first = children[0];\n\t\t\treturn {\n\t\t\t\tkind: \"request\",\n\t\t\t\tkey: row.key,\n\t\t\t\tid: row.request.id,\n\t\t\t\ttime: first?.time ?? \"\",\n\t\t\t\ttimestamp: first?.timestamp ?? \"\",\n\t\t\t\tcount: children.length,\n\t\t\t\tspan: formatSpan(row.request.last - row.request.first),\n\t\t\t\tlevel: worstLevel,\n\t\t\t\tlevelLabel: LEVEL_LABELS[worstLevel],\n\t\t\t\tlevelClass: levelColorClass(worstLevel === \"unknown\" ? null : worstLevel),\n\t\t\t\tgroup: sharedField(children.map((child) => child.group)),\n\t\t\t\tstreamName: sharedField(children.map((child) => child.streamName)),\n\t\t\t\tpreview: requestPreview(row.request),\n\t\t\t\tchildren\n\t\t\t};\n\t\t}\n\t\t/** The value every entry shares, or `null` when they differ. */\n\t\tfunction sharedField(values) {\n\t\t\tconst first = values[0];\n\t\t\tif (first === null || first === void 0) return null;\n\t\t\treturn values.every((value) => value === first) ? first : null;\n\t\t}\n\t\t/**\n\t\t* One short line for a collapsed request: its most critical line, because that\n\t\t* is the line that explains why the request is coloured the way it is.\n\t\t*/\n\t\tfunction requestPreview(request) {\n\t\t\tconst worst = request.events.find((entry) => effectiveLevel(visible()[entry.index] ?? { message: \"\" }) === request.level) ?? request.events[0];\n\t\t\tconst [firstLine = \"\"] = (visible()[worst?.index ?? -1]?.message ?? \"\").split(\"\\n\");\n\t\t\treturn firstLine.replace(/\\s+/g, \" \").trim().slice(0, PREVIEW_LENGTH);\n\t\t}\n\t\t/** Rows the list renders: grouped by request when the preference is on. */\n\t\tlet displayRows = derived(() => {\n\t\t\tif (!groupRequests) return lineRows().map(asLine);\n\t\t\tconst rows = [];\n\t\t\tfor (const row of requestRows(visible())) {\n\t\t\t\tif (row.kind === \"line\") {\n\t\t\t\t\trows.push(asLine(lineRows()[row.index]));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (row.request.events.length === 1) {\n\t\t\t\t\tconst only = lineRows()[row.request.events[0]?.index ?? -1];\n\t\t\t\t\tif (only !== void 0) rows.push(asLine(only));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\trows.push(requestDisplayRow(row));\n\t\t\t}\n\t\t\treturn rows;\n\t\t});\n\t\t/** True when the list is showing request rows. */\n\t\tlet grouped = derived(() => displayRows().some((row) => row.kind === \"request\"));\n\t\t/** Requests in view, shown next to the line count while grouping. */\n\t\tlet requestCount = derived(() => displayRows().filter((row) => row.kind === \"request\").length);\n\t\t/** Keeps the newest line in view while auto-scroll is on (vertical only). */\n\t\t/** Error text with the group and region context. */\n\t\tlet errorText = derived(() => error === null ? null : describeStreamError(region, group, error.message));\n\t\t/** True when the ready frame says the events come from the local archive. */\n\t\tlet archived = derived(() => ready?.source === \"archive\");\n\t\t/**\n\t\t* Status the badge shows. The archive has no live tail: it replays a fixed window and ends by\n\t\t* itself, so its connecting/live/reconnecting states would all be misleading.\n\t\t*/\n\t\tlet displayStatus = derived(() => archived() && (status === \"connecting\" || status === \"live\" || status === \"reconnecting\") ? \"idle\" : status);\n\t\t/** Tooltip of the archive indicator, naming the database file it reads. */\n\t\tlet archiveTitle = derived(() => describeArchive(archivePath));\n\t\t/** Body text when there is nothing to render. */\n\t\tlet emptyText = derived(() => group === null || group === \"\" ? \"Select a log group to start tailing.\" : filter.trim() !== \"\" ? \"No lines match the filter.\" : archived() ? `No archived events for ${group} in this window.` : `Waiting for events from ${group}\\u2026`);\n\t\t/** Auto-scroll button colour. */\n\t\tlet autoScrollTone = derived(() => autoScroll ? \"text-sky-300\" : \"text-neutral-400\");\n\t\t/** Chip describing the active window. */\n\t\tlet windowSummary = derived(() => describeWindow(ready, Date.now()));\n\t\t/** True when a historic scan finished on its own. */\n\t\tlet windowComplete = derived(() => mode === \"historic\" && endReason === \"window-complete\");\n\t\t/** Wrap toggle colour. */\n\t\tlet wrapTone = derived(() => \"text-neutral-400\");\n\t\t/** JSON toggle colour. */\n\t\tlet jsonTone = derived(() => \"text-sky-300\");\n\t\t/** Grouping toggle colour. */\n\t\tlet groupTone = derived(() => groupRequests ? \"text-sky-300\" : \"text-neutral-400\");\n\t\t/** Rows fill the window when wrapping, and grow to their content otherwise. */\n\t\tlet listClass = derived(() => \"w-max min-w-full\");\n\t\t/** Message cell: wrapped text or a single long line that scrolls sideways. */\n\t\tlet messageClass = derived(() => \"whitespace-pre\");\n\t\t/** Left edge of the prefix resize handle, in pixels from the scrolled content edge. */\n\t\tlet handleLeft = derived(() => ROW_PADDING_PX + TIMESTAMP_COLUMN_PX + ROW_GAP_PX + prefixPx);\n\t\t/** Prefix column width as a CSS length. */\n\t\tlet prefixStyle = derived(() => `max-width: ${pxToRem(prefixPx)}`);\n\t\t/** Rows the user has opened, keyed by row key. */\n\t\tlet expandedRows = {};\n\t\t/** True when a row is open. */\n\t\tfunction isExpanded(key) {\n\t\t\treturn expandedRows[key] === true;\n\t\t}\n\t\t/** Colour for a JSON token, keeping punctuation and whitespace quiet. */\n\t\tfunction tokenClass(type) {\n\t\t\tswitch (type) {\n\t\t\t\tcase \"key\": return \"text-sky-300\";\n\t\t\t\tcase \"string\": return \"text-emerald-300\";\n\t\t\t\tcase \"number\": return \"text-amber-300\";\n\t\t\t\tcase \"boolean\": return \"text-fuchsia-300\";\n\t\t\t\tcase \"null\": return \"text-neutral-500\";\n\t\t\t\tcase \"punctuation\": return \"text-neutral-600\";\n\t\t\t\tdefault: return \"\";\n\t\t\t}\n\t\t}\n\t\t/** Persists the current prefix width. */\n\t\tfunction savePrefixWidth() {\n\t\t\twritePref(STORAGE_KEYS.prefixWidth, String(Math.round(prefixPx)));\n\t\t}\n\t\t$$renderer.push(`<section class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-lg border border-neutral-800 bg-neutral-950\"><div class=\"flex flex-wrap items-center gap-x-3 gap-y-2 border-b border-neutral-800 bg-neutral-900/40 px-3 py-2\">`);\n\t\tStatusBadge($$renderer, { status: displayStatus() });\n\t\t$$renderer.push(`<!----> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <span class=\"text-xs text-neutral-400\" data-testid=\"visible-count\">${escape_html(formatCount(visible().length))} shown</span> `);\n\t\tif (grouped()) $$renderer.push(`<!--[0--><span class=\"text-xs text-neutral-400\" data-testid=\"request-count\">${escape_html(formatCount(requestCount()))} requests</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <span class=\"text-xs text-neutral-500\" data-testid=\"received-count\">${escape_html(formatCount(receivedCount))} received</span> `);\n\t\tif (pendingCount > 0) $$renderer.push(`<!--[0--><span class=\"text-xs text-amber-300\" data-testid=\"pending-count\">${escape_html(formatCount(pendingCount))} buffered</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (droppedCount > 0) $$renderer.push(`<!--[0--><span class=\"text-xs text-amber-300/80\" data-testid=\"dropped-count\">${escape_html(formatCount(droppedCount))} dropped</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$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\">${escape_html(windowSummary().label)}</span> `);\n\t\tif (windowSummary().clamped) $$renderer.push(`<!--[0--><span class=\"text-[0.6875rem] text-amber-400/80\" data-testid=\"window-clamped\">14-day limit</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (windowComplete()) $$renderer.push(`<!--[0--><span class=\"text-[0.6875rem] text-emerald-400/80\" data-testid=\"window-complete\">window complete</span>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"ml-auto flex flex-wrap items-center gap-2\"><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> <!--[-->`);\n\t\tconst each_array = ensure_array_like(LEVEL_CHIPS);\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet chip = each_array[$$index];\n\t\t\t$$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)} `);\n\t\t\tif ((levelCounts()[chip.level] ?? 0) > 0) $$renderer.push(`<!--[0--><span class=\"ml-1 opacity-70\">${escape_html(formatCount(levelCounts()[chip.level] ?? 0))}</span>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></button>`);\n\t\t}\n\t\t$$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> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <div class=\"min-h-0 min-w-0 flex-1 overflow-auto bg-neutral-950\" data-testid=\"log-scroller\">`);\n\t\tif (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>`);\n\t\telse 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>`);\n\t\telse {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\tfunction logLine($$renderer, row, child) {\n\t\t\t\tconst expandable = row.expandable !== null;\n\t\t\t\tconst open = expandable && isExpanded(row.key);\n\t\t\t\t$$renderer.push(`<li${attr_class(`flex flex-wrap items-baseline gap-2 ${child ? \"pl-8\" : \"px-3\"} py-0.5 hover:bg-neutral-900/60 ${listClass()} ${expandable ? \"cursor-pointer\" : \"\"}`)} data-testid=\"log-line\"${attr(\"data-request-child\", child ? \"true\" : void 0)}${attr(\"data-level\", row.level ?? \"unknown\")}${attr(\"data-expandable\", expandable ? \"true\" : void 0)}${attr(\"data-expanded\", open ? \"true\" : void 0)}${attr(\"role\", expandable ? \"button\" : void 0)}${attr(\"tabindex\", expandable ? 0 : void 0)}${attr(\"aria-expanded\", expandable ? open : void 0)}${attr(\"title\", expandable ? open ? \"Hide the JSON in this line\" : \"Show this line as JSON\" : void 0)}><span class=\"w-[7.5rem] shrink-0 text-neutral-500\"${attr(\"title\", row.timestamp)}>${escape_html(row.time)}</span> `);\n\t\t\t\tif (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>`);\n\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$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> `);\n\t\t\t\tif (expandable) $$renderer.push(`<!--[0--><span class=\"shrink-0 text-neutral-600\" aria-hidden=\"true\">${escape_html(open ? \"▾\" : \"▸\")}</span>`);\n\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--> <span${attr_class(`${messageClass()} ${stringify(row.levelClass)}`)} data-testid=\"log-message\">`);\n\t\t\t\tif (row.tokens !== null) {\n\t\t\t\t\t$$renderer.push(`<!--[0--><!--[-->`);\n\t\t\t\t\tconst each_array_1 = ensure_array_like(row.tokens);\n\t\t\t\t\tfor (let tokenIndex = 0, $$length = each_array_1.length; tokenIndex < $$length; tokenIndex++) {\n\t\t\t\t\t\tlet token = each_array_1[tokenIndex];\n\t\t\t\t\t\t$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t\t} else $$renderer.push(`<!--[-1-->${escape_html(row.message)}`);\n\t\t\t\t$$renderer.push(`<!--]--></span> `);\n\t\t\t\tif (open && row.expandable !== null) {\n\t\t\t\t\t$$renderer.push(`<!--[0--><span class=\"w-full whitespace-pre text-xs text-neutral-300\" data-testid=\"log-json-expanded\"><!--[-->`);\n\t\t\t\t\tconst each_array_2 = ensure_array_like(tokenizeJson(row.expandable));\n\t\t\t\t\tfor (let tokenIndex = 0, $$length = each_array_2.length; tokenIndex < $$length; tokenIndex++) {\n\t\t\t\t\t\tlet token = each_array_2[tokenIndex];\n\t\t\t\t\t\t$$renderer.push(`<span${attr_class(clsx(tokenClass(token.type)))}>${escape_html(token.text)}</span>`);\n\t\t\t\t\t}\n\t\t\t\t\t$$renderer.push(`<!--]--></span>`);\n\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`<!--]--></li>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<div${attr_class(`relative min-h-full ${listClass()}`)} data-testid=\"log-canvas\"><ol class=\"font-mono text-xs leading-5\" data-testid=\"log-lines\"><!--[-->`);\n\t\t\tconst each_array_3 = ensure_array_like(displayRows());\n\t\t\tfor (let $$index_4 = 0, $$length = each_array_3.length; $$index_4 < $$length; $$index_4++) {\n\t\t\t\tlet row = each_array_3[$$index_4];\n\t\t\t\tif (row.kind === \"request\") {\n\t\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t\tconst open = isExpanded(row.key);\n\t\t\t\t\t$$renderer.push(`<li${attr_class(clsx(listClass()))} data-testid=\"log-request-group\"${attr(\"data-request-id\", row.id)}${attr(\"data-level\", row.level)}${attr(\"data-expanded\", open ? \"true\" : void 0)}${attr(\"data-lines\", row.count)}><button type=\"button\" class=\"flex w-full flex-wrap items-baseline gap-2 px-3 py-0.5 text-left hover:bg-neutral-900/60\"${attr(\"aria-expanded\", open)}${attr(\"title\", open ? \"Hide the lines of this request\" : \"Show every line of this request\")} data-testid=\"request-group-summary\"><span class=\"w-[7.5rem] shrink-0 text-neutral-500\"${attr(\"title\", row.timestamp)}>${escape_html(row.time)}</span> `);\n\t\t\t\t\tif (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>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--> <span class=\"shrink-0 truncate text-sky-400/80\"${attr_style(prefixStyle())}${attr(\"title\", row.streamName ?? \"\")} data-testid=\"log-stream\">${escape_html(row.streamName ?? \"\")}</span> <span class=\"shrink-0 text-neutral-600\" aria-hidden=\"true\">${escape_html(open ? \"▾\" : \"▸\")}</span> <span class=\"shrink-0 rounded border border-neutral-700 bg-neutral-900 px-1.5 font-mono text-[0.6875rem] text-sky-200\" data-testid=\"request-group-id\" title=\"Request id shared by these lines\">${escape_html(row.id)}</span> <span class=\"shrink-0 text-neutral-400\" data-testid=\"request-group-count\">${escape_html(formatCount(row.count))} lines</span> <span class=\"shrink-0 text-neutral-500\" data-testid=\"request-group-span\">${escape_html(row.span)}</span> <span${attr_class(`shrink-0 font-medium ${stringify(row.levelClass)}`)} data-testid=\"request-group-level\">${escape_html(row.levelLabel)}</span> `);\n\t\t\t\t\tif (!open) $$renderer.push(`<!--[0--><span class=\"min-w-0 truncate text-neutral-500\" data-testid=\"request-group-preview\">${escape_html(row.preview)}</span>`);\n\t\t\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--></button> `);\n\t\t\t\t\tif (open) {\n\t\t\t\t\t\t$$renderer.push(`<!--[0--><ul class=\"contents\"><!--[-->`);\n\t\t\t\t\t\tconst each_array_4 = ensure_array_like(row.children);\n\t\t\t\t\t\tfor (let $$index_3 = 0, $$length = each_array_4.length; $$index_3 < $$length; $$index_3++) {\n\t\t\t\t\t\t\tlet child = each_array_4[$$index_3];\n\t\t\t\t\t\t\tlogLine($$renderer, child, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$$renderer.push(`<!--]--></ul>`);\n\t\t\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\t$$renderer.push(`<!--]--></li>`);\n\t\t\t\t} else {\n\t\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t\tlogLine($$renderer, row, false);\n\t\t\t\t}\n\t\t\t\t$$renderer.push(`<!--]-->`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></ol> `);\n\t\t\tColumnResizer($$renderer, {\n\t\t\t\tlabel: \"Resize prefix column\",\n\t\t\t\twidth: prefixPx,\n\t\t\t\tmin: PREFIX_MIN_PX,\n\t\t\t\tmax: PREFIX_MAX_PX,\n\t\t\t\ttestId: \"prefix-resizer\",\n\t\t\t\tonChange: (next) => prefixPx = next,\n\t\t\t\tonCommit: () => savePrefixWidth(),\n\t\t\t\tclass: \"absolute inset-y-0 w-2\",\n\t\t\t\tstyle: `left: ${stringify(handleLeft() - 4)}px`\n\t\t\t});\n\t\t\t$$renderer.push(`<!----></div>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></section>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/RegionSelect.svelte\nfunction RegionSelect($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Regions offered by the picker; defaults to {@link DEFAULT_REGIONS}. */\n\t\t/** Currently selected region. */\n\t\t/** Called with the newly selected region. */\n\t\tlet { regions = DEFAULT_REGIONS, value = \"\", disabled = false, label = \"Region\", id = \"region-select\", onchange } = $$props;\n\t\t/** Offered regions, plus the current value when the server does not list it. */\n\t\tlet options = derived(() => value !== \"\" && !regions.includes(value) ? [value, ...regions] : [...regions]);\n\t\t$$renderer.push(`<div class=\"flex flex-col gap-1.5\"><label${attr(\"for\", id)} class=\"text-[0.6875rem] font-semibold uppercase tracking-wider text-neutral-500\">${escape_html(label)}</label> `);\n\t\t$$renderer.select({\n\t\t\tid,\n\t\t\tdisabled,\n\t\t\tvalue,\n\t\t\tonchange: (event) => onchange?.(event.currentTarget.value),\n\t\t\tclass: \"w-full rounded-md border border-neutral-800 bg-neutral-900 px-2.5 py-1.5 text-sm text-neutral-100 outline-none transition-colors hover:border-neutral-700 focus:border-sky-600 disabled:cursor-not-allowed disabled:opacity-50\"\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.push(`<!--[-->`);\n\t\t\tconst each_array = ensure_array_like(options());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet option = each_array[$$index];\n\t\t\t\t$$renderer.option({ value: option }, ($$renderer) => {\n\t\t\t\t\t$$renderer.push(`${escape_html(option)}`);\n\t\t\t\t});\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t});\n\t\t$$renderer.push(`</div>`);\n\t});\n}\n//#endregion\n//#region src/lib/components/SourceControls.svelte\nfunction SourceControls($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Active source, owned by the page. */\n\t\t/**\n\t\t* True only when `GET /api/archive` reported `available: true`.\n\t\t* The toggle is hidden otherwise, so the app keeps its CloudWatch-only look.\n\t\t*/\n\t\t/** Database file behind the archive, shown in the tooltip. */\n\t\t/** Called with the newly chosen source. */\n\t\tlet { source = \"cloudwatch\", archiveAvailable = false, archivePath = null, onChange } = $$props;\n\t\t/** Tooltip of the archive button: what it reads and which file backs it. */\n\t\tlet archiveTitle = derived(() => describeArchive(archivePath));\n\t\tif (archiveAvailable) {\n\t\t\t$$renderer.push(`<!--[0--><div class=\"flex flex-col gap-1.5\"><div class=\"flex items-center gap-1 rounded-lg border border-neutral-800 bg-neutral-900 p-0.5\" role=\"group\" aria-label=\"Log source\"><button type=\"button\"${attr(\"aria-pressed\", source === \"cloudwatch\")} title=\"Stream from CloudWatch Logs with your AWS credentials\" data-testid=\"source-cloudwatch\"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${source === \"cloudwatch\" ? \"border-sky-700 bg-sky-950/60 text-sky-300\" : \"border-transparent text-neutral-400 hover:text-neutral-200\"}`)}>CloudWatch</button> <button type=\"button\"${attr(\"aria-pressed\", source === \"archive\")}${attr(\"title\", archiveTitle())} data-testid=\"source-archive\"${attr_class(`rounded-md border px-2 py-1 text-xs font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${source === \"archive\" ? \"border-teal-700 bg-teal-950/60 text-teal-300\" : \"border-transparent text-neutral-400 hover:text-neutral-200\"}`)}>Local archive</button></div> `);\n\t\t\tif (source === \"archive\") $$renderer.push(`<!--[0--><p class=\"text-[0.6875rem] leading-4 text-teal-300/80\"${attr(\"title\", archiveTitle())} data-testid=\"archive-note\">${escape_html(ARCHIVE_NOTE)}</p>`);\n\t\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t});\n}\nfunction createBrowserEventSource(url) {\n\treturn new EventSource(url);\n}\n/** Builds the `/api/stream` SSE URL for a target. `base` allows an absolute URL in tests. */\nfunction buildStreamUrl(target, base = \"\") {\n\tconst search = new URLSearchParams();\n\tsearch.set(\"region\", target.region);\n\tconst groups = (target.groups ?? []).filter((name) => name.length > 0);\n\tif (groups.length > 1) search.set(\"groups\", groups.join(\",\"));\n\telse search.set(\"group\", groups[0] ?? target.group);\n\tif (target.source === \"archive\") search.set(\"source\", \"archive\");\n\tif (target.filterPattern) search.set(\"filterPattern\", target.filterPattern);\n\tif (target.mode === \"historic\") {\n\t\tsearch.set(\"mode\", \"historic\");\n\t\tif (target.range) search.set(\"range\", target.range);\n\t\tif (target.from !== void 0 && target.from !== \"\") search.set(\"from\", String(target.from));\n\t\tif (target.to !== void 0 && target.to !== \"\") search.set(\"to\", String(target.to));\n\t} else if (target.mode === \"live\") search.set(\"mode\", \"live\");\n\tif (target.startTime !== void 0 && target.startTime !== \"\") search.set(\"startTime\", String(target.startTime));\n\tif (target.lookback) search.set(\"lookback\", target.lookback);\n\tif (typeof target.poll === \"number\" && Number.isFinite(target.poll)) search.set(\"poll\", String(target.poll));\n\treturn `${base}/api/stream?${search.toString()}`;\n}\n/** Parses an SSE payload, returning `null` instead of throwing on malformed JSON. */\nfunction parsePayload(data) {\n\ttry {\n\t\treturn JSON.parse(data);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* View over one log group: the live CloudWatch stream, or the local archive replay.\n*\n* Pause policy: pausing keeps the connection open and keeps receiving events; those events are\n* held in a pending buffer and flushed into the visible buffer on resume.\n*/\nvar LogStream = class {\n\t/** Connection status shown by the status badge. */\n\tstatus = \"idle\";\n\t/** Last server-side or transport error, or `null`. */\n\tlastError = null;\n\t/** Payload of the last `ready` event. */\n\tready = null;\n\t/** Current target, or `null` after `stop()`. */\n\ttarget = null;\n\t/** Visible log lines, oldest first, capped by the buffer capacity. */\n\tlines = [];\n\t/** Total number of events received since the last reset. */\n\treceivedCount = 0;\n\t/** Lines dropped because the visible buffer was full. */\n\tdroppedCount = 0;\n\t/** Lines held back while paused. */\n\tpendingCount = 0;\n\t/** True when the visible buffer is frozen and events are buffered. */\n\tpaused = false;\n\t/** Timestamp of the last `ping` or `log` event. */\n\tlastEventAt = null;\n\t/** Reason given by the last `end` event. */\n\tendReason = null;\n\t#store;\n\t#source = null;\n\t#listeners = [];\n\t#reconnectTimer = null;\n\t#createEventSource;\n\t#reconnectDelayMs;\n\t#url;\n\t#schedule;\n\t#cancel;\n\tconstructor(options = {}) {\n\t\tthis.#store = new LogStore(options.capacity ?? 5e3);\n\t\tthis.#createEventSource = options.createEventSource ?? createBrowserEventSource;\n\t\tthis.#reconnectDelayMs = options.reconnectDelayMs ?? 1e3;\n\t\tthis.#url = options.url ?? ((target) => buildStreamUrl(target));\n\t\tthis.#schedule = options.schedule ?? ((callback, delayMs) => setTimeout(callback, delayMs));\n\t\tthis.#cancel = options.cancel ?? ((handle) => clearTimeout(handle));\n\t}\n\t/** Starts tailing a target, replacing any previous stream and clearing the buffer. */\n\tstart(target) {\n\t\tthis.#closeSource();\n\t\tthis.#clearReconnect();\n\t\tthis.clear();\n\t\tthis.status = \"connecting\";\n\t\tthis.lastError = null;\n\t\tthis.ready = null;\n\t\tthis.endReason = null;\n\t\tthis.target = { ...target };\n\t\tthis.#connect(false);\n\t}\n\t/** Stops tailing and forgets the target; the buffered lines stay visible. */\n\tstop() {\n\t\tthis.#clearReconnect();\n\t\tthis.#closeSource();\n\t\tthis.target = null;\n\t\tthis.status = \"idle\";\n\t}\n\t/** Freezes the visible buffer; incoming events are held until {@link resume}. */\n\tpause() {\n\t\tthis.#store.pause();\n\t\tthis.paused = true;\n\t}\n\t/** Thaws the visible buffer and flushes the events held while paused. */\n\tresume() {\n\t\tthis.#store.resume();\n\t\tthis.paused = false;\n\t\tthis.#syncStore();\n\t}\n\t/** Pauses or resumes, depending on the current state. */\n\ttogglePause() {\n\t\tif (this.paused) this.resume();\n\t\telse this.pause();\n\t}\n\t/** Empties the visible buffer, the pending buffer and the counters. */\n\tclear() {\n\t\tthis.#store.clear();\n\t\tthis.paused = false;\n\t\tthis.lines = [];\n\t\tthis.receivedCount = 0;\n\t\tthis.droppedCount = 0;\n\t\tthis.pendingCount = 0;\n\t}\n\t/** Number of visible lines. */\n\tget size() {\n\t\treturn this.#store.size;\n\t}\n\t/** Opens a connection for the current target. */\n\t#connect(retry) {\n\t\tconst target = this.target;\n\t\tif (target === null) return;\n\t\tthis.#closeSource();\n\t\tthis.status = retry ? \"reconnecting\" : \"connecting\";\n\t\tlet source;\n\t\ttry {\n\t\t\tsource = this.#createEventSource(this.#url(target));\n\t\t} catch (error) {\n\t\t\tthis.status = \"error\";\n\t\t\tthis.lastError = { message: error instanceof Error ? error.message : String(error) };\n\t\t\treturn;\n\t\t}\n\t\tthis.#source = source;\n\t\tthis.#listen(source, \"open\", () => {\n\t\t\tthis.status = \"live\";\n\t\t\tthis.lastError = null;\n\t\t});\n\t\tthis.#listen(source, \"error\", (event) => this.#handleErrorEvent(event));\n\t\tthis.#listen(source, \"ready\", (event) => this.#handleReady(event));\n\t\tthis.#listen(source, \"log\", (event) => this.#handleLog(event));\n\t\tthis.#listen(source, \"ping\", (event) => this.#handlePing(event));\n\t\tthis.#listen(source, \"end\", (event) => this.#handleEnd(event));\n\t}\n\t/** Registers a named-event listener and remembers it for cleanup. */\n\t#listen(source, type, handler) {\n\t\tsource.addEventListener(type, handler);\n\t\tthis.#listeners.push({\n\t\t\tsource,\n\t\t\ttype,\n\t\t\thandler\n\t\t});\n\t}\n\t/** Detaches listeners and closes the current connection. */\n\t#closeSource() {\n\t\tfor (const listener of this.#listeners) listener.source.removeEventListener(listener.type, listener.handler);\n\t\tthis.#listeners = [];\n\t\tthis.#source?.close();\n\t\tthis.#source = null;\n\t}\n\t/**\n\t* Handles every `error` event. A payload means the server reported a problem; an empty payload\n\t* means the connection dropped, which {@link #handleTransportError} deals with.\n\t*/\n\t#handleErrorEvent(event) {\n\t\tconst data = typeof event.data === \"string\" ? event.data.trim() : \"\";\n\t\tif (data === \"\") {\n\t\t\tthis.#handleTransportError();\n\t\t\treturn;\n\t\t}\n\t\tthis.lastError = parsePayload(data) ?? { message: data };\n\t\tthis.status = \"error\";\n\t}\n\t/**\n\t* Handles a transport failure. While the source is still `CONNECTING` the browser keeps retrying\n\t* on its own; a `CLOSED` source is rebuilt after {@link LogStreamOptions.reconnectDelayMs}.\n\t*/\n\t#handleTransportError() {\n\t\tconst source = this.#source;\n\t\tif (source === null) return;\n\t\tthis.status = \"reconnecting\";\n\t\tif (source.readyState === 2) this.#scheduleReconnect();\n\t}\n\t/** Schedules one reconnect attempt, unless one is already pending. */\n\t#scheduleReconnect() {\n\t\tif (this.#reconnectTimer !== null) return;\n\t\tthis.#reconnectTimer = this.#schedule(() => {\n\t\t\tthis.#reconnectTimer = null;\n\t\t\tif (this.target !== null) this.#connect(true);\n\t\t}, this.#reconnectDelayMs);\n\t}\n\t/** Drops a pending reconnect attempt. */\n\t#clearReconnect() {\n\t\tif (this.#reconnectTimer === null) return;\n\t\tthis.#cancel(this.#reconnectTimer);\n\t\tthis.#reconnectTimer = null;\n\t}\n\t/** Marks the stream as live after receiving data. */\n\t#markLive() {\n\t\tthis.lastEventAt = Date.now();\n\t\tif (this.status !== \"ended\") this.status = \"live\";\n\t}\n\t/** Copies buffer state onto the reactive fields. */\n\t#syncStore() {\n\t\tthis.lines = this.#store.toArray();\n\t\tthis.pendingCount = this.#store.pendingCount;\n\t\tthis.droppedCount = this.#store.droppedCount;\n\t}\n\t#handleReady(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tif (payload !== null) this.ready = payload;\n\t\tthis.#markLive();\n\t}\n\t#handleLog(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tconst events = payload !== null && Array.isArray(payload.events) ? payload.events : [];\n\t\tif (events.length === 0) return;\n\t\tthis.#store.push(events);\n\t\tthis.#syncStore();\n\t\tthis.receivedCount += events.length;\n\t\tthis.#markLive();\n\t}\n\t#handlePing(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tthis.lastEventAt = payload?.at ?? Date.now();\n\t\tif (this.status !== \"ended\") this.status = \"live\";\n\t}\n\t#handleEnd(event) {\n\t\tconst payload = parsePayload(event.data);\n\t\tthis.endReason = payload?.reason ?? null;\n\t\tthis.status = \"ended\";\n\t\tthis.#clearReconnect();\n\t\tthis.#closeSource();\n\t}\n};\n//#endregion\n//#region src/routes/+page.svelte\nfunction _page($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/** Owns the SSE connection; the page only wires it to the UI. */\n\t\tconst stream = new LogStream();\n\t\t/** Region picker state. Seeded from the URL so a shared link restores the view. */\n\t\tlet region = page.url.searchParams.get(\"region\") ?? \"\";\n\t\t/**\n\t\t* Where the view reads from, seeded from the URL. `archive` is only offered while the local\n\t\t* DuckDB archive reports `available: true`, so the fallback below is applied during bootstrap.\n\t\t*/\n\t\tlet source = page.url.searchParams.get(\"source\") === \"archive\" ? \"archive\" : \"cloudwatch\";\n\t\t/** Tail mode and historic window, seeded from the URL; bootstrap forces historic for the archive. */\n\t\tlet mode = page.url.searchParams.get(\"mode\") === \"historic\" ? \"historic\" : \"live\";\n\t\tlet range = page.url.searchParams.get(\"range\") ?? \"15m\";\n\t\tlet windowFrom = parseUrlEpoch(page.url.searchParams.get(\"from\"));\n\t\tlet windowTo = parseUrlEpoch(page.url.searchParams.get(\"to\"));\n\t\tlet rangeLoading = false;\n\t\tlet regions = [...DEFAULT_REGIONS];\n\t\tlet groups = [];\n\t\tlet groupsLoading = false;\n\t\tlet groupsError = null;\n\t\tlet endpoint = null;\n\t\tlet filter = \"\";\n\t\tlet autoScroll = true;\n\t\t/**\n\t\t* Log groups in the view, seeded from the URL. One entry is the normal case;\n\t\t* more than one tails them together and adds a group column.\n\t\t*/\n\t\tlet selectedGroups = parseUrlGroups(page.url.searchParams);\n\t\t/** Primary group: the one the viewer names the view after. */\n\t\tlet selectedGroup = derived(() => selectedGroups[0] ?? null);\n\t\t/** Level filter shared by the log view and the chart. */\n\t\tlet levelFilter = null;\n\t\t/**\n\t\t* Group lines by request id, in the log view and in the chart.\n\t\t*\n\t\t* On by default: an incident is read as requests, not as the lines they wrote.\n\t\t* A stored preference wins, so a reader who wants every line keeps every line.\n\t\t*/\n\t\tlet groupRequests = true;\n\t\t/** Bucketed counts behind the chart. */\n\t\tlet seriesPoints = [];\n\t\t/** True while the archive counts are being fetched. */\n\t\tlet seriesLoading = false;\n\t\t/** True only when the local archive reports that it can be read. */\n\t\tlet archiveAvailable = derived(() => false);\n\t\t/** Database file behind the archive, or `null` when it is unknown. */\n\t\tlet archivePath = derived(() => null);\n\t\t/** Tooltip of the archive badge in the header. */\n\t\tlet archiveTitle = derived(() => describeArchive(archivePath()));\n\t\t/** Sidebar width in pixels; the layout default is 22rem. */\n\t\tlet sidebarPx = remToPx(SIDEBAR_WIDTH.defaultRem);\n\t\t/** Largest sidebar width allowed: 44vw, but never below the minimum. */\n\t\tlet sidebarMaxPx = derived(() => remToPx(SIDEBAR_WIDTH.defaultRem));\n\t\tlet sidebarMinPx = remToPx(SIDEBAR_WIDTH.minRem);\n\t\tlet sidebarStyle = derived(() => `width: min(${sidebarPx}px, ${SIDEBAR_WIDTH.maxVw}vw)`);\n\t\t/** Persists the sidebar width; failures are ignored (private mode, quota). */\n\t\tfunction saveSidebarWidth() {\n\t\t\ttry {\n\t\t\t\tif (typeof localStorage === \"undefined\") return;\n\t\t\t\tlocalStorage.setItem(STORAGE_KEYS.sidebarWidth, String(Math.round(sidebarPx)));\n\t\t\t} catch {}\n\t\t}\n\t\t/**\n\t\t* Loads the log groups of a region from the active source; a newer region or source change wins\n\t\t* the race. The CloudWatch URL is left exactly as it was, so only the archive names its source.\n\t\t*/\n\t\tasync function loadGroups(target) {\n\t\t\tgroupsLoading = true;\n\t\t\tgroupsError = null;\n\t\t\tconst requestedSource = source;\n\t\t\tconst query = requestedSource === \"archive\" ? {\n\t\t\t\tregion: target,\n\t\t\t\tsource: requestedSource\n\t\t\t} : { region: target };\n\t\t\ttry {\n\t\t\t\tconst response = await fetchLogGroups(query);\n\t\t\t\tif (target !== region || requestedSource !== source) return;\n\t\t\t\tif (response.endpoint !== null) endpoint = response.endpoint;\n\t\t\t\tgroups = response.groups;\n\t\t\t} catch (error) {\n\t\t\t\tif (target !== region || requestedSource !== source) return;\n\t\t\t\tgroups = [];\n\t\t\t\tgroupsError = describeGroupsError(target, error);\n\t\t\t} finally {\n\t\t\t\tif (target === region && requestedSource === source) groupsLoading = false;\n\t\t\t}\n\t\t}\n\t\t/** Parses an epoch-millisecond URL parameter, or `null`. */\n\t\tfunction parseUrlEpoch(value) {\n\t\t\tif (value === null || value.trim() === \"\") return null;\n\t\t\tconst parsed = Number(value);\n\t\t\treturn Number.isFinite(parsed) ? parsed : null;\n\t\t}\n\t\t/** The window the current mode asks for. The archive is always a historic window. */\n\t\tfunction windowParams() {\n\t\t\tif (mode === \"live\" && source !== \"archive\") return { mode: \"live\" };\n\t\t\tif (range === \"\" && windowFrom !== null && windowTo !== null) return {\n\t\t\t\tmode: \"historic\",\n\t\t\t\tfrom: windowFrom,\n\t\t\t\tto: windowTo\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tmode: \"historic\",\n\t\t\t\trange: range === \"\" ? \"15m\" : range\n\t\t\t};\n\t\t}\n\t\t/** Stream target for the active source, region, groups and window. */\n\t\tfunction streamTarget() {\n\t\t\tconst window = windowParams();\n\t\t\tconst [primary, ...rest] = selectedGroups;\n\t\t\tconst target = {\n\t\t\t\tregion,\n\t\t\t\tgroup: primary ?? \"\",\n\t\t\t\tgroups: [...selectedGroups],\n\t\t\t\t...window\n\t\t\t};\n\t\t\tif (source === \"archive\") target.source = \"archive\";\n\t\t\treturn target;\n\t\t}\n\t\t/** Starts the stream for the current selection, or stops it when nothing is selected. */\n\t\tfunction restartStream() {\n\t\t\tif (region === \"\" || selectedGroups.length === 0) {\n\t\t\t\tstream.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trangeLoading = mode === \"historic\";\n\t\t\tstream.start(streamTarget());\n\t\t\tloadSeries();\n\t\t}\n\t\t/** Selects one group, replacing the selection. */\n\t\tfunction selectGroup(name) {\n\t\t\tif (region === \"\" || name === \"\") return;\n\t\t\tselectedGroups = [name];\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\trestartStream();\n\t\t}\n\t\t/**\n\t\t* Adds a group to the selection or removes it.\n\t\t*\n\t\t* The view keeps at least the groups it had: removing the last one leaves the\n\t\t* stream stopped and the list without a selection, which is a valid state.\n\t\t*/\n\t\tfunction toggleGroup(name) {\n\t\t\tif (region === \"\" || name === \"\") return;\n\t\t\tselectedGroups = selectedGroups.includes(name) ? selectedGroups.filter((entry) => entry !== name) : [...selectedGroups, name];\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\tif (selectedGroups.length === 0) {\n\t\t\t\tstream.stop();\n\t\t\t\tseriesPoints = [];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trestartStream();\n\t\t}\n\t\t/** Applies a mode or range change: restarts the stream and mirrors it into the URL. */\n\t\tfunction applyRange(payload) {\n\t\t\tif (source === \"archive\" && payload.mode === \"live\") return;\n\t\t\tmode = payload.mode;\n\t\t\trange = payload.range;\n\t\t\twindowFrom = payload.from;\n\t\t\twindowTo = payload.to;\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\tif (selectedGroups.length === 0) return;\n\t\t\trangeLoading = payload.mode === \"historic\";\n\t\t\tstream.start(streamTarget());\n\t\t\tloadSeries();\n\t\t}\n\t\t/**\n\t\t* Applies a brushed range from the chart as the new historic window, which\n\t\t* re-scopes the log view to exactly what was brushed.\n\t\t*/\n\t\tfunction applyBrush(selection) {\n\t\t\tif (selection === null) return;\n\t\t\tconst window = chartWindow();\n\t\t\tif (!isMeaningfulBrush(selection, window, chartBucketMs(window.from, window.to))) return;\n\t\t\tapplyRange({\n\t\t\t\tmode: \"historic\",\n\t\t\t\trange: \"\",\n\t\t\t\tfrom: selection.from,\n\t\t\t\tto: selection.to\n\t\t\t});\n\t\t}\n\t\t/** Turns request grouping on or off, and remembers the choice. */\n\t\tfunction toggleGroupRequests() {\n\t\t\tgroupRequests = !groupRequests;\n\t\t\ttry {\n\t\t\t\tlocalStorage?.setItem(STORAGE_KEYS.groupRequests, groupRequests ? \"true\" : \"false\");\n\t\t\t} catch {}\n\t\t}\n\t\t/**\n\t\t* Switches between CloudWatch and the local archive.\n\t\t*\n\t\t* The archive forces historic mode, restarts the stream for the selected group and reloads the\n\t\t* group list from the new source, so the sidebar and the viewer always agree.\n\t\t*/\n\t\tfunction changeSource(next) {\n\t\t\tif (next === source) return;\n\t\t\tif (next === \"archive\" && !archiveAvailable()) return;\n\t\t\tsource = next;\n\t\t\tif (next === \"archive\" && mode !== \"historic\") {\n\t\t\t\tmode = \"historic\";\n\t\t\t\tif (range === \"\") {\n\t\t\t\t\trange = \"15m\";\n\t\t\t\t\twindowFrom = null;\n\t\t\t\t\twindowTo = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (selectedGroups.length > 0) {\n\t\t\t\trangeLoading = mode === \"historic\";\n\t\t\t\tstream.start(streamTarget());\n\t\t\t}\n\t\t\tgroups = [];\n\t\t\tsyncUrl(region, selectedGroups);\n\t\t\tloadGroups(region);\n\t\t\tloadSeries();\n\t\t}\n\t\t/** Switches region: stops the stream, clears the list and reloads the groups. */\n\t\tfunction changeRegion(next) {\n\t\t\tif (next === \"\" || next === region) return;\n\t\t\tregion = next;\n\t\t\tstream.stop();\n\t\t\tgroups = [];\n\t\t\tselectedGroups = [];\n\t\t\tseriesPoints = [];\n\t\t\tsyncUrl(next, []);\n\t\t\tloadGroups(next);\n\t\t}\n\t\t/** Reloads the groups of the active region. */\n\t\tfunction refreshGroups() {\n\t\t\tloadGroups(region);\n\t\t}\n\t\t/** Replaces the view parameters in the address bar. */\n\t\tfunction syncUrl(nextRegion, nextGroups) {\n\t\t\tconst url = new URL(page.url);\n\t\t\tif (nextRegion === \"\") url.searchParams.delete(\"region\");\n\t\t\telse url.searchParams.set(\"region\", nextRegion);\n\t\t\tif (source === \"archive\") url.searchParams.set(\"source\", \"archive\");\n\t\t\telse url.searchParams.delete(\"source\");\n\t\t\turl.searchParams.delete(\"group\");\n\t\t\turl.searchParams.delete(\"groups\");\n\t\t\tconst names = nextGroups.filter((name) => name.length > 0);\n\t\t\tif (names.length === 1) url.searchParams.set(\"group\", names[0]);\n\t\t\telse if (names.length > 1) url.searchParams.set(\"groups\", names.join(\",\"));\n\t\t\tif (mode === \"live\") {\n\t\t\t\turl.searchParams.delete(\"mode\");\n\t\t\t\turl.searchParams.delete(\"range\");\n\t\t\t\turl.searchParams.delete(\"from\");\n\t\t\t\turl.searchParams.delete(\"to\");\n\t\t\t} else {\n\t\t\t\turl.searchParams.set(\"mode\", \"historic\");\n\t\t\t\turl.searchParams.delete(\"from\");\n\t\t\t\turl.searchParams.delete(\"to\");\n\t\t\t\turl.searchParams.delete(\"range\");\n\t\t\t\tif (range === \"\" && windowFrom !== null && windowTo !== null) {\n\t\t\t\t\turl.searchParams.set(\"from\", String(windowFrom));\n\t\t\t\t\turl.searchParams.set(\"to\", String(windowTo));\n\t\t\t\t} else url.searchParams.set(\"range\", range === \"\" ? \"15m\" : range);\n\t\t\t}\n\t\t\tif (url.href !== page.url.href) replaceState(url, {});\n\t\t}\n\t\t/** Clears the loading hint once the server reports its window. */\n\t\t/**\n\t\t* Keeps the chart in step with the view: a new window, selection, source, level\n\t\t* or a new batch of lines all re-load the counts.\n\t\t*/\n\t\t/**\n\t\t* Reacts to `archive-unavailable` from the stream (the file was locked or removed after boot) by\n\t\t* re-checking the archive, so the toggle hides itself instead of offering a source that fails.\n\t\t*/\n\t\t/** Parses the group selection from the URL, accepting both parameter shapes. */\n\t\tfunction parseUrlGroups(params) {\n\t\t\tconst names = (params.get(\"groups\") ?? \"\").split(\",\").map((name) => name.trim()).filter((name) => name.length > 0);\n\t\t\tif (names.length > 0) return [...new Set(names)];\n\t\t\tconst single = params.get(\"group\")?.trim() ?? \"\";\n\t\t\treturn single.length > 0 ? [single] : [];\n\t\t}\n\t\t/** Bucket width for the chart of one window, mirroring the server's choice. */\n\t\tfunction chartBucketMs(from, to) {\n\t\t\tconst span = Math.max(1, to - from);\n\t\t\treturn [\n\t\t\t\t1e3,\n\t\t\t\t5e3,\n\t\t\t\t1e4,\n\t\t\t\t3e4,\n\t\t\t\t6e4,\n\t\t\t\t3e5,\n\t\t\t\t9e5,\n\t\t\t\t18e5\n\t\t\t].find((step) => span / step <= 90) ?? 36e5;\n\t\t}\n\t\t/** Window the chart describes: the active historic window, or a rolling quarter hour. */\n\t\tfunction chartWindow() {\n\t\t\tif (mode === \"historic\") {\n\t\t\t\tconst to = windowTo ?? stream.ready?.endTime ?? Date.now();\n\t\t\t\tconst from = windowFrom ?? stream.ready?.startTime ?? to - 9e5;\n\t\t\t\treturn {\n\t\t\t\t\tfrom: Math.min(from, to - 1e3),\n\t\t\t\t\tto\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst to = Date.now();\n\t\t\treturn {\n\t\t\t\tfrom: to - 9e5,\n\t\t\t\tto\n\t\t\t};\n\t\t}\n\t\t/**\n\t\t* Loads the counts behind the chart.\n\t\t*\n\t\t* The archive can count a whole window in one statement, so it is asked for\n\t\t* them; a CloudWatch view has no aggregate endpoint, so the events already\n\t\t* streamed are bucketed here. Both end up as the same points.\n\t\t*/\n\t\tasync function loadSeries() {\n\t\t\tif (selectedGroups.length === 0 || region === \"\") {\n\t\t\t\tseriesPoints = [];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { from, to } = chartWindow();\n\t\t\tif (source !== \"archive\") {\n\t\t\t\tseriesPoints = bucketEvents(stream.lines, {\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\tbucketMs: chartBucketMs(from, to),\n\t\t\t\t\tlevel: levelFilter,\n\t\t\t\t\tfallbackGroup: selectedGroup() ?? \"\",\n\t\t\t\t\tbyRequest: groupRequests\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tseriesLoading = true;\n\t\t\ttry {\n\t\t\t\tseriesPoints = (await fetchSeries({\n\t\t\t\t\tregion,\n\t\t\t\t\tgroups: selectedGroups,\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\tlevels: levelFilter === null ? [] : [levelFilter],\n\t\t\t\t\tby: groupRequests ? \"request\" : \"event\"\n\t\t\t\t})).points;\n\t\t\t} catch {\n\t\t\t\tseriesPoints = [];\n\t\t\t} finally {\n\t\t\t\tseriesLoading = false;\n\t\t\t}\n\t\t}\n\t\t$$renderer.push(`<div class=\"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> `);\n\t\tif (source === \"archive\") {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\tEndpointBadge($$renderer, {\n\t\t\t\tendpoint: null,\n\t\t\t\tcredentials: null\n\t\t\t});\n\t\t\t$$renderer.push(`<!----> <span data-testid=\"archive-source-badge\"${attr(\"title\", archiveTitle())} class=\"rounded-full border border-teal-900 bg-teal-950/60 px-2.5 py-1 text-xs font-medium text-teal-300\">local archive</span>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\tEndpointBadge($$renderer, {\n\t\t\t\tendpoint,\n\t\t\t\tcredentials: null\n\t\t\t});\n\t\t}\n\t\t$$renderer.push(`<!--]--> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tRangeControls($$renderer, {\n\t\t\tmode,\n\t\t\trange,\n\t\t\tfrom: windowFrom,\n\t\t\tto: windowTo,\n\t\t\tloading: rangeLoading,\n\t\t\tdisabled: selectedGroup() === null,\n\t\t\tliveDisabled: source === \"archive\",\n\t\t\tonApply: applyRange\n\t\t});\n\t\t$$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\">`);\n\t\tSourceControls($$renderer, {\n\t\t\tsource,\n\t\t\tarchiveAvailable: archiveAvailable(),\n\t\t\tarchivePath: archivePath(),\n\t\t\tonChange: changeSource\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tRegionSelect($$renderer, {\n\t\t\tregions,\n\t\t\tvalue: region,\n\t\t\tonchange: changeRegion\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tLogGroupList($$renderer, {\n\t\t\tgroups,\n\t\t\tsource,\n\t\t\tregion,\n\t\t\tselected: selectedGroups,\n\t\t\tloading: groupsLoading,\n\t\t\terror: groupsError,\n\t\t\tonSelect: selectGroup,\n\t\t\tonToggle: toggleGroup,\n\t\t\tonRefresh: refreshGroups\n\t\t});\n\t\t$$renderer.push(`<!----></div> `);\n\t\tColumnResizer($$renderer, {\n\t\t\tlabel: \"Resize group list\",\n\t\t\twidth: sidebarPx,\n\t\t\tmin: sidebarMinPx,\n\t\t\tmax: sidebarMaxPx(),\n\t\t\ttestId: \"sidebar-resizer\",\n\t\t\tonChange: (next) => sidebarPx = next,\n\t\t\tonCommit: () => saveSidebarWidth(),\n\t\t\tclass: \"hidden lg:block lg:w-2\"\n\t\t});\n\t\t$$renderer.push(`<!----> <div class=\"flex min-h-0 min-w-0 flex-1 flex-col\">`);\n\t\tEventScatterPanel($$renderer, {\n\t\t\tpoints: seriesPoints,\n\t\t\tfrom: chartWindow().from,\n\t\t\tto: chartWindow().to,\n\t\t\tbucketMs: chartBucketMs(chartWindow().from, chartWindow().to),\n\t\t\tgroups: selectedGroups,\n\t\t\tbyRequest: groupRequests,\n\t\t\tloading: seriesLoading,\n\t\t\tonBrush: applyBrush\n\t\t});\n\t\t$$renderer.push(`<!----> `);\n\t\tif (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>`);\n\t\telse $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tLogViewer($$renderer, {\n\t\t\tlines: stream.lines,\n\t\t\tstatus: stream.status,\n\t\t\terror: stream.lastError,\n\t\t\tmode,\n\t\t\tready: stream.ready,\n\t\t\tendReason: stream.endReason,\n\t\t\tarchivePath: archivePath(),\n\t\t\tregion,\n\t\t\tgroup: selectedGroup(),\n\t\t\tgroups: selectedGroups,\n\t\t\tlevel: levelFilter,\n\t\t\tonLevelChange: (next) => levelFilter = next,\n\t\t\tgroupRequests,\n\t\t\tonGroupToggle: toggleGroupRequests,\n\t\t\tfilter,\n\t\t\tpaused: stream.paused,\n\t\t\tautoScroll,\n\t\t\tpendingCount: stream.pendingCount,\n\t\t\tdroppedCount: stream.droppedCount,\n\t\t\treceivedCount: stream.receivedCount,\n\t\t\tonFilterChange: (value) => filter = value,\n\t\t\tonPauseToggle: () => stream.togglePause(),\n\t\t\tonClear: () => stream.clear(),\n\t\t\tonAutoScrollToggle: () => autoScroll = !autoScroll\n\t\t});\n\t\t$$renderer.push(`<!----></div></div>`);\n\t});\n}\n//#endregion\nexport { _page as default };\n"],"names":[],"mappings":"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"}