@bryan-thompson/inspector-assessment 1.7.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,6 +54,15 @@ var jsxRuntime = { exports: {} };
54
54
  var reactJsxRuntime_production_min = {};
55
55
  var react = { exports: {} };
56
56
  var react_production_min = {};
57
+ /**
58
+ * @license React
59
+ * react.production.min.js
60
+ *
61
+ * Copyright (c) Facebook, Inc. and its affiliates.
62
+ *
63
+ * This source code is licensed under the MIT license found in the
64
+ * LICENSE file in the root directory of this source tree.
65
+ */
57
66
  var hasRequiredReact_production_min;
58
67
  function requireReact_production_min() {
59
68
  if (hasRequiredReact_production_min) return react_production_min;
@@ -317,6 +326,15 @@ function requireReact() {
317
326
  }
318
327
  return react.exports;
319
328
  }
329
+ /**
330
+ * @license React
331
+ * react-jsx-runtime.production.min.js
332
+ *
333
+ * Copyright (c) Facebook, Inc. and its affiliates.
334
+ *
335
+ * This source code is licensed under the MIT license found in the
336
+ * LICENSE file in the root directory of this source tree.
337
+ */
320
338
  var hasRequiredReactJsxRuntime_production_min;
321
339
  function requireReactJsxRuntime_production_min() {
322
340
  if (hasRequiredReactJsxRuntime_production_min) return reactJsxRuntime_production_min;
@@ -357,6 +375,15 @@ var reactDom = { exports: {} };
357
375
  var reactDom_production_min = {};
358
376
  var scheduler = { exports: {} };
359
377
  var scheduler_production_min = {};
378
+ /**
379
+ * @license React
380
+ * scheduler.production.min.js
381
+ *
382
+ * Copyright (c) Facebook, Inc. and its affiliates.
383
+ *
384
+ * This source code is licensed under the MIT license found in the
385
+ * LICENSE file in the root directory of this source tree.
386
+ */
360
387
  var hasRequiredScheduler_production_min;
361
388
  function requireScheduler_production_min() {
362
389
  if (hasRequiredScheduler_production_min) return scheduler_production_min;
@@ -601,6 +628,15 @@ function requireScheduler() {
601
628
  }
602
629
  return scheduler.exports;
603
630
  }
631
+ /**
632
+ * @license React
633
+ * react-dom.production.min.js
634
+ *
635
+ * Copyright (c) Facebook, Inc. and its affiliates.
636
+ *
637
+ * This source code is licensed under the MIT license found in the
638
+ * LICENSE file in the root directory of this source tree.
639
+ */
604
640
  var hasRequiredReactDom_production_min;
605
641
  function requireReactDom_production_min() {
606
642
  if (hasRequiredReactDom_production_min) return reactDom_production_min;
@@ -1078,13 +1114,13 @@ function requireReactDom_production_min() {
1078
1114
  function lb(a, b) {
1079
1115
  return null == a || "http://www.w3.org/1999/xhtml" === a ? kb(b) : "http://www.w3.org/2000/svg" === a && "foreignObject" === b ? "http://www.w3.org/1999/xhtml" : a;
1080
1116
  }
1081
- var mb, nb = (function(a) {
1117
+ var mb, nb = function(a) {
1082
1118
  return "undefined" !== typeof MSApp && MSApp.execUnsafeLocalFunction ? function(b, c, d, e) {
1083
1119
  MSApp.execUnsafeLocalFunction(function() {
1084
1120
  return a(b, c, d, e);
1085
1121
  });
1086
1122
  } : a;
1087
- })(function(a, b) {
1123
+ }(function(a, b) {
1088
1124
  if ("http://www.w3.org/2000/svg" !== a.namespaceURI || "innerHTML" in a) a.innerHTML = b;
1089
1125
  else {
1090
1126
  mb = mb || document.createElement("div");
@@ -7154,7 +7190,7 @@ function useToast() {
7154
7190
  }
7155
7191
  var reactDomExports = requireReactDom();
7156
7192
  const ReactDOM = /* @__PURE__ */ getDefaultExportFromCjs(reactDomExports);
7157
- function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
7193
+ function composeEventHandlers$1(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
7158
7194
  return function handleEvent(event) {
7159
7195
  originalEventHandler?.(event);
7160
7196
  if (checkForDefaultPrevented === false || !event.defaultPrevented) {
@@ -7573,9 +7609,9 @@ var DismissableLayer = reactExports.forwardRef(
7573
7609
  pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
7574
7610
  ...props.style
7575
7611
  },
7576
- onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),
7577
- onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),
7578
- onPointerDownCapture: composeEventHandlers(
7612
+ onFocusCapture: composeEventHandlers$1(props.onFocusCapture, focusOutside.onFocusCapture),
7613
+ onBlurCapture: composeEventHandlers$1(props.onBlurCapture, focusOutside.onBlurCapture),
7614
+ onPointerDownCapture: composeEventHandlers$1(
7579
7615
  props.onPointerDownCapture,
7580
7616
  pointerDownOutside.onPointerDownCapture
7581
7617
  )
@@ -7757,7 +7793,7 @@ function usePresence(present) {
7757
7793
  const ownerWindow = node.ownerDocument.defaultView ?? window;
7758
7794
  const handleAnimationEnd = (event) => {
7759
7795
  const currentAnimationName = getAnimationName(stylesRef.current);
7760
- const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));
7796
+ const isCurrentAnimation = currentAnimationName.includes(event.animationName);
7761
7797
  if (event.target === node && isCurrentAnimation) {
7762
7798
  send("ANIMATION_END");
7763
7799
  if (!prevPresentRef.current) {
@@ -8106,6 +8142,7 @@ var FocusProxy = reactExports.forwardRef(
8106
8142
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
8107
8143
  VisuallyHidden,
8108
8144
  {
8145
+ "aria-hidden": true,
8109
8146
  tabIndex: 0,
8110
8147
  ...proxyProps,
8111
8148
  ref: forwardedRef,
@@ -8143,23 +8180,23 @@ var Toast$1 = reactExports.forwardRef(
8143
8180
  onClose: () => setOpen(false),
8144
8181
  onPause: useCallbackRef$1(props.onPause),
8145
8182
  onResume: useCallbackRef$1(props.onResume),
8146
- onSwipeStart: composeEventHandlers(props.onSwipeStart, (event) => {
8183
+ onSwipeStart: composeEventHandlers$1(props.onSwipeStart, (event) => {
8147
8184
  event.currentTarget.setAttribute("data-swipe", "start");
8148
8185
  }),
8149
- onSwipeMove: composeEventHandlers(props.onSwipeMove, (event) => {
8186
+ onSwipeMove: composeEventHandlers$1(props.onSwipeMove, (event) => {
8150
8187
  const { x, y } = event.detail.delta;
8151
8188
  event.currentTarget.setAttribute("data-swipe", "move");
8152
8189
  event.currentTarget.style.setProperty("--radix-toast-swipe-move-x", `${x}px`);
8153
8190
  event.currentTarget.style.setProperty("--radix-toast-swipe-move-y", `${y}px`);
8154
8191
  }),
8155
- onSwipeCancel: composeEventHandlers(props.onSwipeCancel, (event) => {
8192
+ onSwipeCancel: composeEventHandlers$1(props.onSwipeCancel, (event) => {
8156
8193
  event.currentTarget.setAttribute("data-swipe", "cancel");
8157
8194
  event.currentTarget.style.removeProperty("--radix-toast-swipe-move-x");
8158
8195
  event.currentTarget.style.removeProperty("--radix-toast-swipe-move-y");
8159
8196
  event.currentTarget.style.removeProperty("--radix-toast-swipe-end-x");
8160
8197
  event.currentTarget.style.removeProperty("--radix-toast-swipe-end-y");
8161
8198
  }),
8162
- onSwipeEnd: composeEventHandlers(props.onSwipeEnd, (event) => {
8199
+ onSwipeEnd: composeEventHandlers$1(props.onSwipeEnd, (event) => {
8163
8200
  const { x, y } = event.detail.delta;
8164
8201
  event.currentTarget.setAttribute("data-swipe", "end");
8165
8202
  event.currentTarget.style.removeProperty("--radix-toast-swipe-move-x");
@@ -8257,6 +8294,7 @@ var ToastImpl = reactExports.forwardRef(
8257
8294
  __scopeToast,
8258
8295
  role: "status",
8259
8296
  "aria-live": type2 === "foreground" ? "assertive" : "polite",
8297
+ "aria-atomic": true,
8260
8298
  children: announceTextContent
8261
8299
  }
8262
8300
  ),
@@ -8265,20 +8303,23 @@ var ToastImpl = reactExports.forwardRef(
8265
8303
  Root$6,
8266
8304
  {
8267
8305
  asChild: true,
8268
- onEscapeKeyDown: composeEventHandlers(onEscapeKeyDown, () => {
8306
+ onEscapeKeyDown: composeEventHandlers$1(onEscapeKeyDown, () => {
8269
8307
  if (!context.isFocusedToastEscapeKeyDownRef.current) handleClose();
8270
8308
  context.isFocusedToastEscapeKeyDownRef.current = false;
8271
8309
  }),
8272
8310
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(
8273
8311
  Primitive.li,
8274
8312
  {
8313
+ role: "status",
8314
+ "aria-live": "off",
8315
+ "aria-atomic": true,
8275
8316
  tabIndex: 0,
8276
8317
  "data-state": open ? "open" : "closed",
8277
8318
  "data-swipe-direction": context.swipeDirection,
8278
8319
  ...toastProps,
8279
8320
  ref: composedRefs,
8280
8321
  style: { userSelect: "none", touchAction: "none", ...props.style },
8281
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
8322
+ onKeyDown: composeEventHandlers$1(props.onKeyDown, (event) => {
8282
8323
  if (event.key !== "Escape") return;
8283
8324
  onEscapeKeyDown?.(event.nativeEvent);
8284
8325
  if (!event.nativeEvent.defaultPrevented) {
@@ -8286,11 +8327,11 @@ var ToastImpl = reactExports.forwardRef(
8286
8327
  handleClose();
8287
8328
  }
8288
8329
  }),
8289
- onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {
8330
+ onPointerDown: composeEventHandlers$1(props.onPointerDown, (event) => {
8290
8331
  if (event.button !== 0) return;
8291
8332
  pointerStartRef.current = { x: event.clientX, y: event.clientY };
8292
8333
  }),
8293
- onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {
8334
+ onPointerMove: composeEventHandlers$1(props.onPointerMove, (event) => {
8294
8335
  if (!pointerStartRef.current) return;
8295
8336
  const x = event.clientX - pointerStartRef.current.x;
8296
8337
  const y = event.clientY - pointerStartRef.current.y;
@@ -8317,7 +8358,7 @@ var ToastImpl = reactExports.forwardRef(
8317
8358
  pointerStartRef.current = null;
8318
8359
  }
8319
8360
  }),
8320
- onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {
8361
+ onPointerUp: composeEventHandlers$1(props.onPointerUp, (event) => {
8321
8362
  const delta = swipeDeltaRef.current;
8322
8363
  const target = event.target;
8323
8364
  if (target.hasPointerCapture(event.pointerId)) {
@@ -8413,7 +8454,7 @@ var ToastClose$1 = reactExports.forwardRef(
8413
8454
  type: "button",
8414
8455
  ...closeProps,
8415
8456
  ref: forwardedRef,
8416
- onClick: composeEventHandlers(props.onClick, interactiveContext.onClose)
8457
+ onClick: composeEventHandlers$1(props.onClick, interactiveContext.onClose)
8417
8458
  }
8418
8459
  ) });
8419
8460
  }
@@ -14077,10 +14118,10 @@ const ZodType$1 = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
14077
14118
  };
14078
14119
  inst.clone = (def2, params) => clone(inst, def2, params);
14079
14120
  inst.brand = () => inst;
14080
- inst.register = ((reg, meta) => {
14121
+ inst.register = (reg, meta) => {
14081
14122
  reg.add(inst, meta);
14082
14123
  return inst;
14083
- });
14124
+ };
14084
14125
  inst.parse = (data2, params) => parse$1(inst, data2, params, { callee: inst.parse });
14085
14126
  inst.safeParse = (data2, params) => safeParse$1(inst, data2, params);
14086
14127
  inst.parseAsync = async (data2, params) => parseAsync(inst, data2, params, { callee: inst.parseAsync });
@@ -16279,7 +16320,7 @@ object({
16279
16320
  token_type_hint: string().optional()
16280
16321
  }).strip();
16281
16322
  const name = "@bryan-thompson/inspector-assessment-client";
16282
- const version$1 = "1.7.1";
16323
+ const version$1 = "1.8.0";
16283
16324
  const packageJson = {
16284
16325
  name,
16285
16326
  version: version$1
@@ -17490,6 +17531,7 @@ class OAuthStateMachine {
17490
17531
  }
17491
17532
  }
17492
17533
  var uri_all$1 = { exports: {} };
17534
+ /** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */
17493
17535
  var uri_all = uri_all$1.exports;
17494
17536
  var hasRequiredUri_all;
17495
17537
  function requireUri_all() {
@@ -17498,7 +17540,7 @@ function requireUri_all() {
17498
17540
  (function(module, exports) {
17499
17541
  (function(global2, factory) {
17500
17542
  factory(exports);
17501
- })(uri_all, (function(exports2) {
17543
+ })(uri_all, function(exports2) {
17502
17544
  function merge2() {
17503
17545
  for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {
17504
17546
  sets[_key] = arguments[_key];
@@ -17565,7 +17607,7 @@ function requireUri_all() {
17565
17607
  }
17566
17608
  var URI_PROTOCOL = buildExps(false);
17567
17609
  var IRI_PROTOCOL = buildExps(true);
17568
- var slicedToArray = /* @__PURE__ */ (function() {
17610
+ var slicedToArray = /* @__PURE__ */ function() {
17569
17611
  function sliceIterator(arr, i) {
17570
17612
  var _arr = [];
17571
17613
  var _n = true;
@@ -17597,7 +17639,7 @@ function requireUri_all() {
17597
17639
  throw new TypeError("Invalid attempt to destructure non-iterable instance");
17598
17640
  }
17599
17641
  };
17600
- })();
17642
+ }();
17601
17643
  var toConsumableArray = function(arr) {
17602
17644
  if (Array.isArray(arr)) {
17603
17645
  for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
@@ -18512,7 +18554,7 @@ function requireUri_all() {
18512
18554
  exports2.escapeComponent = escapeComponent;
18513
18555
  exports2.unescapeComponent = unescapeComponent;
18514
18556
  Object.defineProperty(exports2, "__esModule", { value: true });
18515
- }));
18557
+ });
18516
18558
  })(uri_all$1, uri_all$1.exports);
18517
18559
  return uri_all$1.exports;
18518
18560
  }
@@ -19106,7 +19148,7 @@ function requireFastJsonStableStringify() {
19106
19148
  if (!opts) opts = {};
19107
19149
  if (typeof opts === "function") opts = { cmp: opts };
19108
19150
  var cycles = typeof opts.cycles === "boolean" ? opts.cycles : false;
19109
- var cmp = opts.cmp && /* @__PURE__ */ (function(f) {
19151
+ var cmp = opts.cmp && /* @__PURE__ */ function(f) {
19110
19152
  return function(node) {
19111
19153
  return function(a, b) {
19112
19154
  var aobj = { key: a, value: node[a] };
@@ -19114,9 +19156,9 @@ function requireFastJsonStableStringify() {
19114
19156
  return f(aobj, bobj);
19115
19157
  };
19116
19158
  };
19117
- })(opts.cmp);
19159
+ }(opts.cmp);
19118
19160
  var seen2 = [];
19119
- return (function stringify(node) {
19161
+ return function stringify(node) {
19120
19162
  if (node && node.toJSON && typeof node.toJSON === "function") {
19121
19163
  node = node.toJSON();
19122
19164
  }
@@ -19149,7 +19191,7 @@ function requireFastJsonStableStringify() {
19149
19191
  }
19150
19192
  seen2.splice(seenIndex, 1);
19151
19193
  return "{" + out + "}";
19152
- })(data2);
19194
+ }(data2);
19153
19195
  };
19154
19196
  return fastJsonStableStringify;
19155
19197
  }
@@ -23512,7 +23554,7 @@ function requireAjv$1() {
23512
23554
  function setLogger(self2) {
23513
23555
  var logger = self2._opts.logger;
23514
23556
  if (logger === false) {
23515
- self2.logger = { log: noop3, warn: noop3, error: noop3 };
23557
+ self2.logger = { log: noop2, warn: noop2, error: noop2 };
23516
23558
  } else {
23517
23559
  if (logger === void 0) logger = console;
23518
23560
  if (!(typeof logger == "object" && logger.log && logger.warn && logger.error))
@@ -23520,7 +23562,7 @@ function requireAjv$1() {
23520
23562
  self2.logger = logger;
23521
23563
  }
23522
23564
  }
23523
- function noop3() {
23565
+ function noop2() {
23524
23566
  }
23525
23567
  return ajv$2;
23526
23568
  }
@@ -23569,6 +23611,7 @@ function generateDefaultValue(schema, propertyName, parentSchema) {
23569
23611
  return schema.default;
23570
23612
  }
23571
23613
  const isRequired = propertyName && parentSchema ? isPropertyRequired(propertyName, parentSchema) : false;
23614
+ const isRootSchema = propertyName === void 0 && parentSchema === void 0;
23572
23615
  switch (schema.type) {
23573
23616
  case "string":
23574
23617
  return isRequired ? "" : void 0;
@@ -23580,17 +23623,23 @@ function generateDefaultValue(schema, propertyName, parentSchema) {
23580
23623
  case "array":
23581
23624
  return isRequired ? [] : void 0;
23582
23625
  case "object": {
23583
- if (!schema.properties) return isRequired ? {} : void 0;
23626
+ if (!schema.properties) {
23627
+ return isRequired || isRootSchema ? {} : void 0;
23628
+ }
23584
23629
  const obj = {};
23585
23630
  Object.entries(schema.properties).forEach(([key, prop]) => {
23586
- if (isPropertyRequired(key, schema)) {
23631
+ const hasExplicitDefault = "default" in prop && prop.default !== void 0;
23632
+ if (isPropertyRequired(key, schema) || hasExplicitDefault) {
23587
23633
  const value = generateDefaultValue(prop, key, schema);
23588
23634
  if (value !== void 0) {
23589
23635
  obj[key] = value;
23590
23636
  }
23591
23637
  }
23592
23638
  });
23593
- return isRequired ? obj : Object.keys(obj).length > 0 ? obj : void 0;
23639
+ if (Object.keys(obj).length === 0) {
23640
+ return isRequired || isRootSchema ? {} : void 0;
23641
+ }
23642
+ return obj;
23594
23643
  }
23595
23644
  case "null":
23596
23645
  return null;
@@ -35595,14 +35644,14 @@ class ParseError extends Error {
35595
35644
  super(message), this.name = "ParseError", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line;
35596
35645
  }
35597
35646
  }
35598
- function noop$1(_arg) {
35647
+ function noop(_arg) {
35599
35648
  }
35600
35649
  function createParser(callbacks) {
35601
35650
  if (typeof callbacks == "function")
35602
35651
  throw new TypeError(
35603
35652
  "`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?"
35604
35653
  );
35605
- const { onEvent = noop$1, onError = noop$1, onRetry = noop$1, onComment } = callbacks;
35654
+ const { onEvent = noop, onError = noop, onRetry = noop, onComment } = callbacks;
35606
35655
  let incompleteLine = "", isFirstChunk = true, id2, data2 = "", eventType = "";
35607
35656
  function feed(newChunk) {
35608
35657
  const chunk = isFirstChunk ? newChunk.replace(/^\xEF\xBB\xBF/, "") : newChunk, [complete, incomplete] = splitLines(`${incompleteLine}${chunk}`);
@@ -35680,7 +35729,7 @@ function splitLines(chunk) {
35680
35729
  const crIndex = chunk.indexOf("\r", searchIndex), lfIndex = chunk.indexOf(`
35681
35730
  `, searchIndex);
35682
35731
  let lineEnd = -1;
35683
- if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = Math.min(crIndex, lfIndex) : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1) {
35732
+ if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = Math.min(crIndex, lfIndex) : crIndex !== -1 ? lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1) {
35684
35733
  incompleteLine = chunk.slice(searchIndex);
35685
35734
  break;
35686
35735
  } else {
@@ -37507,10 +37556,10 @@ var RovingFocusGroupImpl = reactExports.forwardRef((props, forwardedRef) => {
37507
37556
  ...groupProps,
37508
37557
  ref: composedRefs,
37509
37558
  style: { outline: "none", ...props.style },
37510
- onMouseDown: composeEventHandlers(props.onMouseDown, () => {
37559
+ onMouseDown: composeEventHandlers$1(props.onMouseDown, () => {
37511
37560
  isClickFocusRef.current = true;
37512
37561
  }),
37513
- onFocus: composeEventHandlers(props.onFocus, (event) => {
37562
+ onFocus: composeEventHandlers$1(props.onFocus, (event) => {
37514
37563
  const isKeyboardFocus = !isClickFocusRef.current;
37515
37564
  if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {
37516
37565
  const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS$1);
@@ -37528,7 +37577,7 @@ var RovingFocusGroupImpl = reactExports.forwardRef((props, forwardedRef) => {
37528
37577
  }
37529
37578
  isClickFocusRef.current = false;
37530
37579
  }),
37531
- onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))
37580
+ onBlur: composeEventHandlers$1(props.onBlur, () => setIsTabbingBackOut(false))
37532
37581
  }
37533
37582
  )
37534
37583
  }
@@ -37571,12 +37620,12 @@ var RovingFocusGroupItem = reactExports.forwardRef(
37571
37620
  "data-orientation": context.orientation,
37572
37621
  ...itemProps,
37573
37622
  ref: forwardedRef,
37574
- onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {
37623
+ onMouseDown: composeEventHandlers$1(props.onMouseDown, (event) => {
37575
37624
  if (!focusable) event.preventDefault();
37576
37625
  else context.onItemFocus(id2);
37577
37626
  }),
37578
- onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id2)),
37579
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
37627
+ onFocus: composeEventHandlers$1(props.onFocus, () => context.onItemFocus(id2)),
37628
+ onKeyDown: composeEventHandlers$1(props.onKeyDown, (event) => {
37580
37629
  if (event.key === "Tab" && event.shiftKey) {
37581
37630
  context.onItemShiftTab();
37582
37631
  return;
@@ -37744,17 +37793,17 @@ var TabsTrigger$1 = reactExports.forwardRef(
37744
37793
  id: triggerId,
37745
37794
  ...triggerProps,
37746
37795
  ref: forwardedRef,
37747
- onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {
37796
+ onMouseDown: composeEventHandlers$1(props.onMouseDown, (event) => {
37748
37797
  if (!disabled && event.button === 0 && event.ctrlKey === false) {
37749
37798
  context.onValueChange(value);
37750
37799
  } else {
37751
37800
  event.preventDefault();
37752
37801
  }
37753
37802
  }),
37754
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
37803
+ onKeyDown: composeEventHandlers$1(props.onKeyDown, (event) => {
37755
37804
  if ([" ", "Enter"].includes(event.key)) context.onValueChange(value);
37756
37805
  }),
37757
- onFocus: composeEventHandlers(props.onFocus, () => {
37806
+ onFocus: composeEventHandlers$1(props.onFocus, () => {
37758
37807
  const isAutomaticActivation = context.activationMode !== "manual";
37759
37808
  if (!isSelected && !disabled && isAutomaticActivation) {
37760
37809
  context.onValueChange(value);
@@ -37888,6 +37937,12 @@ const Button = reactExports.forwardRef(
37888
37937
  }
37889
37938
  );
37890
37939
  Button.displayName = "Button";
37940
+ /**
37941
+ * @license lucide-react v0.523.0 - ISC
37942
+ *
37943
+ * This source code is licensed under the ISC license.
37944
+ * See the LICENSE file in the root directory of this source tree.
37945
+ */
37891
37946
  const toKebabCase = (string2) => string2.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
37892
37947
  const toCamelCase = (string2) => string2.replace(
37893
37948
  /^([A-Z])|[\s-_]+(\w)/g,
@@ -37907,6 +37962,12 @@ const hasA11yProp = (props) => {
37907
37962
  }
37908
37963
  }
37909
37964
  };
37965
+ /**
37966
+ * @license lucide-react v0.523.0 - ISC
37967
+ *
37968
+ * This source code is licensed under the ISC license.
37969
+ * See the LICENSE file in the root directory of this source tree.
37970
+ */
37910
37971
  var defaultAttributes = {
37911
37972
  xmlns: "http://www.w3.org/2000/svg",
37912
37973
  width: 24,
@@ -37918,6 +37979,12 @@ var defaultAttributes = {
37918
37979
  strokeLinecap: "round",
37919
37980
  strokeLinejoin: "round"
37920
37981
  };
37982
+ /**
37983
+ * @license lucide-react v0.523.0 - ISC
37984
+ *
37985
+ * This source code is licensed under the ISC license.
37986
+ * See the LICENSE file in the root directory of this source tree.
37987
+ */
37921
37988
  const Icon$1 = reactExports.forwardRef(
37922
37989
  ({
37923
37990
  color = "currentColor",
@@ -37947,6 +38014,12 @@ const Icon$1 = reactExports.forwardRef(
37947
38014
  ]
37948
38015
  )
37949
38016
  );
38017
+ /**
38018
+ * @license lucide-react v0.523.0 - ISC
38019
+ *
38020
+ * This source code is licensed under the ISC license.
38021
+ * See the LICENSE file in the root directory of this source tree.
38022
+ */
37950
38023
  const createLucideIcon = (iconName, iconNode) => {
37951
38024
  const Component = reactExports.forwardRef(
37952
38025
  ({ className, ...props }, ref2) => reactExports.createElement(Icon$1, {
@@ -37963,6 +38036,12 @@ const createLucideIcon = (iconName, iconNode) => {
37963
38036
  Component.displayName = toPascalCase(iconName);
37964
38037
  return Component;
37965
38038
  };
38039
+ /**
38040
+ * @license lucide-react v0.523.0 - ISC
38041
+ *
38042
+ * This source code is licensed under the ISC license.
38043
+ * See the LICENSE file in the root directory of this source tree.
38044
+ */
37966
38045
  const __iconNode$J = [
37967
38046
  ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
37968
38047
  [
@@ -37974,6 +38053,12 @@ const __iconNode$J = [
37974
38053
  ]
37975
38054
  ];
37976
38055
  const Bell = createLucideIcon("bell", __iconNode$J);
38056
+ /**
38057
+ * @license lucide-react v0.523.0 - ISC
38058
+ *
38059
+ * This source code is licensed under the ISC license.
38060
+ * See the LICENSE file in the root directory of this source tree.
38061
+ */
37977
38062
  const __iconNode$I = [
37978
38063
  ["path", { d: "m8 2 1.88 1.88", key: "fmnt4t" }],
37979
38064
  ["path", { d: "M14.12 3.88 16 2", key: "qol33r" }],
@@ -37994,54 +38079,132 @@ const __iconNode$I = [
37994
38079
  ["path", { d: "M17.2 17c2.1.1 3.8 1.9 3.8 4", key: "k3fwyw" }]
37995
38080
  ];
37996
38081
  const Bug = createLucideIcon("bug", __iconNode$I);
38082
+ /**
38083
+ * @license lucide-react v0.523.0 - ISC
38084
+ *
38085
+ * This source code is licensed under the ISC license.
38086
+ * See the LICENSE file in the root directory of this source tree.
38087
+ */
37997
38088
  const __iconNode$H = [
37998
38089
  ["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
37999
38090
  ["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
38000
38091
  ];
38001
38092
  const CheckCheck = createLucideIcon("check-check", __iconNode$H);
38093
+ /**
38094
+ * @license lucide-react v0.523.0 - ISC
38095
+ *
38096
+ * This source code is licensed under the ISC license.
38097
+ * See the LICENSE file in the root directory of this source tree.
38098
+ */
38002
38099
  const __iconNode$G = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
38003
38100
  const Check = createLucideIcon("check", __iconNode$G);
38101
+ /**
38102
+ * @license lucide-react v0.523.0 - ISC
38103
+ *
38104
+ * This source code is licensed under the ISC license.
38105
+ * See the LICENSE file in the root directory of this source tree.
38106
+ */
38004
38107
  const __iconNode$F = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
38005
38108
  const ChevronDown = createLucideIcon("chevron-down", __iconNode$F);
38109
+ /**
38110
+ * @license lucide-react v0.523.0 - ISC
38111
+ *
38112
+ * This source code is licensed under the ISC license.
38113
+ * See the LICENSE file in the root directory of this source tree.
38114
+ */
38006
38115
  const __iconNode$E = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
38007
38116
  const ChevronRight = createLucideIcon("chevron-right", __iconNode$E);
38117
+ /**
38118
+ * @license lucide-react v0.523.0 - ISC
38119
+ *
38120
+ * This source code is licensed under the ISC license.
38121
+ * See the LICENSE file in the root directory of this source tree.
38122
+ */
38008
38123
  const __iconNode$D = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
38009
38124
  const ChevronUp = createLucideIcon("chevron-up", __iconNode$D);
38125
+ /**
38126
+ * @license lucide-react v0.523.0 - ISC
38127
+ *
38128
+ * This source code is licensed under the ISC license.
38129
+ * See the LICENSE file in the root directory of this source tree.
38130
+ */
38010
38131
  const __iconNode$C = [
38011
38132
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
38012
38133
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
38013
38134
  ];
38014
38135
  const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$C);
38136
+ /**
38137
+ * @license lucide-react v0.523.0 - ISC
38138
+ *
38139
+ * This source code is licensed under the ISC license.
38140
+ * See the LICENSE file in the root directory of this source tree.
38141
+ */
38015
38142
  const __iconNode$B = [
38016
38143
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
38017
38144
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
38018
38145
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
38019
38146
  ];
38020
38147
  const CircleAlert = createLucideIcon("circle-alert", __iconNode$B);
38148
+ /**
38149
+ * @license lucide-react v0.523.0 - ISC
38150
+ *
38151
+ * This source code is licensed under the ISC license.
38152
+ * See the LICENSE file in the root directory of this source tree.
38153
+ */
38021
38154
  const __iconNode$A = [
38022
38155
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
38023
38156
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
38024
38157
  ];
38025
38158
  const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$A);
38159
+ /**
38160
+ * @license lucide-react v0.523.0 - ISC
38161
+ *
38162
+ * This source code is licensed under the ISC license.
38163
+ * See the LICENSE file in the root directory of this source tree.
38164
+ */
38026
38165
  const __iconNode$z = [
38027
38166
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
38028
38167
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
38029
38168
  ];
38030
38169
  const CircleCheck = createLucideIcon("circle-check", __iconNode$z);
38170
+ /**
38171
+ * @license lucide-react v0.523.0 - ISC
38172
+ *
38173
+ * This source code is licensed under the ISC license.
38174
+ * See the LICENSE file in the root directory of this source tree.
38175
+ */
38031
38176
  const __iconNode$y = [
38032
38177
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
38033
38178
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
38034
38179
  ["path", { d: "M12 17h.01", key: "p32p05" }]
38035
38180
  ];
38036
38181
  const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$y);
38182
+ /**
38183
+ * @license lucide-react v0.523.0 - ISC
38184
+ *
38185
+ * This source code is licensed under the ISC license.
38186
+ * See the LICENSE file in the root directory of this source tree.
38187
+ */
38037
38188
  const __iconNode$x = [
38038
38189
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
38039
38190
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
38040
38191
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
38041
38192
  ];
38042
38193
  const CircleX = createLucideIcon("circle-x", __iconNode$x);
38194
+ /**
38195
+ * @license lucide-react v0.523.0 - ISC
38196
+ *
38197
+ * This source code is licensed under the ISC license.
38198
+ * See the LICENSE file in the root directory of this source tree.
38199
+ */
38043
38200
  const __iconNode$w = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
38044
38201
  const Circle = createLucideIcon("circle", __iconNode$w);
38202
+ /**
38203
+ * @license lucide-react v0.523.0 - ISC
38204
+ *
38205
+ * This source code is licensed under the ISC license.
38206
+ * See the LICENSE file in the root directory of this source tree.
38207
+ */
38045
38208
  const __iconNode$v = [
38046
38209
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
38047
38210
  [
@@ -38054,29 +38217,59 @@ const __iconNode$v = [
38054
38217
  ["path", { d: "m9 14 2 2 4-4", key: "df797q" }]
38055
38218
  ];
38056
38219
  const ClipboardCheck = createLucideIcon("clipboard-check", __iconNode$v);
38220
+ /**
38221
+ * @license lucide-react v0.523.0 - ISC
38222
+ *
38223
+ * This source code is licensed under the ISC license.
38224
+ * See the LICENSE file in the root directory of this source tree.
38225
+ */
38057
38226
  const __iconNode$u = [
38058
38227
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
38059
38228
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
38060
38229
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
38061
38230
  ];
38062
38231
  const CodeXml = createLucideIcon("code-xml", __iconNode$u);
38232
+ /**
38233
+ * @license lucide-react v0.523.0 - ISC
38234
+ *
38235
+ * This source code is licensed under the ISC license.
38236
+ * See the LICENSE file in the root directory of this source tree.
38237
+ */
38063
38238
  const __iconNode$t = [
38064
38239
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
38065
38240
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
38066
38241
  ];
38067
38242
  const Copy = createLucideIcon("copy", __iconNode$t);
38243
+ /**
38244
+ * @license lucide-react v0.523.0 - ISC
38245
+ *
38246
+ * This source code is licensed under the ISC license.
38247
+ * See the LICENSE file in the root directory of this source tree.
38248
+ */
38068
38249
  const __iconNode$s = [
38069
38250
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
38070
38251
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
38071
38252
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
38072
38253
  ];
38073
38254
  const Download = createLucideIcon("download", __iconNode$s);
38255
+ /**
38256
+ * @license lucide-react v0.523.0 - ISC
38257
+ *
38258
+ * This source code is licensed under the ISC license.
38259
+ * See the LICENSE file in the root directory of this source tree.
38260
+ */
38074
38261
  const __iconNode$r = [
38075
38262
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
38076
38263
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
38077
38264
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
38078
38265
  ];
38079
38266
  const ExternalLink = createLucideIcon("external-link", __iconNode$r);
38267
+ /**
38268
+ * @license lucide-react v0.523.0 - ISC
38269
+ *
38270
+ * This source code is licensed under the ISC license.
38271
+ * See the LICENSE file in the root directory of this source tree.
38272
+ */
38080
38273
  const __iconNode$q = [
38081
38274
  [
38082
38275
  "path",
@@ -38096,6 +38289,12 @@ const __iconNode$q = [
38096
38289
  ["path", { d: "m2 2 20 20", key: "1ooewy" }]
38097
38290
  ];
38098
38291
  const EyeOff = createLucideIcon("eye-off", __iconNode$q);
38292
+ /**
38293
+ * @license lucide-react v0.523.0 - ISC
38294
+ *
38295
+ * This source code is licensed under the ISC license.
38296
+ * See the LICENSE file in the root directory of this source tree.
38297
+ */
38099
38298
  const __iconNode$p = [
38100
38299
  [
38101
38300
  "path",
@@ -38107,6 +38306,12 @@ const __iconNode$p = [
38107
38306
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
38108
38307
  ];
38109
38308
  const Eye = createLucideIcon("eye", __iconNode$p);
38309
+ /**
38310
+ * @license lucide-react v0.523.0 - ISC
38311
+ *
38312
+ * This source code is licensed under the ISC license.
38313
+ * See the LICENSE file in the root directory of this source tree.
38314
+ */
38110
38315
  const __iconNode$o = [
38111
38316
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
38112
38317
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
@@ -38115,12 +38320,24 @@ const __iconNode$o = [
38115
38320
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
38116
38321
  ];
38117
38322
  const FileText = createLucideIcon("file-text", __iconNode$o);
38323
+ /**
38324
+ * @license lucide-react v0.523.0 - ISC
38325
+ *
38326
+ * This source code is licensed under the ISC license.
38327
+ * See the LICENSE file in the root directory of this source tree.
38328
+ */
38118
38329
  const __iconNode$n = [
38119
38330
  ["path", { d: "M20 7h-3a2 2 0 0 1-2-2V2", key: "x099mo" }],
38120
38331
  ["path", { d: "M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z", key: "18t6ie" }],
38121
38332
  ["path", { d: "M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8", key: "1nja0z" }]
38122
38333
  ];
38123
38334
  const Files = createLucideIcon("files", __iconNode$n);
38335
+ /**
38336
+ * @license lucide-react v0.523.0 - ISC
38337
+ *
38338
+ * This source code is licensed under the ISC license.
38339
+ * See the LICENSE file in the root directory of this source tree.
38340
+ */
38124
38341
  const __iconNode$m = [
38125
38342
  [
38126
38343
  "path",
@@ -38140,6 +38357,12 @@ const __iconNode$m = [
38140
38357
  ["path", { d: "M3 3v13a2 2 0 0 0 2 2h3", key: "k8epm1" }]
38141
38358
  ];
38142
38359
  const FolderTree = createLucideIcon("folder-tree", __iconNode$m);
38360
+ /**
38361
+ * @license lucide-react v0.523.0 - ISC
38362
+ *
38363
+ * This source code is licensed under the ISC license.
38364
+ * See the LICENSE file in the root directory of this source tree.
38365
+ */
38143
38366
  const __iconNode$l = [
38144
38367
  [
38145
38368
  "path",
@@ -38150,6 +38373,12 @@ const __iconNode$l = [
38150
38373
  ]
38151
38374
  ];
38152
38375
  const Funnel = createLucideIcon("funnel", __iconNode$l);
38376
+ /**
38377
+ * @license lucide-react v0.523.0 - ISC
38378
+ *
38379
+ * This source code is licensed under the ISC license.
38380
+ * See the LICENSE file in the root directory of this source tree.
38381
+ */
38153
38382
  const __iconNode$k = [
38154
38383
  [
38155
38384
  "path",
@@ -38161,6 +38390,12 @@ const __iconNode$k = [
38161
38390
  ["path", { d: "M9 18c-4.51 2-5-2-7-2", key: "9comsn" }]
38162
38391
  ];
38163
38392
  const Github = createLucideIcon("github", __iconNode$k);
38393
+ /**
38394
+ * @license lucide-react v0.523.0 - ISC
38395
+ *
38396
+ * This source code is licensed under the ISC license.
38397
+ * See the LICENSE file in the root directory of this source tree.
38398
+ */
38164
38399
  const __iconNode$j = [
38165
38400
  ["path", { d: "m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9", key: "eefl8a" }],
38166
38401
  ["path", { d: "m18 15 4-4", key: "16gjal" }],
@@ -38173,6 +38408,12 @@ const __iconNode$j = [
38173
38408
  ]
38174
38409
  ];
38175
38410
  const Hammer = createLucideIcon("hammer", __iconNode$j);
38411
+ /**
38412
+ * @license lucide-react v0.523.0 - ISC
38413
+ *
38414
+ * This source code is licensed under the ISC license.
38415
+ * See the LICENSE file in the root directory of this source tree.
38416
+ */
38176
38417
  const __iconNode$i = [
38177
38418
  ["line", { x1: "4", x2: "20", y1: "9", y2: "9", key: "4lhtct" }],
38178
38419
  ["line", { x1: "4", x2: "20", y1: "15", y2: "15", key: "vyu0kd" }],
@@ -38180,33 +38421,81 @@ const __iconNode$i = [
38180
38421
  ["line", { x1: "16", x2: "14", y1: "3", y2: "21", key: "weycgp" }]
38181
38422
  ];
38182
38423
  const Hash = createLucideIcon("hash", __iconNode$i);
38424
+ /**
38425
+ * @license lucide-react v0.523.0 - ISC
38426
+ *
38427
+ * This source code is licensed under the ISC license.
38428
+ * See the LICENSE file in the root directory of this source tree.
38429
+ */
38183
38430
  const __iconNode$h = [
38184
38431
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
38185
38432
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
38186
38433
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
38187
38434
  ];
38188
38435
  const Info = createLucideIcon("info", __iconNode$h);
38436
+ /**
38437
+ * @license lucide-react v0.523.0 - ISC
38438
+ *
38439
+ * This source code is licensed under the ISC license.
38440
+ * See the LICENSE file in the root directory of this source tree.
38441
+ */
38189
38442
  const __iconNode$g = [
38190
38443
  ["path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4", key: "g0fldk" }],
38191
38444
  ["path", { d: "m21 2-9.6 9.6", key: "1j0ho8" }],
38192
38445
  ["circle", { cx: "7.5", cy: "15.5", r: "5.5", key: "yqb3hr" }]
38193
38446
  ];
38194
38447
  const Key = createLucideIcon("key", __iconNode$g);
38448
+ /**
38449
+ * @license lucide-react v0.523.0 - ISC
38450
+ *
38451
+ * This source code is licensed under the ISC license.
38452
+ * See the LICENSE file in the root directory of this source tree.
38453
+ */
38195
38454
  const __iconNode$f = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
38196
38455
  const LoaderCircle = createLucideIcon("loader-circle", __iconNode$f);
38456
+ /**
38457
+ * @license lucide-react v0.523.0 - ISC
38458
+ *
38459
+ * This source code is licensed under the ISC license.
38460
+ * See the LICENSE file in the root directory of this source tree.
38461
+ */
38197
38462
  const __iconNode$e = [
38198
38463
  ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }]
38199
38464
  ];
38200
38465
  const MessageSquare = createLucideIcon("message-square", __iconNode$e);
38466
+ /**
38467
+ * @license lucide-react v0.523.0 - ISC
38468
+ *
38469
+ * This source code is licensed under the ISC license.
38470
+ * See the LICENSE file in the root directory of this source tree.
38471
+ */
38201
38472
  const __iconNode$d = [["path", { d: "M5 12h14", key: "1ays0h" }]];
38202
38473
  const Minus = createLucideIcon("minus", __iconNode$d);
38474
+ /**
38475
+ * @license lucide-react v0.523.0 - ISC
38476
+ *
38477
+ * This source code is licensed under the ISC license.
38478
+ * See the LICENSE file in the root directory of this source tree.
38479
+ */
38203
38480
  const __iconNode$c = [["polygon", { points: "6 3 20 12 6 21 6 3", key: "1oa8hb" }]];
38204
38481
  const Play = createLucideIcon("play", __iconNode$c);
38482
+ /**
38483
+ * @license lucide-react v0.523.0 - ISC
38484
+ *
38485
+ * This source code is licensed under the ISC license.
38486
+ * See the LICENSE file in the root directory of this source tree.
38487
+ */
38205
38488
  const __iconNode$b = [
38206
38489
  ["path", { d: "M5 12h14", key: "1ays0h" }],
38207
38490
  ["path", { d: "M12 5v14", key: "s699le" }]
38208
38491
  ];
38209
38492
  const Plus = createLucideIcon("plus", __iconNode$b);
38493
+ /**
38494
+ * @license lucide-react v0.523.0 - ISC
38495
+ *
38496
+ * This source code is licensed under the ISC license.
38497
+ * See the LICENSE file in the root directory of this source tree.
38498
+ */
38210
38499
  const __iconNode$a = [
38211
38500
  ["path", { d: "M21 8L18.74 5.74A9.75 9.75 0 0 0 12 3C11 3 10.03 3.16 9.13 3.47", key: "1krf6h" }],
38212
38501
  ["path", { d: "M8 16H3v5", key: "1cv678" }],
@@ -38217,6 +38506,12 @@ const __iconNode$a = [
38217
38506
  ["path", { d: "M22 22 2 2", key: "1r8tn9" }]
38218
38507
  ];
38219
38508
  const RefreshCwOff = createLucideIcon("refresh-cw-off", __iconNode$a);
38509
+ /**
38510
+ * @license lucide-react v0.523.0 - ISC
38511
+ *
38512
+ * This source code is licensed under the ISC license.
38513
+ * See the LICENSE file in the root directory of this source tree.
38514
+ */
38220
38515
  const __iconNode$9 = [
38221
38516
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
38222
38517
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
@@ -38224,11 +38519,23 @@ const __iconNode$9 = [
38224
38519
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
38225
38520
  ];
38226
38521
  const RefreshCw = createLucideIcon("refresh-cw", __iconNode$9);
38522
+ /**
38523
+ * @license lucide-react v0.523.0 - ISC
38524
+ *
38525
+ * This source code is licensed under the ISC license.
38526
+ * See the LICENSE file in the root directory of this source tree.
38527
+ */
38227
38528
  const __iconNode$8 = [
38228
38529
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
38229
38530
  ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
38230
38531
  ];
38231
38532
  const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$8);
38533
+ /**
38534
+ * @license lucide-react v0.523.0 - ISC
38535
+ *
38536
+ * This source code is licensed under the ISC license.
38537
+ * See the LICENSE file in the root directory of this source tree.
38538
+ */
38232
38539
  const __iconNode$7 = [
38233
38540
  [
38234
38541
  "path",
@@ -38241,11 +38548,23 @@ const __iconNode$7 = [
38241
38548
  ["path", { d: "M7 3v4a1 1 0 0 0 1 1h7", key: "t51u73" }]
38242
38549
  ];
38243
38550
  const Save = createLucideIcon("save", __iconNode$7);
38551
+ /**
38552
+ * @license lucide-react v0.523.0 - ISC
38553
+ *
38554
+ * This source code is licensed under the ISC license.
38555
+ * See the LICENSE file in the root directory of this source tree.
38556
+ */
38244
38557
  const __iconNode$6 = [
38245
38558
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
38246
38559
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
38247
38560
  ];
38248
38561
  const Search = createLucideIcon("search", __iconNode$6);
38562
+ /**
38563
+ * @license lucide-react v0.523.0 - ISC
38564
+ *
38565
+ * This source code is licensed under the ISC license.
38566
+ * See the LICENSE file in the root directory of this source tree.
38567
+ */
38249
38568
  const __iconNode$5 = [
38250
38569
  [
38251
38570
  "path",
@@ -38257,6 +38576,12 @@ const __iconNode$5 = [
38257
38576
  ["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
38258
38577
  ];
38259
38578
  const Send = createLucideIcon("send", __iconNode$5);
38579
+ /**
38580
+ * @license lucide-react v0.523.0 - ISC
38581
+ *
38582
+ * This source code is licensed under the ISC license.
38583
+ * See the LICENSE file in the root directory of this source tree.
38584
+ */
38260
38585
  const __iconNode$4 = [
38261
38586
  ["rect", { width: "20", height: "8", x: "2", y: "2", rx: "2", ry: "2", key: "ngkwjq" }],
38262
38587
  ["rect", { width: "20", height: "8", x: "2", y: "14", rx: "2", ry: "2", key: "iecqi9" }],
@@ -38264,6 +38589,12 @@ const __iconNode$4 = [
38264
38589
  ["line", { x1: "6", x2: "6.01", y1: "18", y2: "18", key: "nzw8ys" }]
38265
38590
  ];
38266
38591
  const Server = createLucideIcon("server", __iconNode$4);
38592
+ /**
38593
+ * @license lucide-react v0.523.0 - ISC
38594
+ *
38595
+ * This source code is licensed under the ISC license.
38596
+ * See the LICENSE file in the root directory of this source tree.
38597
+ */
38267
38598
  const __iconNode$3 = [
38268
38599
  [
38269
38600
  "path",
@@ -38275,6 +38606,12 @@ const __iconNode$3 = [
38275
38606
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
38276
38607
  ];
38277
38608
  const Settings = createLucideIcon("settings", __iconNode$3);
38609
+ /**
38610
+ * @license lucide-react v0.523.0 - ISC
38611
+ *
38612
+ * This source code is licensed under the ISC license.
38613
+ * See the LICENSE file in the root directory of this source tree.
38614
+ */
38278
38615
  const __iconNode$2 = [
38279
38616
  [
38280
38617
  "path",
@@ -38285,6 +38622,12 @@ const __iconNode$2 = [
38285
38622
  ]
38286
38623
  ];
38287
38624
  const Shield = createLucideIcon("shield", __iconNode$2);
38625
+ /**
38626
+ * @license lucide-react v0.523.0 - ISC
38627
+ *
38628
+ * This source code is licensed under the ISC license.
38629
+ * See the LICENSE file in the root directory of this source tree.
38630
+ */
38288
38631
  const __iconNode$1 = [
38289
38632
  ["path", { d: "M3 6h18", key: "d0wm0j" }],
38290
38633
  ["path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6", key: "4alrt4" }],
@@ -38293,6 +38636,12 @@ const __iconNode$1 = [
38293
38636
  ["line", { x1: "14", x2: "14", y1: "11", y2: "17", key: "xtxkd" }]
38294
38637
  ];
38295
38638
  const Trash2 = createLucideIcon("trash-2", __iconNode$1);
38639
+ /**
38640
+ * @license lucide-react v0.523.0 - ISC
38641
+ *
38642
+ * This source code is licensed under the ISC license.
38643
+ * See the LICENSE file in the root directory of this source tree.
38644
+ */
38296
38645
  const __iconNode = [
38297
38646
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
38298
38647
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
@@ -39841,14 +40190,14 @@ var RemoveScroll = reactExports.forwardRef(function(props, parentRef) {
39841
40190
  onWheelCapture: nothing,
39842
40191
  onTouchMoveCapture: nothing
39843
40192
  }), callbacks = _a[0], setCallbacks = _a[1];
39844
- var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noRelative", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]);
40193
+ var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]);
39845
40194
  var SideCar2 = sideCar;
39846
40195
  var containerRef = useMergeRefs([ref2, parentRef]);
39847
40196
  var containerProps = __assign(__assign({}, rest), callbacks);
39848
40197
  return reactExports.createElement(
39849
40198
  reactExports.Fragment,
39850
40199
  null,
39851
- enabled && reactExports.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noRelative, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref2, gapMode }),
40200
+ enabled && reactExports.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref2, gapMode }),
39852
40201
  forwardProps ? reactExports.cloneElement(reactExports.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : reactExports.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children)
39853
40202
  );
39854
40203
  });
@@ -40091,9 +40440,6 @@ var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) {
40091
40440
  var availableScroll = 0;
40092
40441
  var availableScrollTop = 0;
40093
40442
  do {
40094
- if (!target) {
40095
- break;
40096
- }
40097
40443
  var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];
40098
40444
  var elementScroll = scroll_1 - capacity - directionFactor * position;
40099
40445
  if (position || elementScroll) {
@@ -40102,8 +40448,11 @@ var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) {
40102
40448
  availableScrollTop += position;
40103
40449
  }
40104
40450
  }
40105
- var parent_1 = target.parentNode;
40106
- target = parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1;
40451
+ if (target instanceof ShadowRoot) {
40452
+ target = target.host;
40453
+ } else {
40454
+ target = target.parentNode;
40455
+ }
40107
40456
  } while (
40108
40457
  // portaled content
40109
40458
  !targetInLock && target !== document.body || // self content
@@ -40265,7 +40614,7 @@ function RemoveScrollSideCar(props) {
40265
40614
  reactExports.Fragment,
40266
40615
  null,
40267
40616
  inert ? reactExports.createElement(Style2, { styles: generateStyle(id2) }) : null,
40268
- removeScrollBar ? reactExports.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null
40617
+ removeScrollBar ? reactExports.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null
40269
40618
  );
40270
40619
  }
40271
40620
  function getOutermostShadowParent(node) {
@@ -40400,7 +40749,7 @@ var hideOthers = function(originalTarget, parentNode, markerName) {
40400
40749
  return null;
40401
40750
  };
40402
40751
  }
40403
- targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll("[aria-live], script")));
40752
+ targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll("[aria-live]")));
40404
40753
  return applyAttributeToOthers(targets, activeParentNode, markerName, "aria-hidden");
40405
40754
  };
40406
40755
  var DIALOG_NAME = "Dialog";
@@ -40457,7 +40806,7 @@ var DialogTrigger = reactExports.forwardRef(
40457
40806
  "data-state": getState$3(context.open),
40458
40807
  ...triggerProps,
40459
40808
  ref: composedTriggerRef,
40460
- onClick: composeEventHandlers(props.onClick, context.onOpenToggle)
40809
+ onClick: composeEventHandlers$1(props.onClick, context.onOpenToggle)
40461
40810
  }
40462
40811
  );
40463
40812
  }
@@ -40529,17 +40878,17 @@ var DialogContentModal = reactExports.forwardRef(
40529
40878
  ref: composedRefs,
40530
40879
  trapFocus: context.open,
40531
40880
  disableOutsidePointerEvents: true,
40532
- onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
40881
+ onCloseAutoFocus: composeEventHandlers$1(props.onCloseAutoFocus, (event) => {
40533
40882
  event.preventDefault();
40534
40883
  context.triggerRef.current?.focus();
40535
40884
  }),
40536
- onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {
40885
+ onPointerDownOutside: composeEventHandlers$1(props.onPointerDownOutside, (event) => {
40537
40886
  const originalEvent = event.detail.originalEvent;
40538
40887
  const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
40539
40888
  const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
40540
40889
  if (isRightClick) event.preventDefault();
40541
40890
  }),
40542
- onFocusOutside: composeEventHandlers(
40891
+ onFocusOutside: composeEventHandlers$1(
40543
40892
  props.onFocusOutside,
40544
40893
  (event) => event.preventDefault()
40545
40894
  )
@@ -40654,7 +41003,7 @@ var DialogClose = reactExports.forwardRef(
40654
41003
  type: "button",
40655
41004
  ...closeProps,
40656
41005
  ref: forwardedRef,
40657
- onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))
41006
+ onClick: composeEventHandlers$1(props.onClick, () => context.onOpenChange(false))
40658
41007
  }
40659
41008
  );
40660
41009
  }
@@ -41182,9 +41531,8 @@ function getOppositeAxis(axis) {
41182
41531
  function getAxisLength(axis) {
41183
41532
  return axis === "y" ? "height" : "width";
41184
41533
  }
41185
- const yAxisSides = /* @__PURE__ */ new Set(["top", "bottom"]);
41186
41534
  function getSideAxis(placement) {
41187
- return yAxisSides.has(getSide(placement)) ? "y" : "x";
41535
+ return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x";
41188
41536
  }
41189
41537
  function getAlignmentAxis(placement) {
41190
41538
  return getOppositeAxis(getSideAxis(placement));
@@ -41209,19 +41557,19 @@ function getExpandedPlacements(placement) {
41209
41557
  function getOppositeAlignmentPlacement(placement) {
41210
41558
  return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
41211
41559
  }
41212
- const lrPlacement = ["left", "right"];
41213
- const rlPlacement = ["right", "left"];
41214
- const tbPlacement = ["top", "bottom"];
41215
- const btPlacement = ["bottom", "top"];
41216
41560
  function getSideList(side, isStart, rtl) {
41561
+ const lr = ["left", "right"];
41562
+ const rl = ["right", "left"];
41563
+ const tb = ["top", "bottom"];
41564
+ const bt = ["bottom", "top"];
41217
41565
  switch (side) {
41218
41566
  case "top":
41219
41567
  case "bottom":
41220
- if (rtl) return isStart ? rlPlacement : lrPlacement;
41221
- return isStart ? lrPlacement : rlPlacement;
41568
+ if (rtl) return isStart ? rl : lr;
41569
+ return isStart ? lr : rl;
41222
41570
  case "left":
41223
41571
  case "right":
41224
- return isStart ? tbPlacement : btPlacement;
41572
+ return isStart ? tb : bt;
41225
41573
  default:
41226
41574
  return [];
41227
41575
  }
@@ -41589,10 +41937,10 @@ const flip$2 = function(options) {
41589
41937
  const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
41590
41938
  const nextPlacement = placements[nextIndex];
41591
41939
  if (nextPlacement) {
41940
+ var _overflowsData$;
41592
41941
  const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
41593
- if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
41594
- // overflows the main axis.
41595
- overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
41942
+ const hasInitialMainAxisOverflow = ((_overflowsData$ = overflowsData[0]) == null ? void 0 : _overflowsData$.overflows[0]) > 0;
41943
+ if (!ignoreCrossAxisOverflow || hasInitialMainAxisOverflow) {
41596
41944
  return {
41597
41945
  data: {
41598
41946
  index: nextIndex,
@@ -41700,7 +42048,6 @@ const hide$2 = function(options) {
41700
42048
  }
41701
42049
  };
41702
42050
  };
41703
- const originSides = /* @__PURE__ */ new Set(["left", "top"]);
41704
42051
  async function convertValueToCoords(state, options) {
41705
42052
  const {
41706
42053
  placement,
@@ -41711,7 +42058,7 @@ async function convertValueToCoords(state, options) {
41711
42058
  const side = getSide(placement);
41712
42059
  const alignment = getAlignment(placement);
41713
42060
  const isVertical = getSideAxis(placement) === "y";
41714
- const mainAxisMulti = originSides.has(side) ? -1 : 1;
42061
+ const mainAxisMulti = ["left", "top"].includes(side) ? -1 : 1;
41715
42062
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
41716
42063
  const rawValue = evaluate(options, state);
41717
42064
  let {
@@ -41889,7 +42236,7 @@ const limitShift$2 = function(options) {
41889
42236
  if (checkCrossAxis) {
41890
42237
  var _middlewareData$offse, _middlewareData$offse2;
41891
42238
  const len = mainAxis === "y" ? "width" : "height";
41892
- const isOriginSide = originSides.has(getSide(placement));
42239
+ const isOriginSide = ["top", "left"].includes(getSide(placement));
41893
42240
  const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);
41894
42241
  const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);
41895
42242
  if (crossAxisCoord < limitMin) {
@@ -42024,7 +42371,6 @@ function isShadowRoot(value) {
42024
42371
  }
42025
42372
  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
42026
42373
  }
42027
- const invalidOverflowDisplayValues = /* @__PURE__ */ new Set(["inline", "contents"]);
42028
42374
  function isOverflowElement(element) {
42029
42375
  const {
42030
42376
  overflow,
@@ -42032,29 +42378,24 @@ function isOverflowElement(element) {
42032
42378
  overflowY,
42033
42379
  display
42034
42380
  } = getComputedStyle$1(element);
42035
- return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
42381
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !["inline", "contents"].includes(display);
42036
42382
  }
42037
- const tableElements = /* @__PURE__ */ new Set(["table", "td", "th"]);
42038
42383
  function isTableElement(element) {
42039
- return tableElements.has(getNodeName(element));
42384
+ return ["table", "td", "th"].includes(getNodeName(element));
42040
42385
  }
42041
- const topLayerSelectors = [":popover-open", ":modal"];
42042
42386
  function isTopLayer(element) {
42043
- return topLayerSelectors.some((selector) => {
42387
+ return [":popover-open", ":modal"].some((selector) => {
42044
42388
  try {
42045
42389
  return element.matches(selector);
42046
- } catch (_e2) {
42390
+ } catch (e) {
42047
42391
  return false;
42048
42392
  }
42049
42393
  });
42050
42394
  }
42051
- const transformProperties = ["transform", "translate", "scale", "rotate", "perspective"];
42052
- const willChangeValues = ["transform", "translate", "scale", "rotate", "perspective", "filter"];
42053
- const containValues = ["paint", "layout", "strict", "content"];
42054
42395
  function isContainingBlock(elementOrCss) {
42055
42396
  const webkit = isWebKit();
42056
42397
  const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
42057
- return transformProperties.some((value) => css[value] ? css[value] !== "none" : false) || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || willChangeValues.some((value) => (css.willChange || "").includes(value)) || containValues.some((value) => (css.contain || "").includes(value));
42398
+ return ["transform", "translate", "scale", "rotate", "perspective"].some((value) => css[value] ? css[value] !== "none" : false) || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || ["transform", "translate", "scale", "rotate", "perspective", "filter"].some((value) => (css.willChange || "").includes(value)) || ["paint", "layout", "strict", "content"].some((value) => (css.contain || "").includes(value));
42058
42399
  }
42059
42400
  function getContainingBlock(element) {
42060
42401
  let currentNode = getParentNode(element);
@@ -42072,9 +42413,8 @@ function isWebKit() {
42072
42413
  if (typeof CSS === "undefined" || !CSS.supports) return false;
42073
42414
  return CSS.supports("-webkit-backdrop-filter", "none");
42074
42415
  }
42075
- const lastTraversableNodeNames = /* @__PURE__ */ new Set(["html", "body", "#document"]);
42076
42416
  function isLastTraversableNode(node) {
42077
- return lastTraversableNodeNames.has(getNodeName(node));
42417
+ return ["html", "body", "#document"].includes(getNodeName(node));
42078
42418
  }
42079
42419
  function getComputedStyle$1(element) {
42080
42420
  return getWindow(element).getComputedStyle(element);
@@ -42258,9 +42598,15 @@ function getWindowScrollBarX(element, rect) {
42258
42598
  }
42259
42599
  return rect.left + leftScroll;
42260
42600
  }
42261
- function getHTMLOffset(documentElement, scroll) {
42601
+ function getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {
42602
+ if (ignoreScrollbarX === void 0) {
42603
+ ignoreScrollbarX = false;
42604
+ }
42262
42605
  const htmlRect = documentElement.getBoundingClientRect();
42263
- const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
42606
+ const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 : (
42607
+ // RTL <body> scrollbar.
42608
+ getWindowScrollBarX(documentElement, htmlRect)
42609
+ ));
42264
42610
  const y = htmlRect.top + scroll.scrollTop;
42265
42611
  return {
42266
42612
  x,
@@ -42298,7 +42644,7 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
42298
42644
  offsets.y = offsetRect.y + offsetParent.clientTop;
42299
42645
  }
42300
42646
  }
42301
- const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
42647
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);
42302
42648
  return {
42303
42649
  width: rect.width * scale.x,
42304
42650
  height: rect.height * scale.y,
@@ -42327,7 +42673,6 @@ function getDocumentRect(element) {
42327
42673
  y
42328
42674
  };
42329
42675
  }
42330
- const SCROLLBAR_MAX = 25;
42331
42676
  function getViewportRect(element, strategy) {
42332
42677
  const win = getWindow(element);
42333
42678
  const html = getDocumentElement(element);
@@ -42345,19 +42690,6 @@ function getViewportRect(element, strategy) {
42345
42690
  y = visualViewport.offsetTop;
42346
42691
  }
42347
42692
  }
42348
- const windowScrollbarX = getWindowScrollBarX(html);
42349
- if (windowScrollbarX <= 0) {
42350
- const doc = html.ownerDocument;
42351
- const body = doc.body;
42352
- const bodyStyles = getComputedStyle(body);
42353
- const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
42354
- const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
42355
- if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
42356
- width -= clippingStableScrollbarWidth;
42357
- }
42358
- } else if (windowScrollbarX <= SCROLLBAR_MAX) {
42359
- width += windowScrollbarX;
42360
- }
42361
42693
  return {
42362
42694
  width,
42363
42695
  height,
@@ -42365,7 +42697,6 @@ function getViewportRect(element, strategy) {
42365
42697
  y
42366
42698
  };
42367
42699
  }
42368
- const absoluteOrFixed = /* @__PURE__ */ new Set(["absolute", "fixed"]);
42369
42700
  function getInnerBoundingClientRect(element, strategy) {
42370
42701
  const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
42371
42702
  const top = clientRect.top + element.clientTop;
@@ -42423,7 +42754,7 @@ function getClippingElementAncestors(element, cache2) {
42423
42754
  if (!currentNodeIsContaining && computedStyle.position === "fixed") {
42424
42755
  currentContainingBlockComputedStyle = null;
42425
42756
  }
42426
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
42757
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && ["absolute", "fixed"].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
42427
42758
  if (shouldDropCurrentNode) {
42428
42759
  result = result.filter((ancestor) => ancestor !== currentNode);
42429
42760
  } else {
@@ -42743,10 +43074,7 @@ const computePosition = (reference, floating, options) => {
42743
43074
  platform: platformWithCache
42744
43075
  });
42745
43076
  };
42746
- var isClient = typeof document !== "undefined";
42747
- var noop = function noop2() {
42748
- };
42749
- var index = isClient ? reactExports.useLayoutEffect : noop;
43077
+ var index = typeof document !== "undefined" ? reactExports.useLayoutEffect : reactExports.useEffect;
42750
43078
  function deepEqual(a, b) {
42751
43079
  if (a === b) {
42752
43080
  return true;
@@ -43090,13 +43418,8 @@ var PopperAnchor = reactExports.forwardRef(
43090
43418
  const context = usePopperContext(ANCHOR_NAME$1, __scopePopper);
43091
43419
  const ref2 = reactExports.useRef(null);
43092
43420
  const composedRefs = useComposedRefs(forwardedRef, ref2);
43093
- const anchorRef = reactExports.useRef(null);
43094
43421
  reactExports.useEffect(() => {
43095
- const previousAnchor = anchorRef.current;
43096
- anchorRef.current = virtualRef?.current || ref2.current;
43097
- if (previousAnchor !== anchorRef.current) {
43098
- context.onAnchorChange(anchorRef.current);
43099
- }
43422
+ context.onAnchorChange(virtualRef?.current || ref2.current);
43100
43423
  });
43101
43424
  return virtualRef ? null : /* @__PURE__ */ jsxRuntimeExports.jsx(Primitive.div, { ...anchorProps, ref: composedRefs });
43102
43425
  }
@@ -43417,7 +43740,7 @@ var PopoverTrigger$1 = reactExports.forwardRef(
43417
43740
  "data-state": getState$2(context.open),
43418
43741
  ...triggerProps,
43419
43742
  ref: composedTriggerRef,
43420
- onClick: composeEventHandlers(props.onClick, context.onOpenToggle)
43743
+ onClick: composeEventHandlers$1(props.onClick, context.onOpenToggle)
43421
43744
  }
43422
43745
  );
43423
43746
  return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsxRuntimeExports.jsx(Anchor, { asChild: true, ...popperScope, children: trigger });
@@ -43462,11 +43785,11 @@ var PopoverContentModal = reactExports.forwardRef(
43462
43785
  ref: composedRefs,
43463
43786
  trapFocus: context.open,
43464
43787
  disableOutsidePointerEvents: true,
43465
- onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
43788
+ onCloseAutoFocus: composeEventHandlers$1(props.onCloseAutoFocus, (event) => {
43466
43789
  event.preventDefault();
43467
43790
  if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();
43468
43791
  }),
43469
- onPointerDownOutside: composeEventHandlers(
43792
+ onPointerDownOutside: composeEventHandlers$1(
43470
43793
  props.onPointerDownOutside,
43471
43794
  (event) => {
43472
43795
  const originalEvent = event.detail.originalEvent;
@@ -43476,7 +43799,7 @@ var PopoverContentModal = reactExports.forwardRef(
43476
43799
  },
43477
43800
  { checkForDefaultPrevented: false }
43478
43801
  ),
43479
- onFocusOutside: composeEventHandlers(
43802
+ onFocusOutside: composeEventHandlers$1(
43480
43803
  props.onFocusOutside,
43481
43804
  (event) => event.preventDefault(),
43482
43805
  { checkForDefaultPrevented: false }
@@ -43599,7 +43922,7 @@ var PopoverClose = reactExports.forwardRef(
43599
43922
  type: "button",
43600
43923
  ...closeProps,
43601
43924
  ref: forwardedRef,
43602
- onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))
43925
+ onClick: composeEventHandlers$1(props.onClick, () => context.onOpenChange(false))
43603
43926
  }
43604
43927
  );
43605
43928
  }
@@ -44596,7 +44919,7 @@ function requireLib() {
44596
44919
  };
44597
44920
  return __assign2.apply(this, arguments);
44598
44921
  };
44599
- var __createBinding = lib && lib.__createBinding || (Object.create ? (function(o, m2, k2, k22) {
44922
+ var __createBinding = lib && lib.__createBinding || (Object.create ? function(o, m2, k2, k22) {
44600
44923
  if (k22 === void 0) k22 = k2;
44601
44924
  var desc = Object.getOwnPropertyDescriptor(m2, k2);
44602
44925
  if (!desc || ("get" in desc ? !m2.__esModule : desc.writable || desc.configurable)) {
@@ -44605,13 +44928,13 @@ function requireLib() {
44605
44928
  } };
44606
44929
  }
44607
44930
  Object.defineProperty(o, k22, desc);
44608
- }) : (function(o, m2, k2, k22) {
44931
+ } : function(o, m2, k2, k22) {
44609
44932
  if (k22 === void 0) k22 = k2;
44610
44933
  o[k22] = m2[k2];
44611
- }));
44612
- var __setModuleDefault = lib && lib.__setModuleDefault || (Object.create ? (function(o, v) {
44934
+ });
44935
+ var __setModuleDefault = lib && lib.__setModuleDefault || (Object.create ? function(o, v) {
44613
44936
  Object.defineProperty(o, "default", { enumerable: true, value: v });
44614
- }) : function(o, v) {
44937
+ } : function(o, v) {
44615
44938
  o["default"] = v;
44616
44939
  });
44617
44940
  var __importStar = lib && lib.__importStar || function(mod) {
@@ -44989,7 +45312,15 @@ function requirePrism() {
44989
45312
  hasRequiredPrism = 1;
44990
45313
  (function(module) {
44991
45314
  var _self = typeof window !== "undefined" ? window : typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope ? self : {};
44992
- var Prism2 = (function(_self2) {
45315
+ /**
45316
+ * Prism: Lightweight, robust, elegant syntax highlighting
45317
+ *
45318
+ * @license MIT <https://opensource.org/licenses/MIT>
45319
+ * @author Lea Verou <https://lea.verou.me>
45320
+ * @namespace
45321
+ * @public
45322
+ */
45323
+ var Prism2 = function(_self2) {
44993
45324
  var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
44994
45325
  var uniqueId = 0;
44995
45326
  var plainTextGrammar = {};
@@ -45874,7 +46205,7 @@ function requirePrism() {
45874
46205
  }
45875
46206
  }
45876
46207
  return _;
45877
- })(_self);
46208
+ }(_self);
45878
46209
  if (module.exports) {
45879
46210
  module.exports = Prism2;
45880
46211
  }
@@ -46464,7 +46795,8 @@ Prism.languages.webmanifest = Prism.languages.json;
46464
46795
  const JsonEditor = ({
46465
46796
  value,
46466
46797
  onChange,
46467
- error: externalError
46798
+ error: externalError,
46799
+ placeholder
46468
46800
  }) => {
46469
46801
  const [editorContent, setEditorContent] = reactExports.useState(value || "");
46470
46802
  const [internalError, setInternalError] = reactExports.useState(
@@ -46491,6 +46823,7 @@ const JsonEditor = ({
46491
46823
  onValueChange: handleEditorChange,
46492
46824
  highlight: (code2) => Prism$1.highlight(code2, Prism$1.languages.json, "json"),
46493
46825
  padding: 10,
46826
+ placeholder,
46494
46827
  style: {
46495
46828
  fontFamily: '"Fira code", "Fira Mono", monospace',
46496
46829
  fontSize: 14,
@@ -46548,7 +46881,22 @@ const getArrayItemDefault = (schema) => {
46548
46881
  };
46549
46882
  const DynamicJsonForm = reactExports.forwardRef(
46550
46883
  ({ schema, value, onChange, maxDepth = 3 }, ref2) => {
46551
- const isOnlyJSON = !isSimpleObject(schema);
46884
+ const canRenderTopLevelForm = (s) => {
46885
+ const primitiveTypes = ["string", "number", "integer", "boolean", "null"];
46886
+ const hasType = Array.isArray(s.type) ? s.type.length > 0 : !!s.type;
46887
+ if (!hasType) return false;
46888
+ const includesType = (t) => Array.isArray(s.type) ? s.type.includes(t) : s.type === t;
46889
+ if (primitiveTypes.some(includesType)) return true;
46890
+ if (includesType("object")) {
46891
+ const keys = Object.keys(s.properties ?? {});
46892
+ return keys.length > 0;
46893
+ }
46894
+ if (includesType("array")) {
46895
+ return !!s.items;
46896
+ }
46897
+ return false;
46898
+ };
46899
+ const isOnlyJSON = !canRenderTopLevelForm(schema);
46552
46900
  const [isJsonMode, setIsJsonMode] = reactExports.useState(isOnlyJSON);
46553
46901
  const [jsonError, setJsonError] = reactExports.useState();
46554
46902
  const [copiedJson, setCopiedJson] = reactExports.useState(false);
@@ -46690,58 +47038,64 @@ const DynamicJsonForm = reactExports.forwardRef(
46690
47038
  }
46691
47039
  switch (fieldType) {
46692
47040
  case "string": {
46693
- if (propSchema.oneOf && propSchema.oneOf.every(
46694
- (option) => typeof option.const === "string" && typeof option.title === "string"
46695
- )) {
46696
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
46697
- "select",
46698
- {
46699
- value: currentValue ?? "",
46700
- onChange: (e) => {
46701
- const val = e.target.value;
46702
- if (!val && !isRequired) {
46703
- handleFieldChange(path, void 0);
46704
- } else {
46705
- handleFieldChange(path, val);
46706
- }
46707
- },
46708
- required: isRequired,
46709
- className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800",
46710
- children: [
46711
- /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "", children: "Select an option..." }),
46712
- propSchema.oneOf.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx(
46713
- "option",
46714
- {
46715
- value: option.const,
46716
- children: option.title
46717
- },
46718
- option.const
46719
- ))
46720
- ]
46721
- }
46722
- );
47041
+ const titledOptions = (propSchema.oneOf ?? propSchema.anyOf)?.filter((opt) => "const" in opt);
47042
+ if (titledOptions && titledOptions.length > 0) {
47043
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
47044
+ propSchema.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-600", children: propSchema.description }),
47045
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
47046
+ "select",
47047
+ {
47048
+ value: currentValue ?? "",
47049
+ onChange: (e) => {
47050
+ const val = e.target.value;
47051
+ if (!val && !isRequired) {
47052
+ handleFieldChange(path, void 0);
47053
+ } else {
47054
+ handleFieldChange(path, val);
47055
+ }
47056
+ },
47057
+ required: isRequired,
47058
+ className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800",
47059
+ children: [
47060
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "", children: "Select an option..." }),
47061
+ titledOptions.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx(
47062
+ "option",
47063
+ {
47064
+ value: String(option.const),
47065
+ children: option.title ?? String(option.const)
47066
+ },
47067
+ String(option.const)
47068
+ ))
47069
+ ]
47070
+ }
47071
+ )
47072
+ ] });
46723
47073
  }
46724
47074
  if (propSchema.enum) {
46725
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
46726
- "select",
46727
- {
46728
- value: currentValue ?? "",
46729
- onChange: (e) => {
46730
- const val = e.target.value;
46731
- if (!val && !isRequired) {
46732
- handleFieldChange(path, void 0);
46733
- } else {
46734
- handleFieldChange(path, val);
46735
- }
46736
- },
46737
- required: isRequired,
46738
- className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800",
46739
- children: [
46740
- /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "", children: "Select an option..." }),
46741
- propSchema.enum.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: option, children: option }, option))
46742
- ]
46743
- }
46744
- );
47075
+ const names2 = Array.isArray(propSchema.enumNames) ? propSchema.enumNames : void 0;
47076
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
47077
+ propSchema.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-600", children: propSchema.description }),
47078
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
47079
+ "select",
47080
+ {
47081
+ value: currentValue ?? "",
47082
+ onChange: (e) => {
47083
+ const val = e.target.value;
47084
+ if (!val && !isRequired) {
47085
+ handleFieldChange(path, void 0);
47086
+ } else {
47087
+ handleFieldChange(path, val);
47088
+ }
47089
+ },
47090
+ required: isRequired,
47091
+ className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800",
47092
+ children: [
47093
+ /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: "", children: "Select an option..." }),
47094
+ propSchema.enum.map((option, idx) => /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: option, children: names2?.[idx] ?? option }, option))
47095
+ ]
47096
+ }
47097
+ )
47098
+ ] });
46745
47099
  }
46746
47100
  let inputType = "text";
46747
47101
  switch (propSchema.format) {
@@ -46826,16 +47180,19 @@ const DynamicJsonForm = reactExports.forwardRef(
46826
47180
  }
46827
47181
  );
46828
47182
  case "boolean":
46829
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
46830
- Input,
46831
- {
46832
- type: "checkbox",
46833
- checked: currentValue ?? false,
46834
- onChange: (e) => handleFieldChange(path, e.target.checked),
46835
- className: "w-4 h-4",
46836
- required: isRequired
46837
- }
46838
- );
47183
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
47184
+ propSchema.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-600", children: propSchema.description }),
47185
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
47186
+ Input,
47187
+ {
47188
+ type: "checkbox",
47189
+ checked: currentValue ?? false,
47190
+ onChange: (e) => handleFieldChange(path, e.target.checked),
47191
+ className: "w-4 h-4",
47192
+ required: isRequired
47193
+ }
47194
+ )
47195
+ ] });
46839
47196
  case "null":
46840
47197
  return null;
46841
47198
  case "object":
@@ -46861,7 +47218,7 @@ const DynamicJsonForm = reactExports.forwardRef(
46861
47218
  }
46862
47219
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-2 border rounded p-3", children: Object.entries(propSchema.properties).map(([key, subSchema]) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
46863
47220
  /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "block text-sm font-medium mb-1", children: [
46864
- key,
47221
+ subSchema.title ?? key,
46865
47222
  propSchema.required?.includes(key) && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-red-500 ml-1", children: "*" })
46866
47223
  ] }),
46867
47224
  renderFormFields(
@@ -46876,6 +47233,47 @@ const DynamicJsonForm = reactExports.forwardRef(
46876
47233
  case "array": {
46877
47234
  const arrayValue = Array.isArray(currentValue) ? currentValue : [];
46878
47235
  if (!propSchema.items) return null;
47236
+ const itemSchema = propSchema.items;
47237
+ let multiOptions = null;
47238
+ const titledMulti = (itemSchema.anyOf ?? itemSchema.oneOf)?.filter((opt) => "const" in opt);
47239
+ if (titledMulti && titledMulti.length > 0) {
47240
+ multiOptions = titledMulti.map((o) => ({
47241
+ value: String(o.const),
47242
+ label: o.title ?? String(o.const)
47243
+ }));
47244
+ } else if (itemSchema.enum) {
47245
+ const names2 = Array.isArray(itemSchema.enumNames) ? itemSchema.enumNames : void 0;
47246
+ multiOptions = itemSchema.enum.map((v, i) => ({
47247
+ value: v,
47248
+ label: names2?.[i] ?? v
47249
+ }));
47250
+ }
47251
+ if (multiOptions) {
47252
+ const selectSize = Math.min(Math.max(multiOptions.length, 3), 8);
47253
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
47254
+ propSchema.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-600", children: propSchema.description }),
47255
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
47256
+ "select",
47257
+ {
47258
+ multiple: true,
47259
+ size: selectSize,
47260
+ value: arrayValue,
47261
+ onChange: (e) => {
47262
+ const selected = Array.from(
47263
+ e.target.selectedOptions
47264
+ ).map((o) => o.value);
47265
+ handleFieldChange(path, selected);
47266
+ },
47267
+ className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800",
47268
+ children: multiOptions.map((opt) => /* @__PURE__ */ jsxRuntimeExports.jsx("option", { value: opt.value, children: opt.label }, opt.value))
47269
+ }
47270
+ ),
47271
+ (propSchema.minItems || propSchema.maxItems) && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-gray-500", children: [
47272
+ propSchema.minItems ? `Select at least ${propSchema.minItems}. ` : "",
47273
+ propSchema.maxItems ? `Select at most ${propSchema.maxItems}.` : ""
47274
+ ] })
47275
+ ] });
47276
+ }
46879
47277
  if (isSimpleObject(propSchema.items)) {
46880
47278
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
46881
47279
  propSchema.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-600", children: propSchema.description }),
@@ -47010,7 +47408,8 @@ const DynamicJsonForm = reactExports.forwardRef(
47010
47408
  setRawJsonValue(newValue);
47011
47409
  debouncedUpdateParent(newValue);
47012
47410
  },
47013
- error: jsonError
47411
+ error: jsonError,
47412
+ placeholder: schema.description
47014
47413
  }
47015
47414
  ) : (
47016
47415
  // If schema type is object but value is not an object or is empty, and we have actual JSON data,
@@ -47347,13 +47746,13 @@ var SelectTrigger$1 = reactExports.forwardRef(
47347
47746
  "data-placeholder": shouldShowPlaceholder(context.value) ? "" : void 0,
47348
47747
  ...triggerProps,
47349
47748
  ref: composedRefs,
47350
- onClick: composeEventHandlers(triggerProps.onClick, (event) => {
47749
+ onClick: composeEventHandlers$1(triggerProps.onClick, (event) => {
47351
47750
  event.currentTarget.focus();
47352
47751
  if (pointerTypeRef.current !== "mouse") {
47353
47752
  handleOpen(event);
47354
47753
  }
47355
47754
  }),
47356
- onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {
47755
+ onPointerDown: composeEventHandlers$1(triggerProps.onPointerDown, (event) => {
47357
47756
  pointerTypeRef.current = event.pointerType;
47358
47757
  const target = event.target;
47359
47758
  if (target.hasPointerCapture(event.pointerId)) {
@@ -47364,7 +47763,7 @@ var SelectTrigger$1 = reactExports.forwardRef(
47364
47763
  event.preventDefault();
47365
47764
  }
47366
47765
  }),
47367
- onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {
47766
+ onKeyDown: composeEventHandlers$1(triggerProps.onKeyDown, (event) => {
47368
47767
  const isTypingAhead = searchRef.current !== "";
47369
47768
  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
47370
47769
  if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
@@ -47608,7 +48007,7 @@ var SelectContentImpl = reactExports.forwardRef(
47608
48007
  onMountAutoFocus: (event) => {
47609
48008
  event.preventDefault();
47610
48009
  },
47611
- onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {
48010
+ onUnmountAutoFocus: composeEventHandlers$1(onCloseAutoFocus, (event) => {
47612
48011
  context.trigger?.focus({ preventScroll: true });
47613
48012
  event.preventDefault();
47614
48013
  }),
@@ -47641,7 +48040,7 @@ var SelectContentImpl = reactExports.forwardRef(
47641
48040
  outline: "none",
47642
48041
  ...contentProps.style
47643
48042
  },
47644
- onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {
48043
+ onKeyDown: composeEventHandlers$1(contentProps.onKeyDown, (event) => {
47645
48044
  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
47646
48045
  if (event.key === "Tab") event.preventDefault();
47647
48046
  if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
@@ -47908,7 +48307,7 @@ var SelectViewport = reactExports.forwardRef(
47908
48307
  overflow: "hidden auto",
47909
48308
  ...viewportProps.style
47910
48309
  },
47911
- onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {
48310
+ onScroll: composeEventHandlers$1(viewportProps.onScroll, (event) => {
47912
48311
  const viewport = event.currentTarget;
47913
48312
  const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;
47914
48313
  if (shouldExpandOnScrollRef?.current && contentWrapper) {
@@ -48021,18 +48420,18 @@ var SelectItem$1 = reactExports.forwardRef(
48021
48420
  tabIndex: disabled ? void 0 : -1,
48022
48421
  ...itemProps,
48023
48422
  ref: composedRefs,
48024
- onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),
48025
- onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),
48026
- onClick: composeEventHandlers(itemProps.onClick, () => {
48423
+ onFocus: composeEventHandlers$1(itemProps.onFocus, () => setIsFocused(true)),
48424
+ onBlur: composeEventHandlers$1(itemProps.onBlur, () => setIsFocused(false)),
48425
+ onClick: composeEventHandlers$1(itemProps.onClick, () => {
48027
48426
  if (pointerTypeRef.current !== "mouse") handleSelect();
48028
48427
  }),
48029
- onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {
48428
+ onPointerUp: composeEventHandlers$1(itemProps.onPointerUp, () => {
48030
48429
  if (pointerTypeRef.current === "mouse") handleSelect();
48031
48430
  }),
48032
- onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {
48431
+ onPointerDown: composeEventHandlers$1(itemProps.onPointerDown, (event) => {
48033
48432
  pointerTypeRef.current = event.pointerType;
48034
48433
  }),
48035
- onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {
48434
+ onPointerMove: composeEventHandlers$1(itemProps.onPointerMove, (event) => {
48036
48435
  pointerTypeRef.current = event.pointerType;
48037
48436
  if (disabled) {
48038
48437
  contentContext.onItemLeave?.();
@@ -48040,12 +48439,12 @@ var SelectItem$1 = reactExports.forwardRef(
48040
48439
  event.currentTarget.focus({ preventScroll: true });
48041
48440
  }
48042
48441
  }),
48043
- onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {
48442
+ onPointerLeave: composeEventHandlers$1(itemProps.onPointerLeave, (event) => {
48044
48443
  if (event.currentTarget === document.activeElement) {
48045
48444
  contentContext.onItemLeave?.();
48046
48445
  }
48047
48446
  }),
48048
- onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {
48447
+ onKeyDown: composeEventHandlers$1(itemProps.onKeyDown, (event) => {
48049
48448
  const isTypingAhead = contentContext.searchRef?.current !== "";
48050
48449
  if (isTypingAhead && event.key === " ") return;
48051
48450
  if (SELECTION_KEYS.includes(event.key)) handleSelect();
@@ -48193,18 +48592,18 @@ var SelectScrollButtonImpl = reactExports.forwardRef((props, forwardedRef) => {
48193
48592
  ...scrollIndicatorProps,
48194
48593
  ref: forwardedRef,
48195
48594
  style: { flexShrink: 0, ...scrollIndicatorProps.style },
48196
- onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {
48595
+ onPointerDown: composeEventHandlers$1(scrollIndicatorProps.onPointerDown, () => {
48197
48596
  if (autoScrollTimerRef.current === null) {
48198
48597
  autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
48199
48598
  }
48200
48599
  }),
48201
- onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {
48600
+ onPointerMove: composeEventHandlers$1(scrollIndicatorProps.onPointerMove, () => {
48202
48601
  contentContext.onItemLeave?.();
48203
48602
  if (autoScrollTimerRef.current === null) {
48204
48603
  autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
48205
48604
  }
48206
48605
  }),
48207
- onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {
48606
+ onPointerLeave: composeEventHandlers$1(scrollIndicatorProps.onPointerLeave, () => {
48208
48607
  clearAutoScrollTimer();
48209
48608
  })
48210
48609
  }
@@ -48464,7 +48863,7 @@ const useTheme = () => {
48464
48863
  [theme, setThemeWithSideEffect]
48465
48864
  );
48466
48865
  };
48467
- const version = "1.7.1";
48866
+ const version = "1.8.0";
48468
48867
  var [createTooltipContext] = createContextScope("Tooltip", [
48469
48868
  createPopperScope
48470
48869
  ]);
@@ -48630,29 +49029,29 @@ var TooltipTrigger$1 = reactExports.forwardRef(
48630
49029
  "data-state": context.stateAttribute,
48631
49030
  ...triggerProps,
48632
49031
  ref: composedRefs,
48633
- onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {
49032
+ onPointerMove: composeEventHandlers$1(props.onPointerMove, (event) => {
48634
49033
  if (event.pointerType === "touch") return;
48635
49034
  if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {
48636
49035
  context.onTriggerEnter();
48637
49036
  hasPointerMoveOpenedRef.current = true;
48638
49037
  }
48639
49038
  }),
48640
- onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {
49039
+ onPointerLeave: composeEventHandlers$1(props.onPointerLeave, () => {
48641
49040
  context.onTriggerLeave();
48642
49041
  hasPointerMoveOpenedRef.current = false;
48643
49042
  }),
48644
- onPointerDown: composeEventHandlers(props.onPointerDown, () => {
49043
+ onPointerDown: composeEventHandlers$1(props.onPointerDown, () => {
48645
49044
  if (context.open) {
48646
49045
  context.onClose();
48647
49046
  }
48648
49047
  isPointerDownRef.current = true;
48649
49048
  document.addEventListener("pointerup", handlePointerUp, { once: true });
48650
49049
  }),
48651
- onFocus: composeEventHandlers(props.onFocus, () => {
49050
+ onFocus: composeEventHandlers$1(props.onFocus, () => {
48652
49051
  if (!isPointerDownRef.current) context.onOpen();
48653
49052
  }),
48654
- onBlur: composeEventHandlers(props.onBlur, context.onClose),
48655
- onClick: composeEventHandlers(props.onClick, context.onClose)
49053
+ onBlur: composeEventHandlers$1(props.onBlur, context.onClose),
49054
+ onClick: composeEventHandlers$1(props.onClick, context.onClose)
48656
49055
  }
48657
49056
  ) });
48658
49057
  }
@@ -48963,6 +49362,14 @@ const Textarea = reactExports.forwardRef(
48963
49362
  }
48964
49363
  );
48965
49364
  Textarea.displayName = "Textarea";
49365
+ function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
49366
+ return function handleEvent(event) {
49367
+ originalEventHandler?.(event);
49368
+ if (checkForDefaultPrevented === false || !event.defaultPrevented) {
49369
+ return ourEventHandler?.(event);
49370
+ }
49371
+ };
49372
+ }
48966
49373
  var SWITCH_NAME = "Switch";
48967
49374
  var [createSwitchContext] = createContextScope(SWITCH_NAME);
48968
49375
  var [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);
@@ -50177,10 +50584,10 @@ var CheckboxTrigger = reactExports.forwardRef(
50177
50584
  value,
50178
50585
  ...checkboxProps,
50179
50586
  ref: composedRefs,
50180
- onKeyDown: composeEventHandlers(onKeyDown, (event) => {
50587
+ onKeyDown: composeEventHandlers$1(onKeyDown, (event) => {
50181
50588
  if (event.key === "Enter") event.preventDefault();
50182
50589
  }),
50183
- onClick: composeEventHandlers(onClick, (event) => {
50590
+ onClick: composeEventHandlers$1(onClick, (event) => {
50184
50591
  setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);
50185
50592
  if (bubbleInput && isFormControl) {
50186
50593
  hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
@@ -51824,22 +52231,66 @@ class MCPSpecComplianceAssessor extends BaseAssessor {
51824
52231
  return recommendations;
51825
52232
  }
51826
52233
  }
52234
+ function createConcurrencyLimit(concurrency) {
52235
+ if (concurrency < 1) {
52236
+ throw new Error("Concurrency must be at least 1");
52237
+ }
52238
+ let activeCount = 0;
52239
+ const queue = [];
52240
+ const next = () => {
52241
+ if (activeCount < concurrency && queue.length > 0) {
52242
+ const { fn, resolve: resolve2, reject } = queue.shift();
52243
+ activeCount++;
52244
+ fn().then((result) => {
52245
+ activeCount--;
52246
+ resolve2(result);
52247
+ next();
52248
+ }).catch((error) => {
52249
+ activeCount--;
52250
+ reject(error);
52251
+ next();
52252
+ });
52253
+ }
52254
+ };
52255
+ return (fn) => {
52256
+ return new Promise((resolve2, reject) => {
52257
+ queue.push({
52258
+ fn,
52259
+ resolve: resolve2,
52260
+ reject
52261
+ });
52262
+ next();
52263
+ });
52264
+ };
52265
+ }
51827
52266
  class ErrorHandlingAssessor extends BaseAssessor {
51828
52267
  async assess(context) {
51829
52268
  this.log("Starting error handling assessment");
51830
52269
  const testDetails = [];
51831
52270
  let passedTests = 0;
51832
52271
  const toolsToTest = this.selectToolsForTesting(context.tools);
51833
- for (const tool of toolsToTest) {
51834
- const toolTests = await this.testToolErrorHandling(
51835
- tool,
51836
- context.callTool
51837
- );
52272
+ const concurrency = this.config.maxParallelTests ?? 5;
52273
+ const limit2 = createConcurrencyLimit(concurrency);
52274
+ this.log(
52275
+ `Testing ${toolsToTest.length} tools for error handling with concurrency limit of ${concurrency}`
52276
+ );
52277
+ const allToolTests = await Promise.all(
52278
+ toolsToTest.map(
52279
+ (tool) => limit2(async () => {
52280
+ const toolTests = await this.testToolErrorHandling(
52281
+ tool,
52282
+ context.callTool
52283
+ );
52284
+ if (this.config.delayBetweenTests && this.config.delayBetweenTests > 0) {
52285
+ await this.sleep(this.config.delayBetweenTests);
52286
+ }
52287
+ return toolTests;
52288
+ })
52289
+ )
52290
+ );
52291
+ for (const toolTests of allToolTests) {
51838
52292
  testDetails.push(...toolTests);
51839
52293
  passedTests += toolTests.filter((t) => t.passed).length;
51840
- if (this.config.delayBetweenTests && this.config.delayBetweenTests > 0) {
51841
- await this.sleep(this.config.delayBetweenTests);
51842
- }
51843
52294
  }
51844
52295
  this.testCount = testDetails.length;
51845
52296
  const metrics = this.calculateMetrics(testDetails, passedTests);
@@ -53195,19 +53646,33 @@ class FunctionalityAssessor extends BaseAssessor {
53195
53646
  const brokenTools = [];
53196
53647
  let workingTools = 0;
53197
53648
  const toolsToTest = this.selectToolsForTesting(context.tools);
53198
- for (const tool of toolsToTest) {
53199
- this.testCount++;
53200
- const result = await this.testTool(tool, context.callTool);
53649
+ const concurrency = this.config.maxParallelTests ?? 5;
53650
+ const limit2 = createConcurrencyLimit(concurrency);
53651
+ this.log(
53652
+ `Testing ${toolsToTest.length} tools with concurrency limit of ${concurrency}`
53653
+ );
53654
+ const results = await Promise.all(
53655
+ toolsToTest.map(
53656
+ (tool) => limit2(async () => {
53657
+ this.testCount++;
53658
+ const result = await this.testTool(tool, context.callTool);
53659
+ if (this.config.delayBetweenTests && this.config.delayBetweenTests > 0) {
53660
+ await this.sleep(this.config.delayBetweenTests);
53661
+ }
53662
+ return result;
53663
+ })
53664
+ )
53665
+ );
53666
+ for (const result of results) {
53201
53667
  toolResults.push(result);
53202
- if (this.config.delayBetweenTests && this.config.delayBetweenTests > 0) {
53203
- await this.sleep(this.config.delayBetweenTests);
53204
- }
53205
53668
  if (result.status === "working") {
53206
53669
  workingTools++;
53207
53670
  } else if (result.status === "broken") {
53208
- brokenTools.push(tool.name);
53671
+ brokenTools.push(result.toolName);
53209
53672
  if (this.config.skipBrokenTools) {
53210
- this.log(`Skipping further tests for broken tool: ${tool.name}`);
53673
+ this.log(
53674
+ `Skipping further tests for broken tool: ${result.toolName}`
53675
+ );
53211
53676
  }
53212
53677
  }
53213
53678
  }
@@ -54245,59 +54710,70 @@ class SecurityAssessor extends BaseAssessor {
54245
54710
  const results = [];
54246
54711
  const attackPatterns = getAllAttackPatterns();
54247
54712
  const toolsToTest = this.selectToolsForTesting(context.tools);
54713
+ const concurrency = this.config.maxParallelTests ?? 5;
54714
+ const limit2 = createConcurrencyLimit(concurrency);
54248
54715
  this.log(
54249
- `Starting ADVANCED security assessment - testing ${toolsToTest.length} tools with ${attackPatterns.length} security patterns (~${toolsToTest.length * attackPatterns.length * 3} tests)`
54716
+ `Starting ADVANCED security assessment - testing ${toolsToTest.length} tools with ${attackPatterns.length} security patterns (~${toolsToTest.length * attackPatterns.length * 3} tests) [concurrency: ${concurrency}]`
54250
54717
  );
54251
- for (const tool of toolsToTest) {
54252
- if (!this.hasInputParameters(tool)) {
54253
- this.log(
54254
- `${tool.name} has no input parameters - adding passing results`
54255
- );
54256
- for (const attackPattern of attackPatterns) {
54257
- const payloads = getPayloadsForAttack(attackPattern.attackName);
54258
- for (const payload of payloads) {
54259
- results.push({
54260
- testName: attackPattern.attackName,
54261
- description: payload.description,
54262
- payload: payload.payload,
54263
- riskLevel: payload.riskLevel,
54264
- toolName: tool.name,
54265
- vulnerable: false,
54266
- evidence: "Tool has no input parameters - cannot be exploited via payload injection"
54267
- });
54268
- }
54269
- }
54270
- continue;
54271
- }
54272
- this.log(`Testing ${tool.name} with all attack patterns`);
54273
- for (const attackPattern of attackPatterns) {
54274
- const payloads = getPayloadsForAttack(attackPattern.attackName);
54275
- for (const payload of payloads) {
54276
- this.testCount++;
54277
- try {
54278
- const result = await this.testPayload(
54279
- tool,
54280
- attackPattern.attackName,
54281
- payload,
54282
- context.callTool
54718
+ const allToolResults = await Promise.all(
54719
+ toolsToTest.map(
54720
+ (tool) => limit2(async () => {
54721
+ const toolResults = [];
54722
+ if (!this.hasInputParameters(tool)) {
54723
+ this.log(
54724
+ `${tool.name} has no input parameters - adding passing results`
54283
54725
  );
54284
- results.push(result);
54285
- if (result.vulnerable) {
54286
- this.log(
54287
- `🚨 VULNERABILITY: ${tool.name} - ${attackPattern.attackName} (${payload.payloadType}: ${payload.description})`
54288
- );
54726
+ for (const attackPattern of attackPatterns) {
54727
+ const payloads = getPayloadsForAttack(attackPattern.attackName);
54728
+ for (const payload of payloads) {
54729
+ toolResults.push({
54730
+ testName: attackPattern.attackName,
54731
+ description: payload.description,
54732
+ payload: payload.payload,
54733
+ riskLevel: payload.riskLevel,
54734
+ toolName: tool.name,
54735
+ vulnerable: false,
54736
+ evidence: "Tool has no input parameters - cannot be exploited via payload injection"
54737
+ });
54738
+ }
54289
54739
  }
54290
- } catch (error) {
54291
- this.logError(
54292
- `Error testing ${tool.name} with ${attackPattern.attackName}`,
54293
- error
54294
- );
54740
+ return toolResults;
54295
54741
  }
54296
- if (this.testCount % 5 === 0) {
54297
- await this.sleep(100);
54742
+ this.log(`Testing ${tool.name} with all attack patterns`);
54743
+ for (const attackPattern of attackPatterns) {
54744
+ const payloads = getPayloadsForAttack(attackPattern.attackName);
54745
+ for (const payload of payloads) {
54746
+ this.testCount++;
54747
+ try {
54748
+ const result = await this.testPayload(
54749
+ tool,
54750
+ attackPattern.attackName,
54751
+ payload,
54752
+ context.callTool
54753
+ );
54754
+ toolResults.push(result);
54755
+ if (result.vulnerable) {
54756
+ this.log(
54757
+ `🚨 VULNERABILITY: ${tool.name} - ${attackPattern.attackName} (${payload.payloadType}: ${payload.description})`
54758
+ );
54759
+ }
54760
+ } catch (error) {
54761
+ this.logError(
54762
+ `Error testing ${tool.name} with ${attackPattern.attackName}`,
54763
+ error
54764
+ );
54765
+ }
54766
+ if (this.testCount % 5 === 0) {
54767
+ await this.sleep(100);
54768
+ }
54769
+ }
54298
54770
  }
54299
- }
54300
- }
54771
+ return toolResults;
54772
+ })
54773
+ )
54774
+ );
54775
+ for (const toolResults of allToolResults) {
54776
+ results.push(...toolResults);
54301
54777
  }
54302
54778
  this.log(
54303
54779
  `ADVANCED security assessment complete: ${results.length} tests executed, ${results.filter((r2) => r2.vulnerable).length} vulnerabilities found`
@@ -60340,13 +60816,13 @@ const App = () => {
60340
60816
  ) });
60341
60817
  if (window.location.pathname === "/oauth/callback") {
60342
60818
  const OAuthCallback = React.lazy(
60343
- () => __vitePreload(() => import("./OAuthCallback-cGhwkoyY.js"), true ? [] : void 0)
60819
+ () => __vitePreload(() => import("./OAuthCallback-C6NJ8fGr.js"), true ? [] : void 0)
60344
60820
  );
60345
60821
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthCallback, { onConnect: onOAuthConnect }) });
60346
60822
  }
60347
60823
  if (window.location.pathname === "/oauth/callback/debug") {
60348
60824
  const OAuthDebugCallback = React.lazy(
60349
- () => __vitePreload(() => import("./OAuthDebugCallback-2rmUqser.js"), true ? [] : void 0)
60825
+ () => __vitePreload(() => import("./OAuthDebugCallback-MIqvflwd.js"), true ? [] : void 0)
60350
60826
  );
60351
60827
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthDebugCallback, { onConnect: onOAuthDebugConnect }) });
60352
60828
  }