@react-perfscope/ui 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -145,7 +145,8 @@ var en = {
145
145
  inputDelay: "input delay",
146
146
  processingTime: "processing",
147
147
  presentation: "presentation",
148
- interactionThresholdHint: "Only interactions \u226540ms are shown \u2014 INP surfaces the slow ones; fast clicks are omitted."
148
+ interactionThresholdHint: "Only interactions \u226540ms are shown \u2014 INP surfaces the slow ones; fast clicks are omitted.",
149
+ layoutShiftHint: "Every layout shift, including ones triggered by your interactions. The CLS metric excludes input-driven shifts, so this is not a CLS score."
149
150
  };
150
151
  var KIND_LABELS_KO = {
151
152
  render: "\uB80C\uB354",
@@ -238,7 +239,8 @@ var ko = {
238
239
  inputDelay: "\uC785\uB825 \uC9C0\uC5F0",
239
240
  processingTime: "\uCC98\uB9AC",
240
241
  presentation: "\uD654\uBA74 \uBC18\uC601",
241
- interactionThresholdHint: "40ms \uC774\uC0C1 \uAC78\uB9B0 \uC0C1\uD638\uC791\uC6A9\uB9CC \uD45C\uC2DC\uB3FC\uC694 \u2014 \uB290\uB9B0 \uAC83\uB9CC INP\uB85C \uC7A1\uACE0, \uBE60\uB978 \uD074\uB9AD\uC740 \uC0DD\uB7B5\uD574\uC694."
242
+ interactionThresholdHint: "40ms \uC774\uC0C1 \uAC78\uB9B0 \uC0C1\uD638\uC791\uC6A9\uB9CC \uD45C\uC2DC\uB3FC\uC694 \u2014 \uB290\uB9B0 \uAC83\uB9CC INP\uB85C \uC7A1\uACE0, \uBE60\uB978 \uD074\uB9AD\uC740 \uC0DD\uB7B5\uD574\uC694.",
243
+ layoutShiftHint: "\uC0AC\uC6A9\uC790 \uC778\uD130\uB799\uC158\uC73C\uB85C \uC0DD\uAE34 \uAC83\uAE4C\uC9C0 \uD3EC\uD568\uD55C \uBAA8\uB4E0 \uB808\uC774\uC544\uC6C3 \uC2DC\uD504\uD2B8\uC608\uC694. CLS \uC9C0\uD45C\uB294 \uC785\uB825\uC73C\uB85C \uC778\uD55C \uC2DC\uD504\uD2B8\uB97C \uC81C\uC678\uD558\uBBC0\uB85C, \uC774\uAC74 CLS \uC810\uC218\uAC00 \uC544\uB2C8\uC5D0\uC694."
242
244
  };
243
245
  var STRINGS = { en, ko };
244
246
  function isLang(v) {
@@ -1860,6 +1862,177 @@ function RenderInsights({ signals, onSelect }) {
1860
1862
  );
1861
1863
  }
1862
1864
 
1865
+ // src/inp-episode.tsx
1866
+ import { correlate } from "@react-perfscope/core";
1867
+
1868
+ // src/episode-shared.tsx
1869
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "preact/jsx-runtime";
1870
+ function memberLabel(m) {
1871
+ const s = m.signal;
1872
+ if (s.kind === "render") return `${s.component} (${s.reason})`;
1873
+ if (s.kind === "forced-reflow") {
1874
+ const top = s.stack[0];
1875
+ return top ? `forced reflow \xB7 ${top.file}:${top.line}` : "forced reflow";
1876
+ }
1877
+ return `layout shift ${s.value.toFixed(3)}`;
1878
+ }
1879
+ function EpisodeMemberRow({ member }) {
1880
+ return /* @__PURE__ */ jsxs5(
1881
+ "div",
1882
+ {
1883
+ "data-member-kind": member.signal.kind,
1884
+ style: { display: "flex", alignItems: "center", gap: "6px", padding: "1px 0", color: "#ccc" },
1885
+ children: [
1886
+ /* @__PURE__ */ jsx5("span", { style: { overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: memberLabel(member) }),
1887
+ member.causedBy && /* @__PURE__ */ jsxs5("span", { style: { flex: "0 0 auto", color: "#888" }, children: [
1888
+ "\u2190 ",
1889
+ member.causedBy.component
1890
+ ] }),
1891
+ member.confidence === "caused" && /* @__PURE__ */ jsx5(
1892
+ "span",
1893
+ {
1894
+ style: {
1895
+ flex: "0 0 auto",
1896
+ fontSize: "9px",
1897
+ color: "#e0a030",
1898
+ border: "1px solid #5a4410",
1899
+ borderRadius: "3px",
1900
+ padding: "0 4px"
1901
+ },
1902
+ children: "caused"
1903
+ }
1904
+ )
1905
+ ]
1906
+ }
1907
+ );
1908
+ }
1909
+ function EpisodeMemberList({ members }) {
1910
+ if (members.length === 0) return /* @__PURE__ */ jsx5("span", { style: { color: "#555" }, children: "\u2014" });
1911
+ return /* @__PURE__ */ jsx5(Fragment2, { children: members.map((m, i) => /* @__PURE__ */ jsx5(EpisodeMemberRow, { member: m }, i)) });
1912
+ }
1913
+
1914
+ // src/inp-episode.tsx
1915
+ import { jsx as jsx6, jsxs as jsxs6 } from "preact/jsx-runtime";
1916
+ var PHASES = [
1917
+ { phase: "input-delay", labelKey: "inputDelay" },
1918
+ { phase: "processing", labelKey: "processingTime" },
1919
+ { phase: "presentation", labelKey: "presentation" }
1920
+ ];
1921
+ function worstInteractionEpisode(signals) {
1922
+ let worst = null;
1923
+ for (const ep of correlate(signals)) {
1924
+ if (ep.anchor.kind !== "interaction") continue;
1925
+ if (!worst || ep.anchor.duration > worst.anchor.duration) worst = ep;
1926
+ }
1927
+ return worst;
1928
+ }
1929
+ function phaseMs(episode, phase) {
1930
+ const a = episode.anchor;
1931
+ if (a.kind !== "interaction") return 0;
1932
+ return phase === "input-delay" ? a.inputDelay : phase === "processing" ? a.processing : a.presentation;
1933
+ }
1934
+ function InpEpisode({ signals }) {
1935
+ const { t } = useI18n();
1936
+ const episode = worstInteractionEpisode(signals);
1937
+ if (!episode || episode.anchor.kind !== "interaction") return null;
1938
+ const a = episode.anchor;
1939
+ const target = a.target ? ` on ${a.target}` : "";
1940
+ return /* @__PURE__ */ jsxs6(
1941
+ "div",
1942
+ {
1943
+ "data-inp-episode": true,
1944
+ style: {
1945
+ margin: "0 0 8px",
1946
+ border: "1px solid #1f1f1f",
1947
+ borderRadius: "6px",
1948
+ background: "#121212",
1949
+ fontFamily: "SF Mono, Menlo, Consolas, monospace",
1950
+ fontSize: "11px",
1951
+ overflow: "hidden"
1952
+ },
1953
+ children: [
1954
+ /* @__PURE__ */ jsxs6("div", { style: { padding: "6px 8px", borderBottom: "1px solid #1f1f1f", color: "#ddd" }, children: [
1955
+ /* @__PURE__ */ jsx6("strong", { children: a.eventType }),
1956
+ target,
1957
+ " \u2014 ",
1958
+ /* @__PURE__ */ jsxs6("strong", { children: [
1959
+ Math.round(a.duration),
1960
+ "ms"
1961
+ ] }),
1962
+ " ",
1963
+ /* @__PURE__ */ jsx6("span", { style: { color: "#888" }, children: "INP" })
1964
+ ] }),
1965
+ PHASES.map(({ phase, labelKey }) => {
1966
+ const members = episode.members.filter((m) => m.phase === phase);
1967
+ return /* @__PURE__ */ jsxs6(
1968
+ "div",
1969
+ {
1970
+ "data-inp-phase": phase,
1971
+ style: { display: "flex", gap: "8px", padding: "5px 8px", borderTop: "1px solid #1a1a1a" },
1972
+ children: [
1973
+ /* @__PURE__ */ jsxs6("div", { style: { flex: "0 0 92px", color: "#aaa" }, children: [
1974
+ t[labelKey],
1975
+ /* @__PURE__ */ jsxs6("div", { style: { color: "#666", fontSize: "10px" }, children: [
1976
+ Math.round(phaseMs(episode, phase)),
1977
+ "ms"
1978
+ ] })
1979
+ ] }),
1980
+ /* @__PURE__ */ jsx6("div", { style: { flex: 1, minWidth: 0 }, children: /* @__PURE__ */ jsx6(EpisodeMemberList, { members }) })
1981
+ ]
1982
+ },
1983
+ phase
1984
+ );
1985
+ })
1986
+ ]
1987
+ }
1988
+ );
1989
+ }
1990
+
1991
+ // src/long-task-episode.tsx
1992
+ import { correlate as correlate2 } from "@react-perfscope/core";
1993
+ import { jsx as jsx7, jsxs as jsxs7 } from "preact/jsx-runtime";
1994
+ function worstLongTaskEpisode(signals) {
1995
+ let worst = null;
1996
+ for (const ep of correlate2(signals)) {
1997
+ if (ep.anchor.kind !== "long-task") continue;
1998
+ if (!worst || ep.anchor.duration > worst.anchor.duration) worst = ep;
1999
+ }
2000
+ return worst;
2001
+ }
2002
+ function LongTaskEpisode({ signals }) {
2003
+ const { t } = useI18n();
2004
+ const episode = worstLongTaskEpisode(signals);
2005
+ if (!episode || episode.anchor.kind !== "long-task") return null;
2006
+ if (episode.members.length === 0) return null;
2007
+ const a = episode.anchor;
2008
+ return /* @__PURE__ */ jsxs7(
2009
+ "div",
2010
+ {
2011
+ "data-long-task-episode": true,
2012
+ style: {
2013
+ margin: "0 0 8px",
2014
+ border: "1px solid #1f1f1f",
2015
+ borderRadius: "6px",
2016
+ background: "#121212",
2017
+ fontFamily: "SF Mono, Menlo, Consolas, monospace",
2018
+ fontSize: "11px",
2019
+ overflow: "hidden"
2020
+ },
2021
+ children: [
2022
+ /* @__PURE__ */ jsxs7("div", { style: { padding: "6px 8px", borderBottom: "1px solid #1f1f1f", color: "#ddd" }, children: [
2023
+ /* @__PURE__ */ jsx7("strong", { children: t.kindLabel("long-task") }),
2024
+ " \u2014 ",
2025
+ /* @__PURE__ */ jsxs7("strong", { children: [
2026
+ Math.round(a.duration),
2027
+ "ms"
2028
+ ] })
2029
+ ] }),
2030
+ /* @__PURE__ */ jsx7("div", { style: { padding: "5px 8px" }, children: /* @__PURE__ */ jsx7(EpisodeMemberList, { members: episode.members }) })
2031
+ ]
2032
+ }
2033
+ );
2034
+ }
2035
+
1863
2036
  // src/filter.ts
1864
2037
  function signalSearchText(signal) {
1865
2038
  switch (signal.kind) {
@@ -1900,7 +2073,7 @@ function signalMatchesFilter(signal, query) {
1900
2073
  }
1901
2074
 
1902
2075
  // src/panel.tsx
1903
- import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "preact/jsx-runtime";
2076
+ import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs8 } from "preact/jsx-runtime";
1904
2077
  var RENDER_REASON_COLOR = {
1905
2078
  mount: "#5ac8fa",
1906
2079
  state: "#34c759",
@@ -1924,7 +2097,7 @@ function RenderReasonTag({ reason, changedProps }) {
1924
2097
  const color = RENDER_REASON_COLOR[reason];
1925
2098
  const label = renderReasonLabel(t, reason);
1926
2099
  const keys = reason === "props" && changedProps && changedProps.length > 0 ? `: ${changedProps.join(", ")}` : "";
1927
- return /* @__PURE__ */ jsxs5(
2100
+ return /* @__PURE__ */ jsxs8(
1928
2101
  "span",
1929
2102
  {
1930
2103
  style: {
@@ -1980,7 +2153,7 @@ var WEB_VITAL_UNIT2 = {
1980
2153
  };
1981
2154
  function RatingDot({ rating }) {
1982
2155
  const { t } = useI18n();
1983
- return /* @__PURE__ */ jsx5(
2156
+ return /* @__PURE__ */ jsx8(
1984
2157
  "span",
1985
2158
  {
1986
2159
  "data-rating": rating,
@@ -2038,18 +2211,18 @@ var monoStyle = {
2038
2211
  };
2039
2212
  function LayoutShiftDetail({ s }) {
2040
2213
  const { t } = useI18n();
2041
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2042
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2043
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.value }),
2044
- /* @__PURE__ */ jsx5("span", { children: s.value.toFixed(4) })
2214
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2215
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2216
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.value }),
2217
+ /* @__PURE__ */ jsx8("span", { children: s.value.toFixed(4) })
2045
2218
  ] }),
2046
- s.sources.length === 0 ? /* @__PURE__ */ jsx5("div", { style: { color: "#666" }, children: t.noSourceRects }) : s.sources.map((r, i) => /* @__PURE__ */ jsxs5("div", { style: { ...detailRowStyle, ...monoStyle }, children: [
2047
- /* @__PURE__ */ jsxs5("span", { style: { color: "#888" }, children: [
2219
+ s.sources.length === 0 ? /* @__PURE__ */ jsx8("div", { style: { color: "#666" }, children: t.noSourceRects }) : s.sources.map((r, i) => /* @__PURE__ */ jsxs8("div", { style: { ...detailRowStyle, ...monoStyle }, children: [
2220
+ /* @__PURE__ */ jsxs8("span", { style: { color: "#888" }, children: [
2048
2221
  t.rect,
2049
2222
  " ",
2050
2223
  i + 1
2051
2224
  ] }),
2052
- /* @__PURE__ */ jsxs5("span", { children: [
2225
+ /* @__PURE__ */ jsxs8("span", { children: [
2053
2226
  "x=",
2054
2227
  r.x.toFixed(0),
2055
2228
  " y=",
@@ -2064,25 +2237,25 @@ function LayoutShiftDetail({ s }) {
2064
2237
  }
2065
2238
  function NetworkDetail({ s }) {
2066
2239
  const { t } = useI18n();
2067
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2068
- /* @__PURE__ */ jsx5("div", { style: { ...detailRowStyle, ...monoStyle, wordBreak: "break-all" }, children: /* @__PURE__ */ jsx5("span", { children: s.url }) }),
2069
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2070
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.started }),
2071
- /* @__PURE__ */ jsxs5("span", { children: [
2240
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2241
+ /* @__PURE__ */ jsx8("div", { style: { ...detailRowStyle, ...monoStyle, wordBreak: "break-all" }, children: /* @__PURE__ */ jsx8("span", { children: s.url }) }),
2242
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2243
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.started }),
2244
+ /* @__PURE__ */ jsxs8("span", { children: [
2072
2245
  s.startedAt.toFixed(0),
2073
2246
  "ms"
2074
2247
  ] })
2075
2248
  ] }),
2076
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2077
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.duration }),
2078
- /* @__PURE__ */ jsxs5("span", { children: [
2249
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2250
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.duration }),
2251
+ /* @__PURE__ */ jsxs8("span", { children: [
2079
2252
  s.duration.toFixed(0),
2080
2253
  "ms"
2081
2254
  ] })
2082
2255
  ] }),
2083
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2084
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.size }),
2085
- /* @__PURE__ */ jsxs5("span", { children: [
2256
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2257
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.size }),
2258
+ /* @__PURE__ */ jsxs8("span", { children: [
2086
2259
  (s.size / 1024).toFixed(2),
2087
2260
  "KB (",
2088
2261
  s.size,
@@ -2091,69 +2264,69 @@ function NetworkDetail({ s }) {
2091
2264
  ")"
2092
2265
  ] })
2093
2266
  ] }),
2094
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2095
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.renderBlocking }),
2096
- /* @__PURE__ */ jsx5("span", { children: s.blocking ? t.yes : t.no })
2267
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2268
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.renderBlocking }),
2269
+ /* @__PURE__ */ jsx8("span", { children: s.blocking ? t.yes : t.no })
2097
2270
  ] })
2098
2271
  ] });
2099
2272
  }
2100
2273
  function WebVitalDetail({ s }) {
2101
2274
  const { t } = useI18n();
2102
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2103
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2104
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.metric }),
2105
- /* @__PURE__ */ jsx5("span", { children: s.name })
2275
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2276
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2277
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.metric }),
2278
+ /* @__PURE__ */ jsx8("span", { children: s.name })
2106
2279
  ] }),
2107
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2108
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.value }),
2109
- /* @__PURE__ */ jsx5("span", { children: s.value.toFixed(2) })
2280
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2281
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.value }),
2282
+ /* @__PURE__ */ jsx8("span", { children: s.value.toFixed(2) })
2110
2283
  ] })
2111
2284
  ] });
2112
2285
  }
2113
2286
  function RenderDetail({ s }) {
2114
2287
  const { t } = useI18n();
2115
2288
  if (s.members && s.members.length > 0) {
2116
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2117
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2118
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.duration }),
2119
- /* @__PURE__ */ jsxs5("span", { children: [
2289
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2290
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2291
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.duration }),
2292
+ /* @__PURE__ */ jsxs8("span", { children: [
2120
2293
  s.duration.toFixed(3),
2121
2294
  "ms"
2122
2295
  ] })
2123
2296
  ] }),
2124
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2125
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.at }),
2126
- /* @__PURE__ */ jsxs5("span", { children: [
2297
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2298
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.at }),
2299
+ /* @__PURE__ */ jsxs8("span", { children: [
2127
2300
  s.at.toFixed(2),
2128
2301
  "ms"
2129
2302
  ] })
2130
2303
  ] }),
2131
- /* @__PURE__ */ jsx5("div", { style: { marginTop: "6px" }, children: /* @__PURE__ */ jsx5(CascadeMembers, { members: s.members }) })
2304
+ /* @__PURE__ */ jsx8("div", { style: { marginTop: "6px" }, children: /* @__PURE__ */ jsx8(CascadeMembers, { members: s.members }) })
2132
2305
  ] });
2133
2306
  }
2134
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2135
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2136
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.component }),
2137
- /* @__PURE__ */ jsx5("span", { children: s.component })
2307
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2308
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2309
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.component }),
2310
+ /* @__PURE__ */ jsx8("span", { children: s.component })
2138
2311
  ] }),
2139
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2140
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.reason }),
2141
- /* @__PURE__ */ jsx5(RenderReasonTag, { reason: s.reason, changedProps: s.changedProps })
2312
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2313
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.reason }),
2314
+ /* @__PURE__ */ jsx8(RenderReasonTag, { reason: s.reason, changedProps: s.changedProps })
2142
2315
  ] }),
2143
- s.reason === "props" && s.changedProps && s.changedProps.length > 0 && /* @__PURE__ */ jsxs5("div", { style: { ...detailRowStyle, ...monoStyle }, children: [
2144
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.changedProps }),
2145
- /* @__PURE__ */ jsx5("span", { children: s.changedProps.join(", ") })
2316
+ s.reason === "props" && s.changedProps && s.changedProps.length > 0 && /* @__PURE__ */ jsxs8("div", { style: { ...detailRowStyle, ...monoStyle }, children: [
2317
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.changedProps }),
2318
+ /* @__PURE__ */ jsx8("span", { children: s.changedProps.join(", ") })
2146
2319
  ] }),
2147
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2148
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.duration }),
2149
- /* @__PURE__ */ jsxs5("span", { children: [
2320
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2321
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.duration }),
2322
+ /* @__PURE__ */ jsxs8("span", { children: [
2150
2323
  s.duration.toFixed(3),
2151
2324
  "ms"
2152
2325
  ] })
2153
2326
  ] }),
2154
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2155
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.at }),
2156
- /* @__PURE__ */ jsxs5("span", { children: [
2327
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2328
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.at }),
2329
+ /* @__PURE__ */ jsxs8("span", { children: [
2157
2330
  s.at.toFixed(2),
2158
2331
  "ms"
2159
2332
  ] })
@@ -2183,11 +2356,11 @@ function StackFrames({
2183
2356
  cancelled = true;
2184
2357
  };
2185
2358
  }, [raw]);
2186
- return /* @__PURE__ */ jsxs5(Fragment2, { children: [
2187
- resolving && /* @__PURE__ */ jsx5("div", { style: { color: "#666", fontSize: "10px", marginBottom: "4px" }, children: t.resolvingSourceMaps }),
2188
- frames.length === 0 ? /* @__PURE__ */ jsx5("div", { style: { color: "#666" }, children: t.noStack }) : frames.map((f, i) => /* @__PURE__ */ jsxs5("div", { style: { ...detailRowStyle, ...monoStyle }, children: [
2189
- f.fnName ? /* @__PURE__ */ jsx5("span", { children: f.fnName }) : /* @__PURE__ */ jsx5("span", { style: { color: "#666" }, children: t.anonymous }),
2190
- /* @__PURE__ */ jsxs5("span", { style: { color: "#888" }, children: [
2359
+ return /* @__PURE__ */ jsxs8(Fragment3, { children: [
2360
+ resolving && /* @__PURE__ */ jsx8("div", { style: { color: "#666", fontSize: "10px", marginBottom: "4px" }, children: t.resolvingSourceMaps }),
2361
+ frames.length === 0 ? /* @__PURE__ */ jsx8("div", { style: { color: "#666" }, children: t.noStack }) : frames.map((f, i) => /* @__PURE__ */ jsxs8("div", { style: { ...detailRowStyle, ...monoStyle }, children: [
2362
+ f.fnName ? /* @__PURE__ */ jsx8("span", { children: f.fnName }) : /* @__PURE__ */ jsx8("span", { style: { color: "#666" }, children: t.anonymous }),
2363
+ /* @__PURE__ */ jsxs8("span", { style: { color: "#888" }, children: [
2191
2364
  f.file,
2192
2365
  ":",
2193
2366
  f.line,
@@ -2201,7 +2374,7 @@ function ForcedReflowDetail({
2201
2374
  s,
2202
2375
  resolveFrame
2203
2376
  }) {
2204
- return /* @__PURE__ */ jsx5("div", { style: { paddingLeft: "12px" }, children: /* @__PURE__ */ jsx5(StackFrames, { raw: s.stack, resolveFrame }) });
2377
+ return /* @__PURE__ */ jsx8("div", { style: { paddingLeft: "12px" }, children: /* @__PURE__ */ jsx8(StackFrames, { raw: s.stack, resolveFrame }) });
2205
2378
  }
2206
2379
  function HotFunctions({
2207
2380
  attribution,
@@ -2220,26 +2393,26 @@ function HotFunctions({
2220
2393
  cancelled = true;
2221
2394
  };
2222
2395
  }, [attribution]);
2223
- return /* @__PURE__ */ jsxs5("div", { style: { marginTop: "6px" }, children: [
2224
- /* @__PURE__ */ jsx5("div", { style: { ...detailLabelStyle, textTransform: "uppercase", fontSize: "10px", letterSpacing: "0.5px", marginBottom: "1px", color: "#ff9f0a" }, children: t.hotFunctions }),
2225
- /* @__PURE__ */ jsx5("div", { style: { color: "#666", fontSize: "10px", marginBottom: "4px" }, children: t.hotFunctionsHint }),
2396
+ return /* @__PURE__ */ jsxs8("div", { style: { marginTop: "6px" }, children: [
2397
+ /* @__PURE__ */ jsx8("div", { style: { ...detailLabelStyle, textTransform: "uppercase", fontSize: "10px", letterSpacing: "0.5px", marginBottom: "1px", color: "#ff9f0a" }, children: t.hotFunctions }),
2398
+ /* @__PURE__ */ jsx8("div", { style: { color: "#666", fontSize: "10px", marginBottom: "4px" }, children: t.hotFunctionsHint }),
2226
2399
  attribution.map((a, i) => {
2227
2400
  const f = frames[i] ?? a.frame;
2228
2401
  const pct = Math.round(a.selfRatio * 100);
2229
- return /* @__PURE__ */ jsxs5("div", { style: { ...monoStyle, padding: "3px 0", borderTop: i > 0 ? "1px dashed #1f1f1f" : "none" }, children: [
2230
- /* @__PURE__ */ jsxs5("div", { children: [
2231
- /* @__PURE__ */ jsx5("span", { style: { color: "#ff9f0a", fontWeight: 600 }, children: f.fnName || /* @__PURE__ */ jsx5("span", { style: { color: "#666" }, children: t.anonymous }) }),
2232
- /* @__PURE__ */ jsxs5("span", { style: { color: SEVERITY_COLOR.medium, marginLeft: "6px" }, children: [
2402
+ return /* @__PURE__ */ jsxs8("div", { style: { ...monoStyle, padding: "3px 0", borderTop: i > 0 ? "1px dashed #1f1f1f" : "none" }, children: [
2403
+ /* @__PURE__ */ jsxs8("div", { children: [
2404
+ /* @__PURE__ */ jsx8("span", { style: { color: "#ff9f0a", fontWeight: 600 }, children: f.fnName || /* @__PURE__ */ jsx8("span", { style: { color: "#666" }, children: t.anonymous }) }),
2405
+ /* @__PURE__ */ jsxs8("span", { style: { color: SEVERITY_COLOR.medium, marginLeft: "6px" }, children: [
2233
2406
  pct,
2234
2407
  "%"
2235
2408
  ] }),
2236
- /* @__PURE__ */ jsxs5("span", { style: { color: "#666", marginLeft: "6px" }, children: [
2409
+ /* @__PURE__ */ jsxs8("span", { style: { color: "#666", marginLeft: "6px" }, children: [
2237
2410
  "(",
2238
2411
  a.sampleCount,
2239
2412
  ")"
2240
2413
  ] })
2241
2414
  ] }),
2242
- /* @__PURE__ */ jsxs5("div", { style: { color: "#888", wordBreak: "break-all" }, children: [
2415
+ /* @__PURE__ */ jsxs8("div", { style: { color: "#888", wordBreak: "break-all" }, children: [
2243
2416
  f.file,
2244
2417
  ":",
2245
2418
  f.line,
@@ -2256,59 +2429,59 @@ function LongTaskDetail({
2256
2429
  }) {
2257
2430
  const { t } = useI18n();
2258
2431
  const scripts = s.scripts ? [...s.scripts].sort((a, b) => b.duration - a.duration) : [];
2259
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2260
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2261
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.started }),
2262
- /* @__PURE__ */ jsxs5("span", { children: [
2432
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2433
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2434
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.started }),
2435
+ /* @__PURE__ */ jsxs8("span", { children: [
2263
2436
  s.at.toFixed(2),
2264
2437
  "ms"
2265
2438
  ] })
2266
2439
  ] }),
2267
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2268
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.ended }),
2269
- /* @__PURE__ */ jsxs5("span", { children: [
2440
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2441
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.ended }),
2442
+ /* @__PURE__ */ jsxs8("span", { children: [
2270
2443
  (s.at + s.duration).toFixed(2),
2271
2444
  "ms"
2272
2445
  ] })
2273
2446
  ] }),
2274
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2275
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.duration }),
2276
- /* @__PURE__ */ jsxs5("span", { children: [
2447
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2448
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.duration }),
2449
+ /* @__PURE__ */ jsxs8("span", { children: [
2277
2450
  s.duration.toFixed(2),
2278
2451
  "ms"
2279
2452
  ] })
2280
2453
  ] }),
2281
- typeof s.blockingDuration === "number" && /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2282
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.blockingTime }),
2283
- /* @__PURE__ */ jsxs5("span", { children: [
2454
+ typeof s.blockingDuration === "number" && /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2455
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.blockingTime }),
2456
+ /* @__PURE__ */ jsxs8("span", { children: [
2284
2457
  s.blockingDuration.toFixed(2),
2285
2458
  "ms"
2286
2459
  ] })
2287
2460
  ] }),
2288
- s.attribution !== void 0 && s.attribution.length > 0 && /* @__PURE__ */ jsx5(HotFunctions, { attribution: s.attribution, resolveFrame }),
2289
- s.scripts !== void 0 && /* @__PURE__ */ jsxs5("div", { style: { marginTop: "6px" }, children: [
2290
- /* @__PURE__ */ jsx5("div", { style: { ...detailLabelStyle, textTransform: "uppercase", fontSize: "10px", letterSpacing: "0.5px", marginBottom: "4px" }, children: t.scripts }),
2291
- scripts.length === 0 ? /* @__PURE__ */ jsx5("div", { style: { color: "#666" }, children: t.noScripts }) : scripts.map((script, i) => /* @__PURE__ */ jsxs5("div", { style: { ...monoStyle, padding: "3px 0", borderTop: i > 0 ? "1px dashed #1f1f1f" : "none" }, children: [
2292
- /* @__PURE__ */ jsxs5("div", { children: [
2293
- /* @__PURE__ */ jsx5("span", { children: script.sourceFunctionName || /* @__PURE__ */ jsx5("span", { style: { color: "#666" }, children: t.anonymous }) }),
2294
- /* @__PURE__ */ jsx5("span", { style: { color: "#5ac8fa", marginLeft: "6px" }, children: script.invokerType }),
2295
- /* @__PURE__ */ jsxs5("span", { style: { color: SEVERITY_COLOR.medium, marginLeft: "6px" }, children: [
2461
+ s.attribution !== void 0 && s.attribution.length > 0 && /* @__PURE__ */ jsx8(HotFunctions, { attribution: s.attribution, resolveFrame }),
2462
+ s.scripts !== void 0 && /* @__PURE__ */ jsxs8("div", { style: { marginTop: "6px" }, children: [
2463
+ /* @__PURE__ */ jsx8("div", { style: { ...detailLabelStyle, textTransform: "uppercase", fontSize: "10px", letterSpacing: "0.5px", marginBottom: "4px" }, children: t.scripts }),
2464
+ scripts.length === 0 ? /* @__PURE__ */ jsx8("div", { style: { color: "#666" }, children: t.noScripts }) : scripts.map((script, i) => /* @__PURE__ */ jsxs8("div", { style: { ...monoStyle, padding: "3px 0", borderTop: i > 0 ? "1px dashed #1f1f1f" : "none" }, children: [
2465
+ /* @__PURE__ */ jsxs8("div", { children: [
2466
+ /* @__PURE__ */ jsx8("span", { children: script.sourceFunctionName || /* @__PURE__ */ jsx8("span", { style: { color: "#666" }, children: t.anonymous }) }),
2467
+ /* @__PURE__ */ jsx8("span", { style: { color: "#5ac8fa", marginLeft: "6px" }, children: script.invokerType }),
2468
+ /* @__PURE__ */ jsxs8("span", { style: { color: SEVERITY_COLOR.medium, marginLeft: "6px" }, children: [
2296
2469
  script.duration.toFixed(1),
2297
2470
  "ms"
2298
2471
  ] })
2299
2472
  ] }),
2300
- script.sourceURL && /* @__PURE__ */ jsxs5("div", { style: { color: "#888", wordBreak: "break-all" }, children: [
2473
+ script.sourceURL && /* @__PURE__ */ jsxs8("div", { style: { color: "#888", wordBreak: "break-all" }, children: [
2301
2474
  script.sourceURL,
2302
2475
  script.charPosition >= 0 ? `@${script.charPosition}` : ""
2303
2476
  ] }),
2304
- script.invoker && /* @__PURE__ */ jsxs5("div", { style: { color: "#666" }, children: [
2477
+ script.invoker && /* @__PURE__ */ jsxs8("div", { style: { color: "#666" }, children: [
2305
2478
  t.invoker,
2306
2479
  ": ",
2307
2480
  script.invoker
2308
2481
  ] })
2309
2482
  ] }, i))
2310
2483
  ] }),
2311
- s.scripts === void 0 && s.stack.length > 0 && /* @__PURE__ */ jsx5("div", { style: { marginTop: "4px" }, children: /* @__PURE__ */ jsx5(StackFrames, { raw: s.stack, resolveFrame, limit: 5 }) })
2484
+ s.scripts === void 0 && s.stack.length > 0 && /* @__PURE__ */ jsx8("div", { style: { marginTop: "4px" }, children: /* @__PURE__ */ jsx8(StackFrames, { raw: s.stack, resolveFrame, limit: 5 }) })
2312
2485
  ] });
2313
2486
  }
2314
2487
  var INTERACTION_PHASE_COLOR = { input: "#8e8e93", processing: "#5ac8fa", presentation: "#34c759" };
@@ -2323,33 +2496,33 @@ function InteractionDetail({
2323
2496
  { label: t.processingTime, ms: s.processing, color: INTERACTION_PHASE_COLOR.processing },
2324
2497
  { label: t.presentation, ms: s.presentation, color: INTERACTION_PHASE_COLOR.presentation }
2325
2498
  ];
2326
- return /* @__PURE__ */ jsxs5("div", { style: { paddingLeft: "12px" }, children: [
2327
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2328
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.interactionEvent }),
2329
- /* @__PURE__ */ jsxs5("span", { children: [
2499
+ return /* @__PURE__ */ jsxs8("div", { style: { paddingLeft: "12px" }, children: [
2500
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2501
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.interactionEvent }),
2502
+ /* @__PURE__ */ jsxs8("span", { children: [
2330
2503
  s.eventType,
2331
2504
  s.target ? ` \xB7 ${s.target}` : ""
2332
2505
  ] })
2333
2506
  ] }),
2334
- /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2335
- /* @__PURE__ */ jsx5("span", { style: detailLabelStyle, children: t.duration }),
2336
- /* @__PURE__ */ jsxs5("span", { children: [
2507
+ /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2508
+ /* @__PURE__ */ jsx8("span", { style: detailLabelStyle, children: t.duration }),
2509
+ /* @__PURE__ */ jsxs8("span", { children: [
2337
2510
  s.duration.toFixed(0),
2338
2511
  "ms"
2339
2512
  ] })
2340
2513
  ] }),
2341
- /* @__PURE__ */ jsx5("div", { style: { display: "flex", height: "10px", borderRadius: "3px", overflow: "hidden", margin: "5px 0 7px", background: "#1a1a1a" }, children: phases.map((p, i) => /* @__PURE__ */ jsx5("div", { style: { width: `${p.ms / total * 100}%`, background: p.color } }, i)) }),
2342
- phases.map((p, i) => /* @__PURE__ */ jsxs5("div", { style: detailRowStyle, children: [
2343
- /* @__PURE__ */ jsxs5("span", { style: { ...detailLabelStyle, display: "inline-flex", alignItems: "center", gap: "5px" }, children: [
2344
- /* @__PURE__ */ jsx5("span", { style: { width: "7px", height: "7px", borderRadius: "2px", background: p.color, flex: "0 0 7px" } }),
2514
+ /* @__PURE__ */ jsx8("div", { style: { display: "flex", height: "10px", borderRadius: "3px", overflow: "hidden", margin: "5px 0 7px", background: "#1a1a1a" }, children: phases.map((p, i) => /* @__PURE__ */ jsx8("div", { style: { width: `${p.ms / total * 100}%`, background: p.color } }, i)) }),
2515
+ phases.map((p, i) => /* @__PURE__ */ jsxs8("div", { style: detailRowStyle, children: [
2516
+ /* @__PURE__ */ jsxs8("span", { style: { ...detailLabelStyle, display: "inline-flex", alignItems: "center", gap: "5px" }, children: [
2517
+ /* @__PURE__ */ jsx8("span", { style: { width: "7px", height: "7px", borderRadius: "2px", background: p.color, flex: "0 0 7px" } }),
2345
2518
  p.label
2346
2519
  ] }),
2347
- /* @__PURE__ */ jsxs5("span", { children: [
2520
+ /* @__PURE__ */ jsxs8("span", { children: [
2348
2521
  p.ms.toFixed(0),
2349
2522
  "ms"
2350
2523
  ] })
2351
2524
  ] }, i)),
2352
- s.attribution !== void 0 && s.attribution.length > 0 && /* @__PURE__ */ jsx5(HotFunctions, { attribution: s.attribution, resolveFrame })
2525
+ s.attribution !== void 0 && s.attribution.length > 0 && /* @__PURE__ */ jsx8(HotFunctions, { attribution: s.attribution, resolveFrame })
2353
2526
  ] });
2354
2527
  }
2355
2528
  function SignalDetail({
@@ -2358,24 +2531,24 @@ function SignalDetail({
2358
2531
  }) {
2359
2532
  switch (s.kind) {
2360
2533
  case "forced-reflow":
2361
- return /* @__PURE__ */ jsx5(ForcedReflowDetail, { s, resolveFrame });
2534
+ return /* @__PURE__ */ jsx8(ForcedReflowDetail, { s, resolveFrame });
2362
2535
  case "layout-shift":
2363
- return /* @__PURE__ */ jsx5(LayoutShiftDetail, { s });
2536
+ return /* @__PURE__ */ jsx8(LayoutShiftDetail, { s });
2364
2537
  case "long-task":
2365
- return /* @__PURE__ */ jsx5(LongTaskDetail, { s, resolveFrame });
2538
+ return /* @__PURE__ */ jsx8(LongTaskDetail, { s, resolveFrame });
2366
2539
  case "interaction":
2367
- return /* @__PURE__ */ jsx5(InteractionDetail, { s, resolveFrame });
2540
+ return /* @__PURE__ */ jsx8(InteractionDetail, { s, resolveFrame });
2368
2541
  case "network":
2369
- return /* @__PURE__ */ jsx5(NetworkDetail, { s });
2542
+ return /* @__PURE__ */ jsx8(NetworkDetail, { s });
2370
2543
  case "web-vital":
2371
- return /* @__PURE__ */ jsx5(WebVitalDetail, { s });
2544
+ return /* @__PURE__ */ jsx8(WebVitalDetail, { s });
2372
2545
  case "render":
2373
- return /* @__PURE__ */ jsx5(RenderDetail, { s });
2546
+ return /* @__PURE__ */ jsx8(RenderDetail, { s });
2374
2547
  }
2375
2548
  }
2376
2549
  function SeverityDot({ sev, title }) {
2377
2550
  const { t } = useI18n();
2378
- return /* @__PURE__ */ jsx5(
2551
+ return /* @__PURE__ */ jsx8(
2379
2552
  "span",
2380
2553
  {
2381
2554
  "data-severity": sev,
@@ -2398,9 +2571,9 @@ function SummaryLine({ signal }) {
2398
2571
  if (signal.kind === "web-vital") {
2399
2572
  const rating = webVitalRating(signal.name, signal.value);
2400
2573
  const unit = WEB_VITAL_UNIT2[signal.name];
2401
- return /* @__PURE__ */ jsxs5("span", { children: [
2402
- /* @__PURE__ */ jsx5(RatingDot, { rating }),
2403
- /* @__PURE__ */ jsx5("strong", { children: signal.name }),
2574
+ return /* @__PURE__ */ jsxs8("span", { children: [
2575
+ /* @__PURE__ */ jsx8(RatingDot, { rating }),
2576
+ /* @__PURE__ */ jsx8("strong", { children: signal.name }),
2404
2577
  ": ",
2405
2578
  signal.value.toFixed(2),
2406
2579
  unit
@@ -2409,12 +2582,12 @@ function SummaryLine({ signal }) {
2409
2582
  const sev = severityForSignal(signal);
2410
2583
  const color = SEVERITY_COLOR[sev];
2411
2584
  if (signal.kind === "long-task") {
2412
- return /* @__PURE__ */ jsxs5("span", { children: [
2585
+ return /* @__PURE__ */ jsxs8("span", { children: [
2413
2586
  "@ ",
2414
2587
  signal.at.toFixed(1),
2415
2588
  "ms \u2022 duration",
2416
2589
  " ",
2417
- /* @__PURE__ */ jsxs5("span", { style: { color }, children: [
2590
+ /* @__PURE__ */ jsxs8("span", { style: { color }, children: [
2418
2591
  signal.duration.toFixed(1),
2419
2592
  "ms"
2420
2593
  ] })
@@ -2422,59 +2595,59 @@ function SummaryLine({ signal }) {
2422
2595
  }
2423
2596
  if (signal.kind === "forced-reflow") {
2424
2597
  const count = signal.count ?? 1;
2425
- return /* @__PURE__ */ jsxs5("span", { children: [
2598
+ return /* @__PURE__ */ jsxs8("span", { children: [
2426
2599
  "@ ",
2427
2600
  signal.at.toFixed(1),
2428
2601
  "ms \u2022 duration",
2429
2602
  " ",
2430
- /* @__PURE__ */ jsxs5("span", { style: { color }, children: [
2603
+ /* @__PURE__ */ jsxs8("span", { style: { color }, children: [
2431
2604
  signal.duration.toFixed(2),
2432
2605
  "ms"
2433
2606
  ] }),
2434
- count > 1 && /* @__PURE__ */ jsxs5("span", { style: { color: "#888" }, children: [
2607
+ count > 1 && /* @__PURE__ */ jsxs8("span", { style: { color: "#888" }, children: [
2435
2608
  " \u2022 ",
2436
2609
  t.coalescedReads(count)
2437
2610
  ] })
2438
2611
  ] });
2439
2612
  }
2440
2613
  if (signal.kind === "layout-shift") {
2441
- return /* @__PURE__ */ jsxs5("span", { children: [
2614
+ return /* @__PURE__ */ jsxs8("span", { children: [
2442
2615
  "@ ",
2443
2616
  signal.at.toFixed(1),
2444
2617
  "ms \u2022 value",
2445
2618
  " ",
2446
- /* @__PURE__ */ jsx5("span", { style: { color }, children: formatCls(signal.value) }),
2619
+ /* @__PURE__ */ jsx8("span", { style: { color }, children: formatCls(signal.value) }),
2447
2620
  " \u2022 ",
2448
2621
  t.sourceCount(signal.sources.length)
2449
2622
  ] });
2450
2623
  }
2451
2624
  if (signal.kind === "render") {
2452
- return /* @__PURE__ */ jsxs5("span", { style: { display: "inline-flex", alignItems: "center", gap: "6px" }, children: [
2453
- /* @__PURE__ */ jsx5("strong", { children: signal.component }),
2454
- /* @__PURE__ */ jsx5(RenderReasonTag, { reason: signal.reason, changedProps: signal.changedProps }),
2455
- /* @__PURE__ */ jsxs5("span", { style: { color }, children: [
2625
+ return /* @__PURE__ */ jsxs8("span", { style: { display: "inline-flex", alignItems: "center", gap: "6px" }, children: [
2626
+ /* @__PURE__ */ jsx8("strong", { children: signal.component }),
2627
+ /* @__PURE__ */ jsx8(RenderReasonTag, { reason: signal.reason, changedProps: signal.changedProps }),
2628
+ /* @__PURE__ */ jsxs8("span", { style: { color }, children: [
2456
2629
  signal.duration.toFixed(2),
2457
2630
  "ms"
2458
2631
  ] }),
2459
- signal.count && signal.count > 1 && /* @__PURE__ */ jsx5("span", { style: { color: "#888" }, children: t.cascadeComponents(signal.count) })
2632
+ signal.count && signal.count > 1 && /* @__PURE__ */ jsx8("span", { style: { color: "#888" }, children: t.cascadeComponents(signal.count) })
2460
2633
  ] });
2461
2634
  }
2462
2635
  if (signal.kind === "network") {
2463
2636
  const url = signal.url.length > 60 ? signal.url.slice(0, 57) + "..." : signal.url;
2464
- return /* @__PURE__ */ jsxs5("span", { children: [
2637
+ return /* @__PURE__ */ jsxs8("span", { children: [
2465
2638
  url,
2466
2639
  " \u2022 ",
2467
- /* @__PURE__ */ jsxs5("span", { style: { color }, children: [
2640
+ /* @__PURE__ */ jsxs8("span", { style: { color }, children: [
2468
2641
  signal.duration.toFixed(0),
2469
2642
  "ms"
2470
2643
  ] }),
2471
- signal.blocking && /* @__PURE__ */ jsxs5("span", { style: { color: SEVERITY_COLOR.high }, children: [
2644
+ signal.blocking && /* @__PURE__ */ jsxs8("span", { style: { color: SEVERITY_COLOR.high }, children: [
2472
2645
  " \u2022 ",
2473
2646
  t.blocking
2474
2647
  ] })
2475
2648
  ] });
2476
2649
  }
2477
- return /* @__PURE__ */ jsx5("span", { children: summary(signal) });
2650
+ return /* @__PURE__ */ jsx8("span", { children: summary(signal) });
2478
2651
  }
2479
2652
  function tabSupportsGrouping(kind) {
2480
2653
  return kind === "render" || kind === "forced-reflow";
@@ -2548,7 +2721,7 @@ function groupSignals(signals, mode, kind) {
2548
2721
  function SignalRow({ signal, expanded, onToggleExpand, onHoverGeometry, resolveFrame }) {
2549
2722
  const hasGeometry = signal.kind === "layout-shift" && signal.sources.length > 0;
2550
2723
  const sev = severityForSignal(signal);
2551
- return /* @__PURE__ */ jsxs5(
2724
+ return /* @__PURE__ */ jsxs8(
2552
2725
  "li",
2553
2726
  {
2554
2727
  "aria-expanded": expanded,
@@ -2570,22 +2743,22 @@ function SignalRow({ signal, expanded, onToggleExpand, onHoverGeometry, resolveF
2570
2743
  userSelect: "none"
2571
2744
  },
2572
2745
  children: [
2573
- /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
2574
- /* @__PURE__ */ jsx5("span", { style: { color: "#888", width: "10px" }, children: expanded ? "\u25BC" : "\u25B6" }),
2575
- /* @__PURE__ */ jsx5(SeverityDot, { sev }),
2576
- /* @__PURE__ */ jsx5(SummaryLine, { signal })
2746
+ /* @__PURE__ */ jsxs8("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
2747
+ /* @__PURE__ */ jsx8("span", { style: { color: "#888", width: "10px" }, children: expanded ? "\u25BC" : "\u25B6" }),
2748
+ /* @__PURE__ */ jsx8(SeverityDot, { sev }),
2749
+ /* @__PURE__ */ jsx8(SummaryLine, { signal })
2577
2750
  ] }),
2578
- expanded && /* @__PURE__ */ jsx5("div", { style: { marginTop: "6px", paddingTop: "6px", borderTop: "1px dashed #2a2a2a" }, children: /* @__PURE__ */ jsx5(SignalDetail, { s: signal, resolveFrame }) })
2751
+ expanded && /* @__PURE__ */ jsx8("div", { style: { marginTop: "6px", paddingTop: "6px", borderTop: "1px dashed #2a2a2a" }, children: /* @__PURE__ */ jsx8(SignalDetail, { s: signal, resolveFrame }) })
2579
2752
  ]
2580
2753
  }
2581
2754
  );
2582
2755
  }
2583
2756
  function CascadeMembers({ members }) {
2584
2757
  const minDepth = members.reduce((m, s) => Math.min(m, s.depth), Infinity);
2585
- return /* @__PURE__ */ jsx5("div", { children: members.map((m, i) => {
2758
+ return /* @__PURE__ */ jsx8("div", { children: members.map((m, i) => {
2586
2759
  const indent = (m.depth - minDepth) * 14;
2587
2760
  const isCascade = m.reason === "parent";
2588
- return /* @__PURE__ */ jsxs5(
2761
+ return /* @__PURE__ */ jsxs8(
2589
2762
  "div",
2590
2763
  {
2591
2764
  style: {
@@ -2596,10 +2769,10 @@ function CascadeMembers({ members }) {
2596
2769
  gap: "6px"
2597
2770
  },
2598
2771
  children: [
2599
- /* @__PURE__ */ jsx5("span", { style: { color: isCascade ? RENDER_REASON_COLOR.parent : "#555" }, children: m.depth > minDepth ? "\u2514" : "\u2022" }),
2600
- /* @__PURE__ */ jsx5("strong", { children: m.component }),
2601
- /* @__PURE__ */ jsx5(RenderReasonTag, { reason: m.reason, changedProps: m.changedProps }),
2602
- /* @__PURE__ */ jsxs5("span", { style: { color: "#888" }, children: [
2772
+ /* @__PURE__ */ jsx8("span", { style: { color: isCascade ? RENDER_REASON_COLOR.parent : "#555" }, children: m.depth > minDepth ? "\u2514" : "\u2022" }),
2773
+ /* @__PURE__ */ jsx8("strong", { children: m.component }),
2774
+ /* @__PURE__ */ jsx8(RenderReasonTag, { reason: m.reason, changedProps: m.changedProps }),
2775
+ /* @__PURE__ */ jsxs8("span", { style: { color: "#888" }, children: [
2603
2776
  m.duration.toFixed(2),
2604
2777
  "ms"
2605
2778
  ] })
@@ -2613,7 +2786,7 @@ function LanguageToggle() {
2613
2786
  const { lang, setLang, t } = useI18n();
2614
2787
  const langs = ["en", "ko"];
2615
2788
  const labels = { en: "EN", ko: "\uD55C" };
2616
- return /* @__PURE__ */ jsx5(
2789
+ return /* @__PURE__ */ jsx8(
2617
2790
  "div",
2618
2791
  {
2619
2792
  role: "group",
@@ -2626,7 +2799,7 @@ function LanguageToggle() {
2626
2799
  },
2627
2800
  children: langs.map((l) => {
2628
2801
  const active = lang === l;
2629
- return /* @__PURE__ */ jsx5(
2802
+ return /* @__PURE__ */ jsx8(
2630
2803
  "button",
2631
2804
  {
2632
2805
  type: "button",
@@ -2720,12 +2893,12 @@ function Panel(props) {
2720
2893
  flexDirection: "column",
2721
2894
  overflow: "hidden"
2722
2895
  };
2723
- return /* @__PURE__ */ jsxs5("div", { role: "region", "aria-label": t.panelRegion, style: panelStyle, children: [
2724
- /* @__PURE__ */ jsxs5("header", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: "8px" }, children: [
2725
- /* @__PURE__ */ jsx5("strong", { children: "react-perfscope" }),
2726
- /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: "4px", alignItems: "center" }, children: [
2727
- /* @__PURE__ */ jsx5(LanguageToggle, {}),
2728
- /* @__PURE__ */ jsx5(
2896
+ return /* @__PURE__ */ jsxs8("div", { role: "region", "aria-label": t.panelRegion, style: panelStyle, children: [
2897
+ /* @__PURE__ */ jsxs8("header", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", marginBottom: "8px" }, children: [
2898
+ /* @__PURE__ */ jsx8("strong", { children: "react-perfscope" }),
2899
+ /* @__PURE__ */ jsxs8("div", { style: { display: "flex", gap: "4px", alignItems: "center" }, children: [
2900
+ /* @__PURE__ */ jsx8(LanguageToggle, {}),
2901
+ /* @__PURE__ */ jsx8(
2729
2902
  "button",
2730
2903
  {
2731
2904
  type: "button",
@@ -2744,7 +2917,7 @@ function Panel(props) {
2744
2917
  children: t.save
2745
2918
  }
2746
2919
  ),
2747
- /* @__PURE__ */ jsx5(
2920
+ /* @__PURE__ */ jsx8(
2748
2921
  "button",
2749
2922
  {
2750
2923
  type: "button",
@@ -2756,9 +2929,9 @@ function Panel(props) {
2756
2929
  )
2757
2930
  ] })
2758
2931
  ] }),
2759
- kindsPresent.length === 0 && /* @__PURE__ */ jsx5("div", { style: { color: "#888" }, children: t.noSignals }),
2760
- kindsPresent.length > 0 && /* @__PURE__ */ jsxs5(Fragment2, { children: [
2761
- /* @__PURE__ */ jsx5(
2932
+ kindsPresent.length === 0 && /* @__PURE__ */ jsx8("div", { style: { color: "#888" }, children: t.noSignals }),
2933
+ kindsPresent.length > 0 && /* @__PURE__ */ jsxs8(Fragment3, { children: [
2934
+ /* @__PURE__ */ jsx8(
2762
2935
  SummaryHeader,
2763
2936
  {
2764
2937
  signals: result.signals,
@@ -2770,8 +2943,8 @@ function Panel(props) {
2770
2943
  }
2771
2944
  }
2772
2945
  ),
2773
- /* @__PURE__ */ jsxs5("nav", { style: { display: "flex", gap: "4px", flexWrap: "wrap", marginBottom: "8px" }, children: [
2774
- hasTimelineSignals && /* @__PURE__ */ jsx5(
2946
+ /* @__PURE__ */ jsxs8("nav", { style: { display: "flex", gap: "4px", flexWrap: "wrap", marginBottom: "8px" }, children: [
2947
+ hasTimelineSignals && /* @__PURE__ */ jsx8(
2775
2948
  "button",
2776
2949
  {
2777
2950
  type: "button",
@@ -2796,7 +2969,7 @@ function Panel(props) {
2796
2969
  kindsPresent.map((kind) => {
2797
2970
  const worst = worstSeverity(grouped[kind]);
2798
2971
  const active = activeKind === kind;
2799
- return /* @__PURE__ */ jsxs5(
2972
+ return /* @__PURE__ */ jsxs8(
2800
2973
  "button",
2801
2974
  {
2802
2975
  type: "button",
@@ -2819,7 +2992,7 @@ function Panel(props) {
2819
2992
  gap: "6px"
2820
2993
  },
2821
2994
  children: [
2822
- worst !== "low" && /* @__PURE__ */ jsx5(SeverityDot, { sev: worst, title: t.worstLabel(worst) }),
2995
+ worst !== "low" && /* @__PURE__ */ jsx8(SeverityDot, { sev: worst, title: t.worstLabel(worst) }),
2823
2996
  t.kindLabel(kind),
2824
2997
  " ",
2825
2998
  grouped[kind].length
@@ -2829,10 +3002,10 @@ function Panel(props) {
2829
3002
  );
2830
3003
  })
2831
3004
  ] }),
2832
- activeKind && activeTab !== "timeline" && /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: "12px", marginBottom: "6px", fontSize: "11px", color: "#888", flexWrap: "wrap" }, children: [
2833
- /* @__PURE__ */ jsxs5("label", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
3005
+ activeKind && activeTab !== "timeline" && /* @__PURE__ */ jsxs8("div", { style: { display: "flex", alignItems: "center", gap: "12px", marginBottom: "6px", fontSize: "11px", color: "#888", flexWrap: "wrap" }, children: [
3006
+ /* @__PURE__ */ jsxs8("label", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
2834
3007
  t.sort,
2835
- /* @__PURE__ */ jsxs5(
3008
+ /* @__PURE__ */ jsxs8(
2836
3009
  "select",
2837
3010
  {
2838
3011
  "aria-label": t.sort,
@@ -2844,15 +3017,15 @@ function Panel(props) {
2844
3017
  },
2845
3018
  style: { background: "#1a1a1a", color: "#e6e6e6", border: "1px solid #2a2a2a", borderRadius: "4px", padding: "2px 6px", fontSize: "11px" },
2846
3019
  children: [
2847
- /* @__PURE__ */ jsx5("option", { value: "chronological", children: t.sortChronological }),
2848
- /* @__PURE__ */ jsx5("option", { value: "severity", children: t.sortSeverity })
3020
+ /* @__PURE__ */ jsx8("option", { value: "chronological", children: t.sortChronological }),
3021
+ /* @__PURE__ */ jsx8("option", { value: "severity", children: t.sortSeverity })
2849
3022
  ]
2850
3023
  }
2851
3024
  )
2852
3025
  ] }),
2853
- tabSupportsGrouping(activeKind) && /* @__PURE__ */ jsxs5("label", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
3026
+ tabSupportsGrouping(activeKind) && /* @__PURE__ */ jsxs8("label", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
2854
3027
  t.groupBy,
2855
- /* @__PURE__ */ jsxs5(
3028
+ /* @__PURE__ */ jsxs8(
2856
3029
  "select",
2857
3030
  {
2858
3031
  "aria-label": t.groupBy,
@@ -2864,15 +3037,15 @@ function Panel(props) {
2864
3037
  },
2865
3038
  style: { background: "#1a1a1a", color: "#e6e6e6", border: "1px solid #2a2a2a", borderRadius: "4px", padding: "2px 6px", fontSize: "11px" },
2866
3039
  children: [
2867
- /* @__PURE__ */ jsx5("option", { value: "chronological", children: t.groupChronological }),
2868
- activeKind === "render" && /* @__PURE__ */ jsx5("option", { value: "commit", children: t.groupCommit }),
2869
- activeKind === "render" && /* @__PURE__ */ jsx5("option", { value: "component", children: t.groupComponent }),
2870
- activeKind === "forced-reflow" && /* @__PURE__ */ jsx5("option", { value: "source", children: t.groupSource })
3040
+ /* @__PURE__ */ jsx8("option", { value: "chronological", children: t.groupChronological }),
3041
+ activeKind === "render" && /* @__PURE__ */ jsx8("option", { value: "commit", children: t.groupCommit }),
3042
+ activeKind === "render" && /* @__PURE__ */ jsx8("option", { value: "component", children: t.groupComponent }),
3043
+ activeKind === "forced-reflow" && /* @__PURE__ */ jsx8("option", { value: "source", children: t.groupSource })
2871
3044
  ]
2872
3045
  }
2873
3046
  )
2874
3047
  ] }),
2875
- /* @__PURE__ */ jsx5(
3048
+ /* @__PURE__ */ jsx8(
2876
3049
  "input",
2877
3050
  {
2878
3051
  type: "text",
@@ -2887,7 +3060,7 @@ function Panel(props) {
2887
3060
  }
2888
3061
  )
2889
3062
  ] }),
2890
- activeTab === "timeline" && /* @__PURE__ */ jsx5("div", { style: { flexGrow: 1, overflowY: "auto", paddingTop: "4px", paddingBottom: "24px" }, children: /* @__PURE__ */ jsx5(
3063
+ activeTab === "timeline" && /* @__PURE__ */ jsx8("div", { style: { flexGrow: 1, overflowY: "auto", paddingTop: "4px", paddingBottom: "24px" }, children: /* @__PURE__ */ jsx8(
2891
3064
  Timeline,
2892
3065
  {
2893
3066
  signals: result.signals,
@@ -2903,7 +3076,7 @@ function Panel(props) {
2903
3076
  }
2904
3077
  }
2905
3078
  ) }),
2906
- activeKind === "render" && activeTab !== "timeline" && /* @__PURE__ */ jsx5(
3079
+ activeKind === "render" && activeTab !== "timeline" && /* @__PURE__ */ jsx8(
2907
3080
  RenderInsights,
2908
3081
  {
2909
3082
  signals: grouped.render.flatMap((s) => s.kind === "render" ? s.members ?? [s] : []).filter((s) => signalMatchesFilter(s, filterText.render ?? "")),
@@ -2913,7 +3086,8 @@ function Panel(props) {
2913
3086
  }
2914
3087
  }
2915
3088
  ),
2916
- activeKind === "interaction" && activeTab !== "timeline" && /* @__PURE__ */ jsx5(
3089
+ activeKind === "long-task" && activeTab !== "timeline" && /* @__PURE__ */ jsx8(LongTaskEpisode, { signals: result.signals }),
3090
+ activeKind === "layout-shift" && activeTab !== "timeline" && /* @__PURE__ */ jsx8(
2917
3091
  "div",
2918
3092
  {
2919
3093
  style: {
@@ -2925,10 +3099,28 @@ function Panel(props) {
2925
3099
  border: "1px solid #1f1f1f",
2926
3100
  borderRadius: "6px"
2927
3101
  },
2928
- children: t.interactionThresholdHint
3102
+ children: t.layoutShiftHint
2929
3103
  }
2930
3104
  ),
2931
- /* @__PURE__ */ jsx5("ul", { style: { listStyle: "none", margin: 0, padding: 0, overflowY: "auto", flexGrow: 1, display: activeTab === "timeline" ? "none" : void 0 }, children: activeKind && (() => {
3105
+ activeKind === "interaction" && activeTab !== "timeline" && /* @__PURE__ */ jsxs8(Fragment3, { children: [
3106
+ /* @__PURE__ */ jsx8(InpEpisode, { signals: result.signals }),
3107
+ /* @__PURE__ */ jsx8(
3108
+ "div",
3109
+ {
3110
+ style: {
3111
+ padding: "6px 8px",
3112
+ marginBottom: "6px",
3113
+ fontSize: "11px",
3114
+ color: "#888",
3115
+ background: "#141414",
3116
+ border: "1px solid #1f1f1f",
3117
+ borderRadius: "6px"
3118
+ },
3119
+ children: t.interactionThresholdHint
3120
+ }
3121
+ )
3122
+ ] }),
3123
+ /* @__PURE__ */ jsx8("ul", { style: { listStyle: "none", margin: 0, padding: 0, overflowY: "auto", flexGrow: 1, display: activeTab === "timeline" ? "none" : void 0 }, children: activeKind && (() => {
2932
3124
  const filtered = grouped[activeKind].filter(
2933
3125
  (s) => signalMatchesFilter(s, filterText[activeKind] ?? "")
2934
3126
  );
@@ -2938,7 +3130,7 @@ function Panel(props) {
2938
3130
  const currentMode = groupMode[activeKind] ?? "chronological";
2939
3131
  if (currentMode === "chronological") {
2940
3132
  const key2 = `${activeKind}-${gi}`;
2941
- return /* @__PURE__ */ jsx5(
3133
+ return /* @__PURE__ */ jsx8(
2942
3134
  SignalRow,
2943
3135
  {
2944
3136
  signal: g.signals[0],
@@ -2955,7 +3147,7 @@ function Panel(props) {
2955
3147
  const isCascade = activeKind === "render" && currentMode === "commit";
2956
3148
  const renderMembers = g.signals.filter((s) => s.kind === "render");
2957
3149
  const unnecessary = isCascade ? renderMembers.filter((s) => s.reason === "parent").length : 0;
2958
- return /* @__PURE__ */ jsxs5(
3150
+ return /* @__PURE__ */ jsxs8(
2959
3151
  "li",
2960
3152
  {
2961
3153
  "aria-expanded": isOpen,
@@ -2970,34 +3162,34 @@ function Panel(props) {
2970
3162
  userSelect: "none"
2971
3163
  },
2972
3164
  children: [
2973
- /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: "6px", flexWrap: "wrap" }, children: [
2974
- /* @__PURE__ */ jsx5("span", { style: { color: "#888", width: "10px" }, children: isOpen ? "\u25BC" : "\u25B6" }),
2975
- /* @__PURE__ */ jsxs5("span", { children: [
2976
- /* @__PURE__ */ jsx5("strong", { children: g.label }),
3165
+ /* @__PURE__ */ jsxs8("div", { style: { display: "flex", alignItems: "center", gap: "6px", flexWrap: "wrap" }, children: [
3166
+ /* @__PURE__ */ jsx8("span", { style: { color: "#888", width: "10px" }, children: isOpen ? "\u25BC" : "\u25B6" }),
3167
+ /* @__PURE__ */ jsxs8("span", { children: [
3168
+ /* @__PURE__ */ jsx8("strong", { children: g.label }),
2977
3169
  " \xD7",
2978
3170
  g.count
2979
3171
  ] }),
2980
- isCascade && unnecessary > 0 && /* @__PURE__ */ jsxs5("span", { style: { color: RENDER_REASON_COLOR.parent, fontSize: "10px" }, children: [
3172
+ isCascade && unnecessary > 0 && /* @__PURE__ */ jsxs8("span", { style: { color: RENDER_REASON_COLOR.parent, fontSize: "10px" }, children: [
2981
3173
  "\u26A0 ",
2982
3174
  t.unnecessaryRenders(unnecessary)
2983
3175
  ] })
2984
3176
  ] }),
2985
- isOpen && /* @__PURE__ */ jsx5("div", { style: { marginTop: "6px", paddingTop: "6px", borderTop: "1px dashed #2a2a2a", paddingLeft: "8px" }, children: isCascade ? /* @__PURE__ */ jsx5(CascadeMembers, { members: renderMembers }) : /* @__PURE__ */ jsxs5(Fragment2, { children: [
2986
- g.signals.slice(0, 20).map((s, si) => /* @__PURE__ */ jsx5("div", { style: { padding: "2px 0" }, children: /* @__PURE__ */ jsx5(SummaryLine, { signal: s }) }, si)),
2987
- g.signals.length > 20 && /* @__PURE__ */ jsx5("div", { style: { color: "#888", marginTop: "4px" }, children: t.moreItems(g.signals.length - 20) })
3177
+ isOpen && /* @__PURE__ */ jsx8("div", { style: { marginTop: "6px", paddingTop: "6px", borderTop: "1px dashed #2a2a2a", paddingLeft: "8px" }, children: isCascade ? /* @__PURE__ */ jsx8(CascadeMembers, { members: renderMembers }) : /* @__PURE__ */ jsxs8(Fragment3, { children: [
3178
+ g.signals.slice(0, 20).map((s, si) => /* @__PURE__ */ jsx8("div", { style: { padding: "2px 0" }, children: /* @__PURE__ */ jsx8(SummaryLine, { signal: s }) }, si)),
3179
+ g.signals.length > 20 && /* @__PURE__ */ jsx8("div", { style: { color: "#888", marginTop: "4px" }, children: t.moreItems(g.signals.length - 20) })
2988
3180
  ] }) })
2989
3181
  ]
2990
3182
  },
2991
3183
  key
2992
3184
  );
2993
3185
  }) }),
2994
- activeKind && activeTab !== "timeline" && (filterText[activeKind] ?? "").trim() !== "" && grouped[activeKind].length > 0 && grouped[activeKind].every((s) => !signalMatchesFilter(s, filterText[activeKind] ?? "")) && /* @__PURE__ */ jsx5("div", { style: { padding: "12px 8px", fontSize: "11px", color: "#888" }, children: t.filterNoMatches })
3186
+ activeKind && activeTab !== "timeline" && (filterText[activeKind] ?? "").trim() !== "" && grouped[activeKind].length > 0 && grouped[activeKind].every((s) => !signalMatchesFilter(s, filterText[activeKind] ?? "")) && /* @__PURE__ */ jsx8("div", { style: { padding: "12px 8px", fontSize: "11px", color: "#888" }, children: t.filterNoMatches })
2995
3187
  ] })
2996
3188
  ] });
2997
3189
  }
2998
3190
 
2999
3191
  // src/app.tsx
3000
- import { jsx as jsx6, jsxs as jsxs6 } from "preact/jsx-runtime";
3192
+ import { jsx as jsx9, jsxs as jsxs9 } from "preact/jsx-runtime";
3001
3193
  function App(props) {
3002
3194
  const { recorder, position = "bottom-right", resolveFrame, finalize } = props;
3003
3195
  const [recording, setRecording] = useState4(false);
@@ -3043,8 +3235,8 @@ function App(props) {
3043
3235
  function onClose() {
3044
3236
  setResult(null);
3045
3237
  }
3046
- return /* @__PURE__ */ jsxs6(I18nProvider, { children: [
3047
- result === null && /* @__PURE__ */ jsx6(
3238
+ return /* @__PURE__ */ jsxs9(I18nProvider, { children: [
3239
+ result === null && /* @__PURE__ */ jsx9(
3048
3240
  Widget,
3049
3241
  {
3050
3242
  recording,
@@ -3053,16 +3245,16 @@ function App(props) {
3053
3245
  position
3054
3246
  }
3055
3247
  ),
3056
- result !== null && /* @__PURE__ */ jsx6(Panel, { result, position, onClose, resolveFrame })
3248
+ result !== null && /* @__PURE__ */ jsx9(Panel, { result, position, onClose, resolveFrame })
3057
3249
  ] });
3058
3250
  }
3059
3251
 
3060
3252
  // src/mount.tsx
3061
- import { jsx as jsx7 } from "preact/jsx-runtime";
3253
+ import { jsx as jsx10 } from "preact/jsx-runtime";
3062
3254
  function mount(opts) {
3063
3255
  const { recorder, position = "bottom-right", host = document.body, resolveFrame, finalize } = opts;
3064
3256
  return mountShadow(
3065
- /* @__PURE__ */ jsx7(App, { recorder, position, resolveFrame, finalize }),
3257
+ /* @__PURE__ */ jsx10(App, { recorder, position, resolveFrame, finalize }),
3066
3258
  { parent: host }
3067
3259
  );
3068
3260
  }