@blade-hq/agent-react 2612.0.0-beta.31 → 2612.0.0-beta.33

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.
@@ -2302,6 +2302,14 @@ var RefreshCcw = createLucideIcon("RefreshCcw", [
2302
2302
  ["path", { d: "M16 16h5v5", key: "ccwih5" }]
2303
2303
  ]);
2304
2304
 
2305
+ // ../../node_modules/.pnpm/lucide-react@0.468.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/refresh-cw.js
2306
+ var RefreshCw = createLucideIcon("RefreshCw", [
2307
+ ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
2308
+ ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
2309
+ ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
2310
+ ["path", { d: "M8 16H3v5", key: "1cv678" }]
2311
+ ]);
2312
+
2305
2313
  // ../../node_modules/.pnpm/lucide-react@0.468.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/rocket.js
2306
2314
  var Rocket = createLucideIcon("Rocket", [
2307
2315
  [
@@ -2420,6 +2428,22 @@ var TriangleAlert = createLucideIcon("TriangleAlert", [
2420
2428
  ["path", { d: "M12 17h.01", key: "p32p05" }]
2421
2429
  ]);
2422
2430
 
2431
+ // ../../node_modules/.pnpm/lucide-react@0.468.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/unplug.js
2432
+ var Unplug = createLucideIcon("Unplug", [
2433
+ ["path", { d: "m19 5 3-3", key: "yk6iyv" }],
2434
+ ["path", { d: "m2 22 3-3", key: "19mgm9" }],
2435
+ [
2436
+ "path",
2437
+ { d: "M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z", key: "goz73y" }
2438
+ ],
2439
+ ["path", { d: "M7.5 13.5 10 11", key: "7xgeeb" }],
2440
+ ["path", { d: "M10.5 16.5 13 14", key: "10btkg" }],
2441
+ [
2442
+ "path",
2443
+ { d: "m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z", key: "1snsnr" }
2444
+ ]
2445
+ ]);
2446
+
2423
2447
  // ../../node_modules/.pnpm/lucide-react@0.468.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/wrench.js
2424
2448
  var Wrench = createLucideIcon("Wrench", [
2425
2449
  [
@@ -6100,6 +6124,49 @@ async function getPluginSuggestionItems(client, session, query, pendingPlugins =
6100
6124
  }
6101
6125
  }
6102
6126
 
6127
+ // src/components/BrowserConnectionDialog.tsx
6128
+ import { useEffect as useEffect2, useRef as useRef2 } from "react";
6129
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
6130
+ function BrowserConnectionDialog({ client, name, label = "\u4E1A\u52A1\u8D26\u53F7", onClose }) {
6131
+ const dialog = useRef2(null);
6132
+ const frame = useRef2(null);
6133
+ const url = new URL(client.connectors.browserAuthorizationUrl(name), window.location.href);
6134
+ url.searchParams.set("embedded", "1");
6135
+ const origin = url.origin;
6136
+ useEffect2(() => {
6137
+ const element = dialog.current;
6138
+ element?.showModal();
6139
+ return () => element?.close();
6140
+ }, []);
6141
+ useEffect2(() => {
6142
+ if (!frame.current) return;
6143
+ return client.connectors.bindBrowserAuthorizationFrame(frame.current, name);
6144
+ }, [client, name]);
6145
+ useEffect2(() => {
6146
+ const receive = (event) => {
6147
+ if (event.origin === origin && event.source === frame.current?.contentWindow && event.data?.type === "blade:connector-auth-close") onClose();
6148
+ };
6149
+ window.addEventListener("message", receive);
6150
+ return () => window.removeEventListener("message", receive);
6151
+ }, [origin, onClose]);
6152
+ return /* @__PURE__ */ jsx3("dialog", { ref: dialog, "aria-label": `\u8FDE\u63A5 ${label}`, onCancel: (event) => {
6153
+ event.preventDefault();
6154
+ onClose();
6155
+ }, className: "fixed inset-0 m-auto h-[min(820px,90dvh)] max-h-none w-[min(960px,calc(100%_-_32px))] max-w-none overflow-hidden rounded-2xl border border-[hsl(var(--border))] bg-[hsl(var(--background))] p-0 text-[hsl(var(--foreground))] shadow-xl backdrop:bg-black/45", children: /* @__PURE__ */ jsxs2("div", { className: "flex h-full min-h-0 flex-col", children: [
6156
+ /* @__PURE__ */ jsxs2("header", { className: "flex shrink-0 items-center justify-between gap-3 border-b border-[hsl(var(--border))] px-4 py-3", children: [
6157
+ /* @__PURE__ */ jsxs2("h2", { className: "text-sm font-medium", children: [
6158
+ "\u8FDE\u63A5 ",
6159
+ label
6160
+ ] }),
6161
+ /* @__PURE__ */ jsxs2("button", { type: "button", className: "inline-flex h-8 shrink-0 items-center justify-center gap-1.5 rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--background))] px-3 text-xs font-medium hover:bg-[hsl(var(--accent))]", onClick: onClose, children: [
6162
+ /* @__PURE__ */ jsx3(X, { size: 14, "aria-hidden": "true" }),
6163
+ "\u8FD4\u56DE\u8FDE\u63A5\u5668"
6164
+ ] })
6165
+ ] }),
6166
+ /* @__PURE__ */ jsx3("iframe", { ref: frame, title: `${label}\u767B\u5F55\u9875\u9762`, className: "min-h-0 w-full flex-1 border-0" })
6167
+ ] }) });
6168
+ }
6169
+
6103
6170
  // ../../node_modules/.pnpm/@cfworker+json-schema@4.1.1/node_modules/@cfworker/json-schema/dist/esm/deep-compare-strict.js
6104
6171
  function deepCompareStrict(a, b) {
6105
6172
  const typeofa = typeof a;
@@ -11838,7 +11905,7 @@ function toFieldPathId(fieldPath, globalFormOptions, parentPath, isMultiValue) {
11838
11905
 
11839
11906
  // ../../node_modules/.pnpm/@rjsf+utils@6.10.0_react@19.2.4/node_modules/@rjsf/utils/lib/useAltDateWidgetProps.js
11840
11907
  import { jsx as _jsx3 } from "react/jsx-runtime";
11841
- import { useCallback, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
11908
+ import { useCallback, useEffect as useEffect3, useMemo, useState as useState2 } from "react";
11842
11909
  function readyForChange(state) {
11843
11910
  return Object.values(state).every((value) => value !== -1);
11844
11911
  }
@@ -11852,7 +11919,7 @@ function DateElement(props) {
11852
11919
  function useAltDateWidgetProps(props) {
11853
11920
  const { time: time2 = false, disabled = false, readonly = false, options, onChange, value } = props;
11854
11921
  const [state, setState] = useState2(parseDateString(value, time2));
11855
- useEffect2(() => {
11922
+ useEffect3(() => {
11856
11923
  setState(parseDateString(value, time2));
11857
11924
  }, [time2, value]);
11858
11925
  const handleChange = useCallback((property, newValue) => {
@@ -11886,9 +11953,9 @@ function useAltDateWidgetProps(props) {
11886
11953
  }
11887
11954
 
11888
11955
  // ../../node_modules/.pnpm/@rjsf+utils@6.10.0_react@19.2.4/node_modules/@rjsf/utils/lib/useDeepCompareMemo.js
11889
- import { useRef as useRef2 } from "react";
11956
+ import { useRef as useRef3 } from "react";
11890
11957
  function useDeepCompareMemo(newValue) {
11891
- const valueRef = useRef2(newValue);
11958
+ const valueRef = useRef3(newValue);
11892
11959
  if (!deepEquals_default(newValue, valueRef.current)) {
11893
11960
  valueRef.current = newValue;
11894
11961
  }
@@ -12082,7 +12149,7 @@ var TranslatableString;
12082
12149
 
12083
12150
  // ../../node_modules/.pnpm/@rjsf+core@6.10.0_@rjsf+utils@6.10.0_react@19.2.4__react@19.2.4_vue@3.5.40_typescript@5.9.3_/node_modules/@rjsf/core/lib/components/fields/ArrayField.js
12084
12151
  import { jsx as _jsx4 } from "react/jsx-runtime";
12085
- import { memo, useCallback as useCallback3, useMemo as useMemo3, useRef as useRef3, useState as useState3 } from "react";
12152
+ import { memo, useCallback as useCallback3, useMemo as useMemo3, useRef as useRef4, useState as useState3 } from "react";
12086
12153
  var rowIdCounter = 0;
12087
12154
  function generateRowId() {
12088
12155
  rowIdCounter += 1;
@@ -12435,9 +12502,9 @@ function ArrayField(props) {
12435
12502
  const { schema, uiSchema, errorSchema, fieldPathId, registry, formData, onChange } = props;
12436
12503
  const { globalFormOptions, schemaUtils, translateString } = registry;
12437
12504
  const { keyedFormData, updateKeyedFormData } = useKeyedFormData(formData);
12438
- const keyedFormDataRef = useRef3(keyedFormData);
12505
+ const keyedFormDataRef = useRef4(keyedFormData);
12439
12506
  keyedFormDataRef.current = keyedFormData;
12440
- const errorSchemaRef = useRef3(errorSchema);
12507
+ const errorSchemaRef = useRef4(errorSchema);
12441
12508
  errorSchemaRef.current = errorSchema;
12442
12509
  const childFieldPathId = props.childFieldPathId ?? fieldPathId;
12443
12510
  const handleAddItem = useCallback3((event, index2) => {
@@ -13051,7 +13118,7 @@ function LayoutHeaderField(props) {
13051
13118
 
13052
13119
  // ../../node_modules/.pnpm/@rjsf+core@6.10.0_@rjsf+utils@6.10.0_react@19.2.4__react@19.2.4_vue@3.5.40_typescript@5.9.3_/node_modules/@rjsf/core/lib/components/fields/LayoutMultiSchemaField.js
13053
13120
  import { jsx as _jsx10 } from "react/jsx-runtime";
13054
- import { useState as useState6, useEffect as useEffect3 } from "react";
13121
+ import { useState as useState6, useEffect as useEffect4 } from "react";
13055
13122
  function getSelectedOption(options, selectorField, value) {
13056
13123
  const defaultValue = "!@#!@$@#$!@$#";
13057
13124
  const schemaOptions = options.map(({ schema }) => schema);
@@ -13087,7 +13154,7 @@ function LayoutMultiSchemaField(props) {
13087
13154
  const optionsHash = hashObject(options);
13088
13155
  const uiSchemaHash = uiSchema ? hashObject(uiSchema) : "";
13089
13156
  const formDataHash = formData ? hashObject(formData) : "";
13090
- useEffect3(() => {
13157
+ useEffect4(() => {
13091
13158
  setEnumOptions(computeEnumOptions(schema, options, schemaUtils, uiSchema, formData));
13092
13159
  }, [schemaHash, optionsHash, schemaUtils, uiSchemaHash, formDataHash]);
13093
13160
  const { widget = discriminator ? "radio" : "select", title = "", placeholder = "", optionsSchemaSelector: selectorField = discriminator, hideError: uiSchemaHideError, ...uiOptions } = getUiOptions(uiSchema);
@@ -13126,7 +13193,7 @@ function LayoutMultiSchemaField(props) {
13126
13193
 
13127
13194
  // ../../node_modules/.pnpm/@rjsf+core@6.10.0_@rjsf+utils@6.10.0_react@19.2.4__react@19.2.4_vue@3.5.40_typescript@5.9.3_/node_modules/@rjsf/core/lib/components/fields/MultiSchemaField.js
13128
13195
  import { jsx as _jsx11 } from "react/jsx-runtime";
13129
- import { useCallback as useCallback5, useEffect as useEffect4, useMemo as useMemo5, useRef as useRef4, useState as useState7 } from "react";
13196
+ import { useCallback as useCallback5, useEffect as useEffect5, useMemo as useMemo5, useRef as useRef5, useState as useState7 } from "react";
13130
13197
  function AnyOfField(props) {
13131
13198
  const { name, disabled = false, errorSchema, formData, fieldPathId, onBlur, onChange, onFocus, options, readonly, registry, required = false, schema, uiSchema } = props;
13132
13199
  const { schemaUtils } = registry;
@@ -13140,10 +13207,10 @@ function AnyOfField(props) {
13140
13207
  const discriminator = getDiscriminatorFieldFromSchema(schema);
13141
13208
  return schemaUtils.getClosestMatchingOption(formData, retrievedOptions, 0, discriminator);
13142
13209
  });
13143
- const skipNextOptionRecalculation = useRef4(false);
13144
- const prevFormDataRef = useRef4(formData);
13145
- const prevFieldIdRef = useRef4(fieldPathId.$id);
13146
- useEffect4(() => {
13210
+ const skipNextOptionRecalculation = useRef5(false);
13211
+ const prevFormDataRef = useRef5(formData);
13212
+ const prevFieldIdRef = useRef5(fieldPathId.$id);
13213
+ useEffect5(() => {
13147
13214
  const prevFormData = prevFormDataRef.current;
13148
13215
  const prevFieldId = prevFieldIdRef.current;
13149
13216
  prevFormDataRef.current = formData;
@@ -13241,10 +13308,10 @@ function AnyOfField(props) {
13241
13308
  var MultiSchemaField_default = AnyOfField;
13242
13309
 
13243
13310
  // ../../node_modules/.pnpm/@rjsf+core@6.10.0_@rjsf+utils@6.10.0_react@19.2.4__react@19.2.4_vue@3.5.40_typescript@5.9.3_/node_modules/@rjsf/core/lib/components/fields/NullField.js
13244
- import { useEffect as useEffect5 } from "react";
13311
+ import { useEffect as useEffect6 } from "react";
13245
13312
  function NullField(props) {
13246
13313
  const { formData, onChange, fieldPathId } = props;
13247
- useEffect5(() => {
13314
+ useEffect6(() => {
13248
13315
  if (formData === void 0) {
13249
13316
  onChange(null, fieldPathId.path);
13250
13317
  }
@@ -13295,7 +13362,7 @@ var NumberField_default = NumberField;
13295
13362
 
13296
13363
  // ../../node_modules/.pnpm/@rjsf+core@6.10.0_@rjsf+utils@6.10.0_react@19.2.4__react@19.2.4_vue@3.5.40_typescript@5.9.3_/node_modules/@rjsf/core/lib/components/fields/ObjectField.js
13297
13364
  import { jsx as _jsx13, jsxs as _jsxs } from "react/jsx-runtime";
13298
- import { memo as memo2, useCallback as useCallback7, useMemo as useMemo7, useRef as useRef6, useState as useState9 } from "react";
13365
+ import { memo as memo2, useCallback as useCallback7, useMemo as useMemo7, useRef as useRef7, useState as useState9 } from "react";
13299
13366
 
13300
13367
  // ../../node_modules/.pnpm/markdown-to-jsx@9.10.2_react@19.2.4_vue@3.5.40_typescript@5.9.3_/node_modules/markdown-to-jsx/dist/react.js
13301
13368
  import * as i0 from "react";
@@ -16461,13 +16528,13 @@ function ObjectField(props) {
16461
16528
  const { schema: rawSchema, uiSchema = {}, formData, errorSchema, fieldPathId, name, required = false, disabled, readonly, hideError, onBlur, onFocus, onChange, registry, title } = props;
16462
16529
  const { fields: fields2, schemaUtils, translateString, globalUiOptions } = registry;
16463
16530
  const { OptionalDataControlsField: OptionalDataControlsField2 } = fields2;
16464
- const formDataRef = useRef6(formData);
16531
+ const formDataRef = useRef7(formData);
16465
16532
  formDataRef.current = formData;
16466
16533
  const schema = useMemo7(() => schemaUtils.retrieveSchema(rawSchema, formData, true), [schemaUtils, rawSchema, formData]);
16467
16534
  const uiOptions = useMemo7(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);
16468
16535
  const schemaProperties = useMemo7(() => schema.properties ?? {}, [schema.properties]);
16469
16536
  const childFieldPathId = props.childFieldPathId ?? fieldPathId;
16470
- const lastRenamedProperty = useRef6({ previousKey: "", currentKey: void 0 });
16537
+ const lastRenamedProperty = useRef7({ previousKey: "", currentKey: void 0 });
16471
16538
  const [additionalPropertyOrder, setAdditionalPropertyOrder] = useState9(() => getAdditionalPropertyOrder(schemaProperties));
16472
16539
  const definedPropertyOrder = useMemo7(() => {
16473
16540
  const additionalPropertySet = new Set(getAdditionalPropertyOrder(schemaProperties));
@@ -18618,7 +18685,7 @@ function configDraftOperations(initial, values, retained, removed) {
18618
18685
  }
18619
18686
 
18620
18687
  // src/components/SessionPluginConfigForm.tsx
18621
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
18688
+ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
18622
18689
  var defaults = getDefaultRegistry();
18623
18690
  var validator = {
18624
18691
  isValid(schema, data, rootSchema) {
@@ -18674,8 +18741,8 @@ function presentationSchema(schema) {
18674
18741
  return result;
18675
18742
  }
18676
18743
  function ConfigMultiSchemaField(props) {
18677
- return /* @__PURE__ */ jsxs2("div", { className: "rjsf-field", children: [
18678
- /* @__PURE__ */ jsx3("label", { htmlFor: isValidElement(props.selector) ? props.selector.props.id : void 0, children: "\u914D\u7F6E\u65B9\u5F0F" }),
18744
+ return /* @__PURE__ */ jsxs3("div", { className: "rjsf-field", children: [
18745
+ /* @__PURE__ */ jsx4("label", { htmlFor: isValidElement(props.selector) ? props.selector.props.id : void 0, children: "\u914D\u7F6E\u65B9\u5F0F" }),
18679
18746
  props.selector,
18680
18747
  props.optionSchemaField
18681
18748
  ] });
@@ -18703,12 +18770,12 @@ function ConfigSchemaField(inputProps) {
18703
18770
  const pointer = pointerOf(originalConfigPath(fieldPathId.path, context.removed));
18704
18771
  const originalMarker = [...context.retained].find(([, path2]) => path2 === pointer)?.[0];
18705
18772
  if (schema.const !== void 0 && schema.writeOnly !== true)
18706
- return /* @__PURE__ */ jsx3(Fragment2, { children: context.errors.filter((error) => error.path === pointer).map((error) => /* @__PURE__ */ jsx3("p", { role: "alert", children: error.message }, error.message)) });
18773
+ return /* @__PURE__ */ jsx4(Fragment2, { children: context.errors.filter((error) => error.path === pointer).map((error) => /* @__PURE__ */ jsx4("p", { role: "alert", children: error.message }, error.message)) });
18707
18774
  if (schema.writeOnly === true) {
18708
18775
  const kept = typeof formData === "string" && context.retained.has(formData);
18709
- return /* @__PURE__ */ jsxs2("div", { className: "rjsf-field", children: [
18710
- Array.isArray(schema.type) && schema.type.includes("null") ? /* @__PURE__ */ jsxs2("label", { children: [
18711
- /* @__PURE__ */ jsx3(
18776
+ return /* @__PURE__ */ jsxs3("div", { className: "rjsf-field", children: [
18777
+ Array.isArray(schema.type) && schema.type.includes("null") ? /* @__PURE__ */ jsxs3("label", { children: [
18778
+ /* @__PURE__ */ jsx4(
18712
18779
  "input",
18713
18780
  {
18714
18781
  type: "checkbox",
@@ -18720,8 +18787,8 @@ function ConfigSchemaField(inputProps) {
18720
18787
  schema.title ?? props.name,
18721
18788
  "\uFF1A\u7F6E\u4E3A\u7A7A\u503C"
18722
18789
  ] }) : null,
18723
- /* @__PURE__ */ jsx3("label", { htmlFor: fieldPathId.$id, "data-required": props.required, children: schema.title ?? props.name }),
18724
- /* @__PURE__ */ jsx3(
18790
+ /* @__PURE__ */ jsx4("label", { htmlFor: fieldPathId.$id, "data-required": props.required, children: schema.title ?? props.name }),
18791
+ /* @__PURE__ */ jsx4(
18725
18792
  "input",
18726
18793
  {
18727
18794
  id: fieldPathId.$id,
@@ -18734,8 +18801,8 @@ function ConfigSchemaField(inputProps) {
18734
18801
  onChange: (event) => onChange(event.target.value || originalMarker, fieldPathId.path)
18735
18802
  }
18736
18803
  ),
18737
- kept ? /* @__PURE__ */ jsx3("p", { children: "\u5DF2\u4FDD\u5B58\uFF0C\u7559\u7A7A\u4FDD\u6301\u4E0D\u53D8" }) : null,
18738
- formData !== void 0 ? /* @__PURE__ */ jsx3(
18804
+ kept ? /* @__PURE__ */ jsx4("p", { children: "\u5DF2\u4FDD\u5B58\uFF0C\u7559\u7A7A\u4FDD\u6301\u4E0D\u53D8" }) : null,
18805
+ formData !== void 0 ? /* @__PURE__ */ jsx4(
18739
18806
  "button",
18740
18807
  {
18741
18808
  type: "button",
@@ -18744,17 +18811,17 @@ function ConfigSchemaField(inputProps) {
18744
18811
  children: "\u6E05\u9664\u5DF2\u4FDD\u5B58\u7684\u503C"
18745
18812
  }
18746
18813
  ) : null,
18747
- schema.description ? /* @__PURE__ */ jsx3("p", { children: schema.description }) : null,
18748
- context.errors.filter((error) => error.path === pointer).map((error) => /* @__PURE__ */ jsx3("p", { role: "alert", children: error.message }, error.message))
18814
+ schema.description ? /* @__PURE__ */ jsx4("p", { children: schema.description }) : null,
18815
+ context.errors.filter((error) => error.path === pointer).map((error) => /* @__PURE__ */ jsx4("p", { role: "alert", children: error.message }, error.message))
18749
18816
  ] });
18750
18817
  }
18751
18818
  const types = Array.isArray(schema.type) ? schema.type : [schema.type];
18752
18819
  if (types.includes("null")) {
18753
18820
  const nonNull = types.filter((type) => type !== "null");
18754
18821
  const inner = { ...schema, type: nonNull[0] };
18755
- return /* @__PURE__ */ jsxs2("div", { className: "rjsf-field", children: [
18756
- /* @__PURE__ */ jsxs2("label", { children: [
18757
- /* @__PURE__ */ jsx3(
18822
+ return /* @__PURE__ */ jsxs3("div", { className: "rjsf-field", children: [
18823
+ /* @__PURE__ */ jsxs3("label", { children: [
18824
+ /* @__PURE__ */ jsx4(
18758
18825
  "input",
18759
18826
  {
18760
18827
  type: "checkbox",
@@ -18769,28 +18836,28 @@ function ConfigSchemaField(inputProps) {
18769
18836
  schema.title ?? props.name,
18770
18837
  "\uFF1A\u7F6E\u4E3A\u7A7A\u503C"
18771
18838
  ] }),
18772
- nonNull.length && formData !== null ? /* @__PURE__ */ jsx3(defaults.fields.SchemaField, { ...props, schema: inner }) : null
18839
+ nonNull.length && formData !== null ? /* @__PURE__ */ jsx4(defaults.fields.SchemaField, { ...props, schema: inner }) : null
18773
18840
  ] });
18774
18841
  }
18775
- return /* @__PURE__ */ jsx3(defaults.fields.SchemaField, { ...props });
18842
+ return /* @__PURE__ */ jsx4(defaults.fields.SchemaField, { ...props });
18776
18843
  }
18777
18844
  function ConfigFieldTemplate(props) {
18778
18845
  const pointer = pointerOf(
18779
18846
  originalConfigPath(props.fieldPathId.path, props.registry.formContext.removed)
18780
18847
  );
18781
- return /* @__PURE__ */ jsxs2("div", { className: props.classNames, hidden: props.hidden, children: [
18782
- props.displayLabel ? /* @__PURE__ */ jsx3("label", { htmlFor: props.id, "data-required": props.required, children: props.label }) : null,
18848
+ return /* @__PURE__ */ jsxs3("div", { className: props.classNames, hidden: props.hidden, children: [
18849
+ props.displayLabel ? /* @__PURE__ */ jsx4("label", { htmlFor: props.id, "data-required": props.required, children: props.label }) : null,
18783
18850
  props.displayLabel ? props.description : null,
18784
18851
  props.children,
18785
18852
  props.help,
18786
- props.registry.formContext.errors.filter((error) => error.path === pointer).map((error) => /* @__PURE__ */ jsx3("p", { role: "alert", children: error.message }, error.message))
18853
+ props.registry.formContext.errors.filter((error) => error.path === pointer).map((error) => /* @__PURE__ */ jsx4("p", { role: "alert", children: error.message }, error.message))
18787
18854
  ] });
18788
18855
  }
18789
18856
  function ConfigArrayItem(props) {
18790
18857
  const { buttonsProps: buttons, registry } = props;
18791
- return /* @__PURE__ */ jsxs2("div", { className: "rjsf-array-item", children: [
18858
+ return /* @__PURE__ */ jsxs3("div", { className: "rjsf-array-item", children: [
18792
18859
  props.children,
18793
- buttons.hasRemove ? /* @__PURE__ */ jsx3(
18860
+ buttons.hasRemove ? /* @__PURE__ */ jsx4(
18794
18861
  "button",
18795
18862
  {
18796
18863
  type: "button",
@@ -18805,7 +18872,7 @@ function ConfigArrayItem(props) {
18805
18872
  if (previous !== void 0) registry.formContext.removed.add(pointerOf(path));
18806
18873
  buttons.onRemoveItem(event);
18807
18874
  },
18808
- children: /* @__PURE__ */ jsx3(Trash2, { size: 14 })
18875
+ children: /* @__PURE__ */ jsx4(Trash2, { size: 14 })
18809
18876
  }
18810
18877
  ) : null
18811
18878
  ] });
@@ -18816,7 +18883,9 @@ function SessionPluginConfigForm({
18816
18883
  errors,
18817
18884
  failure,
18818
18885
  onSubmit,
18819
- onCancel
18886
+ onCancel,
18887
+ submitLabel = "\u4FDD\u5B58",
18888
+ submittingLabel = "\u4FDD\u5B58\u4E2D\u2026"
18820
18889
  }) {
18821
18890
  const [initial] = useState10(() => createConfigDraft(config));
18822
18891
  const [values, setValues] = useState10(initial.values);
@@ -18839,12 +18908,12 @@ function SessionPluginConfigForm({
18839
18908
  changeRoot: setValues
18840
18909
  };
18841
18910
  if (!schema || support)
18842
- return /* @__PURE__ */ jsxs2("div", { className: "space-y-3 text-xs", children: [
18843
- /* @__PURE__ */ jsx3("p", { children: support ?? "\u914D\u7F6E\u58F0\u660E\u7684\u7EC4\u5408\u65E0\u6CD5\u5448\u73B0\uFF0C\u8BF7\u8054\u7CFB\u63D2\u4EF6\u63D0\u4F9B\u65B9" }),
18844
- /* @__PURE__ */ jsx3("button", { type: "button", onClick: onCancel, children: "\u5173\u95ED" })
18911
+ return /* @__PURE__ */ jsxs3("div", { className: "space-y-3 text-xs", children: [
18912
+ /* @__PURE__ */ jsx4("p", { children: support ?? "\u914D\u7F6E\u58F0\u660E\u7684\u7EC4\u5408\u65E0\u6CD5\u5448\u73B0\uFF0C\u8BF7\u8054\u7CFB\u63D2\u4EF6\u63D0\u4F9B\u65B9" }),
18913
+ /* @__PURE__ */ jsx4("button", { type: "button", onClick: onCancel, children: "\u5173\u95ED" })
18845
18914
  ] });
18846
- return /* @__PURE__ */ jsxs2("div", { className: "blade-plugin-config text-xs", children: [
18847
- /* @__PURE__ */ jsx3("style", { children: `
18915
+ return /* @__PURE__ */ jsxs3("div", { className: "blade-plugin-config text-xs", children: [
18916
+ /* @__PURE__ */ jsx4("style", { children: `
18848
18917
  .blade-plugin-config .rjsf-field, .blade-plugin-config fieldset { min-width:0; margin:0 0 10px; padding:0; border:0 }
18849
18918
  .blade-plugin-config label, .blade-plugin-config legend { display:block; font-size:12px; font-weight:500; overflow-wrap:anywhere; margin-bottom:4px }
18850
18919
  .blade-plugin-config label[data-required=true]::after { content:' *'; color:hsl(var(--destructive)) }
@@ -18857,8 +18926,8 @@ function SessionPluginConfigForm({
18857
18926
  .blade-plugin-config button:disabled { opacity:.5 }
18858
18927
  .blade-plugin-config .control-label { display:block }
18859
18928
  ` }),
18860
- failure || draftFailure ? /* @__PURE__ */ jsx3("p", { role: "alert", children: failure ?? draftFailure }) : null,
18861
- /* @__PURE__ */ jsx3(
18929
+ failure || draftFailure ? /* @__PURE__ */ jsx4("p", { role: "alert", children: failure ?? draftFailure }) : null,
18930
+ /* @__PURE__ */ jsx4(
18862
18931
  Form,
18863
18932
  {
18864
18933
  schema,
@@ -18872,7 +18941,7 @@ function SessionPluginConfigForm({
18872
18941
  MultiSchemaFieldTemplate: ConfigMultiSchemaField,
18873
18942
  ButtonTemplates: {
18874
18943
  ...defaults.templates.ButtonTemplates,
18875
- AddButton: (props) => /* @__PURE__ */ jsx3(
18944
+ AddButton: (props) => /* @__PURE__ */ jsx4(
18876
18945
  "button",
18877
18946
  {
18878
18947
  type: "button",
@@ -18880,7 +18949,7 @@ function SessionPluginConfigForm({
18880
18949
  "aria-label": "\u6DFB\u52A0\u4E00\u9879",
18881
18950
  disabled: props.disabled,
18882
18951
  onClick: props.onClick,
18883
- children: /* @__PURE__ */ jsx3(Plus, { size: 14 })
18952
+ children: /* @__PURE__ */ jsx4(Plus, { size: 14 })
18884
18953
  }
18885
18954
  )
18886
18955
  }
@@ -18921,9 +18990,9 @@ function SessionPluginConfigForm({
18921
18990
  setDraftFailure(error.message);
18922
18991
  }
18923
18992
  },
18924
- children: /* @__PURE__ */ jsxs2("div", { className: "flex justify-end gap-2", children: [
18925
- /* @__PURE__ */ jsx3("button", { type: "button", onClick: onCancel, children: "\u53D6\u6D88" }),
18926
- /* @__PURE__ */ jsx3("button", { type: "submit", disabled: submitting, children: submitting ? "\u4FDD\u5B58\u4E2D\u2026" : "\u4FDD\u5B58" })
18993
+ children: /* @__PURE__ */ jsxs3("div", { className: "flex justify-end gap-2", children: [
18994
+ /* @__PURE__ */ jsx4("button", { type: "button", onClick: onCancel, children: "\u53D6\u6D88" }),
18995
+ /* @__PURE__ */ jsx4("button", { type: "submit", disabled: submitting, children: submitting ? submittingLabel : submitLabel })
18927
18996
  ] })
18928
18997
  }
18929
18998
  )
@@ -18931,8 +19000,8 @@ function SessionPluginConfigForm({
18931
19000
  }
18932
19001
 
18933
19002
  // src/components/SessionPluginIcon.tsx
18934
- import { useEffect as useEffect6, useState as useState11 } from "react";
18935
- import { jsx as jsx4 } from "react/jsx-runtime";
19003
+ import { useEffect as useEffect7, useState as useState11 } from "react";
19004
+ import { jsx as jsx5 } from "react/jsx-runtime";
18936
19005
  function sessionPluginLabel(plugin) {
18937
19006
  const display = typeof plugin.display_name === "string" ? plugin.display_name.trim() : "";
18938
19007
  return display || plugin.name;
@@ -18959,7 +19028,7 @@ function iconBlob(client, sessionId, name, token) {
18959
19028
  function SessionPluginIcon({ client, sessionId, plugin, size: size4 = 20, shape = "rounded", className }) {
18960
19029
  const [url, setUrl] = useState11(null);
18961
19030
  const token = plugin.icon;
18962
- useEffect6(() => {
19031
+ useEffect7(() => {
18963
19032
  setUrl(null);
18964
19033
  if (!token) return;
18965
19034
  let alive = true;
@@ -18977,14 +19046,14 @@ function SessionPluginIcon({ client, sessionId, plugin, size: size4 = 20, shape
18977
19046
  const frame = `flex shrink-0 items-center justify-center overflow-hidden ${shape === "circle" ? "rounded-full" : "rounded"} ${className ?? ""}`;
18978
19047
  const frameStyle = { width: size4, height: size4 };
18979
19048
  if (!url) {
18980
- return /* @__PURE__ */ jsx4("span", { className: `${frame} bg-[hsl(var(--muted))] text-[hsl(var(--muted-foreground))]`, style: frameStyle, "data-plugin-icon": "placeholder", children: /* @__PURE__ */ jsx4(Puzzle, { "aria-hidden": true, size: Math.round(size4 * 0.7) }) });
19049
+ return /* @__PURE__ */ jsx5("span", { className: `${frame} bg-[hsl(var(--muted))] text-[hsl(var(--muted-foreground))]`, style: frameStyle, "data-plugin-icon": "placeholder", children: /* @__PURE__ */ jsx5(Puzzle, { "aria-hidden": true, size: Math.round(size4 * 0.7) }) });
18981
19050
  }
18982
- return /* @__PURE__ */ jsx4("span", { className: frame, style: frameStyle, "data-plugin-icon": "image", children: /* @__PURE__ */ jsx4("img", { src: url, alt: "", "aria-hidden": true, className: "h-full w-full object-cover", onError: () => setUrl(null) }) });
19051
+ return /* @__PURE__ */ jsx5("span", { className: frame, style: frameStyle, "data-plugin-icon": "image", children: /* @__PURE__ */ jsx5("img", { src: url, alt: "", "aria-hidden": true, className: "h-full w-full object-cover", onError: () => setUrl(null) }) });
18983
19052
  }
18984
19053
 
18985
19054
  // src/components/SessionPluginConfigDialog.tsx
18986
- import { useEffect as useEffect7, useRef as useRef7, useState as useState12 } from "react";
18987
- import { Fragment as Fragment3, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
19055
+ import { useEffect as useEffect8, useRef as useRef8, useState as useState12 } from "react";
19056
+ import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
18988
19057
  async function readFailure(error) {
18989
19058
  const response = error?.response;
18990
19059
  if (!response || typeof response.json !== "function") {
@@ -19011,7 +19080,7 @@ function SessionPluginConfigDialog({
19011
19080
  plugin,
19012
19081
  ...props
19013
19082
  }) {
19014
- return /* @__PURE__ */ jsx5(
19083
+ return /* @__PURE__ */ jsx6(
19015
19084
  ConfigDialogState,
19016
19085
  {
19017
19086
  client,
@@ -19033,7 +19102,7 @@ function ConfigDialogState({
19033
19102
  const [restarting, setRestarting] = useState12(false);
19034
19103
  const [scope, setScope] = useState12("personal");
19035
19104
  const waitingForHost = host?.state === "starting" || host?.state === "updating";
19036
- useEffect7(() => {
19105
+ useEffect8(() => {
19037
19106
  if (!waitingForHost) return;
19038
19107
  const abort = new AbortController();
19039
19108
  let timer;
@@ -19059,10 +19128,10 @@ function ConfigDialogState({
19059
19128
  const [failure, setFailure] = useState12(null);
19060
19129
  const [fieldErrors, setFieldErrors] = useState12([]);
19061
19130
  const [formVersion, setFormVersion] = useState12(0);
19062
- const alive = useRef7(true);
19063
- const generation2 = useRef7(0);
19064
- const dialog = useRef7(null);
19065
- useEffect7(() => {
19131
+ const alive = useRef8(true);
19132
+ const generation2 = useRef8(0);
19133
+ const dialog = useRef8(null);
19134
+ useEffect8(() => {
19066
19135
  const element = dialog.current;
19067
19136
  if (!element || element.open) return;
19068
19137
  if (typeof element.showModal === "function") element.showModal();
@@ -19088,7 +19157,7 @@ function ConfigDialogState({
19088
19157
  if (alive.current && generation2.current === current) setLoading(false);
19089
19158
  }
19090
19159
  };
19091
- useEffect7(() => {
19160
+ useEffect8(() => {
19092
19161
  alive.current = true;
19093
19162
  setConfig(null);
19094
19163
  setFailure(null);
@@ -19132,9 +19201,9 @@ function ConfigDialogState({
19132
19201
  if (alive.current) setSaving(false);
19133
19202
  }
19134
19203
  };
19135
- return /* @__PURE__ */ jsxs3(Fragment3, { children: [
19136
- /* @__PURE__ */ jsx5("style", { children: ".blade-plugin-dialog::backdrop { background: rgb(0 0 0 / 40%); }" }),
19137
- /* @__PURE__ */ jsxs3(
19204
+ return /* @__PURE__ */ jsxs4(Fragment3, { children: [
19205
+ /* @__PURE__ */ jsx6("style", { children: ".blade-plugin-dialog::backdrop { background: rgb(0 0 0 / 40%); }" }),
19206
+ /* @__PURE__ */ jsxs4(
19138
19207
  "dialog",
19139
19208
  {
19140
19209
  ref: dialog,
@@ -19159,9 +19228,9 @@ function ConfigDialogState({
19159
19228
  },
19160
19229
  className: "blade-plugin-dialog max-h-[80vh] overflow-y-auto rounded-lg border border-[hsl(var(--border))] bg-[hsl(var(--popover))] p-4 text-[hsl(var(--popover-foreground))] shadow-lg",
19161
19230
  children: [
19162
- /* @__PURE__ */ jsxs3("div", { className: "mb-3 flex items-center gap-2", children: [
19163
- /* @__PURE__ */ jsx5(SessionPluginIcon, { client, sessionId, plugin }),
19164
- /* @__PURE__ */ jsx5(
19231
+ /* @__PURE__ */ jsxs4("div", { className: "mb-3 flex items-center gap-2", children: [
19232
+ /* @__PURE__ */ jsx6(SessionPluginIcon, { client, sessionId, plugin }),
19233
+ /* @__PURE__ */ jsx6(
19165
19234
  "span",
19166
19235
  {
19167
19236
  className: "min-w-0 flex-1 truncate text-sm font-medium",
@@ -19169,7 +19238,7 @@ function ConfigDialogState({
19169
19238
  children: sessionPluginLabel(plugin)
19170
19239
  }
19171
19240
  ),
19172
- /* @__PURE__ */ jsx5(
19241
+ /* @__PURE__ */ jsx6(
19173
19242
  "button",
19174
19243
  {
19175
19244
  type: "button",
@@ -19180,44 +19249,44 @@ function ConfigDialogState({
19180
19249
  }
19181
19250
  )
19182
19251
  ] }),
19183
- canConfigureGlobal ? /* @__PURE__ */ jsxs3("div", { className: "mb-3 flex gap-2 text-xs", children: [
19184
- /* @__PURE__ */ jsx5("button", { type: "button", disabled: saving, "aria-pressed": scope === "personal", onClick: () => setScope("personal"), children: "\u6211\u7684\u767B\u5F55" }),
19185
- /* @__PURE__ */ jsx5("button", { type: "button", disabled: saving, "aria-pressed": scope === "global", onClick: () => setScope("global"), children: "\u7EC4\u7EC7\u5171\u4EAB\u914D\u7F6E" })
19252
+ canConfigureGlobal ? /* @__PURE__ */ jsxs4("div", { className: "mb-3 flex gap-2 text-xs", children: [
19253
+ /* @__PURE__ */ jsx6("button", { type: "button", disabled: saving, "aria-pressed": scope === "personal", onClick: () => setScope("personal"), children: "\u6211\u7684\u767B\u5F55" }),
19254
+ /* @__PURE__ */ jsx6("button", { type: "button", disabled: saving, "aria-pressed": scope === "global", onClick: () => setScope("global"), children: "\u7EC4\u7EC7\u5171\u4EAB\u914D\u7F6E" })
19186
19255
  ] }) : null,
19187
- host ? /* @__PURE__ */ jsxs3("div", { className: "mb-3 space-y-1 text-xs", children: [
19188
- /* @__PURE__ */ jsxs3("p", { children: [
19256
+ host ? /* @__PURE__ */ jsxs4("div", { className: "mb-3 space-y-1 text-xs", children: [
19257
+ /* @__PURE__ */ jsxs4("p", { children: [
19189
19258
  "\u670D\u52A1\uFF1A",
19190
19259
  host.reason,
19191
19260
  " \xB7 \u5DF2\u6062\u590D ",
19192
19261
  host.restarts,
19193
19262
  " \u6B21"
19194
19263
  ] }),
19195
- canConfigureGlobal ? /* @__PURE__ */ jsxs3(Fragment3, { children: [
19196
- /* @__PURE__ */ jsxs3("p", { className: "break-all text-[hsl(var(--muted-foreground))]", children: [
19264
+ canConfigureGlobal ? /* @__PURE__ */ jsxs4(Fragment3, { children: [
19265
+ /* @__PURE__ */ jsxs4("p", { className: "break-all text-[hsl(var(--muted-foreground))]", children: [
19197
19266
  "\u5305\u6458\u8981\uFF1A",
19198
19267
  host.digest,
19199
19268
  " \xB7 \u914D\u7F6E\uFF1A",
19200
19269
  host.revision
19201
19270
  ] }),
19202
- /* @__PURE__ */ jsx5("button", { type: "button", disabled: restarting || saving, onClick: () => {
19271
+ /* @__PURE__ */ jsx6("button", { type: "button", disabled: restarting || saving, onClick: () => {
19203
19272
  setRestarting(true);
19204
19273
  void client.sessions.restartSessionPluginHost(sessionId, plugin.name).then(() => load()).catch(() => setFailure("\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5")).finally(() => {
19205
19274
  if (alive.current) setRestarting(false);
19206
19275
  });
19207
19276
  }, children: restarting ? "\u6B63\u5728\u91CD\u542F\u2026" : "\u91CD\u542F\u670D\u52A1" }),
19208
- host.recent?.length ? /* @__PURE__ */ jsxs3("details", { children: [
19209
- /* @__PURE__ */ jsx5("summary", { children: "\u6700\u8FD1\u6D3B\u52A8" }),
19210
- host.recent.map((line, index2) => /* @__PURE__ */ jsx5("p", { children: line }, `${index2}-${line}`))
19277
+ host.recent?.length ? /* @__PURE__ */ jsxs4("details", { children: [
19278
+ /* @__PURE__ */ jsx6("summary", { children: "\u6700\u8FD1\u6D3B\u52A8" }),
19279
+ host.recent.map((line, index2) => /* @__PURE__ */ jsx6("p", { children: line }, `${index2}-${line}`))
19211
19280
  ] }) : null
19212
19281
  ] }) : null
19213
19282
  ] }) : null,
19214
- scope === "personal" && config?.auth_status === "expired" ? /* @__PURE__ */ jsx5("p", { className: "mb-2 text-xs", children: "\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u586B\u5199" }) : null,
19215
- scope === "personal" && config?.global_ready === false ? /* @__PURE__ */ jsx5("p", { className: "mb-2 text-xs", children: "\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u586B\u5199\u5171\u4EAB\u914D\u7F6E" }) : null,
19216
- scope === "global" ? /* @__PURE__ */ jsx5("p", { className: "mb-2 text-xs", children: "\u5171\u4EAB\u5BC6\u94A5\u7528\u4E8E\u63D2\u4EF6\u670D\u52A1\u3002\u547D\u4EE4\u7C7B\u63D2\u4EF6\u7684\u6C99\u76D2\u4EE3\u7801\u53EF\u4EE5\u8BFB\u53D6\u5B83\uFF1B\u9700\u4FDD\u5BC6\u65F6\u8BF7\u4F7F\u7528\u6258\u7BA1\u670D\u52A1\u3002" }) : null,
19217
- loading ? /* @__PURE__ */ jsx5("p", { className: "text-xs text-[hsl(var(--muted-foreground))]", children: "\u6B63\u5728\u8BFB\u53D6\u914D\u7F6E\u2026" }) : null,
19218
- loadFailure ? /* @__PURE__ */ jsxs3("div", { className: "space-y-2 text-xs", children: [
19219
- /* @__PURE__ */ jsx5("p", { children: loadFailure }),
19220
- /* @__PURE__ */ jsx5(
19283
+ scope === "personal" && config?.auth_status === "expired" ? /* @__PURE__ */ jsx6("p", { className: "mb-2 text-xs", children: "\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u586B\u5199" }) : null,
19284
+ scope === "personal" && config?.global_ready === false ? /* @__PURE__ */ jsx6("p", { className: "mb-2 text-xs", children: "\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u586B\u5199\u5171\u4EAB\u914D\u7F6E" }) : null,
19285
+ scope === "global" ? /* @__PURE__ */ jsx6("p", { className: "mb-2 text-xs", children: "\u5171\u4EAB\u5BC6\u94A5\u7528\u4E8E\u63D2\u4EF6\u670D\u52A1\u3002\u547D\u4EE4\u7C7B\u63D2\u4EF6\u7684\u6C99\u76D2\u4EE3\u7801\u53EF\u4EE5\u8BFB\u53D6\u5B83\uFF1B\u9700\u4FDD\u5BC6\u65F6\u8BF7\u4F7F\u7528\u6258\u7BA1\u670D\u52A1\u3002" }) : null,
19286
+ loading ? /* @__PURE__ */ jsx6("p", { className: "text-xs text-[hsl(var(--muted-foreground))]", children: "\u6B63\u5728\u8BFB\u53D6\u914D\u7F6E\u2026" }) : null,
19287
+ loadFailure ? /* @__PURE__ */ jsxs4("div", { className: "space-y-2 text-xs", children: [
19288
+ /* @__PURE__ */ jsx6("p", { children: loadFailure }),
19289
+ /* @__PURE__ */ jsx6(
19221
19290
  "button",
19222
19291
  {
19223
19292
  type: "button",
@@ -19227,7 +19296,7 @@ function ConfigDialogState({
19227
19296
  }
19228
19297
  )
19229
19298
  ] }) : null,
19230
- config && !loading ? /* @__PURE__ */ jsx5(
19299
+ config && !loading ? /* @__PURE__ */ jsx6(
19231
19300
  SessionPluginConfigForm,
19232
19301
  {
19233
19302
  config,
@@ -19246,7 +19315,7 @@ function ConfigDialogState({
19246
19315
  }
19247
19316
 
19248
19317
  // src/components/PluginConnectorList.tsx
19249
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
19318
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
19250
19319
  function PluginSwitch({
19251
19320
  label,
19252
19321
  checked,
@@ -19255,7 +19324,7 @@ function PluginSwitch({
19255
19324
  draft = false,
19256
19325
  onToggle
19257
19326
  }) {
19258
- return /* @__PURE__ */ jsx6(
19327
+ return /* @__PURE__ */ jsx7(
19259
19328
  "button",
19260
19329
  {
19261
19330
  type: "button",
@@ -19265,12 +19334,12 @@ function PluginSwitch({
19265
19334
  disabled,
19266
19335
  onClick: () => onToggle(!checked),
19267
19336
  className: `relative inline-flex h-[18px] w-8 shrink-0 cursor-pointer items-center rounded-full border transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${checked ? "border-transparent bg-[hsl(213_94%_55%)]" : "border-[hsl(var(--border))] bg-[hsl(var(--muted))]"}`,
19268
- children: /* @__PURE__ */ jsx6(
19337
+ children: /* @__PURE__ */ jsx7(
19269
19338
  "span",
19270
19339
  {
19271
19340
  "aria-hidden": "true",
19272
19341
  className: `pointer-events-none flex h-3.5 w-3.5 items-center justify-center rounded-full bg-white shadow transition-transform ${checked ? "translate-x-[16px]" : "translate-x-[2px]"}`,
19273
- children: pending ? /* @__PURE__ */ jsx6(LoaderCircle, { size: 9, className: "animate-spin text-[hsl(var(--muted-foreground))]" }) : null
19342
+ children: pending ? /* @__PURE__ */ jsx7(LoaderCircle, { size: 9, className: "animate-spin text-[hsl(var(--muted-foreground))]" }) : null
19274
19343
  }
19275
19344
  )
19276
19345
  }
@@ -19295,17 +19364,17 @@ function PluginConnectorList({
19295
19364
  draft = false
19296
19365
  }) {
19297
19366
  const configuringItem = configuring ? items.find((item) => item.name === configuring.name) ?? null : null;
19298
- return /* @__PURE__ */ jsxs4("div", { className: "py-0.5", children: [
19299
- disabledReason ? /* @__PURE__ */ jsx6("div", { className: "px-3 py-1.5 text-[11px] text-[hsl(var(--muted-foreground))]", children: disabledReason }) : null,
19300
- items.length === 0 ? /* @__PURE__ */ jsx6("div", { className: "px-3 py-1.5 text-[11px] text-[hsl(var(--muted-foreground))]", children: unavailableText ?? emptyText }) : null,
19367
+ return /* @__PURE__ */ jsxs5("div", { className: "py-0.5", children: [
19368
+ disabledReason ? /* @__PURE__ */ jsx7("div", { className: "px-3 py-1.5 text-[11px] text-[hsl(var(--muted-foreground))]", children: disabledReason }) : null,
19369
+ items.length === 0 ? /* @__PURE__ */ jsx7("div", { className: "px-3 py-1.5 text-[11px] text-[hsl(var(--muted-foreground))]", children: unavailableText ?? emptyText }) : null,
19301
19370
  items.map((item) => {
19302
19371
  const label = sessionPluginLabel(item);
19303
19372
  const actionable = !disabledReason && item.installed !== false || item.active;
19304
19373
  const pending = Boolean(inFlight[item.name]);
19305
19374
  const checked = item.active;
19306
- return /* @__PURE__ */ jsxs4("div", { className: "group px-3 py-1", children: [
19307
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
19308
- /* @__PURE__ */ jsx6(
19375
+ return /* @__PURE__ */ jsxs5("div", { className: "group px-3 py-1", children: [
19376
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-2", children: [
19377
+ /* @__PURE__ */ jsx7(
19309
19378
  SessionPluginIcon,
19310
19379
  {
19311
19380
  client,
@@ -19313,9 +19382,9 @@ function PluginConnectorList({
19313
19382
  plugin: item
19314
19383
  }
19315
19384
  ),
19316
- /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-[11px]", title: label, children: label }),
19317
- item.auth_status === "expired" || item.auth_status === "login_required" || item.auth_status === "unavailable" ? /* @__PURE__ */ jsx6("button", { type: "button", disabled: !sessionId || busy, onClick: () => onEditConfig(item), className: "shrink-0 text-[10px] underline", children: item.auth_status === "expired" ? "\u767B\u5F55\u5DF2\u8FC7\u671F" : item.auth_status === "unavailable" ? "\u6682\u65F6\u4E0D\u53EF\u7528" : "\u672A\u767B\u5F55" }) : null,
19318
- !draft && item.config === "configured" ? /* @__PURE__ */ jsx6(
19385
+ /* @__PURE__ */ jsx7("span", { className: "min-w-0 flex-1 truncate text-[11px]", title: label, children: label }),
19386
+ item.auth_status === "expired" || item.auth_status === "login_required" || item.auth_status === "unavailable" ? /* @__PURE__ */ jsx7("button", { type: "button", disabled: !sessionId || busy, onClick: () => onEditConfig(item), className: "shrink-0 text-[10px] underline", children: item.auth_status === "expired" ? "\u767B\u5F55\u5DF2\u8FC7\u671F" : item.auth_status === "unavailable" ? "\u6682\u65F6\u4E0D\u53EF\u7528" : "\u672A\u767B\u5F55" }) : null,
19387
+ !draft && item.config === "configured" ? /* @__PURE__ */ jsx7(
19319
19388
  "button",
19320
19389
  {
19321
19390
  type: "button",
@@ -19326,7 +19395,7 @@ function PluginConnectorList({
19326
19395
  children: "\u66F4\u65B0\u914D\u7F6E"
19327
19396
  }
19328
19397
  ) : null,
19329
- !draft && (item.config === "required" || item.config === "error") ? /* @__PURE__ */ jsx6(
19398
+ !draft && (item.config === "required" || item.config === "error") ? /* @__PURE__ */ jsx7(
19330
19399
  "button",
19331
19400
  {
19332
19401
  type: "button",
@@ -19337,7 +19406,7 @@ function PluginConnectorList({
19337
19406
  children: "\u586B\u5199\u914D\u7F6E"
19338
19407
  }
19339
19408
  ) : null,
19340
- /* @__PURE__ */ jsx6(
19409
+ /* @__PURE__ */ jsx7(
19341
19410
  PluginSwitch,
19342
19411
  {
19343
19412
  label,
@@ -19349,9 +19418,9 @@ function PluginConnectorList({
19349
19418
  }
19350
19419
  )
19351
19420
  ] }),
19352
- !draft && item.active && item.status !== "valid" && item.status !== "required" ? /* @__PURE__ */ jsxs4("div", { className: "mt-0.5 flex items-center gap-2 pl-7 text-[10px] text-[hsl(var(--muted-foreground))]", children: [
19353
- /* @__PURE__ */ jsx6("span", { children: item.reason || "\u63D2\u4EF6\u6682\u4E0D\u53EF\u7528" }),
19354
- /* @__PURE__ */ jsx6(
19421
+ !draft && item.active && item.status !== "valid" && item.status !== "required" ? /* @__PURE__ */ jsxs5("div", { className: "mt-0.5 flex items-center gap-2 pl-7 text-[10px] text-[hsl(var(--muted-foreground))]", children: [
19422
+ /* @__PURE__ */ jsx7("span", { children: item.reason || "\u63D2\u4EF6\u6682\u4E0D\u53EF\u7528" }),
19423
+ /* @__PURE__ */ jsx7(
19355
19424
  "button",
19356
19425
  {
19357
19426
  type: "button",
@@ -19364,8 +19433,8 @@ function PluginConnectorList({
19364
19433
  ] }) : null
19365
19434
  ] }, item.name);
19366
19435
  }),
19367
- mutationError ? /* @__PURE__ */ jsx6("div", { className: "px-3 pt-1 text-[10px] text-[hsl(var(--destructive))]", children: "\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u91CD\u8BD5" }) : null,
19368
- configuring && configuringItem && sessionId ? /* @__PURE__ */ jsx6(
19436
+ mutationError ? /* @__PURE__ */ jsx7("div", { className: "px-3 pt-1 text-[10px] text-[hsl(var(--destructive))]", children: "\u64CD\u4F5C\u672A\u5B8C\u6210\uFF0C\u8BF7\u91CD\u8BD5" }) : null,
19437
+ configuring && configuringItem && sessionId ? /* @__PURE__ */ jsx7(
19369
19438
  SessionPluginConfigDialog,
19370
19439
  {
19371
19440
  client,
@@ -19386,6 +19455,7 @@ function catalogToConnectorItems(catalog) {
19386
19455
  icon: entry.icon,
19387
19456
  iconSource: "account",
19388
19457
  installed: entry.installed,
19458
+ connector: entry.connector,
19389
19459
  auth_status: entry.auth_status,
19390
19460
  active: false,
19391
19461
  status: "not_prepared",
@@ -19416,6 +19486,7 @@ function mergeConnectorItems(sessionPlugins, catalog) {
19416
19486
  icon: entry.icon,
19417
19487
  iconSource: "account",
19418
19488
  installed: entry.installed,
19489
+ connector: entry.connector,
19419
19490
  auth_status: entry.auth_status,
19420
19491
  active: plugin.active,
19421
19492
  status: plugin.status,
@@ -19434,7 +19505,8 @@ function filterConnectorItems(items, query) {
19434
19505
  }
19435
19506
 
19436
19507
  // src/components/use-session-plugin-activation.ts
19437
- import { useCallback as useCallback19, useEffect as useEffect8, useMemo as useMemo9, useRef as useRef8, useState as useState13 } from "react";
19508
+ import { isLocalConnectorName } from "@blade-hq/agent-client/internal";
19509
+ import { useCallback as useCallback19, useEffect as useEffect9, useMemo as useMemo9, useRef as useRef9, useState as useState13 } from "react";
19438
19510
  function useSessionPluginActivation({
19439
19511
  client,
19440
19512
  sessionId,
@@ -19447,15 +19519,15 @@ function useSessionPluginActivation({
19447
19519
  const [mutationError, setMutationError] = useState13(false);
19448
19520
  const [inFlight, setInFlight] = useState13({});
19449
19521
  const [configuring, setConfiguring] = useState13(null);
19450
- const alive = useRef8(true);
19451
- const generation2 = useRef8(0);
19452
- const mutationGenerations = useRef8(/* @__PURE__ */ new Map());
19453
- const desiredActivations = useRef8(/* @__PURE__ */ new Map());
19454
- const pendingMutations = useRef8(/* @__PURE__ */ new Map());
19455
- const submittedActivations = useRef8(/* @__PURE__ */ new Set());
19456
- const serverActive = useRef8(/* @__PURE__ */ new Set());
19457
- const lifetime = useRef8(0);
19458
- const request = useRef8(null);
19522
+ const alive = useRef9(true);
19523
+ const generation2 = useRef9(0);
19524
+ const mutationGenerations = useRef9(/* @__PURE__ */ new Map());
19525
+ const desiredActivations = useRef9(/* @__PURE__ */ new Map());
19526
+ const pendingMutations = useRef9(/* @__PURE__ */ new Map());
19527
+ const submittedActivations = useRef9(/* @__PURE__ */ new Set());
19528
+ const serverActive = useRef9(/* @__PURE__ */ new Set());
19529
+ const lifetime = useRef9(0);
19530
+ const request = useRef9(null);
19459
19531
  const [desiredVersion, setDesiredVersion] = useState13(0);
19460
19532
  const setDesired = useCallback19((name, value) => {
19461
19533
  if (value === null) {
@@ -19486,7 +19558,7 @@ function useSessionPluginActivation({
19486
19558
  return rest;
19487
19559
  });
19488
19560
  }, []);
19489
- useEffect8(() => {
19561
+ useEffect9(() => {
19490
19562
  alive.current = true;
19491
19563
  setPlugins([]);
19492
19564
  setCatalog(null);
@@ -19518,7 +19590,7 @@ function useSessionPluginActivation({
19518
19590
  const result = await client.sessions.listSessionPlugins(sessionId, { signal: controller.signal });
19519
19591
  const withConfig = await Promise.all(
19520
19592
  result.plugins.map(async (item) => {
19521
- if (item.config !== void 0 && item.config !== "unchecked") return item;
19593
+ if (isLocalConnectorName(item.name) || item.config !== void 0 && item.config !== "unchecked") return item;
19522
19594
  try {
19523
19595
  const { config } = await client.sessions.getSessionPluginConfig(sessionId, item.name, {
19524
19596
  signal: controller.signal
@@ -19715,14 +19787,14 @@ import { createInitialSessionState } from "@blade-hq/agent-client/internal";
19715
19787
  import {
19716
19788
  createContext as createContext3,
19717
19789
  useContext as useContext3,
19718
- useEffect as useEffect9,
19790
+ useEffect as useEffect10,
19719
19791
  useLayoutEffect,
19720
19792
  useMemo as useMemo10,
19721
- useRef as useRef9,
19793
+ useRef as useRef10,
19722
19794
  useState as useState14,
19723
19795
  useSyncExternalStore
19724
19796
  } from "react";
19725
- import { jsx as jsx7 } from "react/jsx-runtime";
19797
+ import { jsx as jsx8 } from "react/jsx-runtime";
19726
19798
  var EMPTY_SOURCE = {
19727
19799
  subscribe: () => () => {
19728
19800
  },
@@ -19732,7 +19804,7 @@ var EMPTY_SOURCE = {
19732
19804
  };
19733
19805
  var SessionSourceContext = createContext3(EMPTY_SOURCE);
19734
19806
  function SessionSourceProvider({ source, children }) {
19735
- return /* @__PURE__ */ jsx7(SessionSourceContext.Provider, { value: source, children });
19807
+ return /* @__PURE__ */ jsx8(SessionSourceContext.Provider, { value: source, children });
19736
19808
  }
19737
19809
  function useSessionSource() {
19738
19810
  return useContext3(SessionSourceContext);
@@ -19781,7 +19853,7 @@ function useSingleSessionSource(session, loading) {
19781
19853
  useLayoutEffect(() => {
19782
19854
  source.update(session, loading);
19783
19855
  }, [source, session, loading]);
19784
- useEffect9(() => session ? source.watchPlan(session) : void 0, [source, session]);
19856
+ useEffect10(() => session ? source.watchPlan(session) : void 0, [source, session]);
19785
19857
  return source;
19786
19858
  }
19787
19859
  var EMPTY_STATE = createInitialSessionState("");
@@ -19797,7 +19869,7 @@ function useSessionHandle(sessionId) {
19797
19869
  }
19798
19870
  function useSessionState(sessionId, selector) {
19799
19871
  const session = useSessionHandle(sessionId);
19800
- const selectorRef = useRef9(selector);
19872
+ const selectorRef = useRef10(selector);
19801
19873
  selectorRef.current = selector;
19802
19874
  const store = useMemo10(() => {
19803
19875
  let lastState = null;
@@ -19839,7 +19911,7 @@ function usePlanRevealRevision(sessionId) {
19839
19911
  }
19840
19912
  var CurrentChatSessionContext = createContext3(null);
19841
19913
  function CurrentChatSessionProvider({ sessionId, children }) {
19842
- return /* @__PURE__ */ jsx7(CurrentChatSessionContext.Provider, { value: sessionId, children });
19914
+ return /* @__PURE__ */ jsx8(CurrentChatSessionContext.Provider, { value: sessionId, children });
19843
19915
  }
19844
19916
  function useCurrentChatSessionId() {
19845
19917
  return useContext3(CurrentChatSessionContext);
@@ -19847,11 +19919,11 @@ function useCurrentChatSessionId() {
19847
19919
 
19848
19920
  // src/chat/runtime/environment.tsx
19849
19921
  import { createContext as createContext4, useContext as useContext4, useMemo as useMemo11 } from "react";
19850
- import { jsx as jsx8 } from "react/jsx-runtime";
19922
+ import { jsx as jsx9 } from "react/jsx-runtime";
19851
19923
  var EMPTY_ENVIRONMENT = {};
19852
19924
  var ChatEnvironmentContext = createContext4(EMPTY_ENVIRONMENT);
19853
19925
  function ChatEnvironmentProvider({ value, children }) {
19854
- return /* @__PURE__ */ jsx8(ChatEnvironmentContext.Provider, { value, children });
19926
+ return /* @__PURE__ */ jsx9(ChatEnvironmentContext.Provider, { value, children });
19855
19927
  }
19856
19928
  function useChatEnvironment() {
19857
19929
  return useContext4(ChatEnvironmentContext);
@@ -20046,13 +20118,13 @@ function useComposedRefs(...refs) {
20046
20118
 
20047
20119
  // ../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@19.2.14_react@19.2.4/node_modules/@radix-ui/react-context/dist/index.mjs
20048
20120
  import * as React2 from "react";
20049
- import { jsx as jsx9 } from "react/jsx-runtime";
20121
+ import { jsx as jsx10 } from "react/jsx-runtime";
20050
20122
  function createContext22(rootComponentName, defaultContext) {
20051
20123
  const Context = React2.createContext(defaultContext);
20052
20124
  const Provider2 = (props) => {
20053
20125
  const { children, ...context } = props;
20054
20126
  const value = React2.useMemo(() => context, Object.values(context));
20055
- return /* @__PURE__ */ jsx9(Context.Provider, { value, children });
20127
+ return /* @__PURE__ */ jsx10(Context.Provider, { value, children });
20056
20128
  };
20057
20129
  Provider2.displayName = rootComponentName + "Provider";
20058
20130
  function useContext22(consumerName) {
@@ -20073,7 +20145,7 @@ function createContextScope(scopeName, createContextScopeDeps = []) {
20073
20145
  const { scope, children, ...context } = props;
20074
20146
  const Context = scope?.[scopeName]?.[index2] || BaseContext;
20075
20147
  const value = React2.useMemo(() => context, Object.values(context));
20076
- return /* @__PURE__ */ jsx9(Context.Provider, { value, children });
20148
+ return /* @__PURE__ */ jsx10(Context.Provider, { value, children });
20077
20149
  };
20078
20150
  Provider2.displayName = rootComponentName + "Provider";
20079
20151
  function useContext22(consumerName, scope) {
@@ -20130,7 +20202,7 @@ import * as ReactDOM from "react-dom";
20130
20202
 
20131
20203
  // ../../node_modules/.pnpm/@radix-ui+react-slot@1.2.3_@types+react@19.2.14_react@19.2.4/node_modules/@radix-ui/react-slot/dist/index.mjs
20132
20204
  import * as React3 from "react";
20133
- import { Fragment as Fragment22, jsx as jsx10 } from "react/jsx-runtime";
20205
+ import { Fragment as Fragment22, jsx as jsx11 } from "react/jsx-runtime";
20134
20206
  // @__NO_SIDE_EFFECTS__
20135
20207
  function createSlot(ownerName) {
20136
20208
  const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
@@ -20148,9 +20220,9 @@ function createSlot(ownerName) {
20148
20220
  return child;
20149
20221
  }
20150
20222
  });
20151
- return /* @__PURE__ */ jsx10(SlotClone, { ...slotProps, ref: forwardedRef, children: React3.isValidElement(newElement) ? React3.cloneElement(newElement, void 0, newChildren) : null });
20223
+ return /* @__PURE__ */ jsx11(SlotClone, { ...slotProps, ref: forwardedRef, children: React3.isValidElement(newElement) ? React3.cloneElement(newElement, void 0, newChildren) : null });
20152
20224
  }
20153
- return /* @__PURE__ */ jsx10(SlotClone, { ...slotProps, ref: forwardedRef, children });
20225
+ return /* @__PURE__ */ jsx11(SlotClone, { ...slotProps, ref: forwardedRef, children });
20154
20226
  });
20155
20227
  Slot22.displayName = `${ownerName}.Slot`;
20156
20228
  return Slot22;
@@ -20176,7 +20248,7 @@ var SLOTTABLE_IDENTIFIER = /* @__PURE__ */ Symbol("radix.slottable");
20176
20248
  // @__NO_SIDE_EFFECTS__
20177
20249
  function createSlottable(ownerName) {
20178
20250
  const Slottable2 = ({ children }) => {
20179
- return /* @__PURE__ */ jsx10(Fragment22, { children });
20251
+ return /* @__PURE__ */ jsx11(Fragment22, { children });
20180
20252
  };
20181
20253
  Slottable2.displayName = `${ownerName}.Slottable`;
20182
20254
  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
@@ -20224,7 +20296,7 @@ function getElementRef(element) {
20224
20296
  }
20225
20297
 
20226
20298
  // ../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@19.2.3_@types+react@19.2.14__@types+re_1181ea5061ec9212248424669240e4ec/node_modules/@radix-ui/react-primitive/dist/index.mjs
20227
- import { jsx as jsx11 } from "react/jsx-runtime";
20299
+ import { jsx as jsx12 } from "react/jsx-runtime";
20228
20300
  var NODES = [
20229
20301
  "a",
20230
20302
  "button",
@@ -20252,7 +20324,7 @@ var Primitive = NODES.reduce((primitive, node) => {
20252
20324
  if (typeof window !== "undefined") {
20253
20325
  window[/* @__PURE__ */ Symbol.for("radix-ui")] = true;
20254
20326
  }
20255
- return /* @__PURE__ */ jsx11(Comp, { ...primitiveProps, ref: forwardedRef });
20327
+ return /* @__PURE__ */ jsx12(Comp, { ...primitiveProps, ref: forwardedRef });
20256
20328
  });
20257
20329
  Node2.displayName = `Primitive.${node}`;
20258
20330
  return { ...primitive, [node]: Node2 };
@@ -20287,7 +20359,7 @@ function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.docum
20287
20359
  }
20288
20360
 
20289
20361
  // ../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.11_@types+react-dom@19.2.3_@types+react@19.2.14___3d3960154a4c07d09bb90cb341135fc5/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs
20290
- import { jsx as jsx12 } from "react/jsx-runtime";
20362
+ import { jsx as jsx13 } from "react/jsx-runtime";
20291
20363
  var DISMISSABLE_LAYER_NAME = "DismissableLayer";
20292
20364
  var CONTEXT_UPDATE = "dismissableLayer.update";
20293
20365
  var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside";
@@ -20375,7 +20447,7 @@ var DismissableLayer = React7.forwardRef(
20375
20447
  document.addEventListener(CONTEXT_UPDATE, handleUpdate);
20376
20448
  return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
20377
20449
  }, []);
20378
- return /* @__PURE__ */ jsx12(
20450
+ return /* @__PURE__ */ jsx13(
20379
20451
  Primitive.div,
20380
20452
  {
20381
20453
  ...layerProps,
@@ -20409,7 +20481,7 @@ var DismissableLayerBranch = React7.forwardRef((props, forwardedRef) => {
20409
20481
  };
20410
20482
  }
20411
20483
  }, [context.branches]);
20412
- return /* @__PURE__ */ jsx12(Primitive.div, { ...props, ref: composedRefs });
20484
+ return /* @__PURE__ */ jsx13(Primitive.div, { ...props, ref: composedRefs });
20413
20485
  });
20414
20486
  DismissableLayerBranch.displayName = BRANCH_NAME;
20415
20487
  function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {
@@ -20521,7 +20593,7 @@ function createFocusGuard() {
20521
20593
 
20522
20594
  // ../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+_f62f3af4ca2ba305a7aecf04c8534604/node_modules/@radix-ui/react-focus-scope/dist/index.mjs
20523
20595
  import * as React9 from "react";
20524
- import { jsx as jsx13 } from "react/jsx-runtime";
20596
+ import { jsx as jsx14 } from "react/jsx-runtime";
20525
20597
  var AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount";
20526
20598
  var AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount";
20527
20599
  var EVENT_OPTIONS = { bubbles: false, cancelable: true };
@@ -20640,7 +20712,7 @@ var FocusScope = React9.forwardRef((props, forwardedRef) => {
20640
20712
  },
20641
20713
  [loop, trapped, focusScope.paused]
20642
20714
  );
20643
- return /* @__PURE__ */ jsx13(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });
20715
+ return /* @__PURE__ */ jsx14(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });
20644
20716
  });
20645
20717
  FocusScope.displayName = FOCUS_SCOPE_NAME;
20646
20718
  function focusFirst(candidates, { select = false } = {}) {
@@ -22675,11 +22747,11 @@ var arrow3 = (options, deps) => {
22675
22747
 
22676
22748
  // ../../node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_e05f2c19a58a99fddf374207b5e3778c/node_modules/@radix-ui/react-arrow/dist/index.mjs
22677
22749
  import * as React13 from "react";
22678
- import { jsx as jsx14 } from "react/jsx-runtime";
22750
+ import { jsx as jsx15 } from "react/jsx-runtime";
22679
22751
  var NAME = "Arrow";
22680
22752
  var Arrow = React13.forwardRef((props, forwardedRef) => {
22681
22753
  const { children, width = 10, height = 5, ...arrowProps } = props;
22682
- return /* @__PURE__ */ jsx14(
22754
+ return /* @__PURE__ */ jsx15(
22683
22755
  Primitive.svg,
22684
22756
  {
22685
22757
  ...arrowProps,
@@ -22688,7 +22760,7 @@ var Arrow = React13.forwardRef((props, forwardedRef) => {
22688
22760
  height,
22689
22761
  viewBox: "0 0 30 10",
22690
22762
  preserveAspectRatio: "none",
22691
- children: props.asChild ? children : /* @__PURE__ */ jsx14("polygon", { points: "0,0 30,0 15,10" })
22763
+ children: props.asChild ? children : /* @__PURE__ */ jsx15("polygon", { points: "0,0 30,0 15,10" })
22692
22764
  }
22693
22765
  );
22694
22766
  });
@@ -22733,14 +22805,14 @@ function useSize(element) {
22733
22805
  }
22734
22806
 
22735
22807
  // ../../node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_13e0521d8aea7ebfbfb8bee1fb615c05/node_modules/@radix-ui/react-popper/dist/index.mjs
22736
- import { jsx as jsx15 } from "react/jsx-runtime";
22808
+ import { jsx as jsx16 } from "react/jsx-runtime";
22737
22809
  var POPPER_NAME = "Popper";
22738
22810
  var [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);
22739
22811
  var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);
22740
22812
  var Popper = (props) => {
22741
22813
  const { __scopePopper, children } = props;
22742
22814
  const [anchor, setAnchor] = React15.useState(null);
22743
- return /* @__PURE__ */ jsx15(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });
22815
+ return /* @__PURE__ */ jsx16(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });
22744
22816
  };
22745
22817
  Popper.displayName = POPPER_NAME;
22746
22818
  var ANCHOR_NAME = "PopperAnchor";
@@ -22758,7 +22830,7 @@ var PopperAnchor = React15.forwardRef(
22758
22830
  context.onAnchorChange(anchorRef.current);
22759
22831
  }
22760
22832
  });
22761
- return virtualRef ? null : /* @__PURE__ */ jsx15(Primitive.div, { ...anchorProps, ref: composedRefs });
22833
+ return virtualRef ? null : /* @__PURE__ */ jsx16(Primitive.div, { ...anchorProps, ref: composedRefs });
22762
22834
  }
22763
22835
  );
22764
22836
  PopperAnchor.displayName = ANCHOR_NAME;
@@ -22851,7 +22923,7 @@ var PopperContent = React15.forwardRef(
22851
22923
  useLayoutEffect22(() => {
22852
22924
  if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
22853
22925
  }, [content]);
22854
- return /* @__PURE__ */ jsx15(
22926
+ return /* @__PURE__ */ jsx16(
22855
22927
  "div",
22856
22928
  {
22857
22929
  ref: refs.setFloating,
@@ -22875,7 +22947,7 @@ var PopperContent = React15.forwardRef(
22875
22947
  }
22876
22948
  },
22877
22949
  dir: props.dir,
22878
- children: /* @__PURE__ */ jsx15(
22950
+ children: /* @__PURE__ */ jsx16(
22879
22951
  PopperContentProvider,
22880
22952
  {
22881
22953
  scope: __scopePopper,
@@ -22884,7 +22956,7 @@ var PopperContent = React15.forwardRef(
22884
22956
  arrowX,
22885
22957
  arrowY,
22886
22958
  shouldHideArrow: cannotCenterArrow,
22887
- children: /* @__PURE__ */ jsx15(
22959
+ children: /* @__PURE__ */ jsx16(
22888
22960
  Primitive.div,
22889
22961
  {
22890
22962
  "data-side": placedSide,
@@ -22921,7 +22993,7 @@ var PopperArrow = React15.forwardRef(function PopperArrow2(props, forwardedRef)
22921
22993
  // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)
22922
22994
  // doesn't report size as we'd expect on SVG elements.
22923
22995
  // it reports their bounding box which is effectively the largest path inside the SVG.
22924
- /* @__PURE__ */ jsx15(
22996
+ /* @__PURE__ */ jsx16(
22925
22997
  "span",
22926
22998
  {
22927
22999
  ref: contentContext.onArrowChange,
@@ -22944,7 +23016,7 @@ var PopperArrow = React15.forwardRef(function PopperArrow2(props, forwardedRef)
22944
23016
  }[contentContext.placedSide],
22945
23017
  visibility: contentContext.shouldHideArrow ? "hidden" : void 0
22946
23018
  },
22947
- children: /* @__PURE__ */ jsx15(
23019
+ children: /* @__PURE__ */ jsx16(
22948
23020
  Root,
22949
23021
  {
22950
23022
  ...arrowProps,
@@ -23007,14 +23079,14 @@ var Arrow2 = PopperArrow;
23007
23079
  // ../../node_modules/.pnpm/@radix-ui+react-portal@1.1.9_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_7668895bec2444446faa4e0f4eb5244b/node_modules/@radix-ui/react-portal/dist/index.mjs
23008
23080
  import * as React16 from "react";
23009
23081
  import ReactDOM3 from "react-dom";
23010
- import { jsx as jsx16 } from "react/jsx-runtime";
23082
+ import { jsx as jsx17 } from "react/jsx-runtime";
23011
23083
  var PORTAL_NAME = "Portal";
23012
23084
  var Portal = React16.forwardRef((props, forwardedRef) => {
23013
23085
  const { container: containerProp, ...portalProps } = props;
23014
23086
  const [mounted, setMounted] = React16.useState(false);
23015
23087
  useLayoutEffect22(() => setMounted(true), []);
23016
23088
  const container = containerProp || mounted && globalThis?.document?.body;
23017
- return container ? ReactDOM3.createPortal(/* @__PURE__ */ jsx16(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;
23089
+ return container ? ReactDOM3.createPortal(/* @__PURE__ */ jsx17(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;
23018
23090
  });
23019
23091
  Portal.displayName = PORTAL_NAME;
23020
23092
 
@@ -24054,7 +24126,7 @@ ReactRemoveScroll.classNames = RemoveScroll.classNames;
24054
24126
  var Combination_default = ReactRemoveScroll;
24055
24127
 
24056
24128
  // ../../node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_8b5332f8e883134e9d9ab2856fc4395d/node_modules/@radix-ui/react-popover/dist/index.mjs
24057
- import { jsx as jsx17 } from "react/jsx-runtime";
24129
+ import { jsx as jsx18 } from "react/jsx-runtime";
24058
24130
  var POPOVER_NAME = "Popover";
24059
24131
  var [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [
24060
24132
  createPopperScope
@@ -24079,7 +24151,7 @@ var Popover = (props) => {
24079
24151
  onChange: onOpenChange,
24080
24152
  caller: POPOVER_NAME
24081
24153
  });
24082
- return /* @__PURE__ */ jsx17(Root2, { ...popperScope, children: /* @__PURE__ */ jsx17(
24154
+ return /* @__PURE__ */ jsx18(Root2, { ...popperScope, children: /* @__PURE__ */ jsx18(
24083
24155
  PopoverProvider,
24084
24156
  {
24085
24157
  scope: __scopePopover,
@@ -24108,7 +24180,7 @@ var PopoverAnchor = React28.forwardRef(
24108
24180
  onCustomAnchorAdd();
24109
24181
  return () => onCustomAnchorRemove();
24110
24182
  }, [onCustomAnchorAdd, onCustomAnchorRemove]);
24111
- return /* @__PURE__ */ jsx17(Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });
24183
+ return /* @__PURE__ */ jsx18(Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });
24112
24184
  }
24113
24185
  );
24114
24186
  PopoverAnchor.displayName = ANCHOR_NAME2;
@@ -24119,7 +24191,7 @@ var PopoverTrigger = React28.forwardRef(
24119
24191
  const context = usePopoverContext(TRIGGER_NAME, __scopePopover);
24120
24192
  const popperScope = usePopperScope(__scopePopover);
24121
24193
  const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
24122
- const trigger = /* @__PURE__ */ jsx17(
24194
+ const trigger = /* @__PURE__ */ jsx18(
24123
24195
  Primitive.button,
24124
24196
  {
24125
24197
  type: "button",
@@ -24132,7 +24204,7 @@ var PopoverTrigger = React28.forwardRef(
24132
24204
  onClick: composeEventHandlers(props.onClick, context.onOpenToggle)
24133
24205
  }
24134
24206
  );
24135
- return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx17(Anchor, { asChild: true, ...popperScope, children: trigger });
24207
+ return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx18(Anchor, { asChild: true, ...popperScope, children: trigger });
24136
24208
  }
24137
24209
  );
24138
24210
  PopoverTrigger.displayName = TRIGGER_NAME;
@@ -24143,7 +24215,7 @@ var [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME2, {
24143
24215
  var PopoverPortal = (props) => {
24144
24216
  const { __scopePopover, forceMount, children, container } = props;
24145
24217
  const context = usePopoverContext(PORTAL_NAME2, __scopePopover);
24146
- return /* @__PURE__ */ jsx17(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx17(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx17(Portal, { asChild: true, container, children }) }) });
24218
+ return /* @__PURE__ */ jsx18(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx18(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx18(Portal, { asChild: true, container, children }) }) });
24147
24219
  };
24148
24220
  PopoverPortal.displayName = PORTAL_NAME2;
24149
24221
  var CONTENT_NAME2 = "PopoverContent";
@@ -24152,7 +24224,7 @@ var PopoverContent = React28.forwardRef(
24152
24224
  const portalContext = usePortalContext(CONTENT_NAME2, props.__scopePopover);
24153
24225
  const { forceMount = portalContext.forceMount, ...contentProps } = props;
24154
24226
  const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
24155
- return /* @__PURE__ */ jsx17(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx17(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx17(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });
24227
+ return /* @__PURE__ */ jsx18(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx18(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx18(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });
24156
24228
  }
24157
24229
  );
24158
24230
  PopoverContent.displayName = CONTENT_NAME2;
@@ -24167,7 +24239,7 @@ var PopoverContentModal = React28.forwardRef(
24167
24239
  const content = contentRef.current;
24168
24240
  if (content) return hideOthers(content);
24169
24241
  }, []);
24170
- return /* @__PURE__ */ jsx17(Combination_default, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx17(
24242
+ return /* @__PURE__ */ jsx18(Combination_default, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx18(
24171
24243
  PopoverContentImpl,
24172
24244
  {
24173
24245
  ...props,
@@ -24202,7 +24274,7 @@ var PopoverContentNonModal = React28.forwardRef(
24202
24274
  const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
24203
24275
  const hasInteractedOutsideRef = React28.useRef(false);
24204
24276
  const hasPointerDownOutsideRef = React28.useRef(false);
24205
- return /* @__PURE__ */ jsx17(
24277
+ return /* @__PURE__ */ jsx18(
24206
24278
  PopoverContentImpl,
24207
24279
  {
24208
24280
  ...props,
@@ -24254,7 +24326,7 @@ var PopoverContentImpl = React28.forwardRef(
24254
24326
  const context = usePopoverContext(CONTENT_NAME2, __scopePopover);
24255
24327
  const popperScope = usePopperScope(__scopePopover);
24256
24328
  useFocusGuards();
24257
- return /* @__PURE__ */ jsx17(
24329
+ return /* @__PURE__ */ jsx18(
24258
24330
  FocusScope,
24259
24331
  {
24260
24332
  asChild: true,
@@ -24262,7 +24334,7 @@ var PopoverContentImpl = React28.forwardRef(
24262
24334
  trapped: trapFocus,
24263
24335
  onMountAutoFocus: onOpenAutoFocus,
24264
24336
  onUnmountAutoFocus: onCloseAutoFocus,
24265
- children: /* @__PURE__ */ jsx17(
24337
+ children: /* @__PURE__ */ jsx18(
24266
24338
  DismissableLayer,
24267
24339
  {
24268
24340
  asChild: true,
@@ -24272,7 +24344,7 @@ var PopoverContentImpl = React28.forwardRef(
24272
24344
  onPointerDownOutside,
24273
24345
  onFocusOutside,
24274
24346
  onDismiss: () => context.onOpenChange(false),
24275
- children: /* @__PURE__ */ jsx17(
24347
+ children: /* @__PURE__ */ jsx18(
24276
24348
  Content,
24277
24349
  {
24278
24350
  "data-state": getState(context.open),
@@ -24305,7 +24377,7 @@ var PopoverClose = React28.forwardRef(
24305
24377
  (props, forwardedRef) => {
24306
24378
  const { __scopePopover, ...closeProps } = props;
24307
24379
  const context = usePopoverContext(CLOSE_NAME, __scopePopover);
24308
- return /* @__PURE__ */ jsx17(
24380
+ return /* @__PURE__ */ jsx18(
24309
24381
  Primitive.button,
24310
24382
  {
24311
24383
  type: "button",
@@ -24322,7 +24394,7 @@ var PopoverArrow = React28.forwardRef(
24322
24394
  (props, forwardedRef) => {
24323
24395
  const { __scopePopover, ...arrowProps } = props;
24324
24396
  const popperScope = usePopperScope(__scopePopover);
24325
- return /* @__PURE__ */ jsx17(Arrow2, { ...popperScope, ...arrowProps, ref: forwardedRef });
24397
+ return /* @__PURE__ */ jsx18(Arrow2, { ...popperScope, ...arrowProps, ref: forwardedRef });
24326
24398
  }
24327
24399
  );
24328
24400
  PopoverArrow.displayName = ARROW_NAME2;
@@ -24358,7 +24430,7 @@ import * as React30 from "react";
24358
24430
 
24359
24431
  // ../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.2.3_@types+react@19.2.14__@ty_fa89646d7248b32d1762bf88948f6339/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs
24360
24432
  import * as React29 from "react";
24361
- import { jsx as jsx18 } from "react/jsx-runtime";
24433
+ import { jsx as jsx19 } from "react/jsx-runtime";
24362
24434
  var VISUALLY_HIDDEN_STYLES = Object.freeze({
24363
24435
  // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
24364
24436
  position: "absolute",
@@ -24375,7 +24447,7 @@ var VISUALLY_HIDDEN_STYLES = Object.freeze({
24375
24447
  var NAME2 = "VisuallyHidden";
24376
24448
  var VisuallyHidden = React29.forwardRef(
24377
24449
  (props, forwardedRef) => {
24378
- return /* @__PURE__ */ jsx18(
24450
+ return /* @__PURE__ */ jsx19(
24379
24451
  Primitive.span,
24380
24452
  {
24381
24453
  ...props,
@@ -24389,7 +24461,7 @@ VisuallyHidden.displayName = NAME2;
24389
24461
  var Root3 = VisuallyHidden;
24390
24462
 
24391
24463
  // ../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+reac_9074d9fb06315b089b2bee17c4c65951/node_modules/@radix-ui/react-tooltip/dist/index.mjs
24392
- import { jsx as jsx19, jsxs as jsxs5 } from "react/jsx-runtime";
24464
+ import { jsx as jsx20, jsxs as jsxs6 } from "react/jsx-runtime";
24393
24465
  var [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [
24394
24466
  createPopperScope
24395
24467
  ]);
@@ -24413,7 +24485,7 @@ var TooltipProvider = (props) => {
24413
24485
  const skipDelayTimer = skipDelayTimerRef.current;
24414
24486
  return () => window.clearTimeout(skipDelayTimer);
24415
24487
  }, []);
24416
- return /* @__PURE__ */ jsx19(
24488
+ return /* @__PURE__ */ jsx20(
24417
24489
  TooltipProviderContextProvider,
24418
24490
  {
24419
24491
  scope: __scopeTooltip,
@@ -24504,7 +24576,7 @@ var Tooltip = (props) => {
24504
24576
  }
24505
24577
  };
24506
24578
  }, []);
24507
- return /* @__PURE__ */ jsx19(Root2, { ...popperScope, children: /* @__PURE__ */ jsx19(
24579
+ return /* @__PURE__ */ jsx20(Root2, { ...popperScope, children: /* @__PURE__ */ jsx20(
24508
24580
  TooltipContextProvider,
24509
24581
  {
24510
24582
  scope: __scopeTooltip,
@@ -24548,7 +24620,7 @@ var TooltipTrigger = React30.forwardRef(
24548
24620
  React30.useEffect(() => {
24549
24621
  return () => document.removeEventListener("pointerup", handlePointerUp);
24550
24622
  }, [handlePointerUp]);
24551
- return /* @__PURE__ */ jsx19(Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx19(
24623
+ return /* @__PURE__ */ jsx20(Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx20(
24552
24624
  Primitive.button,
24553
24625
  {
24554
24626
  "aria-describedby": context.open ? context.contentId : void 0,
@@ -24590,7 +24662,7 @@ var [PortalProvider2, usePortalContext2] = createTooltipContext(PORTAL_NAME3, {
24590
24662
  var TooltipPortal = (props) => {
24591
24663
  const { __scopeTooltip, forceMount, children, container } = props;
24592
24664
  const context = useTooltipContext(PORTAL_NAME3, __scopeTooltip);
24593
- return /* @__PURE__ */ jsx19(PortalProvider2, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx19(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx19(Portal, { asChild: true, container, children }) }) });
24665
+ return /* @__PURE__ */ jsx20(PortalProvider2, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx20(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx20(Portal, { asChild: true, container, children }) }) });
24594
24666
  };
24595
24667
  TooltipPortal.displayName = PORTAL_NAME3;
24596
24668
  var CONTENT_NAME3 = "TooltipContent";
@@ -24599,7 +24671,7 @@ var TooltipContent = React30.forwardRef(
24599
24671
  const portalContext = usePortalContext2(CONTENT_NAME3, props.__scopeTooltip);
24600
24672
  const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props;
24601
24673
  const context = useTooltipContext(CONTENT_NAME3, props.__scopeTooltip);
24602
- return /* @__PURE__ */ jsx19(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx19(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx19(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });
24674
+ return /* @__PURE__ */ jsx20(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx20(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx20(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });
24603
24675
  }
24604
24676
  );
24605
24677
  var TooltipContentHoverable = React30.forwardRef((props, forwardedRef) => {
@@ -24661,7 +24733,7 @@ var TooltipContentHoverable = React30.forwardRef((props, forwardedRef) => {
24661
24733
  return () => document.removeEventListener("pointermove", handleTrackPointerGrace);
24662
24734
  }
24663
24735
  }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);
24664
- return /* @__PURE__ */ jsx19(TooltipContentImpl, { ...props, ref: composedRefs });
24736
+ return /* @__PURE__ */ jsx20(TooltipContentImpl, { ...props, ref: composedRefs });
24665
24737
  });
24666
24738
  var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });
24667
24739
  var Slottable = createSlottable("TooltipContent");
@@ -24692,7 +24764,7 @@ var TooltipContentImpl = React30.forwardRef(
24692
24764
  return () => window.removeEventListener("scroll", handleScroll2, { capture: true });
24693
24765
  }
24694
24766
  }, [context.trigger, onClose]);
24695
- return /* @__PURE__ */ jsx19(
24767
+ return /* @__PURE__ */ jsx20(
24696
24768
  DismissableLayer,
24697
24769
  {
24698
24770
  asChild: true,
@@ -24701,7 +24773,7 @@ var TooltipContentImpl = React30.forwardRef(
24701
24773
  onPointerDownOutside,
24702
24774
  onFocusOutside: (event) => event.preventDefault(),
24703
24775
  onDismiss: onClose,
24704
- children: /* @__PURE__ */ jsxs5(
24776
+ children: /* @__PURE__ */ jsxs6(
24705
24777
  Content,
24706
24778
  {
24707
24779
  "data-state": context.stateAttribute,
@@ -24720,8 +24792,8 @@ var TooltipContentImpl = React30.forwardRef(
24720
24792
  }
24721
24793
  },
24722
24794
  children: [
24723
- /* @__PURE__ */ jsx19(Slottable, { children }),
24724
- /* @__PURE__ */ jsx19(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx19(Root3, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) })
24795
+ /* @__PURE__ */ jsx20(Slottable, { children }),
24796
+ /* @__PURE__ */ jsx20(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx20(Root3, { id: context.contentId, role: "tooltip", children: ariaLabel || children }) })
24725
24797
  ]
24726
24798
  }
24727
24799
  )
@@ -24739,7 +24811,7 @@ var TooltipArrow = React30.forwardRef(
24739
24811
  ARROW_NAME3,
24740
24812
  __scopeTooltip
24741
24813
  );
24742
- return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx19(Arrow2, { ...popperScope, ...arrowProps, ref: forwardedRef });
24814
+ return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx20(Arrow2, { ...popperScope, ...arrowProps, ref: forwardedRef });
24743
24815
  }
24744
24816
  );
24745
24817
  TooltipArrow.displayName = ARROW_NAME3;
@@ -24877,7 +24949,7 @@ __export(dist_exports6, {
24877
24949
  createCollapsibleScope: () => createCollapsibleScope
24878
24950
  });
24879
24951
  import * as React31 from "react";
24880
- import { jsx as jsx20 } from "react/jsx-runtime";
24952
+ import { jsx as jsx21 } from "react/jsx-runtime";
24881
24953
  var COLLAPSIBLE_NAME = "Collapsible";
24882
24954
  var [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);
24883
24955
  var [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);
@@ -24897,7 +24969,7 @@ var Collapsible = React31.forwardRef(
24897
24969
  onChange: onOpenChange,
24898
24970
  caller: COLLAPSIBLE_NAME
24899
24971
  });
24900
- return /* @__PURE__ */ jsx20(
24972
+ return /* @__PURE__ */ jsx21(
24901
24973
  CollapsibleProvider,
24902
24974
  {
24903
24975
  scope: __scopeCollapsible,
@@ -24905,7 +24977,7 @@ var Collapsible = React31.forwardRef(
24905
24977
  contentId: useId(),
24906
24978
  open,
24907
24979
  onOpenToggle: React31.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
24908
- children: /* @__PURE__ */ jsx20(
24980
+ children: /* @__PURE__ */ jsx21(
24909
24981
  Primitive.div,
24910
24982
  {
24911
24983
  "data-state": getState2(open),
@@ -24924,7 +24996,7 @@ var CollapsibleTrigger = React31.forwardRef(
24924
24996
  (props, forwardedRef) => {
24925
24997
  const { __scopeCollapsible, ...triggerProps } = props;
24926
24998
  const context = useCollapsibleContext(TRIGGER_NAME3, __scopeCollapsible);
24927
- return /* @__PURE__ */ jsx20(
24999
+ return /* @__PURE__ */ jsx21(
24928
25000
  Primitive.button,
24929
25001
  {
24930
25002
  type: "button",
@@ -24946,7 +25018,7 @@ var CollapsibleContent = React31.forwardRef(
24946
25018
  (props, forwardedRef) => {
24947
25019
  const { forceMount, ...contentProps } = props;
24948
25020
  const context = useCollapsibleContext(CONTENT_NAME4, props.__scopeCollapsible);
24949
- return /* @__PURE__ */ jsx20(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx20(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });
25021
+ return /* @__PURE__ */ jsx21(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx21(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });
24950
25022
  }
24951
25023
  );
24952
25024
  CollapsibleContent.displayName = CONTENT_NAME4;
@@ -24986,7 +25058,7 @@ var CollapsibleContentImpl = React31.forwardRef((props, forwardedRef) => {
24986
25058
  setIsPresent(present);
24987
25059
  }
24988
25060
  }, [context.open, present]);
24989
- return /* @__PURE__ */ jsx20(
25061
+ return /* @__PURE__ */ jsx21(
24990
25062
  Primitive.div,
24991
25063
  {
24992
25064
  "data-state": getState2(context.open),
@@ -25034,7 +25106,7 @@ __export(dist_exports7, {
25034
25106
  createDialogScope: () => createDialogScope
25035
25107
  });
25036
25108
  import * as React32 from "react";
25037
- import { Fragment as Fragment7, jsx as jsx21, jsxs as jsxs6 } from "react/jsx-runtime";
25109
+ import { Fragment as Fragment7, jsx as jsx22, jsxs as jsxs7 } from "react/jsx-runtime";
25038
25110
  var DIALOG_NAME = "Dialog";
25039
25111
  var [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);
25040
25112
  var [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);
@@ -25055,7 +25127,7 @@ var Dialog = (props) => {
25055
25127
  onChange: onOpenChange,
25056
25128
  caller: DIALOG_NAME
25057
25129
  });
25058
- return /* @__PURE__ */ jsx21(
25130
+ return /* @__PURE__ */ jsx22(
25059
25131
  DialogProvider,
25060
25132
  {
25061
25133
  scope: __scopeDialog,
@@ -25079,7 +25151,7 @@ var DialogTrigger = React32.forwardRef(
25079
25151
  const { __scopeDialog, ...triggerProps } = props;
25080
25152
  const context = useDialogContext(TRIGGER_NAME4, __scopeDialog);
25081
25153
  const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
25082
- return /* @__PURE__ */ jsx21(
25154
+ return /* @__PURE__ */ jsx22(
25083
25155
  Primitive.button,
25084
25156
  {
25085
25157
  type: "button",
@@ -25102,7 +25174,7 @@ var [PortalProvider3, usePortalContext3] = createDialogContext(PORTAL_NAME4, {
25102
25174
  var DialogPortal = (props) => {
25103
25175
  const { __scopeDialog, forceMount, children, container } = props;
25104
25176
  const context = useDialogContext(PORTAL_NAME4, __scopeDialog);
25105
- return /* @__PURE__ */ jsx21(PortalProvider3, { scope: __scopeDialog, forceMount, children: React32.Children.map(children, (child) => /* @__PURE__ */ jsx21(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx21(Portal, { asChild: true, container, children: child }) })) });
25177
+ return /* @__PURE__ */ jsx22(PortalProvider3, { scope: __scopeDialog, forceMount, children: React32.Children.map(children, (child) => /* @__PURE__ */ jsx22(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx22(Portal, { asChild: true, container, children: child }) })) });
25106
25178
  };
25107
25179
  DialogPortal.displayName = PORTAL_NAME4;
25108
25180
  var OVERLAY_NAME = "DialogOverlay";
@@ -25111,7 +25183,7 @@ var DialogOverlay = React32.forwardRef(
25111
25183
  const portalContext = usePortalContext3(OVERLAY_NAME, props.__scopeDialog);
25112
25184
  const { forceMount = portalContext.forceMount, ...overlayProps } = props;
25113
25185
  const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);
25114
- return context.modal ? /* @__PURE__ */ jsx21(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx21(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;
25186
+ return context.modal ? /* @__PURE__ */ jsx22(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx22(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;
25115
25187
  }
25116
25188
  );
25117
25189
  DialogOverlay.displayName = OVERLAY_NAME;
@@ -25123,7 +25195,7 @@ var DialogOverlayImpl = React32.forwardRef(
25123
25195
  return (
25124
25196
  // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`
25125
25197
  // ie. when `Overlay` and `Content` are siblings
25126
- /* @__PURE__ */ jsx21(Combination_default, { as: Slot2, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx21(
25198
+ /* @__PURE__ */ jsx22(Combination_default, { as: Slot2, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx22(
25127
25199
  Primitive.div,
25128
25200
  {
25129
25201
  "data-state": getState3(context.open),
@@ -25141,7 +25213,7 @@ var DialogContent = React32.forwardRef(
25141
25213
  const portalContext = usePortalContext3(CONTENT_NAME5, props.__scopeDialog);
25142
25214
  const { forceMount = portalContext.forceMount, ...contentProps } = props;
25143
25215
  const context = useDialogContext(CONTENT_NAME5, props.__scopeDialog);
25144
- return /* @__PURE__ */ jsx21(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx21(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx21(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });
25216
+ return /* @__PURE__ */ jsx22(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx22(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx22(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });
25145
25217
  }
25146
25218
  );
25147
25219
  DialogContent.displayName = CONTENT_NAME5;
@@ -25154,7 +25226,7 @@ var DialogContentModal = React32.forwardRef(
25154
25226
  const content = contentRef.current;
25155
25227
  if (content) return hideOthers(content);
25156
25228
  }, []);
25157
- return /* @__PURE__ */ jsx21(
25229
+ return /* @__PURE__ */ jsx22(
25158
25230
  DialogContentImpl,
25159
25231
  {
25160
25232
  ...props,
@@ -25184,7 +25256,7 @@ var DialogContentNonModal = React32.forwardRef(
25184
25256
  const context = useDialogContext(CONTENT_NAME5, props.__scopeDialog);
25185
25257
  const hasInteractedOutsideRef = React32.useRef(false);
25186
25258
  const hasPointerDownOutsideRef = React32.useRef(false);
25187
- return /* @__PURE__ */ jsx21(
25259
+ return /* @__PURE__ */ jsx22(
25188
25260
  DialogContentImpl,
25189
25261
  {
25190
25262
  ...props,
@@ -25226,8 +25298,8 @@ var DialogContentImpl = React32.forwardRef(
25226
25298
  const contentRef = React32.useRef(null);
25227
25299
  const composedRefs = useComposedRefs(forwardedRef, contentRef);
25228
25300
  useFocusGuards();
25229
- return /* @__PURE__ */ jsxs6(Fragment7, { children: [
25230
- /* @__PURE__ */ jsx21(
25301
+ return /* @__PURE__ */ jsxs7(Fragment7, { children: [
25302
+ /* @__PURE__ */ jsx22(
25231
25303
  FocusScope,
25232
25304
  {
25233
25305
  asChild: true,
@@ -25235,7 +25307,7 @@ var DialogContentImpl = React32.forwardRef(
25235
25307
  trapped: trapFocus,
25236
25308
  onMountAutoFocus: onOpenAutoFocus,
25237
25309
  onUnmountAutoFocus: onCloseAutoFocus,
25238
- children: /* @__PURE__ */ jsx21(
25310
+ children: /* @__PURE__ */ jsx22(
25239
25311
  DismissableLayer,
25240
25312
  {
25241
25313
  role: "dialog",
@@ -25250,9 +25322,9 @@ var DialogContentImpl = React32.forwardRef(
25250
25322
  )
25251
25323
  }
25252
25324
  ),
25253
- /* @__PURE__ */ jsxs6(Fragment7, { children: [
25254
- /* @__PURE__ */ jsx21(TitleWarning, { titleId: context.titleId }),
25255
- /* @__PURE__ */ jsx21(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })
25325
+ /* @__PURE__ */ jsxs7(Fragment7, { children: [
25326
+ /* @__PURE__ */ jsx22(TitleWarning, { titleId: context.titleId }),
25327
+ /* @__PURE__ */ jsx22(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })
25256
25328
  ] })
25257
25329
  ] });
25258
25330
  }
@@ -25262,7 +25334,7 @@ var DialogTitle = React32.forwardRef(
25262
25334
  (props, forwardedRef) => {
25263
25335
  const { __scopeDialog, ...titleProps } = props;
25264
25336
  const context = useDialogContext(TITLE_NAME, __scopeDialog);
25265
- return /* @__PURE__ */ jsx21(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });
25337
+ return /* @__PURE__ */ jsx22(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });
25266
25338
  }
25267
25339
  );
25268
25340
  DialogTitle.displayName = TITLE_NAME;
@@ -25271,7 +25343,7 @@ var DialogDescription = React32.forwardRef(
25271
25343
  (props, forwardedRef) => {
25272
25344
  const { __scopeDialog, ...descriptionProps } = props;
25273
25345
  const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);
25274
- return /* @__PURE__ */ jsx21(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });
25346
+ return /* @__PURE__ */ jsx22(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });
25275
25347
  }
25276
25348
  );
25277
25349
  DialogDescription.displayName = DESCRIPTION_NAME;
@@ -25280,7 +25352,7 @@ var DialogClose = React32.forwardRef(
25280
25352
  (props, forwardedRef) => {
25281
25353
  const { __scopeDialog, ...closeProps } = props;
25282
25354
  const context = useDialogContext(CLOSE_NAME2, __scopeDialog);
25283
- return /* @__PURE__ */ jsx21(
25355
+ return /* @__PURE__ */ jsx22(
25284
25356
  Primitive.button,
25285
25357
  {
25286
25358
  type: "button",
@@ -26529,16 +26601,16 @@ var cn2 = /* @__PURE__ */ wrapClsx(instance.mergeString, instance);
26529
26601
  var twMerge2 = instance.merge;
26530
26602
 
26531
26603
  // ../ui/src/components/dialog.tsx
26532
- import { jsx as jsx22, jsxs as jsxs7 } from "react/jsx-runtime";
26604
+ import { jsx as jsx23, jsxs as jsxs8 } from "react/jsx-runtime";
26533
26605
  function Dialog2({
26534
26606
  ...props
26535
26607
  }) {
26536
- return /* @__PURE__ */ jsx22(dist_exports7.Root, { "data-slot": "dialog", ...props });
26608
+ return /* @__PURE__ */ jsx23(dist_exports7.Root, { "data-slot": "dialog", ...props });
26537
26609
  }
26538
26610
  function DialogClose2({
26539
26611
  ...props
26540
26612
  }) {
26541
- return /* @__PURE__ */ jsx22(dist_exports7.Close, { "data-slot": "dialog-close", ...props });
26613
+ return /* @__PURE__ */ jsx23(dist_exports7.Close, { "data-slot": "dialog-close", ...props });
26542
26614
  }
26543
26615
 
26544
26616
  // ../ui/src/composites/dialog.tsx
@@ -26578,9 +26650,9 @@ function loopTabInShadowRoot(event) {
26578
26650
  }
26579
26651
 
26580
26652
  // ../ui/src/composites/dialog.tsx
26581
- import { jsx as jsx23, jsxs as jsxs8 } from "react/jsx-runtime";
26653
+ import { jsx as jsx24, jsxs as jsxs9 } from "react/jsx-runtime";
26582
26654
  var DialogOverlay2 = forwardRef17(function DialogOverlay3({ className, ...props }, ref) {
26583
- return /* @__PURE__ */ jsx23(
26655
+ return /* @__PURE__ */ jsx24(
26584
26656
  dist_exports7.Overlay,
26585
26657
  {
26586
26658
  ref,
@@ -26602,9 +26674,9 @@ function DialogContent2({
26602
26674
  ...props
26603
26675
  }) {
26604
26676
  const overlayRoot = useOverlayRoot();
26605
- return /* @__PURE__ */ jsxs8(dist_exports7.Portal, { "data-slot": "dialog-portal", container: overlayRoot, children: [
26606
- /* @__PURE__ */ jsx23(DialogOverlay2, { className: overlayClassName }),
26607
- /* @__PURE__ */ jsxs8(
26677
+ return /* @__PURE__ */ jsxs9(dist_exports7.Portal, { "data-slot": "dialog-portal", container: overlayRoot, children: [
26678
+ /* @__PURE__ */ jsx24(DialogOverlay2, { className: overlayClassName }),
26679
+ /* @__PURE__ */ jsxs9(
26608
26680
  dist_exports7.Content,
26609
26681
  {
26610
26682
  onKeyDown: (event) => {
@@ -26619,14 +26691,14 @@ function DialogContent2({
26619
26691
  ...props,
26620
26692
  children: [
26621
26693
  children,
26622
- showCloseButton && /* @__PURE__ */ jsxs8(
26694
+ showCloseButton && /* @__PURE__ */ jsxs9(
26623
26695
  dist_exports7.Close,
26624
26696
  {
26625
26697
  "data-slot": "dialog-close",
26626
26698
  className: "absolute top-4 right-4 rounded-[8px] p-2 text-[hsl(var(--muted-foreground))] opacity-90 transition-colors hover:bg-[hsl(var(--accent))] hover:opacity-100 focus:outline-none disabled:pointer-events-none",
26627
26699
  children: [
26628
- /* @__PURE__ */ jsx23(X, { size: 16 }),
26629
- /* @__PURE__ */ jsx23("span", { className: "sr-only", children: "\u5173\u95ED" })
26700
+ /* @__PURE__ */ jsx24(X, { size: 16 }),
26701
+ /* @__PURE__ */ jsx24("span", { className: "sr-only", children: "\u5173\u95ED" })
26630
26702
  ]
26631
26703
  }
26632
26704
  )
@@ -26636,7 +26708,7 @@ function DialogContent2({
26636
26708
  ] });
26637
26709
  }
26638
26710
  function DialogTitle2({ className, ...props }) {
26639
- return /* @__PURE__ */ jsx23(
26711
+ return /* @__PURE__ */ jsx24(
26640
26712
  dist_exports7.Title,
26641
26713
  {
26642
26714
  "data-slot": "dialog-title",
@@ -26649,7 +26721,7 @@ function DialogDescription2({
26649
26721
  className,
26650
26722
  ...props
26651
26723
  }) {
26652
- return /* @__PURE__ */ jsx23(
26724
+ return /* @__PURE__ */ jsx24(
26653
26725
  dist_exports7.Description,
26654
26726
  {
26655
26727
  "data-slot": "dialog-description",
@@ -26762,6 +26834,7 @@ export {
26762
26834
  Plug,
26763
26835
  Plus,
26764
26836
  RefreshCcw,
26837
+ RefreshCw,
26765
26838
  Rocket,
26766
26839
  RotateCcw,
26767
26840
  Scissors,
@@ -26774,6 +26847,7 @@ export {
26774
26847
  Terminal,
26775
26848
  Trash2,
26776
26849
  TriangleAlert,
26850
+ Unplug,
26777
26851
  Wrench,
26778
26852
  X,
26779
26853
  Zap,
@@ -26827,6 +26901,7 @@ export {
26827
26901
  Portal3 as Portal,
26828
26902
  Content22 as Content2,
26829
26903
  dist_exports4 as dist_exports3,
26904
+ BrowserConnectionDialog,
26830
26905
  useOverlayRoot,
26831
26906
  usePortalContainer,
26832
26907
  cn2,
@@ -26925,6 +27000,7 @@ lucide-react/dist/esm/icons/plug.js:
26925
27000
  lucide-react/dist/esm/icons/plus.js:
26926
27001
  lucide-react/dist/esm/icons/puzzle.js:
26927
27002
  lucide-react/dist/esm/icons/refresh-ccw.js:
27003
+ lucide-react/dist/esm/icons/refresh-cw.js:
26928
27004
  lucide-react/dist/esm/icons/rocket.js:
26929
27005
  lucide-react/dist/esm/icons/rotate-ccw.js:
26930
27006
  lucide-react/dist/esm/icons/scissors.js:
@@ -26937,6 +27013,7 @@ lucide-react/dist/esm/icons/square.js:
26937
27013
  lucide-react/dist/esm/icons/terminal.js:
26938
27014
  lucide-react/dist/esm/icons/trash-2.js:
26939
27015
  lucide-react/dist/esm/icons/triangle-alert.js:
27016
+ lucide-react/dist/esm/icons/unplug.js:
26940
27017
  lucide-react/dist/esm/icons/wrench.js:
26941
27018
  lucide-react/dist/esm/icons/x.js:
26942
27019
  lucide-react/dist/esm/icons/zap.js:
@@ -26948,4 +27025,4 @@ lucide-react/dist/esm/lucide-react.js:
26948
27025
  * See the LICENSE file in the root directory of this source tree.
26949
27026
  *)
26950
27027
  */
26951
- //# sourceMappingURL=chunk-XTYNDVUV.js.map
27028
+ //# sourceMappingURL=chunk-6PSSFMTQ.js.map