@localstack/appinspector-ui 1.0.23 → 1.0.25

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
@@ -162,6 +162,9 @@ var WrapInComponent = ({ children, wrap, wrapperFn }) => {
162
162
  return children;
163
163
  };
164
164
 
165
+ // src/components/aws-service-icon/icons/index.tsx
166
+ import { memo } from "react";
167
+
165
168
  // src/types/service-names.ts
166
169
  var SERVICE_NAME = {
167
170
  ACCESSANALYZER: "accessanalyzer",
@@ -2351,7 +2354,8 @@ var SvgXray = (props) => /* @__PURE__ */ jsxs118("svg", { xmlns: "http://www.w3.
2351
2354
  ] });
2352
2355
  var xray_default = SvgXray;
2353
2356
 
2354
- // src/components/aws-service-icon/icons/index.ts
2357
+ // src/components/aws-service-icon/icons/index.tsx
2358
+ import { jsx as jsx122 } from "react/jsx-runtime";
2355
2359
  var ICONS_MAP = {
2356
2360
  [SERVICE_NAME.ACCOUNT]: account_default,
2357
2361
  [SERVICE_NAME.ACM]: acm_default,
@@ -2474,30 +2478,30 @@ var ICONS_MAP = {
2474
2478
  [SERVICE_NAME.WAFV2]: wafv2_default,
2475
2479
  [SERVICE_NAME.XRAY]: xray_default
2476
2480
  };
2477
- var getIconComponent = (service) => {
2478
- return ICONS_MAP[service] ?? ICONS_MAP.infrastructure;
2479
- };
2481
+ var AwsServiceIconBase = memo((props) => {
2482
+ const Icon = ICONS_MAP[props.service] ?? ICONS_MAP.infrastructure;
2483
+ return /* @__PURE__ */ jsx122(Icon, { ...props });
2484
+ });
2480
2485
  var supportedServiceNames = Object.keys(ICONS_MAP);
2481
2486
 
2482
2487
  // src/components/aws-service-icon/aws-service-icon.tsx
2483
- import { jsx as jsx122 } from "react/jsx-runtime";
2488
+ import { jsx as jsx123 } from "react/jsx-runtime";
2484
2489
  var sizes = { large: [32, 32], medium: [22, 22], small: [11, 11] };
2485
2490
  var AwsServiceIcon = ({ hideTooltip, service, size = "medium", title }) => {
2486
2491
  const [width, height] = sizes[size];
2487
- const Icon = getIconComponent(service);
2488
- return /* @__PURE__ */ jsx122(
2492
+ return /* @__PURE__ */ jsx123(
2489
2493
  WrapInComponent,
2490
2494
  {
2491
2495
  wrap: !hideTooltip,
2492
- wrapperFn: (child) => /* @__PURE__ */ jsx122(Tooltip2, { placement: "top", title: title ?? service, children: child }),
2493
- children: /* @__PURE__ */ jsx122(Icon, { height, style: { display: "block" }, width })
2496
+ wrapperFn: (child) => /* @__PURE__ */ jsx123(Tooltip2, { placement: "top", title: title ?? service, children: child }),
2497
+ children: /* @__PURE__ */ jsx123(AwsServiceIconBase, { height, service, style: { display: "block" }, width })
2494
2498
  }
2495
2499
  );
2496
2500
  };
2497
2501
 
2498
2502
  // src/components/cells/pill-cell.tsx
2499
2503
  import { Box as Box2 } from "@mui/material";
2500
- import { jsx as jsx123 } from "react/jsx-runtime";
2504
+ import { jsx as jsx124 } from "react/jsx-runtime";
2501
2505
  var PillCell = ({
2502
2506
  backgroundColor,
2503
2507
  borderColor,
@@ -2507,7 +2511,7 @@ var PillCell = ({
2507
2511
  paddingBottom,
2508
2512
  paddingTop
2509
2513
  }) => {
2510
- return /* @__PURE__ */ jsx123(
2514
+ return /* @__PURE__ */ jsx124(
2511
2515
  Box2,
2512
2516
  {
2513
2517
  sx: {
@@ -2530,7 +2534,7 @@ var PillCell = ({
2530
2534
  };
2531
2535
 
2532
2536
  // src/components/cells/service-cell.tsx
2533
- import { Fragment as Fragment2, jsx as jsx124, jsxs as jsxs119 } from "react/jsx-runtime";
2537
+ import { Fragment as Fragment2, jsx as jsx125, jsxs as jsxs119 } from "react/jsx-runtime";
2534
2538
  var ServiceCell = ({
2535
2539
  borderColor,
2536
2540
  borderWidth,
@@ -2540,26 +2544,27 @@ var ServiceCell = ({
2540
2544
  showIcon = true,
2541
2545
  width = "32px"
2542
2546
  }) => {
2543
- return /* @__PURE__ */ jsx124(Box3, { sx: { width: "100%" }, children: /* @__PURE__ */ jsxs119(PillCell, { borderColor, borderWidth, height, children: [
2547
+ return /* @__PURE__ */ jsx125(Box3, { sx: { width: "100%" }, children: /* @__PURE__ */ jsxs119(PillCell, { borderColor, borderWidth, height, children: [
2544
2548
  showIcon ? /* @__PURE__ */ jsxs119(Fragment2, { children: [
2545
- /* @__PURE__ */ jsx124(
2549
+ /* @__PURE__ */ jsx125(
2546
2550
  Box3,
2547
2551
  {
2548
2552
  sx: {
2549
2553
  alignItems: "center",
2550
2554
  display: "flex",
2555
+ flexShrink: 0,
2551
2556
  height,
2552
2557
  justifyContent: "center",
2553
2558
  overflow: "hidden",
2554
2559
  padding: 0,
2555
2560
  width
2556
2561
  },
2557
- children: /* @__PURE__ */ jsx124(AwsServiceIcon, { hideTooltip: true, service, size: "large" })
2562
+ children: /* @__PURE__ */ jsx125(AwsServiceIcon, { hideTooltip: true, service, size: "large" })
2558
2563
  }
2559
2564
  ),
2560
- /* @__PURE__ */ jsx124(Divider, { orientation: "vertical" })
2565
+ /* @__PURE__ */ jsx125(Divider, { orientation: "vertical" })
2561
2566
  ] }) : void 0,
2562
- /* @__PURE__ */ jsx124(
2567
+ /* @__PURE__ */ jsx125(
2563
2568
  Typography,
2564
2569
  {
2565
2570
  sx: {
@@ -2583,8 +2588,8 @@ var ServiceCell = ({
2583
2588
  }
2584
2589
  ),
2585
2590
  resource ? /* @__PURE__ */ jsxs119(Fragment2, { children: [
2586
- /* @__PURE__ */ jsx124(Box3, { sx: { height: "100%", paddingY: 0.5 }, children: /* @__PURE__ */ jsx124(Divider, { orientation: "vertical" }) }),
2587
- /* @__PURE__ */ jsx124(
2591
+ /* @__PURE__ */ jsx125(Box3, { sx: { height: "100%", paddingY: 0.5 }, children: /* @__PURE__ */ jsx125(Divider, { orientation: "vertical" }) }),
2592
+ /* @__PURE__ */ jsx125(
2588
2593
  Typography,
2589
2594
  {
2590
2595
  sx: {
@@ -2674,7 +2679,7 @@ var searchInObject = (object, searchTerm, skipKeys = []) => {
2674
2679
  };
2675
2680
 
2676
2681
  // src/components/spans-list/spans-data-grid.tsx
2677
- import { Fragment as Fragment3, jsx as jsx125, jsxs as jsxs120 } from "react/jsx-runtime";
2682
+ import { Fragment as Fragment3, jsx as jsx126, jsxs as jsxs120 } from "react/jsx-runtime";
2678
2683
  var resourceNameComparator = (v1 = "", v2 = "") => {
2679
2684
  return v1.localeCompare(v2);
2680
2685
  };
@@ -2689,7 +2694,7 @@ var columns = [
2689
2694
  field: "trace_id",
2690
2695
  headerName: "Trace",
2691
2696
  renderCell: (parameters) => {
2692
- return /* @__PURE__ */ jsx125(Tooltip3, { arrow: true, title: String(parameters.value), children: /* @__PURE__ */ jsx125(
2697
+ return /* @__PURE__ */ jsx126(Tooltip3, { arrow: true, title: String(parameters.value), children: /* @__PURE__ */ jsx126(
2693
2698
  "span",
2694
2699
  {
2695
2700
  style: {
@@ -2708,7 +2713,7 @@ var columns = [
2708
2713
  {
2709
2714
  field: "start_time_unix_nano",
2710
2715
  headerName: "Time",
2711
- renderCell: (parameters) => /* @__PURE__ */ jsx125(ResponsiveTimestampCell, { value: parameters.value }),
2716
+ renderCell: (parameters) => /* @__PURE__ */ jsx126(ResponsiveTimestampCell, { value: parameters.value }),
2712
2717
  type: "string",
2713
2718
  width: 180
2714
2719
  },
@@ -2719,7 +2724,7 @@ var columns = [
2719
2724
  if (!parameters.row.parent_service_name || !parameters.row.parent_resource_name) {
2720
2725
  return;
2721
2726
  }
2722
- return /* @__PURE__ */ jsx125(ServiceCell, { resource: parameters.row.parent_resource_name, service: parameters.row.parent_service_name });
2727
+ return /* @__PURE__ */ jsx126(ServiceCell, { resource: parameters.row.parent_resource_name, service: parameters.row.parent_service_name });
2723
2728
  },
2724
2729
  sortable: true,
2725
2730
  sortComparator: resourceNameComparator,
@@ -2737,7 +2742,7 @@ var columns = [
2737
2742
  headerName: "Consumer",
2738
2743
  maxWidth: 260,
2739
2744
  renderCell: (parameters) => {
2740
- return /* @__PURE__ */ jsx125(ServiceCell, { resource: parameters.row.resource_name, service: parameters.row.service_name });
2745
+ return /* @__PURE__ */ jsx126(ServiceCell, { resource: parameters.row.resource_name, service: parameters.row.service_name });
2741
2746
  },
2742
2747
  sortComparator: resourceNameComparator
2743
2748
  },
@@ -2746,7 +2751,7 @@ var columns = [
2746
2751
  field: "events",
2747
2752
  headerName: "Events",
2748
2753
  minWidth: 120,
2749
- renderCell: (parameters) => /* @__PURE__ */ jsx125(EventIndicatorCell, { events: parameters.row.events }),
2754
+ renderCell: (parameters) => /* @__PURE__ */ jsx126(EventIndicatorCell, { events: parameters.row.events }),
2750
2755
  sortable: false
2751
2756
  }
2752
2757
  ];
@@ -2810,13 +2815,13 @@ var SpansDataGrid = ({
2810
2815
  [filtersToApply, rows]
2811
2816
  );
2812
2817
  return /* @__PURE__ */ jsxs120(Fragment3, { children: [
2813
- /* @__PURE__ */ jsx125(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs120(Box4, { sx: { alignItems: "center", display: "flex", gap: "0.5rem" }, children: [
2814
- /* @__PURE__ */ jsx125(
2818
+ /* @__PURE__ */ jsx126(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsxs120(Box4, { sx: { alignItems: "center", display: "flex", gap: "0.5rem" }, children: [
2819
+ /* @__PURE__ */ jsx126(
2815
2820
  TextField,
2816
2821
  {
2817
2822
  label: /* @__PURE__ */ jsxs120(Box4, { sx: { display: "flex", gap: "0.25rem" }, children: [
2818
- /* @__PURE__ */ jsx125(Search, { fontSize: "small" }),
2819
- /* @__PURE__ */ jsx125(Typography2, { children: "Search Spans" })
2823
+ /* @__PURE__ */ jsx126(Search, { fontSize: "small" }),
2824
+ /* @__PURE__ */ jsx126(Typography2, { children: "Search Spans" })
2820
2825
  ] }),
2821
2826
  onChange: handleSearchTermChange,
2822
2827
  size: "small",
@@ -2824,11 +2829,11 @@ var SpansDataGrid = ({
2824
2829
  value: searchTerm
2825
2830
  }
2826
2831
  ),
2827
- /* @__PURE__ */ jsx125(Box4, { sx: { flexGrow: 1 } }),
2828
- onFilterWriteOperationsChange && /* @__PURE__ */ jsx125(
2832
+ /* @__PURE__ */ jsx126(Box4, { sx: { flexGrow: 1 } }),
2833
+ onFilterWriteOperationsChange && /* @__PURE__ */ jsx126(
2829
2834
  FormControlLabel,
2830
2835
  {
2831
- control: /* @__PURE__ */ jsx125(
2836
+ control: /* @__PURE__ */ jsx126(
2832
2837
  Switch,
2833
2838
  {
2834
2839
  checked: filterWriteOperations,
@@ -2841,10 +2846,10 @@ var SpansDataGrid = ({
2841
2846
  label: "Only Write Operations"
2842
2847
  }
2843
2848
  ),
2844
- /* @__PURE__ */ jsx125(Button, { onClick: onClearSpans, startIcon: /* @__PURE__ */ jsx125(DeleteForeverOutlined, {}), children: "Clear Spans" }),
2845
- /* @__PURE__ */ jsx125(Button, { disabled: loading, onClick: onRefresh, startIcon: /* @__PURE__ */ jsx125(Cached, {}), children: "Refresh" })
2849
+ /* @__PURE__ */ jsx126(Button, { onClick: onClearSpans, startIcon: /* @__PURE__ */ jsx126(DeleteForeverOutlined, {}), children: "Clear Spans" }),
2850
+ /* @__PURE__ */ jsx126(Button, { disabled: loading, onClick: onRefresh, startIcon: /* @__PURE__ */ jsx126(Cached, {}), children: "Refresh" })
2846
2851
  ] }) }),
2847
- /* @__PURE__ */ jsx125("div", { style: { display: "flex", flexDirection: "column", flexGrow: 1 }, children: /* @__PURE__ */ jsx125(
2852
+ /* @__PURE__ */ jsx126("div", { style: { display: "flex", flexDirection: "column", flexGrow: 1 }, children: /* @__PURE__ */ jsx126(
2848
2853
  Paper,
2849
2854
  {
2850
2855
  sx: {
@@ -2855,7 +2860,7 @@ var SpansDataGrid = ({
2855
2860
  minHeight: 120,
2856
2861
  p: 2
2857
2862
  },
2858
- children: /* @__PURE__ */ jsx125(
2863
+ children: /* @__PURE__ */ jsx126(
2859
2864
  DataGrid,
2860
2865
  {
2861
2866
  columns,
@@ -2893,13 +2898,13 @@ var SpansDataGrid = ({
2893
2898
  };
2894
2899
 
2895
2900
  // src/components/spans-list/spans-list.tsx
2896
- import { jsx as jsx126, jsxs as jsxs121 } from "react/jsx-runtime";
2901
+ import { jsx as jsx127, jsxs as jsxs121 } from "react/jsx-runtime";
2897
2902
  var SpansList = (props) => {
2898
2903
  return /* @__PURE__ */ jsxs121(Box5, { "data-testid": "spans-data-grid", sx: { display: "flex", flexDirection: "column", flexGrow: 1, gap: 2, width: "100%" }, children: [
2899
2904
  props.spans.error && /* @__PURE__ */ jsxs121(
2900
2905
  Alert,
2901
2906
  {
2902
- action: /* @__PURE__ */ jsx126(Button2, { onClick: props.onRefresh, children: "Retry" }),
2907
+ action: /* @__PURE__ */ jsx127(Button2, { onClick: props.onRefresh, children: "Retry" }),
2903
2908
  severity: "error",
2904
2909
  children: [
2905
2910
  "Unexpected error:",
@@ -2908,7 +2913,7 @@ var SpansList = (props) => {
2908
2913
  ]
2909
2914
  }
2910
2915
  ),
2911
- (props.spans.data !== void 0 || props.spans.loading) && /* @__PURE__ */ jsx126(
2916
+ (props.spans.data !== void 0 || props.spans.loading) && /* @__PURE__ */ jsx127(
2912
2917
  SpansDataGrid,
2913
2918
  {
2914
2919
  filterWriteOperations: props.filterWriteOperations,
@@ -2974,14 +2979,14 @@ var getAppInspectorApiUrl = (localstackEndpoint, endpoint) => {
2974
2979
  };
2975
2980
 
2976
2981
  // src/components/status-message/status-message.tsx
2977
- import { Fragment as Fragment4, jsx as jsx127, jsxs as jsxs122 } from "react/jsx-runtime";
2982
+ import { Fragment as Fragment4, jsx as jsx128, jsxs as jsxs122 } from "react/jsx-runtime";
2978
2983
  var StatusMessage = ({
2979
2984
  error,
2980
2985
  onRetry,
2981
2986
  status
2982
2987
  }) => {
2983
2988
  if (error instanceof AppInspectorNotFoundError) {
2984
- return /* @__PURE__ */ jsx127(
2989
+ return /* @__PURE__ */ jsx128(
2985
2990
  Box6,
2986
2991
  {
2987
2992
  sx: {
@@ -2995,15 +3000,15 @@ var StatusMessage = ({
2995
3000
  children: /* @__PURE__ */ jsxs122(
2996
3001
  Alert2,
2997
3002
  {
2998
- icon: /* @__PURE__ */ jsx127(ErrorOutline, { fontSize: "large" }),
3003
+ icon: /* @__PURE__ */ jsx128(ErrorOutline, { fontSize: "large" }),
2999
3004
  severity: "error",
3000
3005
  sx: { maxWidth: 600, width: "100%" },
3001
3006
  children: [
3002
- /* @__PURE__ */ jsx127(AlertTitle, { sx: { fontWeight: "bold" }, children: "App Inspector Not Available" }),
3003
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 2 }, variant: "body2", children: "The App Inspector extension is not licensed or not enabled in LocalStack." }),
3004
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx127("strong", { children: "To enable App Inspector:" }) }),
3005
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1 }, variant: "body2", children: "Set the environment variable and restart LocalStack:" }),
3006
- /* @__PURE__ */ jsx127(
3007
+ /* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "App Inspector Not Available" }),
3008
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: "The App Inspector extension is not licensed or not enabled in LocalStack." }),
3009
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To enable App Inspector:" }) }),
3010
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: "Set the environment variable and restart LocalStack:" }),
3011
+ /* @__PURE__ */ jsx128(
3007
3012
  Box6,
3008
3013
  {
3009
3014
  component: "pre",
@@ -3025,15 +3030,15 @@ var StatusMessage = ({
3025
3030
  ] }),
3026
3031
  ". For persistent default state across restarts, adjust the",
3027
3032
  " ",
3028
- /* @__PURE__ */ jsx127("code", { children: "LOCALSTACK_APPINSPECTOR_ENABLE" }),
3033
+ /* @__PURE__ */ jsx128("code", { children: "LOCALSTACK_APPINSPECTOR_ENABLE" }),
3029
3034
  " ",
3030
3035
  "environment variable in your",
3031
3036
  " ",
3032
- /* @__PURE__ */ jsx127("code", { children: "~/.localstack" }),
3037
+ /* @__PURE__ */ jsx128("code", { children: "~/.localstack" }),
3033
3038
  " ",
3034
3039
  "profile files.",
3035
3040
  " ",
3036
- /* @__PURE__ */ jsx127(
3041
+ /* @__PURE__ */ jsx128(
3037
3042
  Link,
3038
3043
  {
3039
3044
  href: "https://docs.localstack.cloud/aws/capabilities/config/configuration/#profiles",
@@ -3043,8 +3048,8 @@ var StatusMessage = ({
3043
3048
  }
3044
3049
  )
3045
3050
  ] }),
3046
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1, mt: 2 }, variant: "body2", children: /* @__PURE__ */ jsx127("strong", { children: "For more information:" }) }),
3047
- /* @__PURE__ */ jsx127(
3051
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1, mt: 2 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "For more information:" }) }),
3052
+ /* @__PURE__ */ jsx128(
3048
3053
  Link,
3049
3054
  {
3050
3055
  href: "https://docs.localstack.cloud/user-guide/tools/application-inspector/",
@@ -3053,7 +3058,7 @@ var StatusMessage = ({
3053
3058
  children: "App Inspector Documentation"
3054
3059
  }
3055
3060
  ),
3056
- onRetry && /* @__PURE__ */ jsx127(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx127(
3061
+ onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
3057
3062
  Button3,
3058
3063
  {
3059
3064
  "aria-label": "Check App Inspector status again",
@@ -3069,7 +3074,7 @@ var StatusMessage = ({
3069
3074
  );
3070
3075
  }
3071
3076
  if (error instanceof ConnectionError) {
3072
- return /* @__PURE__ */ jsx127(
3077
+ return /* @__PURE__ */ jsx128(
3073
3078
  Box6,
3074
3079
  {
3075
3080
  sx: {
@@ -3083,14 +3088,14 @@ var StatusMessage = ({
3083
3088
  children: /* @__PURE__ */ jsxs122(
3084
3089
  Alert2,
3085
3090
  {
3086
- icon: /* @__PURE__ */ jsx127(ErrorOutline, { fontSize: "large" }),
3091
+ icon: /* @__PURE__ */ jsx128(ErrorOutline, { fontSize: "large" }),
3087
3092
  severity: "error",
3088
3093
  sx: { maxWidth: 600, width: "100%" },
3089
3094
  children: [
3090
- /* @__PURE__ */ jsx127(AlertTitle, { sx: { fontWeight: "bold" }, children: "Connection Error" }),
3091
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 2 }, variant: "body2", children: "Failed to connect to LocalStack. Please ensure LocalStack is running and accessible." }),
3092
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx127("strong", { children: "To start LocalStack:" }) }),
3093
- /* @__PURE__ */ jsx127(
3095
+ /* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "Connection Error" }),
3096
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: "Failed to connect to LocalStack. Please ensure LocalStack is running and accessible." }),
3097
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To start LocalStack:" }) }),
3098
+ /* @__PURE__ */ jsx128(
3094
3099
  Box6,
3095
3100
  {
3096
3101
  component: "pre",
@@ -3103,7 +3108,7 @@ var StatusMessage = ({
3103
3108
  children: "localstack start"
3104
3109
  }
3105
3110
  ),
3106
- onRetry && /* @__PURE__ */ jsx127(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx127(
3111
+ onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
3107
3112
  Button3,
3108
3113
  {
3109
3114
  "aria-label": "Retry connection to LocalStack",
@@ -3119,7 +3124,7 @@ var StatusMessage = ({
3119
3124
  );
3120
3125
  }
3121
3126
  if (status?.status === "DISABLED") {
3122
- return /* @__PURE__ */ jsx127(
3127
+ return /* @__PURE__ */ jsx128(
3123
3128
  Box6,
3124
3129
  {
3125
3130
  sx: {
@@ -3133,14 +3138,14 @@ var StatusMessage = ({
3133
3138
  children: /* @__PURE__ */ jsxs122(
3134
3139
  Alert2,
3135
3140
  {
3136
- icon: /* @__PURE__ */ jsx127(InfoOutlined, { fontSize: "large" }),
3141
+ icon: /* @__PURE__ */ jsx128(InfoOutlined, { fontSize: "large" }),
3137
3142
  severity: "warning",
3138
3143
  sx: { maxWidth: 600, width: "100%" },
3139
3144
  children: [
3140
- /* @__PURE__ */ jsx127(AlertTitle, { sx: { fontWeight: "bold" }, children: "App Inspector is Disabled" }),
3141
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 2 }, variant: "body2", children: "App Inspector is currently disabled. Please enable it to view traces and spans." }),
3142
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx127("strong", { children: "To enable App Inspector at runtime:" }) }),
3143
- /* @__PURE__ */ jsx127(
3145
+ /* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "App Inspector is Disabled" }),
3146
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: "App Inspector is currently disabled. Please enable it to view traces and spans." }),
3147
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To enable App Inspector at runtime:" }) }),
3148
+ /* @__PURE__ */ jsx128(
3144
3149
  Box6,
3145
3150
  {
3146
3151
  component: "pre",
@@ -3151,14 +3156,14 @@ var StatusMessage = ({
3151
3156
  overflowX: "auto",
3152
3157
  p: 1
3153
3158
  },
3154
- children: `curl -X PUT http://localhost:4566${APPINSPECTOR_API_PREFIX}/status \\
3155
- -H "Content-Type: application/json" \\
3159
+ children: String.raw`curl -X PUT http://localhost:4566${APPINSPECTOR_API_PREFIX}/status \
3160
+ -H "Content-Type: application/json" \
3156
3161
  -d '{"status": "ENABLED"}'`
3157
3162
  }
3158
3163
  ),
3159
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1, mt: 2 }, variant: "body2", children: /* @__PURE__ */ jsx127("strong", { children: "To enable App Inspector persistently across restarts:" }) }),
3160
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 1 }, variant: "body2", children: "Set the environment variable:" }),
3161
- /* @__PURE__ */ jsx127(
3164
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1, mt: 2 }, variant: "body2", children: /* @__PURE__ */ jsx128("strong", { children: "To enable App Inspector persistently across restarts:" }) }),
3165
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 1 }, variant: "body2", children: "Set the environment variable:" }),
3166
+ /* @__PURE__ */ jsx128(
3162
3167
  Box6,
3163
3168
  {
3164
3169
  component: "pre",
@@ -3171,8 +3176,8 @@ var StatusMessage = ({
3171
3176
  children: "APPINSPECTOR=1"
3172
3177
  }
3173
3178
  ),
3174
- Boolean(status.note) && /* @__PURE__ */ jsx127(Typography3, { sx: { display: "block", fontStyle: "italic", mt: 2 }, variant: "caption", children: status.note }),
3175
- onRetry && /* @__PURE__ */ jsx127(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx127(
3179
+ Boolean(status.note) && /* @__PURE__ */ jsx128(Typography3, { sx: { display: "block", fontStyle: "italic", mt: 2 }, variant: "caption", children: status.note }),
3180
+ onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
3176
3181
  Button3,
3177
3182
  {
3178
3183
  "aria-label": "Check if App Inspector is enabled",
@@ -3188,7 +3193,7 @@ var StatusMessage = ({
3188
3193
  );
3189
3194
  }
3190
3195
  if (error) {
3191
- return /* @__PURE__ */ jsx127(
3196
+ return /* @__PURE__ */ jsx128(
3192
3197
  Box6,
3193
3198
  {
3194
3199
  sx: {
@@ -3202,13 +3207,13 @@ var StatusMessage = ({
3202
3207
  children: /* @__PURE__ */ jsxs122(
3203
3208
  Alert2,
3204
3209
  {
3205
- icon: /* @__PURE__ */ jsx127(ErrorOutline, { fontSize: "large" }),
3210
+ icon: /* @__PURE__ */ jsx128(ErrorOutline, { fontSize: "large" }),
3206
3211
  severity: "error",
3207
3212
  sx: { maxWidth: 600, width: "100%" },
3208
3213
  children: [
3209
- /* @__PURE__ */ jsx127(AlertTitle, { sx: { fontWeight: "bold" }, children: "Error" }),
3210
- /* @__PURE__ */ jsx127(Typography3, { sx: { mb: 2 }, variant: "body2", children: error.message }),
3211
- onRetry && /* @__PURE__ */ jsx127(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx127(
3214
+ /* @__PURE__ */ jsx128(AlertTitle, { sx: { fontWeight: "bold" }, children: "Error" }),
3215
+ /* @__PURE__ */ jsx128(Typography3, { sx: { mb: 2 }, variant: "body2", children: error.message }),
3216
+ onRetry && /* @__PURE__ */ jsx128(Box6, { sx: { display: "flex", justifyContent: "flex-start", mt: 2 }, children: /* @__PURE__ */ jsx128(
3212
3217
  Button3,
3213
3218
  {
3214
3219
  "aria-label": "Retry operation",
@@ -3223,7 +3228,7 @@ var StatusMessage = ({
3223
3228
  }
3224
3229
  );
3225
3230
  }
3226
- return /* @__PURE__ */ jsx127(Fragment4, {});
3231
+ return /* @__PURE__ */ jsx128(Fragment4, {});
3227
3232
  };
3228
3233
 
3229
3234
  // src/context.tsx
@@ -3349,7 +3354,7 @@ var createApiClient = ({ localstackEndpoint }) => {
3349
3354
  };
3350
3355
 
3351
3356
  // src/context.tsx
3352
- import { jsx as jsx128 } from "react/jsx-runtime";
3357
+ import { jsx as jsx129 } from "react/jsx-runtime";
3353
3358
  var AppInspectorContext = createContext2(void 0);
3354
3359
  var useAppInspector = () => {
3355
3360
  const context = useContext2(AppInspectorContext);
@@ -3382,7 +3387,7 @@ var AppInspectorContextProvider = (props) => {
3382
3387
  }),
3383
3388
  [props.linkComponent, props.localstackEndpoint, resolveLink]
3384
3389
  );
3385
- return /* @__PURE__ */ jsx128(ApiProvider, { api, children: /* @__PURE__ */ jsx128(AppInspectorContext.Provider, { value: contextValue, children: props.children }) });
3390
+ return /* @__PURE__ */ jsx129(ApiProvider, { api, children: /* @__PURE__ */ jsx129(AppInspectorContext.Provider, { value: contextValue, children: props.children }) });
3386
3391
  };
3387
3392
 
3388
3393
  // src/hooks/use-local-storage.tsx
@@ -3470,7 +3475,8 @@ var useStatus = () => {
3470
3475
  };
3471
3476
 
3472
3477
  // src/pages/spans-list-page.tsx
3473
- import { jsx as jsx129 } from "react/jsx-runtime";
3478
+ import { jsx as jsx130 } from "react/jsx-runtime";
3479
+ var spansPerPageOptions = [25, 50, 100];
3474
3480
  var SpansListPage = () => {
3475
3481
  const api = useAppInspectorApi();
3476
3482
  const [spans, setSpans] = useState5();
@@ -3480,7 +3486,6 @@ var SpansListPage = () => {
3480
3486
  const mapPageToNextCursor = useRef3({});
3481
3487
  const [page, setPage] = useState5(0);
3482
3488
  const [pageSize, setPageSize] = useState5(100);
3483
- const [spansPerPageOptions] = useState5(() => [25, 50, 100]);
3484
3489
  const [spanCount, setSpanCount] = useState5(0);
3485
3490
  const queryOptions = useMemo4(() => {
3486
3491
  return {
@@ -3545,7 +3550,7 @@ var SpansListPage = () => {
3545
3550
  void checkStatus();
3546
3551
  }, [checkStatus]);
3547
3552
  const shouldShowStatusMessage = Boolean(statusError) || status?.status === "DISABLED";
3548
- return /* @__PURE__ */ jsx129(
3553
+ return /* @__PURE__ */ jsx130(
3549
3554
  Box7,
3550
3555
  {
3551
3556
  "data-testid": "spans-list-page",
@@ -3556,14 +3561,14 @@ var SpansListPage = () => {
3556
3561
  flexGrow: 1,
3557
3562
  width: "100%"
3558
3563
  },
3559
- children: shouldShowStatusMessage ? /* @__PURE__ */ jsx129(
3564
+ children: shouldShowStatusMessage ? /* @__PURE__ */ jsx130(
3560
3565
  StatusMessage,
3561
3566
  {
3562
3567
  error: statusError,
3563
3568
  onRetry: handleRetry,
3564
3569
  status
3565
3570
  }
3566
- ) : /* @__PURE__ */ jsx129(
3571
+ ) : /* @__PURE__ */ jsx130(
3567
3572
  SpansList,
3568
3573
  {
3569
3574
  filterWriteOperations,
@@ -3805,7 +3810,7 @@ var getEventGroupsByType = (events) => {
3805
3810
  // src/components/event-details/event-details-header.tsx
3806
3811
  import { Close } from "@mui/icons-material";
3807
3812
  import { Box as Box8, IconButton, Typography as Typography4 } from "@mui/material";
3808
- import { jsx as jsx130, jsxs as jsxs123 } from "react/jsx-runtime";
3813
+ import { jsx as jsx131, jsxs as jsxs123 } from "react/jsx-runtime";
3809
3814
  var EventDetailsHeader = ({ event, onClose }) => {
3810
3815
  return /* @__PURE__ */ jsxs123(
3811
3816
  Box8,
@@ -3820,7 +3825,7 @@ var EventDetailsHeader = ({ event, onClose }) => {
3820
3825
  },
3821
3826
  children: [
3822
3827
  /* @__PURE__ */ jsxs123(Box8, { children: [
3823
- /* @__PURE__ */ jsx130(Typography4, { sx: { fontWeight: 600 }, variant: "h6", children: "Event Details" }),
3828
+ /* @__PURE__ */ jsx131(Typography4, { sx: { fontWeight: 600 }, variant: "h6", children: "Event Details" }),
3824
3829
  /* @__PURE__ */ jsxs123(Typography4, { color: "text.secondary", variant: "body2", children: [
3825
3830
  event.service_name,
3826
3831
  " ",
@@ -3828,7 +3833,7 @@ var EventDetailsHeader = ({ event, onClose }) => {
3828
3833
  event.operation_name
3829
3834
  ] })
3830
3835
  ] }),
3831
- onClose && /* @__PURE__ */ jsx130(IconButton, { onClick: onClose, size: "small", children: /* @__PURE__ */ jsx130(Close, {}) })
3836
+ onClose && /* @__PURE__ */ jsx131(IconButton, { onClick: onClose, size: "small", children: /* @__PURE__ */ jsx131(Close, {}) })
3832
3837
  ]
3833
3838
  }
3834
3839
  );
@@ -3845,23 +3850,23 @@ import { useEffect as useEffect5, useMemo as useMemo6, useRef as useRef4, useSta
3845
3850
  // src/components/status-icon.tsx
3846
3851
  import { Cancel, CheckCircle, Error as Error2, Info, RemoveCircle } from "@mui/icons-material";
3847
3852
  import { Box as Box9 } from "@mui/material";
3848
- import { jsx as jsx131 } from "react/jsx-runtime";
3853
+ import { jsx as jsx132 } from "react/jsx-runtime";
3849
3854
  var StatusIcon = ({ errorLevel }) => {
3850
3855
  switch (errorLevel) {
3851
3856
  case EventLevel.LevelError: {
3852
- return /* @__PURE__ */ jsx131(Cancel, { sx: { color: "red" } });
3857
+ return /* @__PURE__ */ jsx132(Cancel, { sx: { color: "red" } });
3853
3858
  }
3854
3859
  case EventLevel.LevelInfo: {
3855
- return /* @__PURE__ */ jsx131(Info, { sx: { color: "gray" } });
3860
+ return /* @__PURE__ */ jsx132(Info, { sx: { color: "gray" } });
3856
3861
  }
3857
3862
  case EventLevel.LevelPermission: {
3858
- return /* @__PURE__ */ jsx131(RemoveCircle, { sx: { color: "blue" } });
3863
+ return /* @__PURE__ */ jsx132(RemoveCircle, { sx: { color: "blue" } });
3859
3864
  }
3860
3865
  case EventLevel.LevelWarning: {
3861
- return /* @__PURE__ */ jsx131(Error2, { sx: { color: "orange" } });
3866
+ return /* @__PURE__ */ jsx132(Error2, { sx: { color: "orange" } });
3862
3867
  }
3863
3868
  default: {
3864
- return /* @__PURE__ */ jsx131(CheckCircle, { sx: { color: "lightgray" } });
3869
+ return /* @__PURE__ */ jsx132(CheckCircle, { sx: { color: "lightgray" } });
3865
3870
  }
3866
3871
  }
3867
3872
  };
@@ -3869,9 +3874,9 @@ var StatusIcon = ({ errorLevel }) => {
3869
3874
  // src/components/event-details/iam-event-detail.tsx
3870
3875
  import { CheckCircle as CheckCircle2, Error as ErrorIcon, Warning } from "@mui/icons-material";
3871
3876
  import { Box as Box10, Chip, Grid as Grid2, Typography as Typography5 } from "@mui/material";
3872
- import { jsx as jsx132, jsxs as jsxs124 } from "react/jsx-runtime";
3877
+ import { jsx as jsx133, jsxs as jsxs124 } from "react/jsx-runtime";
3873
3878
  var DetailRow = ({ content, label }) => /* @__PURE__ */ jsxs124(Grid2, { container: true, spacing: 0, sx: { mb: 1 }, children: [
3874
- /* @__PURE__ */ jsx132(Grid2, { item: true, sx: { pr: 1 }, xs: 3, children: /* @__PURE__ */ jsx132(
3879
+ /* @__PURE__ */ jsx133(Grid2, { item: true, sx: { pr: 1 }, xs: 3, children: /* @__PURE__ */ jsx133(
3875
3880
  Typography5,
3876
3881
  {
3877
3882
  sx: {
@@ -3882,7 +3887,7 @@ var DetailRow = ({ content, label }) => /* @__PURE__ */ jsxs124(Grid2, { contain
3882
3887
  children: label
3883
3888
  }
3884
3889
  ) }),
3885
- /* @__PURE__ */ jsx132(Grid2, { item: true, xs: 9, children: typeof content === "string" ? /* @__PURE__ */ jsx132(
3890
+ /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 9, children: typeof content === "string" ? /* @__PURE__ */ jsx133(
3886
3891
  Typography5,
3887
3892
  {
3888
3893
  sx: {
@@ -3898,30 +3903,30 @@ var PermissionIcon = ({ status }) => {
3898
3903
  switch (status) {
3899
3904
  case "explicitly_allowed":
3900
3905
  case "implicitly_allowed": {
3901
- return /* @__PURE__ */ jsx132(CheckCircle2, { sx: { color: "success.main", fontSize: "1rem" } });
3906
+ return /* @__PURE__ */ jsx133(CheckCircle2, { sx: { color: "success.main", fontSize: "1rem" } });
3902
3907
  }
3903
3908
  case "explicitly_denied": {
3904
- return /* @__PURE__ */ jsx132(ErrorIcon, { sx: { color: "error.main", fontSize: "1rem" } });
3909
+ return /* @__PURE__ */ jsx133(ErrorIcon, { sx: { color: "error.main", fontSize: "1rem" } });
3905
3910
  }
3906
3911
  case "implicitly_denied": {
3907
- return /* @__PURE__ */ jsx132(Warning, { sx: { color: "warning.main", fontSize: "1rem" } });
3912
+ return /* @__PURE__ */ jsx133(Warning, { sx: { color: "warning.main", fontSize: "1rem" } });
3908
3913
  }
3909
3914
  }
3910
3915
  };
3911
3916
  var IAMEventDetail = ({ event }) => {
3912
3917
  const payloadString = event.attributes?.payload;
3913
3918
  if (!payloadString) {
3914
- return /* @__PURE__ */ jsx132(Box10, { sx: { p: 2 }, children: /* @__PURE__ */ jsx132(Typography5, { sx: { fontWeight: 600 }, variant: "body2", children: "No IAM policy evaluation data available" }) });
3919
+ return /* @__PURE__ */ jsx133(Box10, { sx: { p: 2 }, children: /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "body2", children: "No IAM policy evaluation data available" }) });
3915
3920
  }
3916
3921
  const parsedIAM = parseIAMEvent(payloadString);
3917
3922
  if (!parsedIAM) {
3918
- return /* @__PURE__ */ jsx132(Box10, { sx: { p: 2 }, children: /* @__PURE__ */ jsx132(Typography5, { sx: { fontWeight: 600 }, variant: "body2", children: "Failed to parse IAM event data" }) });
3923
+ return /* @__PURE__ */ jsx133(Box10, { sx: { p: 2 }, children: /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "body2", children: "Failed to parse IAM event data" }) });
3919
3924
  }
3920
3925
  return /* @__PURE__ */ jsxs124(Box10, { sx: { p: 2 }, children: [
3921
- /* @__PURE__ */ jsx132(Box10, { sx: { mb: 2 }, children: /* @__PURE__ */ jsx132(
3926
+ /* @__PURE__ */ jsx133(Box10, { sx: { mb: 2 }, children: /* @__PURE__ */ jsx133(
3922
3927
  Chip,
3923
3928
  {
3924
- icon: /* @__PURE__ */ jsx132(PermissionIcon, { status: parsedIAM.permission }),
3929
+ icon: /* @__PURE__ */ jsx133(PermissionIcon, { status: parsedIAM.permission }),
3925
3930
  label: formatPermissionStatus(parsedIAM.permission),
3926
3931
  size: "small",
3927
3932
  sx: {
@@ -3931,12 +3936,12 @@ var IAMEventDetail = ({ event }) => {
3931
3936
  variant: "outlined"
3932
3937
  }
3933
3938
  ) }),
3934
- /* @__PURE__ */ jsx132(DetailRow, { content: `${parsedIAM.service}:${parsedIAM.operation}`, label: "Operation" }),
3935
- /* @__PURE__ */ jsx132(DetailRow, { content: parsedIAM.principal, label: "Principal" }),
3936
- parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsx132(
3939
+ /* @__PURE__ */ jsx133(DetailRow, { content: `${parsedIAM.service}:${parsedIAM.operation}`, label: "Operation" }),
3940
+ /* @__PURE__ */ jsx133(DetailRow, { content: parsedIAM.principal, label: "Principal" }),
3941
+ parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsx133(
3937
3942
  DetailRow,
3938
3943
  {
3939
- content: /* @__PURE__ */ jsx132(Box10, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx132(
3944
+ content: /* @__PURE__ */ jsx133(Box10, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx133(
3940
3945
  Typography5,
3941
3946
  {
3942
3947
  sx: {
@@ -3950,10 +3955,10 @@ var IAMEventDetail = ({ event }) => {
3950
3955
  label: "Actions"
3951
3956
  }
3952
3957
  ),
3953
- parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsx132(
3958
+ parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsx133(
3954
3959
  DetailRow,
3955
3960
  {
3956
- content: /* @__PURE__ */ jsx132(Box10, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx132(
3961
+ content: /* @__PURE__ */ jsx133(Box10, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx133(
3957
3962
  Typography5,
3958
3963
  {
3959
3964
  sx: {
@@ -3969,19 +3974,19 @@ var IAMEventDetail = ({ event }) => {
3969
3974
  }
3970
3975
  ),
3971
3976
  /* @__PURE__ */ jsxs124(Box10, { sx: { mt: 2 }, children: [
3972
- /* @__PURE__ */ jsx132(Typography5, { sx: { fontWeight: 600, mb: 1 }, variant: "caption", children: "Policy Evaluation" }),
3977
+ /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600, mb: 1 }, variant: "caption", children: "Policy Evaluation" }),
3973
3978
  /* @__PURE__ */ jsxs124(Grid2, { container: true, spacing: 2, children: [
3974
- parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */ jsx132(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
3975
- /* @__PURE__ */ jsx132(Typography5, { color: "success.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitAllows }),
3976
- /* @__PURE__ */ jsx132(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Allows" })
3979
+ parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
3980
+ /* @__PURE__ */ jsx133(Typography5, { color: "success.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitAllows }),
3981
+ /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Allows" })
3977
3982
  ] }) }),
3978
- parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */ jsx132(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
3979
- /* @__PURE__ */ jsx132(Typography5, { color: "error.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitDenies }),
3980
- /* @__PURE__ */ jsx132(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Denies" })
3983
+ parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
3984
+ /* @__PURE__ */ jsx133(Typography5, { color: "error.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.explicitDenies }),
3985
+ /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Explicit Denies" })
3981
3986
  ] }) }),
3982
- parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */ jsx132(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
3983
- /* @__PURE__ */ jsx132(Typography5, { color: "warning.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.implicitDenies }),
3984
- /* @__PURE__ */ jsx132(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Implicit Denies" })
3987
+ parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */ jsx133(Grid2, { item: true, xs: 4, children: /* @__PURE__ */ jsxs124(Box10, { sx: { textAlign: "center" }, children: [
3988
+ /* @__PURE__ */ jsx133(Typography5, { color: "warning.main", sx: { fontWeight: "bold" }, variant: "h6", children: parsedIAM.details.implicitDenies }),
3989
+ /* @__PURE__ */ jsx133(Typography5, { sx: { fontWeight: 600 }, variant: "caption", children: "Implicit Denies" })
3985
3990
  ] }) })
3986
3991
  ] })
3987
3992
  ] })
@@ -3992,7 +3997,7 @@ var IAMEventDetail = ({ event }) => {
3992
3997
  import { KeyboardArrowDown, KeyboardArrowRight } from "@mui/icons-material";
3993
3998
  import { Box as Box11, Chip as Chip2, IconButton as IconButton2, Typography as Typography6 } from "@mui/material";
3994
3999
  import { useMemo as useMemo5, useState as useState6 } from "react";
3995
- import { jsx as jsx133, jsxs as jsxs125 } from "react/jsx-runtime";
4000
+ import { jsx as jsx134, jsxs as jsxs125 } from "react/jsx-runtime";
3996
4001
  var getChipColors = (status) => {
3997
4002
  const isAllowed = status === "explicitly_allowed" || status === "implicitly_allowed";
3998
4003
  return {
@@ -4022,10 +4027,10 @@ var IAMPermissionItem = ({ event }) => {
4022
4027
  const { chipColors, parsedIAM } = parsedData;
4023
4028
  return /* @__PURE__ */ jsxs125(Box11, { sx: { mb: 1 }, children: [
4024
4029
  /* @__PURE__ */ jsxs125(Box11, { sx: { alignItems: "center", display: "flex" }, children: [
4025
- /* @__PURE__ */ jsx133(IconButton2, { onClick: () => {
4030
+ /* @__PURE__ */ jsx134(IconButton2, { onClick: () => {
4026
4031
  setIsOpen(!isOpen);
4027
- }, size: "small", sx: { mr: 1, p: 0 }, children: isOpen ? /* @__PURE__ */ jsx133(KeyboardArrowDown, {}) : /* @__PURE__ */ jsx133(KeyboardArrowRight, {}) }),
4028
- /* @__PURE__ */ jsx133(
4032
+ }, size: "small", sx: { mr: 1, p: 0 }, children: isOpen ? /* @__PURE__ */ jsx134(KeyboardArrowDown, {}) : /* @__PURE__ */ jsx134(KeyboardArrowRight, {}) }),
4033
+ /* @__PURE__ */ jsx134(
4029
4034
  Chip2,
4030
4035
  {
4031
4036
  label: formatPermissionStatus(parsedIAM.permission),
@@ -4037,18 +4042,18 @@ var IAMPermissionItem = ({ event }) => {
4037
4042
  }
4038
4043
  )
4039
4044
  ] }),
4040
- isOpen && /* @__PURE__ */ jsx133(Box11, { sx: { ml: 4, mt: 1 }, children: /* @__PURE__ */ jsxs125(Box11, { children: [
4041
- /* @__PURE__ */ jsx133(Typography6, { sx: { fontWeight: 600 }, variant: "caption", children: "Principal" }),
4042
- /* @__PURE__ */ jsx133(Typography6, { variant: "body2", children: parsedIAM.principal })
4045
+ isOpen && /* @__PURE__ */ jsx134(Box11, { sx: { ml: 4, mt: 1 }, children: /* @__PURE__ */ jsxs125(Box11, { children: [
4046
+ /* @__PURE__ */ jsx134(Typography6, { sx: { fontWeight: 600 }, variant: "caption", children: "Principal" }),
4047
+ /* @__PURE__ */ jsx134(Typography6, { variant: "body2", children: parsedIAM.principal })
4043
4048
  ] }) })
4044
4049
  ] });
4045
4050
  };
4046
- var IAMPermissionDetail = ({ events }) => /* @__PURE__ */ jsx133(Box11, { sx: { mt: 2 }, children: events.map((event) => /* @__PURE__ */ jsx133(IAMPermissionItem, { event }, `${event.span_id}-${event.event_id}`)) });
4051
+ var IAMPermissionDetail = ({ events }) => /* @__PURE__ */ jsx134(Box11, { sx: { mt: 2 }, children: events.map((event) => /* @__PURE__ */ jsx134(IAMPermissionItem, { event }, `${event.span_id}-${event.event_id}`)) });
4047
4052
 
4048
4053
  // src/components/event-details/event-detail.tsx
4049
- import { Fragment as Fragment5, jsx as jsx134, jsxs as jsxs126 } from "react/jsx-runtime";
4054
+ import { Fragment as Fragment5, jsx as jsx135, jsxs as jsxs126 } from "react/jsx-runtime";
4050
4055
  var DetailRow2 = ({ content, label }) => /* @__PURE__ */ jsxs126(Grid3, { container: true, spacing: 0, sx: { mb: 1 }, children: [
4051
- /* @__PURE__ */ jsx134(Grid3, { item: true, sx: { pr: 1 }, xs: 3, children: /* @__PURE__ */ jsx134(
4056
+ /* @__PURE__ */ jsx135(Grid3, { item: true, sx: { pr: 1 }, xs: 3, children: /* @__PURE__ */ jsx135(
4052
4057
  Typography7,
4053
4058
  {
4054
4059
  sx: {
@@ -4059,7 +4064,7 @@ var DetailRow2 = ({ content, label }) => /* @__PURE__ */ jsxs126(Grid3, { contai
4059
4064
  children: label
4060
4065
  }
4061
4066
  ) }),
4062
- /* @__PURE__ */ jsx134(Grid3, { item: true, xs: 9, children: typeof content === "string" ? /* @__PURE__ */ jsx134(
4067
+ /* @__PURE__ */ jsx135(Grid3, { item: true, xs: 9, children: typeof content === "string" ? /* @__PURE__ */ jsx135(
4063
4068
  Typography7,
4064
4069
  {
4065
4070
  sx: {
@@ -4078,7 +4083,7 @@ var EventMessage = ({ event }) => {
4078
4083
  const parsedMessage = useMemo6(() => parseEventMessage(event), [event]);
4079
4084
  const isIAMPolicyEvent = useMemo6(
4080
4085
  () => event.event_type === "iam.policy_evaluation" && event.attributes?.payload && typeof event.attributes.payload === "string",
4081
- [event.event_type, event.attributes?.payload]
4086
+ [event]
4082
4087
  );
4083
4088
  useEffect5(() => {
4084
4089
  const checkOverflow = () => {
@@ -4103,7 +4108,7 @@ var EventMessage = ({ event }) => {
4103
4108
  );
4104
4109
  return /* @__PURE__ */ jsxs126(Box12, { sx: { display: "flex", flexDirection: "column" }, children: [
4105
4110
  /* @__PURE__ */ jsxs126(Box12, { sx: { alignItems: "flex-start", display: "flex" }, children: [
4106
- Boolean(shouldShowToggle) && /* @__PURE__ */ jsx134(
4111
+ Boolean(shouldShowToggle) && /* @__PURE__ */ jsx135(
4107
4112
  IconButton3,
4108
4113
  {
4109
4114
  onClick: () => {
@@ -4111,10 +4116,10 @@ var EventMessage = ({ event }) => {
4111
4116
  },
4112
4117
  size: "small",
4113
4118
  sx: { mr: 1, mt: -0.5, p: 0 },
4114
- children: isOpen ? /* @__PURE__ */ jsx134(KeyboardArrowDown2, {}) : /* @__PURE__ */ jsx134(KeyboardArrowRight2, {})
4119
+ children: isOpen ? /* @__PURE__ */ jsx135(KeyboardArrowDown2, {}) : /* @__PURE__ */ jsx135(KeyboardArrowRight2, {})
4115
4120
  }
4116
4121
  ),
4117
- /* @__PURE__ */ jsx134(
4122
+ /* @__PURE__ */ jsx135(
4118
4123
  Typography7,
4119
4124
  {
4120
4125
  ref: textReference,
@@ -4132,9 +4137,9 @@ var EventMessage = ({ event }) => {
4132
4137
  }
4133
4138
  )
4134
4139
  ] }),
4135
- isOpen && /* @__PURE__ */ jsx134(Box12, { sx: { ml: 4, mt: 1 }, children: isIAMPolicyEvent ? /* @__PURE__ */ jsx134(IAMEventDetail, { event }) : /* @__PURE__ */ jsxs126(Fragment5, { children: [
4136
- Boolean(parsedMessage.message) && /* @__PURE__ */ jsx134(DetailRow2, { content: parsedMessage.message, label: "Message:" }),
4137
- Boolean(parsedMessage.details) && /* @__PURE__ */ jsx134(DetailRow2, { content: parsedMessage.details, label: "Details:" })
4140
+ isOpen && /* @__PURE__ */ jsx135(Box12, { sx: { ml: 4, mt: 1 }, children: isIAMPolicyEvent ? /* @__PURE__ */ jsx135(IAMEventDetail, { event }) : /* @__PURE__ */ jsxs126(Fragment5, { children: [
4141
+ Boolean(parsedMessage.message) && /* @__PURE__ */ jsx135(DetailRow2, { content: parsedMessage.message, label: "Message:" }),
4142
+ Boolean(parsedMessage.details) && /* @__PURE__ */ jsx135(DetailRow2, { content: parsedMessage.details, label: "Details:" })
4138
4143
  ] }) })
4139
4144
  ] });
4140
4145
  };
@@ -4164,7 +4169,7 @@ var EventDetail = ({
4164
4169
  }) => {
4165
4170
  if (type === "permission") {
4166
4171
  return /* @__PURE__ */ jsxs126(Box12, { children: [
4167
- /* @__PURE__ */ jsx134(
4172
+ /* @__PURE__ */ jsx135(
4168
4173
  Box12,
4169
4174
  {
4170
4175
  sx: {
@@ -4172,7 +4177,7 @@ var EventDetail = ({
4172
4177
  display: "flex",
4173
4178
  mb: 1
4174
4179
  },
4175
- children: /* @__PURE__ */ jsx134(
4180
+ children: /* @__PURE__ */ jsx135(
4176
4181
  Typography7,
4177
4182
  {
4178
4183
  sx: {
@@ -4187,7 +4192,7 @@ var EventDetail = ({
4187
4192
  )
4188
4193
  }
4189
4194
  ),
4190
- /* @__PURE__ */ jsx134(IAMPermissionDetail, { events })
4195
+ /* @__PURE__ */ jsx135(IAMPermissionDetail, { events })
4191
4196
  ] });
4192
4197
  }
4193
4198
  const eventLevel = getEventLevelFromGroup(type);
@@ -4202,8 +4207,8 @@ var EventDetail = ({
4202
4207
  mb: 1
4203
4208
  },
4204
4209
  children: [
4205
- /* @__PURE__ */ jsx134(StatusIcon, { errorLevel: eventLevel }),
4206
- /* @__PURE__ */ jsx134(
4210
+ /* @__PURE__ */ jsx135(StatusIcon, { errorLevel: eventLevel }),
4211
+ /* @__PURE__ */ jsx135(
4207
4212
  Typography7,
4208
4213
  {
4209
4214
  sx: {
@@ -4222,14 +4227,14 @@ var EventDetail = ({
4222
4227
  ]
4223
4228
  }
4224
4229
  ),
4225
- /* @__PURE__ */ jsx134(Box12, { sx: { mt: 2 }, children: events.map((event) => /* @__PURE__ */ jsx134(
4230
+ /* @__PURE__ */ jsx135(Box12, { sx: { mt: 2 }, children: events.map((event) => /* @__PURE__ */ jsx135(
4226
4231
  Box12,
4227
4232
  {
4228
4233
  sx: {
4229
4234
  maxWidth: "100%",
4230
4235
  mb: 1
4231
4236
  },
4232
- children: /* @__PURE__ */ jsx134(EventMessage, { event })
4237
+ children: /* @__PURE__ */ jsx135(EventMessage, { event })
4233
4238
  },
4234
4239
  `${event.span_id}-${event.event_id}`
4235
4240
  )) })
@@ -4240,11 +4245,11 @@ var EventDetail = ({
4240
4245
  import { KeyboardArrowDown as KeyboardArrowDown3, KeyboardArrowRight as KeyboardArrowRight3 } from "@mui/icons-material";
4241
4246
  import { Box as Box13, Typography as Typography8 } from "@mui/material";
4242
4247
  import { useState as useState8 } from "react";
4243
- import { jsx as jsx135, jsxs as jsxs127 } from "react/jsx-runtime";
4248
+ import { jsx as jsx136, jsxs as jsxs127 } from "react/jsx-runtime";
4244
4249
  var ToggleSection = ({ children, headline, initialOpen = true }) => {
4245
4250
  const [isOpen, setIsOpen] = useState8(initialOpen);
4246
4251
  return /* @__PURE__ */ jsxs127(Box13, { sx: { mt: 4 }, children: [
4247
- /* @__PURE__ */ jsx135(
4252
+ /* @__PURE__ */ jsx136(
4248
4253
  Box13,
4249
4254
  {
4250
4255
  onClick: () => {
@@ -4264,24 +4269,24 @@ var ToggleSection = ({ children, headline, initialOpen = true }) => {
4264
4269
  gap: 1
4265
4270
  },
4266
4271
  children: [
4267
- /* @__PURE__ */ jsx135(Typography8, { sx: { fontWeight: 600 }, variant: "subtitle2", children: headline }),
4268
- isOpen ? /* @__PURE__ */ jsx135(KeyboardArrowDown3, { sx: { color: "text.secondary", height: 20, width: 20 } }) : /* @__PURE__ */ jsx135(KeyboardArrowRight3, { sx: { color: "text.secondary", height: 20, width: 20 } })
4272
+ /* @__PURE__ */ jsx136(Typography8, { sx: { fontWeight: 600 }, variant: "subtitle2", children: headline }),
4273
+ isOpen ? /* @__PURE__ */ jsx136(KeyboardArrowDown3, { sx: { color: "text.secondary", height: 20, width: 20 } }) : /* @__PURE__ */ jsx136(KeyboardArrowRight3, { sx: { color: "text.secondary", height: 20, width: 20 } })
4269
4274
  ]
4270
4275
  }
4271
4276
  )
4272
4277
  }
4273
4278
  ),
4274
- isOpen && /* @__PURE__ */ jsx135(Box13, { children })
4279
+ isOpen && /* @__PURE__ */ jsx136(Box13, { children })
4275
4280
  ] });
4276
4281
  };
4277
4282
 
4278
4283
  // src/components/event-details/event-section.tsx
4279
- import { jsx as jsx136, jsxs as jsxs128 } from "react/jsx-runtime";
4284
+ import { jsx as jsx137, jsxs as jsxs128 } from "react/jsx-runtime";
4280
4285
  var EventSection = ({
4281
4286
  eventGroups,
4282
4287
  headline
4283
- }) => /* @__PURE__ */ jsx136(ToggleSection, { headline, children: /* @__PURE__ */ jsxs128(Box14, { children: [
4284
- eventGroups.errors && /* @__PURE__ */ jsx136(
4288
+ }) => /* @__PURE__ */ jsx137(ToggleSection, { headline, children: /* @__PURE__ */ jsxs128(Box14, { children: [
4289
+ eventGroups.errors && /* @__PURE__ */ jsx137(
4285
4290
  EventDetail,
4286
4291
  {
4287
4292
  displayText: "Error",
@@ -4289,7 +4294,7 @@ var EventSection = ({
4289
4294
  type: "error"
4290
4295
  }
4291
4296
  ),
4292
- eventGroups.warnings && /* @__PURE__ */ jsx136(
4297
+ eventGroups.warnings && /* @__PURE__ */ jsx137(
4293
4298
  EventDetail,
4294
4299
  {
4295
4300
  displayText: "Warning",
@@ -4297,7 +4302,7 @@ var EventSection = ({
4297
4302
  type: "warning"
4298
4303
  }
4299
4304
  ),
4300
- eventGroups.permissions && /* @__PURE__ */ jsx136(
4305
+ eventGroups.permissions && /* @__PURE__ */ jsx137(
4301
4306
  EventDetail,
4302
4307
  {
4303
4308
  displayText: "IAM Permission",
@@ -4305,7 +4310,7 @@ var EventSection = ({
4305
4310
  type: "permission"
4306
4311
  }
4307
4312
  ),
4308
- eventGroups.info && /* @__PURE__ */ jsx136(
4313
+ eventGroups.info && /* @__PURE__ */ jsx137(
4309
4314
  EventDetail,
4310
4315
  {
4311
4316
  displayText: "Info",
@@ -4316,55 +4321,55 @@ var EventSection = ({
4316
4321
  ] }) });
4317
4322
 
4318
4323
  // src/components/event-details/event-details.tsx
4319
- import { Fragment as Fragment6, jsx as jsx137, jsxs as jsxs129 } from "react/jsx-runtime";
4324
+ import { Fragment as Fragment6, jsx as jsx138, jsxs as jsxs129 } from "react/jsx-runtime";
4320
4325
  var EventDetails = ({ onClose, selectedEvent }) => {
4321
4326
  const attributes = useMemo7(() => {
4322
4327
  const attributes2 = Object.entries(selectedEvent?.attributes ?? {});
4323
4328
  return attributes2.filter(([key]) => key !== "localstack.aws.account_id" && key !== "localstack.aws.service");
4324
4329
  }, [selectedEvent?.attributes]);
4325
4330
  if (!selectedEvent) {
4326
- return /* @__PURE__ */ jsx137(Box15, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx137(Typography9, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
4331
+ return /* @__PURE__ */ jsx138(Box15, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx138(Typography9, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
4327
4332
  }
4328
4333
  return /* @__PURE__ */ jsxs129(Box15, { "data-testid": "event-details", sx: { display: "flex", flexDirection: "column", height: "100%" }, children: [
4329
- /* @__PURE__ */ jsx137(EventDetailsHeader, { event: selectedEvent, onClose }),
4330
- /* @__PURE__ */ jsx137(Box15, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 2, children: [
4331
- /* @__PURE__ */ jsx137(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
4334
+ /* @__PURE__ */ jsx138(EventDetailsHeader, { event: selectedEvent, onClose }),
4335
+ /* @__PURE__ */ jsx138(Box15, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 2, children: [
4336
+ /* @__PURE__ */ jsx138(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
4332
4337
  /* @__PURE__ */ jsxs129(Box15, { children: [
4333
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
4334
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.span_id })
4338
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
4339
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.span_id })
4335
4340
  ] }),
4336
4341
  /* @__PURE__ */ jsxs129(Box15, { children: [
4337
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
4338
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.trace_id })
4342
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
4343
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.trace_id })
4339
4344
  ] }),
4340
4345
  /* @__PURE__ */ jsxs129(Box15, { children: [
4341
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
4342
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.operation_name })
4346
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
4347
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.operation_name })
4343
4348
  ] })
4344
4349
  ] }) }),
4345
- /* @__PURE__ */ jsx137(Divider2, {}),
4346
- /* @__PURE__ */ jsx137(ToggleSection, { headline: "Service Information", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
4350
+ /* @__PURE__ */ jsx138(Divider2, {}),
4351
+ /* @__PURE__ */ jsx138(ToggleSection, { headline: "Service Information", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
4347
4352
  /* @__PURE__ */ jsxs129(Box15, { children: [
4348
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
4349
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.service_name })
4353
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
4354
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.service_name })
4350
4355
  ] }),
4351
4356
  /* @__PURE__ */ jsxs129(Box15, { children: [
4352
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
4353
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.resource_name })
4357
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
4358
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.resource_name })
4354
4359
  ] }),
4355
4360
  Boolean(selectedEvent.region) && /* @__PURE__ */ jsxs129(Box15, { children: [
4356
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
4357
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.region })
4361
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
4362
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.region })
4358
4363
  ] })
4359
4364
  ] }) }),
4360
- /* @__PURE__ */ jsx137(Divider2, {}),
4361
- /* @__PURE__ */ jsx137(ToggleSection, { headline: "Timing", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
4365
+ /* @__PURE__ */ jsx138(Divider2, {}),
4366
+ /* @__PURE__ */ jsx138(ToggleSection, { headline: "Timing", children: /* @__PURE__ */ jsxs129(Stack2, { spacing: 1, children: [
4362
4367
  /* @__PURE__ */ jsxs129(Box15, { children: [
4363
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
4364
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
4368
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
4369
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
4365
4370
  ] }),
4366
4371
  Boolean(selectedEvent.end_time_unix_nano) && /* @__PURE__ */ jsxs129(Box15, { children: [
4367
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
4372
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
4368
4373
  /* @__PURE__ */ jsxs129(Typography9, { variant: "body2", children: [
4369
4374
  ((BigInt(selectedEvent.end_time_unix_nano) - BigInt(selectedEvent.start_time_unix_nano)) / BigInt("1000000")).toString(),
4370
4375
  " ",
@@ -4372,9 +4377,9 @@ var EventDetails = ({ onClose, selectedEvent }) => {
4372
4377
  ] })
4373
4378
  ] })
4374
4379
  ] }) }),
4375
- /* @__PURE__ */ jsx137(Divider2, {}),
4376
- /* @__PURE__ */ jsx137(ToggleSection, { headline: "Status", children: /* @__PURE__ */ jsxs129(Stack2, { direction: "row", spacing: 1, children: [
4377
- /* @__PURE__ */ jsx137(
4380
+ /* @__PURE__ */ jsx138(Divider2, {}),
4381
+ /* @__PURE__ */ jsx138(ToggleSection, { headline: "Status", children: /* @__PURE__ */ jsxs129(Stack2, { direction: "row", spacing: 1, children: [
4382
+ /* @__PURE__ */ jsx138(
4378
4383
  Chip3,
4379
4384
  {
4380
4385
  color: selectedEvent.status_code === 2 ? "error" : selectedEvent.status_code === 1 ? "success" : "default",
@@ -4382,11 +4387,11 @@ var EventDetails = ({ onClose, selectedEvent }) => {
4382
4387
  size: "small"
4383
4388
  }
4384
4389
  ),
4385
- Boolean(selectedEvent.status_message) && /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: selectedEvent.status_message })
4390
+ Boolean(selectedEvent.status_message) && /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: selectedEvent.status_message })
4386
4391
  ] }) }),
4387
4392
  selectedEvent.events.length > 0 && /* @__PURE__ */ jsxs129(Fragment6, { children: [
4388
- /* @__PURE__ */ jsx137(Divider2, {}),
4389
- /* @__PURE__ */ jsx137(
4393
+ /* @__PURE__ */ jsx138(Divider2, {}),
4394
+ /* @__PURE__ */ jsx138(
4390
4395
  EventSection,
4391
4396
  {
4392
4397
  eventGroups: getEventGroupsByType(selectedEvent.events),
@@ -4395,10 +4400,10 @@ var EventDetails = ({ onClose, selectedEvent }) => {
4395
4400
  )
4396
4401
  ] }),
4397
4402
  attributes.length > 0 && /* @__PURE__ */ jsxs129(Fragment6, { children: [
4398
- /* @__PURE__ */ jsx137(Divider2, {}),
4399
- /* @__PURE__ */ jsx137(ToggleSection, { headline: "Attributes", children: /* @__PURE__ */ jsx137(Stack2, { spacing: 1, children: attributes.map(([key, value]) => /* @__PURE__ */ jsxs129(Box15, { children: [
4400
- /* @__PURE__ */ jsx137(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: key }),
4401
- /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: renderKeyValue(key, value) })
4403
+ /* @__PURE__ */ jsx138(Divider2, {}),
4404
+ /* @__PURE__ */ jsx138(ToggleSection, { headline: "Attributes", children: /* @__PURE__ */ jsx138(Stack2, { spacing: 1, children: attributes.map(([key, value]) => /* @__PURE__ */ jsxs129(Box15, { children: [
4405
+ /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "caption", children: key }),
4406
+ /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: renderKeyValue(key, value) })
4402
4407
  ] }, key)) }) })
4403
4408
  ] })
4404
4409
  ] }) })
@@ -4406,12 +4411,12 @@ var EventDetails = ({ onClose, selectedEvent }) => {
4406
4411
  };
4407
4412
  function renderKeyValue(key, value) {
4408
4413
  if (typeof value === "string" && (key === "localstack.aws.service.request" || key === "localstack.aws.service.response" || key === "localstack.aws.service.exception")) {
4409
- return /* @__PURE__ */ jsx137(Box15, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ jsx137("pre", { style: { margin: 0, overflow: "auto" }, children: /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: JSON.stringify(JSON.parse(value), void 0, 2) }) }) });
4414
+ return /* @__PURE__ */ jsx138(Box15, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ jsx138("pre", { style: { margin: 0, overflow: "auto" }, children: /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: JSON.stringify(JSON.parse(value), void 0, 2) }) }) });
4410
4415
  }
4411
4416
  if (typeof value === "boolean") {
4412
- return /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: value ? "yes" : "no" });
4417
+ return /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: value ? "yes" : "no" });
4413
4418
  }
4414
- return /* @__PURE__ */ jsx137(Typography9, { variant: "body2", children: value });
4419
+ return /* @__PURE__ */ jsx138(Typography9, { variant: "body2", children: value });
4415
4420
  }
4416
4421
 
4417
4422
  // src/components/trace-graph/trace-graph.tsx
@@ -4424,24 +4429,24 @@ import { useCallback as useCallback7, useEffect as useEffect6, useState as useSt
4424
4429
  import { Box as Box17, Stack as Stack3, Typography as Typography10 } from "@mui/material";
4425
4430
  import "@xyflow/react/dist/style.css";
4426
4431
  import { Handle, Position } from "@xyflow/react";
4427
- import { memo, useCallback as useCallback6 } from "react";
4432
+ import { memo as memo2, useCallback as useCallback6 } from "react";
4428
4433
 
4429
4434
  // src/components/trace-graph/problem-indicator.tsx
4430
4435
  import { Error as ErrorIcon2, Info as Info2, Warning as Warning2 } from "@mui/icons-material";
4431
4436
  import { Box as Box16, Tooltip as Tooltip4 } from "@mui/material";
4432
4437
  import { useMemo as useMemo8 } from "react";
4433
- import { jsx as jsx138 } from "react/jsx-runtime";
4438
+ import { jsx as jsx139 } from "react/jsx-runtime";
4434
4439
  var ProblemIndicator = ({ error }) => {
4435
4440
  const icon = useMemo8(() => {
4436
4441
  switch (error.level) {
4437
4442
  case "error": {
4438
- return /* @__PURE__ */ jsx138(ErrorIcon2, { sx: { color: "#d32f2f", fontSize: "14px" } });
4443
+ return /* @__PURE__ */ jsx139(ErrorIcon2, { sx: { color: "#d32f2f", fontSize: "14px" } });
4439
4444
  }
4440
4445
  case "warning": {
4441
- return /* @__PURE__ */ jsx138(Warning2, { sx: { color: "#ff9800", fontSize: "14px" } });
4446
+ return /* @__PURE__ */ jsx139(Warning2, { sx: { color: "#ff9800", fontSize: "14px" } });
4442
4447
  }
4443
4448
  default: {
4444
- return /* @__PURE__ */ jsx138(Info2, { sx: { color: "#2196f3", fontSize: "14px" } });
4449
+ return /* @__PURE__ */ jsx139(Info2, { sx: { color: "#2196f3", fontSize: "14px" } });
4445
4450
  }
4446
4451
  }
4447
4452
  }, [error.level]);
@@ -4458,7 +4463,7 @@ var ProblemIndicator = ({ error }) => {
4458
4463
  }
4459
4464
  }
4460
4465
  }, [error.level]);
4461
- return /* @__PURE__ */ jsx138(Tooltip4, { arrow: true, title: error.message ?? "Issue detected", children: /* @__PURE__ */ jsx138(
4466
+ return /* @__PURE__ */ jsx139(Tooltip4, { arrow: true, title: error.message ?? "Issue detected", children: /* @__PURE__ */ jsx139(
4462
4467
  Box16,
4463
4468
  {
4464
4469
  sx: {
@@ -4478,13 +4483,13 @@ var ProblemIndicator = ({ error }) => {
4478
4483
  };
4479
4484
 
4480
4485
  // src/components/trace-graph/service-node.tsx
4481
- import { jsx as jsx139, jsxs as jsxs130 } from "react/jsx-runtime";
4486
+ import { jsx as jsx140, jsxs as jsxs130 } from "react/jsx-runtime";
4482
4487
  var handleStyle = {
4483
4488
  backgroundColor: "white",
4484
4489
  borderColor: "lightgray",
4485
4490
  opacity: 0
4486
4491
  };
4487
- var ServiceNode = memo(function ServiceNode2({ data, selected }) {
4492
+ var ServiceNode = memo2(function ServiceNode2({ data, selected }) {
4488
4493
  const handleClick = useCallback6(() => {
4489
4494
  data.onEventSelect(data.event);
4490
4495
  }, [data]);
@@ -4521,9 +4526,9 @@ var ServiceNode = memo(function ServiceNode2({ data, selected }) {
4521
4526
  },
4522
4527
  tabIndex: 0,
4523
4528
  children: [
4524
- /* @__PURE__ */ jsx139(Handle, { position: Position.Left, style: handleStyle, type: "target" }),
4525
- /* @__PURE__ */ jsx139(Handle, { position: Position.Right, style: handleStyle, type: "source" }),
4526
- /* @__PURE__ */ jsx139(
4529
+ /* @__PURE__ */ jsx140(Handle, { position: Position.Left, style: handleStyle, type: "target" }),
4530
+ /* @__PURE__ */ jsx140(Handle, { position: Position.Right, style: handleStyle, type: "source" }),
4531
+ /* @__PURE__ */ jsx140(
4527
4532
  ServiceCell,
4528
4533
  {
4529
4534
  borderColor: selected ? "text.primary" : void 0,
@@ -4548,7 +4553,7 @@ var ServiceNode = memo(function ServiceNode2({ data, selected }) {
4548
4553
  mt: 0.5
4549
4554
  },
4550
4555
  children: [
4551
- hasErrors && /* @__PURE__ */ jsx139(
4556
+ hasErrors && /* @__PURE__ */ jsx140(
4552
4557
  Stack3,
4553
4558
  {
4554
4559
  direction: "row",
@@ -4557,10 +4562,10 @@ var ServiceNode = memo(function ServiceNode2({ data, selected }) {
4557
4562
  flexWrap: "wrap",
4558
4563
  gap: "2px"
4559
4564
  },
4560
- children: data.event.errors?.map((error) => /* @__PURE__ */ jsx139(ProblemIndicator, { error }, error.span_id))
4565
+ children: data.event.errors?.map((error) => /* @__PURE__ */ jsx140(ProblemIndicator, { error }, error.span_id))
4561
4566
  }
4562
4567
  ),
4563
- /* @__PURE__ */ jsx139(
4568
+ /* @__PURE__ */ jsx140(
4564
4569
  Typography10,
4565
4570
  {
4566
4571
  sx: {
@@ -4677,7 +4682,7 @@ var calculateCenterX = (focusNodeX, viewPortPixelWidth, minX, maxX) => {
4677
4682
  import { Add, FitScreen, Remove } from "@mui/icons-material";
4678
4683
  import { Box as Box18, IconButton as IconButton4 } from "@mui/material";
4679
4684
  import { useReactFlow, useStore } from "@xyflow/react";
4680
- import { memo as memo2 } from "react";
4685
+ import { memo as memo3 } from "react";
4681
4686
 
4682
4687
  // node_modules/zustand/esm/shallow.mjs
4683
4688
  function shallow$1(objA, objB) {
@@ -4718,13 +4723,13 @@ function shallow$1(objA, objB) {
4718
4723
  }
4719
4724
 
4720
4725
  // src/components/trace-graph/xyflow/controls.tsx
4721
- import { jsx as jsx140, jsxs as jsxs131 } from "react/jsx-runtime";
4726
+ import { jsx as jsx141, jsxs as jsxs131 } from "react/jsx-runtime";
4722
4727
  var selector = (s) => ({
4723
4728
  isInteractive: s.nodesDraggable || s.nodesConnectable || s.elementsSelectable,
4724
4729
  maxZoomReached: s.transform[2] >= s.maxZoom,
4725
4730
  minZoomReached: s.transform[2] <= s.minZoom
4726
4731
  });
4727
- var Controls = memo2(() => {
4732
+ var Controls = memo3(() => {
4728
4733
  const { maxZoomReached, minZoomReached } = useStore(selector, shallow$1);
4729
4734
  const { fitView, zoomIn, zoomOut } = useReactFlow();
4730
4735
  const onZoomInHandler = () => {
@@ -4750,33 +4755,33 @@ var Controls = memo2(() => {
4750
4755
  zIndex: 5
4751
4756
  },
4752
4757
  children: [
4753
- /* @__PURE__ */ jsx140(
4758
+ /* @__PURE__ */ jsx141(
4754
4759
  IconButton4,
4755
4760
  {
4756
4761
  className: "react-flow__controls-zoomin",
4757
4762
  disabled: maxZoomReached,
4758
4763
  onClick: onZoomInHandler,
4759
4764
  size: "small",
4760
- children: /* @__PURE__ */ jsx140(Add, {})
4765
+ children: /* @__PURE__ */ jsx141(Add, {})
4761
4766
  }
4762
4767
  ),
4763
- /* @__PURE__ */ jsx140(
4768
+ /* @__PURE__ */ jsx141(
4764
4769
  IconButton4,
4765
4770
  {
4766
4771
  className: "react-flow__controls-zoomout",
4767
4772
  disabled: minZoomReached,
4768
4773
  onClick: onZoomOutHandler,
4769
4774
  size: "small",
4770
- children: /* @__PURE__ */ jsx140(Remove, {})
4775
+ children: /* @__PURE__ */ jsx141(Remove, {})
4771
4776
  }
4772
4777
  ),
4773
- /* @__PURE__ */ jsx140(
4778
+ /* @__PURE__ */ jsx141(
4774
4779
  IconButton4,
4775
4780
  {
4776
4781
  className: "react-flow__controls-fitview",
4777
4782
  onClick: onFitViewHandler,
4778
4783
  size: "small",
4779
- children: /* @__PURE__ */ jsx140(FitScreen, {})
4784
+ children: /* @__PURE__ */ jsx141(FitScreen, {})
4780
4785
  }
4781
4786
  )
4782
4787
  ]
@@ -4785,7 +4790,7 @@ var Controls = memo2(() => {
4785
4790
  });
4786
4791
 
4787
4792
  // src/components/trace-graph/trace-graph.tsx
4788
- import { Fragment as Fragment7, jsx as jsx141, jsxs as jsxs132 } from "react/jsx-runtime";
4793
+ import { Fragment as Fragment7, jsx as jsx142, jsxs as jsxs132 } from "react/jsx-runtime";
4789
4794
  var nodeTypes = {
4790
4795
  service: ServiceNode
4791
4796
  };
@@ -4878,7 +4883,7 @@ var TraceGraph = ({
4878
4883
  spans.error && /* @__PURE__ */ jsxs132(
4879
4884
  Alert3,
4880
4885
  {
4881
- action: /* @__PURE__ */ jsx141(Button4, { onClick: () => {
4886
+ action: /* @__PURE__ */ jsx142(Button4, { onClick: () => {
4882
4887
  onRefresh();
4883
4888
  }, children: "Retry" }),
4884
4889
  severity: "error",
@@ -4903,8 +4908,8 @@ var TraceGraph = ({
4903
4908
  onNodeClick,
4904
4909
  selectNodesOnDrag: false,
4905
4910
  children: [
4906
- /* @__PURE__ */ jsx141(Controls, {}),
4907
- /* @__PURE__ */ jsx141(Background, {})
4911
+ /* @__PURE__ */ jsx142(Controls, {}),
4912
+ /* @__PURE__ */ jsx142(Background, {})
4908
4913
  ]
4909
4914
  }
4910
4915
  )
@@ -4912,7 +4917,7 @@ var TraceGraph = ({
4912
4917
  };
4913
4918
 
4914
4919
  // src/pages/trace-graph-page.tsx
4915
- import { Fragment as Fragment8, jsx as jsx142, jsxs as jsxs133 } from "react/jsx-runtime";
4920
+ import { Fragment as Fragment8, jsx as jsx143, jsxs as jsxs133 } from "react/jsx-runtime";
4916
4921
  var HEADER_HEIGHT = 56;
4917
4922
  var DRAWER_WIDTH = "35%";
4918
4923
  var Main = styled("main", { shouldForwardProp: (property) => property !== "open" })(({ open, theme }) => ({
@@ -4975,12 +4980,12 @@ var TraceGraphView = ({
4975
4980
  },
4976
4981
  children: [
4977
4982
  /* @__PURE__ */ jsxs133(Box19, { sx: { display: "flex", width: "100%" }, children: [
4978
- /* @__PURE__ */ jsx142(Button5, { onClick: () => {
4983
+ /* @__PURE__ */ jsx143(Button5, { onClick: () => {
4979
4984
  navigateToSpansList();
4980
- }, startIcon: /* @__PURE__ */ jsx142(ArrowBack, {}), children: "Go back" }),
4981
- /* @__PURE__ */ jsx142(Box19, { sx: { flexGrow: 1 } })
4985
+ }, startIcon: /* @__PURE__ */ jsx143(ArrowBack, {}), children: "Go back" }),
4986
+ /* @__PURE__ */ jsx143(Box19, { sx: { flexGrow: 1 } })
4982
4987
  ] }),
4983
- /* @__PURE__ */ jsx142(
4988
+ /* @__PURE__ */ jsx143(
4984
4989
  Paper2,
4985
4990
  {
4986
4991
  sx: {
@@ -4990,7 +4995,7 @@ var TraceGraphView = ({
4990
4995
  position: "relative",
4991
4996
  width: "100%"
4992
4997
  },
4993
- children: shouldShowStatusMessage ? /* @__PURE__ */ jsx142(
4998
+ children: shouldShowStatusMessage ? /* @__PURE__ */ jsx143(
4994
4999
  StatusMessage,
4995
5000
  {
4996
5001
  error: statusError,
@@ -4998,14 +5003,14 @@ var TraceGraphView = ({
4998
5003
  status
4999
5004
  }
5000
5005
  ) : /* @__PURE__ */ jsxs133(Fragment8, { children: [
5001
- /* @__PURE__ */ jsx142(Main, { open, children: /* @__PURE__ */ jsx142(
5006
+ /* @__PURE__ */ jsx143(Main, { open, children: /* @__PURE__ */ jsx143(
5002
5007
  Box19,
5003
5008
  {
5004
5009
  sx: {
5005
5010
  height: "100%",
5006
5011
  overflow: "auto"
5007
5012
  },
5008
- children: traceId !== void 0 && /* @__PURE__ */ jsx142(ReactFlowProvider, { children: /* @__PURE__ */ jsx142(
5013
+ children: traceId !== void 0 && /* @__PURE__ */ jsx143(ReactFlowProvider, { children: /* @__PURE__ */ jsx143(
5009
5014
  TraceGraph,
5010
5015
  {
5011
5016
  initialFocusEventId: spanId,
@@ -5023,7 +5028,7 @@ var TraceGraphView = ({
5023
5028
  ) })
5024
5029
  }
5025
5030
  ) }),
5026
- /* @__PURE__ */ jsx142(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ jsx142(EventDetails, { onClose: handleClose, selectedEvent }) })
5031
+ /* @__PURE__ */ jsx143(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ jsx143(EventDetails, { onClose: handleClose, selectedEvent }) })
5027
5032
  ] })
5028
5033
  }
5029
5034
  )
@@ -5096,7 +5101,7 @@ var TraceGraphPage = () => {
5096
5101
  const url = resolveLink({ to: "spans-list" });
5097
5102
  navigate(url);
5098
5103
  }, [navigate, resolveLink]);
5099
- return /* @__PURE__ */ jsx142(
5104
+ return /* @__PURE__ */ jsx143(
5100
5105
  TraceGraphView,
5101
5106
  {
5102
5107
  fetchError,