@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.js CHANGED
@@ -2490,6 +2490,8 @@ var EVENT_DETAILS_SECTION_BASIC_INFORMATION_TEST_ID = "event-details-section-bas
2490
2490
  var EVENT_DETAILS_SERVICE_NAME_TEST_ID = "event-details-service-name";
2491
2491
  var EVENT_DETAILS_OPERATION_NAME_TEST_ID = "event-details-operation-name";
2492
2492
  var EVENT_DETAILS_CLOSE_BUTTON_TEST_ID = "event-details-close-button";
2493
+ var EVENT_DETAILS_HEADING_TEST_ID = "event-details-heading";
2494
+ var EVENT_DETAILS_HEADING_DURATION_TEST_ID = "event-details-heading-duration";
2493
2495
  var EVENT_DETAILS_STATUS_TEST_ID = "event-details-status";
2494
2496
  var EVENT_DETAILS_RESOURCE_NAME_TEST_ID = "event-details-resource-name";
2495
2497
  var EVENT_DETAILS_RESOURCE_ARN_TEST_ID = "event-details-resource-arn";
@@ -2515,7 +2517,7 @@ var SERVICE_NODE_SERVICE_NAME_TEST_ID = "service-node-service-name";
2515
2517
  var SERVICE_NODE_OPERATION_NAME_TEST_ID = "service-node-operation-name";
2516
2518
  var EMULATOR_VERSION_BANNER_TEST_ID = "emulator-version-banner";
2517
2519
  var SPANS_FILTER_NO_MATCH_TEST_ID = "spans-filter-no-match";
2518
- var FILTER_ISSUES_TEST_ID = "filter-issues";
2520
+ var FILTER_STATUS_TEST_ID = "filter-status";
2519
2521
  var FILTER_PRODUCER_TEST_ID = "filter-producer";
2520
2522
  var FILTER_CONSUMER_TEST_ID = "filter-consumer";
2521
2523
  var HIDDEN_OPS_NOTE_TEST_ID = "hidden-ops-note";
@@ -2523,6 +2525,7 @@ var TRACE_SIDEBAR_TEST_ID = "trace-sidebar";
2523
2525
  var TRACE_SIDEBAR_RESIZE_HANDLE_TEST_ID = "trace-sidebar-resize-handle";
2524
2526
  var TRACE_SIDEBAR_WATERFALL_BUTTON_TEST_ID = "trace-sidebar-waterfall-button";
2525
2527
  var TRACE_SIDEBAR_MAP_BUTTON_TEST_ID = "trace-sidebar-map-button";
2528
+ var TRACE_SIDEBAR_ROOT_HEADING_TEST_ID = "trace-sidebar-root-heading";
2526
2529
  var WATERFALL_TEST_ID = "waterfall";
2527
2530
  var WATERFALL_ROW_TEST_ID = "waterfall-row";
2528
2531
  var WATERFALL_ROW_TOGGLE_TEST_ID = "waterfall-row-toggle";
@@ -2644,7 +2647,6 @@ import {
2644
2647
  TableRow,
2645
2648
  TableSortLabel,
2646
2649
  TextField,
2647
- Tooltip as Tooltip5,
2648
2650
  Typography as Typography6,
2649
2651
  useTheme as useTheme2
2650
2652
  } from "@mui/material";
@@ -15696,6 +15698,8 @@ import {
15696
15698
  ListSubheader,
15697
15699
  Menu,
15698
15700
  MenuItem,
15701
+ ToggleButton,
15702
+ ToggleButtonGroup,
15699
15703
  Typography as Typography5
15700
15704
  } from "@mui/material";
15701
15705
  import { useState as useState5 } from "react";
@@ -15709,20 +15713,6 @@ var NATIVE_SCROLLBARS = {
15709
15713
  import { Fragment as Fragment4, jsx as jsx127, jsxs as jsxs122 } from "react/jsx-runtime";
15710
15714
  var SHOW_EXCLUSIONS = false;
15711
15715
  var toggle = (list, item) => list.includes(item) ? list.filter((other) => other !== item) : [...list, item];
15712
- var ISSUE_LABELS = { error: "Errors", ok: "No issues", warning: "Warnings" };
15713
- var issueOptionIcon = (value) => {
15714
- switch (value) {
15715
- case "error": {
15716
- return /* @__PURE__ */ jsx127(Cancel3, { sx: { color: "error.main", fontSize: 16 } });
15717
- }
15718
- case "warning": {
15719
- return /* @__PURE__ */ jsx127(WarningIcon, { sx: { color: "warning.main", fontSize: 16 } });
15720
- }
15721
- default: {
15722
- return void 0;
15723
- }
15724
- }
15725
- };
15726
15716
  var FilterDropdown = ({ "data-testid": testId, label, onChange, options, value }) => {
15727
15717
  const [anchorElement, setAnchorElement] = useState5();
15728
15718
  const open = Boolean(anchorElement);
@@ -15806,7 +15796,6 @@ var FilterDropdown = ({ "data-testid": testId, label, onChange, options, value }
15806
15796
  }
15807
15797
  ),
15808
15798
  !!option.serviceCode && /* @__PURE__ */ jsx127(Box5, { sx: { borderRadius: "4px", flexShrink: 0, lineHeight: 0, mr: 1, overflow: "hidden" }, children: /* @__PURE__ */ jsx127(AwsServiceIcon, { hideTooltip: true, service: option.serviceCode, size: "medium" }) }),
15809
- !!option.icon && /* @__PURE__ */ jsx127(Box5, { sx: { alignItems: "center", display: "flex", flexShrink: 0, mr: 1 }, children: option.icon }),
15810
15799
  /* @__PURE__ */ jsx127(
15811
15800
  ListItemText,
15812
15801
  {
@@ -15850,7 +15839,42 @@ var FilterDropdown = ({ "data-testid": testId, label, onChange, options, value }
15850
15839
  )
15851
15840
  ] });
15852
15841
  };
15853
- var SpansFilterBar = ({ facets, onQueryChange, query: query2 }) => {
15842
+ var StatusCount = ({ count: count2, "data-testid": testId }) => /* @__PURE__ */ jsx127(Typography5, { color: "text.secondary", component: "span", "data-testid": testId, variant: "caption", children: count2.toLocaleString() });
15843
+ var StatusFilter = ({ counts, onChange, value }) => {
15844
+ const selected = value.included.length === 0 ? "all" : value.included.length === 1 ? value.included[0] : void 0;
15845
+ return /* @__PURE__ */ jsxs122(
15846
+ ToggleButtonGroup,
15847
+ {
15848
+ "aria-label": "Status",
15849
+ "data-testid": FILTER_STATUS_TEST_ID,
15850
+ exclusive: true,
15851
+ onChange: (_event, next) => {
15852
+ if (next) onChange({ excluded: [], included: next === "all" ? [] : [next] });
15853
+ },
15854
+ size: "small",
15855
+ sx: { "& .MuiToggleButton-root": { gap: 0.5, lineHeight: 1.5, px: 1.25, py: 0.5, textTransform: "none" }, "flexShrink": 0 },
15856
+ value: selected,
15857
+ children: [
15858
+ /* @__PURE__ */ jsxs122(ToggleButton, { value: "all", children: [
15859
+ "All",
15860
+ /* @__PURE__ */ jsx127(StatusCount, { count: counts.all })
15861
+ ] }),
15862
+ /* @__PURE__ */ jsxs122(ToggleButton, { value: "error", children: [
15863
+ /* @__PURE__ */ jsx127(Cancel3, { sx: { color: "error.main", fontSize: 16 } }),
15864
+ "Errors",
15865
+ /* @__PURE__ */ jsx127(StatusCount, { count: counts.error, "data-testid": ERROR_COUNT_TEST_ID })
15866
+ ] }),
15867
+ /* @__PURE__ */ jsxs122(ToggleButton, { value: "warning", children: [
15868
+ /* @__PURE__ */ jsx127(WarningIcon, { sx: { color: "warning.main", fontSize: 16 } }),
15869
+ "Warnings",
15870
+ /* @__PURE__ */ jsx127(StatusCount, { count: counts.warning, "data-testid": WARNING_COUNT_TEST_ID })
15871
+ ] })
15872
+ ]
15873
+ }
15874
+ );
15875
+ };
15876
+ var SpansFilterBar = ({ facets, onQueryChange, query: query2, totalCount }) => {
15877
+ const issueCount = (value) => facets.issues.find((facet) => facet.value === value)?.count ?? 0;
15854
15878
  const dropdown = (key, label, facetValues, toOption, testId) => {
15855
15879
  const value = getQueryValues(query2, key);
15856
15880
  const loaded = new Set(facetValues.map((facet) => facet.value));
@@ -15868,17 +15892,29 @@ var SpansFilterBar = ({ facets, onQueryChange, query: query2 }) => {
15868
15892
  }
15869
15893
  );
15870
15894
  };
15871
- return /* @__PURE__ */ jsxs122(Box5, { sx: { alignItems: "center", display: "flex", gap: 1 }, children: [
15872
- dropdown("producer", "Producer", facets.producer, (facet) => facet.value === EXTERNAL_PRODUCER ? { label: "External producer" } : { label: getServiceDisplayName(facet.value), serviceCode: facet.value }, FILTER_PRODUCER_TEST_ID),
15873
- dropdown("service", "Consumer", facets.service, (facet) => ({ label: getServiceDisplayName(facet.value), serviceCode: facet.value }), FILTER_CONSUMER_TEST_ID),
15874
- dropdown("status", "Issues", facets.issues, (facet) => ({ icon: issueOptionIcon(facet.value), label: ISSUE_LABELS[facet.value] ?? facet.value }), FILTER_ISSUES_TEST_ID)
15875
- ] });
15895
+ return (
15896
+ // Its controls wrap as items of the parent's controls row.
15897
+ /* @__PURE__ */ jsxs122(Box5, { sx: { display: "contents" }, children: [
15898
+ /* @__PURE__ */ jsx127(
15899
+ StatusFilter,
15900
+ {
15901
+ counts: { all: totalCount, error: issueCount("error"), warning: issueCount("warning") },
15902
+ onChange: (next) => {
15903
+ onQueryChange(setQueryValues(query2, "status", next));
15904
+ },
15905
+ value: getQueryValues(query2, "status")
15906
+ }
15907
+ ),
15908
+ dropdown("producer", "Producer", facets.producer, (facet) => facet.value === EXTERNAL_PRODUCER ? { label: "External producer" } : { label: getServiceDisplayName(facet.value), serviceCode: facet.value }, FILTER_PRODUCER_TEST_ID),
15909
+ dropdown("service", "Consumer", facets.service, (facet) => ({ label: getServiceDisplayName(facet.value), serviceCode: facet.value }), FILTER_CONSUMER_TEST_ID)
15910
+ ] })
15911
+ );
15876
15912
  };
15877
15913
 
15878
15914
  // src/components/spans-list/spans-data-grid.tsx
15879
15915
  import { Fragment as Fragment5, jsx as jsx128, jsxs as jsxs123 } from "react/jsx-runtime";
15880
15916
  var SHOW_FILTERS_IN_SEARCH = false;
15881
- var FILTER_NAMES = [["producer", "Producer"], ["service", "Consumer"], ["status", "Issues"]];
15917
+ var FILTER_NAMES = [["producer", "Producer"], ["service", "Consumer"], ["status", "Status"]];
15882
15918
  var columnHelper = createColumnHelper();
15883
15919
  var newSpanBackgroundColor = {
15884
15920
  dark: { from: "rgba(255, 193, 7, 0.14)", to: "rgba(255, 193, 7, 0)" },
@@ -16048,8 +16084,6 @@ var SpansDataGrid = ({
16048
16084
  if (!spansLoaded) return;
16049
16085
  return compute.topLevelIds.map((spanId) => getSpan(spanId)).filter((span) => span !== void 0);
16050
16086
  }, [compute.topLevelIds, getSpan, spansLoaded]);
16051
- const errorCount = compute.allIds.filter((spanId) => compute.rows[spanId]?.error).length;
16052
- const warningCount = compute.allIds.filter((spanId) => compute.rows[spanId]?.warning).length;
16053
16087
  const downstreamOf = useCallback2((spanId) => compute.rows[spanId]?.downstream, [compute.rows]);
16054
16088
  const columns = useMemo4(() => [
16055
16089
  columnHelper.display({
@@ -16167,8 +16201,8 @@ var SpansDataGrid = ({
16167
16201
  }, [order2, spans?.length, lastSpanId]);
16168
16202
  return /* @__PURE__ */ jsxs123(Fragment5, { children: [
16169
16203
  /* @__PURE__ */ jsx128(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs123(Box6, { sx: { display: "flex", flexDirection: "column", gap: "0.5rem", pt: 1, px: 1 }, children: [
16170
- /* @__PURE__ */ jsxs123(Box6, { sx: { alignItems: "center", display: "flex", flexWrap: "wrap", gap: "0.5rem" }, children: [
16171
- /* @__PURE__ */ jsx128(Box6, { sx: { flex: 1, maxWidth: 220, minWidth: 96, order: 1 }, children: /* @__PURE__ */ jsx128(
16204
+ /* @__PURE__ */ jsxs123(Box6, { sx: { alignItems: "center", containerType: "inline-size", display: "flex", flexWrap: "wrap", gap: "0.5rem" }, children: [
16205
+ /* @__PURE__ */ jsx128(Box6, { sx: { flex: "1 1 160px", maxWidth: 220, order: -1 }, children: /* @__PURE__ */ jsx128(
16172
16206
  SpansSearchField,
16173
16207
  {
16174
16208
  onChange: (value) => {
@@ -16178,16 +16212,16 @@ var SpansDataGrid = ({
16178
16212
  value: searchText
16179
16213
  }
16180
16214
  ) }),
16181
- /* @__PURE__ */ jsx128(Box6, { sx: { order: { md: 2, xs: 4 }, width: { md: "auto", xs: "100%" } }, children: /* @__PURE__ */ jsx128(
16215
+ /* @__PURE__ */ jsx128(
16182
16216
  SpansFilterBar,
16183
16217
  {
16184
16218
  facets: compute.facets,
16185
16219
  onQueryChange: updateDropdownQuery,
16186
- query: dropdownQuery
16220
+ query: dropdownQuery,
16221
+ totalCount: compute.totalCount
16187
16222
  }
16188
- ) }),
16189
- /* @__PURE__ */ jsx128(Box6, { sx: { flex: 1, order: { md: 3, xs: 2 } } }),
16190
- /* @__PURE__ */ jsx128(Box6, { sx: { flexShrink: 0, order: { md: 4, xs: 3 } }, children: /* @__PURE__ */ jsx128(
16223
+ ),
16224
+ /* @__PURE__ */ jsx128(Box6, { sx: { "@container (min-width: 960px)": { order: 1 }, "flexShrink": 0, "ml": "auto", "order": -1 }, children: /* @__PURE__ */ jsx128(
16191
16225
  Button3,
16192
16226
  {
16193
16227
  "data-testid": CLEAR_SPANS_TEST_ID,
@@ -16196,7 +16230,8 @@ var SpansDataGrid = ({
16196
16230
  startIcon: /* @__PURE__ */ jsx128(DeleteForeverOutlined, {}),
16197
16231
  children: "Clear Operations"
16198
16232
  }
16199
- ) })
16233
+ ) }),
16234
+ /* @__PURE__ */ jsx128(Box6, { sx: { "@container (min-width: 960px)": { display: "none" }, "flexBasis": "100%", "mt": "-0.5rem", "order": -1 } })
16200
16235
  ] }),
16201
16236
  /* @__PURE__ */ jsxs123(Box6, { sx: { alignItems: "center", display: "flex", gap: "0.5rem", pl: 0.5 }, children: [
16202
16237
  /* @__PURE__ */ jsx128(
@@ -16229,50 +16264,6 @@ var SpansDataGrid = ({
16229
16264
  }
16230
16265
  )
16231
16266
  ] })
16232
- ] }),
16233
- errorCount > 0 && /* @__PURE__ */ jsxs123(Fragment5, { children: [
16234
- /* @__PURE__ */ jsx128(Typography6, { color: "text.secondary", variant: "caption", children: "\xB7" }),
16235
- /* @__PURE__ */ jsx128(Tooltip5, { title: "Number of errors detected across all operations", children: /* @__PURE__ */ jsxs123(
16236
- Box6,
16237
- {
16238
- "data-testid": ERROR_COUNT_TEST_ID,
16239
- sx: {
16240
- alignItems: "center",
16241
- borderBottom: "1px dotted",
16242
- borderColor: "error.main",
16243
- cursor: "help",
16244
- display: "flex",
16245
- gap: 0.5,
16246
- mb: "-1px"
16247
- },
16248
- children: [
16249
- /* @__PURE__ */ jsx128(Typography6, { color: "error", variant: "body2", children: errorCount.toLocaleString() }),
16250
- /* @__PURE__ */ jsx128(Typography6, { color: "error", variant: "caption", children: errorCount === 1 ? "error" : "errors" })
16251
- ]
16252
- }
16253
- ) })
16254
- ] }),
16255
- warningCount > 0 && /* @__PURE__ */ jsxs123(Fragment5, { children: [
16256
- /* @__PURE__ */ jsx128(Typography6, { color: "text.secondary", variant: "caption", children: "\xB7" }),
16257
- /* @__PURE__ */ jsx128(Tooltip5, { title: "Number of warnings detected across all operations", children: /* @__PURE__ */ jsxs123(
16258
- Box6,
16259
- {
16260
- "data-testid": WARNING_COUNT_TEST_ID,
16261
- sx: {
16262
- alignItems: "center",
16263
- borderBottom: "1px dotted",
16264
- borderColor: "warning.main",
16265
- cursor: "help",
16266
- display: "flex",
16267
- gap: 0.5,
16268
- mb: "-1px"
16269
- },
16270
- children: [
16271
- /* @__PURE__ */ jsx128(Typography6, { color: "warning.main", variant: "body2", children: warningCount.toLocaleString() }),
16272
- /* @__PURE__ */ jsx128(Typography6, { color: "warning.main", variant: "caption", children: warningCount === 1 ? "warning" : "warnings" })
16273
- ]
16274
- }
16275
- ) })
16276
16267
  ] })
16277
16268
  ] })
16278
16269
  ] }) }),
@@ -16668,7 +16659,7 @@ var StatusMessage = ({
16668
16659
 
16669
16660
  // src/components/trace-panel/trace-sidebar.tsx
16670
16661
  import { Close as Close4 } from "@mui/icons-material";
16671
- import { Box as Box20, IconButton as IconButton8, ToggleButton as ToggleButton2, ToggleButtonGroup as ToggleButtonGroup2, Typography as Typography15 } from "@mui/material";
16662
+ import { Box as Box20, IconButton as IconButton8, ToggleButton as ToggleButton3, ToggleButtonGroup as ToggleButtonGroup3, Typography as Typography15 } from "@mui/material";
16672
16663
  import { ReactFlowProvider } from "@xyflow/react";
16673
16664
  import * as React125 from "react";
16674
16665
 
@@ -16830,7 +16821,7 @@ function unixNanoToMilliseconds(unixNanoString) {
16830
16821
 
16831
16822
  // src/components/event-details/copy-button.tsx
16832
16823
  import { Check, ContentCopy } from "@mui/icons-material";
16833
- import { IconButton as IconButton4, Tooltip as Tooltip6 } from "@mui/material";
16824
+ import { IconButton as IconButton4, Tooltip as Tooltip5 } from "@mui/material";
16834
16825
  import { useCallback as useCallback3, useState as useState8 } from "react";
16835
16826
  import { jsx as jsx131 } from "react/jsx-runtime";
16836
16827
  var CopyButton = ({ value }) => {
@@ -16844,7 +16835,7 @@ var CopyButton = ({ value }) => {
16844
16835
  }, 1500);
16845
16836
  });
16846
16837
  }, [value]);
16847
- return /* @__PURE__ */ jsx131(Tooltip6, { title: copied ? "Copied!" : "Copy", children: /* @__PURE__ */ jsx131(
16838
+ return /* @__PURE__ */ jsx131(Tooltip5, { title: copied ? "Copied!" : "Copy", children: /* @__PURE__ */ jsx131(
16848
16839
  IconButton4,
16849
16840
  {
16850
16841
  className: "copy-btn",
@@ -31435,6 +31426,7 @@ var EventDetails = ({ onClose, selectedEvent }) => {
31435
31426
  }
31436
31427
  const exceptionPayload = tryParseJson(selectedEvent.attributes?.["localstack.aws.service.exception"]);
31437
31428
  const duration = selectedEvent.end_time_unix_nano ? ((BigInt(selectedEvent.end_time_unix_nano) - BigInt(selectedEvent.start_time_unix_nano)) / BigInt("1000000")).toString() : void 0;
31429
+ const resource = shortResourceName(selectedEvent.resource_name, selectedEvent.arn);
31438
31430
  const showError = issues.error;
31439
31431
  const showPermissions = selectedEvent.iam_errors_suppressed === true || eventGroups.permissions !== void 0;
31440
31432
  const showLogs = isLambdaInvoke && requestId !== void 0;
@@ -31460,12 +31452,21 @@ var EventDetails = ({ onClose, selectedEvent }) => {
31460
31452
  borderBottom: "1px solid",
31461
31453
  borderColor: "divider",
31462
31454
  display: "flex",
31463
- justifyContent: "space-between",
31455
+ gap: 1.5,
31464
31456
  px: 2,
31465
31457
  py: 1
31466
31458
  },
31467
31459
  children: [
31468
- /* @__PURE__ */ jsx142(Box16, { children: /* @__PURE__ */ jsx142(Typography12, { sx: { fontWeight: 600 }, variant: "h6", children: "Operation Details" }) }),
31460
+ /* @__PURE__ */ jsxs131(Box16, { sx: { flex: 1, minWidth: 0 }, children: [
31461
+ /* @__PURE__ */ jsx142(Typography12, { color: "text.secondary", component: "div", sx: { lineHeight: 1.5 }, variant: "overline", children: "Selected operation" }),
31462
+ /* @__PURE__ */ jsxs131(Box16, { "data-testid": EVENT_DETAILS_HEADING_TEST_ID, sx: { alignItems: "center", display: "flex", gap: 1, minWidth: 0 }, children: [
31463
+ /* @__PURE__ */ jsx142(AwsServiceIcon, { hideTooltip: true, service: selectedEvent.service_name, size: "small" }),
31464
+ /* @__PURE__ */ jsx142(Typography12, { noWrap: true, sx: { flex: "0 1 auto", fontWeight: 600, minWidth: 0 }, title: selectedEvent.operation_name, variant: "subtitle1", children: selectedEvent.operation_name }),
31465
+ resource !== "" && resource !== "*" && /* @__PURE__ */ jsx142(Typography12, { color: "text.secondary", noWrap: true, sx: { flex: "1 1 0", minWidth: 0 }, title: resource, variant: "body2", children: resource }),
31466
+ duration !== void 0 && // A fixed box, so a screenshot can mask the varying value without the mask edge moving.
31467
+ /* @__PURE__ */ jsx142(Typography12, { 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)) })
31468
+ ] })
31469
+ ] }),
31469
31470
  onClose && /* @__PURE__ */ jsx142(IconButton6, { "data-testid": EVENT_DETAILS_CLOSE_BUTTON_TEST_ID, onClick: onClose, size: "small", children: /* @__PURE__ */ jsx142(Close3, {}) })
31470
31471
  ]
31471
31472
  }
@@ -31597,7 +31598,7 @@ import { useCallback as useCallback7, useEffect as useEffect16, useRef as useRef
31597
31598
 
31598
31599
  // src/components/trace-graph/service-node.tsx
31599
31600
  import { Cancel as Cancel6, GppBad as GppBad2 } from "@mui/icons-material";
31600
- import { Box as Box17, Divider as Divider4, Stack as Stack5, Tooltip as Tooltip7, Typography as Typography13, useTheme as useTheme4 } from "@mui/material";
31601
+ import { Box as Box17, Divider as Divider4, Stack as Stack5, Tooltip as Tooltip6, Typography as Typography13, useTheme as useTheme4 } from "@mui/material";
31601
31602
  import { Handle, Position } from "@xyflow/react";
31602
31603
  import "@xyflow/react/dist/style.css";
31603
31604
  import "react";
@@ -31664,8 +31665,8 @@ var NodeContent = ({ event, expanded, hasPermissionEvents, isError, isWarning })
31664
31665
  width: "38px"
31665
31666
  },
31666
31667
  children: [
31667
- (isError || isWarning) && hasPermissionEvents && /* @__PURE__ */ jsx143(Tooltip7, { arrow: true, title: "Permission denied", children: /* @__PURE__ */ jsx143(GppBad2, { sx: { color: isError ? theme.palette.error.main : theme.palette.warning.main, fontSize: "16px" } }) }),
31668
- isError && !hasPermissionEvents && /* @__PURE__ */ jsx143(Tooltip7, { arrow: true, title: "Error", children: /* @__PURE__ */ jsx143(Cancel6, { sx: { color: theme.palette.error.main, fontSize: "16px" } }) })
31668
+ (isError || isWarning) && hasPermissionEvents && /* @__PURE__ */ jsx143(Tooltip6, { arrow: true, title: "Permission denied", children: /* @__PURE__ */ jsx143(GppBad2, { sx: { color: isError ? theme.palette.error.main : theme.palette.warning.main, fontSize: "16px" } }) }),
31669
+ isError && !hasPermissionEvents && /* @__PURE__ */ jsx143(Tooltip6, { arrow: true, title: "Error", children: /* @__PURE__ */ jsx143(Cancel6, { sx: { color: theme.palette.error.main, fontSize: "16px" } }) })
31669
31670
  ]
31670
31671
  }
31671
31672
  ),
@@ -32297,7 +32298,7 @@ var getTraceBounds = (spans) => {
32297
32298
 
32298
32299
  // src/components/trace-panel/waterfall.tsx
32299
32300
  import { AccountTreeOutlined, Cancel as Cancel7, Error as ErrorIcon4, FormatListBulleted, KeyboardArrowDown as KeyboardArrowDown2, KeyboardArrowRight as KeyboardArrowRight2 } from "@mui/icons-material";
32300
- import { Box as Box19, ButtonBase, ToggleButton, ToggleButtonGroup, Typography as Typography14 } from "@mui/material";
32301
+ import { Box as Box19, ButtonBase, ToggleButton as ToggleButton2, ToggleButtonGroup as ToggleButtonGroup2, Typography as Typography14 } from "@mui/material";
32301
32302
  import { alpha as alpha5 } from "@mui/material/styles";
32302
32303
  import * as React124 from "react";
32303
32304
 
@@ -32434,7 +32435,7 @@ var WaterfallAxis = ({ durationMs, flat, gridColumns: gridColumns2, onFlatChange
32434
32435
  },
32435
32436
  children: [
32436
32437
  /* @__PURE__ */ jsx147(Box19, { sx: { alignItems: "center", borderRight: 1, borderRightColor: "divider", display: "flex", gridColumn: "1 / 3", pl: "5px" }, children: onFlatChange && /* @__PURE__ */ jsxs136(
32437
- ToggleButtonGroup,
32438
+ ToggleButtonGroup2,
32438
32439
  {
32439
32440
  "aria-label": "Waterfall layout",
32440
32441
  exclusive: true,
@@ -32445,11 +32446,11 @@ var WaterfallAxis = ({ durationMs, flat, gridColumns: gridColumns2, onFlatChange
32445
32446
  sx: { "& .MuiToggleButton-root": { fontSize: 11, gap: "3px", height: 18, lineHeight: 1, px: "6px", py: 0, textTransform: "none" } },
32446
32447
  value: flat ? "list" : "tree",
32447
32448
  children: [
32448
- /* @__PURE__ */ jsxs136(ToggleButton, { "data-testid": WATERFALL_TREE_VIEW_BUTTON_TEST_ID, value: "tree", children: [
32449
+ /* @__PURE__ */ jsxs136(ToggleButton2, { "data-testid": WATERFALL_TREE_VIEW_BUTTON_TEST_ID, value: "tree", children: [
32449
32450
  /* @__PURE__ */ jsx147(AccountTreeOutlined, { sx: { fontSize: 13 } }),
32450
32451
  "Tree"
32451
32452
  ] }),
32452
- /* @__PURE__ */ jsxs136(ToggleButton, { "data-testid": WATERFALL_LIST_VIEW_BUTTON_TEST_ID, value: "list", children: [
32453
+ /* @__PURE__ */ jsxs136(ToggleButton2, { "data-testid": WATERFALL_LIST_VIEW_BUTTON_TEST_ID, value: "list", children: [
32453
32454
  /* @__PURE__ */ jsx147(FormatListBulleted, { sx: { fontSize: 13 } }),
32454
32455
  "List"
32455
32456
  ] })
@@ -32731,6 +32732,7 @@ var TraceSidebar = ({ onClose, onSelectSpan, selectedSpanId, spanMatches, spans
32731
32732
  }
32732
32733
  };
32733
32734
  }, [spans, selectedSpanId]);
32735
+ const rootResource = root2 ? shortResourceName(root2.resource_name, root2.arn) : "";
32734
32736
  return /* @__PURE__ */ jsxs137(
32735
32737
  Box20,
32736
32738
  {
@@ -32784,9 +32786,11 @@ var TraceSidebar = ({ onClose, onSelectSpan, selectedSpanId, spanMatches, spans
32784
32786
  ),
32785
32787
  /* @__PURE__ */ jsxs137(Box20, { sx: { alignItems: "center", borderBottom: 1, borderColor: "divider", display: "flex", gap: 1.5, px: 2, py: 1 }, children: [
32786
32788
  /* @__PURE__ */ jsxs137(Box20, { sx: { flex: 1, minWidth: 0 }, children: [
32787
- root2 && /* @__PURE__ */ jsxs137(Box20, { sx: { alignItems: "center", display: "flex", gap: 1 }, children: [
32789
+ /* @__PURE__ */ jsx148(Typography15, { color: "text.secondary", component: "div", sx: { lineHeight: 1.5 }, variant: "overline", children: "Trace root" }),
32790
+ root2 && /* @__PURE__ */ jsxs137(Box20, { "data-testid": TRACE_SIDEBAR_ROOT_HEADING_TEST_ID, sx: { alignItems: "center", display: "flex", gap: 1, minWidth: 0 }, children: [
32788
32791
  /* @__PURE__ */ jsx148(AwsServiceIcon, { hideTooltip: true, service: root2.service_name, size: "small" }),
32789
- /* @__PURE__ */ jsx148(Typography15, { noWrap: true, sx: { fontWeight: 600 }, title: root2.operation_name, variant: "subtitle1", children: root2.operation_name })
32792
+ /* @__PURE__ */ jsx148(Typography15, { noWrap: true, sx: { flex: "0 1 auto", fontWeight: 600, minWidth: 0 }, title: root2.operation_name, variant: "subtitle1", children: root2.operation_name }),
32793
+ rootResource !== "" && rootResource !== "*" && /* @__PURE__ */ jsx148(Typography15, { color: "text.secondary", noWrap: true, sx: { flex: "1 1 0", minWidth: 0 }, title: rootResource, variant: "body2", children: rootResource })
32790
32794
  ] }),
32791
32795
  /* @__PURE__ */ jsx148(Typography15, { color: "text.secondary", variant: "caption", children: [
32792
32796
  formatDuration(stats.durationMs),
@@ -32796,7 +32800,7 @@ var TraceSidebar = ({ onClose, onSelectSpan, selectedSpanId, spanMatches, spans
32796
32800
  ].join(" \xB7 ") })
32797
32801
  ] }),
32798
32802
  /* @__PURE__ */ jsxs137(
32799
- ToggleButtonGroup2,
32803
+ ToggleButtonGroup3,
32800
32804
  {
32801
32805
  "aria-label": "Trace view",
32802
32806
  exclusive: true,
@@ -32806,8 +32810,8 @@ var TraceSidebar = ({ onClose, onSelectSpan, selectedSpanId, spanMatches, spans
32806
32810
  size: "small",
32807
32811
  value: view,
32808
32812
  children: [
32809
- /* @__PURE__ */ jsx148(ToggleButton2, { "data-testid": TRACE_SIDEBAR_WATERFALL_BUTTON_TEST_ID, sx: { px: 1.5, py: 0.25, textTransform: "none" }, value: "waterfall", children: "Waterfall" }),
32810
- /* @__PURE__ */ jsx148(ToggleButton2, { "data-testid": TRACE_SIDEBAR_MAP_BUTTON_TEST_ID, sx: { px: 1.5, py: 0.25, textTransform: "none" }, value: "map", children: "Map" })
32813
+ /* @__PURE__ */ jsx148(ToggleButton3, { "data-testid": TRACE_SIDEBAR_WATERFALL_BUTTON_TEST_ID, sx: { px: 1.5, py: 0.25, textTransform: "none" }, value: "waterfall", children: "Waterfall" }),
32814
+ /* @__PURE__ */ jsx148(ToggleButton3, { "data-testid": TRACE_SIDEBAR_MAP_BUTTON_TEST_ID, sx: { px: 1.5, py: 0.25, textTransform: "none" }, value: "map", children: "Map" })
32811
32815
  ]
32812
32816
  }
32813
32817
  ),