@qredence/fleet 0.6.6 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/web/client/assets/{action-swap-roll-Dbquwd1Y.js → action-swap-roll-BfVrBOVd.js} +1 -1
- package/dist/web/client/assets/{alert-dialog-C6Dkg1x6.js → alert-dialog-FCppNafx.js} +1 -1
- package/dist/web/client/assets/{artifacts-panel-8a_tn7Yb.js → artifacts-panel-C69vz-oo.js} +1 -1
- package/dist/web/client/assets/{badge-BjFxrtmB.js → badge-DOGhnsYk.js} +7 -7
- package/dist/web/client/assets/button-BJyg7l5W.js +1 -0
- package/dist/web/client/assets/{chat-command-palette-DhidLnw7.js → chat-command-palette-wyZjTNa8.js} +1 -1
- package/dist/web/client/assets/{chunk-YOKDWASO-C8deEx7Z.js → chunk-YOKDWASO-Dego39cu.js} +4 -4
- package/dist/web/client/assets/{citations-BYiDBo21.js → citations-BhyqbxcZ.js} +1 -1
- package/dist/web/client/assets/{command-Cre9BsOI.js → command-Bo31U-UD.js} +1 -1
- package/dist/web/client/assets/create-project-dialog-SDyXTpl-.js +1 -0
- package/dist/web/client/assets/{dialog-0KDCsqw0.js → dialog-DLIPvl1s.js} +1 -1
- package/dist/web/client/assets/{dist-CZDnnosQ.js → dist-QgsZ1U9l.js} +1 -1
- package/dist/web/client/assets/ease-DKi-MOH5.js +1 -0
- package/dist/web/client/assets/{fork-picker-dialog-BPSqUjKu.js → fork-picker-dialog-BDleMADF.js} +1 -1
- package/dist/web/client/assets/globals-DZbMyHfg.css +2 -0
- package/dist/web/client/assets/{highlighted-body-KPVGNVTW-CZcNaoxi.js → highlighted-body-KPVGNVTW-CSgDVUQp.js} +1 -1
- package/dist/web/client/assets/index-BARp0bjW.js +13 -0
- package/dist/web/client/assets/input-Ce8yLnXY.js +1 -0
- package/dist/web/client/assets/{input-group-Fky3fte_.js → input-group-BZLQiZOA.js} +1 -1
- package/dist/web/client/assets/is-ref-object-BD8OGh9C.js +1 -0
- package/dist/web/client/assets/{layout-constants-CC0ANQOP.js → layout-constants-Bl6XCvhY.js} +1 -1
- package/dist/web/client/assets/{markdown-code-BqFVdovL.js → markdown-code-DfJbKhL9.js} +1 -1
- package/dist/web/client/assets/{markdown-C-Y9gskI.js → markdown-yn-nhRzB.js} +2 -2
- package/dist/web/client/assets/mermaid-HWGCJPDP-BpEVCu9T.js +1 -0
- package/dist/web/client/assets/{message-queue-BUJK6bPQ.js → message-queue-CiptKSb6.js} +1 -1
- package/dist/web/client/assets/{model-selector-list-yOj8BeKr.js → model-selector-list-BHQ-Q8b9.js} +1 -1
- package/dist/web/client/assets/{notify-GSsGEKtR.js → notify-BC0a76VJ.js} +1 -1
- package/dist/web/client/assets/{openui-renderer-xe2-ekvP.js → openui-renderer-DrfHxs1t.js} +3 -3
- package/dist/web/client/assets/{preload-helper-Czpn1I53.js → preload-helper-BZ1Pz5am.js} +1 -1
- package/dist/web/client/assets/{prompt-input-BhVQxoyh.js → prompt-input-IwZOepG7.js} +1 -1
- package/dist/web/client/assets/{provider-label-BW_awXvw.js → provider-label-DNZOLldn.js} +1 -1
- package/dist/web/client/assets/{right-panel-registry-BpfG1iZV.js → right-panel-registry-CF7GLJrk.js} +2 -2
- package/dist/web/client/assets/routes-DCP1DP1g.js +16 -0
- package/dist/web/client/assets/select-COK0Kaq2.js +1 -0
- package/dist/web/client/assets/session-tool-renderer-Yu4G1165.js +1389 -0
- package/dist/web/client/assets/{session-tree-panel-BIEUJ1Zs.js → session-tree-panel-deGRKAhX.js} +1 -1
- package/dist/web/client/assets/settings-dialog-BU1Tw0CQ.js +2 -0
- package/dist/web/client/assets/{subagent-chat-panel-DA1GvHt8.js → subagent-chat-panel-bVnkDkgs.js} +1 -1
- package/dist/web/client/assets/{subagent-transcript-BGctBTbY.js → subagent-transcript-D_L-8PQi.js} +1 -1
- package/dist/web/client/assets/{subagent-utils-HbymlalM.js → subagent-utils-D7sXbLsS.js} +2 -2
- package/dist/web/client/assets/{subagents-panel-BJIdWRcV.js → subagents-panel-i5-12E1U.js} +1 -1
- package/dist/web/client/assets/surface-context-DWplCCcO.js +1 -0
- package/dist/web/client/assets/{switch-DIbInrPR.js → switch-DQETDDJT.js} +1 -1
- package/dist/web/client/assets/toast-BFeqSeaR.js +1 -0
- package/dist/web/client/assets/{tool-result-PSnAt_3f.js → tool-result-D7HtJ_yg.js} +2 -2
- package/dist/web/client/assets/{use-presence-D2YmRKr3.js → use-presence-rcUnm8Z7.js} +1 -1
- package/dist/web/client/assets/use-reduced-motion-BgG7f9xw.js +9 -0
- package/dist/web/client/assets/{workspace-panel-D3CMFw8W.js → workspace-panel-Clbmrdza.js} +1 -1
- package/dist/web/client/assets/{workspace-path-nav-DmxBrMV6.js → workspace-path-nav-eVT0rYvv.js} +2 -2
- package/dist/web/client/bundle-budget.json +5 -5
- package/dist/web/server/{_tanstack-start-manifest_v-MhCuqEzO-S6MEB7L5.js → _tanstack-start-manifest_v-CaT-3S-N-VAOGUHEJ.js} +26 -26
- package/dist/web/server/{artifacts-panel-BVfcZuA2-PB4RCSHV.js → artifacts-panel-BuAqeJzj-6DYYLKUW.js} +10 -10
- package/dist/web/server/{chat-command-palette-DlJDToBH-MVI6V743.js → chat-command-palette-Ca8gXVi2-P6EOQ43G.js} +6 -6
- package/dist/web/server/{chunk-KUBURZOL.js → chunk-35AFSKDX.js} +4 -4
- package/dist/web/server/{chunk-WBPESYPV.js → chunk-COWE2EJ6.js} +3 -3
- package/dist/web/server/{chunk-JT53AAM5.js → chunk-E4YWFQX5.js} +1442 -1063
- package/dist/web/server/{chunk-MM4HQ5EO.js → chunk-FPPKECLB.js} +7 -7
- package/dist/web/server/{chunk-VF3NJAD6.js → chunk-GCDOYNXR.js} +585 -634
- package/dist/web/server/{chunk-RWQWBZNI.js → chunk-ITKXE2Q5.js} +253 -215
- package/dist/web/server/{chunk-4QFOBBX5.js → chunk-J4Y2Z3XM.js} +2 -2
- package/dist/web/server/{chunk-SAIH5YPC.js → chunk-JFAUSHBI.js} +4 -4
- package/dist/web/server/{chunk-RQHQK66C.js → chunk-K4KN3QBT.js} +2 -2
- package/dist/web/server/{chunk-3VMFSSWK.js → chunk-M7BTY55G.js} +2 -2
- package/dist/web/server/{chunk-44MTKAFZ.js → chunk-PHHC52CO.js} +5 -5
- package/dist/web/server/{chunk-MSXGQVHG.js → chunk-UTV66W5H.js} +5 -5
- package/dist/web/server/{chunk-F5DJQ3PQ.js → chunk-WPSI5TBE.js} +1528 -2185
- package/dist/web/server/{create-project-dialog-UPz5_Ysf-FS6BL74M.js → create-project-dialog-DCvdysey-IZUGGDAN.js} +76 -15
- package/dist/web/server/{empty-plugin-adapters-Cqtvkauv-ILKI7W7V.js → empty-plugin-adapters-DOl-E2pL-RKRSN75W.js} +1 -1
- package/dist/web/server/{fork-picker-dialog-CZBpezXS-64KP23PO.js → fork-picker-dialog-QH00XmqX-6YLU5REF.js} +4 -4
- package/dist/web/server/{message-queue-D_Q3coUY-I3EJZXWR.js → message-queue-BzEFQR8k-2W53EW32.js} +4 -4
- package/dist/web/server/{model-selector-list-q6WkkOwQ-OT46QU5P.js → model-selector-list-BjoXmw92-TEKBPB3E.js} +6 -6
- package/dist/web/server/{openui-renderer-BqI6m6VI-HXEIYIYZ.js → openui-renderer-CJ7Q2zZ_-FPXKZPSO.js} +6 -6
- package/dist/web/server/{resources-panel-BKZ0M0RP-CMATPQQP.js → resources-panel-yVB4xF_K-OHFHXVU4.js} +5 -5
- package/dist/web/server/{router-BfuEp_JW-DNQ33L5J.js → router-UgU5vJxm-R33FGTXY.js} +3 -3
- package/dist/web/server/{routes-NdG3DsXJ-QKZT7TKM.js → routes-Cbbo-jh9-ZUPH4SJD.js} +37 -35
- package/dist/web/server/server.js +2410 -1672
- package/dist/web/server/{session-reasoning-panel-Dc-AnjdD-7KAZLD74.js → session-reasoning-panel-C50VbaQ8-4YLMVVY6.js} +5 -5
- package/dist/web/server/{session-tool-renderer-DaR8U5rb-TXWACWT7.js → session-tool-renderer-QcAkYD-V-6RXRKDH6.js} +6 -6
- package/dist/web/server/{session-tree-panel-V3l8WdmE-YBRDLHWU.js → session-tree-panel-CL49XSTK-4ZPK6AIV.js} +6 -6
- package/dist/web/server/{settings-dialog-C8U1VX75-6A2V6HSW.js → settings-dialog-DG9HEZeP-TWDRDGMN.js} +191 -120
- package/dist/web/server/{start-QK6aG02q-EMREW2SB.js → start-DEejK9Uj-FODAOTAO.js} +1 -1
- package/dist/web/server/{subagent-chat-panel-B9CtFTP5-6QDZ4RQY.js → subagent-chat-panel-Cg2CxshI-WWGFHTIF.js} +8 -8
- package/dist/web/server/{subagents-panel-Dw6yP5X4-BMN45GDD.js → subagents-panel-aC3Eo-MR-RNIPLCZQ.js} +9 -9
- package/dist/web/server/{workspace-panel-C246J-eO-2WGJWVE6.js → workspace-panel-DfdFkgHU-6HIOXRBX.js} +5 -5
- package/package.json +2 -2
- package/dist/web/client/assets/button-BrwYi6QP.js +0 -1
- package/dist/web/client/assets/create-project-dialog-DVOaxTzt.js +0 -1
- package/dist/web/client/assets/ease-2UPBQU5v.js +0 -1
- package/dist/web/client/assets/globals-CD6JXJJh.css +0 -2
- package/dist/web/client/assets/index-BEG-7vN-.js +0 -12
- package/dist/web/client/assets/input-tWLSIxES.js +0 -1
- package/dist/web/client/assets/is-ref-object-CEXqIz6L.js +0 -1
- package/dist/web/client/assets/mermaid-HWGCJPDP-CVNXPao6.js +0 -1
- package/dist/web/client/assets/routes-BIp_deev.js +0 -16
- package/dist/web/client/assets/select-Buvrx1fi.js +0 -1
- package/dist/web/client/assets/session-tool-renderer-CNcxpGsk.js +0 -1389
- package/dist/web/client/assets/settings-dialog-DAB6RL4u.js +0 -2
- package/dist/web/client/assets/surface-context-A-BjVzO_.js +0 -1
- package/dist/web/client/assets/toast-CS0pnDlS.js +0 -1
- package/dist/web/client/assets/use-reduced-motion-CaQBb3Qc.js +0 -9
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
InputGroupButton,
|
|
8
8
|
InputGroupInput,
|
|
9
9
|
Textarea
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-COWE2EJ6.js";
|
|
11
11
|
import {
|
|
12
12
|
Alert,
|
|
13
13
|
AlertDescription,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
FieldGroup,
|
|
17
17
|
FieldLabel,
|
|
18
18
|
Switch$1
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-35AFSKDX.js";
|
|
20
20
|
import {
|
|
21
21
|
isModelPatternEnabled,
|
|
22
22
|
modelMatchesPattern,
|
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
useCSPContext,
|
|
48
48
|
useChatPanelDataContext,
|
|
49
49
|
useSettingsActionsContext
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-GCDOYNXR.js";
|
|
51
51
|
import {
|
|
52
52
|
Button$1,
|
|
53
53
|
addEventListener,
|
|
@@ -64,10 +64,11 @@ import {
|
|
|
64
64
|
useDirection,
|
|
65
65
|
useIsoLayoutEffect,
|
|
66
66
|
useRenderElement,
|
|
67
|
+
useShape,
|
|
67
68
|
useStableCallback,
|
|
68
69
|
useTimeout,
|
|
69
70
|
writeUiPreferences
|
|
70
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-E4YWFQX5.js";
|
|
71
72
|
import {
|
|
72
73
|
COMPACT_ACTION_BUTTON_CLASS,
|
|
73
74
|
HIT_AREA_EXPAND_CLASS,
|
|
@@ -116,14 +117,14 @@ import {
|
|
|
116
117
|
cn
|
|
117
118
|
} from "./chunk-B5Y7XOIJ.js";
|
|
118
119
|
import "./chunk-NB3TVOGB.js";
|
|
119
|
-
import "./chunk-
|
|
120
|
+
import "./chunk-WPSI5TBE.js";
|
|
120
121
|
import "./chunk-NXAVRSI5.js";
|
|
121
122
|
import {
|
|
122
123
|
__export
|
|
123
124
|
} from "./chunk-CZ7CSFO4.js";
|
|
124
125
|
|
|
125
|
-
// web/app/dist/server/assets/settings-dialog-
|
|
126
|
-
import { useCallback, useEffect as useEffect2, useId, useMemo as useMemo3, useRef as useRef4, useState as useState2 } from "react";
|
|
126
|
+
// web/app/dist/server/assets/settings-dialog-DG9HEZeP.js
|
|
127
|
+
import { createContext as createContext4, forwardRef as forwardRef7, useCallback, useContext as useContext4, useEffect as useEffect2, useId, useMemo as useMemo3, useRef as useRef4, useState as useState2 } from "react";
|
|
127
128
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
128
129
|
|
|
129
130
|
// node_modules/.pnpm/@base-ui+react@1.8.0_@date-fns+tz@1.5.0_@types+react@19.3.0_date-fns@4.4.0_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@base-ui/react/scroll-area/index.parts.mjs
|
|
@@ -1089,45 +1090,7 @@ var ScrollAreaCorner = /* @__PURE__ */ React9.forwardRef(function ScrollAreaCorn
|
|
|
1089
1090
|
});
|
|
1090
1091
|
if (process.env.NODE_ENV !== "production") ScrollAreaCorner.displayName = "ScrollAreaCorner";
|
|
1091
1092
|
|
|
1092
|
-
// web/app/dist/server/assets/settings-dialog-
|
|
1093
|
-
function RowSurface({ className, interactive, padding, tone, ...props }) {
|
|
1094
|
-
return /* @__PURE__ */ jsx("div", {
|
|
1095
|
-
className: cn(rowSurface({
|
|
1096
|
-
interactive,
|
|
1097
|
-
padding,
|
|
1098
|
-
tone
|
|
1099
|
-
}), className),
|
|
1100
|
-
...props
|
|
1101
|
-
});
|
|
1102
|
-
}
|
|
1103
|
-
function ItemRow({ icon, title, subtitle, trailing, className, interactive = true, tone = "default" }) {
|
|
1104
|
-
return /* @__PURE__ */ jsxs(RowSurface, {
|
|
1105
|
-
tone,
|
|
1106
|
-
padding: "md",
|
|
1107
|
-
interactive,
|
|
1108
|
-
className: cn("items-center gap-3", className),
|
|
1109
|
-
children: [
|
|
1110
|
-
icon ? /* @__PURE__ */ jsx("div", {
|
|
1111
|
-
className: "flex size-8 shrink-0 items-center justify-center rounded-md border border-border/40 bg-background/60 text-foreground/70",
|
|
1112
|
-
children: icon
|
|
1113
|
-
}) : null,
|
|
1114
|
-
/* @__PURE__ */ jsxs("div", {
|
|
1115
|
-
className: "min-w-0 flex-1",
|
|
1116
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
1117
|
-
className: "truncate text-sm font-medium text-foreground",
|
|
1118
|
-
children: title
|
|
1119
|
-
}), subtitle ? /* @__PURE__ */ jsx("div", {
|
|
1120
|
-
className: "mt-0.5 truncate text-xs text-muted-foreground",
|
|
1121
|
-
children: subtitle
|
|
1122
|
-
}) : null]
|
|
1123
|
-
}),
|
|
1124
|
-
trailing ? /* @__PURE__ */ jsx("div", {
|
|
1125
|
-
className: "flex shrink-0 items-center gap-1.5",
|
|
1126
|
-
children: trailing
|
|
1127
|
-
}) : null
|
|
1128
|
-
]
|
|
1129
|
-
});
|
|
1130
|
-
}
|
|
1093
|
+
// web/app/dist/server/assets/settings-dialog-DG9HEZeP.js
|
|
1131
1094
|
function isFieldInvalid(value, attemptedSave, required = true) {
|
|
1132
1095
|
return attemptedSave && required && value.trim().length === 0;
|
|
1133
1096
|
}
|
|
@@ -1188,6 +1151,32 @@ function TextCredentialField({ attemptedSave, icon: Icon, inputType = "text", la
|
|
|
1188
1151
|
})] })]
|
|
1189
1152
|
});
|
|
1190
1153
|
}
|
|
1154
|
+
function SettingsRow({ children, className, description, icon, label, trailing }) {
|
|
1155
|
+
const control = trailing ?? children;
|
|
1156
|
+
return /* @__PURE__ */ jsxs(Field, {
|
|
1157
|
+
orientation: "horizontal",
|
|
1158
|
+
className: cn("items-center justify-between gap-6 rounded-xl border border-border/60 bg-card p-4 transition-colors", className),
|
|
1159
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
1160
|
+
className: "flex min-w-0 flex-1 items-start gap-3",
|
|
1161
|
+
children: [icon ? /* @__PURE__ */ jsx("div", {
|
|
1162
|
+
className: "flex size-8 shrink-0 items-center justify-center rounded-md border border-border/40 bg-background/60 text-foreground/70",
|
|
1163
|
+
children: icon
|
|
1164
|
+
}) : null, /* @__PURE__ */ jsxs("div", {
|
|
1165
|
+
className: "min-w-0 flex-1",
|
|
1166
|
+
children: [/* @__PURE__ */ jsx(FieldLabel, {
|
|
1167
|
+
className: "text-sm font-medium text-foreground",
|
|
1168
|
+
children: label
|
|
1169
|
+
}), description ? /* @__PURE__ */ jsx(FieldDescription, {
|
|
1170
|
+
className: "mt-0.5 text-xs text-muted-foreground leading-normal",
|
|
1171
|
+
children: description
|
|
1172
|
+
}) : null]
|
|
1173
|
+
})]
|
|
1174
|
+
}), control ? /* @__PURE__ */ jsx("div", {
|
|
1175
|
+
className: "shrink-0",
|
|
1176
|
+
children: control
|
|
1177
|
+
}) : null]
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
1191
1180
|
var STATUS_COPY = {
|
|
1192
1181
|
unconfigured: "Add a key below to turn this on.",
|
|
1193
1182
|
unverified: "Checking the key\u2026",
|
|
@@ -1203,9 +1192,11 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1203
1192
|
const [draftKey, setDraftKey] = useState2("");
|
|
1204
1193
|
const [showKey, setShowKey] = useState2(false);
|
|
1205
1194
|
const [attemptedSave, setAttemptedSave] = useState2(false);
|
|
1195
|
+
const [saveError, setSaveError] = useState2(null);
|
|
1206
1196
|
const [busy, setBusy] = useState2(false);
|
|
1207
1197
|
const save = useCallback(async () => {
|
|
1208
1198
|
setAttemptedSave(true);
|
|
1199
|
+
setSaveError(null);
|
|
1209
1200
|
if (!draftKey.trim() || !onSaveKey) return;
|
|
1210
1201
|
setBusy(true);
|
|
1211
1202
|
try {
|
|
@@ -1213,6 +1204,8 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1213
1204
|
setDraftKey("");
|
|
1214
1205
|
setShowKey(false);
|
|
1215
1206
|
setAttemptedSave(false);
|
|
1207
|
+
} catch (error) {
|
|
1208
|
+
setSaveError(error instanceof Error ? error.message : "Failed to save key");
|
|
1216
1209
|
} finally {
|
|
1217
1210
|
setBusy(false);
|
|
1218
1211
|
}
|
|
@@ -1220,9 +1213,12 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1220
1213
|
const clear = useCallback(async () => {
|
|
1221
1214
|
if (!onClearKey) return;
|
|
1222
1215
|
setBusy(true);
|
|
1216
|
+
setSaveError(null);
|
|
1223
1217
|
try {
|
|
1224
1218
|
await onClearKey();
|
|
1225
1219
|
setDraftKey("");
|
|
1220
|
+
} catch (error) {
|
|
1221
|
+
setSaveError(error instanceof Error ? error.message : "Failed to remove key");
|
|
1226
1222
|
} finally {
|
|
1227
1223
|
setBusy(false);
|
|
1228
1224
|
}
|
|
@@ -1230,9 +1226,9 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1230
1226
|
const unavailable = status === "unconfigured" || status === "error";
|
|
1231
1227
|
return /* @__PURE__ */ jsxs("div", {
|
|
1232
1228
|
className: "flex flex-col gap-3",
|
|
1233
|
-
children: [/* @__PURE__ */ jsx(
|
|
1234
|
-
|
|
1235
|
-
|
|
1229
|
+
children: [/* @__PURE__ */ jsx(SettingsRow, {
|
|
1230
|
+
label: "Describe a command",
|
|
1231
|
+
description: `Recognise when a message is really asking for a built-in command, like "compact this" or "show the shortcuts". Messages you send are shared with TypeSafe for classification only when this is on. ${STATUS_COPY[status]}`,
|
|
1236
1232
|
trailing: /* @__PURE__ */ jsx(Switch$1, {
|
|
1237
1233
|
"aria-label": "Describe a command",
|
|
1238
1234
|
checked: enabled,
|
|
@@ -1245,12 +1241,19 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1245
1241
|
/* @__PURE__ */ jsx(SecretCredentialField, {
|
|
1246
1242
|
attemptedSave,
|
|
1247
1243
|
label: "TypeSafe API key",
|
|
1248
|
-
onChange:
|
|
1244
|
+
onChange: (val) => {
|
|
1245
|
+
setDraftKey(val);
|
|
1246
|
+
if (saveError) setSaveError(null);
|
|
1247
|
+
},
|
|
1249
1248
|
onToggleVisibility: () => setShowKey((current) => !current),
|
|
1250
1249
|
placeholder: "Paste your TypeSafe API key",
|
|
1251
1250
|
showPassword: showKey,
|
|
1252
1251
|
value: draftKey
|
|
1253
1252
|
}),
|
|
1253
|
+
saveError ? /* @__PURE__ */ jsx("p", {
|
|
1254
|
+
className: "text-xs text-destructive",
|
|
1255
|
+
children: saveError
|
|
1256
|
+
}) : null,
|
|
1254
1257
|
/* @__PURE__ */ jsx("p", {
|
|
1255
1258
|
className: "text-xs text-muted-foreground",
|
|
1256
1259
|
children: KEY_SOURCE_COPY[keySource]
|
|
@@ -1259,14 +1262,14 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1259
1262
|
className: "flex items-center gap-2",
|
|
1260
1263
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
1261
1264
|
type: "button",
|
|
1262
|
-
size: "
|
|
1265
|
+
size: "compact",
|
|
1263
1266
|
disabled: busy || !draftKey.trim(),
|
|
1264
1267
|
onClick: () => void save(),
|
|
1265
1268
|
children: "Save key"
|
|
1266
1269
|
}), keySource === "settings" ? /* @__PURE__ */ jsx(Button$1, {
|
|
1267
1270
|
type: "button",
|
|
1268
1271
|
variant: "outline",
|
|
1269
|
-
size: "
|
|
1272
|
+
size: "compact",
|
|
1270
1273
|
disabled: busy,
|
|
1271
1274
|
onClick: () => void clear(),
|
|
1272
1275
|
children: "Remove key"
|
|
@@ -1276,6 +1279,44 @@ function ComposerIntentSection({ enabled, keySource, status, onClearKey, onEnabl
|
|
|
1276
1279
|
})]
|
|
1277
1280
|
});
|
|
1278
1281
|
}
|
|
1282
|
+
function RowSurface({ className, interactive, padding, tone, ...props }) {
|
|
1283
|
+
return /* @__PURE__ */ jsx("div", {
|
|
1284
|
+
className: cn(rowSurface({
|
|
1285
|
+
interactive,
|
|
1286
|
+
padding,
|
|
1287
|
+
tone
|
|
1288
|
+
}), className),
|
|
1289
|
+
...props
|
|
1290
|
+
});
|
|
1291
|
+
}
|
|
1292
|
+
function ItemRow({ icon, title, subtitle, trailing, className, interactive = true, tone = "default", truncateSubtitle = true, truncateTitle = true }) {
|
|
1293
|
+
return /* @__PURE__ */ jsxs(RowSurface, {
|
|
1294
|
+
tone,
|
|
1295
|
+
padding: "md",
|
|
1296
|
+
interactive,
|
|
1297
|
+
className: cn("items-center gap-3", className),
|
|
1298
|
+
children: [
|
|
1299
|
+
icon ? /* @__PURE__ */ jsx("div", {
|
|
1300
|
+
className: "flex size-8 shrink-0 items-center justify-center rounded-md border border-border/40 bg-background/60 text-foreground/70",
|
|
1301
|
+
children: icon
|
|
1302
|
+
}) : null,
|
|
1303
|
+
/* @__PURE__ */ jsxs("div", {
|
|
1304
|
+
className: "min-w-0 flex-1",
|
|
1305
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
1306
|
+
className: cn("text-sm font-medium text-foreground", truncateTitle && "truncate"),
|
|
1307
|
+
children: title
|
|
1308
|
+
}), subtitle ? /* @__PURE__ */ jsx("div", {
|
|
1309
|
+
className: cn("mt-0.5 text-xs text-muted-foreground", truncateSubtitle ? "truncate" : "leading-normal"),
|
|
1310
|
+
children: subtitle
|
|
1311
|
+
}) : null]
|
|
1312
|
+
}),
|
|
1313
|
+
trailing ? /* @__PURE__ */ jsx("div", {
|
|
1314
|
+
className: "flex shrink-0 items-center gap-1.5",
|
|
1315
|
+
children: trailing
|
|
1316
|
+
}) : null
|
|
1317
|
+
]
|
|
1318
|
+
});
|
|
1319
|
+
}
|
|
1279
1320
|
function SettingsPane({ actions, children, description, title }) {
|
|
1280
1321
|
return /* @__PURE__ */ jsxs("div", {
|
|
1281
1322
|
className: "flex flex-col gap-4",
|
|
@@ -1304,7 +1345,7 @@ function SettingsCommitActions({ dirty, disabled, onRevert, onSave, saving }) {
|
|
|
1304
1345
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [dirty ? /* @__PURE__ */ jsx(Button$1, {
|
|
1305
1346
|
type: "button",
|
|
1306
1347
|
variant: "ghost",
|
|
1307
|
-
size: "icon-
|
|
1348
|
+
size: "icon-compact",
|
|
1308
1349
|
className: "text-muted-foreground transition-transform active:scale-[0.96]",
|
|
1309
1350
|
disabled: disabled || saving,
|
|
1310
1351
|
onClick: onRevert,
|
|
@@ -1313,7 +1354,7 @@ function SettingsCommitActions({ dirty, disabled, onRevert, onSave, saving }) {
|
|
|
1313
1354
|
}) : null, /* @__PURE__ */ jsxs(Button$1, {
|
|
1314
1355
|
type: "button",
|
|
1315
1356
|
variant: "outline",
|
|
1316
|
-
size: "
|
|
1357
|
+
size: "compact",
|
|
1317
1358
|
className: cn(COMPACT_ACTION_BUTTON_CLASS, "transition-transform active:scale-[0.96]", dirty && "border-primary/30 text-primary"),
|
|
1318
1359
|
disabled: !dirty || disabled || saving,
|
|
1319
1360
|
onClick: onSave,
|
|
@@ -1549,7 +1590,7 @@ function ProviderOAuthSignIn({ onConfigured, onOAuthLogin, provider }) {
|
|
|
1549
1590
|
}) : null,
|
|
1550
1591
|
authUrl ? /* @__PURE__ */ jsxs(Button$1, {
|
|
1551
1592
|
type: "button",
|
|
1552
|
-
size: "
|
|
1593
|
+
size: "compact",
|
|
1553
1594
|
onClick: () => {
|
|
1554
1595
|
window.open(authUrl, "_blank", "noopener,noreferrer");
|
|
1555
1596
|
},
|
|
@@ -1575,7 +1616,7 @@ function ProviderOAuthSignIn({ onConfigured, onOAuthLogin, provider }) {
|
|
|
1575
1616
|
className: "flex justify-end",
|
|
1576
1617
|
children: /* @__PURE__ */ jsxs(Button$1, {
|
|
1577
1618
|
type: "button",
|
|
1578
|
-
size: "
|
|
1619
|
+
size: "compact",
|
|
1579
1620
|
disabled: busy || !prompt.allowEmpty && !promptAnswer.trim(),
|
|
1580
1621
|
onClick: () => {
|
|
1581
1622
|
submitPrompt();
|
|
@@ -1590,7 +1631,7 @@ function ProviderOAuthSignIn({ onConfigured, onOAuthLogin, provider }) {
|
|
|
1590
1631
|
children: /* @__PURE__ */ jsx(Button$1, {
|
|
1591
1632
|
type: "button",
|
|
1592
1633
|
variant: "ghost",
|
|
1593
|
-
size: "
|
|
1634
|
+
size: "compact",
|
|
1594
1635
|
disabled: busy,
|
|
1595
1636
|
onClick: () => {
|
|
1596
1637
|
cancel();
|
|
@@ -1614,7 +1655,7 @@ function ProviderOAuthSignIn({ onConfigured, onOAuthLogin, provider }) {
|
|
|
1614
1655
|
className: "flex justify-end",
|
|
1615
1656
|
children: /* @__PURE__ */ jsxs(Button$1, {
|
|
1616
1657
|
type: "button",
|
|
1617
|
-
size: "
|
|
1658
|
+
size: "compact",
|
|
1618
1659
|
disabled: busy || !canStart,
|
|
1619
1660
|
onClick: () => {
|
|
1620
1661
|
start();
|
|
@@ -1757,7 +1798,7 @@ function McpConnectionsSection({ connections, isLoading, isPending, onOAuth, onR
|
|
|
1757
1798
|
description: "Connect built-in and user MCP servers. Tokens stay on the server; this list only shows status and environment-variable names.",
|
|
1758
1799
|
actions: /* @__PURE__ */ jsxs(Button$1, {
|
|
1759
1800
|
type: "button",
|
|
1760
|
-
size: "
|
|
1801
|
+
size: "compact",
|
|
1761
1802
|
variant: "outline",
|
|
1762
1803
|
disabled: isPending || adding,
|
|
1763
1804
|
onClick: () => setAdding(true),
|
|
@@ -1843,13 +1884,13 @@ function McpConnectionsSection({ connections, isLoading, isPending, onOAuth, onR
|
|
|
1843
1884
|
className: "flex justify-end gap-2",
|
|
1844
1885
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
1845
1886
|
type: "button",
|
|
1846
|
-
size: "
|
|
1887
|
+
size: "compact",
|
|
1847
1888
|
variant: "ghost",
|
|
1848
1889
|
onClick: resetAddForm,
|
|
1849
1890
|
children: "Cancel"
|
|
1850
1891
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
1851
1892
|
type: "button",
|
|
1852
|
-
size: "
|
|
1893
|
+
size: "compact",
|
|
1853
1894
|
disabled: isPending || !name.trim(),
|
|
1854
1895
|
onClick: () => void handleAdd(),
|
|
1855
1896
|
children: [isPending ? /* @__PURE__ */ jsx(Spinner, { "data-icon": "inline-start" }) : null, "Save"]
|
|
@@ -1874,7 +1915,7 @@ function McpConnectionsSection({ connections, isLoading, isPending, onOAuth, onR
|
|
|
1874
1915
|
className: "flex items-center gap-1.5",
|
|
1875
1916
|
children: [connection.usesOAuth && connection.status !== "needs_auth" ? /* @__PURE__ */ jsx(Button$1, {
|
|
1876
1917
|
type: "button",
|
|
1877
|
-
size: "
|
|
1918
|
+
size: "compact",
|
|
1878
1919
|
variant: "ghost",
|
|
1879
1920
|
disabled: isPending || !onOAuth,
|
|
1880
1921
|
onClick: () => {
|
|
@@ -1883,7 +1924,7 @@ function McpConnectionsSection({ connections, isLoading, isPending, onOAuth, onR
|
|
|
1883
1924
|
children: "Sign out"
|
|
1884
1925
|
}) : null, connection.source === "user" ? confirmRemove === connection.name ? /* @__PURE__ */ jsx(Button$1, {
|
|
1885
1926
|
type: "button",
|
|
1886
|
-
size: "
|
|
1927
|
+
size: "compact",
|
|
1887
1928
|
variant: "destructive",
|
|
1888
1929
|
disabled: isPending,
|
|
1889
1930
|
onClick: () => {
|
|
@@ -1892,7 +1933,7 @@ function McpConnectionsSection({ connections, isLoading, isPending, onOAuth, onR
|
|
|
1892
1933
|
children: "Confirm remove"
|
|
1893
1934
|
}) : /* @__PURE__ */ jsx(Button$1, {
|
|
1894
1935
|
type: "button",
|
|
1895
|
-
size: "
|
|
1936
|
+
size: "compact",
|
|
1896
1937
|
variant: "ghost",
|
|
1897
1938
|
disabled: isPending || !onRemove,
|
|
1898
1939
|
"aria-label": `Remove ${connection.name}`,
|
|
@@ -2070,7 +2111,7 @@ function AddModelsDialog({ configuredProviderIds, discoverableProviderIds, disco
|
|
|
2070
2111
|
return /* @__PURE__ */ jsxs(Button$1, {
|
|
2071
2112
|
type: "button",
|
|
2072
2113
|
variant: "outline",
|
|
2073
|
-
size: "
|
|
2114
|
+
size: "compact",
|
|
2074
2115
|
disabled: discoveringProviderId !== null,
|
|
2075
2116
|
onClick: () => {
|
|
2076
2117
|
onDiscoverProvider(providerId);
|
|
@@ -2158,12 +2199,12 @@ function AddModelsDialog({ configuredProviderIds, discoverableProviderIds, disco
|
|
|
2158
2199
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
2159
2200
|
type: "button",
|
|
2160
2201
|
variant: "ghost",
|
|
2161
|
-
size: "
|
|
2202
|
+
size: "compact",
|
|
2162
2203
|
onClick: () => onOpenChange(false),
|
|
2163
2204
|
children: "Cancel"
|
|
2164
2205
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
2165
2206
|
type: "button",
|
|
2166
|
-
size: "
|
|
2207
|
+
size: "compact",
|
|
2167
2208
|
disabled: selectedKeys.size === 0,
|
|
2168
2209
|
onClick: confirmAdd,
|
|
2169
2210
|
children: ["Add ", selectedKeys.size > 0 ? /* @__PURE__ */ jsxs("span", {
|
|
@@ -2286,7 +2327,7 @@ function ModelDefaultsSection({ draft, discoveringProviderId, modelDirty, modelF
|
|
|
2286
2327
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
2287
2328
|
type: "button",
|
|
2288
2329
|
variant: "outline",
|
|
2289
|
-
size: "
|
|
2330
|
+
size: "compact",
|
|
2290
2331
|
disabled,
|
|
2291
2332
|
onClick: openAddDialog,
|
|
2292
2333
|
children: [/* @__PURE__ */ jsx(Plus, { "data-icon": "inline-start" }), "Add models"]
|
|
@@ -2303,7 +2344,7 @@ function ModelDefaultsSection({ draft, discoveringProviderId, modelDirty, modelF
|
|
|
2303
2344
|
}), !normalizedFilter ? /* @__PURE__ */ jsxs(Button$1, {
|
|
2304
2345
|
type: "button",
|
|
2305
2346
|
variant: "outline",
|
|
2306
|
-
size: "
|
|
2347
|
+
size: "compact",
|
|
2307
2348
|
disabled,
|
|
2308
2349
|
onClick: openAddDialog,
|
|
2309
2350
|
children: [/* @__PURE__ */ jsx(Plus, { "data-icon": "inline-start" }), "Add models"]
|
|
@@ -2325,7 +2366,7 @@ function ModelDefaultsSection({ draft, discoveringProviderId, modelDirty, modelF
|
|
|
2325
2366
|
}) : onSetDefaultModel ? /* @__PURE__ */ jsxs(Button$1, {
|
|
2326
2367
|
type: "button",
|
|
2327
2368
|
variant: "ghost",
|
|
2328
|
-
size: "
|
|
2369
|
+
size: "compact",
|
|
2329
2370
|
className: cn(HIT_AREA_EXPAND_DENSE_CLASS, "h-7 px-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 active:scale-[0.96]"),
|
|
2330
2371
|
disabled,
|
|
2331
2372
|
"aria-label": `Set ${model.name} as default`,
|
|
@@ -2334,7 +2375,7 @@ function ModelDefaultsSection({ draft, discoveringProviderId, modelDirty, modelF
|
|
|
2334
2375
|
}) : null, /* @__PURE__ */ jsxs(Button$1, {
|
|
2335
2376
|
type: "button",
|
|
2336
2377
|
variant: "ghost",
|
|
2337
|
-
size: "
|
|
2378
|
+
size: "compact",
|
|
2338
2379
|
className: cn(HIT_AREA_EXPAND_DENSE_CLASS, "h-7 px-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 hover:text-destructive active:scale-[0.96]"),
|
|
2339
2380
|
disabled,
|
|
2340
2381
|
"aria-label": `Remove ${model.name}`,
|
|
@@ -2691,7 +2732,7 @@ function AddProviderPickerPanel({ addPickerQuery, credentialProvidersLength, fil
|
|
|
2691
2732
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
2692
2733
|
type: "button",
|
|
2693
2734
|
variant: "ghost",
|
|
2694
|
-
size: "icon-
|
|
2735
|
+
size: "icon-compact",
|
|
2695
2736
|
"aria-label": "Back to providers",
|
|
2696
2737
|
onClick: onClose,
|
|
2697
2738
|
children: /* @__PURE__ */ jsx(ArrowLeft, {})
|
|
@@ -2754,7 +2795,7 @@ function AddProviderOAuthPanel({ onBack, onConfigured, onOAuthLogin, provider })
|
|
|
2754
2795
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
2755
2796
|
type: "button",
|
|
2756
2797
|
variant: "ghost",
|
|
2757
|
-
size: "icon-
|
|
2798
|
+
size: "icon-compact",
|
|
2758
2799
|
"aria-label": "Back to provider list",
|
|
2759
2800
|
onClick: onBack,
|
|
2760
2801
|
children: /* @__PURE__ */ jsx(ArrowLeft, {})
|
|
@@ -2791,7 +2832,7 @@ function AddProviderEditorPanel({ provider, api, apiKey, baseUrl, modelId, model
|
|
|
2791
2832
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
2792
2833
|
type: "button",
|
|
2793
2834
|
variant: "ghost",
|
|
2794
|
-
size: "icon-
|
|
2835
|
+
size: "icon-compact",
|
|
2795
2836
|
"aria-label": "Back to provider list",
|
|
2796
2837
|
onClick: onBack,
|
|
2797
2838
|
children: /* @__PURE__ */ jsx(ArrowLeft, {})
|
|
@@ -2838,12 +2879,12 @@ function AddProviderEditorPanel({ provider, api, apiKey, baseUrl, modelId, model
|
|
|
2838
2879
|
children: [/* @__PURE__ */ jsx(Button$1, {
|
|
2839
2880
|
type: "button",
|
|
2840
2881
|
variant: "ghost",
|
|
2841
|
-
size: "
|
|
2882
|
+
size: "compact",
|
|
2842
2883
|
onClick: onCancel,
|
|
2843
2884
|
children: "Cancel"
|
|
2844
2885
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
2845
2886
|
type: "button",
|
|
2846
|
-
size: "
|
|
2887
|
+
size: "compact",
|
|
2847
2888
|
disabled: isPending || !canSave,
|
|
2848
2889
|
onClick: onSave,
|
|
2849
2890
|
children: [isPending ? /* @__PURE__ */ jsx(Spinner, { "data-icon": "inline-start" }) : null, "Save"]
|
|
@@ -2939,7 +2980,7 @@ function ActiveProviderList({ providers, editingProvider, form, operation, actio
|
|
|
2939
2980
|
children: [/* @__PURE__ */ jsxs(Button$1, {
|
|
2940
2981
|
type: "button",
|
|
2941
2982
|
variant: "ghost",
|
|
2942
|
-
size: "
|
|
2983
|
+
size: "compact",
|
|
2943
2984
|
className: cn(HIT_AREA_EXPAND_DENSE_CLASS, "h-7 px-2 text-xs text-muted-foreground transition-[background-color,color,transform] duration-150 hover:text-destructive active:scale-[0.96]"),
|
|
2944
2985
|
disabled: isPending || !canRemove,
|
|
2945
2986
|
"aria-label": `Remove ${provider.name}`,
|
|
@@ -2948,7 +2989,7 @@ function ActiveProviderList({ providers, editingProvider, form, operation, actio
|
|
|
2948
2989
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
2949
2990
|
type: "button",
|
|
2950
2991
|
variant: "ghost",
|
|
2951
|
-
size: "
|
|
2992
|
+
size: "compact",
|
|
2952
2993
|
className: cn(HIT_AREA_EXPAND_DENSE_CLASS, "h-7 px-2 text-xs transition-[background-color,transform] duration-150 active:scale-[0.96]"),
|
|
2953
2994
|
disabled: isPending,
|
|
2954
2995
|
onClick: () => {
|
|
@@ -3001,7 +3042,7 @@ function ActiveProviderList({ providers, editingProvider, form, operation, actio
|
|
|
3001
3042
|
className: "flex items-center justify-end",
|
|
3002
3043
|
children: /* @__PURE__ */ jsxs(Button$1, {
|
|
3003
3044
|
type: "button",
|
|
3004
|
-
size: "
|
|
3045
|
+
size: "compact",
|
|
3005
3046
|
disabled: isPending || !canSave,
|
|
3006
3047
|
onClick: () => onSave(provider.id),
|
|
3007
3048
|
children: [isPending ? /* @__PURE__ */ jsx(Spinner, { "data-icon": "inline-start" }) : null, "Save"]
|
|
@@ -3111,7 +3152,7 @@ function ProviderCredentialsSection({ isLoading, isPending, onOAuthLogin, onRemo
|
|
|
3111
3152
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
3112
3153
|
type: "button",
|
|
3113
3154
|
variant: "outline",
|
|
3114
|
-
size: "
|
|
3155
|
+
size: "compact",
|
|
3115
3156
|
disabled: isLoading || credentialProviders.length === 0,
|
|
3116
3157
|
onClick: openAddPicker,
|
|
3117
3158
|
children: [/* @__PURE__ */ jsx(Plus, { "data-icon": "inline-start" }), "Add provider"]
|
|
@@ -3127,7 +3168,7 @@ function ProviderCredentialsSection({ isLoading, isPending, onOAuthLogin, onRemo
|
|
|
3127
3168
|
}), /* @__PURE__ */ jsxs(Button$1, {
|
|
3128
3169
|
type: "button",
|
|
3129
3170
|
variant: "outline",
|
|
3130
|
-
size: "
|
|
3171
|
+
size: "compact",
|
|
3131
3172
|
disabled: credentialProviders.length === 0,
|
|
3132
3173
|
onClick: openAddPicker,
|
|
3133
3174
|
children: [/* @__PURE__ */ jsx(Plus, { "data-icon": "inline-start" }), "Add provider"]
|
|
@@ -3572,7 +3613,7 @@ function CatalogValueList({ addLabel, catalog, onChange, placeholder, values })
|
|
|
3572
3613
|
trailing: /* @__PURE__ */ jsx(Button$1, {
|
|
3573
3614
|
type: "button",
|
|
3574
3615
|
variant: "ghost",
|
|
3575
|
-
size: "icon-
|
|
3616
|
+
size: "icon-compact",
|
|
3576
3617
|
"aria-label": `Remove ${value}`,
|
|
3577
3618
|
onClick: () => onChange(values.filter((entry) => entry !== value)),
|
|
3578
3619
|
children: /* @__PURE__ */ jsx(Trash, {})
|
|
@@ -3772,7 +3813,7 @@ function SandboxProviderSection({ isLoading, isPending, onUpdateProvider, provid
|
|
|
3772
3813
|
trailing: /* @__PURE__ */ jsx(Button$1, {
|
|
3773
3814
|
type: "button",
|
|
3774
3815
|
variant: "ghost",
|
|
3775
|
-
size: "
|
|
3816
|
+
size: "compact",
|
|
3776
3817
|
className: cn(HIT_AREA_EXPAND_DENSE_CLASS, "h-7 px-2 text-xs transition-[background-color,transform] duration-150 active:scale-[0.96]"),
|
|
3777
3818
|
onClick: () => {
|
|
3778
3819
|
if (editing) {
|
|
@@ -3821,7 +3862,7 @@ function SandboxProviderSection({ isLoading, isPending, onUpdateProvider, provid
|
|
|
3821
3862
|
className: "flex items-center justify-end",
|
|
3822
3863
|
children: /* @__PURE__ */ jsxs(Button$1, {
|
|
3823
3864
|
type: "button",
|
|
3824
|
-
size: "
|
|
3865
|
+
size: "compact",
|
|
3825
3866
|
disabled: isPending || !canSave,
|
|
3826
3867
|
onClick: () => void handleSave(),
|
|
3827
3868
|
children: [isPending ? /* @__PURE__ */ jsx(Spinner, { "data-icon": "inline-start" }) : null, "Save"]
|
|
@@ -4018,48 +4059,78 @@ function BreadcrumbSeparator({ children, className, ...props }) {
|
|
|
4018
4059
|
children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
|
|
4019
4060
|
});
|
|
4020
4061
|
}
|
|
4021
|
-
function
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4062
|
+
function useTouchPrimary() {
|
|
4063
|
+
const [isTouchPrimary, setIsTouchPrimary] = useState2(false);
|
|
4064
|
+
useEffect2(() => {
|
|
4065
|
+
if (typeof window === "undefined") return;
|
|
4066
|
+
const controller = new AbortController();
|
|
4067
|
+
const { signal } = controller;
|
|
4068
|
+
const handleTouch = () => {
|
|
4069
|
+
const hasTouch = "ontouchstart" in window || navigator.maxTouchPoints > 0;
|
|
4070
|
+
const prefersTouch = window.matchMedia("(pointer: coarse)").matches;
|
|
4071
|
+
setIsTouchPrimary(hasTouch && prefersTouch);
|
|
4072
|
+
};
|
|
4073
|
+
window.matchMedia("(pointer: coarse)").addEventListener("change", handleTouch, { signal });
|
|
4074
|
+
window.addEventListener("pointerdown", handleTouch, { signal });
|
|
4075
|
+
handleTouch();
|
|
4076
|
+
return () => controller.abort();
|
|
4077
|
+
}, []);
|
|
4078
|
+
return isTouchPrimary;
|
|
4079
|
+
}
|
|
4080
|
+
var ScrollAreaContext = createContext4(false);
|
|
4081
|
+
var ScrollArea$1 = forwardRef7(({ className, children, viewportClassName, orientation: orientation2 = "vertical", ...props }, ref) => {
|
|
4082
|
+
const isTouch = useTouchPrimary();
|
|
4083
|
+
return /* @__PURE__ */ jsx(ScrollAreaContext.Provider, {
|
|
4084
|
+
value: isTouch,
|
|
4085
|
+
children: isTouch ? /* @__PURE__ */ jsx("div", {
|
|
4086
|
+
ref,
|
|
4087
|
+
role: "group",
|
|
4088
|
+
"data-slot": "scroll-area",
|
|
4089
|
+
"aria-roledescription": "scroll area",
|
|
4090
|
+
className: cn("relative overflow-hidden", className),
|
|
4091
|
+
...props,
|
|
4092
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
4028
4093
|
"data-slot": "scroll-area-viewport",
|
|
4029
|
-
className: "size-full rounded-[inherit]
|
|
4094
|
+
className: cn("size-full rounded-[inherit]", orientation2 === "vertical" && "overflow-y-auto", orientation2 === "horizontal" && "overflow-x-auto", orientation2 === "both" && "overflow-auto", viewportClassName),
|
|
4095
|
+
tabIndex: 0,
|
|
4030
4096
|
children
|
|
4031
|
-
})
|
|
4032
|
-
|
|
4033
|
-
|
|
4034
|
-
|
|
4097
|
+
})
|
|
4098
|
+
}) : /* @__PURE__ */ jsxs(index_parts_exports.Root, {
|
|
4099
|
+
ref,
|
|
4100
|
+
"data-slot": "scroll-area",
|
|
4101
|
+
className: cn("relative overflow-hidden", className),
|
|
4102
|
+
...props,
|
|
4103
|
+
children: [
|
|
4104
|
+
/* @__PURE__ */ jsx(index_parts_exports.Viewport, {
|
|
4105
|
+
"data-slot": "scroll-area-viewport",
|
|
4106
|
+
className: cn("size-full rounded-[inherit]", viewportClassName),
|
|
4107
|
+
children: /* @__PURE__ */ jsx(index_parts_exports.Content, { children })
|
|
4108
|
+
}),
|
|
4109
|
+
orientation2 !== "horizontal" && /* @__PURE__ */ jsx(ScrollBar, { orientation: "vertical" }),
|
|
4110
|
+
orientation2 !== "vertical" && /* @__PURE__ */ jsx(ScrollBar, { orientation: "horizontal" }),
|
|
4111
|
+
orientation2 === "both" && /* @__PURE__ */ jsx(index_parts_exports.Corner, {})
|
|
4112
|
+
]
|
|
4113
|
+
})
|
|
4035
4114
|
});
|
|
4036
|
-
}
|
|
4037
|
-
|
|
4115
|
+
});
|
|
4116
|
+
ScrollArea$1.displayName = "ScrollArea";
|
|
4117
|
+
var ScrollBar = forwardRef7(({ className, orientation: orientation2 = "vertical", ...props }, ref) => {
|
|
4118
|
+
const isTouch = useContext4(ScrollAreaContext);
|
|
4119
|
+
const shape = useShape();
|
|
4120
|
+
if (isTouch) return null;
|
|
4038
4121
|
return /* @__PURE__ */ jsx(index_parts_exports.Scrollbar, {
|
|
4039
|
-
|
|
4040
|
-
"data-orientation": orientation2,
|
|
4122
|
+
ref,
|
|
4041
4123
|
orientation: orientation2,
|
|
4042
|
-
|
|
4124
|
+
"data-slot": "scroll-area-scrollbar",
|
|
4125
|
+
className: cn("group/scrollbar absolute z-20 flex touch-none select-none", "opacity-0 transition-opacity duration-120 ease-out delay-160", "data-[hovering]:duration-160 data-[scrolling]:duration-160", "data-[hovering]:opacity-100 data-[scrolling]:opacity-100", "data-[hovering]:delay-0 data-[scrolling]:delay-0", orientation2 === "vertical" && "top-0 right-0 h-full w-2.5", orientation2 === "horizontal" && "bottom-0 left-0 h-2.5 w-full flex-col", className),
|
|
4043
4126
|
...props,
|
|
4044
4127
|
children: /* @__PURE__ */ jsx(index_parts_exports.Thumb, {
|
|
4045
4128
|
"data-slot": "scroll-area-thumb",
|
|
4046
|
-
className: "relative
|
|
4129
|
+
className: cn("relative bg-[rgb(var(--overlay)/0.08)] transition-[background-color,width,height] duration-160 ease-in-out", "group-hover/scrollbar:bg-[rgb(var(--overlay)/0.12)] active:!bg-[rgb(var(--overlay)/0.16)]", shape.bg, orientation2 === "vertical" && "mx-auto my-1 w-1 -translate-x-0.5 h-[var(--scroll-area-thumb-height)] group-hover/scrollbar:w-1.5", orientation2 === "horizontal" && "my-auto mx-1 h-1 -translate-y-0.5 w-[var(--scroll-area-thumb-width)] group-hover/scrollbar:h-1.5")
|
|
4047
4130
|
})
|
|
4048
4131
|
});
|
|
4049
|
-
}
|
|
4050
|
-
|
|
4051
|
-
return /* @__PURE__ */ jsxs(Field, {
|
|
4052
|
-
orientation: "horizontal",
|
|
4053
|
-
className: "items-center justify-between gap-6 rounded-xl border p-4",
|
|
4054
|
-
children: [/* @__PURE__ */ jsxs("div", {
|
|
4055
|
-
className: "min-w-0",
|
|
4056
|
-
children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), /* @__PURE__ */ jsx(FieldDescription, { children: description })]
|
|
4057
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
4058
|
-
className: "shrink-0",
|
|
4059
|
-
children
|
|
4060
|
-
})]
|
|
4061
|
-
});
|
|
4062
|
-
}
|
|
4132
|
+
});
|
|
4133
|
+
ScrollBar.displayName = "ScrollBar";
|
|
4063
4134
|
function useSettingsForm() {
|
|
4064
4135
|
const { isLoadingMcp, isLoadingProviders, isUpdatingMcp, isUpdatingProvider, mcpConnections = [], modelCatalog, onDiscoverModels, onMcpOAuth, onOAuthLogin, onRemoveMcp, onRemoveProvider, onThemePreferenceChange, onUpdateMcp, onUpdateProvider, providers = [], saveSettings, settings, settingsLoading, themePreference } = useSettingsActionsContext();
|
|
4065
4136
|
const { models, resources } = useChatPanelDataContext();
|
|
@@ -4259,7 +4330,7 @@ function SettingsDialogPaneContent({ activeTab, composerIntent, form, onComposer
|
|
|
4259
4330
|
onThemePreferenceChange,
|
|
4260
4331
|
themePreference
|
|
4261
4332
|
}),
|
|
4262
|
-
/* @__PURE__ */ jsx(
|
|
4333
|
+
/* @__PURE__ */ jsx(SettingsRow, {
|
|
4263
4334
|
label: "Density",
|
|
4264
4335
|
description: "Adjust spacing across chat and panels.",
|
|
4265
4336
|
children: /* @__PURE__ */ jsx(Select$1, {
|
|
@@ -4275,7 +4346,7 @@ function SettingsDialogPaneContent({ activeTab, composerIntent, form, onComposer
|
|
|
4275
4346
|
}]
|
|
4276
4347
|
})
|
|
4277
4348
|
}),
|
|
4278
|
-
/* @__PURE__ */ jsx(
|
|
4349
|
+
/* @__PURE__ */ jsx(SettingsRow, {
|
|
4279
4350
|
label: "Motion",
|
|
4280
4351
|
description: "Respect the system setting or reduce UI motion.",
|
|
4281
4352
|
children: /* @__PURE__ */ jsx(Select$1, {
|
|
@@ -4303,7 +4374,7 @@ function SettingsDialogPaneContent({ activeTab, composerIntent, form, onComposer
|
|
|
4303
4374
|
className: "text-sm text-muted-foreground",
|
|
4304
4375
|
children: "Control transcript behavior."
|
|
4305
4376
|
})] }),
|
|
4306
|
-
/* @__PURE__ */ jsx(
|
|
4377
|
+
/* @__PURE__ */ jsx(SettingsRow, {
|
|
4307
4378
|
label: "Streaming transcript",
|
|
4308
4379
|
description: "Follow new output or preserve the reading position.",
|
|
4309
4380
|
children: /* @__PURE__ */ jsx(Select$1, {
|
|
@@ -4402,7 +4473,7 @@ function SettingsDialogPaneContent({ activeTab, composerIntent, form, onComposer
|
|
|
4402
4473
|
className: "text-sm text-muted-foreground",
|
|
4403
4474
|
children: "Set local conversation preferences. Provider and workspace configuration remains Fleet Prime-owned."
|
|
4404
4475
|
})] }),
|
|
4405
|
-
/* @__PURE__ */ jsx(
|
|
4476
|
+
/* @__PURE__ */ jsx(SettingsRow, {
|
|
4406
4477
|
label: "Confirm session deletion",
|
|
4407
4478
|
description: "Require confirmation before deleting a saved conversation.",
|
|
4408
4479
|
children: /* @__PURE__ */ jsx(Switch$1, {
|