@localstack/appinspector-ui 1.0.182 → 1.0.184

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.cjs CHANGED
@@ -2494,6 +2494,8 @@ var EVENT_DETAILS_SECTION_BASIC_INFORMATION_TEST_ID = "event-details-section-bas
2494
2494
  var EVENT_DETAILS_SERVICE_NAME_TEST_ID = "event-details-service-name";
2495
2495
  var EVENT_DETAILS_OPERATION_NAME_TEST_ID = "event-details-operation-name";
2496
2496
  var EVENT_DETAILS_CLOSE_BUTTON_TEST_ID = "event-details-close-button";
2497
+ var EVENT_DETAILS_HEADING_TEST_ID = "event-details-heading";
2498
+ var EVENT_DETAILS_HEADING_DURATION_TEST_ID = "event-details-heading-duration";
2497
2499
  var EVENT_DETAILS_STATUS_TEST_ID = "event-details-status";
2498
2500
  var EVENT_DETAILS_RESOURCE_NAME_TEST_ID = "event-details-resource-name";
2499
2501
  var EVENT_DETAILS_RESOURCE_ARN_TEST_ID = "event-details-resource-arn";
@@ -2519,7 +2521,7 @@ var SERVICE_NODE_SERVICE_NAME_TEST_ID = "service-node-service-name";
2519
2521
  var SERVICE_NODE_OPERATION_NAME_TEST_ID = "service-node-operation-name";
2520
2522
  var EMULATOR_VERSION_BANNER_TEST_ID = "emulator-version-banner";
2521
2523
  var SPANS_FILTER_NO_MATCH_TEST_ID = "spans-filter-no-match";
2522
- var FILTER_ISSUES_TEST_ID = "filter-issues";
2524
+ var FILTER_STATUS_TEST_ID = "filter-status";
2523
2525
  var FILTER_PRODUCER_TEST_ID = "filter-producer";
2524
2526
  var FILTER_CONSUMER_TEST_ID = "filter-consumer";
2525
2527
  var HIDDEN_OPS_NOTE_TEST_ID = "hidden-ops-note";
@@ -2527,6 +2529,7 @@ var TRACE_SIDEBAR_TEST_ID = "trace-sidebar";
2527
2529
  var TRACE_SIDEBAR_RESIZE_HANDLE_TEST_ID = "trace-sidebar-resize-handle";
2528
2530
  var TRACE_SIDEBAR_WATERFALL_BUTTON_TEST_ID = "trace-sidebar-waterfall-button";
2529
2531
  var TRACE_SIDEBAR_MAP_BUTTON_TEST_ID = "trace-sidebar-map-button";
2532
+ var TRACE_SIDEBAR_ROOT_HEADING_TEST_ID = "trace-sidebar-root-heading";
2530
2533
  var WATERFALL_TEST_ID = "waterfall";
2531
2534
  var WATERFALL_ROW_TEST_ID = "waterfall-row";
2532
2535
  var WATERFALL_ROW_TOGGLE_TEST_ID = "waterfall-row-toggle";
@@ -15684,20 +15687,6 @@ var NATIVE_SCROLLBARS = {
15684
15687
  var import_jsx_runtime127 = require("react/jsx-runtime");
15685
15688
  var SHOW_EXCLUSIONS = false;
15686
15689
  var toggle = (list, item) => list.includes(item) ? list.filter((other) => other !== item) : [...list, item];
15687
- var ISSUE_LABELS = { error: "Errors", ok: "No issues", warning: "Warnings" };
15688
- var issueOptionIcon = (value) => {
15689
- switch (value) {
15690
- case "error": {
15691
- return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_icons_material4.Cancel, { sx: { color: "error.main", fontSize: 16 } });
15692
- }
15693
- case "warning": {
15694
- return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_icons_material4.Error, { sx: { color: "warning.main", fontSize: 16 } });
15695
- }
15696
- default: {
15697
- return void 0;
15698
- }
15699
- }
15700
- };
15701
15690
  var FilterDropdown = ({ "data-testid": testId, label, onChange, options, value }) => {
15702
15691
  const [anchorElement, setAnchorElement] = (0, import_react37.useState)();
15703
15692
  const open = Boolean(anchorElement);
@@ -15781,7 +15770,6 @@ var FilterDropdown = ({ "data-testid": testId, label, onChange, options, value }
15781
15770
  }
15782
15771
  ),
15783
15772
  !!option.serviceCode && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_material7.Box, { sx: { borderRadius: "4px", flexShrink: 0, lineHeight: 0, mr: 1, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(AwsServiceIcon, { hideTooltip: true, service: option.serviceCode, size: "medium" }) }),
15784
- !!option.icon && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_material7.Box, { sx: { alignItems: "center", display: "flex", flexShrink: 0, mr: 1 }, children: option.icon }),
15785
15773
  /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
15786
15774
  import_material7.ListItemText,
15787
15775
  {
@@ -15825,7 +15813,42 @@ var FilterDropdown = ({ "data-testid": testId, label, onChange, options, value }
15825
15813
  )
15826
15814
  ] });
15827
15815
  };
15828
- var SpansFilterBar = ({ facets, onQueryChange, query: query2 }) => {
15816
+ var StatusCount = ({ count: count2, "data-testid": testId }) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_material7.Typography, { color: "text.secondary", component: "span", "data-testid": testId, variant: "caption", children: count2.toLocaleString() });
15817
+ var StatusFilter = ({ counts, onChange, value }) => {
15818
+ const selected = value.included.length === 0 ? "all" : value.included.length === 1 ? value.included[0] : void 0;
15819
+ return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(
15820
+ import_material7.ToggleButtonGroup,
15821
+ {
15822
+ "aria-label": "Status",
15823
+ "data-testid": FILTER_STATUS_TEST_ID,
15824
+ exclusive: true,
15825
+ onChange: (_event, next) => {
15826
+ if (next) onChange({ excluded: [], included: next === "all" ? [] : [next] });
15827
+ },
15828
+ size: "small",
15829
+ sx: { "& .MuiToggleButton-root": { gap: 0.5, lineHeight: 1.5, px: 1.25, py: 0.5, textTransform: "none" }, "flexShrink": 0 },
15830
+ value: selected,
15831
+ children: [
15832
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_material7.ToggleButton, { value: "all", children: [
15833
+ "All",
15834
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(StatusCount, { count: counts.all })
15835
+ ] }),
15836
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_material7.ToggleButton, { value: "error", children: [
15837
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_icons_material4.Cancel, { sx: { color: "error.main", fontSize: 16 } }),
15838
+ "Errors",
15839
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(StatusCount, { count: counts.error, "data-testid": ERROR_COUNT_TEST_ID })
15840
+ ] }),
15841
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_material7.ToggleButton, { value: "warning", children: [
15842
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_icons_material4.Error, { sx: { color: "warning.main", fontSize: 16 } }),
15843
+ "Warnings",
15844
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(StatusCount, { count: counts.warning, "data-testid": WARNING_COUNT_TEST_ID })
15845
+ ] })
15846
+ ]
15847
+ }
15848
+ );
15849
+ };
15850
+ var SpansFilterBar = ({ facets, onQueryChange, query: query2, totalCount }) => {
15851
+ const issueCount = (value) => facets.issues.find((facet) => facet.value === value)?.count ?? 0;
15829
15852
  const dropdown = (key, label, facetValues, toOption, testId) => {
15830
15853
  const value = getQueryValues(query2, key);
15831
15854
  const loaded = new Set(facetValues.map((facet) => facet.value));
@@ -15843,17 +15866,29 @@ var SpansFilterBar = ({ facets, onQueryChange, query: query2 }) => {
15843
15866
  }
15844
15867
  );
15845
15868
  };
15846
- return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_material7.Box, { sx: { alignItems: "center", display: "flex", gap: 1 }, children: [
15847
- dropdown("producer", "Producer", facets.producer, (facet) => facet.value === EXTERNAL_PRODUCER ? { label: "External producer" } : { label: getServiceDisplayName(facet.value), serviceCode: facet.value }, FILTER_PRODUCER_TEST_ID),
15848
- dropdown("service", "Consumer", facets.service, (facet) => ({ label: getServiceDisplayName(facet.value), serviceCode: facet.value }), FILTER_CONSUMER_TEST_ID),
15849
- dropdown("status", "Issues", facets.issues, (facet) => ({ icon: issueOptionIcon(facet.value), label: ISSUE_LABELS[facet.value] ?? facet.value }), FILTER_ISSUES_TEST_ID)
15850
- ] });
15869
+ return (
15870
+ // Its controls wrap as items of the parent's controls row.
15871
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_material7.Box, { sx: { display: "contents" }, children: [
15872
+ /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
15873
+ StatusFilter,
15874
+ {
15875
+ counts: { all: totalCount, error: issueCount("error"), warning: issueCount("warning") },
15876
+ onChange: (next) => {
15877
+ onQueryChange(setQueryValues(query2, "status", next));
15878
+ },
15879
+ value: getQueryValues(query2, "status")
15880
+ }
15881
+ ),
15882
+ dropdown("producer", "Producer", facets.producer, (facet) => facet.value === EXTERNAL_PRODUCER ? { label: "External producer" } : { label: getServiceDisplayName(facet.value), serviceCode: facet.value }, FILTER_PRODUCER_TEST_ID),
15883
+ dropdown("service", "Consumer", facets.service, (facet) => ({ label: getServiceDisplayName(facet.value), serviceCode: facet.value }), FILTER_CONSUMER_TEST_ID)
15884
+ ] })
15885
+ );
15851
15886
  };
15852
15887
 
15853
15888
  // src/components/spans-list/spans-data-grid.tsx
15854
15889
  var import_jsx_runtime128 = require("react/jsx-runtime");
15855
15890
  var SHOW_FILTERS_IN_SEARCH = false;
15856
- var FILTER_NAMES = [["producer", "Producer"], ["service", "Consumer"], ["status", "Issues"]];
15891
+ var FILTER_NAMES = [["producer", "Producer"], ["service", "Consumer"], ["status", "Status"]];
15857
15892
  var columnHelper = createColumnHelper();
15858
15893
  var newSpanBackgroundColor = {
15859
15894
  dark: { from: "rgba(255, 193, 7, 0.14)", to: "rgba(255, 193, 7, 0)" },
@@ -16023,8 +16058,6 @@ var SpansDataGrid = ({
16023
16058
  if (!spansLoaded) return;
16024
16059
  return compute.topLevelIds.map((spanId) => getSpan(spanId)).filter((span) => span !== void 0);
16025
16060
  }, [compute.topLevelIds, getSpan, spansLoaded]);
16026
- const errorCount = compute.allIds.filter((spanId) => compute.rows[spanId]?.error).length;
16027
- const warningCount = compute.allIds.filter((spanId) => compute.rows[spanId]?.warning).length;
16028
16061
  const downstreamOf = (0, import_react38.useCallback)((spanId) => compute.rows[spanId]?.downstream, [compute.rows]);
16029
16062
  const columns = (0, import_react38.useMemo)(() => [
16030
16063
  columnHelper.display({
@@ -16142,8 +16175,8 @@ var SpansDataGrid = ({
16142
16175
  }, [order2, spans?.length, lastSpanId]);
16143
16176
  return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment, { children: [
16144
16177
  /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Grid, { item: true, xs: 12, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_material8.Box, { sx: { display: "flex", flexDirection: "column", gap: "0.5rem", pt: 1, px: 1 }, children: [
16145
- /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_material8.Box, { sx: { alignItems: "center", display: "flex", flexWrap: "wrap", gap: "0.5rem" }, children: [
16146
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { flex: 1, maxWidth: 220, minWidth: 96, order: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16178
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_material8.Box, { sx: { alignItems: "center", containerType: "inline-size", display: "flex", flexWrap: "wrap", gap: "0.5rem" }, children: [
16179
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { flex: "1 1 160px", maxWidth: 220, order: -1 }, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16147
16180
  SpansSearchField,
16148
16181
  {
16149
16182
  onChange: (value) => {
@@ -16153,16 +16186,16 @@ var SpansDataGrid = ({
16153
16186
  value: searchText
16154
16187
  }
16155
16188
  ) }),
16156
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { order: { md: 2, xs: 4 }, width: { md: "auto", xs: "100%" } }, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16189
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16157
16190
  SpansFilterBar,
16158
16191
  {
16159
16192
  facets: compute.facets,
16160
16193
  onQueryChange: updateDropdownQuery,
16161
- query: dropdownQuery
16194
+ query: dropdownQuery,
16195
+ totalCount: compute.totalCount
16162
16196
  }
16163
- ) }),
16164
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { flex: 1, order: { md: 3, xs: 2 } } }),
16165
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { flexShrink: 0, order: { md: 4, xs: 3 } }, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16197
+ ),
16198
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { "@container (min-width: 960px)": { order: 1 }, "flexShrink": 0, "ml": "auto", "order": -1 }, children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
16166
16199
  import_material8.Button,
16167
16200
  {
16168
16201
  "data-testid": CLEAR_SPANS_TEST_ID,
@@ -16171,7 +16204,8 @@ var SpansDataGrid = ({
16171
16204
  startIcon: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_icons_material5.DeleteForeverOutlined, {}),
16172
16205
  children: "Clear Operations"
16173
16206
  }
16174
- ) })
16207
+ ) }),
16208
+ /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Box, { sx: { "@container (min-width: 960px)": { display: "none" }, "flexBasis": "100%", "mt": "-0.5rem", "order": -1 } })
16175
16209
  ] }),
16176
16210
  /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_material8.Box, { sx: { alignItems: "center", display: "flex", gap: "0.5rem", pl: 0.5 }, children: [
16177
16211
  /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
@@ -16204,50 +16238,6 @@ var SpansDataGrid = ({
16204
16238
  }
16205
16239
  )
16206
16240
  ] })
16207
- ] }),
16208
- errorCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment, { children: [
16209
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Typography, { color: "text.secondary", variant: "caption", children: "\xB7" }),
16210
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Tooltip, { title: "Number of errors detected across all operations", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(
16211
- import_material8.Box,
16212
- {
16213
- "data-testid": ERROR_COUNT_TEST_ID,
16214
- sx: {
16215
- alignItems: "center",
16216
- borderBottom: "1px dotted",
16217
- borderColor: "error.main",
16218
- cursor: "help",
16219
- display: "flex",
16220
- gap: 0.5,
16221
- mb: "-1px"
16222
- },
16223
- children: [
16224
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Typography, { color: "error", variant: "body2", children: errorCount.toLocaleString() }),
16225
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Typography, { color: "error", variant: "caption", children: errorCount === 1 ? "error" : "errors" })
16226
- ]
16227
- }
16228
- ) })
16229
- ] }),
16230
- warningCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment, { children: [
16231
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Typography, { color: "text.secondary", variant: "caption", children: "\xB7" }),
16232
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Tooltip, { title: "Number of warnings detected across all operations", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(
16233
- import_material8.Box,
16234
- {
16235
- "data-testid": WARNING_COUNT_TEST_ID,
16236
- sx: {
16237
- alignItems: "center",
16238
- borderBottom: "1px dotted",
16239
- borderColor: "warning.main",
16240
- cursor: "help",
16241
- display: "flex",
16242
- gap: 0.5,
16243
- mb: "-1px"
16244
- },
16245
- children: [
16246
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Typography, { color: "warning.main", variant: "body2", children: warningCount.toLocaleString() }),
16247
- /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_material8.Typography, { color: "warning.main", variant: "caption", children: warningCount === 1 ? "warning" : "warnings" })
16248
- ]
16249
- }
16250
- ) })
16251
16241
  ] })
16252
16242
  ] })
16253
16243
  ] }) }),
@@ -31410,6 +31400,7 @@ var EventDetails = ({ onClose, selectedEvent }) => {
31410
31400
  }
31411
31401
  const exceptionPayload = tryParseJson(selectedEvent.attributes?.["localstack.aws.service.exception"]);
31412
31402
  const duration = selectedEvent.end_time_unix_nano ? ((BigInt(selectedEvent.end_time_unix_nano) - BigInt(selectedEvent.start_time_unix_nano)) / BigInt("1000000")).toString() : void 0;
31403
+ const resource = shortResourceName(selectedEvent.resource_name, selectedEvent.arn);
31413
31404
  const showError = issues.error;
31414
31405
  const showPermissions = selectedEvent.iam_errors_suppressed === true || eventGroups.permissions !== void 0;
31415
31406
  const showLogs = isLambdaInvoke && requestId !== void 0;
@@ -31435,12 +31426,21 @@ var EventDetails = ({ onClose, selectedEvent }) => {
31435
31426
  borderBottom: "1px solid",
31436
31427
  borderColor: "divider",
31437
31428
  display: "flex",
31438
- justifyContent: "space-between",
31429
+ gap: 1.5,
31439
31430
  px: 2,
31440
31431
  py: 1
31441
31432
  },
31442
31433
  children: [
31443
- /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.Box, { children: /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.Typography, { sx: { fontWeight: 600 }, variant: "h6", children: "Operation Details" }) }),
31434
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsxs)(import_material19.Box, { sx: { flex: 1, minWidth: 0 }, children: [
31435
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.Typography, { color: "text.secondary", component: "div", sx: { lineHeight: 1.5 }, variant: "overline", children: "Selected operation" }),
31436
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsxs)(import_material19.Box, { "data-testid": EVENT_DETAILS_HEADING_TEST_ID, sx: { alignItems: "center", display: "flex", gap: 1, minWidth: 0 }, children: [
31437
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(AwsServiceIcon, { hideTooltip: true, service: selectedEvent.service_name, size: "small" }),
31438
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.Typography, { noWrap: true, sx: { flex: "0 1 auto", fontWeight: 600, minWidth: 0 }, title: selectedEvent.operation_name, variant: "subtitle1", children: selectedEvent.operation_name }),
31439
+ resource !== "" && resource !== "*" && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.Typography, { color: "text.secondary", noWrap: true, sx: { flex: "1 1 0", minWidth: 0 }, title: resource, variant: "body2", children: resource }),
31440
+ duration !== void 0 && // A fixed box, so a screenshot can mask the varying value without the mask edge moving.
31441
+ /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.Typography, { color: "text.secondary", "data-testid": EVENT_DETAILS_HEADING_DURATION_TEST_ID, sx: { flex: "none", ml: "auto", textAlign: "right", width: 64 }, variant: "body2", children: formatDuration(Number(duration)) })
31442
+ ] })
31443
+ ] }),
31444
31444
  onClose && /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_material19.IconButton, { "data-testid": EVENT_DETAILS_CLOSE_BUTTON_TEST_ID, onClick: onClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(import_icons_material11.Close, {}) })
31445
31445
  ]
31446
31446
  }
@@ -32706,6 +32706,7 @@ var TraceSidebar = ({ onClose, onSelectSpan, selectedSpanId, spanMatches, spans
32706
32706
  }
32707
32707
  };
32708
32708
  }, [spans, selectedSpanId]);
32709
+ const rootResource = root2 ? shortResourceName(root2.resource_name, root2.arn) : "";
32709
32710
  return /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(
32710
32711
  import_material25.Box,
32711
32712
  {
@@ -32759,9 +32760,11 @@ var TraceSidebar = ({ onClose, onSelectSpan, selectedSpanId, spanMatches, spans
32759
32760
  ),
32760
32761
  /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(import_material25.Box, { sx: { alignItems: "center", borderBottom: 1, borderColor: "divider", display: "flex", gap: 1.5, px: 2, py: 1 }, children: [
32761
32762
  /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(import_material25.Box, { sx: { flex: 1, minWidth: 0 }, children: [
32762
- root2 && /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(import_material25.Box, { sx: { alignItems: "center", display: "flex", gap: 1 }, children: [
32763
+ /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(import_material25.Typography, { color: "text.secondary", component: "div", sx: { lineHeight: 1.5 }, variant: "overline", children: "Trace root" }),
32764
+ root2 && /* @__PURE__ */ (0, import_jsx_runtime148.jsxs)(import_material25.Box, { "data-testid": TRACE_SIDEBAR_ROOT_HEADING_TEST_ID, sx: { alignItems: "center", display: "flex", gap: 1, minWidth: 0 }, children: [
32763
32765
  /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(AwsServiceIcon, { hideTooltip: true, service: root2.service_name, size: "small" }),
32764
- /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(import_material25.Typography, { noWrap: true, sx: { fontWeight: 600 }, title: root2.operation_name, variant: "subtitle1", children: root2.operation_name })
32766
+ /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(import_material25.Typography, { noWrap: true, sx: { flex: "0 1 auto", fontWeight: 600, minWidth: 0 }, title: root2.operation_name, variant: "subtitle1", children: root2.operation_name }),
32767
+ rootResource !== "" && rootResource !== "*" && /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(import_material25.Typography, { color: "text.secondary", noWrap: true, sx: { flex: "1 1 0", minWidth: 0 }, title: rootResource, variant: "body2", children: rootResource })
32765
32768
  ] }),
32766
32769
  /* @__PURE__ */ (0, import_jsx_runtime148.jsx)(import_material25.Typography, { color: "text.secondary", variant: "caption", children: [
32767
32770
  formatDuration(stats.durationMs),