@localstack/appinspector-ui 1.0.97 → 1.0.99

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
@@ -4851,20 +4851,20 @@ var RowSorting = {
4851
4851
  createColumn: (column, table) => {
4852
4852
  column.getAutoSortingFn = () => {
4853
4853
  const firstRows = table.getFilteredRowModel().flatRows.slice(10);
4854
- let isString2 = false;
4854
+ let isString3 = false;
4855
4855
  for (const row of firstRows) {
4856
4856
  const value = row == null ? void 0 : row.getValue(column.id);
4857
4857
  if (Object.prototype.toString.call(value) === "[object Date]") {
4858
4858
  return sortingFns.datetime;
4859
4859
  }
4860
4860
  if (typeof value === "string") {
4861
- isString2 = true;
4861
+ isString3 = true;
4862
4862
  if (value.split(reSplitAlphaNumeric).length > 1) {
4863
4863
  return sortingFns.alphanumeric;
4864
4864
  }
4865
4865
  }
4866
4866
  }
4867
- if (isString2) {
4867
+ if (isString3) {
4868
4868
  return sortingFns.text;
4869
4869
  }
4870
4870
  return sortingFns.basic;
@@ -15383,7 +15383,7 @@ var StatusMessage = ({
15383
15383
  fontSize: "0.875rem",
15384
15384
  p: 1
15385
15385
  },
15386
- children: "LOCALSTACK_APPINSPECTOR_ENABLE=1 localstack start"
15386
+ children: "LOCALSTACK_APP_INSPECTOR=1 localstack start"
15387
15387
  }
15388
15388
  ),
15389
15389
  /* @__PURE__ */ jsxs123(Box6, { sx: { display: "flex", gap: 1, mt: 2 }, children: [
@@ -15457,10 +15457,74 @@ var StatusMessage = ({
15457
15457
  return /* @__PURE__ */ jsx129(Fragment6, {});
15458
15458
  };
15459
15459
 
15460
+ // src/hooks/status-provider.tsx
15461
+ import { createContext as createContext8, useContext as useContext15, useMemo as useMemo6 } from "react";
15462
+
15463
+ // src/hooks/use-status.tsx
15464
+ import { useCallback as useCallback3, useEffect as useEffect11, useRef as useRef8, useState as useState6 } from "react";
15465
+ var useStatus = () => {
15466
+ const api = useAppInspectorApi();
15467
+ const [checking, setChecking] = useState6(true);
15468
+ const [status, setStatus] = useState6();
15469
+ const [error, setError] = useState6();
15470
+ const hasFetchedReference = useRef8(false);
15471
+ const abortControllerReference = useRef8(null);
15472
+ const checkStatus = useCallback3(async () => {
15473
+ if (abortControllerReference.current !== null) {
15474
+ abortControllerReference.current.abort();
15475
+ }
15476
+ const abortController = new AbortController();
15477
+ abortControllerReference.current = abortController;
15478
+ setChecking(true);
15479
+ try {
15480
+ const response = await api.getStatus();
15481
+ if (!abortController.signal.aborted) {
15482
+ setStatus(response);
15483
+ setError(void 0);
15484
+ }
15485
+ } catch (error_) {
15486
+ if (!abortController.signal.aborted) {
15487
+ setError(error_ instanceof Error ? error_ : new Error("Unknown error"));
15488
+ setStatus(void 0);
15489
+ }
15490
+ } finally {
15491
+ if (!abortController.signal.aborted) {
15492
+ setChecking(false);
15493
+ }
15494
+ }
15495
+ }, [api]);
15496
+ useEffect11(() => {
15497
+ if (!hasFetchedReference.current) {
15498
+ hasFetchedReference.current = true;
15499
+ void checkStatus();
15500
+ }
15501
+ }, [checkStatus]);
15502
+ return { checking, checkStatus, error, status };
15503
+ };
15504
+
15505
+ // src/hooks/status-provider.tsx
15506
+ import { jsx as jsx130 } from "react/jsx-runtime";
15507
+ var AppInspectorStatusContext = createContext8(void 0);
15508
+ var StatusProvider = ({ children }) => {
15509
+ const { checking, checkStatus, error, status } = useStatus();
15510
+ const value = useMemo6(
15511
+ () => ({ checking, checkStatus, status, statusError: error }),
15512
+ [checking, checkStatus, status, error]
15513
+ );
15514
+ return /* @__PURE__ */ jsx130(AppInspectorStatusContext.Provider, { value, children });
15515
+ };
15516
+ var useAppInspectorStatus = () => {
15517
+ const value = useContext15(AppInspectorStatusContext);
15518
+ if (!value) {
15519
+ throw new Error("@localstack-studio/ui: useAppInspectorStatus must be used within a <StatusProvider> (rendered internally by <AppInspectorContextProvider>)");
15520
+ }
15521
+ return value;
15522
+ };
15523
+
15460
15524
  // src/hooks/use-local-storage.tsx
15461
- import { useCallback as useCallback3, useEffect as useEffect11, useState as useState6 } from "react";
15525
+ import { useCallback as useCallback4, useEffect as useEffect12, useState as useState7 } from "react";
15462
15526
  function useLocalStorage(key, initialValue) {
15463
- const [storedValue, setStoredValue] = useState6(() => {
15527
+ const [storedValue, setStoredValue] = useState7(() => {
15464
15528
  try {
15465
15529
  const item = globalThis.localStorage.getItem(key);
15466
15530
  return item ? JSON.parse(item) : initialValue;
@@ -15469,7 +15533,7 @@ function useLocalStorage(key, initialValue) {
15469
15533
  return initialValue;
15470
15534
  }
15471
15535
  });
15472
- const setValue = useCallback3((value) => {
15536
+ const setValue = useCallback4((value) => {
15473
15537
  try {
15474
15538
  setStoredValue((previousState) => {
15475
15539
  const next = typeof value === "function" ? value(previousState) : value;
@@ -15484,7 +15548,7 @@ function useLocalStorage(key, initialValue) {
15484
15548
  console.error(`Error setting localStorage key "${key}":`, error);
15485
15549
  }
15486
15550
  }, [key]);
15487
- useEffect11(() => {
15551
+ useEffect12(() => {
15488
15552
  const handleStorageChange = (event) => {
15489
15553
  if (event.key === key && event.newValue !== null) {
15490
15554
  try {
@@ -15503,49 +15567,7 @@ function useLocalStorage(key, initialValue) {
15503
15567
  }
15504
15568
 
15505
15569
  // src/hooks/use-spans.ts
15506
- import { useCallback as useCallback7, useEffect as useEffect15, useRef as useRef11, useState as useState10 } from "react";
15507
-
15508
- // src/hooks/use-status.tsx
15509
- import { useCallback as useCallback4, useEffect as useEffect12, useRef as useRef8, useState as useState7 } from "react";
15510
- var useStatus = () => {
15511
- const api = useAppInspectorApi();
15512
- const [checking, setChecking] = useState7(true);
15513
- const [status, setStatus] = useState7();
15514
- const [error, setError] = useState7();
15515
- const hasFetchedReference = useRef8(false);
15516
- const abortControllerReference = useRef8(null);
15517
- const checkStatus = useCallback4(async () => {
15518
- if (abortControllerReference.current !== null) {
15519
- abortControllerReference.current.abort();
15520
- }
15521
- const abortController = new AbortController();
15522
- abortControllerReference.current = abortController;
15523
- setChecking(true);
15524
- try {
15525
- const response = await api.getStatus();
15526
- if (!abortController.signal.aborted) {
15527
- setStatus(response);
15528
- setError(void 0);
15529
- }
15530
- } catch (error_) {
15531
- if (!abortController.signal.aborted) {
15532
- setError(error_ instanceof Error ? error_ : new Error("Unknown error"));
15533
- setStatus(void 0);
15534
- }
15535
- } finally {
15536
- if (!abortController.signal.aborted) {
15537
- setChecking(false);
15538
- }
15539
- }
15540
- }, [api]);
15541
- useEffect12(() => {
15542
- if (!hasFetchedReference.current) {
15543
- hasFetchedReference.current = true;
15544
- void checkStatus();
15545
- }
15546
- }, [checkStatus]);
15547
- return { checking, checkStatus, error, status };
15548
- };
15570
+ import { useCallback as useCallback7, useEffect as useEffect16, useRef as useRef12, useState as useState10 } from "react";
15549
15571
 
15550
15572
  // src/utils/pagination-buffer.ts
15551
15573
  var insertSorted = (array, item, compareFunction, hint = "back") => {
@@ -15726,12 +15748,13 @@ var createPaginationBuffer = (options) => {
15726
15748
  };
15727
15749
 
15728
15750
  // src/hooks/use-spans-ws.tsx
15729
- import { useCallback as useCallback6, useEffect as useEffect13, useRef as useRef9, useState as useState8 } from "react";
15751
+ import { useCallback as useCallback6, useEffect as useEffect14, useRef as useRef10, useState as useState8 } from "react";
15730
15752
 
15731
15753
  // src/config.ts
15732
15754
  var APPINSPECTOR_API_PREFIX = "/_localstack/appinspector";
15733
15755
  var API_VERSION = "v1";
15734
15756
  var API_ENDPOINTS = {
15757
+ ANALYTICS: "/analytics",
15735
15758
  EVENTS: "/traces/*/spans/*/events",
15736
15759
  ROOT: "/",
15737
15760
  SPANS: "/traces/*/spans",
@@ -15754,8 +15777,8 @@ var getAppInspectorApiUrl = (localstackEndpoint, endpoint) => {
15754
15777
  var LOCALSTACK_INFO_PATH = "/_localstack/info";
15755
15778
 
15756
15779
  // src/context.tsx
15757
- import { createContext as createContext8, useContext as useContext15 } from "react";
15758
- import { useCallback as useCallback5, useMemo as useMemo6 } from "react";
15780
+ import { createContext as createContext9, useContext as useContext16 } from "react";
15781
+ import { useCallback as useCallback5, useMemo as useMemo7 } from "react";
15759
15782
 
15760
15783
  // src/api/client.ts
15761
15784
  var import_semver2 = __toESM(require_semver2(), 1);
@@ -15826,6 +15849,7 @@ var createScopedLogger = (scope) => ({
15826
15849
 
15827
15850
  // src/api/client.ts
15828
15851
  var apiLogger = createScopedLogger("API");
15852
+ var analyticsLogger = createScopedLogger("ANALYTICS");
15829
15853
  var makeRequest = async (options) => {
15830
15854
  const url = getAppInspectorApiUrl(options.localstackEndpoint, options.endpoint);
15831
15855
  try {
@@ -15973,6 +15997,20 @@ var createApiClient = ({ localstackEndpoint }) => {
15973
15997
  const localstackVersion = headerVersion && import_semver2.default.coerce(headerVersion) ? headerVersion : infoVersion.status === "fulfilled" ? infoVersion.value : void 0;
15974
15998
  return { ...statusResult.value, localstackVersion };
15975
15999
  },
16000
+ postAnalytics: async (request) => {
16001
+ try {
16002
+ await makeRequest({
16003
+ endpoint: API_ENDPOINTS.ANALYTICS,
16004
+ localstackEndpoint,
16005
+ request: {
16006
+ body: JSON.stringify(request),
16007
+ method: "POST"
16008
+ }
16009
+ });
16010
+ } catch (error) {
16011
+ analyticsLogger.warn("Failed to post analytics event:", { error, event: request.event });
16012
+ }
16013
+ },
15976
16014
  setStatus: async (request) => {
15977
16015
  return makeRequest({
15978
16016
  endpoint: API_ENDPOINTS.STATUS,
@@ -15986,18 +16024,1925 @@ var createApiClient = ({ localstackEndpoint }) => {
15986
16024
  };
15987
16025
  };
15988
16026
 
16027
+ // src/hooks/use-appinspector-open-analytics.ts
16028
+ import { useEffect as useEffect13, useRef as useRef9 } from "react";
16029
+
16030
+ // node_modules/ua-parser-js/src/main/ua-parser.mjs
16031
+ var LIBVERSION = "2.0.9";
16032
+ var UA_MAX_LENGTH = 500;
16033
+ var USER_AGENT = "user-agent";
16034
+ var EMPTY = "";
16035
+ var UNKNOWN = "?";
16036
+ var TYPEOF = {
16037
+ FUNCTION: "function",
16038
+ OBJECT: "object",
16039
+ STRING: "string",
16040
+ UNDEFINED: "undefined"
16041
+ };
16042
+ var BROWSER = "browser";
16043
+ var CPU = "cpu";
16044
+ var DEVICE = "device";
16045
+ var ENGINE = "engine";
16046
+ var OS = "os";
16047
+ var RESULT = "result";
16048
+ var NAME = "name";
16049
+ var TYPE = "type";
16050
+ var VENDOR = "vendor";
16051
+ var VERSION = "version";
16052
+ var ARCHITECTURE = "architecture";
16053
+ var MAJOR = "major";
16054
+ var MODEL = "model";
16055
+ var CONSOLE = "console";
16056
+ var MOBILE = "mobile";
16057
+ var TABLET = "tablet";
16058
+ var SMARTTV = "smarttv";
16059
+ var WEARABLE = "wearable";
16060
+ var XR = "xr";
16061
+ var EMBEDDED = "embedded";
16062
+ var FETCHER = "fetcher";
16063
+ var INAPP = "inapp";
16064
+ var BRANDS = "brands";
16065
+ var FORMFACTORS = "formFactors";
16066
+ var FULLVERLIST = "fullVersionList";
16067
+ var PLATFORM = "platform";
16068
+ var PLATFORMVER = "platformVersion";
16069
+ var BITNESS = "bitness";
16070
+ var CH = "sec-ch-ua";
16071
+ var CH_FULL_VER_LIST = CH + "-full-version-list";
16072
+ var CH_ARCH = CH + "-arch";
16073
+ var CH_BITNESS = CH + "-" + BITNESS;
16074
+ var CH_FORM_FACTORS = CH + "-form-factors";
16075
+ var CH_MOBILE = CH + "-" + MOBILE;
16076
+ var CH_MODEL = CH + "-" + MODEL;
16077
+ var CH_PLATFORM = CH + "-" + PLATFORM;
16078
+ var CH_PLATFORM_VER = CH_PLATFORM + "-version";
16079
+ var CH_ALL_VALUES = [BRANDS, FULLVERLIST, MOBILE, MODEL, PLATFORM, PLATFORMVER, ARCHITECTURE, FORMFACTORS, BITNESS];
16080
+ var AMAZON = "Amazon";
16081
+ var APPLE = "Apple";
16082
+ var ASUS = "ASUS";
16083
+ var BLACKBERRY = "BlackBerry";
16084
+ var GOOGLE = "Google";
16085
+ var HUAWEI = "Huawei";
16086
+ var LENOVO = "Lenovo";
16087
+ var HONOR = "Honor";
16088
+ var LG = "LG";
16089
+ var MICROSOFT = "Microsoft";
16090
+ var MOTOROLA = "Motorola";
16091
+ var NVIDIA = "Nvidia";
16092
+ var ONEPLUS = "OnePlus";
16093
+ var OPPO = "OPPO";
16094
+ var SAMSUNG = "Samsung";
16095
+ var SHARP = "Sharp";
16096
+ var SONY = "Sony";
16097
+ var XIAOMI = "Xiaomi";
16098
+ var ZEBRA = "Zebra";
16099
+ var CHROME = "Chrome";
16100
+ var CHROMIUM = "Chromium";
16101
+ var CHROMECAST = "Chromecast";
16102
+ var EDGE = "Edge";
16103
+ var FIREFOX = "Firefox";
16104
+ var OPERA = "Opera";
16105
+ var FACEBOOK = "Facebook";
16106
+ var SOGOU = "Sogou";
16107
+ var PREFIX_MOBILE = "Mobile ";
16108
+ var SUFFIX_BROWSER = " Browser";
16109
+ var WINDOWS = "Windows";
16110
+ var isWindow = typeof window !== TYPEOF.UNDEFINED;
16111
+ var NAVIGATOR = isWindow && window.navigator ? window.navigator : void 0;
16112
+ var NAVIGATOR_UADATA = NAVIGATOR && NAVIGATOR.userAgentData ? NAVIGATOR.userAgentData : void 0;
16113
+ var extend = function(defaultRgx, extensions) {
16114
+ var mergedRgx = {};
16115
+ var extraRgx = extensions;
16116
+ if (!isExtensions(extensions)) {
16117
+ extraRgx = {};
16118
+ for (var i2 in extensions) {
16119
+ for (var j2 in extensions[i2]) {
16120
+ extraRgx[j2] = extensions[i2][j2].concat(extraRgx[j2] ? extraRgx[j2] : []);
16121
+ }
16122
+ }
16123
+ }
16124
+ for (var k2 in defaultRgx) {
16125
+ mergedRgx[k2] = extraRgx[k2] && extraRgx[k2].length % 2 === 0 ? extraRgx[k2].concat(defaultRgx[k2]) : defaultRgx[k2];
16126
+ }
16127
+ return mergedRgx;
16128
+ };
16129
+ var enumerize = function(arr) {
16130
+ var enums = {};
16131
+ for (var i2 = 0; i2 < arr.length; i2++) {
16132
+ enums[arr[i2].toUpperCase()] = arr[i2];
16133
+ }
16134
+ return enums;
16135
+ };
16136
+ var has = function(str1, str2) {
16137
+ if (typeof str1 === TYPEOF.OBJECT && str1.length > 0) {
16138
+ for (var i2 in str1) {
16139
+ if (lowerize(str2) == lowerize(str1[i2])) return true;
16140
+ }
16141
+ return false;
16142
+ }
16143
+ return isString2(str1) ? lowerize(str2) == lowerize(str1) : false;
16144
+ };
16145
+ var isExtensions = function(obj, deep) {
16146
+ for (var prop in obj) {
16147
+ return /^(browser|cpu|device|engine|os)$/.test(prop) || (deep ? isExtensions(obj[prop]) : false);
16148
+ }
16149
+ };
16150
+ var isString2 = function(val) {
16151
+ return typeof val === TYPEOF.STRING;
16152
+ };
16153
+ var itemListToArray = function(header) {
16154
+ if (!header) return void 0;
16155
+ var arr = [];
16156
+ var tokens = strip(/\\?\"/g, header).split(",");
16157
+ for (var i2 = 0; i2 < tokens.length; i2++) {
16158
+ if (tokens[i2].indexOf(";") > -1) {
16159
+ var token = trim(tokens[i2]).split(";v=");
16160
+ arr[i2] = { brand: token[0], version: token[1] };
16161
+ } else {
16162
+ arr[i2] = trim(tokens[i2]);
16163
+ }
16164
+ }
16165
+ return arr;
16166
+ };
16167
+ var lowerize = function(str) {
16168
+ return isString2(str) ? str.toLowerCase() : str;
16169
+ };
16170
+ var majorize = function(version) {
16171
+ return isString2(version) ? strip(/[^\d\.]/g, version).split(".")[0] : void 0;
16172
+ };
16173
+ var setProps = function(arr) {
16174
+ for (var i2 in arr) {
16175
+ if (!arr.hasOwnProperty(i2)) continue;
16176
+ var propName = arr[i2];
16177
+ if (typeof propName == TYPEOF.OBJECT && propName.length == 2) {
16178
+ this[propName[0]] = propName[1];
16179
+ } else {
16180
+ this[propName] = void 0;
16181
+ }
16182
+ }
16183
+ return this;
16184
+ };
16185
+ var strip = function(pattern, str) {
16186
+ return isString2(str) ? str.replace(pattern, EMPTY) : str;
16187
+ };
16188
+ var stripQuotes = function(str) {
16189
+ return strip(/\\?\"/g, str);
16190
+ };
16191
+ var trim = function(str, len) {
16192
+ str = strip(/^\s\s*/, String(str));
16193
+ return typeof len === TYPEOF.UNDEFINED ? str : str.substring(0, len);
16194
+ };
16195
+ var rgxMapper = function(ua, arrays) {
16196
+ if (!ua || !arrays) return;
16197
+ var i2 = 0, j2, k2, p2, q2, matches, match;
16198
+ while (i2 < arrays.length && !matches) {
16199
+ var regex = arrays[i2], props = arrays[i2 + 1];
16200
+ j2 = k2 = 0;
16201
+ while (j2 < regex.length && !matches) {
16202
+ if (!regex[j2]) {
16203
+ break;
16204
+ }
16205
+ matches = regex[j2++].exec(ua);
16206
+ if (!!matches) {
16207
+ for (p2 = 0; p2 < props.length; p2++) {
16208
+ match = matches[++k2];
16209
+ q2 = props[p2];
16210
+ if (typeof q2 === TYPEOF.OBJECT && q2.length > 0) {
16211
+ if (q2.length === 2) {
16212
+ if (typeof q2[1] == TYPEOF.FUNCTION) {
16213
+ this[q2[0]] = q2[1].call(this, match);
16214
+ } else {
16215
+ this[q2[0]] = q2[1];
16216
+ }
16217
+ } else if (q2.length >= 3) {
16218
+ if (typeof q2[1] === TYPEOF.FUNCTION && !(q2[1].exec && q2[1].test)) {
16219
+ if (q2.length > 3) {
16220
+ this[q2[0]] = match ? q2[1].apply(this, q2.slice(2)) : void 0;
16221
+ } else {
16222
+ this[q2[0]] = match ? q2[1].call(this, match, q2[2]) : void 0;
16223
+ }
16224
+ } else {
16225
+ if (q2.length == 3) {
16226
+ this[q2[0]] = match ? match.replace(q2[1], q2[2]) : void 0;
16227
+ } else if (q2.length == 4) {
16228
+ this[q2[0]] = match ? q2[3].call(this, match.replace(q2[1], q2[2])) : void 0;
16229
+ } else if (q2.length > 4) {
16230
+ this[q2[0]] = match ? q2[3].apply(this, [match.replace(q2[1], q2[2])].concat(q2.slice(4))) : void 0;
16231
+ }
16232
+ }
16233
+ }
16234
+ } else {
16235
+ this[q2] = match ? match : void 0;
16236
+ }
16237
+ }
16238
+ }
16239
+ }
16240
+ i2 += 2;
16241
+ }
16242
+ };
16243
+ var strMapper = function(str, map) {
16244
+ for (var i2 in map) {
16245
+ if (typeof map[i2] === TYPEOF.OBJECT && map[i2].length > 0) {
16246
+ for (var j2 = 0; j2 < map[i2].length; j2++) {
16247
+ if (has(map[i2][j2], str)) {
16248
+ return i2 === UNKNOWN ? void 0 : i2;
16249
+ }
16250
+ }
16251
+ } else if (has(map[i2], str)) {
16252
+ return i2 === UNKNOWN ? void 0 : i2;
16253
+ }
16254
+ }
16255
+ return map.hasOwnProperty("*") ? map["*"] : str;
16256
+ };
16257
+ var windowsVersionMap = {
16258
+ "ME": "4.90",
16259
+ "NT 3.51": "3.51",
16260
+ "NT 4.0": "4.0",
16261
+ "2000": ["5.0", "5.01"],
16262
+ "XP": ["5.1", "5.2"],
16263
+ "Vista": "6.0",
16264
+ "7": "6.1",
16265
+ "8": "6.2",
16266
+ "8.1": "6.3",
16267
+ "10": ["6.4", "10.0"],
16268
+ "NT": ""
16269
+ };
16270
+ var formFactorsMap = {
16271
+ "embedded": "Automotive",
16272
+ "mobile": "Mobile",
16273
+ "tablet": ["Tablet", "EInk"],
16274
+ "smarttv": "TV",
16275
+ "wearable": "Watch",
16276
+ "xr": ["VR", "XR"],
16277
+ "?": ["Desktop", "Unknown"],
16278
+ "*": void 0
16279
+ };
16280
+ var browserHintsMap = {
16281
+ "Chrome": "Google Chrome",
16282
+ "Edge": "Microsoft Edge",
16283
+ "Edge WebView2": "Microsoft Edge WebView2",
16284
+ "Chrome WebView": "Android WebView",
16285
+ "Chrome Headless": "HeadlessChrome",
16286
+ "Huawei Browser": "HuaweiBrowser",
16287
+ "MIUI Browser": "Miui Browser",
16288
+ "Opera Mobi": "OperaMobile",
16289
+ "Yandex": "YaBrowser"
16290
+ };
16291
+ var defaultRegexes = {
16292
+ browser: [
16293
+ [
16294
+ // Most common regardless engine
16295
+ /\b(?:crmo|crios)\/([\w\.]+)/i
16296
+ // Chrome for Android/iOS
16297
+ ],
16298
+ [VERSION, [NAME, PREFIX_MOBILE + "Chrome"]],
16299
+ [
16300
+ /webview.+edge\/([\w\.]+)/i
16301
+ // Microsoft Edge
16302
+ ],
16303
+ [VERSION, [NAME, EDGE + " WebView"]],
16304
+ [
16305
+ /edg(?:e|ios|a)?\/([\w\.]+)/i
16306
+ ],
16307
+ [VERSION, [NAME, "Edge"]],
16308
+ [
16309
+ // Presto based
16310
+ /(opera mini)\/([-\w\.]+)/i,
16311
+ // Opera Mini
16312
+ /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
16313
+ // Opera Mobi/Tablet
16314
+ /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
16315
+ // Opera
16316
+ ],
16317
+ [NAME, VERSION],
16318
+ [
16319
+ /opios[\/ ]+([\w\.]+)/i
16320
+ // Opera mini on iphone >= 8.0
16321
+ ],
16322
+ [VERSION, [NAME, OPERA + " Mini"]],
16323
+ [
16324
+ /\bop(?:rg)?x\/([\w\.]+)/i
16325
+ // Opera GX
16326
+ ],
16327
+ [VERSION, [NAME, OPERA + " GX"]],
16328
+ [
16329
+ /\bopr\/([\w\.]+)/i
16330
+ // Opera Webkit
16331
+ ],
16332
+ [VERSION, [NAME, OPERA]],
16333
+ [
16334
+ // Mixed
16335
+ /\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i
16336
+ // Baidu
16337
+ ],
16338
+ [VERSION, [NAME, "Baidu"]],
16339
+ [
16340
+ /\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i
16341
+ // Maxthon
16342
+ ],
16343
+ [VERSION, [NAME, "Maxthon"]],
16344
+ [
16345
+ /(kindle)\/([\w\.]+)/i,
16346
+ // Kindle
16347
+ /(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,
16348
+ // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Sleipnir
16349
+ // Trident based
16350
+ /(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,
16351
+ // Avant/IEMobile/SlimBrowser/SlimBoat/Slimjet
16352
+ /(?:ms|\()(ie) ([\w\.]+)/i,
16353
+ // Internet Explorer
16354
+ // Blink/Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon/LG Browser/Otter/qutebrowser/Dooble/Palemoon/HiBrowser
16355
+ /(atlas|flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:hi|lg |ovi|qute)browser|palemoon)\/v?([-\w\.]+)/i,
16356
+ // Atlas/Rekonq/Puffin/Whale/QQBrowserLite/QQ//Vivaldi/DuckDuckGo/Klar/Helio/Dragon
16357
+ /(brave)(?: chrome)?\/([\d\.]+)/i,
16358
+ // Brave
16359
+ /(aloha|heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,
16360
+ // Aloha/HeyTap/Ovi/115/Surf
16361
+ /(qwant)(?:ios|mobile)\/([\d\.]+)/i,
16362
+ // Qwant
16363
+ /(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i
16364
+ // Ecosia/Weibo
16365
+ ],
16366
+ [NAME, VERSION],
16367
+ [
16368
+ /quark(?:pc)?\/([-\w\.]+)/i
16369
+ // Quark
16370
+ ],
16371
+ [VERSION, [NAME, "Quark"]],
16372
+ [
16373
+ /\bddg\/([\w\.]+)/i
16374
+ // DuckDuckGo
16375
+ ],
16376
+ [VERSION, [NAME, "DuckDuckGo"]],
16377
+ [
16378
+ /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
16379
+ // UCBrowser
16380
+ ],
16381
+ [VERSION, [NAME, "UCBrowser"]],
16382
+ [
16383
+ /microm.+\bqbcore\/([\w\.]+)/i,
16384
+ // WeChat Desktop for Windows Built-in Browser
16385
+ /\bqbcore\/([\w\.]+).+microm/i,
16386
+ /micromessenger\/([\w\.]+)/i
16387
+ // WeChat
16388
+ ],
16389
+ [VERSION, [NAME, "WeChat"]],
16390
+ [
16391
+ /konqueror\/([\w\.]+)/i
16392
+ // Konqueror
16393
+ ],
16394
+ [VERSION, [NAME, "Konqueror"]],
16395
+ [
16396
+ /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
16397
+ // IE11
16398
+ ],
16399
+ [VERSION, [NAME, "IE"]],
16400
+ [
16401
+ /ya(?:search)?browser\/([\w\.]+)/i
16402
+ // Yandex
16403
+ ],
16404
+ [VERSION, [NAME, "Yandex"]],
16405
+ [
16406
+ /slbrowser\/([\w\.]+)/i
16407
+ // Smart Lenovo Browser
16408
+ ],
16409
+ [VERSION, [NAME, "Smart " + LENOVO + SUFFIX_BROWSER]],
16410
+ [
16411
+ /(av(?:ast|g|ira))\/([\w\.]+)/i
16412
+ // Avast/AVG/Avira Secure Browser
16413
+ ],
16414
+ [[NAME, /(.+)/, "$1 Secure" + SUFFIX_BROWSER], VERSION],
16415
+ [
16416
+ /norton\/([\w\.]+)/i
16417
+ // Norton Private Browser
16418
+ ],
16419
+ [VERSION, [NAME, "Norton Private" + SUFFIX_BROWSER]],
16420
+ [
16421
+ /\bfocus\/([\w\.]+)/i
16422
+ // Firefox Focus
16423
+ ],
16424
+ [VERSION, [NAME, FIREFOX + " Focus"]],
16425
+ [
16426
+ / mms\/([\w\.]+)$/i
16427
+ // Opera Neon
16428
+ ],
16429
+ [VERSION, [NAME, OPERA + " Neon"]],
16430
+ [
16431
+ / opt\/([\w\.]+)$/i
16432
+ // Opera Touch
16433
+ ],
16434
+ [VERSION, [NAME, OPERA + " Touch"]],
16435
+ [
16436
+ /coc_coc\w+\/([\w\.]+)/i
16437
+ // Coc Coc Browser
16438
+ ],
16439
+ [VERSION, [NAME, "Coc Coc"]],
16440
+ [
16441
+ /dolfin\/([\w\.]+)/i
16442
+ // Dolphin
16443
+ ],
16444
+ [VERSION, [NAME, "Dolphin"]],
16445
+ [
16446
+ /coast\/([\w\.]+)/i
16447
+ // Opera Coast
16448
+ ],
16449
+ [VERSION, [NAME, OPERA + " Coast"]],
16450
+ [
16451
+ /miuibrowser\/([\w\.]+)/i
16452
+ // MIUI Browser
16453
+ ],
16454
+ [VERSION, [NAME, "MIUI" + SUFFIX_BROWSER]],
16455
+ [
16456
+ /fxios\/([\w\.-]+)/i
16457
+ // Firefox for iOS
16458
+ ],
16459
+ [VERSION, [NAME, PREFIX_MOBILE + FIREFOX]],
16460
+ [
16461
+ /\bqihoobrowser\/?([\w\.]*)/i
16462
+ // 360
16463
+ ],
16464
+ [VERSION, [NAME, "360"]],
16465
+ [
16466
+ /\b(qq)\/([\w\.]+)/i
16467
+ // QQ
16468
+ ],
16469
+ [[NAME, /(.+)/, "$1Browser"], VERSION],
16470
+ [
16471
+ /(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i
16472
+ ],
16473
+ [[NAME, /(.+)/, "$1" + SUFFIX_BROWSER], VERSION],
16474
+ [
16475
+ // Oculus/Sailfish/HuaweiBrowser/VivoBrowser/PicoBrowser
16476
+ /samsungbrowser\/([\w\.]+)/i
16477
+ // Samsung Internet
16478
+ ],
16479
+ [VERSION, [NAME, SAMSUNG + " Internet"]],
16480
+ [
16481
+ /metasr[\/ ]?([\d\.]+)/i
16482
+ // Sogou Explorer
16483
+ ],
16484
+ [VERSION, [NAME, SOGOU + " Explorer"]],
16485
+ [
16486
+ /(sogou)mo\w+\/([\d\.]+)/i
16487
+ // Sogou Mobile
16488
+ ],
16489
+ [[NAME, SOGOU + " Mobile"], VERSION],
16490
+ [
16491
+ /(electron)\/([\w\.]+) safari/i,
16492
+ // Electron-based App
16493
+ /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
16494
+ // Tesla
16495
+ /m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i
16496
+ // QQ/2345
16497
+ ],
16498
+ [NAME, VERSION],
16499
+ [
16500
+ /(lbbrowser|luakit|rekonq|steam(?= (clie|tenf|gameo)))/i
16501
+ // LieBao Browser/Luakit/Rekonq/Steam
16502
+ ],
16503
+ [NAME],
16504
+ [
16505
+ /ome\/([\w\.]+).+(iron(?= saf)|360(?=[es]e$))/i
16506
+ // Iron / 360
16507
+ ],
16508
+ [VERSION, NAME],
16509
+ [
16510
+ // WebView
16511
+ /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
16512
+ // Facebook App for iOS & Android
16513
+ ],
16514
+ [[NAME, FACEBOOK], VERSION, [TYPE, INAPP]],
16515
+ [
16516
+ /(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
16517
+ // Kakao App
16518
+ /(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
16519
+ // Naver InApp
16520
+ /(daum)apps[\/ ]([\w\.]+)/i,
16521
+ // Daum App
16522
+ /safari (line)\/([\w\.]+)/i,
16523
+ // Line App for iOS
16524
+ /\b(line)\/([\w\.]+)\/iab/i,
16525
+ // Line App for Android
16526
+ /(alipay)client\/([\w\.]+)/i,
16527
+ // Alipay
16528
+ /(twitter)(?:and| f.+e\/([\w\.]+))/i,
16529
+ // Twitter
16530
+ /(bing)(?:web|sapphire)\/([\w\.]+)/i,
16531
+ // Bing
16532
+ /(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i
16533
+ // Instagram/Snapchat/Klarna
16534
+ ],
16535
+ [NAME, VERSION, [TYPE, INAPP]],
16536
+ [
16537
+ /\bgsa\/([\w\.]+) .*safari\//i
16538
+ // Google Search Appliance on iOS
16539
+ ],
16540
+ [VERSION, [NAME, "GSA"], [TYPE, INAPP]],
16541
+ [
16542
+ /(?:musical_ly|trill)(?:.+app_?version\/|_)([\w\.]+)/i
16543
+ // TikTok
16544
+ ],
16545
+ [VERSION, [NAME, "TikTok"], [TYPE, INAPP]],
16546
+ [
16547
+ /\[(linkedin)app\]/i
16548
+ // LinkedIn App for iOS & Android
16549
+ ],
16550
+ [NAME, [TYPE, INAPP]],
16551
+ [
16552
+ /(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i
16553
+ // Zalo
16554
+ ],
16555
+ [[NAME, /(.+)/, "Zalo"], VERSION, [TYPE, INAPP]],
16556
+ [
16557
+ /(chromium)[\/ ]([-\w\.]+)/i
16558
+ // Chromium
16559
+ ],
16560
+ [NAME, VERSION],
16561
+ [
16562
+ /ome-(lighthouse)$/i
16563
+ // Chrome Lighthouse
16564
+ ],
16565
+ [NAME, [TYPE, FETCHER]],
16566
+ [
16567
+ /headlesschrome(?:\/([\w\.]+)| )/i
16568
+ // Chrome Headless
16569
+ ],
16570
+ [VERSION, [NAME, CHROME + " Headless"]],
16571
+ [
16572
+ /wv\).+chrome\/([\w\.]+).+edgw\//i
16573
+ // Edge WebView2
16574
+ ],
16575
+ [VERSION, [NAME, EDGE + " WebView2"]],
16576
+ [
16577
+ / wv\).+(chrome)\/([\w\.]+)/i
16578
+ // Chrome WebView
16579
+ ],
16580
+ [[NAME, CHROME + " WebView"], VERSION],
16581
+ [
16582
+ /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
16583
+ // Android Browser
16584
+ ],
16585
+ [VERSION, [NAME, "Android" + SUFFIX_BROWSER]],
16586
+ [
16587
+ /chrome\/([\w\.]+) mobile/i
16588
+ // Chrome Mobile
16589
+ ],
16590
+ [VERSION, [NAME, PREFIX_MOBILE + "Chrome"]],
16591
+ [
16592
+ /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
16593
+ // Chrome/OmniWeb/Arora/Tizen/Nokia
16594
+ ],
16595
+ [NAME, VERSION],
16596
+ [
16597
+ /version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i
16598
+ // Safari Mobile
16599
+ ],
16600
+ [VERSION, [NAME, PREFIX_MOBILE + "Safari"]],
16601
+ [
16602
+ /iphone .*mobile(?:\/\w+ | ?)safari/i
16603
+ ],
16604
+ [[NAME, PREFIX_MOBILE + "Safari"]],
16605
+ [
16606
+ /version\/([\w\.\,]+) .*(safari)/i
16607
+ // Safari
16608
+ ],
16609
+ [VERSION, NAME],
16610
+ [
16611
+ /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
16612
+ // Safari < 3.0
16613
+ ],
16614
+ [NAME, [VERSION, "1"]],
16615
+ [
16616
+ /(webkit|khtml)\/([\w\.]+)/i
16617
+ ],
16618
+ [NAME, VERSION],
16619
+ [
16620
+ // Gecko based
16621
+ /(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i
16622
+ // Firefox Mobile
16623
+ ],
16624
+ [[NAME, PREFIX_MOBILE + FIREFOX], VERSION],
16625
+ [
16626
+ /(navigator|netscape\d?)\/([-\w\.]+)/i
16627
+ // Netscape
16628
+ ],
16629
+ [[NAME, "Netscape"], VERSION],
16630
+ [
16631
+ /(wolvic|librewolf)\/([\w\.]+)/i
16632
+ // Wolvic/LibreWolf
16633
+ ],
16634
+ [NAME, VERSION],
16635
+ [
16636
+ /mobile vr; rv:([\w\.]+)\).+firefox/i
16637
+ // Firefox Reality
16638
+ ],
16639
+ [VERSION, [NAME, FIREFOX + " Reality"]],
16640
+ [
16641
+ /ekiohf.+(flow)\/([\w\.]+)/i,
16642
+ // Flow
16643
+ /(swiftfox)/i,
16644
+ // Swiftfox
16645
+ /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,
16646
+ // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
16647
+ /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,
16648
+ // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
16649
+ /(firefox)\/([\w\.]+)/i,
16650
+ // Other Firefox-based
16651
+ /(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i,
16652
+ // Mozilla
16653
+ // Other
16654
+ /(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
16655
+ // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Obigo/Mosaic/Go/ICE/UP.Browser/Ladybird
16656
+ /\b(links) \(([\w\.]+)/i
16657
+ // Links
16658
+ ],
16659
+ [NAME, [VERSION, /_/g, "."]],
16660
+ [
16661
+ /(cobalt)\/([\w\.]+)/i
16662
+ // Cobalt
16663
+ ],
16664
+ [NAME, [VERSION, /[^\d\.]+./, EMPTY]]
16665
+ ],
16666
+ cpu: [
16667
+ [
16668
+ /\b((amd|x|x86[-_]?|wow|win)64)\b/i
16669
+ // AMD64 (x64)
16670
+ ],
16671
+ [[ARCHITECTURE, "amd64"]],
16672
+ [
16673
+ /(ia32(?=;))/i,
16674
+ // IA32 (quicktime)
16675
+ /\b((i[346]|x)86)(pc)?\b/i
16676
+ // IA32 (x86)
16677
+ ],
16678
+ [[ARCHITECTURE, "ia32"]],
16679
+ [
16680
+ /\b(aarch64|arm(v?[89]e?l?|_?64))\b/i
16681
+ // ARM64
16682
+ ],
16683
+ [[ARCHITECTURE, "arm64"]],
16684
+ [
16685
+ /\b(arm(v[67])?ht?n?[fl]p?)\b/i
16686
+ // ARMHF
16687
+ ],
16688
+ [[ARCHITECTURE, "armhf"]],
16689
+ [
16690
+ // PocketPC mistakenly identified as PowerPC
16691
+ /( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i
16692
+ ],
16693
+ [[ARCHITECTURE, "arm"]],
16694
+ [
16695
+ / sun4\w[;\)]/i
16696
+ // SPARC
16697
+ ],
16698
+ [[ARCHITECTURE, "sparc"]],
16699
+ [
16700
+ // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC
16701
+ /\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,
16702
+ /((ppc|powerpc)(64)?)( mac|;|\))/i,
16703
+ // PowerPC
16704
+ /(?:osf1|[freopnt]{3,4}bsd) (alpha)/i
16705
+ // Alpha
16706
+ ],
16707
+ [[ARCHITECTURE, /ower/, EMPTY, lowerize]],
16708
+ [
16709
+ /mc680.0/i
16710
+ ],
16711
+ [[ARCHITECTURE, "68k"]],
16712
+ [
16713
+ /winnt.+\[axp/i
16714
+ ],
16715
+ [[ARCHITECTURE, "alpha"]]
16716
+ ],
16717
+ device: [
16718
+ [
16719
+ //////////////////////////
16720
+ // MOBILES & TABLETS
16721
+ /////////////////////////
16722
+ // Samsung
16723
+ /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
16724
+ ],
16725
+ [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]],
16726
+ [
16727
+ /\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
16728
+ /samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,
16729
+ /sec-(sgh\w+)/i
16730
+ ],
16731
+ [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]],
16732
+ [
16733
+ // Apple
16734
+ /(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i
16735
+ // iPod/iPhone
16736
+ ],
16737
+ [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]],
16738
+ [
16739
+ /\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i,
16740
+ // iPad
16741
+ /\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i
16742
+ ],
16743
+ [MODEL, [VENDOR, APPLE], [TYPE, TABLET]],
16744
+ [
16745
+ /(macintosh);/i
16746
+ ],
16747
+ [MODEL, [VENDOR, APPLE]],
16748
+ [
16749
+ // Sharp
16750
+ /\b(sh-?[altvz]?\d\d[a-ekm]?)/i
16751
+ ],
16752
+ [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]],
16753
+ [
16754
+ // Honor
16755
+ /\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i
16756
+ ],
16757
+ [MODEL, [VENDOR, HONOR], [TYPE, TABLET]],
16758
+ [
16759
+ /honor([-\w ]+)[;\)]/i
16760
+ ],
16761
+ [MODEL, [VENDOR, HONOR], [TYPE, MOBILE]],
16762
+ [
16763
+ // Huawei
16764
+ /\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i
16765
+ ],
16766
+ [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]],
16767
+ [
16768
+ /(?:huawei) ?([-\w ]+)[;\)]/i,
16769
+ /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i
16770
+ ],
16771
+ [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]],
16772
+ [
16773
+ // Xiaomi
16774
+ /oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,
16775
+ /\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i
16776
+ // Mi Pad tablets
16777
+ ],
16778
+ [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]],
16779
+ [
16780
+ /\b; (\w+) build\/hm\1/i,
16781
+ // Xiaomi Hongmi 'numeric' models
16782
+ /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
16783
+ // Xiaomi Hongmi
16784
+ // Xiaomi Redmi / POCO / Black Shark / Qin
16785
+ /oid[^\)]+; (redmi[\-_ ]?(?:note|k)?[\w_ ]+|m?[12]\d[01]\d\w{3,6}|poco[\w ]+|(shark )?\w{3}-[ah]0|qin ?[1-3](s\+|ultra| pro)?)( bui|; wv|\))/i,
16786
+ // Xiaomi Mi
16787
+ /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,
16788
+ / ([\w ]+) miui\/v?\d/i
16789
+ ],
16790
+ [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]],
16791
+ [
16792
+ // OnePlus
16793
+ /droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-l]\w[1m]10)\b/i,
16794
+ /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
16795
+ ],
16796
+ [MODEL, [VENDOR, ONEPLUS], [TYPE, MOBILE]],
16797
+ [
16798
+ // OPPO
16799
+ /; (\w+) bui.+ oppo/i,
16800
+ /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
16801
+ ],
16802
+ [MODEL, [VENDOR, OPPO], [TYPE, MOBILE]],
16803
+ [
16804
+ /\b(opd2(\d{3}a?))(?: bui|\))/i
16805
+ ],
16806
+ [MODEL, [VENDOR, strMapper, { "OnePlus": ["203", "304", "403", "404", "413", "415"], "*": OPPO }], [TYPE, TABLET]],
16807
+ [
16808
+ // BLU
16809
+ /(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i
16810
+ // Vivo series
16811
+ ],
16812
+ [MODEL, [VENDOR, "BLU"], [TYPE, MOBILE]],
16813
+ [
16814
+ // Vivo
16815
+ /; vivo (\w+)(?: bui|\))/i,
16816
+ /\b(v[12]\d{3}\w?[at])(?: bui|;)/i
16817
+ ],
16818
+ [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]],
16819
+ [
16820
+ // Realme
16821
+ /\b(rmx[1-3]\d{3})(?: bui|;|\))/i
16822
+ ],
16823
+ [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]],
16824
+ [
16825
+ // Lenovo
16826
+ /(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,
16827
+ /lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i
16828
+ ],
16829
+ [MODEL, [VENDOR, LENOVO], [TYPE, TABLET]],
16830
+ [
16831
+ /lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i
16832
+ ],
16833
+ [MODEL, [VENDOR, LENOVO], [TYPE, MOBILE]],
16834
+ [
16835
+ // Motorola
16836
+ /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
16837
+ /\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,
16838
+ /((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i
16839
+ ],
16840
+ [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]],
16841
+ [
16842
+ /\b(mz60\d|xoom[2 ]{0,2}) build\//i
16843
+ ],
16844
+ [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]],
16845
+ [
16846
+ // LG
16847
+ /\b(?:lg)?([vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
16848
+ ],
16849
+ [MODEL, [VENDOR, LG], [TYPE, TABLET]],
16850
+ [
16851
+ /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
16852
+ /\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,
16853
+ /\blg-?([\d\w]+) bui/i
16854
+ ],
16855
+ [MODEL, [VENDOR, LG], [TYPE, MOBILE]],
16856
+ [
16857
+ // Nokia
16858
+ /(nokia) (t[12][01])/i
16859
+ ],
16860
+ [VENDOR, MODEL, [TYPE, TABLET]],
16861
+ [
16862
+ /(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,
16863
+ /nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i
16864
+ ],
16865
+ [[MODEL, /_/g, " "], [TYPE, MOBILE], [VENDOR, "Nokia"]],
16866
+ [
16867
+ // Google
16868
+ /(pixel (c|tablet))\b/i
16869
+ // Google Pixel C/Tablet
16870
+ ],
16871
+ [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]],
16872
+ [
16873
+ // Google Pixel
16874
+ /droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i
16875
+ ],
16876
+ [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]],
16877
+ [
16878
+ /(google) (pixelbook( go)?)/i
16879
+ ],
16880
+ [VENDOR, MODEL],
16881
+ [
16882
+ // Sony
16883
+ /droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
16884
+ ],
16885
+ [MODEL, [VENDOR, SONY], [TYPE, MOBILE]],
16886
+ [
16887
+ /sony tablet [ps]/i,
16888
+ /\b(?:sony)?sgp\w+(?: bui|\))/i
16889
+ ],
16890
+ [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]],
16891
+ [
16892
+ // Amazon
16893
+ /(alexa)webm/i,
16894
+ /(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,
16895
+ // Kindle Fire without Silk / Echo Show
16896
+ /(kf[a-z]+)( bui|\)).+silk\//i
16897
+ // Kindle Fire HD
16898
+ ],
16899
+ [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]],
16900
+ [
16901
+ /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
16902
+ // Fire Phone
16903
+ ],
16904
+ [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]],
16905
+ [
16906
+ // BlackBerry
16907
+ /(playbook);[-\w\),; ]+(rim)/i
16908
+ // BlackBerry PlayBook
16909
+ ],
16910
+ [MODEL, VENDOR, [TYPE, TABLET]],
16911
+ [
16912
+ /\b((?:bb[a-f]|st[hv])100-\d)/i,
16913
+ /(?:blackberry|\(bb10;) (\w+)/i
16914
+ ],
16915
+ [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]],
16916
+ [
16917
+ // Asus
16918
+ /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
16919
+ ],
16920
+ [MODEL, [VENDOR, ASUS], [TYPE, TABLET]],
16921
+ [
16922
+ / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
16923
+ ],
16924
+ [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]],
16925
+ [
16926
+ // HTC
16927
+ /(nexus 9)/i
16928
+ // HTC Nexus 9
16929
+ ],
16930
+ [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]],
16931
+ [
16932
+ /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
16933
+ // HTC
16934
+ // ZTE
16935
+ /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
16936
+ /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
16937
+ // Alcatel/GeeksPhone/Nexian/Panasonic/Sony
16938
+ ],
16939
+ [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]],
16940
+ [
16941
+ // TCL
16942
+ /tcl (xess p17aa)/i,
16943
+ /droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i
16944
+ ],
16945
+ [MODEL, [VENDOR, "TCL"], [TYPE, TABLET]],
16946
+ [
16947
+ /droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i
16948
+ ],
16949
+ [MODEL, [VENDOR, "TCL"], [TYPE, MOBILE]],
16950
+ [
16951
+ // itel
16952
+ /(itel) ((\w+))/i
16953
+ ],
16954
+ [[VENDOR, lowerize], MODEL, [TYPE, strMapper, { "tablet": ["p10001l", "w7001"], "*": "mobile" }]],
16955
+ [
16956
+ // Acer
16957
+ /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
16958
+ ],
16959
+ [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]],
16960
+ [
16961
+ // Meizu
16962
+ /droid.+; (m[1-5] note) bui/i,
16963
+ /\bmz-([-\w]{2,})/i
16964
+ ],
16965
+ [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]],
16966
+ [
16967
+ // Ulefone
16968
+ /; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i
16969
+ ],
16970
+ [MODEL, [VENDOR, "Ulefone"], [TYPE, MOBILE]],
16971
+ [
16972
+ // Energizer
16973
+ /; (energy ?\w+)(?: bui|\))/i,
16974
+ /; energizer ([\w ]+)(?: bui|\))/i
16975
+ ],
16976
+ [MODEL, [VENDOR, "Energizer"], [TYPE, MOBILE]],
16977
+ [
16978
+ // Cat
16979
+ /; cat (b35);/i,
16980
+ /; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i
16981
+ ],
16982
+ [MODEL, [VENDOR, "Cat"], [TYPE, MOBILE]],
16983
+ [
16984
+ // Smartfren
16985
+ /((?:new )?andromax[\w- ]+)(?: bui|\))/i
16986
+ ],
16987
+ [MODEL, [VENDOR, "Smartfren"], [TYPE, MOBILE]],
16988
+ [
16989
+ // Nothing
16990
+ /droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i
16991
+ ],
16992
+ [MODEL, [VENDOR, "Nothing"], [TYPE, MOBILE]],
16993
+ [
16994
+ // Archos
16995
+ /; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,
16996
+ /archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i
16997
+ ],
16998
+ [MODEL, [VENDOR, "Archos"], [TYPE, TABLET]],
16999
+ [
17000
+ /archos ([\w ]+)( b|\))/i,
17001
+ /; (ac[3-6]\d\w{2,8})( b|\))/i
17002
+ ],
17003
+ [MODEL, [VENDOR, "Archos"], [TYPE, MOBILE]],
17004
+ [
17005
+ // HMD
17006
+ /; (n159v)/i
17007
+ ],
17008
+ [MODEL, [VENDOR, "HMD"], [TYPE, MOBILE]],
17009
+ [
17010
+ // MIXED
17011
+ /(imo) (tab \w+)/i,
17012
+ // IMO
17013
+ /(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i
17014
+ // Infinix XPad / Tecno
17015
+ ],
17016
+ [VENDOR, MODEL, [TYPE, TABLET]],
17017
+ [
17018
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,
17019
+ // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron/Tecno/Micromax/Advan
17020
+ // BLU/HMD/IMO/Infinix/Lava/OnePlus/TCL/Wiko
17021
+ /; (blu|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([\w\+ ]+?)(?: bui|\)|; r)/i,
17022
+ /(hp) ([\w ]+\w)/i,
17023
+ // HP iPAQ
17024
+ /(microsoft); (lumia[\w ]+)/i,
17025
+ // Microsoft Lumia
17026
+ /(oppo) ?([\w ]+) bui/i,
17027
+ // OPPO
17028
+ /(hisense) ([ehv][\w ]+)\)/i,
17029
+ // Hisense
17030
+ /droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i
17031
+ // Philips
17032
+ ],
17033
+ [VENDOR, MODEL, [TYPE, MOBILE]],
17034
+ [
17035
+ /(kobo)\s(ereader|touch)/i,
17036
+ // Kobo
17037
+ /(hp).+(touchpad(?!.+tablet)|tablet)/i,
17038
+ // HP TouchPad
17039
+ /(kindle)\/([\w\.]+)/i
17040
+ // Kindle
17041
+ ],
17042
+ [VENDOR, MODEL, [TYPE, TABLET]],
17043
+ [
17044
+ /(surface duo)/i
17045
+ // Surface Duo
17046
+ ],
17047
+ [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]],
17048
+ [
17049
+ /droid [\d\.]+; (fp\du?)(?: b|\))/i
17050
+ // Fairphone
17051
+ ],
17052
+ [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]],
17053
+ [
17054
+ /((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i
17055
+ // Nvidia Tablets
17056
+ ],
17057
+ [MODEL, [VENDOR, NVIDIA], [TYPE, TABLET]],
17058
+ [
17059
+ /(sprint) (\w+)/i
17060
+ // Sprint Phones
17061
+ ],
17062
+ [VENDOR, MODEL, [TYPE, MOBILE]],
17063
+ [
17064
+ /(kin\.[onetw]{3})/i
17065
+ // Microsoft Kin
17066
+ ],
17067
+ [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]],
17068
+ [
17069
+ /droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
17070
+ // Zebra
17071
+ ],
17072
+ [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]],
17073
+ [
17074
+ /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
17075
+ ],
17076
+ [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]],
17077
+ [
17078
+ ///////////////////
17079
+ // SMARTTVS
17080
+ ///////////////////
17081
+ /(philips)[\w ]+tv/i,
17082
+ // Philips
17083
+ /smart-tv.+(samsung)/i
17084
+ // Samsung
17085
+ ],
17086
+ [VENDOR, [TYPE, SMARTTV]],
17087
+ [
17088
+ /hbbtv.+maple;(\d+)/i
17089
+ ],
17090
+ [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]],
17091
+ [
17092
+ /(vizio)(?: |.+model\/)(\w+-\w+)/i,
17093
+ // Vizio
17094
+ /tcast.+(lg)e?. ([-\w]+)/i
17095
+ // LG SmartTV
17096
+ ],
17097
+ [VENDOR, MODEL, [TYPE, SMARTTV]],
17098
+ [
17099
+ /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
17100
+ ],
17101
+ [[VENDOR, LG], [TYPE, SMARTTV]],
17102
+ [
17103
+ /(apple) ?tv/i
17104
+ // Apple TV
17105
+ ],
17106
+ [VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]],
17107
+ [
17108
+ /crkey.*devicetype\/chromecast/i
17109
+ // Google Chromecast Third Generation
17110
+ ],
17111
+ [[MODEL, CHROMECAST + " Third Generation"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
17112
+ [
17113
+ /crkey.*devicetype\/([^/]*)/i
17114
+ // Google Chromecast with specific device type
17115
+ ],
17116
+ [[MODEL, /^/, "Chromecast "], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
17117
+ [
17118
+ /fuchsia.*crkey/i
17119
+ // Google Chromecast Nest Hub
17120
+ ],
17121
+ [[MODEL, CHROMECAST + " Nest Hub"], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
17122
+ [
17123
+ /crkey/i
17124
+ // Google Chromecast, Linux-based or unknown
17125
+ ],
17126
+ [[MODEL, CHROMECAST], [VENDOR, GOOGLE], [TYPE, SMARTTV]],
17127
+ [
17128
+ /(portaltv)/i
17129
+ // Facebook Portal TV
17130
+ ],
17131
+ [MODEL, [VENDOR, FACEBOOK], [TYPE, SMARTTV]],
17132
+ [
17133
+ /droid.+aft(\w+)( bui|\))/i
17134
+ // Fire TV
17135
+ ],
17136
+ [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]],
17137
+ [
17138
+ /(shield \w+ tv)/i
17139
+ // Nvidia Shield TV
17140
+ ],
17141
+ [MODEL, [VENDOR, NVIDIA], [TYPE, SMARTTV]],
17142
+ [
17143
+ /\(dtv[\);].+(aquos)/i,
17144
+ /(aquos-tv[\w ]+)\)/i
17145
+ // Sharp
17146
+ ],
17147
+ [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],
17148
+ [
17149
+ /(bravia[\w ]+)( bui|\))/i
17150
+ // Sony
17151
+ ],
17152
+ [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]],
17153
+ [
17154
+ /(mi(tv|box)-?\w+) bui/i
17155
+ // Xiaomi
17156
+ ],
17157
+ [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]],
17158
+ [
17159
+ /Hbbtv.*(technisat) (.*);/i
17160
+ // TechniSAT
17161
+ ],
17162
+ [VENDOR, MODEL, [TYPE, SMARTTV]],
17163
+ [
17164
+ /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
17165
+ // Roku
17166
+ /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
17167
+ // HbbTV devices
17168
+ ],
17169
+ [[VENDOR, /.+\/(\w+)/, "$1", strMapper, { "LG": "lge" }], [MODEL, trim], [TYPE, SMARTTV]],
17170
+ [
17171
+ ///////////////////
17172
+ // CONSOLES
17173
+ ///////////////////
17174
+ /(playstation \w+)/i
17175
+ // Playstation
17176
+ ],
17177
+ [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]],
17178
+ [
17179
+ /\b(xbox(?: one)?(?!; xbox))[\); ]/i
17180
+ // Microsoft Xbox
17181
+ ],
17182
+ [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]],
17183
+ [
17184
+ /(ouya)/i,
17185
+ // Ouya
17186
+ /(nintendo) (\w+)/i,
17187
+ // Nintendo
17188
+ /(retroid) (pocket ([^\)]+))/i,
17189
+ // Retroid Pocket
17190
+ /(valve).+(steam deck)/i,
17191
+ /droid.+; ((shield|rgcube|gr0006))( bui|\))/i
17192
+ // Nvidia Portable/Anbernic/Logitech
17193
+ ],
17194
+ [[VENDOR, strMapper, { "Nvidia": "Shield", "Anbernic": "RGCUBE", "Logitech": "GR0006" }], MODEL, [TYPE, CONSOLE]],
17195
+ [
17196
+ ///////////////////
17197
+ // WEARABLES
17198
+ ///////////////////
17199
+ /\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i
17200
+ // Samsung Galaxy Watch
17201
+ ],
17202
+ [MODEL, [VENDOR, SAMSUNG], [TYPE, WEARABLE]],
17203
+ [
17204
+ /((pebble))app/i,
17205
+ // Pebble
17206
+ /(asus|google|lg|oppo|xiaomi) ((pixel |zen)?watch[\w ]*)( bui|\))/i
17207
+ // Asus ZenWatch / LG Watch / Pixel Watch / Xiaomi Watch
17208
+ ],
17209
+ [VENDOR, MODEL, [TYPE, WEARABLE]],
17210
+ [
17211
+ /(ow(?:19|20)?we?[1-3]{1,3})/i
17212
+ // Oppo Watch
17213
+ ],
17214
+ [MODEL, [VENDOR, OPPO], [TYPE, WEARABLE]],
17215
+ [
17216
+ /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
17217
+ // Apple Watch
17218
+ ],
17219
+ [MODEL, [VENDOR, APPLE], [TYPE, WEARABLE]],
17220
+ [
17221
+ /(opwwe\d{3})/i
17222
+ // OnePlus Watch
17223
+ ],
17224
+ [MODEL, [VENDOR, ONEPLUS], [TYPE, WEARABLE]],
17225
+ [
17226
+ /(moto 360)/i
17227
+ // Motorola 360
17228
+ ],
17229
+ [MODEL, [VENDOR, MOTOROLA], [TYPE, WEARABLE]],
17230
+ [
17231
+ /(smartwatch 3)/i
17232
+ // Sony SmartWatch
17233
+ ],
17234
+ [MODEL, [VENDOR, SONY], [TYPE, WEARABLE]],
17235
+ [
17236
+ /(g watch r)/i
17237
+ // LG G Watch R
17238
+ ],
17239
+ [MODEL, [VENDOR, LG], [TYPE, WEARABLE]],
17240
+ [
17241
+ /droid.+; (wt63?0{2,3})\)/i
17242
+ ],
17243
+ [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]],
17244
+ [
17245
+ ///////////////////
17246
+ // XR
17247
+ ///////////////////
17248
+ /droid.+; (glass) \d/i
17249
+ // Google Glass
17250
+ ],
17251
+ [MODEL, [VENDOR, GOOGLE], [TYPE, XR]],
17252
+ [
17253
+ /(pico) ([\w ]+) os\d/i
17254
+ // Pico
17255
+ ],
17256
+ [VENDOR, MODEL, [TYPE, XR]],
17257
+ [
17258
+ /(quest( \d| pro)?s?).+vr/i
17259
+ // Meta Quest
17260
+ ],
17261
+ [MODEL, [VENDOR, FACEBOOK], [TYPE, XR]],
17262
+ [
17263
+ /mobile vr; rv.+firefox/i
17264
+ // Unidentifiable VR device using Firefox Reality / Wolvic
17265
+ ],
17266
+ [[TYPE, XR]],
17267
+ [
17268
+ ///////////////////
17269
+ // EMBEDDED
17270
+ ///////////////////
17271
+ /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
17272
+ // Tesla
17273
+ ],
17274
+ [VENDOR, [TYPE, EMBEDDED]],
17275
+ [
17276
+ /(aeobc)\b/i
17277
+ // Echo Dot
17278
+ ],
17279
+ [MODEL, [VENDOR, AMAZON], [TYPE, EMBEDDED]],
17280
+ [
17281
+ /(homepod).+mac os/i
17282
+ // Apple HomePod
17283
+ ],
17284
+ [MODEL, [VENDOR, APPLE], [TYPE, EMBEDDED]],
17285
+ [
17286
+ /windows iot/i
17287
+ // Unidentifiable embedded device using Windows IoT
17288
+ ],
17289
+ [[TYPE, EMBEDDED]],
17290
+ [
17291
+ ////////////////////
17292
+ // MIXED (GENERIC)
17293
+ ///////////////////
17294
+ /droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i
17295
+ // Unidentifiable SmartTV
17296
+ ],
17297
+ [MODEL, [TYPE, SMARTTV]],
17298
+ [
17299
+ /\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i
17300
+ ],
17301
+ [[TYPE, SMARTTV]],
17302
+ [
17303
+ /droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i
17304
+ ],
17305
+ [MODEL, [TYPE, strMapper, { "mobile": "Mobile", "xr": "VR", "*": TABLET }]],
17306
+ [
17307
+ /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
17308
+ // Unidentifiable Tablet
17309
+ ],
17310
+ [[TYPE, TABLET]],
17311
+ [
17312
+ /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
17313
+ // Unidentifiable Mobile
17314
+ ],
17315
+ [[TYPE, MOBILE]],
17316
+ [
17317
+ /droid .+?; ([\w\. -]+)( bui|\))/i
17318
+ // Generic Android Device
17319
+ ],
17320
+ [MODEL, [VENDOR, "Generic"]]
17321
+ ],
17322
+ engine: [
17323
+ [
17324
+ /windows.+ edge\/([\w\.]+)/i
17325
+ // EdgeHTML
17326
+ ],
17327
+ [VERSION, [NAME, EDGE + "HTML"]],
17328
+ [
17329
+ /(arkweb)\/([\w\.]+)/i
17330
+ // ArkWeb
17331
+ ],
17332
+ [NAME, VERSION],
17333
+ [
17334
+ /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
17335
+ // Blink
17336
+ ],
17337
+ [VERSION, [NAME, "Blink"]],
17338
+ [
17339
+ /(presto)\/([\w\.]+)/i,
17340
+ // Presto
17341
+ /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,
17342
+ // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna/Servo
17343
+ /ekioh(flow)\/([\w\.]+)/i,
17344
+ // Flow
17345
+ /(khtml|tasman|links|dillo)[\/ ]\(?([\w\.]+)/i,
17346
+ // KHTML/Tasman/Links/Dillo
17347
+ /(icab)[\/ ]([23]\.[\d\.]+)/i,
17348
+ // iCab
17349
+ /\b(libweb)/i
17350
+ // LibWeb
17351
+ ],
17352
+ [NAME, VERSION],
17353
+ [
17354
+ /ladybird\//i
17355
+ ],
17356
+ [[NAME, "LibWeb"]],
17357
+ [
17358
+ /rv\:([\w\.]{1,9})\b.+(gecko)/i
17359
+ // Gecko
17360
+ ],
17361
+ [VERSION, NAME]
17362
+ ],
17363
+ os: [
17364
+ [
17365
+ // Windows
17366
+ /(windows nt) (6\.[23]); arm/i
17367
+ // Windows RT
17368
+ ],
17369
+ [[NAME, /N/, "R"], [VERSION, strMapper, windowsVersionMap]],
17370
+ [
17371
+ /(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,
17372
+ // Windows IoT/Mobile/Phone
17373
+ // Windows NT/3.1/95/98/ME/2000/XP/Vista/7/8/8.1/10/11
17374
+ /(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i
17375
+ ],
17376
+ [NAME, VERSION],
17377
+ [
17378
+ /windows nt ?([\d\.\)]*)(?!.+xbox)/i,
17379
+ /\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i
17380
+ ],
17381
+ [[VERSION, /(;|\))/g, "", strMapper, windowsVersionMap], [NAME, WINDOWS]],
17382
+ [
17383
+ /(windows ce)\/?([\d\.]*)/i
17384
+ // Windows CE
17385
+ ],
17386
+ [NAME, VERSION],
17387
+ [
17388
+ // iOS/macOS
17389
+ /[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,
17390
+ // iOS
17391
+ /(?:ios;fbsv|ios(?=.+ip(?:ad|hone)|.+apple ?tv)|ip(?:ad|hone)(?: |.+i(?:pad)?)os|apple ?tv.+ios)[\/ ]([\w\.]+)/i,
17392
+ /\btvos ?([\w\.]+)/i,
17393
+ /cfnetwork\/.+darwin/i
17394
+ ],
17395
+ [[VERSION, /_/g, "."], [NAME, "iOS"]],
17396
+ [
17397
+ /(mac os x) ?([\w\. ]*)/i,
17398
+ /(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i
17399
+ // Mac OS
17400
+ ],
17401
+ [[NAME, "macOS"], [VERSION, /_/g, "."]],
17402
+ [
17403
+ // Google Chromecast
17404
+ /android ([\d\.]+).*crkey/i
17405
+ // Google Chromecast, Android-based
17406
+ ],
17407
+ [VERSION, [NAME, CHROMECAST + " Android"]],
17408
+ [
17409
+ /fuchsia.*crkey\/([\d\.]+)/i
17410
+ // Google Chromecast, Fuchsia-based
17411
+ ],
17412
+ [VERSION, [NAME, CHROMECAST + " Fuchsia"]],
17413
+ [
17414
+ /crkey\/([\d\.]+).*devicetype\/smartspeaker/i
17415
+ // Google Chromecast, Linux-based Smart Speaker
17416
+ ],
17417
+ [VERSION, [NAME, CHROMECAST + " SmartSpeaker"]],
17418
+ [
17419
+ /linux.*crkey\/([\d\.]+)/i
17420
+ // Google Chromecast, Legacy Linux-based
17421
+ ],
17422
+ [VERSION, [NAME, CHROMECAST + " Linux"]],
17423
+ [
17424
+ /crkey\/([\d\.]+)/i
17425
+ // Google Chromecast, unknown
17426
+ ],
17427
+ [VERSION, [NAME, CHROMECAST]],
17428
+ [
17429
+ // Mobile OSes
17430
+ /droid ([\w\.]+)\b.+(android[- ]x86)/i
17431
+ // Android-x86
17432
+ ],
17433
+ [VERSION, NAME],
17434
+ [
17435
+ /(ubuntu) ([\w\.]+) like android/i
17436
+ // Ubuntu Touch
17437
+ ],
17438
+ [[NAME, /(.+)/, "$1 Touch"], VERSION],
17439
+ [
17440
+ /(harmonyos)[\/ ]?([\d\.]*)/i,
17441
+ // HarmonyOS
17442
+ // Android/Blackberry/WebOS/QNX/Bada/RIM/KaiOS/Maemo/MeeGo/S40/Sailfish OS/OpenHarmony/Tizen
17443
+ /(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i
17444
+ ],
17445
+ [NAME, VERSION],
17446
+ [
17447
+ /\(bb(10);/i
17448
+ // BlackBerry 10
17449
+ ],
17450
+ [VERSION, [NAME, BLACKBERRY]],
17451
+ [
17452
+ /(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i
17453
+ // Symbian
17454
+ ],
17455
+ [VERSION, [NAME, "Symbian"]],
17456
+ [
17457
+ /mozilla\/[\d\.]+ \((?:mobile[;\w ]*|tablet|tv|[^\)]*(?:viera|lg(?:l25|-d300)|alcatel ?o.+|y300-f1)); rv:([\w\.]+)\).+gecko\//i
17458
+ // Firefox OS
17459
+ ],
17460
+ [VERSION, [NAME, FIREFOX + " OS"]],
17461
+ [
17462
+ /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,
17463
+ // WebOS
17464
+ /webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i
17465
+ ],
17466
+ [VERSION, [NAME, "webOS"]],
17467
+ [
17468
+ /web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i
17469
+ // https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine
17470
+ ],
17471
+ [[VERSION, strMapper, { "25": "120", "24": "108", "23": "94", "22": "87", "6": "79", "5": "68", "4": "53", "3": "38", "2": "538", "1": "537", "*": "TV" }], [NAME, "webOS"]],
17472
+ [
17473
+ /watch(?: ?os[,\/ ]|\d,\d\/)([\d\.]+)/i
17474
+ // watchOS
17475
+ ],
17476
+ [VERSION, [NAME, "watchOS"]],
17477
+ [
17478
+ // Google ChromeOS
17479
+ /cros [\w]+(?:\)| ([\w\.]+)\b)/i
17480
+ // Chromium OS
17481
+ ],
17482
+ [VERSION, [NAME, "Chrome OS"]],
17483
+ [
17484
+ // Smart TVs
17485
+ /kepler ([\w\.]+); (aft|aeo)/i
17486
+ // Vega OS
17487
+ ],
17488
+ [VERSION, [NAME, "Vega OS"]],
17489
+ [
17490
+ /(netrange)mmh/i,
17491
+ // Netrange
17492
+ /(nettv)\/(\d+\.[\w\.]+)/i,
17493
+ // NetTV
17494
+ // Console
17495
+ /(nintendo|playstation) (\w+)/i,
17496
+ // Nintendo/Playstation
17497
+ /(xbox); +xbox ([^\);]+)/i,
17498
+ // Microsoft Xbox (360, One, X, S, Series X, Series S)
17499
+ /(pico) .+os([\w\.]+)/i,
17500
+ // Pico
17501
+ // Other
17502
+ /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
17503
+ // Joli/Palm
17504
+ /linux.+(mint)[\/\(\) ]?([\w\.]*)/i,
17505
+ // Mint
17506
+ /(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,
17507
+ // Mageia/VectorLinux/Fuchsia/ArcaOS/Arch
17508
+ /([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
17509
+ // Ubuntu/Debian/SUSE/Gentoo/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire/Knoppix
17510
+ /((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
17511
+ // Solaris
17512
+ /\b(aix)[; ]([1-9\.]{0,4})/i,
17513
+ // AIX
17514
+ /(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,
17515
+ // Hurd/Linux/MorphOS
17516
+ /(gnu) ?([\w\.]*)/i,
17517
+ // GNU
17518
+ /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
17519
+ // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly
17520
+ /(haiku) ?(r\d)?/i
17521
+ // Haiku
17522
+ ],
17523
+ [NAME, VERSION],
17524
+ [
17525
+ /(sunos) ?([\d\.]*)/i
17526
+ // Solaris
17527
+ ],
17528
+ [[NAME, "Solaris"], VERSION],
17529
+ [
17530
+ /\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,
17531
+ // BeOS/OS2/AmigaOS/OpenVMS/HP-UX/SerenityOS
17532
+ /(unix) ?([\w\.]*)/i
17533
+ // UNIX
17534
+ ],
17535
+ [NAME, VERSION]
17536
+ ]
17537
+ };
17538
+ var defaultProps = (function() {
17539
+ var props = { init: {}, isIgnore: {}, isIgnoreRgx: {}, toString: {} };
17540
+ setProps.call(props.init, [
17541
+ [BROWSER, [NAME, VERSION, MAJOR, TYPE]],
17542
+ [CPU, [ARCHITECTURE]],
17543
+ [DEVICE, [TYPE, MODEL, VENDOR]],
17544
+ [ENGINE, [NAME, VERSION]],
17545
+ [OS, [NAME, VERSION]]
17546
+ ]);
17547
+ setProps.call(props.isIgnore, [
17548
+ [BROWSER, [VERSION, MAJOR]],
17549
+ [ENGINE, [VERSION]],
17550
+ [OS, [VERSION]]
17551
+ ]);
17552
+ setProps.call(props.isIgnoreRgx, [
17553
+ [BROWSER, / ?browser$/i],
17554
+ [OS, / ?os$/i]
17555
+ ]);
17556
+ setProps.call(props.toString, [
17557
+ [BROWSER, [NAME, VERSION]],
17558
+ [CPU, [ARCHITECTURE]],
17559
+ [DEVICE, [VENDOR, MODEL]],
17560
+ [ENGINE, [NAME, VERSION]],
17561
+ [OS, [NAME, VERSION]]
17562
+ ]);
17563
+ return props;
17564
+ })();
17565
+ var createIData = function(item, itemType) {
17566
+ var init_props = defaultProps.init[itemType], is_ignoreProps = defaultProps.isIgnore[itemType] || 0, is_ignoreRgx = defaultProps.isIgnoreRgx[itemType] || 0, toString_props = defaultProps.toString[itemType] || 0;
17567
+ function IData() {
17568
+ setProps.call(this, init_props);
17569
+ }
17570
+ IData.prototype.getItem = function() {
17571
+ return item;
17572
+ };
17573
+ IData.prototype.withClientHints = function() {
17574
+ if (!NAVIGATOR_UADATA) {
17575
+ return item.parseCH().get();
17576
+ }
17577
+ return NAVIGATOR_UADATA.getHighEntropyValues(CH_ALL_VALUES).then(function(res) {
17578
+ return item.setCH(new UACHData(res, false)).parseCH().get();
17579
+ });
17580
+ };
17581
+ IData.prototype.withFeatureCheck = function() {
17582
+ return item.detectFeature().get();
17583
+ };
17584
+ if (itemType != RESULT) {
17585
+ IData.prototype.is = function(strToCheck) {
17586
+ var is = false;
17587
+ for (var i2 in this) {
17588
+ if (this.hasOwnProperty(i2) && !has(is_ignoreProps, i2) && lowerize(is_ignoreRgx ? strip(is_ignoreRgx, this[i2]) : this[i2]) == lowerize(is_ignoreRgx ? strip(is_ignoreRgx, strToCheck) : strToCheck)) {
17589
+ is = true;
17590
+ if (strToCheck != TYPEOF.UNDEFINED) break;
17591
+ } else if (strToCheck == TYPEOF.UNDEFINED && is) {
17592
+ is = !is;
17593
+ break;
17594
+ }
17595
+ }
17596
+ return is;
17597
+ };
17598
+ IData.prototype.toString = function() {
17599
+ var str = EMPTY;
17600
+ for (var i2 in toString_props) {
17601
+ if (typeof this[toString_props[i2]] !== TYPEOF.UNDEFINED) {
17602
+ str += (str ? " " : EMPTY) + this[toString_props[i2]];
17603
+ }
17604
+ }
17605
+ return str || TYPEOF.UNDEFINED;
17606
+ };
17607
+ }
17608
+ IData.prototype.then = function(cb2) {
17609
+ var that = this;
17610
+ var IDataResolve = function() {
17611
+ for (var prop in that) {
17612
+ if (that.hasOwnProperty(prop)) {
17613
+ this[prop] = that[prop];
17614
+ }
17615
+ }
17616
+ };
17617
+ IDataResolve.prototype = {
17618
+ is: IData.prototype.is,
17619
+ toString: IData.prototype.toString,
17620
+ withClientHints: IData.prototype.withClientHints,
17621
+ withFeatureCheck: IData.prototype.withFeatureCheck
17622
+ };
17623
+ var resolveData = new IDataResolve();
17624
+ cb2(resolveData);
17625
+ return resolveData;
17626
+ };
17627
+ return new IData();
17628
+ };
17629
+ function UACHData(uach, isHttpUACH) {
17630
+ uach = uach || {};
17631
+ setProps.call(this, CH_ALL_VALUES);
17632
+ if (isHttpUACH) {
17633
+ setProps.call(this, [
17634
+ [BRANDS, itemListToArray(uach[CH])],
17635
+ [FULLVERLIST, itemListToArray(uach[CH_FULL_VER_LIST])],
17636
+ [MOBILE, /\?1/.test(uach[CH_MOBILE])],
17637
+ [MODEL, stripQuotes(uach[CH_MODEL])],
17638
+ [PLATFORM, stripQuotes(uach[CH_PLATFORM])],
17639
+ [PLATFORMVER, stripQuotes(uach[CH_PLATFORM_VER])],
17640
+ [ARCHITECTURE, stripQuotes(uach[CH_ARCH])],
17641
+ [FORMFACTORS, itemListToArray(uach[CH_FORM_FACTORS])],
17642
+ [BITNESS, stripQuotes(uach[CH_BITNESS])]
17643
+ ]);
17644
+ } else {
17645
+ for (var prop in uach) {
17646
+ if (this.hasOwnProperty(prop) && typeof uach[prop] !== TYPEOF.UNDEFINED) this[prop] = uach[prop];
17647
+ }
17648
+ }
17649
+ }
17650
+ function UAItem(itemType, ua, rgxMap, uaCH) {
17651
+ setProps.call(this, [
17652
+ ["itemType", itemType],
17653
+ ["ua", ua],
17654
+ ["uaCH", uaCH],
17655
+ ["rgxMap", rgxMap],
17656
+ ["data", createIData(this, itemType)]
17657
+ ]);
17658
+ return this;
17659
+ }
17660
+ UAItem.prototype.get = function(prop) {
17661
+ if (!prop) return this.data;
17662
+ return this.data.hasOwnProperty(prop) ? this.data[prop] : void 0;
17663
+ };
17664
+ UAItem.prototype.set = function(prop, val) {
17665
+ this.data[prop] = val;
17666
+ return this;
17667
+ };
17668
+ UAItem.prototype.setCH = function(ch) {
17669
+ this.uaCH = ch;
17670
+ return this;
17671
+ };
17672
+ UAItem.prototype.detectFeature = function() {
17673
+ if (NAVIGATOR && NAVIGATOR.userAgent == this.ua) {
17674
+ switch (this.itemType) {
17675
+ case BROWSER:
17676
+ if (NAVIGATOR.brave && typeof NAVIGATOR.brave.isBrave == TYPEOF.FUNCTION) {
17677
+ this.set(NAME, "Brave");
17678
+ }
17679
+ break;
17680
+ case DEVICE:
17681
+ if (!this.get(TYPE) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[MOBILE]) {
17682
+ this.set(TYPE, MOBILE);
17683
+ }
17684
+ if (this.get(MODEL) == "Macintosh" && NAVIGATOR && typeof NAVIGATOR.standalone !== TYPEOF.UNDEFINED && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 2) {
17685
+ this.set(MODEL, "iPad").set(TYPE, TABLET);
17686
+ }
17687
+ break;
17688
+ case OS:
17689
+ if (!this.get(NAME) && NAVIGATOR_UADATA && NAVIGATOR_UADATA[PLATFORM]) {
17690
+ this.set(NAME, NAVIGATOR_UADATA[PLATFORM]);
17691
+ }
17692
+ break;
17693
+ case RESULT:
17694
+ var data = this.data;
17695
+ var detect = function(itemType) {
17696
+ return data[itemType].getItem().detectFeature().get();
17697
+ };
17698
+ this.set(BROWSER, detect(BROWSER)).set(CPU, detect(CPU)).set(DEVICE, detect(DEVICE)).set(ENGINE, detect(ENGINE)).set(OS, detect(OS));
17699
+ }
17700
+ }
17701
+ return this;
17702
+ };
17703
+ UAItem.prototype.parseUA = function() {
17704
+ if (this.itemType != RESULT) {
17705
+ rgxMapper.call(this.data, this.ua, this.rgxMap);
17706
+ }
17707
+ switch (this.itemType) {
17708
+ case BROWSER:
17709
+ this.set(MAJOR, majorize(this.get(VERSION)));
17710
+ break;
17711
+ case OS:
17712
+ if (this.get(NAME) == "iOS" && this.get(VERSION) == "18.6") {
17713
+ var realVersion = /\) Version\/([\d\.]+)/.exec(this.ua);
17714
+ if (realVersion && parseInt(realVersion[1].substring(0, 2), 10) >= 26) {
17715
+ this.set(VERSION, realVersion[1]);
17716
+ }
17717
+ }
17718
+ break;
17719
+ }
17720
+ return this;
17721
+ };
17722
+ UAItem.prototype.parseCH = function() {
17723
+ var uaCH = this.uaCH, rgxMap = this.rgxMap;
17724
+ switch (this.itemType) {
17725
+ case BROWSER:
17726
+ case ENGINE:
17727
+ var brands = uaCH[FULLVERLIST] || uaCH[BRANDS], prevName;
17728
+ if (brands) {
17729
+ for (var i2 = 0; i2 < brands.length; i2++) {
17730
+ var brandName = brands[i2].brand || brands[i2], brandVersion = brands[i2].version;
17731
+ if (this.itemType == BROWSER && !/not.a.brand/i.test(brandName) && (!prevName || /Chrom/.test(prevName) && brandName != CHROMIUM || prevName == EDGE && /WebView2/.test(brandName))) {
17732
+ brandName = strMapper(brandName, browserHintsMap);
17733
+ prevName = this.get(NAME);
17734
+ if (!(prevName && !/Chrom/.test(prevName) && /Chrom/.test(brandName))) {
17735
+ this.set(NAME, brandName).set(VERSION, brandVersion).set(MAJOR, majorize(brandVersion));
17736
+ }
17737
+ prevName = brandName;
17738
+ }
17739
+ if (this.itemType == ENGINE && brandName == CHROMIUM) {
17740
+ this.set(VERSION, brandVersion);
17741
+ }
17742
+ }
17743
+ }
17744
+ break;
17745
+ case CPU:
17746
+ var archName = uaCH[ARCHITECTURE];
17747
+ if (archName) {
17748
+ if (archName && uaCH[BITNESS] == "64") archName += "64";
17749
+ rgxMapper.call(this.data, archName + ";", rgxMap);
17750
+ }
17751
+ break;
17752
+ case DEVICE:
17753
+ if (uaCH[MOBILE]) {
17754
+ this.set(TYPE, MOBILE);
17755
+ }
17756
+ if (uaCH[MODEL]) {
17757
+ this.set(MODEL, uaCH[MODEL]);
17758
+ if (!this.get(TYPE) || !this.get(VENDOR)) {
17759
+ var reParse = {};
17760
+ rgxMapper.call(reParse, "droid 9; " + uaCH[MODEL] + ")", rgxMap);
17761
+ if (!this.get(TYPE) && !!reParse.type) {
17762
+ this.set(TYPE, reParse.type);
17763
+ }
17764
+ if (!this.get(VENDOR) && !!reParse.vendor) {
17765
+ this.set(VENDOR, reParse.vendor);
17766
+ }
17767
+ }
17768
+ }
17769
+ if (uaCH[FORMFACTORS]) {
17770
+ var ff;
17771
+ if (typeof uaCH[FORMFACTORS] !== "string") {
17772
+ var idx = 0;
17773
+ while (!ff && idx < uaCH[FORMFACTORS].length) {
17774
+ ff = strMapper(uaCH[FORMFACTORS][idx++], formFactorsMap);
17775
+ }
17776
+ } else {
17777
+ ff = strMapper(uaCH[FORMFACTORS], formFactorsMap);
17778
+ }
17779
+ this.set(TYPE, ff);
17780
+ }
17781
+ break;
17782
+ case OS:
17783
+ var osName = uaCH[PLATFORM];
17784
+ if (osName) {
17785
+ var osVersion = uaCH[PLATFORMVER];
17786
+ if (osName == WINDOWS) osVersion = parseInt(majorize(osVersion), 10) >= 13 ? "11" : "10";
17787
+ this.set(NAME, osName).set(VERSION, osVersion);
17788
+ }
17789
+ if (this.get(NAME) == WINDOWS && uaCH[MODEL] == "Xbox") {
17790
+ this.set(NAME, "Xbox").set(VERSION, void 0);
17791
+ }
17792
+ break;
17793
+ case RESULT:
17794
+ var data = this.data;
17795
+ var parse2 = function(itemType) {
17796
+ return data[itemType].getItem().setCH(uaCH).parseCH().get();
17797
+ };
17798
+ this.set(BROWSER, parse2(BROWSER)).set(CPU, parse2(CPU)).set(DEVICE, parse2(DEVICE)).set(ENGINE, parse2(ENGINE)).set(OS, parse2(OS));
17799
+ }
17800
+ return this;
17801
+ };
17802
+ function UAParser(ua, extensions, headers) {
17803
+ if (typeof ua === TYPEOF.OBJECT) {
17804
+ if (isExtensions(ua, true)) {
17805
+ if (typeof extensions === TYPEOF.OBJECT) {
17806
+ headers = extensions;
17807
+ }
17808
+ extensions = ua;
17809
+ } else {
17810
+ headers = ua;
17811
+ extensions = void 0;
17812
+ }
17813
+ ua = void 0;
17814
+ } else if (typeof ua === TYPEOF.STRING && !isExtensions(extensions, true)) {
17815
+ headers = extensions;
17816
+ extensions = void 0;
17817
+ }
17818
+ if (headers) {
17819
+ if (typeof headers.append === TYPEOF.FUNCTION) {
17820
+ var kv = {};
17821
+ headers.forEach(function(v2, k2) {
17822
+ kv[String(k2).toLowerCase()] = v2;
17823
+ });
17824
+ headers = kv;
17825
+ } else {
17826
+ var normalized = {};
17827
+ for (var header in headers) {
17828
+ if (headers.hasOwnProperty(header)) {
17829
+ normalized[String(header).toLowerCase()] = headers[header];
17830
+ }
17831
+ }
17832
+ headers = normalized;
17833
+ }
17834
+ }
17835
+ if (!(this instanceof UAParser)) {
17836
+ return new UAParser(ua, extensions, headers).getResult();
17837
+ }
17838
+ var userAgent = typeof ua === TYPEOF.STRING ? ua : (
17839
+ // Passed user-agent string
17840
+ headers && headers[USER_AGENT] ? headers[USER_AGENT] : (
17841
+ // User-Agent from passed headers
17842
+ NAVIGATOR && NAVIGATOR.userAgent ? NAVIGATOR.userAgent : (
17843
+ // navigator.userAgent
17844
+ EMPTY
17845
+ )
17846
+ )
17847
+ ), httpUACH = new UACHData(headers, true), regexMap = extensions ? extend(defaultRegexes, extensions) : defaultRegexes, createItemFunc = function(itemType) {
17848
+ if (itemType == RESULT) {
17849
+ return function() {
17850
+ return new UAItem(itemType, userAgent, regexMap, httpUACH).set("ua", userAgent).set(BROWSER, this.getBrowser()).set(CPU, this.getCPU()).set(DEVICE, this.getDevice()).set(ENGINE, this.getEngine()).set(OS, this.getOS()).get();
17851
+ };
17852
+ } else {
17853
+ return function() {
17854
+ return new UAItem(itemType, userAgent, regexMap[itemType], httpUACH).parseUA().get();
17855
+ };
17856
+ }
17857
+ };
17858
+ setProps.call(this, [
17859
+ ["getBrowser", createItemFunc(BROWSER)],
17860
+ ["getCPU", createItemFunc(CPU)],
17861
+ ["getDevice", createItemFunc(DEVICE)],
17862
+ ["getEngine", createItemFunc(ENGINE)],
17863
+ ["getOS", createItemFunc(OS)],
17864
+ ["getResult", createItemFunc(RESULT)],
17865
+ ["getUA", function() {
17866
+ return userAgent;
17867
+ }],
17868
+ ["setUA", function(ua2) {
17869
+ if (isString2(ua2)) userAgent = trim(ua2, UA_MAX_LENGTH);
17870
+ return this;
17871
+ }]
17872
+ ]).setUA(userAgent);
17873
+ return this;
17874
+ }
17875
+ UAParser.VERSION = LIBVERSION;
17876
+ UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR, TYPE]);
17877
+ UAParser.CPU = enumerize([ARCHITECTURE]);
17878
+ UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);
17879
+ UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);
17880
+
17881
+ // src/utils/browser.ts
17882
+ var FALLBACK = { browser: "Other", browser_version: "unknown" };
17883
+ var detectBrowser = () => {
17884
+ if (typeof navigator === "undefined" || typeof navigator.userAgent !== "string") {
17885
+ return FALLBACK;
17886
+ }
17887
+ const { name, version } = new UAParser(navigator.userAgent).getBrowser();
17888
+ if (!name || !version) {
17889
+ return FALLBACK;
17890
+ }
17891
+ return { browser: name, browser_version: version };
17892
+ };
17893
+
17894
+ // src/hooks/use-appinspector-open-analytics.ts
17895
+ var buildPayload = (container) => {
17896
+ if (container.source === "vscode") {
17897
+ return {
17898
+ extension_version: container.extensionVersion,
17899
+ ide_version: container.ideVersion,
17900
+ source: "vscode"
17901
+ };
17902
+ }
17903
+ const { browser, browser_version } = detectBrowser();
17904
+ return { browser, browser_version, source: "web" };
17905
+ };
17906
+ var useAppInspectorOpenAnalytics = () => {
17907
+ const api = useAppInspectorApi();
17908
+ const { deploymentContainer } = useAppInspector();
17909
+ const { status, statusError } = useAppInspectorStatus();
17910
+ const firedRef = useRef9(false);
17911
+ useEffect13(() => {
17912
+ if (firedRef.current) {
17913
+ return;
17914
+ }
17915
+ if (statusError) {
17916
+ return;
17917
+ }
17918
+ if (status?.status !== "ENABLED") {
17919
+ return;
17920
+ }
17921
+ firedRef.current = true;
17922
+ api.postAnalytics({
17923
+ event: "appinspector_open",
17924
+ payload: buildPayload(deploymentContainer)
17925
+ }).catch(() => {
17926
+ });
17927
+ }, [api, deploymentContainer, status, statusError]);
17928
+ };
17929
+
15989
17930
  // src/context.tsx
15990
- import { jsx as jsx130 } from "react/jsx-runtime";
15991
- var AppInspectorContext = createContext8(void 0);
17931
+ import { Fragment as Fragment7, jsx as jsx131 } from "react/jsx-runtime";
17932
+ var AppInspectorContext = createContext9(void 0);
15992
17933
  var useAppInspector = () => {
15993
- const context = useContext15(AppInspectorContext);
17934
+ const context = useContext16(AppInspectorContext);
15994
17935
  if (!context) {
15995
17936
  throw new Error("@localstack-studio/ui: components must be used within a <AppInspectorContextProvider>");
15996
17937
  }
15997
17938
  return context;
15998
17939
  };
17940
+ var AppInspectorAnalyticsBoundary = ({ children }) => {
17941
+ useAppInspectorOpenAnalytics();
17942
+ return /* @__PURE__ */ jsx131(Fragment7, { children });
17943
+ };
15999
17944
  var AppInspectorContextProvider = (props) => {
16000
- const api = useMemo6(
17945
+ const api = useMemo7(
16001
17946
  () => createApiClient({ localstackEndpoint: props.localstackEndpoint }),
16002
17947
  [props.localstackEndpoint]
16003
17948
  );
@@ -16013,27 +17958,32 @@ var AppInspectorContextProvider = (props) => {
16013
17958
  },
16014
17959
  [props.routePrefix]
16015
17960
  );
16016
- const contextValue = useMemo6(
17961
+ const deploymentContainer = useMemo7(
17962
+ () => props.deploymentContainer ?? { source: "web" },
17963
+ [props.deploymentContainer]
17964
+ );
17965
+ const contextValue = useMemo7(
16017
17966
  () => ({
17967
+ deploymentContainer,
16018
17968
  linkComponent: props.linkComponent,
16019
17969
  localstackEndpoint: props.localstackEndpoint,
16020
17970
  resolveLink
16021
17971
  }),
16022
- [props.linkComponent, props.localstackEndpoint, resolveLink]
17972
+ [deploymentContainer, props.linkComponent, props.localstackEndpoint, resolveLink]
16023
17973
  );
16024
- return /* @__PURE__ */ jsx130(ApiProvider, { api, children: /* @__PURE__ */ jsx130(AppInspectorContext.Provider, { value: contextValue, children: props.children }) });
17974
+ return /* @__PURE__ */ jsx131(ApiProvider, { api, children: /* @__PURE__ */ jsx131(StatusProvider, { children: /* @__PURE__ */ jsx131(AppInspectorContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx131(AppInspectorAnalyticsBoundary, { children: props.children }) }) }) });
16025
17975
  };
16026
17976
 
16027
17977
  // src/hooks/use-spans-ws.tsx
16028
17978
  function useSpansWebSocket(options) {
16029
17979
  const { onMessage } = options;
16030
- const onMessageRef = useRef9(onMessage);
16031
- useEffect13(() => {
17980
+ const onMessageRef = useRef10(onMessage);
17981
+ useEffect14(() => {
16032
17982
  onMessageRef.current = onMessage;
16033
17983
  }, [onMessage]);
16034
17984
  const [connected, setConnected] = useState8(false);
16035
- const wsRef = useRef9(void 0);
16036
- const reconnectRef = useRef9(void 0);
17985
+ const wsRef = useRef10(void 0);
17986
+ const reconnectRef = useRef10(void 0);
16037
17987
  const { localstackEndpoint } = useAppInspector();
16038
17988
  const connect = useCallback6(() => {
16039
17989
  if (wsRef.current !== void 0) return;
@@ -16061,7 +18011,7 @@ function useSpansWebSocket(options) {
16061
18011
  }
16062
18012
  });
16063
18013
  }, [localstackEndpoint]);
16064
- useEffect13(() => {
18014
+ useEffect14(() => {
16065
18015
  connect();
16066
18016
  return () => {
16067
18017
  if (reconnectRef.current !== void 0) clearTimeout(reconnectRef.current);
@@ -16078,17 +18028,17 @@ function useSpansWebSocket(options) {
16078
18028
  }
16079
18029
 
16080
18030
  // src/hooks/use-throttled-items.ts
16081
- import { useEffect as useEffect14, useRef as useRef10, useState as useState9 } from "react";
18031
+ import { useEffect as useEffect15, useRef as useRef11, useState as useState9 } from "react";
16082
18032
  function useThrottledItems(items, getId, catchUpIncrement = 10) {
16083
18033
  const [displayedItems, setDisplayedItems] = useState9([]);
16084
18034
  const [isCatchingUpForward, setIsCatchingUpForward] = useState9(false);
16085
18035
  const [isCatchingUpBackward, setIsCatchingUpBackward] = useState9(false);
16086
- const targetRef = useRef10([]);
16087
- const rafRef = useRef10(void 0);
16088
- const leftHiddenRef = useRef10(0);
16089
- const rightHiddenRef = useRef10(0);
16090
- const shrinkRafPendingRef = useRef10(false);
16091
- useEffect14(() => {
18036
+ const targetRef = useRef11([]);
18037
+ const rafRef = useRef11(void 0);
18038
+ const leftHiddenRef = useRef11(0);
18039
+ const rightHiddenRef = useRef11(0);
18040
+ const shrinkRafPendingRef = useRef11(false);
18041
+ useEffect15(() => {
16092
18042
  const previousTarget = targetRef.current;
16093
18043
  const target = items ?? [];
16094
18044
  targetRef.current = target;
@@ -16159,7 +18109,7 @@ function useThrottledItems(items, getId, catchUpIncrement = 10) {
16159
18109
  });
16160
18110
  }
16161
18111
  }, [items, getId, catchUpIncrement]);
16162
- useEffect14(() => {
18112
+ useEffect15(() => {
16163
18113
  return () => {
16164
18114
  if (rafRef.current !== void 0) {
16165
18115
  cancelAnimationFrame(rafRef.current);
@@ -16179,7 +18129,7 @@ var useSpans = () => {
16179
18129
  const [fetchError, setFetchError] = useState10();
16180
18130
  const [fetchingForward, setFetchingForward] = useState10(false);
16181
18131
  const [fetchingBackward, setFetchingBackward] = useState10(false);
16182
- const paginationBufferRef = useRef11(createPaginationBuffer({
18132
+ const paginationBufferRef = useRef12(createPaginationBuffer({
16183
18133
  async fetchPage(token) {
16184
18134
  const response = await api.getSpans({
16185
18135
  limit: PAGE_SIZE,
@@ -16206,9 +18156,9 @@ var useSpans = () => {
16206
18156
  onError: (error) => {
16207
18157
  setFetchError(error);
16208
18158
  },
16209
- onStatusChange(status2) {
16210
- setFetchingBackward(status2.fetchingBackward);
16211
- setFetchingForward(status2.fetchingForward);
18159
+ onStatusChange(status) {
18160
+ setFetchingBackward(status.fetchingBackward);
18161
+ setFetchingForward(status.fetchingForward);
16212
18162
  },
16213
18163
  // The spans endpoint is sorted by span ingestion time, which might differ from
16214
18164
  // the span timestamp. In order to accomodate for this, we will sort the spans
@@ -16229,10 +18179,9 @@ var useSpans = () => {
16229
18179
  const fetchBackward = useCallback7(() => {
16230
18180
  void paginationBufferRef.current.fetchBackward();
16231
18181
  }, []);
16232
- useEffect15(() => {
18182
+ useEffect16(() => {
16233
18183
  fetchForward();
16234
18184
  }, [fetchForward]);
16235
- const { checking, checkStatus, error: statusError, status } = useStatus();
16236
18185
  const [clearingSpans, setClearingSpans] = useState10(false);
16237
18186
  const clearSpans = useCallback7(async () => {
16238
18187
  if (clearingSpans) {
@@ -16255,7 +18204,7 @@ var useSpans = () => {
16255
18204
  const toggleStream = useCallback7(() => {
16256
18205
  setStreamPaused((previous) => !previous);
16257
18206
  }, []);
16258
- useEffect15(() => {
18207
+ useEffect16(() => {
16259
18208
  if (hasMoreForward === true && !fetchingForward && !streamPaused) {
16260
18209
  void paginationBufferRef.current.fetchForward();
16261
18210
  }
@@ -16275,8 +18224,6 @@ var useSpans = () => {
16275
18224
  }
16276
18225
  });
16277
18226
  return {
16278
- checking,
16279
- checkStatus,
16280
18227
  clearingSpans,
16281
18228
  clearSpans,
16282
18229
  fetchBackward,
@@ -16289,8 +18236,6 @@ var useSpans = () => {
16289
18236
  iamErrorCount,
16290
18237
  licenseLimit,
16291
18238
  spans: throttledSpans.items,
16292
- status,
16293
- statusError,
16294
18239
  streamPaused,
16295
18240
  systemLimit,
16296
18241
  toggleStream,
@@ -16303,12 +18248,12 @@ import { ArrowBack } from "@mui/icons-material";
16303
18248
  import { Box as Box19, Button as Button6, Drawer, Paper as Paper3 } from "@mui/material";
16304
18249
  import { styled } from "@mui/material/styles";
16305
18250
  import { ReactFlowProvider } from "@xyflow/react";
16306
- import { useCallback as useCallback9, useEffect as useEffect20, useRef as useRef15, useState as useState17 } from "react";
18251
+ import { useCallback as useCallback9, useEffect as useEffect21, useRef as useRef16, useState as useState17 } from "react";
16307
18252
 
16308
18253
  // src/components/event-details/event-details.tsx
16309
18254
  import { Close as Close2 } from "@mui/icons-material";
16310
18255
  import { Alert as Alert4, Box as Box15, Chip as Chip3, Divider as Divider3, FormControlLabel as FormControlLabel2, IconButton as IconButton4, Stack as Stack2, Switch, Typography as Typography10 } from "@mui/material";
16311
- import { useMemo as useMemo11, useState as useState16 } from "react";
18256
+ import { useMemo as useMemo12, useState as useState16 } from "react";
16312
18257
 
16313
18258
  // src/utils/iam-utils.ts
16314
18259
  function determinePermissionStatus(payload) {
@@ -16507,28 +18452,28 @@ var getEventGroupsByType = (events) => {
16507
18452
  // src/components/event-details/event-detail.tsx
16508
18453
  import { KeyboardArrowDown as KeyboardArrowDown2, KeyboardArrowRight as KeyboardArrowRight2 } from "@mui/icons-material";
16509
18454
  import { Box as Box12, IconButton as IconButton3, Typography as Typography7 } from "@mui/material";
16510
- import { useEffect as useEffect17, useMemo as useMemo9, useRef as useRef13, useState as useState13 } from "react";
18455
+ import { useEffect as useEffect18, useMemo as useMemo10, useRef as useRef14, useState as useState13 } from "react";
16511
18456
 
16512
18457
  // src/components/status-icon.tsx
16513
18458
  import { Cancel, CheckCircle, Error as Error2, Info, RemoveCircle } from "@mui/icons-material";
16514
18459
  import { Box as Box7 } from "@mui/material";
16515
- import { jsx as jsx131 } from "react/jsx-runtime";
18460
+ import { jsx as jsx132 } from "react/jsx-runtime";
16516
18461
  var StatusIcon = ({ errorLevel }) => {
16517
18462
  switch (errorLevel) {
16518
18463
  case EventLevel.LevelError: {
16519
- return /* @__PURE__ */ jsx131(Cancel, { sx: { color: "red" } });
18464
+ return /* @__PURE__ */ jsx132(Cancel, { sx: { color: "red" } });
16520
18465
  }
16521
18466
  case EventLevel.LevelInfo: {
16522
- return /* @__PURE__ */ jsx131(Info, { sx: { color: "gray" } });
18467
+ return /* @__PURE__ */ jsx132(Info, { sx: { color: "gray" } });
16523
18468
  }
16524
18469
  case EventLevel.LevelPermission: {
16525
- return /* @__PURE__ */ jsx131(RemoveCircle, { sx: { color: "blue" } });
18470
+ return /* @__PURE__ */ jsx132(RemoveCircle, { sx: { color: "blue" } });
16526
18471
  }
16527
18472
  case EventLevel.LevelWarning: {
16528
- return /* @__PURE__ */ jsx131(Error2, { sx: { color: "orange" } });
18473
+ return /* @__PURE__ */ jsx132(Error2, { sx: { color: "orange" } });
16529
18474
  }
16530
18475
  default: {
16531
- return /* @__PURE__ */ jsx131(CheckCircle, { sx: { color: "lightgray" } });
18476
+ return /* @__PURE__ */ jsx132(CheckCircle, { sx: { color: "lightgray" } });
16532
18477
  }
16533
18478
  }
16534
18479
  };
@@ -16536,39 +18481,39 @@ var StatusIcon = ({ errorLevel }) => {
16536
18481
  // src/components/event-details/iam-event-detail.tsx
16537
18482
  import { CheckCircle as CheckCircle2, Error as ErrorIcon, Warning } from "@mui/icons-material";
16538
18483
  import { Box as Box8, Chip, Typography as Typography5 } from "@mui/material";
16539
- import { jsx as jsx132, jsxs as jsxs124 } from "react/jsx-runtime";
18484
+ import { jsx as jsx133, jsxs as jsxs124 } from "react/jsx-runtime";
16540
18485
  var DetailRow = ({ content, label }) => /* @__PURE__ */ jsxs124(Box8, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
16541
- /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
16542
- /* @__PURE__ */ jsx132(Box8, { children: typeof content === "string" ? /* @__PURE__ */ jsx132(Typography5, { sx: { color: "text.primary", wordBreak: "break-word" }, variant: "caption", children: content }) : content })
18486
+ /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
18487
+ /* @__PURE__ */ jsx133(Box8, { children: typeof content === "string" ? /* @__PURE__ */ jsx133(Typography5, { sx: { color: "text.primary", wordBreak: "break-word" }, variant: "caption", children: content }) : content })
16543
18488
  ] });
16544
18489
  var PermissionIcon = ({ status }) => {
16545
18490
  switch (status) {
16546
18491
  case "explicitly_allowed":
16547
18492
  case "implicitly_allowed": {
16548
- return /* @__PURE__ */ jsx132(CheckCircle2, { sx: { color: "success.main", fontSize: "1rem" } });
18493
+ return /* @__PURE__ */ jsx133(CheckCircle2, { sx: { color: "success.main", fontSize: "1rem" } });
16549
18494
  }
16550
18495
  case "explicitly_denied": {
16551
- return /* @__PURE__ */ jsx132(ErrorIcon, { sx: { color: "error.main", fontSize: "1rem" } });
18496
+ return /* @__PURE__ */ jsx133(ErrorIcon, { sx: { color: "error.main", fontSize: "1rem" } });
16552
18497
  }
16553
18498
  case "implicitly_denied": {
16554
- return /* @__PURE__ */ jsx132(Warning, { sx: { color: "warning.main", fontSize: "1rem" } });
18499
+ return /* @__PURE__ */ jsx133(Warning, { sx: { color: "warning.main", fontSize: "1rem" } });
16555
18500
  }
16556
18501
  }
16557
18502
  };
16558
18503
  var IAMEventDetail = ({ event }) => {
16559
18504
  const payloadString = event.attributes?.payload;
16560
18505
  if (!payloadString) {
16561
- return /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", variant: "caption", children: "No IAM policy evaluation data available" });
18506
+ return /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "No IAM policy evaluation data available" });
16562
18507
  }
16563
18508
  const parsedIAM = parseIAMEvent(payloadString);
16564
18509
  if (!parsedIAM) {
16565
- return /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", variant: "caption", children: "Failed to parse IAM event data" });
18510
+ return /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Failed to parse IAM event data" });
16566
18511
  }
16567
18512
  return /* @__PURE__ */ jsxs124(Box8, { children: [
16568
- /* @__PURE__ */ jsx132(Box8, { sx: { mb: 1.5 }, children: /* @__PURE__ */ jsx132(
18513
+ /* @__PURE__ */ jsx133(Box8, { sx: { mb: 1.5 }, children: /* @__PURE__ */ jsx133(
16569
18514
  Chip,
16570
18515
  {
16571
- icon: /* @__PURE__ */ jsx132(PermissionIcon, { status: parsedIAM.permission }),
18516
+ icon: /* @__PURE__ */ jsx133(PermissionIcon, { status: parsedIAM.permission }),
16572
18517
  label: formatPermissionStatus(parsedIAM.permission),
16573
18518
  size: "small",
16574
18519
  sx: {
@@ -16578,36 +18523,36 @@ var IAMEventDetail = ({ event }) => {
16578
18523
  variant: "outlined"
16579
18524
  }
16580
18525
  ) }),
16581
- /* @__PURE__ */ jsx132(DetailRow, { content: `${parsedIAM.service}:${parsedIAM.operation}`, label: "Operation" }),
16582
- /* @__PURE__ */ jsx132(DetailRow, { content: parsedIAM.principal, label: "Principal" }),
16583
- parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsx132(
18526
+ /* @__PURE__ */ jsx133(DetailRow, { content: `${parsedIAM.service}:${parsedIAM.operation}`, label: "Operation" }),
18527
+ /* @__PURE__ */ jsx133(DetailRow, { content: parsedIAM.principal, label: "Principal" }),
18528
+ parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsx133(
16584
18529
  DetailRow,
16585
18530
  {
16586
- content: /* @__PURE__ */ jsx132(Box8, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx132(Typography5, { sx: { color: "text.primary", display: "block" }, variant: "caption", children: action }, action)) }),
18531
+ content: /* @__PURE__ */ jsx133(Box8, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx133(Typography5, { sx: { color: "text.primary", display: "block" }, variant: "caption", children: action }, action)) }),
16587
18532
  label: "Actions"
16588
18533
  }
16589
18534
  ),
16590
- parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsx132(
18535
+ parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsx133(
16591
18536
  DetailRow,
16592
18537
  {
16593
- content: /* @__PURE__ */ jsx132(Box8, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx132(Typography5, { sx: { color: "text.primary", display: "block", wordBreak: "break-all" }, variant: "caption", children: resource }, resource)) }),
18538
+ content: /* @__PURE__ */ jsx133(Box8, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx133(Typography5, { sx: { color: "text.primary", display: "block", wordBreak: "break-all" }, variant: "caption", children: resource }, resource)) }),
16594
18539
  label: "Resources"
16595
18540
  }
16596
18541
  ),
16597
18542
  (parsedIAM.details.explicitAllows !== void 0 || parsedIAM.details.explicitDenies !== void 0 || parsedIAM.details.implicitDenies !== void 0) && /* @__PURE__ */ jsxs124(Box8, { sx: { mt: 1.5 }, children: [
16598
- /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", sx: { display: "block", fontWeight: 600, mb: 0.5 }, variant: "caption", children: "Policy Evaluation" }),
18543
+ /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", sx: { display: "block", fontWeight: 600, mb: 0.5 }, variant: "caption", children: "Policy Evaluation" }),
16599
18544
  /* @__PURE__ */ jsxs124(Box8, { sx: { display: "grid", gap: 1, gridTemplateColumns: "repeat(3, 1fr)" }, children: [
16600
18545
  parsedIAM.details.explicitAllows !== void 0 && /* @__PURE__ */ jsxs124(Box8, { sx: { textAlign: "center" }, children: [
16601
- /* @__PURE__ */ jsx132(Typography5, { color: "success.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.explicitAllows }),
16602
- /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", variant: "caption", children: "Explicit Allows" })
18546
+ /* @__PURE__ */ jsx133(Typography5, { color: "success.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.explicitAllows }),
18547
+ /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Explicit Allows" })
16603
18548
  ] }),
16604
18549
  parsedIAM.details.explicitDenies !== void 0 && /* @__PURE__ */ jsxs124(Box8, { sx: { textAlign: "center" }, children: [
16605
- /* @__PURE__ */ jsx132(Typography5, { color: "error.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.explicitDenies }),
16606
- /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", variant: "caption", children: "Explicit Denies" })
18550
+ /* @__PURE__ */ jsx133(Typography5, { color: "error.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.explicitDenies }),
18551
+ /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Explicit Denies" })
16607
18552
  ] }),
16608
18553
  parsedIAM.details.implicitDenies !== void 0 && /* @__PURE__ */ jsxs124(Box8, { sx: { textAlign: "center" }, children: [
16609
- /* @__PURE__ */ jsx132(Typography5, { color: "warning.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.implicitDenies }),
16610
- /* @__PURE__ */ jsx132(Typography5, { color: "text.secondary", variant: "caption", children: "Implicit Denies" })
18554
+ /* @__PURE__ */ jsx133(Typography5, { color: "warning.main", sx: { display: "block", fontWeight: "bold" }, variant: "subtitle2", children: parsedIAM.details.implicitDenies }),
18555
+ /* @__PURE__ */ jsx133(Typography5, { color: "text.secondary", variant: "caption", children: "Implicit Denies" })
16611
18556
  ] })
16612
18557
  ] })
16613
18558
  ] })
@@ -16617,19 +18562,19 @@ var IAMEventDetail = ({ event }) => {
16617
18562
  // src/components/event-details/iam-permission-detail.tsx
16618
18563
  import { KeyboardArrowDown, KeyboardArrowRight } from "@mui/icons-material";
16619
18564
  import { Box as Box9, Chip as Chip2, IconButton as IconButton2, Typography as Typography6 } from "@mui/material";
16620
- import { useMemo as useMemo7, useState as useState11 } from "react";
16621
- import { jsx as jsx133, jsxs as jsxs125 } from "react/jsx-runtime";
18565
+ import { useMemo as useMemo8, useState as useState11 } from "react";
18566
+ import { jsx as jsx134, jsxs as jsxs125 } from "react/jsx-runtime";
16622
18567
  var getChipColors = (status) => ({
16623
18568
  backgroundColor: getPermissionStatusColor(status),
16624
18569
  color: "white"
16625
18570
  });
16626
18571
  var LabelValue = ({ label, value }) => /* @__PURE__ */ jsxs125(Box9, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
16627
- /* @__PURE__ */ jsx133(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
16628
- /* @__PURE__ */ jsx133(Typography6, { sx: { wordBreak: "break-all" }, variant: "caption", children: value })
18572
+ /* @__PURE__ */ jsx134(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
18573
+ /* @__PURE__ */ jsx134(Typography6, { sx: { wordBreak: "break-all" }, variant: "caption", children: value })
16629
18574
  ] });
16630
18575
  var IAMPermissionItem = ({ event }) => {
16631
18576
  const [isOpen, setIsOpen] = useState11(false);
16632
- const parsedData = useMemo7(() => {
18577
+ const parsedData = useMemo8(() => {
16633
18578
  const payloadString = event.attributes?.payload;
16634
18579
  if (!payloadString) return;
16635
18580
  const parsedIAM2 = parseIAMEvent(payloadString);
@@ -16642,10 +18587,10 @@ var IAMPermissionItem = ({ event }) => {
16642
18587
  const { chipColors, parsedIAM } = parsedData;
16643
18588
  return /* @__PURE__ */ jsxs125(Box9, { sx: { mb: 0.5 }, children: [
16644
18589
  /* @__PURE__ */ jsxs125(Box9, { sx: { alignItems: "center", display: "flex", gap: 1 }, children: [
16645
- /* @__PURE__ */ jsx133(IconButton2, { onClick: () => {
18590
+ /* @__PURE__ */ jsx134(IconButton2, { onClick: () => {
16646
18591
  setIsOpen(!isOpen);
16647
- }, size: "small", sx: { p: 0 }, children: isOpen ? /* @__PURE__ */ jsx133(KeyboardArrowDown, { sx: { fontSize: 16 } }) : /* @__PURE__ */ jsx133(KeyboardArrowRight, { sx: { fontSize: 16 } }) }),
16648
- /* @__PURE__ */ jsx133(Chip2, { label: formatPermissionStatus(parsedIAM.permission), size: "small", sx: { ...chipColors, fontWeight: 500 } }),
18592
+ }, size: "small", sx: { p: 0 }, children: isOpen ? /* @__PURE__ */ jsx134(KeyboardArrowDown, { sx: { fontSize: 16 } }) : /* @__PURE__ */ jsx134(KeyboardArrowRight, { sx: { fontSize: 16 } }) }),
18593
+ /* @__PURE__ */ jsx134(Chip2, { label: formatPermissionStatus(parsedIAM.permission), size: "small", sx: { ...chipColors, fontWeight: 500 } }),
16649
18594
  /* @__PURE__ */ jsxs125(Typography6, { color: "text.secondary", noWrap: true, sx: { flex: 1, overflow: "hidden", textOverflow: "ellipsis" }, variant: "caption", children: [
16650
18595
  parsedIAM.service,
16651
18596
  ":",
@@ -16653,28 +18598,28 @@ var IAMPermissionItem = ({ event }) => {
16653
18598
  ] })
16654
18599
  ] }),
16655
18600
  isOpen && /* @__PURE__ */ jsxs125(Box9, { sx: { borderColor: "divider", borderLeft: "2px solid", ml: 1, mt: 0.5, pl: 1.5, py: 0.5 }, children: [
16656
- /* @__PURE__ */ jsx133(LabelValue, { label: "Principal", value: parsedIAM.principal }),
18601
+ /* @__PURE__ */ jsx134(LabelValue, { label: "Principal", value: parsedIAM.principal }),
16657
18602
  parsedIAM.details.actions && parsedIAM.details.actions.length > 0 && /* @__PURE__ */ jsxs125(Box9, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
16658
- /* @__PURE__ */ jsx133(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: "Actions" }),
16659
- /* @__PURE__ */ jsx133(Box9, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx133(Typography6, { sx: { display: "block" }, variant: "caption", children: action }, action)) })
18603
+ /* @__PURE__ */ jsx134(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: "Actions" }),
18604
+ /* @__PURE__ */ jsx134(Box9, { children: parsedIAM.details.actions.map((action) => /* @__PURE__ */ jsx134(Typography6, { sx: { display: "block" }, variant: "caption", children: action }, action)) })
16660
18605
  ] }),
16661
18606
  parsedIAM.details.resources && parsedIAM.details.resources.length > 0 && /* @__PURE__ */ jsxs125(Box9, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr" }, children: [
16662
- /* @__PURE__ */ jsx133(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: "Resources" }),
16663
- /* @__PURE__ */ jsx133(Box9, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx133(Typography6, { sx: { display: "block", wordBreak: "break-all" }, variant: "caption", children: resource }, resource)) })
18607
+ /* @__PURE__ */ jsx134(Typography6, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: "Resources" }),
18608
+ /* @__PURE__ */ jsx134(Box9, { children: parsedIAM.details.resources.map((resource) => /* @__PURE__ */ jsx134(Typography6, { sx: { display: "block", wordBreak: "break-all" }, variant: "caption", children: resource }, resource)) })
16664
18609
  ] })
16665
18610
  ] })
16666
18611
  ] });
16667
18612
  };
16668
- var IAMPermissionDetail = ({ events }) => /* @__PURE__ */ jsx133(Box9, { children: events.map((event) => /* @__PURE__ */ jsx133(IAMPermissionItem, { event }, `${event.span_id}-${event.event_id}`)) });
18613
+ var IAMPermissionDetail = ({ events }) => /* @__PURE__ */ jsx134(Box9, { children: events.map((event) => /* @__PURE__ */ jsx134(IAMPermissionItem, { event }, `${event.span_id}-${event.event_id}`)) });
16669
18614
 
16670
18615
  // src/components/event-details/payload-viewer.tsx
16671
18616
  import { Box as Box11, useTheme as useTheme3 } from "@mui/material";
16672
18617
 
16673
18618
  // node_modules/@textea/json-viewer/dist/index.mjs
16674
18619
  var import_copy_to_clipboard = __toESM(require_copy_to_clipboard(), 1);
16675
- import { jsx as jsx134, jsxs as jsxs126, Fragment as Fragment7 } from "react/jsx-runtime";
18620
+ import { jsx as jsx135, jsxs as jsxs126, Fragment as Fragment8 } from "react/jsx-runtime";
16676
18621
  import { Box as Box10, InputBase, NoSsr, SvgIcon, createTheme, ThemeProvider, Paper as Paper2 } from "@mui/material";
16677
- import { createContext as createContext9, useContext as useContext16, useState as useState12, useRef as useRef12, useCallback as useCallback8, useMemo as useMemo8, useEffect as useEffect16, memo as memo9 } from "react";
18622
+ import { createContext as createContext10, useContext as useContext17, useState as useState12, useRef as useRef13, useCallback as useCallback8, useMemo as useMemo9, useEffect as useEffect17, memo as memo9 } from "react";
16678
18623
  import { create, useStore, createStore } from "zustand";
16679
18624
  function r(e2) {
16680
18625
  var t2, f2, n2 = "";
@@ -16790,10 +18735,10 @@ var createJsonViewerStore = (props) => {
16790
18735
  };
16791
18736
  });
16792
18737
  };
16793
- var JsonViewerStoreContext = createContext9(void 0);
18738
+ var JsonViewerStoreContext = createContext10(void 0);
16794
18739
  JsonViewerStoreContext.Provider;
16795
18740
  var useJsonViewerStore = (selector2, equalityFn) => {
16796
- const store = useContext16(JsonViewerStoreContext);
18741
+ const store = useContext17(JsonViewerStoreContext);
16797
18742
  return useStore(store, selector2, equalityFn);
16798
18743
  };
16799
18744
  var useTextColor = () => {
@@ -16919,7 +18864,7 @@ async function copyString(value) {
16919
18864
  function useClipboard() {
16920
18865
  let { timeout = 2e3 } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
16921
18866
  const [copied, setCopied] = useState12(false);
16922
- const copyTimeout = useRef12(null);
18867
+ const copyTimeout = useRef13(null);
16923
18868
  const handleCopyResult = useCallback8((value) => {
16924
18869
  const current = copyTimeout.current;
16925
18870
  if (current) {
@@ -16966,7 +18911,7 @@ function useClipboard() {
16966
18911
  }
16967
18912
  function useIsCycleReference(path, value) {
16968
18913
  const rootValue = useJsonViewerStore((store) => store.value);
16969
- return useMemo8(() => isCycleReference(rootValue, path, value), [
18914
+ return useMemo9(() => isCycleReference(rootValue, path, value), [
16970
18915
  path,
16971
18916
  value,
16972
18917
  rootValue
@@ -16979,7 +18924,7 @@ function useInspect(path, value, nestedIndex) {
16979
18924
  const setInspectCache = useJsonViewerStore((store) => store.setInspectCache);
16980
18925
  const defaultInspectDepth = useJsonViewerStore((store) => store.defaultInspectDepth);
16981
18926
  const defaultInspectControl = useJsonViewerStore((store) => store.defaultInspectControl);
16982
- useEffect16(() => {
18927
+ useEffect17(() => {
16983
18928
  const inspect2 = getInspectCache(path, nestedIndex);
16984
18929
  if (inspect2 !== void 0) {
16985
18930
  return;
@@ -17027,7 +18972,7 @@ function useInspect(path, value, nestedIndex) {
17027
18972
  setInspect
17028
18973
  ];
17029
18974
  }
17030
- var DataBox = (props) => /* @__PURE__ */ jsx134(Box10, {
18975
+ var DataBox = (props) => /* @__PURE__ */ jsx135(Box10, {
17031
18976
  component: "div",
17032
18977
  ...props,
17033
18978
  sx: {
@@ -17038,7 +18983,7 @@ var DataBox = (props) => /* @__PURE__ */ jsx134(Box10, {
17038
18983
  var DataTypeLabel = (param) => {
17039
18984
  let { dataType, enable = true } = param;
17040
18985
  if (!enable) return null;
17041
- return /* @__PURE__ */ jsx134(DataBox, {
18986
+ return /* @__PURE__ */ jsx135(DataBox, {
17042
18987
  className: "data-type-label",
17043
18988
  sx: {
17044
18989
  mx: 0.5,
@@ -17062,12 +19007,12 @@ function defineEasyType(param) {
17062
19007
  color: color2
17063
19008
  },
17064
19009
  children: [
17065
- displayTypeLabel && storeDisplayDataTypes && /* @__PURE__ */ jsx134(DataTypeLabel, {
19010
+ displayTypeLabel && storeDisplayDataTypes && /* @__PURE__ */ jsx135(DataTypeLabel, {
17066
19011
  dataType: type
17067
19012
  }),
17068
- /* @__PURE__ */ jsx134(DataBox, {
19013
+ /* @__PURE__ */ jsx135(DataBox, {
17069
19014
  className: "".concat(type, "-value"),
17070
- children: /* @__PURE__ */ jsx134(Render, {
19015
+ children: /* @__PURE__ */ jsx135(Render, {
17071
19016
  path: props.path,
17072
19017
  inspect: props.inspect,
17073
19018
  setInspect: props.setInspect,
@@ -17107,7 +19052,7 @@ function defineEasyType(param) {
17107
19052
  }, [
17108
19053
  setValue
17109
19054
  ]);
17110
- return /* @__PURE__ */ jsx134(InputBase, {
19055
+ return /* @__PURE__ */ jsx135(InputBase, {
17111
19056
  autoFocus: true,
17112
19057
  value,
17113
19058
  onChange: handleChange,
@@ -17147,7 +19092,7 @@ var booleanType = defineEasyType({
17147
19092
  },
17148
19093
  Renderer: (param) => {
17149
19094
  let { value } = param;
17150
- return /* @__PURE__ */ jsx134(Fragment7, {
19095
+ return /* @__PURE__ */ jsx135(Fragment8, {
17151
19096
  children: value ? "true" : "false"
17152
19097
  });
17153
19098
  }
@@ -17166,7 +19111,7 @@ var dateType = defineEasyType({
17166
19111
  colorKey: "base0D",
17167
19112
  Renderer: (param) => {
17168
19113
  let { value } = param;
17169
- return /* @__PURE__ */ jsx134(Fragment7, {
19114
+ return /* @__PURE__ */ jsx135(Fragment8, {
17170
19115
  children: value.toLocaleTimeString("en-us", displayOptions)
17171
19116
  });
17172
19117
  }
@@ -17197,7 +19142,7 @@ var rb = "}";
17197
19142
  var PreFunctionType = (props) => {
17198
19143
  return /* @__PURE__ */ jsxs126(NoSsr, {
17199
19144
  children: [
17200
- /* @__PURE__ */ jsx134(DataTypeLabel, {
19145
+ /* @__PURE__ */ jsx135(DataTypeLabel, {
17201
19146
  dataType: "function"
17202
19147
  }),
17203
19148
  /* @__PURE__ */ jsxs126(Box10, {
@@ -17216,8 +19161,8 @@ var PreFunctionType = (props) => {
17216
19161
  });
17217
19162
  };
17218
19163
  var PostFunctionType = () => {
17219
- return /* @__PURE__ */ jsx134(NoSsr, {
17220
- children: /* @__PURE__ */ jsx134(Box10, {
19164
+ return /* @__PURE__ */ jsx135(NoSsr, {
19165
+ children: /* @__PURE__ */ jsx135(Box10, {
17221
19166
  component: "span",
17222
19167
  className: "data-function-end",
17223
19168
  children: rb
@@ -17226,15 +19171,15 @@ var PostFunctionType = () => {
17226
19171
  };
17227
19172
  var FunctionType = (props) => {
17228
19173
  const functionColor = useJsonViewerStore((store) => store.colorspace.base05);
17229
- return /* @__PURE__ */ jsx134(NoSsr, {
17230
- children: /* @__PURE__ */ jsx134(Box10, {
19174
+ return /* @__PURE__ */ jsx135(NoSsr, {
19175
+ children: /* @__PURE__ */ jsx135(Box10, {
17231
19176
  className: "data-function",
17232
19177
  sx: {
17233
19178
  display: props.inspect ? "block" : "inline-block",
17234
19179
  pl: props.inspect ? 2 : 0,
17235
19180
  color: functionColor
17236
19181
  },
17237
- children: props.inspect ? functionBody(props.value) : /* @__PURE__ */ jsx134(Box10, {
19182
+ children: props.inspect ? functionBody(props.value) : /* @__PURE__ */ jsx135(Box10, {
17238
19183
  component: "span",
17239
19184
  className: "data-function-body",
17240
19185
  onClick: () => props.setInspect(true),
@@ -17262,7 +19207,7 @@ var nullType = defineEasyType({
17262
19207
  displayTypeLabel: false,
17263
19208
  Renderer: () => {
17264
19209
  const backgroundColor = useJsonViewerStore((store) => store.colorspace.base02);
17265
- return /* @__PURE__ */ jsx134(Box10, {
19210
+ return /* @__PURE__ */ jsx135(Box10, {
17266
19211
  sx: {
17267
19212
  fontSize: "0.8rem",
17268
19213
  backgroundColor,
@@ -17285,7 +19230,7 @@ var nanType = defineEasyType({
17285
19230
  deserialize: (value) => parseFloat(value),
17286
19231
  Renderer: () => {
17287
19232
  const backgroundColor = useJsonViewerStore((store) => store.colorspace.base02);
17288
- return /* @__PURE__ */ jsx134(Box10, {
19233
+ return /* @__PURE__ */ jsx135(Box10, {
17289
19234
  sx: {
17290
19235
  backgroundColor,
17291
19236
  fontSize: "0.8rem",
@@ -17305,7 +19250,7 @@ var floatType = defineEasyType({
17305
19250
  deserialize: (value) => parseFloat(value),
17306
19251
  Renderer: (param) => {
17307
19252
  let { value } = param;
17308
- return /* @__PURE__ */ jsx134(Fragment7, {
19253
+ return /* @__PURE__ */ jsx135(Fragment8, {
17309
19254
  children: value
17310
19255
  });
17311
19256
  }
@@ -17319,7 +19264,7 @@ var intType = defineEasyType({
17319
19264
  deserialize: (value) => parseFloat(value),
17320
19265
  Renderer: (param) => {
17321
19266
  let { value } = param;
17322
- return /* @__PURE__ */ jsx134(Fragment7, {
19267
+ return /* @__PURE__ */ jsx135(Fragment8, {
17323
19268
  children: value
17324
19269
  });
17325
19270
  }
@@ -17332,16 +19277,16 @@ var bigIntType = defineEasyType({
17332
19277
  deserialize: (value) => BigInt(value.replace(/\D/g, "")),
17333
19278
  Renderer: (param) => {
17334
19279
  let { value } = param;
17335
- return /* @__PURE__ */ jsx134(Fragment7, {
19280
+ return /* @__PURE__ */ jsx135(Fragment8, {
17336
19281
  children: "".concat(value, "n")
17337
19282
  });
17338
19283
  }
17339
19284
  });
17340
19285
  var BaseIcon = (param) => {
17341
19286
  let { d: d2, ...props } = param;
17342
- return /* @__PURE__ */ jsx134(SvgIcon, {
19287
+ return /* @__PURE__ */ jsx135(SvgIcon, {
17343
19288
  ...props,
17344
- children: /* @__PURE__ */ jsx134("path", {
19289
+ children: /* @__PURE__ */ jsx135("path", {
17345
19290
  d: d2
17346
19291
  })
17347
19292
  });
@@ -17356,55 +19301,55 @@ var Edit = "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.3
17356
19301
  var ExpandMore = "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z";
17357
19302
  var Delete = "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5l-1-1h-5l-1 1H5v2h14V4z";
17358
19303
  var AddBoxIcon = (props) => {
17359
- return /* @__PURE__ */ jsx134(BaseIcon, {
19304
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17360
19305
  d: AddBox,
17361
19306
  ...props
17362
19307
  });
17363
19308
  };
17364
19309
  var CheckIcon = (props) => {
17365
- return /* @__PURE__ */ jsx134(BaseIcon, {
19310
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17366
19311
  d: Check,
17367
19312
  ...props
17368
19313
  });
17369
19314
  };
17370
19315
  var ChevronRightIcon = (props) => {
17371
- return /* @__PURE__ */ jsx134(BaseIcon, {
19316
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17372
19317
  d: ChevronRight,
17373
19318
  ...props
17374
19319
  });
17375
19320
  };
17376
19321
  var CircularArrowsIcon = (props) => {
17377
- return /* @__PURE__ */ jsx134(BaseIcon, {
19322
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17378
19323
  d: CircularArrows,
17379
19324
  ...props
17380
19325
  });
17381
19326
  };
17382
19327
  var CloseIcon = (props) => {
17383
- return /* @__PURE__ */ jsx134(BaseIcon, {
19328
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17384
19329
  d: Close,
17385
19330
  ...props
17386
19331
  });
17387
19332
  };
17388
19333
  var ContentCopyIcon = (props) => {
17389
- return /* @__PURE__ */ jsx134(BaseIcon, {
19334
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17390
19335
  d: ContentCopy,
17391
19336
  ...props
17392
19337
  });
17393
19338
  };
17394
19339
  var EditIcon = (props) => {
17395
- return /* @__PURE__ */ jsx134(BaseIcon, {
19340
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17396
19341
  d: Edit,
17397
19342
  ...props
17398
19343
  });
17399
19344
  };
17400
19345
  var ExpandMoreIcon = (props) => {
17401
- return /* @__PURE__ */ jsx134(BaseIcon, {
19346
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17402
19347
  d: ExpandMore,
17403
19348
  ...props
17404
19349
  });
17405
19350
  };
17406
19351
  var DeleteIcon = (props) => {
17407
- return /* @__PURE__ */ jsx134(BaseIcon, {
19352
+ return /* @__PURE__ */ jsx135(BaseIcon, {
17408
19353
  d: Delete,
17409
19354
  ...props
17410
19355
  });
@@ -17427,17 +19372,17 @@ function inspectMetadata(value) {
17427
19372
  var PreObjectType = (props) => {
17428
19373
  const metadataColor = useJsonViewerStore((store) => store.colorspace.base04);
17429
19374
  const textColor = useTextColor();
17430
- const isArrayLike = useMemo8(() => Array.isArray(props.value) || props.value instanceof Set, [
19375
+ const isArrayLike = useMemo9(() => Array.isArray(props.value) || props.value instanceof Set, [
17431
19376
  props.value
17432
19377
  ]);
17433
- const isEmptyValue = useMemo8(() => getValueSize(props.value) === 0, [
19378
+ const isEmptyValue = useMemo9(() => getValueSize(props.value) === 0, [
17434
19379
  props.value
17435
19380
  ]);
17436
- const sizeOfValue = useMemo8(() => inspectMetadata(props.value), [
19381
+ const sizeOfValue = useMemo9(() => inspectMetadata(props.value), [
17437
19382
  props.value
17438
19383
  ]);
17439
19384
  const displaySize = useJsonViewerStore((store) => store.displaySize);
17440
- const shouldDisplaySize = useMemo8(() => typeof displaySize === "function" ? displaySize(props.path, props.value) : displaySize, [
19385
+ const shouldDisplaySize = useMemo9(() => typeof displaySize === "function" ? displaySize(props.path, props.value) : displaySize, [
17441
19386
  displaySize,
17442
19387
  props.path,
17443
19388
  props.value
@@ -17451,7 +19396,7 @@ var PreObjectType = (props) => {
17451
19396
  },
17452
19397
  children: [
17453
19398
  isArrayLike ? arrayLb : objectLb,
17454
- shouldDisplaySize && props.inspect && !isEmptyValue && /* @__PURE__ */ jsx134(Box10, {
19399
+ shouldDisplaySize && props.inspect && !isEmptyValue && /* @__PURE__ */ jsx135(Box10, {
17455
19400
  component: "span",
17456
19401
  sx: {
17457
19402
  pl: 0.5,
@@ -17461,16 +19406,16 @@ var PreObjectType = (props) => {
17461
19406
  },
17462
19407
  children: sizeOfValue
17463
19408
  }),
17464
- isTrap && !props.inspect && /* @__PURE__ */ jsxs126(Fragment7, {
19409
+ isTrap && !props.inspect && /* @__PURE__ */ jsxs126(Fragment8, {
17465
19410
  children: [
17466
- /* @__PURE__ */ jsx134(CircularArrowsIcon, {
19411
+ /* @__PURE__ */ jsx135(CircularArrowsIcon, {
17467
19412
  sx: {
17468
19413
  fontSize: 12,
17469
19414
  color: textColor,
17470
19415
  mx: 0.5
17471
19416
  }
17472
19417
  }),
17473
- /* @__PURE__ */ jsx134(DataBox, {
19418
+ /* @__PURE__ */ jsx135(DataBox, {
17474
19419
  sx: {
17475
19420
  cursor: "pointer",
17476
19421
  userSelect: "none"
@@ -17485,17 +19430,17 @@ var PreObjectType = (props) => {
17485
19430
  var PostObjectType = (props) => {
17486
19431
  const metadataColor = useJsonViewerStore((store) => store.colorspace.base04);
17487
19432
  const textColor = useTextColor();
17488
- const isArrayLike = useMemo8(() => Array.isArray(props.value) || props.value instanceof Set, [
19433
+ const isArrayLike = useMemo9(() => Array.isArray(props.value) || props.value instanceof Set, [
17489
19434
  props.value
17490
19435
  ]);
17491
- const isEmptyValue = useMemo8(() => getValueSize(props.value) === 0, [
19436
+ const isEmptyValue = useMemo9(() => getValueSize(props.value) === 0, [
17492
19437
  props.value
17493
19438
  ]);
17494
- const sizeOfValue = useMemo8(() => inspectMetadata(props.value), [
19439
+ const sizeOfValue = useMemo9(() => inspectMetadata(props.value), [
17495
19440
  props.value
17496
19441
  ]);
17497
19442
  const displaySize = useJsonViewerStore((store) => store.displaySize);
17498
- const shouldDisplaySize = useMemo8(() => typeof displaySize === "function" ? displaySize(props.path, props.value) : displaySize, [
19443
+ const shouldDisplaySize = useMemo9(() => typeof displaySize === "function" ? displaySize(props.path, props.value) : displaySize, [
17499
19444
  displaySize,
17500
19445
  props.path,
17501
19446
  props.value
@@ -17511,7 +19456,7 @@ var PostObjectType = (props) => {
17511
19456
  },
17512
19457
  children: [
17513
19458
  isArrayLike ? arrayRb : objectRb,
17514
- shouldDisplaySize && (isEmptyValue || !props.inspect) ? /* @__PURE__ */ jsx134(Box10, {
19459
+ shouldDisplaySize && (isEmptyValue || !props.inspect) ? /* @__PURE__ */ jsx135(Box10, {
17515
19460
  component: "span",
17516
19461
  sx: {
17517
19462
  pl: 0.5,
@@ -17534,7 +19479,7 @@ var ObjectType = (props) => {
17534
19479
  const isTrap = useIsCycleReference(props.path, props.value);
17535
19480
  const [displayLength, setDisplayLength] = useState12(useJsonViewerStore((store) => store.maxDisplayLength));
17536
19481
  const objectSortKeys = useJsonViewerStore((store) => store.objectSortKeys);
17537
- const elements = useMemo8(() => {
19482
+ const elements = useMemo9(() => {
17538
19483
  if (!props.inspect) {
17539
19484
  return null;
17540
19485
  }
@@ -17551,7 +19496,7 @@ var ObjectType = (props) => {
17551
19496
  ...props.path,
17552
19497
  key
17553
19498
  ];
17554
- elements3.push(/* @__PURE__ */ jsx134(DataKeyPair, {
19499
+ elements3.push(/* @__PURE__ */ jsx135(DataKeyPair, {
17555
19500
  path,
17556
19501
  value: value2,
17557
19502
  prevValue: props.prevValue instanceof Map ? props.prevValue.get(k2) : void 0,
@@ -17567,7 +19512,7 @@ var ObjectType = (props) => {
17567
19512
  while (true) {
17568
19513
  const nextResult = iterator2.next();
17569
19514
  var _nextResult_done;
17570
- elements3.push(/* @__PURE__ */ jsx134(DataKeyPair, {
19515
+ elements3.push(/* @__PURE__ */ jsx135(DataKeyPair, {
17571
19516
  path: [
17572
19517
  ...props.path,
17573
19518
  "iterator:".concat(count2)
@@ -17595,7 +19540,7 @@ var ObjectType = (props) => {
17595
19540
  ...props.path,
17596
19541
  index
17597
19542
  ];
17598
- return /* @__PURE__ */ jsx134(DataKeyPair, {
19543
+ return /* @__PURE__ */ jsx135(DataKeyPair, {
17599
19544
  path,
17600
19545
  value: value2,
17601
19546
  prevValue: Array.isArray(props.prevValue) ? props.prevValue[index] : void 0,
@@ -17627,7 +19572,7 @@ var ObjectType = (props) => {
17627
19572
  const prevElements = Array.isArray(props.prevValue) ? segmentArray(props.prevValue, groupArraysAfterLength) : void 0;
17628
19573
  const elementsLastIndex = elements3.length - 1;
17629
19574
  return elements3.map((list, index) => {
17630
- return /* @__PURE__ */ jsx134(DataKeyPair, {
19575
+ return /* @__PURE__ */ jsx135(DataKeyPair, {
17631
19576
  path: props.path,
17632
19577
  value: list,
17633
19578
  nestedIndex: index,
@@ -17654,7 +19599,7 @@ var ObjectType = (props) => {
17654
19599
  ...props.path,
17655
19600
  key
17656
19601
  ];
17657
- return /* @__PURE__ */ jsx134(DataKeyPair, {
19602
+ return /* @__PURE__ */ jsx135(DataKeyPair, {
17658
19603
  path,
17659
19604
  value: value2,
17660
19605
  prevValue: (_props_prevValue = props.prevValue) === null || _props_prevValue === void 0 ? void 0 : _props_prevValue[key],
@@ -17695,13 +19640,13 @@ var ObjectType = (props) => {
17695
19640
  const marginLeft = props.inspect ? 0.6 : 0;
17696
19641
  const width = useJsonViewerStore((store) => store.indentWidth);
17697
19642
  const indentWidth = props.inspect ? width - marginLeft : width;
17698
- const isEmptyValue = useMemo8(() => getValueSize(props.value) === 0, [
19643
+ const isEmptyValue = useMemo9(() => getValueSize(props.value) === 0, [
17699
19644
  props.value
17700
19645
  ]);
17701
19646
  if (isEmptyValue) {
17702
19647
  return null;
17703
19648
  }
17704
- return /* @__PURE__ */ jsx134(Box10, {
19649
+ return /* @__PURE__ */ jsx135(Box10, {
17705
19650
  className: "data-object",
17706
19651
  sx: {
17707
19652
  display: props.inspect ? "block" : "inline-block",
@@ -17710,7 +19655,7 @@ var ObjectType = (props) => {
17710
19655
  color: keyColor,
17711
19656
  borderLeft: props.inspect ? "1px solid ".concat(borderColor) : "none"
17712
19657
  },
17713
- children: props.inspect ? elements : !isTrap && /* @__PURE__ */ jsx134(Box10, {
19658
+ children: props.inspect ? elements : !isTrap && /* @__PURE__ */ jsx135(Box10, {
17714
19659
  component: "span",
17715
19660
  className: "data-object-body",
17716
19661
  onClick: () => props.setInspect(true),
@@ -17760,7 +19705,7 @@ var stringType = defineEasyType({
17760
19705
  children: [
17761
19706
  '"',
17762
19707
  value,
17763
- hasRest && !showRest && /* @__PURE__ */ jsx134(Box10, {
19708
+ hasRest && !showRest && /* @__PURE__ */ jsx135(Box10, {
17764
19709
  component: "span",
17765
19710
  sx: {
17766
19711
  padding: 0.5
@@ -17779,7 +19724,7 @@ var undefinedType = defineEasyType({
17779
19724
  displayTypeLabel: false,
17780
19725
  Renderer: () => {
17781
19726
  const backgroundColor = useJsonViewerStore((store) => store.colorspace.base02);
17782
- return /* @__PURE__ */ jsx134(Box10, {
19727
+ return /* @__PURE__ */ jsx135(Box10, {
17783
19728
  sx: {
17784
19729
  fontSize: "0.7rem",
17785
19730
  backgroundColor,
@@ -17831,10 +19776,10 @@ var createTypeRegistryStore = () => {
17831
19776
  }
17832
19777
  }));
17833
19778
  };
17834
- var TypeRegistryStoreContext = /* @__PURE__ */ createContext9(void 0);
19779
+ var TypeRegistryStoreContext = /* @__PURE__ */ createContext10(void 0);
17835
19780
  TypeRegistryStoreContext.Provider;
17836
19781
  var useTypeRegistryStore = (selector2, equalityFn) => {
17837
- const store = useContext16(TypeRegistryStoreContext);
19782
+ const store = useContext17(TypeRegistryStoreContext);
17838
19783
  return useStore(store, selector2, equalityFn);
17839
19784
  };
17840
19785
  function matchTypeComponents(value, path, registry) {
@@ -17854,13 +19799,13 @@ function matchTypeComponents(value, path, registry) {
17854
19799
  }
17855
19800
  function useTypeComponents(value, path) {
17856
19801
  const registry = useTypeRegistryStore((store) => store.registry);
17857
- return useMemo8(() => matchTypeComponents(value, path, registry), [
19802
+ return useMemo9(() => matchTypeComponents(value, path, registry), [
17858
19803
  value,
17859
19804
  path,
17860
19805
  registry
17861
19806
  ]);
17862
19807
  }
17863
- var IconBox = (props) => /* @__PURE__ */ jsx134(Box10, {
19808
+ var IconBox = (props) => /* @__PURE__ */ jsx135(Box10, {
17864
19809
  component: "span",
17865
19810
  ...props,
17866
19811
  sx: {
@@ -17875,7 +19820,7 @@ var DataKeyPair = (props) => {
17875
19820
  var _props_editable;
17876
19821
  const propsEditable = (_props_editable = props.editable) !== null && _props_editable !== void 0 ? _props_editable : void 0;
17877
19822
  const storeEditable = useJsonViewerStore((store) => store.editable);
17878
- const editable = useMemo8(() => {
19823
+ const editable = useMemo9(() => {
17879
19824
  if (storeEditable === false) {
17880
19825
  return false;
17881
19826
  }
@@ -17896,7 +19841,7 @@ var DataKeyPair = (props) => {
17896
19841
  const depth = path.length;
17897
19842
  const key = path[depth - 1];
17898
19843
  const hoverPath = useJsonViewerStore((store) => store.hoverPath);
17899
- const isHover = useMemo8(() => {
19844
+ const isHover = useMemo9(() => {
17900
19845
  return hoverPath && path.every((value2, index) => value2 === hoverPath.path[index] && nestedIndex === hoverPath.nestedIndex);
17901
19846
  }, [
17902
19847
  hoverPath,
@@ -17918,7 +19863,7 @@ var DataKeyPair = (props) => {
17918
19863
  const isNumberKey = Number.isInteger(Number(key));
17919
19864
  const storeEnableAdd = useJsonViewerStore((store) => store.enableAdd);
17920
19865
  const onAdd = useJsonViewerStore((store) => store.onAdd);
17921
- const enableAdd = useMemo8(() => {
19866
+ const enableAdd = useMemo9(() => {
17922
19867
  if (!onAdd || nestedIndex !== void 0) return false;
17923
19868
  if (storeEnableAdd === false) {
17924
19869
  return false;
@@ -17943,7 +19888,7 @@ var DataKeyPair = (props) => {
17943
19888
  ]);
17944
19889
  const storeEnableDelete = useJsonViewerStore((store) => store.enableDelete);
17945
19890
  const onDelete = useJsonViewerStore((store) => store.onDelete);
17946
- const enableDelete = useMemo8(() => {
19891
+ const enableDelete = useMemo9(() => {
17947
19892
  if (!onDelete || nestedIndex !== void 0) return false;
17948
19893
  if (isRoot) {
17949
19894
  return false;
@@ -17970,7 +19915,7 @@ var DataKeyPair = (props) => {
17970
19915
  const enableClipboard = useJsonViewerStore((store) => store.enableClipboard);
17971
19916
  const { copy, copied } = useClipboard();
17972
19917
  const highlightUpdates = useJsonViewerStore((store) => store.highlightUpdates);
17973
- const isHighlight = useMemo8(() => {
19918
+ const isHighlight = useMemo9(() => {
17974
19919
  if (!highlightUpdates || prevValue === void 0) return false;
17975
19920
  if (typeof value !== typeof prevValue) {
17976
19921
  return true;
@@ -17994,8 +19939,8 @@ var DataKeyPair = (props) => {
17994
19939
  prevValue,
17995
19940
  value
17996
19941
  ]);
17997
- const highlightContainer = useRef12();
17998
- useEffect16(() => {
19942
+ const highlightContainer = useRef13();
19943
+ useEffect17(() => {
17999
19944
  if (highlightContainer.current && isHighlight && "animate" in highlightContainer.current) {
18000
19945
  highlightContainer.current.animate([
18001
19946
  {
@@ -18044,20 +19989,20 @@ var DataKeyPair = (props) => {
18044
19989
  path,
18045
19990
  value
18046
19991
  ]);
18047
- const actionIcons = useMemo8(() => {
19992
+ const actionIcons = useMemo9(() => {
18048
19993
  if (editing) {
18049
- return /* @__PURE__ */ jsxs126(Fragment7, {
19994
+ return /* @__PURE__ */ jsxs126(Fragment8, {
18050
19995
  children: [
18051
- /* @__PURE__ */ jsx134(IconBox, {
18052
- children: /* @__PURE__ */ jsx134(CloseIcon, {
19996
+ /* @__PURE__ */ jsx135(IconBox, {
19997
+ children: /* @__PURE__ */ jsx135(CloseIcon, {
18053
19998
  sx: {
18054
19999
  fontSize: ".8rem"
18055
20000
  },
18056
20001
  onClick: abortEditing
18057
20002
  })
18058
20003
  }),
18059
- /* @__PURE__ */ jsx134(IconBox, {
18060
- children: /* @__PURE__ */ jsx134(CheckIcon, {
20004
+ /* @__PURE__ */ jsx135(IconBox, {
20005
+ children: /* @__PURE__ */ jsx135(CheckIcon, {
18061
20006
  sx: {
18062
20007
  fontSize: ".8rem"
18063
20008
  },
@@ -18067,9 +20012,9 @@ var DataKeyPair = (props) => {
18067
20012
  ]
18068
20013
  });
18069
20014
  }
18070
- return /* @__PURE__ */ jsxs126(Fragment7, {
20015
+ return /* @__PURE__ */ jsxs126(Fragment8, {
18071
20016
  children: [
18072
- enableClipboard && /* @__PURE__ */ jsx134(IconBox, {
20017
+ enableClipboard && /* @__PURE__ */ jsx135(IconBox, {
18073
20018
  onClick: (event) => {
18074
20019
  event.preventDefault();
18075
20020
  try {
@@ -18078,41 +20023,41 @@ var DataKeyPair = (props) => {
18078
20023
  console.error(e2);
18079
20024
  }
18080
20025
  },
18081
- children: copied ? /* @__PURE__ */ jsx134(CheckIcon, {
20026
+ children: copied ? /* @__PURE__ */ jsx135(CheckIcon, {
18082
20027
  sx: {
18083
20028
  fontSize: ".8rem"
18084
20029
  }
18085
- }) : /* @__PURE__ */ jsx134(ContentCopyIcon, {
20030
+ }) : /* @__PURE__ */ jsx135(ContentCopyIcon, {
18086
20031
  sx: {
18087
20032
  fontSize: ".8rem"
18088
20033
  }
18089
20034
  })
18090
20035
  }),
18091
- Editor && editable && serialize && deserialize && /* @__PURE__ */ jsx134(IconBox, {
20036
+ Editor && editable && serialize && deserialize && /* @__PURE__ */ jsx135(IconBox, {
18092
20037
  onClick: startEditing,
18093
- children: /* @__PURE__ */ jsx134(EditIcon, {
20038
+ children: /* @__PURE__ */ jsx135(EditIcon, {
18094
20039
  sx: {
18095
20040
  fontSize: ".8rem"
18096
20041
  }
18097
20042
  })
18098
20043
  }),
18099
- enableAdd && /* @__PURE__ */ jsx134(IconBox, {
20044
+ enableAdd && /* @__PURE__ */ jsx135(IconBox, {
18100
20045
  onClick: (event) => {
18101
20046
  event.preventDefault();
18102
20047
  onAdd === null || onAdd === void 0 ? void 0 : onAdd(path);
18103
20048
  },
18104
- children: /* @__PURE__ */ jsx134(AddBoxIcon, {
20049
+ children: /* @__PURE__ */ jsx135(AddBoxIcon, {
18105
20050
  sx: {
18106
20051
  fontSize: ".8rem"
18107
20052
  }
18108
20053
  })
18109
20054
  }),
18110
- enableDelete && /* @__PURE__ */ jsx134(IconBox, {
20055
+ enableDelete && /* @__PURE__ */ jsx135(IconBox, {
18111
20056
  onClick: (event) => {
18112
20057
  event.preventDefault();
18113
20058
  onDelete === null || onDelete === void 0 ? void 0 : onDelete(path, value);
18114
20059
  },
18115
- children: /* @__PURE__ */ jsx134(DeleteIcon, {
20060
+ children: /* @__PURE__ */ jsx135(DeleteIcon, {
18116
20061
  sx: {
18117
20062
  fontSize: ".9rem"
18118
20063
  }
@@ -18140,12 +20085,12 @@ var DataKeyPair = (props) => {
18140
20085
  abortEditing,
18141
20086
  commitEditing
18142
20087
  ]);
18143
- const isEmptyValue = useMemo8(() => getValueSize(value) === 0, [
20088
+ const isEmptyValue = useMemo9(() => getValueSize(value) === 0, [
18144
20089
  value
18145
20090
  ]);
18146
20091
  const expandable = !isEmptyValue && !!(PreComponent && PostComponent);
18147
20092
  const KeyRenderer = useJsonViewerStore((store) => store.keyRenderer);
18148
- const downstreamProps = useMemo8(() => ({
20093
+ const downstreamProps = useMemo9(() => ({
18149
20094
  path,
18150
20095
  inspect,
18151
20096
  setInspect,
@@ -18193,7 +20138,7 @@ var DataKeyPair = (props) => {
18193
20138
  setInspect
18194
20139
  ]),
18195
20140
  children: [
18196
- expandable ? inspect ? /* @__PURE__ */ jsx134(ExpandMoreIcon, {
20141
+ expandable ? inspect ? /* @__PURE__ */ jsx135(ExpandMoreIcon, {
18197
20142
  className: "data-key-toggle-expanded",
18198
20143
  sx: {
18199
20144
  fontSize: ".8rem",
@@ -18201,7 +20146,7 @@ var DataKeyPair = (props) => {
18201
20146
  cursor: "pointer"
18202
20147
  }
18203
20148
  }
18204
- }) : /* @__PURE__ */ jsx134(ChevronRightIcon, {
20149
+ }) : /* @__PURE__ */ jsx135(ChevronRightIcon, {
18205
20150
  className: "data-key-toggle-collapsed",
18206
20151
  sx: {
18207
20152
  fontSize: ".8rem",
@@ -18210,44 +20155,44 @@ var DataKeyPair = (props) => {
18210
20155
  }
18211
20156
  }
18212
20157
  }) : null,
18213
- /* @__PURE__ */ jsx134(Box10, {
20158
+ /* @__PURE__ */ jsx135(Box10, {
18214
20159
  ref: highlightContainer,
18215
20160
  className: "data-key-key",
18216
20161
  component: "span",
18217
- children: isRoot && depth === 0 ? rootName !== false ? quotesOnKeys ? /* @__PURE__ */ jsxs126(Fragment7, {
20162
+ children: isRoot && depth === 0 ? rootName !== false ? quotesOnKeys ? /* @__PURE__ */ jsxs126(Fragment8, {
18218
20163
  children: [
18219
20164
  '"',
18220
20165
  rootName,
18221
20166
  '"'
18222
20167
  ]
18223
- }) : /* @__PURE__ */ jsx134(Fragment7, {
20168
+ }) : /* @__PURE__ */ jsx135(Fragment8, {
18224
20169
  children: rootName
18225
- }) : null : KeyRenderer.when(downstreamProps) ? /* @__PURE__ */ jsx134(KeyRenderer, {
20170
+ }) : null : KeyRenderer.when(downstreamProps) ? /* @__PURE__ */ jsx135(KeyRenderer, {
18226
20171
  ...downstreamProps
18227
- }) : nestedIndex === void 0 && (isNumberKey ? /* @__PURE__ */ jsx134(Box10, {
20172
+ }) : nestedIndex === void 0 && (isNumberKey ? /* @__PURE__ */ jsx135(Box10, {
18228
20173
  component: "span",
18229
20174
  style: {
18230
20175
  color: numberKeyColor,
18231
20176
  userSelect: isNumberKey ? "none" : "auto"
18232
20177
  },
18233
20178
  children: key
18234
- }) : quotesOnKeys ? /* @__PURE__ */ jsxs126(Fragment7, {
20179
+ }) : quotesOnKeys ? /* @__PURE__ */ jsxs126(Fragment8, {
18235
20180
  children: [
18236
20181
  '"',
18237
20182
  key,
18238
20183
  '"'
18239
20184
  ]
18240
- }) : /* @__PURE__ */ jsx134(Fragment7, {
20185
+ }) : /* @__PURE__ */ jsx135(Fragment8, {
18241
20186
  children: key
18242
20187
  }))
18243
20188
  }),
18244
- isRoot ? rootName !== false && /* @__PURE__ */ jsx134(DataBox, {
20189
+ isRoot ? rootName !== false && /* @__PURE__ */ jsx135(DataBox, {
18245
20190
  className: "data-key-colon",
18246
20191
  sx: {
18247
20192
  mr: 0.5
18248
20193
  },
18249
20194
  children: ":"
18250
- }) : nestedIndex === void 0 && /* @__PURE__ */ jsx134(DataBox, {
20195
+ }) : nestedIndex === void 0 && /* @__PURE__ */ jsx135(DataBox, {
18251
20196
  className: "data-key-colon",
18252
20197
  sx: {
18253
20198
  mr: 0.5,
@@ -18258,29 +20203,29 @@ var DataKeyPair = (props) => {
18258
20203
  },
18259
20204
  children: ":"
18260
20205
  }),
18261
- PreComponent && /* @__PURE__ */ jsx134(PreComponent, {
20206
+ PreComponent && /* @__PURE__ */ jsx135(PreComponent, {
18262
20207
  ...downstreamProps
18263
20208
  }),
18264
20209
  isHover && expandable && inspect && actionIcons
18265
20210
  ]
18266
20211
  }),
18267
- editing && editable ? Editor && /* @__PURE__ */ jsx134(Editor, {
20212
+ editing && editable ? Editor && /* @__PURE__ */ jsx135(Editor, {
18268
20213
  path,
18269
20214
  value: tempValue,
18270
20215
  setValue: setTempValue,
18271
20216
  abortEditing,
18272
20217
  commitEditing
18273
- }) : Component ? /* @__PURE__ */ jsx134(Component, {
20218
+ }) : Component ? /* @__PURE__ */ jsx135(Component, {
18274
20219
  ...downstreamProps
18275
- }) : /* @__PURE__ */ jsx134(Box10, {
20220
+ }) : /* @__PURE__ */ jsx135(Box10, {
18276
20221
  component: "span",
18277
20222
  className: "data-value-fallback",
18278
20223
  children: "fallback: ".concat(value)
18279
20224
  }),
18280
- PostComponent && /* @__PURE__ */ jsx134(PostComponent, {
20225
+ PostComponent && /* @__PURE__ */ jsx135(PostComponent, {
18281
20226
  ...downstreamProps
18282
20227
  }),
18283
- !last && displayComma && /* @__PURE__ */ jsx134(DataBox, {
20228
+ !last && displayComma && /* @__PURE__ */ jsx135(DataBox, {
18284
20229
  children: ","
18285
20230
  }),
18286
20231
  isHover && expandable && !inspect && actionIcons,
@@ -18292,7 +20237,7 @@ var DataKeyPair = (props) => {
18292
20237
  var query = "(prefers-color-scheme: dark)";
18293
20238
  function useThemeDetector() {
18294
20239
  const [isDark, setIsDark] = useState12(false);
18295
- useEffect16(() => {
20240
+ useEffect17(() => {
18296
20241
  const listener = (e2) => setIsDark(e2.matches);
18297
20242
  setIsDark(window.matchMedia(query).matches);
18298
20243
  const queryMedia = window.matchMedia(query);
@@ -18302,8 +20247,8 @@ function useThemeDetector() {
18302
20247
  return isDark;
18303
20248
  }
18304
20249
  function useSetIfNotUndefinedEffect(key, value) {
18305
- const { setState } = useContext16(JsonViewerStoreContext);
18306
- useEffect16(() => {
20250
+ const { setState } = useContext17(JsonViewerStoreContext);
20251
+ useEffect17(() => {
18307
20252
  if (value !== void 0) {
18308
20253
  setState({
18309
20254
  [key]: value
@@ -18316,8 +20261,8 @@ function useSetIfNotUndefinedEffect(key, value) {
18316
20261
  ]);
18317
20262
  }
18318
20263
  var JsonViewerInner = (props) => {
18319
- const { setState } = useContext16(JsonViewerStoreContext);
18320
- useEffect16(() => {
20264
+ const { setState } = useContext17(JsonViewerStoreContext);
20265
+ useEffect17(() => {
18321
20266
  setState((state) => ({
18322
20267
  prevValue: state.value,
18323
20268
  value: props.value
@@ -18345,7 +20290,7 @@ var JsonViewerInner = (props) => {
18345
20290
  useSetIfNotUndefinedEffect("displaySize", props.displaySize);
18346
20291
  useSetIfNotUndefinedEffect("displayComma", props.displayComma);
18347
20292
  useSetIfNotUndefinedEffect("highlightUpdates", props.highlightUpdates);
18348
- useEffect16(() => {
20293
+ useEffect17(() => {
18349
20294
  if (props.theme === "light") {
18350
20295
  setState({
18351
20296
  colorspace: lightColorspace
@@ -18363,13 +20308,13 @@ var JsonViewerInner = (props) => {
18363
20308
  setState,
18364
20309
  props.theme
18365
20310
  ]);
18366
- const themeCls = useMemo8(() => {
20311
+ const themeCls = useMemo9(() => {
18367
20312
  if (typeof props.theme === "object") return "json-viewer-theme-custom";
18368
20313
  return props.theme === "dark" ? "json-viewer-theme-dark" : "json-viewer-theme-light";
18369
20314
  }, [
18370
20315
  props.theme
18371
20316
  ]);
18372
- const onceRef = useRef12(true);
20317
+ const onceRef = useRef13(true);
18373
20318
  const registerTypes = useTypeRegistryStore((store) => store.registerTypes);
18374
20319
  if (onceRef.current) {
18375
20320
  const allTypes = props.valueTypes ? [
@@ -18381,7 +20326,7 @@ var JsonViewerInner = (props) => {
18381
20326
  registerTypes(allTypes);
18382
20327
  onceRef.current = false;
18383
20328
  }
18384
- useEffect16(() => {
20329
+ useEffect17(() => {
18385
20330
  const allTypes = props.valueTypes ? [
18386
20331
  ...predefinedTypes,
18387
20332
  ...props.valueTypes
@@ -18395,12 +20340,12 @@ var JsonViewerInner = (props) => {
18395
20340
  ]);
18396
20341
  const value = useJsonViewerStore((store) => store.value);
18397
20342
  const prevValue = useJsonViewerStore((store) => store.prevValue);
18398
- const emptyPath = useMemo8(() => [], []);
20343
+ const emptyPath = useMemo9(() => [], []);
18399
20344
  const setHover = useJsonViewerStore((store) => store.setHover);
18400
20345
  const onMouseLeave = useCallback8(() => setHover(null), [
18401
20346
  setHover
18402
20347
  ]);
18403
- return /* @__PURE__ */ jsx134(Paper2, {
20348
+ return /* @__PURE__ */ jsx135(Paper2, {
18404
20349
  elevation: 0,
18405
20350
  className: clsx(themeCls, props.className),
18406
20351
  style: props.style,
@@ -18411,7 +20356,7 @@ var JsonViewerInner = (props) => {
18411
20356
  ...props.sx
18412
20357
  },
18413
20358
  onMouseLeave,
18414
- children: /* @__PURE__ */ jsx134(DataKeyPair, {
20359
+ children: /* @__PURE__ */ jsx135(DataKeyPair, {
18415
20360
  value,
18416
20361
  prevValue,
18417
20362
  path: emptyPath,
@@ -18426,14 +20371,14 @@ var JsonViewer = function JsonViewer2(props) {
18426
20371
  }
18427
20372
  }
18428
20373
  const isAutoDarkTheme = useThemeDetector();
18429
- const themeType = useMemo8(() => {
20374
+ const themeType = useMemo9(() => {
18430
20375
  var _props_theme;
18431
20376
  return props.theme === "auto" ? isAutoDarkTheme ? "dark" : "light" : (_props_theme = props.theme) !== null && _props_theme !== void 0 ? _props_theme : "light";
18432
20377
  }, [
18433
20378
  isAutoDarkTheme,
18434
20379
  props.theme
18435
20380
  ]);
18436
- const theme = useMemo8(() => {
20381
+ const theme = useMemo9(() => {
18437
20382
  const backgroundColor = typeof themeType === "object" ? themeType.base00 : themeType === "dark" ? darkColorspace.base00 : lightColorspace.base00;
18438
20383
  const foregroundColor = typeof themeType === "object" ? themeType.base07 : themeType === "dark" ? darkColorspace.base07 : lightColorspace.base07;
18439
20384
  return createTheme({
@@ -18461,15 +20406,15 @@ var JsonViewer = function JsonViewer2(props) {
18461
20406
  ...props,
18462
20407
  theme: themeType
18463
20408
  };
18464
- const jsonViewerStore = useMemo8(() => createJsonViewerStore(props), []);
18465
- const typeRegistryStore = useMemo8(() => createTypeRegistryStore(), []);
18466
- return /* @__PURE__ */ jsx134(ThemeProvider, {
20409
+ const jsonViewerStore = useMemo9(() => createJsonViewerStore(props), []);
20410
+ const typeRegistryStore = useMemo9(() => createTypeRegistryStore(), []);
20411
+ return /* @__PURE__ */ jsx135(ThemeProvider, {
18467
20412
  theme,
18468
- children: /* @__PURE__ */ jsx134(TypeRegistryStoreContext.Provider, {
20413
+ children: /* @__PURE__ */ jsx135(TypeRegistryStoreContext.Provider, {
18469
20414
  value: typeRegistryStore,
18470
- children: /* @__PURE__ */ jsx134(JsonViewerStoreContext.Provider, {
20415
+ children: /* @__PURE__ */ jsx135(JsonViewerStoreContext.Provider, {
18471
20416
  value: jsonViewerStore,
18472
- children: /* @__PURE__ */ jsx134(JsonViewerInner, {
20417
+ children: /* @__PURE__ */ jsx135(JsonViewerInner, {
18473
20418
  ...mixedProps
18474
20419
  })
18475
20420
  })
@@ -18479,7 +20424,7 @@ var JsonViewer = function JsonViewer2(props) {
18479
20424
 
18480
20425
  // src/components/event-details/payload-viewer.tsx
18481
20426
  import { memo as memo10 } from "react";
18482
- import { jsx as jsx135 } from "react/jsx-runtime";
20427
+ import { jsx as jsx136 } from "react/jsx-runtime";
18483
20428
  function tryParseJson(value) {
18484
20429
  if (typeof value !== "string") {
18485
20430
  return value;
@@ -18492,7 +20437,7 @@ function tryParseJson(value) {
18492
20437
  }
18493
20438
  var PayloadViewer = memo10(({ sx, testId, value }) => {
18494
20439
  const theme = useTheme3();
18495
- return /* @__PURE__ */ jsx135(Box11, { "data-testid": testId, sx: { backgroundColor: "background.default", borderRadius: 1, fontSize: 12, overflow: "auto", p: 1, ...sx }, children: /* @__PURE__ */ jsx135(
20440
+ return /* @__PURE__ */ jsx136(Box11, { "data-testid": testId, sx: { backgroundColor: "background.default", borderRadius: 1, fontSize: 12, overflow: "auto", p: 1, ...sx }, children: /* @__PURE__ */ jsx136(
18496
20441
  JsonViewer,
18497
20442
  {
18498
20443
  displayDataTypes: false,
@@ -18506,21 +20451,21 @@ var PayloadViewer = memo10(({ sx, testId, value }) => {
18506
20451
  });
18507
20452
 
18508
20453
  // src/components/event-details/event-detail.tsx
18509
- import { Fragment as Fragment8, jsx as jsx136, jsxs as jsxs127 } from "react/jsx-runtime";
20454
+ import { Fragment as Fragment9, jsx as jsx137, jsxs as jsxs127 } from "react/jsx-runtime";
18510
20455
  var DetailRow2 = ({ content, label }) => /* @__PURE__ */ jsxs127(Box12, { sx: { display: "grid", gap: 1, gridTemplateColumns: "72px 1fr", mb: 0.5 }, children: [
18511
- /* @__PURE__ */ jsx136(Typography7, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
18512
- /* @__PURE__ */ jsx136(Box12, { children: typeof content === "string" ? /* @__PURE__ */ jsx136(Typography7, { sx: { color: "text.primary", whiteSpace: "pre-wrap" }, variant: "caption", children: content }) : content })
20456
+ /* @__PURE__ */ jsx137(Typography7, { color: "text.secondary", sx: { fontWeight: 600 }, variant: "caption", children: label }),
20457
+ /* @__PURE__ */ jsx137(Box12, { children: typeof content === "string" ? /* @__PURE__ */ jsx137(Typography7, { sx: { color: "text.primary", whiteSpace: "pre-wrap" }, variant: "caption", children: content }) : content })
18513
20458
  ] });
18514
20459
  var EventMessage = ({ event }) => {
18515
20460
  const [isOpen, setIsOpen] = useState13(false);
18516
20461
  const [isOverflowing, setIsOverflowing] = useState13(false);
18517
- const textReference = useRef13(null);
18518
- const parsedMessage = useMemo9(() => parseEventMessage(event), [event]);
18519
- const isIAMPolicyEvent = useMemo9(
20462
+ const textReference = useRef14(null);
20463
+ const parsedMessage = useMemo10(() => parseEventMessage(event), [event]);
20464
+ const isIAMPolicyEvent = useMemo10(
18520
20465
  () => event.event_type === "iam.policy_evaluation" && event.attributes?.payload && typeof event.attributes.payload === "string",
18521
20466
  [event]
18522
20467
  );
18523
- useEffect17(() => {
20468
+ useEffect18(() => {
18524
20469
  const checkOverflow = () => {
18525
20470
  const element = textReference.current;
18526
20471
  if (element) {
@@ -18533,17 +20478,17 @@ var EventMessage = ({ event }) => {
18533
20478
  window.removeEventListener("resize", checkOverflow);
18534
20479
  };
18535
20480
  }, [parsedMessage.headline]);
18536
- const hasAdditionalContent = useMemo9(
20481
+ const hasAdditionalContent = useMemo10(
18537
20482
  () => parsedMessage.message || parsedMessage.details || isIAMPolicyEvent,
18538
20483
  [parsedMessage.message, parsedMessage.details, isIAMPolicyEvent]
18539
20484
  );
18540
- const shouldShowToggle = useMemo9(
20485
+ const shouldShowToggle = useMemo10(
18541
20486
  () => isOverflowing || hasAdditionalContent,
18542
20487
  [isOverflowing, hasAdditionalContent]
18543
20488
  );
18544
20489
  return /* @__PURE__ */ jsxs127(Box12, { sx: { display: "flex", flexDirection: "column" }, children: [
18545
20490
  /* @__PURE__ */ jsxs127(Box12, { sx: { alignItems: "center", display: "flex" }, children: [
18546
- Boolean(shouldShowToggle) && /* @__PURE__ */ jsx136(
20491
+ Boolean(shouldShowToggle) && /* @__PURE__ */ jsx137(
18547
20492
  IconButton3,
18548
20493
  {
18549
20494
  onClick: () => {
@@ -18551,10 +20496,10 @@ var EventMessage = ({ event }) => {
18551
20496
  },
18552
20497
  size: "small",
18553
20498
  sx: { mr: 1, p: 0 },
18554
- children: isOpen ? /* @__PURE__ */ jsx136(KeyboardArrowDown2, { sx: { fontSize: 16 } }) : /* @__PURE__ */ jsx136(KeyboardArrowRight2, { sx: { fontSize: 16 } })
20499
+ children: isOpen ? /* @__PURE__ */ jsx137(KeyboardArrowDown2, { sx: { fontSize: 16 } }) : /* @__PURE__ */ jsx137(KeyboardArrowRight2, { sx: { fontSize: 16 } })
18555
20500
  }
18556
20501
  ),
18557
- /* @__PURE__ */ jsx136(
20502
+ /* @__PURE__ */ jsx137(
18558
20503
  Typography7,
18559
20504
  {
18560
20505
  ref: textReference,
@@ -18572,12 +20517,12 @@ var EventMessage = ({ event }) => {
18572
20517
  }
18573
20518
  )
18574
20519
  ] }),
18575
- isOpen && /* @__PURE__ */ jsx136(Box12, { sx: { borderColor: "divider", borderLeft: "2px solid", ml: 1, mt: 0.5, pl: 1.5, py: 0.5 }, children: isIAMPolicyEvent ? /* @__PURE__ */ jsx136(IAMEventDetail, { event }) : /* @__PURE__ */ jsxs127(Fragment8, { children: [
18576
- Boolean(parsedMessage.message) && /* @__PURE__ */ jsx136(DetailRow2, { content: parsedMessage.message, label: "Message" }),
18577
- Boolean(parsedMessage.details) && /* @__PURE__ */ jsx136(
20520
+ isOpen && /* @__PURE__ */ jsx137(Box12, { sx: { borderColor: "divider", borderLeft: "2px solid", ml: 1, mt: 0.5, pl: 1.5, py: 0.5 }, children: isIAMPolicyEvent ? /* @__PURE__ */ jsx137(IAMEventDetail, { event }) : /* @__PURE__ */ jsxs127(Fragment9, { children: [
20521
+ Boolean(parsedMessage.message) && /* @__PURE__ */ jsx137(DetailRow2, { content: parsedMessage.message, label: "Message" }),
20522
+ Boolean(parsedMessage.details) && /* @__PURE__ */ jsx137(
18578
20523
  DetailRow2,
18579
20524
  {
18580
- content: /* @__PURE__ */ jsx136(PayloadViewer, { sx: { px: 0 }, value: tryParseJson(parsedMessage.details) }),
20525
+ content: /* @__PURE__ */ jsx137(PayloadViewer, { sx: { px: 0 }, value: tryParseJson(parsedMessage.details) }),
18581
20526
  label: "Details"
18582
20527
  }
18583
20528
  )
@@ -18609,15 +20554,15 @@ var EventDetail = ({
18609
20554
  type
18610
20555
  }) => {
18611
20556
  if (type === "permission") {
18612
- return /* @__PURE__ */ jsx136(IAMPermissionDetail, { events });
20557
+ return /* @__PURE__ */ jsx137(IAMPermissionDetail, { events });
18613
20558
  }
18614
20559
  const eventLevel = getEventLevelFromGroup(type);
18615
20560
  return /* @__PURE__ */ jsxs127(Box12, { children: [
18616
20561
  /* @__PURE__ */ jsxs127(Box12, { sx: { alignItems: "center", display: "flex", mb: 0.5 }, children: [
18617
- /* @__PURE__ */ jsx136(StatusIcon, { errorLevel: eventLevel }),
18618
- /* @__PURE__ */ jsx136(Typography7, { color: "text.secondary", sx: { fontWeight: 600, ml: 0.5 }, variant: "caption", children: displayText })
20562
+ /* @__PURE__ */ jsx137(StatusIcon, { errorLevel: eventLevel }),
20563
+ /* @__PURE__ */ jsx137(Typography7, { color: "text.secondary", sx: { fontWeight: 600, ml: 0.5 }, variant: "caption", children: displayText })
18619
20564
  ] }),
18620
- /* @__PURE__ */ jsx136(Box12, { children: events.map((event) => /* @__PURE__ */ jsx136(Box12, { sx: { maxWidth: "100%", mb: 0.5 }, children: /* @__PURE__ */ jsx136(EventMessage, { event }) }, `${event.span_id}-${event.event_id}`)) })
20565
+ /* @__PURE__ */ jsx137(Box12, { children: events.map((event) => /* @__PURE__ */ jsx137(Box12, { sx: { maxWidth: "100%", mb: 0.5 }, children: /* @__PURE__ */ jsx137(EventMessage, { event }) }, `${event.span_id}-${event.event_id}`)) })
18621
20566
  ] });
18622
20567
  };
18623
20568
 
@@ -23946,7 +25891,7 @@ async function checkFeatures(context, config, args) {
23946
25891
  }
23947
25892
 
23948
25893
  // node_modules/@aws-sdk/middleware-user-agent/dist-es/constants.js
23949
- var USER_AGENT = "user-agent";
25894
+ var USER_AGENT2 = "user-agent";
23950
25895
  var X_AMZ_USER_AGENT = "x-amz-user-agent";
23951
25896
  var SPACE = " ";
23952
25897
  var UA_NAME_SEPARATOR = "/";
@@ -23998,9 +25943,9 @@ var userAgentMiddleware = (options) => (next, context) => async (args) => {
23998
25943
  ].join(SPACE);
23999
25944
  if (options.runtime !== "browser") {
24000
25945
  if (normalUAValue) {
24001
- headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[USER_AGENT]} ${normalUAValue}` : normalUAValue;
25946
+ headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[USER_AGENT2]} ${normalUAValue}` : normalUAValue;
24002
25947
  }
24003
- headers[USER_AGENT] = sdkUserAgentValue;
25948
+ headers[USER_AGENT2] = sdkUserAgentValue;
24004
25949
  } else {
24005
25950
  headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;
24006
25951
  }
@@ -28309,8 +30254,8 @@ var QueryStatus = {
28309
30254
 
28310
30255
  // src/components/event-details/lambda-invoke-logs-section.tsx
28311
30256
  import { Box as Box13, CircularProgress as CircularProgress3, Stack, Typography as Typography8 } from "@mui/material";
28312
- import { useEffect as useEffect18, useMemo as useMemo10, useRef as useRef14, useState as useState14 } from "react";
28313
- import { jsx as jsx137, jsxs as jsxs128 } from "react/jsx-runtime";
30257
+ import { useEffect as useEffect19, useMemo as useMemo11, useRef as useRef15, useState as useState14 } from "react";
30258
+ import { jsx as jsx138, jsxs as jsxs128 } from "react/jsx-runtime";
28314
30259
  var POLL_INTERVAL_MS = 1e3;
28315
30260
  async function pollQueryResults(client, queryId) {
28316
30261
  return client.send(new GetQueryResultsCommand({ queryId }));
@@ -28327,7 +30272,7 @@ async function startLambdaLogsQuery(client, functionName2, requestId, startTimeS
28327
30272
  }
28328
30273
  function useCloudWatchLogsClient(region) {
28329
30274
  const { localstackEndpoint } = useAppInspector();
28330
- const client = useMemo10(() => new CloudWatchLogsClient({
30275
+ const client = useMemo11(() => new CloudWatchLogsClient({
28331
30276
  credentials: {
28332
30277
  accessKeyId: "test",
28333
30278
  secretAccessKey: "test"
@@ -28341,9 +30286,9 @@ function useLambdaInvokeLogs(functionName2, requestId, region, startTimeNano, en
28341
30286
  const [loading, setLoading] = useState14(true);
28342
30287
  const [logs, setLogs] = useState14([]);
28343
30288
  const [error, setError] = useState14();
28344
- const pollTimerRef = useRef14(null);
30289
+ const pollTimerRef = useRef15(null);
28345
30290
  const cloudWatchLogs = useCloudWatchLogsClient(region);
28346
- useEffect18(() => {
30291
+ useEffect19(() => {
28347
30292
  let cancelled = false;
28348
30293
  const startTimeSec = Math.floor(Number(BigInt(startTimeNano) / BigInt(1e9)));
28349
30294
  const endTimeSec = Math.ceil(Number(BigInt(endTimeNano) / BigInt(1e9)));
@@ -28401,24 +30346,24 @@ var LambdaInvokeLogsSection = ({ endTimeNano, functionName: functionName2, regio
28401
30346
  const { error, loading, logs } = useLambdaInvokeLogs(functionName2, requestId, region, startTimeNano, endTimeNano);
28402
30347
  if (loading) {
28403
30348
  return /* @__PURE__ */ jsxs128(Stack, { alignItems: "center", direction: "row", spacing: 1, children: [
28404
- /* @__PURE__ */ jsx137(CircularProgress3, { size: 14 }),
28405
- /* @__PURE__ */ jsx137(Typography8, { color: "text.secondary", variant: "body2", children: "Loading logs\u2026" })
30349
+ /* @__PURE__ */ jsx138(CircularProgress3, { size: 14 }),
30350
+ /* @__PURE__ */ jsx138(Typography8, { color: "text.secondary", variant: "body2", children: "Loading logs\u2026" })
28406
30351
  ] });
28407
30352
  }
28408
30353
  if (error !== void 0) {
28409
- return /* @__PURE__ */ jsx137(Typography8, { color: "error", variant: "body2", children: error.message });
30354
+ return /* @__PURE__ */ jsx138(Typography8, { color: "error", variant: "body2", children: error.message });
28410
30355
  }
28411
30356
  if (logs.length === 0) {
28412
- return /* @__PURE__ */ jsx137(Typography8, { color: "text.secondary", variant: "body2", children: "No logs found for this invocation." });
30357
+ return /* @__PURE__ */ jsx138(Typography8, { color: "text.secondary", variant: "body2", children: "No logs found for this invocation." });
28413
30358
  }
28414
- return /* @__PURE__ */ jsx137(Box13, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ jsx137("pre", { style: { margin: 0, overflow: "auto" }, children: logs.map((log) => /* @__PURE__ */ jsx137(Typography8, { variant: "body2", children: `[${log.timestamp}] ${log.message}` }, log.ptr)) }) });
30359
+ return /* @__PURE__ */ jsx138(Box13, { sx: { backgroundColor: (theme) => theme.palette.background.default, borderRadius: 1, p: 1 }, children: /* @__PURE__ */ jsx138("pre", { style: { margin: 0, overflow: "auto" }, children: logs.map((log) => /* @__PURE__ */ jsx138(Typography8, { variant: "body2", children: `[${log.timestamp}] ${log.message}` }, log.ptr)) }) });
28415
30360
  };
28416
30361
 
28417
30362
  // src/components/event-details/toggle-section.tsx
28418
30363
  import { KeyboardArrowDown as KeyboardArrowDown3, KeyboardArrowRight as KeyboardArrowRight3 } from "@mui/icons-material";
28419
30364
  import { Box as Box14, Typography as Typography9 } from "@mui/material";
28420
30365
  import { useState as useState15 } from "react";
28421
- import { jsx as jsx138, jsxs as jsxs129 } from "react/jsx-runtime";
30366
+ import { jsx as jsx139, jsxs as jsxs129 } from "react/jsx-runtime";
28422
30367
  var ToggleSection = ({ action, children, headline, initialOpen = true }) => {
28423
30368
  const [isOpen, setIsOpen] = useState15(initialOpen);
28424
30369
  return /* @__PURE__ */ jsxs129(Box14, { sx: { mt: 4 }, children: [
@@ -28446,23 +30391,23 @@ var ToggleSection = ({ action, children, headline, initialOpen = true }) => {
28446
30391
  gap: 1
28447
30392
  },
28448
30393
  children: [
28449
- /* @__PURE__ */ jsx138(Typography9, { sx: { fontWeight: 600 }, variant: "subtitle2", children: headline }),
28450
- isOpen ? /* @__PURE__ */ jsx138(KeyboardArrowDown3, { sx: { color: "text.secondary", height: 20, width: 20 } }) : /* @__PURE__ */ jsx138(KeyboardArrowRight3, { sx: { color: "text.secondary", height: 20, width: 20 } })
30394
+ /* @__PURE__ */ jsx139(Typography9, { sx: { fontWeight: 600 }, variant: "subtitle2", children: headline }),
30395
+ isOpen ? /* @__PURE__ */ jsx139(KeyboardArrowDown3, { sx: { color: "text.secondary", height: 20, width: 20 } }) : /* @__PURE__ */ jsx139(KeyboardArrowRight3, { sx: { color: "text.secondary", height: 20, width: 20 } })
28451
30396
  ]
28452
30397
  }
28453
30398
  ),
28454
- action !== false && /* @__PURE__ */ jsx138(Box14, { onClick: (event) => {
30399
+ action !== false && /* @__PURE__ */ jsx139(Box14, { onClick: (event) => {
28455
30400
  event.stopPropagation();
28456
30401
  }, children: action })
28457
30402
  ]
28458
30403
  }
28459
30404
  ),
28460
- isOpen && /* @__PURE__ */ jsx138(Box14, { children })
30405
+ isOpen && /* @__PURE__ */ jsx139(Box14, { children })
28461
30406
  ] });
28462
30407
  };
28463
30408
 
28464
30409
  // src/components/event-details/event-details.tsx
28465
- import { Fragment as Fragment9, jsx as jsx139, jsxs as jsxs130 } from "react/jsx-runtime";
30410
+ import { Fragment as Fragment10, jsx as jsx140, jsxs as jsxs130 } from "react/jsx-runtime";
28466
30411
  var checkIsLambdaInvoke = (span) => {
28467
30412
  if (span.service_name !== "lambda") {
28468
30413
  return false;
@@ -28477,13 +30422,13 @@ var checkIsSqsSendMessage = (span) => {
28477
30422
  return span.operation_name.startsWith("SendMessage");
28478
30423
  };
28479
30424
  var EventDetails = ({ onClose, selectedEvent }) => {
28480
- const eventGroups = useMemo11(
30425
+ const eventGroups = useMemo12(
28481
30426
  () => getEventGroupsByType(selectedEvent?.events ?? []),
28482
30427
  [selectedEvent?.events]
28483
30428
  );
28484
30429
  const [parseNestedJson, setParseNestedJson] = useState16(true);
28485
30430
  if (!selectedEvent) {
28486
- return /* @__PURE__ */ jsx139(Box15, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx139(Typography10, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
30431
+ return /* @__PURE__ */ jsx140(Box15, { sx: { p: 3, textAlign: "center" }, children: /* @__PURE__ */ jsx140(Typography10, { color: "text.secondary", variant: "body2", children: "Select an event to view details" }) });
28487
30432
  }
28488
30433
  const isLambdaInvoke = checkIsLambdaInvoke(selectedEvent);
28489
30434
  const isSqsSendMessage = checkIsSqsSendMessage(selectedEvent);
@@ -28519,48 +30464,48 @@ var EventDetails = ({ onClose, selectedEvent }) => {
28519
30464
  py: 1
28520
30465
  },
28521
30466
  children: [
28522
- /* @__PURE__ */ jsx139(Box15, { children: /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "h6", children: "Operation Details" }) }),
28523
- onClose && /* @__PURE__ */ jsx139(IconButton4, { "data-testid": EVENT_DETAILS_CLOSE_BUTTON_TEST_ID, onClick: onClose, size: "small", children: /* @__PURE__ */ jsx139(Close2, {}) })
30467
+ /* @__PURE__ */ jsx140(Box15, { children: /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "h6", children: "Operation Details" }) }),
30468
+ onClose && /* @__PURE__ */ jsx140(IconButton4, { "data-testid": EVENT_DETAILS_CLOSE_BUTTON_TEST_ID, onClick: onClose, size: "small", children: /* @__PURE__ */ jsx140(Close2, {}) })
28524
30469
  ]
28525
30470
  }
28526
30471
  ),
28527
- /* @__PURE__ */ jsx139(Box15, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 2, children: [
28528
- /* @__PURE__ */ jsx139(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ jsxs130(Stack2, { "data-testid": EVENT_DETAILS_SECTION_BASIC_INFORMATION_TEST_ID, spacing: 1, children: [
30472
+ /* @__PURE__ */ jsx140(Box15, { sx: { flexGrow: 1, overflow: "auto", p: 2 }, children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 2, children: [
30473
+ /* @__PURE__ */ jsx140(ToggleSection, { headline: "Basic Information", children: /* @__PURE__ */ jsxs130(Stack2, { "data-testid": EVENT_DETAILS_SECTION_BASIC_INFORMATION_TEST_ID, spacing: 1, children: [
28529
30474
  /* @__PURE__ */ jsxs130(Box15, { sx: { display: "grid", gap: 2, gridTemplateColumns: "1.3fr 1fr" }, children: [
28530
30475
  /* @__PURE__ */ jsxs130(Box15, { children: [
28531
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
28532
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_SERVICE_NAME_TEST_ID, variant: "body2", children: selectedEvent.service_name })
30476
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Service" }),
30477
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_SERVICE_NAME_TEST_ID, variant: "body2", children: selectedEvent.service_name })
28533
30478
  ] }),
28534
30479
  /* @__PURE__ */ jsxs130(Box15, { children: [
28535
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
28536
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_OPERATION_NAME_TEST_ID, variant: "body2", children: selectedEvent.operation_name })
30480
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Operation" }),
30481
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_OPERATION_NAME_TEST_ID, variant: "body2", children: selectedEvent.operation_name })
28537
30482
  ] })
28538
30483
  ] }),
28539
30484
  /* @__PURE__ */ jsxs130(Box15, { children: [
28540
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
28541
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_RESOURCE_NAME_TEST_ID, variant: "body2", children: selectedEvent.resource_name })
30485
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource" }),
30486
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_RESOURCE_NAME_TEST_ID, variant: "body2", children: selectedEvent.resource_name })
28542
30487
  ] }),
28543
30488
  Boolean(resourceArn) && /* @__PURE__ */ jsxs130(Box15, { children: [
28544
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource ARN" }),
28545
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_RESOURCE_ARN_TEST_ID, variant: "body2", children: resourceArn })
30489
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Resource ARN" }),
30490
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_RESOURCE_ARN_TEST_ID, variant: "body2", children: resourceArn })
28546
30491
  ] }),
28547
30492
  /* @__PURE__ */ jsxs130(Box15, { sx: { display: "grid", gap: 1, gridTemplateColumns: "1.3fr 1fr" }, children: [
28548
30493
  /* @__PURE__ */ jsxs130(Box15, { children: [
28549
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Account" }),
28550
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_ACCOUNT_TEST_ID, variant: "body2", children: selectedEvent.account_id })
30494
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Account" }),
30495
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_ACCOUNT_TEST_ID, variant: "body2", children: selectedEvent.account_id })
28551
30496
  ] }),
28552
30497
  /* @__PURE__ */ jsxs130(Box15, { children: [
28553
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
28554
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_REGION_TEST_ID, variant: "body2", children: selectedEvent.region })
30498
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Region" }),
30499
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_REGION_TEST_ID, variant: "body2", children: selectedEvent.region })
28555
30500
  ] })
28556
30501
  ] }),
28557
30502
  /* @__PURE__ */ jsxs130(Box15, { sx: { display: "grid", gap: 1, gridTemplateColumns: duration === void 0 ? "1fr" : "1.3fr 1fr" }, children: [
28558
30503
  /* @__PURE__ */ jsxs130(Box15, { children: [
28559
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
28560
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_START_TIME_TEST_ID, variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
30504
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Start Time" }),
30505
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_START_TIME_TEST_ID, variant: "body2", children: unixNanoToDate(selectedEvent.start_time_unix_nano)?.toISOString() })
28561
30506
  ] }),
28562
30507
  duration !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
28563
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
30508
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Duration" }),
28564
30509
  /* @__PURE__ */ jsxs130(Typography10, { "data-testid": EVENT_DETAILS_DURATION_TEST_ID, variant: "body2", children: [
28565
30510
  duration,
28566
30511
  "ms"
@@ -28568,8 +30513,8 @@ var EventDetails = ({ onClose, selectedEvent }) => {
28568
30513
  ] })
28569
30514
  ] }),
28570
30515
  /* @__PURE__ */ jsxs130(Box15, { children: [
28571
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Status" }),
28572
- /* @__PURE__ */ jsx139(Stack2, { alignItems: "center", direction: "row", flexWrap: "wrap", gap: 1, sx: { mb: eventGroups.errors || eventGroups.warnings ? 1 : 0 }, children: /* @__PURE__ */ jsx139(
30516
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Status" }),
30517
+ /* @__PURE__ */ jsx140(Stack2, { alignItems: "center", direction: "row", flexWrap: "wrap", gap: 1, sx: { mb: eventGroups.errors || eventGroups.warnings ? 1 : 0 }, children: /* @__PURE__ */ jsx140(
28573
30518
  Chip3,
28574
30519
  {
28575
30520
  color: selectedEvent.status_code === 2 ? "error" : selectedEvent.status_code === 1 ? "success" : "default",
@@ -28580,50 +30525,50 @@ var EventDetails = ({ onClose, selectedEvent }) => {
28580
30525
  ) })
28581
30526
  ] })
28582
30527
  ] }) }),
28583
- /* @__PURE__ */ jsx139(Divider3, {}),
30528
+ /* @__PURE__ */ jsx140(Divider3, {}),
28584
30529
  /* @__PURE__ */ jsxs130(ToggleSection, { headline: "Permissions", children: [
28585
- selectedEvent.iam_errors_suppressed && /* @__PURE__ */ jsx139(Alert4, { "data-testid": EVENT_DETAILS_IAM_ERRORS_SUPPRESSED_TEST_ID, severity: "warning", sx: { mb: 1 }, children: "IAM errors are suppressed \u2014 upgrade your license to view" }),
28586
- !selectedEvent.iam_errors_suppressed && !eventGroups.permissions && !eventGroups.errors && !eventGroups.warnings && /* @__PURE__ */ jsx139(Typography10, { color: "text.secondary", variant: "body2", children: "There is no permission information available." }),
28587
- eventGroups.permissions && /* @__PURE__ */ jsx139(EventDetail, { displayText: "Permissions", events: eventGroups.permissions, type: "permission" }),
28588
- eventGroups.errors && /* @__PURE__ */ jsx139(EventDetail, { displayText: "Error", events: eventGroups.errors, type: "error" }),
28589
- eventGroups.warnings && /* @__PURE__ */ jsx139(EventDetail, { displayText: "Warning", events: eventGroups.warnings, type: "warning" })
30530
+ selectedEvent.iam_errors_suppressed && /* @__PURE__ */ jsx140(Alert4, { "data-testid": EVENT_DETAILS_IAM_ERRORS_SUPPRESSED_TEST_ID, severity: "warning", sx: { mb: 1 }, children: "IAM errors are suppressed \u2014 upgrade your license to view" }),
30531
+ !selectedEvent.iam_errors_suppressed && !eventGroups.permissions && !eventGroups.errors && !eventGroups.warnings && /* @__PURE__ */ jsx140(Typography10, { color: "text.secondary", variant: "body2", children: "There is no permission information available." }),
30532
+ eventGroups.permissions && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Permissions", events: eventGroups.permissions, type: "permission" }),
30533
+ eventGroups.errors && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Error", events: eventGroups.errors, type: "error" }),
30534
+ eventGroups.warnings && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Warning", events: eventGroups.warnings, type: "warning" })
28590
30535
  ] }),
28591
- hasPayloads && /* @__PURE__ */ jsxs130(Fragment9, { children: [
28592
- /* @__PURE__ */ jsx139(Divider3, {}),
28593
- /* @__PURE__ */ jsx139(
30536
+ hasPayloads && /* @__PURE__ */ jsxs130(Fragment10, { children: [
30537
+ /* @__PURE__ */ jsx140(Divider3, {}),
30538
+ /* @__PURE__ */ jsx140(
28594
30539
  ToggleSection,
28595
30540
  {
28596
- action: /* @__PURE__ */ jsx139(
30541
+ action: /* @__PURE__ */ jsx140(
28597
30542
  FormControlLabel2,
28598
30543
  {
28599
- control: /* @__PURE__ */ jsx139(Switch, { checked: !parseNestedJson, onChange: (event) => {
30544
+ control: /* @__PURE__ */ jsx140(Switch, { checked: !parseNestedJson, onChange: (event) => {
28600
30545
  setParseNestedJson(!event.target.checked);
28601
30546
  }, size: "small" }),
28602
- label: /* @__PURE__ */ jsx139(Typography10, { variant: "caption", children: "View raw data" }),
30547
+ label: /* @__PURE__ */ jsx140(Typography10, { variant: "caption", children: "View raw data" }),
28603
30548
  sx: { mr: 0 }
28604
30549
  }
28605
30550
  ),
28606
30551
  headline: "Payloads",
28607
30552
  children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 2, children: [
28608
30553
  requestPayload !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
28609
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Request" }),
28610
- /* @__PURE__ */ jsx139(PayloadViewer, { testId: EVENT_DETAILS_REQUEST_PAYLOAD, value: requestPayload })
30554
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Request" }),
30555
+ /* @__PURE__ */ jsx140(PayloadViewer, { testId: EVENT_DETAILS_REQUEST_PAYLOAD, value: requestPayload })
28611
30556
  ] }),
28612
30557
  (responsePayload !== void 0 || isResponseSuppressed) && /* @__PURE__ */ jsxs130(Box15, { children: [
28613
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Response" }),
28614
- isResponseSuppressed ? /* @__PURE__ */ jsx139(Box15, { sx: { py: 1 }, children: /* @__PURE__ */ jsx139(Alert4, { severity: "warning", sx: { mb: 1 }, children: "Response payload is available \u2014 upgrade your license to view" }) }) : /* @__PURE__ */ jsx139(PayloadViewer, { testId: EVENT_DETAILS_RESPONSE_PAYLOAD_TEST_ID, value: responsePayload })
30558
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Response" }),
30559
+ isResponseSuppressed ? /* @__PURE__ */ jsx140(Box15, { sx: { py: 1 }, children: /* @__PURE__ */ jsx140(Alert4, { severity: "warning", sx: { mb: 1 }, children: "Response payload is available \u2014 upgrade your license to view" }) }) : /* @__PURE__ */ jsx140(PayloadViewer, { testId: EVENT_DETAILS_RESPONSE_PAYLOAD_TEST_ID, value: responsePayload })
28615
30560
  ] }),
28616
30561
  exceptionPayload !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
28617
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Exception" }),
28618
- /* @__PURE__ */ jsx139(PayloadViewer, { testId: EVENT_DETAILS_EXCEPTION_PAYLOAD_TEST_ID, value: exceptionPayload })
30562
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Exception" }),
30563
+ /* @__PURE__ */ jsx140(PayloadViewer, { testId: EVENT_DETAILS_EXCEPTION_PAYLOAD_TEST_ID, value: exceptionPayload })
28619
30564
  ] })
28620
30565
  ] })
28621
30566
  }
28622
30567
  )
28623
30568
  ] }),
28624
- isLambdaInvoke && requestId !== void 0 && /* @__PURE__ */ jsxs130(Fragment9, { children: [
28625
- /* @__PURE__ */ jsx139(Divider3, {}),
28626
- /* @__PURE__ */ jsx139(ToggleSection, { headline: "Lambda Logs", children: /* @__PURE__ */ jsx139(
30569
+ isLambdaInvoke && requestId !== void 0 && /* @__PURE__ */ jsxs130(Fragment10, { children: [
30570
+ /* @__PURE__ */ jsx140(Divider3, {}),
30571
+ /* @__PURE__ */ jsx140(ToggleSection, { headline: "Lambda Logs", children: /* @__PURE__ */ jsx140(
28627
30572
  LambdaInvokeLogsSection,
28628
30573
  {
28629
30574
  endTimeNano: selectedEvent.end_time_unix_nano ?? selectedEvent.start_time_unix_nano,
@@ -28634,21 +30579,21 @@ var EventDetails = ({ onClose, selectedEvent }) => {
28634
30579
  }
28635
30580
  ) })
28636
30581
  ] }),
28637
- /* @__PURE__ */ jsx139(Divider3, {}),
28638
- /* @__PURE__ */ jsx139(ToggleSection, { headline: "Advanced Information", initialOpen: false, children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 1, children: [
30582
+ /* @__PURE__ */ jsx140(Divider3, {}),
30583
+ /* @__PURE__ */ jsx140(ToggleSection, { headline: "Advanced Information", initialOpen: false, children: /* @__PURE__ */ jsxs130(Stack2, { spacing: 1, children: [
28639
30584
  /* @__PURE__ */ jsxs130(Box15, { children: [
28640
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
28641
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_SPAN_ID_TEST_ID, variant: "body2", children: selectedEvent.span_id })
30585
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Span ID" }),
30586
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_SPAN_ID_TEST_ID, variant: "body2", children: selectedEvent.span_id })
28642
30587
  ] }),
28643
30588
  /* @__PURE__ */ jsxs130(Box15, { children: [
28644
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
28645
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_TRACE_ID_TEST_ID, variant: "body2", children: selectedEvent.trace_id })
30589
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Trace ID" }),
30590
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_TRACE_ID_TEST_ID, variant: "body2", children: selectedEvent.trace_id })
28646
30591
  ] }),
28647
30592
  requestId !== void 0 && /* @__PURE__ */ jsxs130(Box15, { children: [
28648
- /* @__PURE__ */ jsx139(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Request ID" }),
28649
- /* @__PURE__ */ jsx139(Typography10, { "data-testid": EVENT_DETAILS_REQUEST_ID_TEST_ID, variant: "body2", children: requestId })
30593
+ /* @__PURE__ */ jsx140(Typography10, { sx: { fontWeight: 600 }, variant: "caption", children: "Request ID" }),
30594
+ /* @__PURE__ */ jsx140(Typography10, { "data-testid": EVENT_DETAILS_REQUEST_ID_TEST_ID, variant: "body2", children: requestId })
28650
30595
  ] }),
28651
- eventGroups.info && /* @__PURE__ */ jsx139(EventDetail, { displayText: "Info", events: eventGroups.info, type: "info" })
30596
+ eventGroups.info && /* @__PURE__ */ jsx140(EventDetail, { displayText: "Info", events: eventGroups.info, type: "info" })
28652
30597
  ] }) })
28653
30598
  ] }) })
28654
30599
  ] });
@@ -28658,7 +30603,7 @@ var EventDetails = ({ onClose, selectedEvent }) => {
28658
30603
  import "@xyflow/react/dist/base.css";
28659
30604
  import { Alert as Alert5, Button as Button5, useTheme as useTheme5 } from "@mui/material";
28660
30605
  import { Background, MarkerType, Position as Position2, ReactFlow, useEdgesState, useNodesState } from "@xyflow/react";
28661
- import { useEffect as useEffect19 } from "react";
30606
+ import { useEffect as useEffect20 } from "react";
28662
30607
 
28663
30608
  // src/components/trace-graph/service-node.tsx
28664
30609
  import { Box as Box17, Divider as Divider4, Stack as Stack3, Typography as Typography11, useTheme as useTheme4 } from "@mui/material";
@@ -28669,23 +30614,23 @@ import { memo as memo11 } from "react";
28669
30614
  // src/components/trace-graph/problem-indicator.tsx
28670
30615
  import { Error as ErrorIcon2, Info as Info2, Warning as Warning2 } from "@mui/icons-material";
28671
30616
  import { Box as Box16, Tooltip as Tooltip4 } from "@mui/material";
28672
- import { useMemo as useMemo12 } from "react";
28673
- import { jsx as jsx140 } from "react/jsx-runtime";
30617
+ import { useMemo as useMemo13 } from "react";
30618
+ import { jsx as jsx141 } from "react/jsx-runtime";
28674
30619
  var ProblemIndicator = ({ error }) => {
28675
- const icon = useMemo12(() => {
30620
+ const icon = useMemo13(() => {
28676
30621
  switch (error.level) {
28677
30622
  case "error": {
28678
- return /* @__PURE__ */ jsx140(ErrorIcon2, { sx: { color: "#d32f2f", fontSize: "14px" } });
30623
+ return /* @__PURE__ */ jsx141(ErrorIcon2, { sx: { color: "#d32f2f", fontSize: "14px" } });
28679
30624
  }
28680
30625
  case "warning": {
28681
- return /* @__PURE__ */ jsx140(Warning2, { sx: { color: "#ff9800", fontSize: "14px" } });
30626
+ return /* @__PURE__ */ jsx141(Warning2, { sx: { color: "#ff9800", fontSize: "14px" } });
28682
30627
  }
28683
30628
  default: {
28684
- return /* @__PURE__ */ jsx140(Info2, { sx: { color: "#2196f3", fontSize: "14px" } });
30629
+ return /* @__PURE__ */ jsx141(Info2, { sx: { color: "#2196f3", fontSize: "14px" } });
28685
30630
  }
28686
30631
  }
28687
30632
  }, [error.level]);
28688
- const color2 = useMemo12(() => {
30633
+ const color2 = useMemo13(() => {
28689
30634
  switch (error.level) {
28690
30635
  case "error": {
28691
30636
  return "#d32f2f";
@@ -28698,7 +30643,7 @@ var ProblemIndicator = ({ error }) => {
28698
30643
  }
28699
30644
  }
28700
30645
  }, [error.level]);
28701
- return /* @__PURE__ */ jsx140(Tooltip4, { arrow: true, title: error.message ?? "Issue detected", children: /* @__PURE__ */ jsx140(
30646
+ return /* @__PURE__ */ jsx141(Tooltip4, { arrow: true, title: error.message ?? "Issue detected", children: /* @__PURE__ */ jsx141(
28702
30647
  Box16,
28703
30648
  {
28704
30649
  sx: {
@@ -28718,7 +30663,7 @@ var ProblemIndicator = ({ error }) => {
28718
30663
  };
28719
30664
 
28720
30665
  // src/components/trace-graph/service-node.tsx
28721
- import { jsx as jsx141, jsxs as jsxs131 } from "react/jsx-runtime";
30666
+ import { jsx as jsx142, jsxs as jsxs131 } from "react/jsx-runtime";
28722
30667
  var handleStyle = {
28723
30668
  backgroundColor: "white",
28724
30669
  borderColor: "lightgray",
@@ -28750,8 +30695,8 @@ var ServiceNode = memo11(({ data, selected }) => {
28750
30695
  },
28751
30696
  tabIndex: 0,
28752
30697
  children: [
28753
- /* @__PURE__ */ jsx141(Handle, { position: Position.Left, style: handleStyle, type: "target" }),
28754
- /* @__PURE__ */ jsx141(Handle, { position: Position.Right, style: handleStyle, type: "source" }),
30698
+ /* @__PURE__ */ jsx142(Handle, { position: Position.Left, style: handleStyle, type: "target" }),
30699
+ /* @__PURE__ */ jsx142(Handle, { position: Position.Right, style: handleStyle, type: "source" }),
28755
30700
  /* @__PURE__ */ jsxs131(
28756
30701
  Stack3,
28757
30702
  {
@@ -28759,9 +30704,9 @@ var ServiceNode = memo11(({ data, selected }) => {
28759
30704
  direction: "row",
28760
30705
  sx: { gap: "8px", pb: "2px", pt: "6px", px: "8px" },
28761
30706
  children: [
28762
- /* @__PURE__ */ jsx141(Box17, { sx: { borderRadius: "4px", flexShrink: 0, lineHeight: 0, overflow: "hidden" }, children: /* @__PURE__ */ jsx141(AwsServiceIcon, { hideTooltip: true, service: data.event.service_name, size: "medium" }) }),
30707
+ /* @__PURE__ */ jsx142(Box17, { sx: { borderRadius: "4px", flexShrink: 0, lineHeight: 0, overflow: "hidden" }, children: /* @__PURE__ */ jsx142(AwsServiceIcon, { hideTooltip: true, service: data.event.service_name, size: "medium" }) }),
28763
30708
  /* @__PURE__ */ jsxs131(Stack3, { sx: { minWidth: 0 }, children: [
28764
- /* @__PURE__ */ jsx141(
30709
+ /* @__PURE__ */ jsx142(
28765
30710
  Typography11,
28766
30711
  {
28767
30712
  noWrap: true,
@@ -28770,7 +30715,7 @@ var ServiceNode = memo11(({ data, selected }) => {
28770
30715
  children: data.event.service_name
28771
30716
  }
28772
30717
  ),
28773
- data.event.resource_name != "" && /* @__PURE__ */ jsx141(
30718
+ data.event.resource_name != "" && /* @__PURE__ */ jsx142(
28774
30719
  Typography11,
28775
30720
  {
28776
30721
  color: "text.secondary",
@@ -28784,7 +30729,7 @@ var ServiceNode = memo11(({ data, selected }) => {
28784
30729
  ]
28785
30730
  }
28786
30731
  ),
28787
- /* @__PURE__ */ jsx141(Divider4, { sx: { ml: "38px", mr: "8px", my: "5px" } }),
30732
+ /* @__PURE__ */ jsx142(Divider4, { sx: { ml: "38px", mr: "8px", my: "5px" } }),
28788
30733
  /* @__PURE__ */ jsxs131(
28789
30734
  Stack3,
28790
30735
  {
@@ -28792,7 +30737,7 @@ var ServiceNode = memo11(({ data, selected }) => {
28792
30737
  direction: "row",
28793
30738
  sx: { minWidth: 0, pb: "5px", pr: "8px", pt: "1px" },
28794
30739
  children: [
28795
- /* @__PURE__ */ jsx141(
30740
+ /* @__PURE__ */ jsx142(
28796
30741
  Box17,
28797
30742
  {
28798
30743
  sx: {
@@ -28802,10 +30747,10 @@ var ServiceNode = memo11(({ data, selected }) => {
28802
30747
  justifyContent: "center",
28803
30748
  width: "38px"
28804
30749
  },
28805
- children: hasErrors && data.event.errors?.map((error) => /* @__PURE__ */ jsx141(ProblemIndicator, { error }, error.span_id))
30750
+ children: hasErrors && data.event.errors?.map((error) => /* @__PURE__ */ jsx142(ProblemIndicator, { error }, error.span_id))
28806
30751
  }
28807
30752
  ),
28808
- /* @__PURE__ */ jsx141(
30753
+ /* @__PURE__ */ jsx142(
28809
30754
  Typography11,
28810
30755
  {
28811
30756
  "data-testid": SERVICE_NODE_OPERATION_NAME_TEST_ID,
@@ -28883,7 +30828,7 @@ import { Box as Box18, IconButton as IconButton5 } from "@mui/material";
28883
30828
  import { useReactFlow, useStore as useStore2 } from "@xyflow/react";
28884
30829
  import { memo as memo12 } from "react";
28885
30830
  import { shallow } from "zustand/shallow";
28886
- import { jsx as jsx142, jsxs as jsxs132 } from "react/jsx-runtime";
30831
+ import { jsx as jsx143, jsxs as jsxs132 } from "react/jsx-runtime";
28887
30832
  var selector = (s2) => ({
28888
30833
  isInteractive: s2.nodesDraggable || s2.nodesConnectable || s2.elementsSelectable,
28889
30834
  maxZoomReached: s2.transform[2] >= s2.maxZoom,
@@ -28915,33 +30860,33 @@ var Controls = memo12(() => {
28915
30860
  zIndex: 5
28916
30861
  },
28917
30862
  children: [
28918
- /* @__PURE__ */ jsx142(
30863
+ /* @__PURE__ */ jsx143(
28919
30864
  IconButton5,
28920
30865
  {
28921
30866
  className: "react-flow__controls-zoomin",
28922
30867
  disabled: maxZoomReached,
28923
30868
  onClick: onZoomInHandler,
28924
30869
  size: "small",
28925
- children: /* @__PURE__ */ jsx142(Add, {})
30870
+ children: /* @__PURE__ */ jsx143(Add, {})
28926
30871
  }
28927
30872
  ),
28928
- /* @__PURE__ */ jsx142(
30873
+ /* @__PURE__ */ jsx143(
28929
30874
  IconButton5,
28930
30875
  {
28931
30876
  className: "react-flow__controls-zoomout",
28932
30877
  disabled: minZoomReached,
28933
30878
  onClick: onZoomOutHandler,
28934
30879
  size: "small",
28935
- children: /* @__PURE__ */ jsx142(Remove, {})
30880
+ children: /* @__PURE__ */ jsx143(Remove, {})
28936
30881
  }
28937
30882
  ),
28938
- /* @__PURE__ */ jsx142(
30883
+ /* @__PURE__ */ jsx143(
28939
30884
  IconButton5,
28940
30885
  {
28941
30886
  className: "react-flow__controls-fitview",
28942
30887
  onClick: onFitViewHandler,
28943
30888
  size: "small",
28944
- children: /* @__PURE__ */ jsx142(FitScreen, {})
30889
+ children: /* @__PURE__ */ jsx143(FitScreen, {})
28945
30890
  }
28946
30891
  )
28947
30892
  ]
@@ -28950,7 +30895,7 @@ var Controls = memo12(() => {
28950
30895
  });
28951
30896
 
28952
30897
  // src/components/trace-graph/trace-graph.tsx
28953
- import { Fragment as Fragment10, jsx as jsx143, jsxs as jsxs133 } from "react/jsx-runtime";
30898
+ import { Fragment as Fragment11, jsx as jsx144, jsxs as jsxs133 } from "react/jsx-runtime";
28954
30899
  var nodeTypes = {
28955
30900
  service: ServiceNode
28956
30901
  };
@@ -28963,7 +30908,7 @@ var TraceGraph = ({
28963
30908
  }) => {
28964
30909
  const [nodes, setNodes, onNodesChange] = useNodesState([]);
28965
30910
  const [edges, setEdges] = useEdgesState([]);
28966
- useEffect19(() => {
30911
+ useEffect20(() => {
28967
30912
  const allNodes = [];
28968
30913
  const allEdges = [];
28969
30914
  for (const span of spans.data ?? []) {
@@ -29014,11 +30959,11 @@ var TraceGraph = ({
29014
30959
  setEdges(layoutedEdges);
29015
30960
  }, [spans.data, initialFocusEventId, order2, setNodes, setEdges]);
29016
30961
  const theme = useTheme5();
29017
- return /* @__PURE__ */ jsxs133(Fragment10, { children: [
30962
+ return /* @__PURE__ */ jsxs133(Fragment11, { children: [
29018
30963
  spans.error && /* @__PURE__ */ jsxs133(
29019
30964
  Alert5,
29020
30965
  {
29021
- action: /* @__PURE__ */ jsx143(Button5, { onClick: () => {
30966
+ action: /* @__PURE__ */ jsx144(Button5, { onClick: () => {
29022
30967
  onRefresh();
29023
30968
  }, children: "Retry" }),
29024
30969
  severity: "error",
@@ -29047,8 +30992,8 @@ var TraceGraph = ({
29047
30992
  onNodesChange,
29048
30993
  selectNodesOnDrag: false,
29049
30994
  children: [
29050
- /* @__PURE__ */ jsx143(Controls, {}),
29051
- /* @__PURE__ */ jsx143(
30995
+ /* @__PURE__ */ jsx144(Controls, {}),
30996
+ /* @__PURE__ */ jsx144(
29052
30997
  Background,
29053
30998
  {
29054
30999
  bgColor: theme.palette.background.default,
@@ -29062,7 +31007,7 @@ var TraceGraph = ({
29062
31007
  };
29063
31008
 
29064
31009
  // src/pages/trace-graph-page.tsx
29065
- import { Fragment as Fragment11, jsx as jsx144, jsxs as jsxs134 } from "react/jsx-runtime";
31010
+ import { Fragment as Fragment12, jsx as jsx145, jsxs as jsxs134 } from "react/jsx-runtime";
29066
31011
  var HEADER_HEIGHT = 56;
29067
31012
  var DRAWER_WIDTH = "35%";
29068
31013
  var Main = styled("main", { shouldForwardProp: (property) => property !== "open" })(({ open, theme }) => ({
@@ -29126,12 +31071,12 @@ var TraceGraphView = ({
29126
31071
  },
29127
31072
  children: [
29128
31073
  /* @__PURE__ */ jsxs134(Box19, { sx: { display: "flex", width: "100%" }, children: [
29129
- /* @__PURE__ */ jsx144(Button6, { onClick: () => {
31074
+ /* @__PURE__ */ jsx145(Button6, { onClick: () => {
29130
31075
  navigateToSpansList();
29131
- }, startIcon: /* @__PURE__ */ jsx144(ArrowBack, {}), children: "Go back" }),
29132
- /* @__PURE__ */ jsx144(Box19, { sx: { flexGrow: 1 } })
31076
+ }, startIcon: /* @__PURE__ */ jsx145(ArrowBack, {}), children: "Go back" }),
31077
+ /* @__PURE__ */ jsx145(Box19, { sx: { flexGrow: 1 } })
29133
31078
  ] }),
29134
- /* @__PURE__ */ jsx144(
31079
+ /* @__PURE__ */ jsx145(
29135
31080
  Paper3,
29136
31081
  {
29137
31082
  sx: {
@@ -29141,7 +31086,7 @@ var TraceGraphView = ({
29141
31086
  position: "relative",
29142
31087
  width: "100%"
29143
31088
  },
29144
- children: shouldShowStatusMessage ? /* @__PURE__ */ jsx144(
31089
+ children: shouldShowStatusMessage ? /* @__PURE__ */ jsx145(
29145
31090
  StatusMessage,
29146
31091
  {
29147
31092
  error: statusError,
@@ -29149,15 +31094,15 @@ var TraceGraphView = ({
29149
31094
  onRetry: handleRetry,
29150
31095
  status
29151
31096
  }
29152
- ) : /* @__PURE__ */ jsxs134(Fragment11, { children: [
29153
- /* @__PURE__ */ jsx144(Main, { open, children: /* @__PURE__ */ jsx144(
31097
+ ) : /* @__PURE__ */ jsxs134(Fragment12, { children: [
31098
+ /* @__PURE__ */ jsx145(Main, { open, children: /* @__PURE__ */ jsx145(
29154
31099
  Box19,
29155
31100
  {
29156
31101
  sx: {
29157
31102
  height: "100%",
29158
31103
  overflow: "auto"
29159
31104
  },
29160
- children: traceId !== void 0 && /* @__PURE__ */ jsx144(ReactFlowProvider, { children: /* @__PURE__ */ jsx144(
31105
+ children: traceId !== void 0 && /* @__PURE__ */ jsx145(ReactFlowProvider, { children: /* @__PURE__ */ jsx145(
29161
31106
  TraceGraph,
29162
31107
  {
29163
31108
  initialFocusEventId: spanId,
@@ -29175,7 +31120,7 @@ var TraceGraphView = ({
29175
31120
  ) })
29176
31121
  }
29177
31122
  ) }),
29178
- /* @__PURE__ */ jsx144(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ jsx144(EventDetails, { onClose: handleClose, selectedEvent }) })
31123
+ /* @__PURE__ */ jsx145(StyledDrawer, { anchor: "right", open, variant: "persistent", children: /* @__PURE__ */ jsx145(EventDetails, { onClose: handleClose, selectedEvent }) })
29179
31124
  ] })
29180
31125
  }
29181
31126
  )
@@ -29235,19 +31180,19 @@ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId
29235
31180
  setLoading(false);
29236
31181
  }
29237
31182
  }, [api, traceId]);
29238
- useEffect20(() => {
31183
+ useEffect21(() => {
29239
31184
  void fetchSpans();
29240
31185
  }, [fetchSpans]);
29241
31186
  const [open, setOpen] = useState17(true);
29242
31187
  const [selectedEvent, setSelectedEvent] = useState17(() => spans?.find((span) => span.span_id === spanId));
29243
- const spansReference = useRef15();
29244
- useEffect20(() => {
31188
+ const spansReference = useRef16();
31189
+ useEffect21(() => {
29245
31190
  if (!spansReference.current && spans) {
29246
31191
  setSelectedEvent(spans.find((span) => span.span_id === spanId));
29247
31192
  spansReference.current = spans;
29248
31193
  }
29249
31194
  }, [spans, setSelectedEvent, spanId]);
29250
- const { checkStatus, error: statusError, status } = useStatus();
31195
+ const { checkStatus, status, statusError } = useAppInspectorStatus();
29251
31196
  const handleEnable = useCallback9(async () => {
29252
31197
  await api.setStatus({ status: "ENABLED" });
29253
31198
  void checkStatus();
@@ -29263,7 +31208,7 @@ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId
29263
31208
  const navigateToSpansList = useCallback9(() => {
29264
31209
  onClose?.();
29265
31210
  }, [onClose]);
29266
- return /* @__PURE__ */ jsx144(
31211
+ return /* @__PURE__ */ jsx145(
29267
31212
  TraceGraphView,
29268
31213
  {
29269
31214
  fetchError,
@@ -29289,12 +31234,10 @@ var TraceGraphPage = ({ onClose, order: order2 = "oldest_first", spanId, traceId
29289
31234
  };
29290
31235
 
29291
31236
  // src/pages/spans-list-page.tsx
29292
- import { Fragment as Fragment12, jsx as jsx145, jsxs as jsxs135 } from "react/jsx-runtime";
31237
+ import { Fragment as Fragment13, jsx as jsx146, jsxs as jsxs135 } from "react/jsx-runtime";
29293
31238
  var SpansListPage = () => {
29294
31239
  const api = useAppInspectorApi();
29295
31240
  const {
29296
- checking,
29297
- checkStatus,
29298
31241
  clearingSpans,
29299
31242
  clearSpans,
29300
31243
  fetchBackward,
@@ -29307,13 +31250,12 @@ var SpansListPage = () => {
29307
31250
  iamErrorCount,
29308
31251
  licenseLimit,
29309
31252
  spans,
29310
- status,
29311
- statusError,
29312
31253
  streamPaused,
29313
31254
  systemLimit,
29314
31255
  toggleStream,
29315
31256
  totalCount
29316
31257
  } = useSpans();
31258
+ const { checking, checkStatus, status, statusError } = useAppInspectorStatus();
29317
31259
  const clearSpansSync = useCallback10(() => {
29318
31260
  void clearSpans();
29319
31261
  }, [clearSpans]);
@@ -29335,7 +31277,7 @@ var SpansListPage = () => {
29335
31277
  void checkStatus();
29336
31278
  }, [api, checkStatus]);
29337
31279
  const shouldShowStatusMessage = Boolean(statusError) || status?.status === "DISABLED";
29338
- return /* @__PURE__ */ jsxs135(Fragment12, { children: [
31280
+ return /* @__PURE__ */ jsxs135(Fragment13, { children: [
29339
31281
  /* @__PURE__ */ jsxs135(
29340
31282
  Box20,
29341
31283
  {
@@ -29352,7 +31294,7 @@ var SpansListPage = () => {
29352
31294
  width: "100%"
29353
31295
  },
29354
31296
  children: [
29355
- !checking && !shouldShowStatusMessage && /* @__PURE__ */ jsx145(
31297
+ !checking && !shouldShowStatusMessage && /* @__PURE__ */ jsx146(
29356
31298
  EmulatorVersionBanner,
29357
31299
  {
29358
31300
  compatibility: bannerDismissed && versionCompatibility === "warning" ? "ok" : versionCompatibility,
@@ -29362,7 +31304,7 @@ var SpansListPage = () => {
29362
31304
  } : void 0
29363
31305
  }
29364
31306
  ),
29365
- shouldShowStatusMessage ? /* @__PURE__ */ jsx145(
31307
+ shouldShowStatusMessage ? /* @__PURE__ */ jsx146(
29366
31308
  StatusMessage,
29367
31309
  {
29368
31310
  error: statusError,
@@ -29371,7 +31313,7 @@ var SpansListPage = () => {
29371
31313
  onRetry: handleRetry,
29372
31314
  status
29373
31315
  }
29374
- ) : /* @__PURE__ */ jsx145(
31316
+ ) : /* @__PURE__ */ jsx146(
29375
31317
  SpansList,
29376
31318
  {
29377
31319
  clearingSpans,
@@ -29398,7 +31340,7 @@ var SpansListPage = () => {
29398
31340
  ]
29399
31341
  }
29400
31342
  ),
29401
- selectedTraceId !== void 0 && /* @__PURE__ */ jsx145(TraceGraphPage, { onClose: () => {
31343
+ selectedTraceId !== void 0 && /* @__PURE__ */ jsx146(TraceGraphPage, { onClose: () => {
29402
31344
  setSelectedTraceId(void 0);
29403
31345
  }, order: order2, spanId: selectedSpanId, traceId: selectedTraceId })
29404
31346
  ] });