openfox 1.6.70 → 1.6.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZFO7KAC3.js → chunk-WNDXRFVQ.js} +2 -2
- package/dist/{chunk-RSVPZDUN.js → chunk-YNWDWIX2.js} +2 -2
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/package.json +1 -1
- package/dist/{serve-WGZZWRWY.js → serve-Y7CERCIH.js} +2 -2
- package/dist/server/index.js +1 -1
- package/dist/web/__inspect__.js +15 -0
- package/dist/web/assets/{index-CRQDugUa.css → index-Da8AupAk.css} +1 -1
- package/dist/web/assets/{index-C4MoWATB.js → index-o22LDSSr.js} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
|
@@ -5058,7 +5058,7 @@ function createTerminalRoutes() {
|
|
|
5058
5058
|
}
|
|
5059
5059
|
|
|
5060
5060
|
// src/constants.ts
|
|
5061
|
-
var VERSION = "1.6.
|
|
5061
|
+
var VERSION = "1.6.71";
|
|
5062
5062
|
|
|
5063
5063
|
// src/server/index.ts
|
|
5064
5064
|
var __dirname2 = dirname5(fileURLToPath4(import.meta.url));
|
|
@@ -5972,4 +5972,4 @@ export {
|
|
|
5972
5972
|
createServerHandle,
|
|
5973
5973
|
createServer
|
|
5974
5974
|
};
|
|
5975
|
-
//# sourceMappingURL=chunk-
|
|
5975
|
+
//# sourceMappingURL=chunk-WNDXRFVQ.js.map
|
|
@@ -179,7 +179,7 @@ async function runCli(options) {
|
|
|
179
179
|
if (!configExists) {
|
|
180
180
|
await runNetworkSetup(mode);
|
|
181
181
|
}
|
|
182
|
-
const { runServe } = await import("./serve-
|
|
182
|
+
const { runServe } = await import("./serve-Y7CERCIH.js");
|
|
183
183
|
await runServe({
|
|
184
184
|
mode,
|
|
185
185
|
port: values.port ? parseInt(values.port) : void 0,
|
|
@@ -192,4 +192,4 @@ async function runCli(options) {
|
|
|
192
192
|
export {
|
|
193
193
|
runCli
|
|
194
194
|
};
|
|
195
|
-
//# sourceMappingURL=chunk-
|
|
195
|
+
//# sourceMappingURL=chunk-YNWDWIX2.js.map
|
package/dist/cli/dev.js
CHANGED
package/dist/cli/index.js
CHANGED
package/dist/package.json
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
VERSION,
|
|
8
8
|
createServer
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WNDXRFVQ.js";
|
|
10
10
|
import "./chunk-K6NHXJM3.js";
|
|
11
11
|
import "./chunk-KVZIYCT4.js";
|
|
12
12
|
import "./chunk-RBPOAAIZ.js";
|
|
@@ -188,4 +188,4 @@ async function runServe(options) {
|
|
|
188
188
|
export {
|
|
189
189
|
runServe
|
|
190
190
|
};
|
|
191
|
-
//# sourceMappingURL=serve-
|
|
191
|
+
//# sourceMappingURL=serve-Y7CERCIH.js.map
|
package/dist/server/index.js
CHANGED
package/dist/web/__inspect__.js
CHANGED
|
@@ -158,12 +158,14 @@
|
|
|
158
158
|
});
|
|
159
159
|
|
|
160
160
|
popup.querySelector('.__fox-cancel').addEventListener('click', function(e) {
|
|
161
|
+
e.preventDefault();
|
|
161
162
|
e.stopPropagation();
|
|
162
163
|
window.__foxPopupOpen = false;
|
|
163
164
|
popup.remove();
|
|
164
165
|
});
|
|
165
166
|
|
|
166
167
|
popup.querySelector('.__fox-send').addEventListener('click', function(e) {
|
|
168
|
+
e.preventDefault();
|
|
167
169
|
e.stopPropagation();
|
|
168
170
|
if (window.__foxSentPending) return;
|
|
169
171
|
window.__foxSentPending = true;
|
|
@@ -224,8 +226,14 @@
|
|
|
224
226
|
|
|
225
227
|
document.addEventListener('keydown', function(e) {
|
|
226
228
|
if (e.key === 'Escape' && window.__foxInspectMode) {
|
|
229
|
+
clearHighlights();
|
|
227
230
|
setInspectMode(false);
|
|
228
231
|
}
|
|
232
|
+
if (e.ctrlKey && e.shiftKey && e.key === 'X') {
|
|
233
|
+
e.preventDefault();
|
|
234
|
+
if (window.__foxInspectMode) clearHighlights();
|
|
235
|
+
setInspectMode(!window.__foxInspectMode);
|
|
236
|
+
}
|
|
229
237
|
});
|
|
230
238
|
|
|
231
239
|
window.addEventListener('message', function(e) {
|
|
@@ -247,8 +255,15 @@
|
|
|
247
255
|
document.head.appendChild(overlayStyle);
|
|
248
256
|
document.body.appendChild(overlay);
|
|
249
257
|
toggleBtn = document.getElementById('__fox-toggle');
|
|
258
|
+
var widget = document.getElementById('__fox-widget');
|
|
259
|
+
widget.addEventListener('mousedown', function(e) {
|
|
260
|
+
e.preventDefault();
|
|
261
|
+
e.stopPropagation();
|
|
262
|
+
}, true);
|
|
250
263
|
toggleBtn.addEventListener('click', function(e) {
|
|
264
|
+
e.preventDefault();
|
|
251
265
|
e.stopPropagation();
|
|
266
|
+
if (window.__foxInspectMode) clearHighlights();
|
|
252
267
|
setInspectMode(!window.__foxInspectMode);
|
|
253
268
|
});
|
|
254
269
|
overlay.style.display = window.__foxInspectEnabled ? '' : 'none';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAASUABAAAAAACRAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3oLIAABNgIkAzoEIAWFHgeBFAwHG3AHKB4HzukrRjyF5Gb4kQ/B873d17mv8TWkoqUUGaHodJCtoqntw7m8tiPWyGkfWDU/IMpzVk4zAs9Czv3c7Os5NvKFG1Ht9vBVXySRZpJc4tTrbM3sTRFcLa3zVboKWRIoAksKSKgqUQWEwlSoqjp44V5J9/kjd0+Fi5xaFjwJArgBAIJgIAgCCAI4CdNMqGuYXYUKdADLAkAAJwl6iX0+bZqEm1AH0Hu9rvrJHwxQG1Q/gFYwWYbgTRWgwEESVzbmtjQAt3DXO7Tu/+9Q/KNKWhTCgZ8fQSWoL0CUUgTBjgL8iEAcce7YHBeA8ZvogieCnxI0BCVeACCAAhBD/oDcAdUPABSgAX4kBPBTwjCAjwYSCneiqF65LUo/qXdYFrRwTujtMrKm07plTbSqLQFAiHBN7E4DG5wkiGXhCYBNETh3K/AciHN69iFfQjFOr9EXQQAAQXRNszs8PR0OH4fDV/dwGe76CHdj1MQa11DXYGcfZ6+B1X0OfwjY+i7KpQ1w9d+1z3/HydCB1f3U8A0fRFv+0bXxPWrZu3d9Nn4UcbLs/QCXLH/j3PCKblKOiZxLOR78W9brPo7eGTLz/F27ZPmePQdCB1YP4nJU91o4gU9cy64L3c3SPu8GfDn6ZXD2cGmllVqSxtD5vCXHm5xaeHlnpffx7DcPvXog5NnjA//cPz2btsz3yf+0MI8ri33tuv7upNbYmW5STbosW8bYItV/SPzxvXC0KnpWnFdC91oojit5Lyo6WcJQ1YzwBYbi52ohJVpcxfcHBqsv0nFz8U74rzS6M7r0RVlXZ3jJC4G92O//7Lm78VOtnUx+aQxAzsqPnrRr1t9zDrezKePvZ027x+fGte4s4NXu7/jEp3G9cM1bICYgACbuETUUD5wmenGXA/IBpAKVrl0AEJ5cqr6Q89tGq+SpqkDfX2DtG+pZ9teuae0AX98c301CX179InyErnSG8WCiABB4HFbVrw/lpTdBIOk82nXbpHKoQGyBpUovAAD4XQA8ZTUCeBJHIpI0v0FRrgcnckV3ANckrwYJKXEihQfdSKPER6XeExmEeEMmSe6QBwWmkZdmSOSthhibgIkBlUYreBKd/0NeVAE9WAyEaQpH6KikDWlUVg43Jy2FOmaYlsZhDEGZXO3mWEyWHI6zuaJkMlcSQ9k4F+KidIiFyZItGDc7r1pUj6wP6zrWB0/fbeeFeHl4YOvETMNiM8Ny+7OO6Qh2wur20YVxFts5dlORdl5Kwd5utR7SRcxqX8RA5Ehacha76hg7c6yzNm/Xf6vOLNrv544lIEkWg7xWo/ItBAeIJEmt0XgBwgM8gTifoiiLJroYYooNTeziEKe4zOoR/wvIKp89hSr+6jFAqw/LaonjmZHSscMNg4iPlWpFrO1RN3zkMU+/xUP+JQ99TbvTl1Vg0gtirT6lbwYAAAA=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQAAAAQtAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVDYAdBEICoRkg3gLIAABNgIkAzoEIAWFIgeBFAwHG1wHKI7DuPEacDIiFJ/g+f47+1/7dIcdXTlD8DKqmcw4eIC+AOCPf6+qiWq3h6+aSCLNJDnkqX9Xl+rv/6dSBcwSBCzEoVqxNbp5SqPMYdKBQhBq1dK9ggSsgYUoGnHOqttMECvWjIJfPA8cjQAuAEAQLAiClASc7M6OkfbO/nHs6ACmCYBxZXKP4s9uXIHECh4AdEhX0yIHC6jzgAb65sshStMMChwEfWVjZe8Anset/6H93x8jOyL5fuS67z4Dlam+BPyH/pV2FLCZAOnU0XPzCQGiJ7AkXgSFhqDEB4AAoAAN2ExDgM10joCNfDQUbvxaXM8LovT79D9MEyYU9+q/myT9p/m8uWi2mLJBPbzcih2wYIPzBDFNvABt315OXwy8BaRnbo5hXsOS5taknX4FguiaZnd4vQ7HxnBnm3SPYXHrQbclvOgyDhsHnZPO8f3G5I2fbr34Y7+hzRozVzyw5bKHdu03plXgvE9FO/Uz4/xPUKd8/PHk+R+JODnlg1lDTv3Qed77zDNqRszaqHUQT248kUPGzBXXXHGFnHrVVdft2m8c4PhpjB+/QEqMU54xruc6m3w8++XNXx4sya9rMvNq88m6X1zeOMlRuQ+/nvNw4+ZrCt58yDdSVOQdfoi/jc/ePfZY+1taYaH21FH2Y4fGG+RVNJkIN4SSiWj3ZKGG1oojoYr2SNWFVbHvY1XX1PR+H6y+oKrqgmryqj1UXnmk5cKWysPM3R4Uh5svYo6saAtU3V297+d91U/X/frzLvUdqiqfruKvhx5+OeOYxbHI7SenQum+PTw/fvRLGQ/jiufOn3/S+vlsfGn9h4Zb96fekZ7xRups68FhVCYCWHHvZVIPxjanr3NABSALqkR7FMBOulF9ScHvV3np+6pK/eEzRx877K3/z65pvwN89eGtV3Ly5ft/25ngaiSYDVYUAAKvIKimMdLO6YBQEY+aZpbXZ5WinTBQXwAA4LMAXuNUBPCSTmMfjd6jpNLNjbToDuBpaR9AoTBbUeERO2o0erNeR6KFne5HK/nOQA+VBtFnt1LtBj6pJQIutnLwipz/Ix9OYNSqZQEreiQELIkKmRIRNWdewpiIZVGtVi0J6xWR0ComIGpFnN+AVStWzUtIWBNXq0iRuJCYqDUJcYXiopYUWhUzp8iQTv20dtO84Agw6YrhuOijfqUKlSpRAruvTq9WdeQw2vs5SUsCYhdt7icIt1nNkseKPZzgV6q4FfYbH4ZIBcThYTEgLIgIkYRbJLl7/rks+ObZDxydE8W9LymoUMiqZUVbtVv0GNkcispQM0IpEG7sBdK9IYr6aKKLRaxiQxO7OMQphrUlGIscFbElV6LF5S0dQN5RbRoUdRbWWOYCy8sB83RxS7FqG/UEQslE5Nsd5v93uF3T0bLiypD/uJhn3q9fCAA=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-bg-primary: 13 17 23;--color-bg-secondary: 22 27 34;--color-bg-tertiary: 33 38 45;--color-primary: 10 10 10;--color-secondary: 20 20 20;--color-text-primary: 255 255 255;--color-text-secondary: 139 148 158;--color-text-muted: 72 79 88;--color-accent-primary: 88 166 255;--color-accent-success: 63 185 80;--color-accent-warning: 210 153 34;--color-accent-error: 248 81 73;--color-border: 40 46 54}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}body{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary) / var(--tw-bg-opacity, 1));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}::-webkit-scrollbar{height:.25rem;width:.25rem}::-webkit-scrollbar-track{--tw-bg-opacity: 1;background-color:rgb(var(--color-secondary) / var(--tw-bg-opacity, 1))}::-webkit-scrollbar-thumb{border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1))}::-webkit-scrollbar-thumb:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-text-muted) / var(--tw-bg-opacity, 1))}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.panel{border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-secondary) / var(--tw-bg-opacity, 1))}.btn{border-radius:.25rem;padding:.375rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary{background-color:rgb(var(--color-accent-primary) / .25);--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.btn-primary:hover{background-color:rgb(var(--color-accent-primary) / .4)}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.\!input{border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1));padding:.375rem .5rem;font-size:.875rem;line-height:1.25rem}.\!input::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.\!input::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.\!input:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--color-accent-primary) / .5)}.input{border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1));padding:.375rem .5rem;font-size:.875rem;line-height:1.25rem}.input::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.input::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.input:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--color-accent-primary) / .5)}.feed-item{margin-bottom:1rem}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.-left-1{left:-.25rem}.-right-2{right:-.5rem}.-top-1{top:-.25rem}.-top-2{top:-.5rem}.-top-8{top:-2rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-12{right:3rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-\[32px\]{top:32px}.top-\[50vh\]{top:50vh}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.order-first{order:-9999}.float-right{float:right}.-m-4{margin:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-mb-4{margin-bottom:-1rem}.-mt-1{margin-top:-.25rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1\.5{margin-right:.375rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.list-item{display:list-item}.hidden{display:none}.size-8{width:2rem;height:2rem}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-80{height:20rem}.h-\[18px\]{height:18px}.h-\[34px\]{height:34px}.h-\[50vh\]{height:50vh}.h-\[78px\]{height:78px}.h-\[90vh\]{height:90vh}.h-\[calc\(100vh-32px\)\]{height:calc(100vh - 32px)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[200px\]{max-height:200px}.max-h-\[256px\]{max-height:256px}.max-h-\[40vh\]{max-height:40vh}.max-h-\[45vh\]{max-height:45vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100vh-10rem\)\]{max-height:calc(100vh - 10rem)}.min-h-0{min-height:0px}.min-h-80{min-height:20rem}.min-h-96{min-height:24rem}.min-h-\[120px\]{min-height:120px}.min-h-\[150px\]{min-height:150px}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[10\%\]{width:10%}.w-\[11\%\]{width:11%}.w-\[14\%\]{width:14%}.w-\[18px\]{width:18px}.w-\[2\%\]{width:2%}.w-\[300px\]{width:300px}.w-\[320px\]{width:320px}.w-\[7\%\]{width:7%}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-36{min-width:9rem}.min-w-\[100px\]{min-width:100px}.min-w-\[140px\]{min-width:140px}.min-w-\[160px\]{min-width:160px}.min-w-full{min-width:100%}.max-w-16{max-width:4rem}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\[200px\]{max-width:200px}.max-w-\[256px\]{max-width:256px}.max-w-\[75\%\]{max-width:75%}.max-w-\[95vw\]{max-width:95vw}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-6{--tw-translate-x: 1.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-bounce{animation:bounce 1s infinite}@keyframes highlight-fade{0%{box-shadow:0 0 0 2px rgb(var(--color-accent-primary) / 1)}to{box-shadow:0 0 0 2px rgb(var(--color-accent-primary) / 0)}}.animate-highlight-fade{animation:highlight-fade 3s ease-out forwards}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes slide-down{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.animate-slide-down{animation:slide-down .2s ease-out forwards}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[2\.5rem_1fr\]{grid-template-columns:2.5rem 1fr}.grid-cols-\[3px_1\.5rem_1fr\]{grid-template-columns:3px 1.5rem 1fr}.grid-cols-\[3px_auto_1\.25rem_1fr\]{grid-template-columns:3px auto 1.25rem 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-divide-opacity, 1))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[\#333\]{--tw-border-opacity: 1;border-color:rgb(51 51 51 / var(--tw-border-opacity, 1))}.border-accent-error\/30{border-color:rgb(var(--color-accent-error) / .3)}.border-accent-primary{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1))}.border-accent-primary\/50{border-color:rgb(var(--color-accent-primary) / .5)}.border-accent-success\/30{border-color:rgb(var(--color-accent-success) / .3)}.border-accent-warning\/30{border-color:rgb(var(--color-accent-warning) / .3)}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/50{border-color:#f59e0b80}.border-blue-500\/30{border-color:#3b82f64d}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}.border-border\/50{border-color:rgb(var(--color-border) / .5)}.border-border\/60{border-color:rgb(var(--color-border) / .6)}.border-gray-500\/30{border-color:#6b72804d}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/50{border-color:#ef444480}.border-slate-500\/30{border-color:#64748b4d}.border-teal-500\/30{border-color:#14b8a64d}.border-text-muted{--tw-border-opacity: 1;border-color:rgb(var(--color-text-muted) / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-yellow-500\/30{border-color:#eab3084d}.border-t-transparent{border-top-color:transparent}.bg-\[\#1a1a1a\]{--tw-bg-opacity: 1;background-color:rgb(26 26 26 / var(--tw-bg-opacity, 1))}.bg-\[\#252525\]{--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.bg-accent-error{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-error) / var(--tw-bg-opacity, 1))}.bg-accent-error\/10{background-color:rgb(var(--color-accent-error) / .1)}.bg-accent-error\/20{background-color:rgb(var(--color-accent-error) / .2)}.bg-accent-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-primary) / var(--tw-bg-opacity, 1))}.bg-accent-primary\/10{background-color:rgb(var(--color-accent-primary) / .1)}.bg-accent-primary\/15{background-color:rgb(var(--color-accent-primary) / .15)}.bg-accent-primary\/20{background-color:rgb(var(--color-accent-primary) / .2)}.bg-accent-primary\/25{background-color:rgb(var(--color-accent-primary) / .25)}.bg-accent-primary\/30{background-color:rgb(var(--color-accent-primary) / .3)}.bg-accent-success{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-success) / var(--tw-bg-opacity, 1))}.bg-accent-success\/10{background-color:rgb(var(--color-accent-success) / .1)}.bg-accent-success\/20{background-color:rgb(var(--color-accent-success) / .2)}.bg-accent-warning{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-warning) / var(--tw-bg-opacity, 1))}.bg-accent-warning\/10{background-color:rgb(var(--color-accent-warning) / .1)}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/20{background-color:#f59e0b33}.bg-bg-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-primary) / var(--tw-bg-opacity, 1))}.bg-bg-primary\/50{background-color:rgb(var(--color-bg-primary) / .5)}.bg-bg-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-secondary) / var(--tw-bg-opacity, 1))}.bg-bg-tertiary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1))}.bg-bg-tertiary\/10{background-color:rgb(var(--color-bg-tertiary) / .1)}.bg-bg-tertiary\/20{background-color:rgb(var(--color-bg-tertiary) / .2)}.bg-bg-tertiary\/30{background-color:rgb(var(--color-bg-tertiary) / .3)}.bg-bg-tertiary\/5{background-color:rgb(var(--color-bg-tertiary) / .05)}.bg-bg-tertiary\/50{background-color:rgb(var(--color-bg-tertiary) / .5)}.bg-bg-tertiary\/60{background-color:rgb(var(--color-bg-tertiary) / .6)}.bg-bg-tertiary\/\[2\.5\%\]{background-color:rgb(var(--color-bg-tertiary) / 2.5%)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/15{background-color:#3b82f626}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-900{--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.bg-border{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.bg-cyan-900{--tw-bg-opacity: 1;background-color:rgb(22 78 99 / var(--tw-bg-opacity, 1))}.bg-gray-500\/10{background-color:#6b72801a}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-green-400\/60{background-color:#4ade8099}.bg-green-500\/20{background-color:#22c55e33}.bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.bg-green-950\/30{background-color:#052e164d}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary) / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-500\/20{background-color:#a855f733}.bg-purple-900{--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.bg-red-400\/60{background-color:#f8717199}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-red-500\/20{background-color:#ef444433}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.bg-red-950\/30{background-color:#450a0a4d}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-secondary) / var(--tw-bg-opacity, 1))}.bg-secondary\/50{background-color:rgb(var(--color-secondary) / .5)}.bg-slate-500\/10{background-color:#64748b1a}.bg-teal-500\/10{background-color:#14b8a61a}.bg-text-muted{--tw-bg-opacity: 1;background-color:rgb(var(--color-text-muted) / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.bg-yellow-900{--tw-bg-opacity: 1;background-color:rgb(113 63 18 / var(--tw-bg-opacity, 1))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-5{padding-right:1.25rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-\[15vh\]{padding-top:15vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,Consolas,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[8px\]{font-size:8px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.leading-\[1\.5rem\]{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#888\]{--tw-text-opacity: 1;color:rgb(136 136 136 / var(--tw-text-opacity, 1))}.text-accent-error{--tw-text-opacity: 1;color:rgb(var(--color-accent-error) / var(--tw-text-opacity, 1))}.text-accent-error\/70{color:rgb(var(--color-accent-error) / .7)}.text-accent-primary{--tw-text-opacity: 1;color:rgb(var(--color-accent-primary) / var(--tw-text-opacity, 1))}.text-accent-primary\/45{color:rgb(var(--color-accent-primary) / .45)}.text-accent-success{--tw-text-opacity: 1;color:rgb(var(--color-accent-success) / var(--tw-text-opacity, 1))}.text-accent-warning{--tw-text-opacity: 1;color:rgb(var(--color-accent-warning) / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/70{color:#fbbf24b3}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-border\/40{color:rgb(var(--color-border) / .4)}.text-border\/60{color:rgb(var(--color-border) / .6)}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-400\/70{color:#4ade80b3}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-pink-400{--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-400\/70{color:#f87171b3}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-teal-200{--tw-text-opacity: 1;color:rgb(153 246 228 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-text-muted{--tw-text-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-text-opacity, 1))}.text-text-muted\/70{color:rgb(var(--color-text-muted) / .7)}.text-text-muted\/80{color:rgb(var(--color-text-muted) / .8)}.text-text-primary{--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.text-text-secondary{--tw-text-opacity: 1;color:rgb(var(--color-text-secondary) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.decoration-red-400\/30{text-decoration-color:#f871714d}.placeholder-text-muted::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.placeholder-text-muted::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.accent-accent-primary{accent-color:rgb(var(--color-accent-primary) / 1)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.\!transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:text-text-muted::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-text-opacity, 1))}.placeholder\:text-text-muted::placeholder{--tw-text-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-text-opacity, 1))}.first\:mt-0:first-child{margin-top:0}.first\:border-l-0:first-child{border-left-width:0px}.last\:mb-0:last-child{margin-bottom:0}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-accent-primary:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1))}.hover\:border-accent-primary\/40:hover{border-color:rgb(var(--color-accent-primary) / .4)}.hover\:border-border:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}.hover\:border-text-muted:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-text-muted) / var(--tw-border-opacity, 1))}.hover\:bg-\[\#333\]:hover{--tw-bg-opacity: 1;background-color:rgb(51 51 51 / var(--tw-bg-opacity, 1))}.hover\:bg-accent-error\/10:hover{background-color:rgb(var(--color-accent-error) / .1)}.hover\:bg-accent-error\/20:hover{background-color:rgb(var(--color-accent-error) / .2)}.hover\:bg-accent-error\/30:hover{background-color:rgb(var(--color-accent-error) / .3)}.hover\:bg-accent-error\/80:hover{background-color:rgb(var(--color-accent-error) / .8)}.hover\:bg-accent-primary\/20:hover{background-color:rgb(var(--color-accent-primary) / .2)}.hover\:bg-accent-primary\/30:hover{background-color:rgb(var(--color-accent-primary) / .3)}.hover\:bg-accent-primary\/40:hover{background-color:rgb(var(--color-accent-primary) / .4)}.hover\:bg-accent-primary\/50:hover{background-color:rgb(var(--color-accent-primary) / .5)}.hover\:bg-accent-primary\/80:hover{background-color:rgb(var(--color-accent-primary) / .8)}.hover\:bg-accent-primary\/90:hover{background-color:rgb(var(--color-accent-primary) / .9)}.hover\:bg-bg-primary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-primary) / var(--tw-bg-opacity, 1))}.hover\:bg-bg-primary\/30:hover{background-color:rgb(var(--color-bg-primary) / .3)}.hover\:bg-bg-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-secondary) / var(--tw-bg-opacity, 1))}.hover\:bg-bg-secondary\/50:hover{background-color:rgb(var(--color-bg-secondary) / .5)}.hover\:bg-bg-tertiary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1))}.hover\:bg-bg-tertiary\/35:hover{background-color:rgb(var(--color-bg-tertiary) / .35)}.hover\:bg-bg-tertiary\/40:hover{background-color:rgb(var(--color-bg-tertiary) / .4)}.hover\:bg-bg-tertiary\/50:hover{background-color:rgb(var(--color-bg-tertiary) / .5)}.hover\:bg-bg-tertiary\/80:hover{background-color:rgb(var(--color-bg-tertiary) / .8)}.hover\:bg-border:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/30:hover{background-color:#ef44444d}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:rgb(var(--color-secondary) / .8)}.hover\:text-\[\#ccc\]:hover{--tw-text-opacity: 1;color:rgb(204 204 204 / var(--tw-text-opacity, 1))}.hover\:text-accent-error:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-error) / var(--tw-text-opacity, 1))}.hover\:text-accent-primary:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-primary) / var(--tw-text-opacity, 1))}.hover\:text-accent-primary\/80:hover{color:rgb(var(--color-accent-primary) / .8)}.hover\:text-red-200:hover{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-text-primary:hover{--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.hover\:text-text-secondary:hover{--tw-text-opacity: 1;color:rgb(var(--color-text-secondary) / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.focus\:border-accent-primary:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-accent-primary:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--color-accent-primary) / var(--tw-ring-opacity, 1))}.focus\:ring-accent-primary\/50:focus{--tw-ring-color: rgb(var(--color-accent-primary) / .5)}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-accent-primary{--tw-text-opacity: 1;color:rgb(var(--color-accent-primary) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:opacity-100{opacity:1}@media not all and (min-width:640px){.max-sm\:block{display:block}}@media(min-width:640px){.sm\:block{display:block}.sm\:max-h-\[50vh\]{max-height:50vh}.sm\:w-1\/2{width:50%}.sm\:w-20{width:5rem}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:border-b-0{border-bottom-width:0px}.sm\:border-r{border-right-width:1px}.sm\:p-8{padding:2rem}}@media(min-width:768px){.md\:relative{position:relative}.md\:right-16{right:4rem}.md\:right-4{right:1rem}.md\:mb-8{margin-bottom:2rem}.md\:block{display:block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-0{width:0px}.md\:w-\[300px\]{width:300px}.md\:shrink-0{flex-shrink:0}.md\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:overflow-hidden{overflow:hidden}.md\:p-4{padding:1rem}.md\:p-8{padding:2rem}.md\:px-4{padding-left:1rem;padding-right:1rem}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&_li\>p\]\:inline li>p{display:inline}/**
|
|
1
|
+
@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAASUABAAAAAACRAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3oLIAABNgIkAzoEIAWFHgeBFAwHG3AHKB4HzukrRjyF5Gb4kQ/B873d17mv8TWkoqUUGaHodJCtoqntw7m8tiPWyGkfWDU/IMpzVk4zAs9Czv3c7Os5NvKFG1Ht9vBVXySRZpJc4tTrbM3sTRFcLa3zVboKWRIoAksKSKgqUQWEwlSoqjp44V5J9/kjd0+Fi5xaFjwJArgBAIJgIAgCCAI4CdNMqGuYXYUKdADLAkAAJwl6iX0+bZqEm1AH0Hu9rvrJHwxQG1Q/gFYwWYbgTRWgwEESVzbmtjQAt3DXO7Tu/+9Q/KNKWhTCgZ8fQSWoL0CUUgTBjgL8iEAcce7YHBeA8ZvogieCnxI0BCVeACCAAhBD/oDcAdUPABSgAX4kBPBTwjCAjwYSCneiqF65LUo/qXdYFrRwTujtMrKm07plTbSqLQFAiHBN7E4DG5wkiGXhCYBNETh3K/AciHN69iFfQjFOr9EXQQAAQXRNszs8PR0OH4fDV/dwGe76CHdj1MQa11DXYGcfZ6+B1X0OfwjY+i7KpQ1w9d+1z3/HydCB1f3U8A0fRFv+0bXxPWrZu3d9Nn4UcbLs/QCXLH/j3PCKblKOiZxLOR78W9brPo7eGTLz/F27ZPmePQdCB1YP4nJU91o4gU9cy64L3c3SPu8GfDn6ZXD2cGmllVqSxtD5vCXHm5xaeHlnpffx7DcPvXog5NnjA//cPz2btsz3yf+0MI8ri33tuv7upNbYmW5STbosW8bYItV/SPzxvXC0KnpWnFdC91oojit5Lyo6WcJQ1YzwBYbi52ohJVpcxfcHBqsv0nFz8U74rzS6M7r0RVlXZ3jJC4G92O//7Lm78VOtnUx+aQxAzsqPnrRr1t9zDrezKePvZ027x+fGte4s4NXu7/jEp3G9cM1bICYgACbuETUUD5wmenGXA/IBpAKVrl0AEJ5cqr6Q89tGq+SpqkDfX2DtG+pZ9teuae0AX98c301CX179InyErnSG8WCiABB4HFbVrw/lpTdBIOk82nXbpHKoQGyBpUovAAD4XQA8ZTUCeBJHIpI0v0FRrgcnckV3ANckrwYJKXEihQfdSKPER6XeExmEeEMmSe6QBwWmkZdmSOSthhibgIkBlUYreBKd/0NeVAE9WAyEaQpH6KikDWlUVg43Jy2FOmaYlsZhDEGZXO3mWEyWHI6zuaJkMlcSQ9k4F+KidIiFyZItGDc7r1pUj6wP6zrWB0/fbeeFeHl4YOvETMNiM8Ny+7OO6Qh2wur20YVxFts5dlORdl5Kwd5utR7SRcxqX8RA5Ehacha76hg7c6yzNm/Xf6vOLNrv544lIEkWg7xWo/ItBAeIJEmt0XgBwgM8gTifoiiLJroYYooNTeziEKe4zOoR/wvIKp89hSr+6jFAqw/LaonjmZHSscMNg4iPlWpFrO1RN3zkMU+/xUP+JQ99TbvTl1Vg0gtirT6lbwYAAAA=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQAAAAQtAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVDYAdBEICoRkg3gLIAABNgIkAzoEIAWFIgeBFAwHG1wHKI7DuPEacDIiFJ/g+f47+1/7dIcdXTlD8DKqmcw4eIC+AOCPf6+qiWq3h6+aSCLNJDnkqX9Xl+rv/6dSBcwSBCzEoVqxNbp5SqPMYdKBQhBq1dK9ggSsgYUoGnHOqttMECvWjIJfPA8cjQAuAEAQLAiClASc7M6OkfbO/nHs6ACmCYBxZXKP4s9uXIHECh4AdEhX0yIHC6jzgAb65sshStMMChwEfWVjZe8Anset/6H93x8jOyL5fuS67z4Dlam+BPyH/pV2FLCZAOnU0XPzCQGiJ7AkXgSFhqDEB4AAoAAN2ExDgM10joCNfDQUbvxaXM8LovT79D9MEyYU9+q/myT9p/m8uWi2mLJBPbzcih2wYIPzBDFNvABt315OXwy8BaRnbo5hXsOS5taknX4FguiaZnd4vQ7HxnBnm3SPYXHrQbclvOgyDhsHnZPO8f3G5I2fbr34Y7+hzRozVzyw5bKHdu03plXgvE9FO/Uz4/xPUKd8/PHk+R+JODnlg1lDTv3Qed77zDNqRszaqHUQT248kUPGzBXXXHGFnHrVVdft2m8c4PhpjB+/QEqMU54xruc6m3w8++XNXx4sya9rMvNq88m6X1zeOMlRuQ+/nvNw4+ZrCt58yDdSVOQdfoi/jc/ePfZY+1taYaH21FH2Y4fGG+RVNJkIN4SSiWj3ZKGG1oojoYr2SNWFVbHvY1XX1PR+H6y+oKrqgmryqj1UXnmk5cKWysPM3R4Uh5svYo6saAtU3V297+d91U/X/frzLvUdqiqfruKvhx5+OeOYxbHI7SenQum+PTw/fvRLGQ/jiufOn3/S+vlsfGn9h4Zb96fekZ7xRups68FhVCYCWHHvZVIPxjanr3NABSALqkR7FMBOulF9ScHvV3np+6pK/eEzRx877K3/z65pvwN89eGtV3Ly5ft/25ngaiSYDVYUAAKvIKimMdLO6YBQEY+aZpbXZ5WinTBQXwAA4LMAXuNUBPCSTmMfjd6jpNLNjbToDuBpaR9AoTBbUeERO2o0erNeR6KFne5HK/nOQA+VBtFnt1LtBj6pJQIutnLwipz/Ix9OYNSqZQEreiQELIkKmRIRNWdewpiIZVGtVi0J6xWR0ComIGpFnN+AVStWzUtIWBNXq0iRuJCYqDUJcYXiopYUWhUzp8iQTv20dtO84Agw6YrhuOijfqUKlSpRAruvTq9WdeQw2vs5SUsCYhdt7icIt1nNkseKPZzgV6q4FfYbH4ZIBcThYTEgLIgIkYRbJLl7/rks+ObZDxydE8W9LymoUMiqZUVbtVv0GNkcispQM0IpEG7sBdK9IYr6aKKLRaxiQxO7OMQphrUlGIscFbElV6LF5S0dQN5RbRoUdRbWWOYCy8sB83RxS7FqG/UEQslE5Nsd5v93uF3T0bLiypD/uJhn3q9fCAA=) format("woff2"),url(data:font/woff;base64,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) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2) format("woff2"),url(/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2) format("woff2"),url(/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-bg-primary: 13 17 23;--color-bg-secondary: 22 27 34;--color-bg-tertiary: 33 38 45;--color-primary: 10 10 10;--color-secondary: 20 20 20;--color-text-primary: 255 255 255;--color-text-secondary: 139 148 158;--color-text-muted: 72 79 88;--color-accent-primary: 88 166 255;--color-accent-success: 63 185 80;--color-accent-warning: 210 153 34;--color-accent-error: 248 81 73;--color-border: 40 46 54}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}*{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}body{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary) / var(--tw-bg-opacity, 1));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}::-webkit-scrollbar{height:.25rem;width:.25rem}::-webkit-scrollbar-track{--tw-bg-opacity: 1;background-color:rgb(var(--color-secondary) / var(--tw-bg-opacity, 1))}::-webkit-scrollbar-thumb{border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1))}::-webkit-scrollbar-thumb:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-text-muted) / var(--tw-bg-opacity, 1))}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.panel{border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-secondary) / var(--tw-bg-opacity, 1))}.btn{border-radius:.25rem;padding:.375rem .75rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary{background-color:rgb(var(--color-accent-primary) / .25);--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.btn-primary:hover{background-color:rgb(var(--color-accent-primary) / .4)}.btn-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.\!input{border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1));padding:.375rem .5rem;font-size:.875rem;line-height:1.25rem}.\!input::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.\!input::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.\!input:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--color-accent-primary) / .5)}.input{border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1));padding:.375rem .5rem;font-size:.875rem;line-height:1.25rem}.input::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.input::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.input:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-color: rgb(var(--color-accent-primary) / .5)}.feed-item{margin-bottom:1rem}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.-left-1{left:-.25rem}.-right-2{right:-.5rem}.-top-1{top:-.25rem}.-top-2{top:-.5rem}.-top-8{top:-2rem}.bottom-0{bottom:0}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-12{right:3rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-4{top:1rem}.top-\[32px\]{top:32px}.top-\[50vh\]{top:50vh}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.order-first{order:-9999}.float-right{float:right}.-m-4{margin:-1rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-mb-4{margin-bottom:-1rem}.-mt-1{margin-top:-.25rem}.-mt-4{margin-top:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1\.5{margin-right:.375rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.list-item{display:list-item}.hidden{display:none}.size-8{width:2rem;height:2rem}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-80{height:20rem}.h-\[18px\]{height:18px}.h-\[34px\]{height:34px}.h-\[50vh\]{height:50vh}.h-\[78px\]{height:78px}.h-\[90vh\]{height:90vh}.h-\[calc\(100vh-32px\)\]{height:calc(100vh - 32px)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[200px\]{max-height:200px}.max-h-\[256px\]{max-height:256px}.max-h-\[40vh\]{max-height:40vh}.max-h-\[45vh\]{max-height:45vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100vh-10rem\)\]{max-height:calc(100vh - 10rem)}.min-h-0{min-height:0px}.min-h-80{min-height:20rem}.min-h-96{min-height:24rem}.min-h-\[120px\]{min-height:120px}.min-h-\[150px\]{min-height:150px}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[10\%\]{width:10%}.w-\[11\%\]{width:11%}.w-\[14\%\]{width:14%}.w-\[18px\]{width:18px}.w-\[2\%\]{width:2%}.w-\[300px\]{width:300px}.w-\[320px\]{width:320px}.w-\[7\%\]{width:7%}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-36{min-width:9rem}.min-w-\[100px\]{min-width:100px}.min-w-\[140px\]{min-width:140px}.min-w-\[160px\]{min-width:160px}.min-w-full{min-width:100%}.max-w-16{max-width:4rem}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\[200px\]{max-width:200px}.max-w-\[256px\]{max-width:256px}.max-w-\[75\%\]{max-width:75%}.max-w-\[95vw\]{max-width:95vw}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-6{--tw-translate-x: 1.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-bounce{animation:bounce 1s infinite}@keyframes highlight-fade{0%{box-shadow:0 0 0 2px rgb(var(--color-accent-primary) / 1)}to{box-shadow:0 0 0 2px rgb(var(--color-accent-primary) / 0)}}.animate-highlight-fade{animation:highlight-fade 3s ease-out forwards}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes slide-down{0%{transform:translateY(-100%);opacity:0}to{transform:translateY(0);opacity:1}}.animate-slide-down{animation:slide-down .2s ease-out forwards}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[2\.5rem_1fr\]{grid-template-columns:2.5rem 1fr}.grid-cols-\[3px_1\.5rem_1fr\]{grid-template-columns:3px 1.5rem 1fr}.grid-cols-\[3px_auto_1\.25rem_1fr\]{grid-template-columns:3px auto 1.25rem 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-divide-opacity, 1))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[\#333\]{--tw-border-opacity: 1;border-color:rgb(51 51 51 / var(--tw-border-opacity, 1))}.border-accent-error\/30{border-color:rgb(var(--color-accent-error) / .3)}.border-accent-primary{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1))}.border-accent-primary\/50{border-color:rgb(var(--color-accent-primary) / .5)}.border-accent-success\/30{border-color:rgb(var(--color-accent-success) / .3)}.border-accent-warning\/30{border-color:rgb(var(--color-accent-warning) / .3)}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/50{border-color:#f59e0b80}.border-blue-500\/30{border-color:#3b82f64d}.border-border{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}.border-border\/50{border-color:rgb(var(--color-border) / .5)}.border-border\/60{border-color:rgb(var(--color-border) / .6)}.border-gray-500\/30{border-color:#6b72804d}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/50{border-color:#ef444480}.border-slate-500\/30{border-color:#64748b4d}.border-teal-500\/30{border-color:#14b8a64d}.border-text-muted{--tw-border-opacity: 1;border-color:rgb(var(--color-text-muted) / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-yellow-500\/30{border-color:#eab3084d}.border-t-transparent{border-top-color:transparent}.bg-\[\#1a1a1a\]{--tw-bg-opacity: 1;background-color:rgb(26 26 26 / var(--tw-bg-opacity, 1))}.bg-\[\#252525\]{--tw-bg-opacity: 1;background-color:rgb(37 37 37 / var(--tw-bg-opacity, 1))}.bg-accent-error{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-error) / var(--tw-bg-opacity, 1))}.bg-accent-error\/10{background-color:rgb(var(--color-accent-error) / .1)}.bg-accent-error\/20{background-color:rgb(var(--color-accent-error) / .2)}.bg-accent-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-primary) / var(--tw-bg-opacity, 1))}.bg-accent-primary\/10{background-color:rgb(var(--color-accent-primary) / .1)}.bg-accent-primary\/15{background-color:rgb(var(--color-accent-primary) / .15)}.bg-accent-primary\/20{background-color:rgb(var(--color-accent-primary) / .2)}.bg-accent-primary\/25{background-color:rgb(var(--color-accent-primary) / .25)}.bg-accent-primary\/30{background-color:rgb(var(--color-accent-primary) / .3)}.bg-accent-success{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-success) / var(--tw-bg-opacity, 1))}.bg-accent-success\/10{background-color:rgb(var(--color-accent-success) / .1)}.bg-accent-success\/20{background-color:rgb(var(--color-accent-success) / .2)}.bg-accent-warning{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-warning) / var(--tw-bg-opacity, 1))}.bg-accent-warning\/10{background-color:rgb(var(--color-accent-warning) / .1)}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/20{background-color:#f59e0b33}.bg-bg-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-primary) / var(--tw-bg-opacity, 1))}.bg-bg-primary\/50{background-color:rgb(var(--color-bg-primary) / .5)}.bg-bg-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-secondary) / var(--tw-bg-opacity, 1))}.bg-bg-tertiary{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1))}.bg-bg-tertiary\/10{background-color:rgb(var(--color-bg-tertiary) / .1)}.bg-bg-tertiary\/20{background-color:rgb(var(--color-bg-tertiary) / .2)}.bg-bg-tertiary\/30{background-color:rgb(var(--color-bg-tertiary) / .3)}.bg-bg-tertiary\/5{background-color:rgb(var(--color-bg-tertiary) / .05)}.bg-bg-tertiary\/50{background-color:rgb(var(--color-bg-tertiary) / .5)}.bg-bg-tertiary\/60{background-color:rgb(var(--color-bg-tertiary) / .6)}.bg-bg-tertiary\/\[2\.5\%\]{background-color:rgb(var(--color-bg-tertiary) / 2.5%)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/15{background-color:#3b82f626}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-900{--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.bg-border{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.bg-cyan-900{--tw-bg-opacity: 1;background-color:rgb(22 78 99 / var(--tw-bg-opacity, 1))}.bg-gray-500\/10{background-color:#6b72801a}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-green-400\/60{background-color:#4ade8099}.bg-green-500\/20{background-color:#22c55e33}.bg-green-900{--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.bg-green-950\/30{background-color:#052e164d}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary) / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-500\/20{background-color:#a855f733}.bg-purple-900{--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.bg-red-400\/60{background-color:#f8717199}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-red-500\/20{background-color:#ef444433}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.bg-red-950\/30{background-color:#450a0a4d}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-secondary) / var(--tw-bg-opacity, 1))}.bg-secondary\/50{background-color:rgb(var(--color-secondary) / .5)}.bg-slate-500\/10{background-color:#64748b1a}.bg-teal-500\/10{background-color:#14b8a61a}.bg-text-muted{--tw-bg-opacity: 1;background-color:rgb(var(--color-text-muted) / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.bg-yellow-900{--tw-bg-opacity: 1;background-color:rgb(113 63 18 / var(--tw-bg-opacity, 1))}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-2{padding-left:.5rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-5{padding-right:1.25rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-\[15vh\]{padding-top:15vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,Fira Code,Consolas,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[8px\]{font-size:8px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.leading-\[1\.5rem\]{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#888\]{--tw-text-opacity: 1;color:rgb(136 136 136 / var(--tw-text-opacity, 1))}.text-accent-error{--tw-text-opacity: 1;color:rgb(var(--color-accent-error) / var(--tw-text-opacity, 1))}.text-accent-error\/70{color:rgb(var(--color-accent-error) / .7)}.text-accent-primary{--tw-text-opacity: 1;color:rgb(var(--color-accent-primary) / var(--tw-text-opacity, 1))}.text-accent-primary\/45{color:rgb(var(--color-accent-primary) / .45)}.text-accent-success{--tw-text-opacity: 1;color:rgb(var(--color-accent-success) / var(--tw-text-opacity, 1))}.text-accent-warning{--tw-text-opacity: 1;color:rgb(var(--color-accent-warning) / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/70{color:#fbbf24b3}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-border\/40{color:rgb(var(--color-border) / .4)}.text-border\/60{color:rgb(var(--color-border) / .6)}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-400\/70{color:#4ade80b3}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-pink-400{--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-400\/70{color:#f87171b3}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-teal-200{--tw-text-opacity: 1;color:rgb(153 246 228 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-text-muted{--tw-text-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-text-opacity, 1))}.text-text-muted\/70{color:rgb(var(--color-text-muted) / .7)}.text-text-muted\/80{color:rgb(var(--color-text-muted) / .8)}.text-text-primary{--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.text-text-secondary{--tw-text-opacity: 1;color:rgb(var(--color-text-secondary) / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.decoration-red-400\/30{text-decoration-color:#f871714d}.placeholder-text-muted::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.placeholder-text-muted::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-placeholder-opacity, 1))}.accent-accent-primary{accent-color:rgb(var(--color-accent-primary) / 1)}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.\!transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:text-text-muted::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-text-opacity, 1))}.placeholder\:text-text-muted::placeholder{--tw-text-opacity: 1;color:rgb(var(--color-text-muted) / var(--tw-text-opacity, 1))}.first\:mt-0:first-child{margin-top:0}.first\:border-l-0:first-child{border-left-width:0px}.last\:mb-0:last-child{margin-bottom:0}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-accent-primary:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1))}.hover\:border-accent-primary\/40:hover{border-color:rgb(var(--color-accent-primary) / .4)}.hover\:border-border:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}.hover\:border-text-muted:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-text-muted) / var(--tw-border-opacity, 1))}.hover\:bg-\[\#333\]:hover{--tw-bg-opacity: 1;background-color:rgb(51 51 51 / var(--tw-bg-opacity, 1))}.hover\:bg-accent-error\/10:hover{background-color:rgb(var(--color-accent-error) / .1)}.hover\:bg-accent-error\/20:hover{background-color:rgb(var(--color-accent-error) / .2)}.hover\:bg-accent-error\/30:hover{background-color:rgb(var(--color-accent-error) / .3)}.hover\:bg-accent-error\/80:hover{background-color:rgb(var(--color-accent-error) / .8)}.hover\:bg-accent-primary\/20:hover{background-color:rgb(var(--color-accent-primary) / .2)}.hover\:bg-accent-primary\/30:hover{background-color:rgb(var(--color-accent-primary) / .3)}.hover\:bg-accent-primary\/40:hover{background-color:rgb(var(--color-accent-primary) / .4)}.hover\:bg-accent-primary\/50:hover{background-color:rgb(var(--color-accent-primary) / .5)}.hover\:bg-accent-primary\/80:hover{background-color:rgb(var(--color-accent-primary) / .8)}.hover\:bg-accent-primary\/90:hover{background-color:rgb(var(--color-accent-primary) / .9)}.hover\:bg-bg-primary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-primary) / var(--tw-bg-opacity, 1))}.hover\:bg-bg-primary\/30:hover{background-color:rgb(var(--color-bg-primary) / .3)}.hover\:bg-bg-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-secondary) / var(--tw-bg-opacity, 1))}.hover\:bg-bg-secondary\/50:hover{background-color:rgb(var(--color-bg-secondary) / .5)}.hover\:bg-bg-tertiary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg-tertiary) / var(--tw-bg-opacity, 1))}.hover\:bg-bg-tertiary\/35:hover{background-color:rgb(var(--color-bg-tertiary) / .35)}.hover\:bg-bg-tertiary\/40:hover{background-color:rgb(var(--color-bg-tertiary) / .4)}.hover\:bg-bg-tertiary\/50:hover{background-color:rgb(var(--color-bg-tertiary) / .5)}.hover\:bg-bg-tertiary\/80:hover{background-color:rgb(var(--color-bg-tertiary) / .8)}.hover\:bg-border:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/30:hover{background-color:#ef44444d}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:rgb(var(--color-secondary) / .8)}.hover\:text-\[\#ccc\]:hover{--tw-text-opacity: 1;color:rgb(204 204 204 / var(--tw-text-opacity, 1))}.hover\:text-accent-error:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-error) / var(--tw-text-opacity, 1))}.hover\:text-accent-primary:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-primary) / var(--tw-text-opacity, 1))}.hover\:text-accent-primary\/80:hover{color:rgb(var(--color-accent-primary) / .8)}.hover\:text-red-200:hover{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-text-primary:hover{--tw-text-opacity: 1;color:rgb(var(--color-text-primary) / var(--tw-text-opacity, 1))}.hover\:text-text-secondary:hover{--tw-text-opacity: 1;color:rgb(var(--color-text-secondary) / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.focus\:border-accent-primary:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-primary) / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-accent-primary:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--color-accent-primary) / var(--tw-ring-opacity, 1))}.focus\:ring-accent-primary\/50:focus{--tw-ring-color: rgb(var(--color-accent-primary) / .5)}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-accent-primary{--tw-text-opacity: 1;color:rgb(var(--color-accent-primary) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:opacity-100{opacity:1}@media not all and (min-width:640px){.max-sm\:block{display:block}}@media(min-width:640px){.sm\:block{display:block}.sm\:max-h-\[50vh\]{max-height:50vh}.sm\:w-1\/2{width:50%}.sm\:w-20{width:5rem}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:border-b-0{border-bottom-width:0px}.sm\:border-r{border-right-width:1px}.sm\:p-8{padding:2rem}}@media(min-width:768px){.md\:relative{position:relative}.md\:right-16{right:4rem}.md\:right-4{right:1rem}.md\:mb-8{margin-bottom:2rem}.md\:block{display:block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-0{width:0px}.md\:w-\[300px\]{width:300px}.md\:shrink-0{flex-shrink:0}.md\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:overflow-hidden{overflow:hidden}.md\:p-4{padding:1rem}.md\:p-8{padding:2rem}.md\:px-4{padding-left:1rem;padding-right:1rem}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&_li\>p\]\:inline li>p{display:inline}/**
|
|
2
2
|
* Copyright (c) 2014 The xterm.js authors. All rights reserved.
|
|
3
3
|
* Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
|
|
4
4
|
* https://github.com/chjj/term.js
|
|
@@ -146,7 +146,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
146
146
|
`,children:s?"Reconnecting...":"Reconnect"})]})}function wA(){const e=ow(),r=e?"bg-amber-400":"bg-accent-primary";return o.jsxs("div",{className:"flex items-center gap-3 text-xs text-text-muted py-2",children:[o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsxs("span",{className:"flex gap-0.5",children:[o.jsx("span",{className:`w-1 h-1 rounded-full animate-bounce ${r}`,style:{animationDelay:"0ms"}}),o.jsx("span",{className:`w-1 h-1 rounded-full animate-bounce ${r}`,style:{animationDelay:"150ms"}}),o.jsx("span",{className:`w-1 h-1 rounded-full animate-bounce ${r}`,style:{animationDelay:"300ms"}})]}),o.jsx("span",{className:"text-text-secondary",children:e?"Running... (abort in progress)":"Running"})]}),!e&&o.jsx("span",{className:"text-text-muted",children:"esc to interrupt"})]})}function CA({attachment:e,onRemove:r}){const s=i=>i<1024?`${i} B`:i<1048576?`${(i/1024).toFixed(1)} KB`:`${(i/1048576).toFixed(1)} MB`;return o.jsxs("div",{className:"relative inline-flex flex-col items-center p-2 bg-bg-tertiary rounded-lg border border-border",children:[o.jsx(oo,{onClick:()=>r(e.id),className:"absolute -top-2 -right-2",size:"sm",variant:"overlay","aria-label":`Remove ${e.filename}`}),o.jsx("img",{src:e.data,alt:e.filename,className:"w-16 h-16 object-cover rounded-md bg-bg-secondary"}),o.jsx("div",{className:"mt-1 text-xs text-text-muted text-center max-w-16 truncate",title:e.filename,children:e.filename}),o.jsx("div",{className:"text-[10px] text-text-muted",children:s(e.size)})]})}function kA({history:e,selectedIndex:r,onSelect:s,onEscape:i,onNavigate:c}){const u=P.useRef(null),h=P.useRef(null);P.useEffect(()=>{h.current&&u.current&&h.current.scrollIntoView({block:"nearest",behavior:"smooth"})},[r]);const l=f=>{switch(f.key){case"Enter":f.preventDefault(),e[r]&&s(e[r].content);break;case"Escape":f.preventDefault(),i();break;case"ArrowUp":f.preventDefault(),c("up");break;case"ArrowDown":f.preventDefault(),c("down");break}},d=f=>{s(f)};return o.jsx("div",{ref:u,role:"list",className:"mb-2 p-2 bg-bg-secondary border border-border rounded-lg overflow-y-auto max-h-64",onKeyDown:l,children:e.map((f,g)=>o.jsxs("div",{ref:g===r?h:null,role:"listitem",onClick:()=>d(f.content),className:`
|
|
147
147
|
p-2 rounded cursor-pointer transition-colors
|
|
148
148
|
${g===r?"bg-accent-primary/20 border border-accent-primary":"hover:bg-bg-tertiary"}
|
|
149
|
-
`,children:[o.jsxs("div",{className:"text-xs text-text-muted font-mono",children:[f.formattedTimestamp,f.sessionName&&o.jsxs(o.Fragment,{children:[" | ",o.jsx("span",{className:"text-accent-primary font-medium",children:f.sessionName})]})]}),o.jsx("div",{className:"text-sm text-text-primary mt-1",children:f.trimmedContent})]},f.id))})}const hn=$n((e,r)=>({defaults:[],userItems:[],loading:!1,fetchCommands:async()=>{await $h("/api/commands",e)},fetchCommand:async s=>{try{const i=await ke(`/api/commands/${s}`);return i.ok?await i.json():null}catch{return null}},fetchDefaultContent:async s=>{try{const i=await ke(`/api/commands/defaults/${s}`);return i.ok?await i.json():null}catch{return null}},createCommand:async s=>{const i=await xs("POST","/api/commands",s);return i.success&&await r().fetchCommands(),i},updateCommand:async(s,i)=>{const c=await xs("PUT",`/api/commands/${s}`,i);return c.success&&await r().fetchCommands(),c},deleteCommand:async s=>{try{const i=await ke(`/api/commands/${s}`,{method:"DELETE"}),c=await i.json();return i.ok?(e(u=>({userItems:u.userItems.filter(h=>h.id!==s)})),{success:!0}):{success:!1,error:c.error??"Failed to delete"}}catch{return{success:!1,error:"Network error"}}},duplicateCommand:async s=>{try{const i=await ke(`/api/commands/${s}/duplicate`,{method:"POST"}),c=await i.json();return i.ok?(await r().fetchCommands(),{success:!0}):{success:!1,error:c.error??"Failed to duplicate"}}catch{return{success:!1,error:"Network error"}}}})),EA={maxWidth:1920,maxHeight:1920,quality:.85,maxSizeBytes:1048576};async function jA(e,r={}){const s={...EA,...r};if(!e.type.startsWith("image/"))throw new Error("File is not an image");if(!["image/png","image/jpeg","image/gif"].includes(e.type))throw new Error(`Unsupported image format: ${e.type}. Only PNG, JPG, and GIF are supported.`);if(e.size<=s.maxSizeBytes){const c=await e.arrayBuffer(),u=OA(c),h=`data:${e.type};base64,${u}`,l=await O0(h);return{dataUrl:h,mimeType:e.type,size:e.size,width:l.width,height:l.height}}return await NA(e,s)}async function NA(e,r){const s=await AA(e),i=await O0(s),{width:c,height:u}=TA(i.width,i.height,r.maxWidth,r.maxHeight),h=DA();h.width=c,h.height=u;const l=h.getContext("2d");if(!l)throw new Error("Failed to get canvas context");l.imageSmoothingEnabled=!0,l.imageSmoothingQuality="high",l.drawImage(i,0,0,c,u);let d=r.quality,f;do{if(f=h.toDataURL(e.type.startsWith("image/gif")?"image/png":e.type,d),_v(f)<=r.maxSizeBytes||d<=.3)break;d-=.1}while(!0);const g=_v(f);return{dataUrl:f,mimeType:e.type.startsWith("image/gif")?"image/png":e.type,size:g,width:c,height:u}}function TA(e,r,s,i){const c=e/r;return e>r&&e>s?{width:s,height:Math.round(s/c)}:r>e&&r>i?{width:Math.round(i*c),height:i}:{width:e,height:r}}function AA(e){return new Promise((r,s)=>{const i=LA(),c=new i;c.onload=()=>r(c.result),c.onerror=()=>s(new Error("Failed to read file")),c.readAsDataURL(e)})}function O0(e){return new Promise((r,s)=>{const i=RA(),c=new i;c.onload=()=>r(c),c.onerror=()=>s(new Error("Failed to load image")),c.src=e})}function DA(){var r;const e=Af();if(!((r=e.document)!=null&&r.createElement))throw new Error("Image compression requires browser canvas APIs");return e.document.createElement("canvas")}function RA(){const e=Af();if(!e.Image)throw new Error("Image compression requires browser image APIs");return e.Image}function LA(){const e=Af();if(!e.FileReader)throw new Error("Image compression requires browser file APIs");return e.FileReader}function Af(){return globalThis}function OA(e){const r=new Uint8Array(e);let s="";for(let i=0;i<r.byteLength;i++){const c=r[i];c!==void 0&&(s+=String.fromCharCode(c))}return btoa(s)}function _v(e){const s=e.split(",")[1];return s?Math.round(s.length*3/4):0}function MA(e){return["image/png","image/jpeg","image/gif"].includes(e.type)}function IA(e,r=50*1024*1024){return e.size>r?{valid:!1,error:`Image file is too large (${Sv(e.size)}). Maximum size is ${Sv(r)}.`}:{valid:!0}}function Sv(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}async function ch(e,r,s,i={}){const{maxSizeBytes:c=50*1024*1024,filename:u}=i;if(!MA(e)){s(`Unsupported file type: ${e.type}. Only PNG, JPG, and GIF are supported.`);return}const h=IA(e,c);if(!h.valid){s(h.error??"Image file is too large");return}try{const l=await jA(e,{maxWidth:1920,maxHeight:1920,quality:.85,maxSizeBytes:1048576}),d={id:zv(),filename:u??e.name,mimeType:l.mimeType,size:l.size,data:l.dataUrl};r(d)}catch(l){const d=l instanceof Error?l.message??"Failed to process image":"Failed to process image";s(d)}}function BA(e){const r={};let s=null;for(const i of e){if(i.role==="user"&&!i.isSystemGenerated){s=i.id;continue}i.role==="assistant"&&i.promptContext&&s&&r[s]===void 0&&(r[s]=i.promptContext)}return r}function uh(e){return{contextWindow:e.contextWindow,temperature:e.temperature??null,topP:e.topP??null,topK:e.topK??null,maxTokens:e.maxTokens??null,supportsVision:e.supportsVision??null}}function zA({label:e,children:r}){return o.jsxs("div",{className:"space-y-3",children:[o.jsx("h4",{className:"text-sm font-medium text-text-secondary border-b border-border/50 pb-1",children:e}),r]})}function Qa({label:e,value:r,onChange:s,min:i,max:c,step:u=1,helpText:h,defaultValue:l}){const[d,f]=P.useState((r==null?void 0:r.toString())??""),[g,m]=P.useState(r===null);P.useEffect(()=>{f((r==null?void 0:r.toString())??""),m(r===null)},[r]);const v=k=>{if(f(k),k==="")s(null);else{const C=parseFloat(k);isNaN(C)||s(C)}},S=()=>{g?(m(!1),l!==void 0&&(f(l.toString()),s(l))):(m(!0),s(null))};return o.jsxs("div",{children:[o.jsxs("label",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary mb-1",children:[e,o.jsx("button",{type:"button",onClick:S,className:`text-xs px-1.5 py-0.5 rounded border ${g?"border-accent-primary/50 bg-accent-primary/10 text-accent-primary":"border-border text-text-muted hover:text-text-secondary"}`,title:g?"Click to set a custom value":"Click to use default",children:g?"default":"custom"})]}),o.jsx("input",{type:"number",min:i,max:c,step:u,value:d,readOnly:g,onChange:k=>v(k.target.value),onClick:()=>g&&S(),placeholder:g?"Using profile default (click to edit)":"",className:`w-full bg-bg-tertiary border border-border rounded px-3 py-2 text-text-primary focus:outline-none focus:border-accent-primary ${g?"opacity-50 cursor-pointer":""}`}),h&&o.jsx("p",{className:"text-xs text-text-muted mt-1",children:h})]})}function PA({isOpen:e,onClose:r,providerId:s,model:i}){const[c,u]=P.useState(()=>uh(i)),[h,l]=P.useState(!1),d=Rt(m=>m.updateModelSettings);P.useEffect(()=>{u(uh(i))},[i]);const f=async()=>{if(c.contextWindow<1024||c.contextWindow>1e7)return;l(!0);const m=c.temperature!==(i.temperature??null)||c.topP!==(i.topP??null)||c.topK!==(i.topK??null)||c.maxTokens!==(i.maxTokens??null)||c.supportsVision!==(i.supportsVision??null);await d(s,i.id,{contextWindow:c.contextWindow,...m&&{temperature:c.temperature,topP:c.topP,topK:c.topK,maxTokens:c.maxTokens,supportsVision:c.supportsVision??void 0}}),l(!1),r()},g=()=>{u(uh(i)),r()};return e?o.jsx(jt,{isOpen:e,onClose:r,title:"Model Properties",size:"sm",footer:o.jsxs("div",{className:"flex justify-end gap-2",children:[o.jsx(nt,{variant:"secondary",onClick:g,disabled:h,children:"Cancel"}),o.jsx(nt,{variant:"primary",onClick:f,disabled:h||c.contextWindow<1024||c.contextWindow>1e7,children:h?"Saving...":"Save"})]}),children:o.jsxs("div",{className:"space-y-4",children:[o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm font-medium text-text-secondary mb-1",children:"Model Name"}),o.jsx("p",{className:"text-text-primary bg-bg-tertiary px-3 py-2 rounded font-mono text-sm break-all",children:i.id})]}),o.jsx(Qa,{label:"Context Window",value:c.contextWindow,onChange:m=>m!==null&&u(v=>({...v,contextWindow:m})),min:1024,max:1e7,helpText:"Range: 1,024 - 10,000,000 tokens"}),o.jsxs(zA,{label:"Sampling Parameters",children:[o.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[o.jsx(Qa,{label:"Temperature",value:c.temperature,onChange:m=>u(v=>({...v,temperature:m})),min:0,max:2,step:.1,helpText:"0.0 - 2.0",defaultValue:1}),o.jsx(Qa,{label:"Top P",value:c.topP,onChange:m=>u(v=>({...v,topP:m})),min:0,max:1,step:.05,helpText:"0.0 - 1.0",defaultValue:1})]}),o.jsx(Qa,{label:"Top K",value:c.topK,onChange:m=>u(v=>({...v,topK:m})),min:1,max:200,helpText:"1 - 200 (leave as default if not supported)"})]}),o.jsx(Qa,{label:"Max Tokens",value:c.maxTokens,onChange:m=>u(v=>({...v,maxTokens:m})),min:256,max:32e3,helpText:"Maximum tokens to generate per response"}),o.jsxs("div",{children:[o.jsxs("label",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary mb-1",children:[o.jsx("input",{type:"checkbox",checked:c.supportsVision??!1,onChange:m=>u(v=>({...v,supportsVision:m.target.checked})),className:"rounded border-border bg-bg-tertiary text-accent-primary focus:ring-accent-primary focus:ring-offset-0"}),"Vision Enabled"]}),o.jsx("p",{className:"text-xs text-text-muted",children:"Allow sending images directly to this model. Disable if the model doesn't support vision."})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm font-medium text-text-secondary mb-1",children:"Source"}),o.jsxs("p",{className:"text-text-primary bg-bg-tertiary px-3 py-2 rounded text-sm",children:[i.source==="backend"&&"Auto-detected from backend",i.source==="user"&&"Manually set",i.source==="default"&&"Default value"]})]})]})}):null}function HA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function FA(){var $;const[,e]=lr(),r=Ce(B=>B.currentSession),s=Ce(B=>B.setSessionProvider),[i,c]=P.useState(!1),[u,h]=P.useState([]),[l,d]=P.useState(null),f=P.useRef(null),[g,m]=P.useState(null),v=P.useRef(new Set),S=Rt(B=>B.providers),k=Rt(B=>B.activeProviderId),C=Rt(B=>B.model);Rt(B=>B.backend);const y=Rt(B=>B.llmStatus),b=Rt(B=>B.activating),x=Rt(B=>B.activateProvider),_=Rt(B=>B.refreshModel),j=Rt(B=>B.refreshProviderModels);P.useEffect(()=>{function B(X){f.current&&!f.current.contains(X.target)&&(c(!1),h([]),v.current=new Set)}return document.addEventListener("mousedown",B),()=>document.removeEventListener("mousedown",B)},[]),P.useEffect(()=>{if(i){const B=S.map(X=>X.id);h(B),B.forEach(X=>{v.current.has(X)||(v.current.add(X),D(X))})}},[i,S]),S.find(B=>B.id===k);const A=y==="disconnected",N=C?(($=C.split("/").pop())==null?void 0:$.replace(/-/g," "))??C:"detecting...",D=async B=>{d(B);try{await j(B)}catch{}finally{d(null)}},T=B=>{u.includes(B.id)?h(u.filter(X=>X!==B.id)):(h([...u,B.id]),D(B.id))},z=async B=>{if(B.id===k){T(B);return}r?(s(B.id,void 0),Rt.getState().syncFromSession(B.id,""),c(!1),h([])):await x(B.id)&&(c(!1),h([]))},O=B=>{T(B)},q=async(B,X)=>{B.stopPropagation(),v.current.delete(X),await j(X),await D(X)},V=(B,X)=>{m({providerId:B,model:X})},W=()=>{m(null)},I=async(B,X)=>{if(console.log("[ProviderSelector.handleModelClick] providerId:",B,"model:",X),r){console.log("[ProviderSelector.handleModelClick] Calling setSessionProvider"),s(B,X),Rt.getState().syncFromSession(B,X),h([]),c(!1);return}d("activating");try{(await ke(`/api/providers/${B}/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:X})})).ok&&(await Rt.getState().fetchConfig(),h([]),c(!1))}catch{}finally{d(null)}};return S.length===0?o.jsxs("button",{type:"button",onClick:()=>_(),className:"flex items-center gap-1 px-1.5 py-0.5 rounded hover:bg-bg-tertiary transition-colors group",title:A?"LLM server is offline. Click to retry.":C??"Click to refresh model",children:[A?o.jsx("span",{className:"text-sm text-accent-error animate-pulse",children:"LLM offline"}):o.jsx("span",{className:"text-sm text-accent-primary",children:N}),o.jsx("span",{className:"text-text-muted opacity-0 group-hover:opacity-100 transition-opacity",children:"↻"})]}):o.jsxs("div",{className:"relative",ref:f,children:[o.jsxs("button",{type:"button",onClick:()=>c(!i),className:"flex items-center gap-1 px-1.5 py-0.5 rounded hover:bg-bg-tertiary transition-colors group",title:"Click to switch provider or model",children:[A?o.jsx("span",{className:"text-sm text-accent-error animate-pulse",children:"offline"}):o.jsx("span",{className:"text-sm text-accent-primary",children:N}),o.jsx(br,{className:"w-3 h-3 text-text-muted transition-transform",rotate:i?180:0})]}),i&&o.jsxs("div",{className:"absolute bottom-full right-0 mb-1 w-72 bg-bg-secondary border border-border rounded-lg shadow-lg z-50 overflow-hidden",children:[o.jsx("div",{className:"py-1",children:S.map(B=>{var X;return o.jsxs("div",{children:[o.jsxs("div",{className:`px-3 py-2 flex items-center justify-between ${B.id===k?"bg-bg-tertiary":"hover:bg-bg-tertiary"} ${b?"opacity-50 cursor-wait":"cursor-pointer"}`,children:[o.jsxs("div",{onClick:()=>!b&&z(B),className:"flex flex-col min-w-0 flex-1 cursor-pointer",children:[o.jsx("span",{className:`text-sm font-medium truncate ${B.id===k?"text-accent-primary":"text-text-primary"}`,children:B.name}),o.jsx("span",{className:"text-xs text-text-muted truncate",children:B.backend!=="auto"&&q1(B.backend)})]}),o.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[B.id===k?o.jsx("span",{className:"text-accent-success",title:"Active",children:o.jsx(Ur,{className:"w-4 h-4"})}):o.jsx("span",{className:"w-4"}),o.jsx("button",{type:"button",onClick:Q=>{Q.stopPropagation(),q(Q,B.id)},className:"p-0.5 hover:bg-bg-tertiary rounded transition-colors",title:"Refresh models",children:o.jsx(kw,{className:`w-4 h-4 ${l===B.id?"animate-spin":""} ${B.id===k?"text-accent-primary":"text-text-muted"}`})}),o.jsx("button",{type:"button",onClick:Q=>{Q.stopPropagation(),O(B)},className:"p-0.5 hover:bg-bg-tertiary rounded transition-colors",title:"Show models",children:o.jsx(br,{className:`w-4 h-4 transition-transform ${u.includes(B.id)?"rotate-180":""} ${B.id===k?"text-accent-primary":"text-text-muted"}`})})]})]}),u.includes(B.id)&&o.jsx("div",{className:"bg-bg-primary border-t border-border",children:l===B.id?o.jsx("div",{className:"px-4 py-2 text-xs text-text-muted",children:"Loading models..."}):(X=B.models)!=null&&X.length?B.models.map(Q=>{var H;return o.jsxs("button",{type:"button",onClick:()=>I(B.id,Q.id),disabled:l==="activating",className:`w-full px-4 py-1.5 text-left hover:bg-bg-tertiary transition-colors text-sm flex items-center justify-between group ${l==="activating"?"opacity-50 cursor-wait":""} ${C===Q.id?"text-accent-primary":"text-text-secondary"}`,children:[o.jsx("span",{className:"truncate flex-1",children:((H=Q.id.split("/").pop())==null?void 0:H.replace(/-/g," "))??Q.id}),o.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[o.jsx("span",{className:"text-xs text-text-muted",children:HA(Q.contextWindow)}),o.jsx("button",{type:"button",onClick:L=>{L.stopPropagation(),V(B.id,Q)},className:"opacity-0 group-hover:opacity-100 p-0.5 hover:bg-bg-tertiary rounded transition-opacity",title:"Edit model context",children:o.jsx(gw,{className:"w-3 h-3 text-text-muted"})})]}),C===Q.id&&o.jsx("span",{className:"text-accent-success flex-shrink-0 ml-1",children:o.jsx(Ur,{className:"w-3.5 h-3.5"})})]},Q.id)}):o.jsx("div",{className:"px-4 py-2 text-xs text-text-muted",children:"No models available"})})]},B.id)})}),o.jsx("div",{className:"border-t border-border px-3 py-2",children:o.jsx("button",{onClick:()=>e("/onboarding"),className:"text-xs text-accent-primary hover:underline",children:"Manage providers"})})]}),g&&o.jsx(PA,{isOpen:!0,onClose:W,providerId:g.providerId,model:g.model})]})}function UA(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function $A({onClick:e}){return o.jsx("button",{type:"button",onClick:e,className:"p-1.5 rounded text-text-muted hover:text-text-primary hover:bg-bg-primary transition-colors",title:"View",children:o.jsx(lc,{})})}function M0({isOpen:e,onClose:r,initialEditId:s}){const i=hn(fe=>fe.defaults),c=hn(fe=>fe.userItems),u=hn(fe=>fe.loading),h=hn(fe=>fe.fetchCommands),l=hn(fe=>fe.fetchCommand),d=hn(fe=>fe.fetchDefaultContent),f=hn(fe=>fe.createCommand),g=hn(fe=>fe.updateCommand),m=hn(fe=>fe.deleteCommand),[v,S]=P.useState(null),[k,C]=P.useState(null),{view:y,editingId:b,formError:x,saving:_,formData:j,setView:A,setEditingId:N,setFormError:D,setFormData:T,setSaving:z}=Jv(),{requestDelete:O,clearConfirm:q,isConfirming:V}=qh(),W=P.useRef(!1),I=At(fe=>fe.defaults),$=At(fe=>fe.userItems),B=At(fe=>fe.fetchAgents),Q=[...I,...$].filter(fe=>!fe.subagent),H=P.useRef(h),L=P.useRef(B),R=P.useRef(l),U=P.useRef(d),F=P.useRef(s),ne=P.useRef(A),Z=P.useRef(N),ee=P.useRef(D),Y=P.useRef(q);P.useEffect(()=>{H.current=h,L.current=B,R.current=l,U.current=d,F.current=s,ne.current=A,Z.current=N,ee.current=D,Y.current=q}),P.useEffect(()=>{if(e)if(H.current(),L.current(),W.current||(Y.current(),W.current=!0),F.current){const fe=i.some(je=>je.id===F.current);ne.current("edit"),Z.current(F.current),ee.current(""),fe?U.current(F.current).then(je=>{je&&T({name:je.metadata.name+" (copy)",id:`${F.current}-copy-${Date.now()}`,prompt:je.prompt,agentMode:je.metadata.agentMode??"",isDefault:!0})}):R.current(F.current).then(je=>{je&&T({name:je.metadata.name,id:je.metadata.id,prompt:je.prompt,agentMode:je.metadata.agentMode??"",isDefault:!1})})}else ne.current("list"),Z.current(null);else W.current=!1},[e]);const G=async fe=>{S(fe);const je=await d(fe);C((je==null?void 0:je.prompt)??null)},ae=async fe=>{if(i.some(Ue=>Ue.id===fe)){const Ue=await d(fe);Ue&&(N(null),T({name:`${Ue.metadata.name} (copy)`,id:`${fe}-copy-${Date.now()}`,prompt:Ue.prompt,agentMode:Ue.metadata.agentMode??"",isDefault:!0}),D(""),A("edit"))}else{const Ue=await l(fe);Ue&&(N(null),T({name:`${Ue.metadata.name} (copy)`,id:`${fe}-copy-${Date.now()}`,prompt:Ue.prompt,agentMode:Ue.metadata.agentMode??"",isDefault:!1}),D(""),A("edit"))}},re=()=>{T({name:"",id:"",prompt:"",agentMode:"",isDefault:!1}),N(null),A("edit")},be=async fe=>{const je=await l(fe);je&&(N(fe),T({name:je.metadata.name,id:je.metadata.id,prompt:je.prompt,agentMode:je.metadata.agentMode??"",isDefault:!1}),D(""),A("edit"))},ve=async fe=>{await m(fe),q()},Re=async()=>{const fe=b??j.id;if(!fe||!j.name||!j.prompt){D("Name and message are required.");return}z(!0),D("");const je={metadata:{id:fe,name:j.name,...j.agentMode?{agentMode:j.agentMode}:{}},prompt:j.prompt},Ue=b?await g(b,je):await f(je);if(z(!1),!Ue.success){D(Ue.error??"Failed to save command.");return}s?r():A("list")},Oe=()=>{s?r():(A("list"),S(null),C(null))},ze=fe=>{T(je=>({...je,name:fe})),(!b||j.isDefault)&&T(je=>({...je,id:UA(fe)}))},We=()=>{S(null),C(null),A("list")},Ee=()=>{v&&(S(null),A("edit"),N(v),d(v).then(fe=>{fe&&T({name:`${fe.metadata.name} (copy)`,id:`${v}-copy-${Date.now()}`,prompt:fe.prompt,agentMode:fe.metadata.agentMode??"",isDefault:!0})}))};if(v){const fe=i.find(je=>je.id===v);return o.jsx(jt,{isOpen:e,onClose:We,title:`Default: ${(fe==null?void 0:fe.name)??v}`,size:"xl",children:o.jsxs("div",{className:"flex flex-col h-full",children:[o.jsxs("div",{className:"space-y-3 mb-3",children:[o.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted",children:[o.jsx("span",{className:"px-1.5 py-0.5 rounded bg-bg-tertiary text-text-secondary",children:"Built-in"}),o.jsx("span",{className:"font-mono",children:v})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Name"}),o.jsx("div",{className:"px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm",children:fe==null?void 0:fe.name})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Agent Mode"}),o.jsx("div",{className:"px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm text-text-muted",children:(fe==null?void 0:fe.agentMode)||"None"})]})]}),o.jsxs("div",{className:"flex-1 min-h-[120px] border-t border-border pt-3 flex flex-col",children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Message"}),o.jsx("textarea",{value:k??"",readOnly:!0,placeholder:"...",className:"flex-1 w-full px-3 py-2 bg-bg-tertiary border border-border rounded text-sm font-mono resize-none opacity-60"})]}),o.jsxs("div",{className:"flex justify-end gap-2 pt-3 mt-3 border-t border-border flex-shrink-0",children:[o.jsx(nt,{variant:"secondary",onClick:We,children:"Close"}),o.jsx(nt,{variant:"primary",onClick:Ee,children:"Duplicate & Customize"})]})]})})}return y==="edit"?o.jsx(jt,{isOpen:e,onClose:Oe,title:b?"Edit Command":"New Command",size:"xl",children:o.jsxs("div",{className:"flex flex-col h-full",children:[x&&o.jsx(Gh,{message:x}),o.jsxs("div",{className:"space-y-3 mb-3",children:[o.jsx(Qv,{name:j.name,id:j.id,nameLabel:"Name",idLabel:"ID",namePlaceholder:"My Command",idPlaceholder:"my-command",readOnlyId:!!b&&!j.isDefault,onNameChange:ze,onIdChange:fe=>T(je=>({...je,id:fe}))}),o.jsxs("div",{children:[o.jsxs("label",{className:"block text-xs text-text-secondary mb-1",children:["Agent Mode ",o.jsx("span",{className:"text-text-muted",children:"(optional)"})]}),o.jsxs("select",{value:j.agentMode,onChange:fe=>T(je=>({...je,agentMode:fe.target.value})),className:"w-full px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary",children:[o.jsx("option",{value:"",children:"None (keep current mode)"}),Q.map(fe=>o.jsx("option",{value:fe.id,children:fe.name},fe.id))]})]})]}),o.jsxs("div",{className:"flex-1 min-h-[120px] border-t border-border pt-3 flex flex-col",children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Message"}),o.jsx("textarea",{value:j.prompt,onChange:fe=>T(je=>({...je,prompt:fe.target.value})),placeholder:"The message that will be sent when this command is triggered...",className:"h-80 w-full px-3 py-2 bg-bg-tertiary border border-border rounded text-sm font-mono resize-y focus:outline-none focus:ring-1 focus:ring-accent-primary"})]}),o.jsxs("div",{className:"flex justify-end gap-2 pt-3 mt-3 border-t border-border flex-shrink-0",children:[o.jsx(nt,{variant:"secondary",onClick:Oe,children:"Cancel"}),o.jsx(nt,{variant:"primary",onClick:Re,disabled:_||!j.name||!j.prompt,children:_?"Saving...":"Save"})]})]})}):o.jsxs(jt,{isOpen:e,onClose:r,title:"Commands",size:"lg",children:[o.jsx(Yv,{description:"Commands are pre-defined messages you can send with a single click.",onNew:re}),o.jsxs(Zv,{loading:u,hasItems:i.length>0||c.length>0,loadingLabel:"Loading commands...",emptyLabel:"No commands created yet.",children:[i.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Built-in"}),o.jsx("div",{className:"space-y-2",children:i.map(fe=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsx("div",{className:"min-w-0 flex-1 mr-3",children:o.jsx("span",{className:"text-text-primary text-sm font-medium",children:fe.name})}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx($A,{onClick:()=>G(fe.id)}),o.jsx(ao,{onClick:()=>ae(fe.id)})]})]},fe.id))})]}),c.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Custom"}),o.jsx("div",{className:"space-y-2",children:c.map(fe=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsx("div",{className:"min-w-0 flex-1 mr-3",children:o.jsx("div",{className:"flex items-center gap-2",children:o.jsx("span",{className:"text-text-primary text-sm font-medium",children:fe.name})})}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx(Wi,{onClick:()=>be(fe.id)}),o.jsx(ao,{onClick:()=>ae(fe.id)}),V(fe.id,"delete")?o.jsx(Wh,{onConfirm:()=>ve(fe.id),onCancel:q}):o.jsx(Vh,{onClick:()=>O(fe.id)})]})]},fe.id))})]})]})]})}function qA(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function WA(e){let r=1;for(;e.some(s=>s.id===`s${r}`);)r++;return`s${r}`}const VA=[{value:"agent",label:"Agent"},{value:"sub_agent",label:"Sub-Agent"},{value:"shell",label:"Shell"}],I0={all_criteria_passed:"All passed",all_criteria_completed_or_passed:"All completed",any_criteria_blocked:"Blocked",has_pending_criteria:"Pending/Failed",step_result:"Result",always:"Always"},B0=[{value:"all_criteria_passed",label:"All criteria passed"},{value:"all_criteria_completed_or_passed",label:"All criteria completed or passed"},{value:"any_criteria_blocked",label:"Any criteria blocked (retry limit)"},{value:"has_pending_criteria",label:"Has pending or failed criteria"},{value:"step_result",label:"Step result is..."},{value:"always",label:"Always (fallback)"}],zs=150,Fr=54,zi=80,Pn=30,Pi=70,wv=100,Ps=50,Vl=50,Cv=4;function Df(e,r){if(e.type==="agent"){const s=r.find(i=>i.id===e.toolMode);return{name:(s==null?void 0:s.name)??(e.toolMode||"Agent"),color:(s==null?void 0:s.color)||"#3b82f6"}}if(e.type==="sub_agent"){const s=r.find(i=>i.id===e.subAgentType);return{name:(s==null?void 0:s.name)??(e.subAgentType||"Sub-Agent"),color:(s==null?void 0:s.color)||"#a855f7"}}return{name:"Shell",color:"#22c55e"}}function GA(e,r,s,i){const c=Vl+Ps+zs+wv+zs+Ps+Vl,u=c/2,h=Vl+Ps+zs/2,l=Vl+Ps+zs+wv+zs/2,d=[],f=[],g=new Map,m=e.filter(I=>I.type==="agent"||I.type==="shell"),v=e.filter(I=>I.type==="sub_agent"),S=v.length>0,k=S?h:u,C=m.length>0?l:u,y=Ps+Pn/2;if(d.push({id:"$start",type:"terminal",label:"Start",cx:k,cy:y,w:zi,h:Pn}),g.set("$start",{cx:k,cy:y,w:zi,h:Pn}),e.length===0){const I=y+Pn/2+Pi*2+Pn/2;return d.push({id:"$done",type:"terminal",label:"Done",cx:k,cy:I,w:zi,h:Pn}),g.set("$done",{cx:k,cy:I,w:zi,h:Pn}),{nodes:d,edges:f,width:c,height:I+Pn/2+Ps,posMap:g}}const b=y+Pn/2+Pi,x=(I,$)=>{I.forEach((B,X)=>{const Q=b+X*(Fr+Pi)+Fr/2,{name:H,color:L}=Df(B,i);d.push({id:B.id,type:"step",label:H,color:L,cx:$,cy:Q,w:zs,h:Fr}),g.set(B.id,{cx:$,cy:Q,w:zs,h:Fr})})};x(m,k),x(v,C);const _=m.length>0?b+(m.length-1)*(Fr+Pi)+Fr/2:y,j=S?b+(v.length-1)*(Fr+Pi)+Fr/2:y,A=Math.max(_,j)+Fr/2+Pi+Pn/2;d.push({id:"$done",type:"terminal",label:"Done",cx:k,cy:A,w:zi,h:Pn}),g.set("$done",{cx:k,cy:A,w:zi,h:Pn});const N=[];r&&g.has(r)&&N.push({from:"$start",to:r,label:s,edgeKey:"start",direction:"down",backEdgeIndex:0});let D=0;for(const I of e)I.transitions.forEach(($,B)=>{if(!$.goto||!g.has($.goto))return;const X=g.get(I.id),Q=g.get($.goto),H=$.when.type==="step_result"?`${$.when.result}`:I0[$.when.type]??$.when.type,L=I.id===$.goto;let R;L?R="back":Q.cy>X.cy+1?R="down":Q.cy<X.cy-1?R="back":R="same",N.push({from:I.id,to:$.goto,label:H,edgeKey:`${I.id}:${B}`,direction:R,backEdgeIndex:R==="back"?D++:0})});const T=new Map,z=new Map,O=new Map,q=new Map;for(const I of N)I.direction==="down"&&(T.set(I.from,(T.get(I.from)??0)+1),z.set(I.to,(z.get(I.to)??0)+1));const V=new Map,W=new Map;for(const I of N){if(I.direction!=="same")continue;const $=[I.from,I.to].sort().join("|");V.set($,(V.get($)??0)+1)}for(const I of N){if(I.direction==="back"||I.direction==="same"){let R=0;if(I.direction==="same"){const U=[I.from,I.to].sort().join("|");R=W.get(U)??0,W.set(U,R+1)}f.push({...I,fromPort:0,toPort:0,sameEdgeIndex:R});continue}const $=T.get(I.from)??1,B=z.get(I.to)??1,X=O.get(I.from)??0,Q=q.get(I.to)??0;O.set(I.from,X+1),q.set(I.to,Q+1);const H=$===1?0:-.6+1.2*X/($-1),L=B===1?0:-.6+1.2*Q/(B-1);f.push({...I,fromPort:H,toPort:L,sameEdgeIndex:0})}return{nodes:d,edges:f,width:c,height:A+Pn/2+Ps,posMap:g}}function KA({steps:e,entryStep:r,selectedNodeId:s,selectedEdgeKey:i,startConditionLabel:c,agentTypes:u,isReadOnly:h,onSelectNode:l,onSelectEdge:d,onRemoveStep:f,onCreateTransition:g,onReconnectTo:m,onReconnectFrom:v,onDeleteTransition:S}){const k=P.useRef(null),C=P.useRef(!1),[y,b]=P.useState(null),[x,_]=P.useState(null),[j,A]=P.useState(null),{nodes:N,edges:D,width:T,height:z,posMap:O}=P.useMemo(()=>GA(e,r,c,u),[e,r,c,u]),q=P.useCallback(Z=>{var re;const ee=k.current;if(!ee)return{x:0,y:0};const Y=ee.createSVGPoint();Y.x=Z.clientX,Y.y=Z.clientY;const G=(re=ee.getScreenCTM())==null?void 0:re.inverse();if(!G)return{x:0,y:0};const ae=Y.matrixTransform(G);return{x:ae.x,y:ae.y}},[]),V=P.useCallback(Z=>!Z||!x||Z==="$start"?!1:x.type==="reconnect-from"?Z!=="$done":!0,[x]),W=P.useCallback((Z,ee)=>{if(h)return;Z.stopPropagation(),Z.preventDefault();const Y=q(Z);_({type:"new",fromNodeId:ee,mouseX:Y.x,mouseY:Y.y})},[q,h]),I=P.useCallback((Z,ee)=>{if(h)return;Z.stopPropagation(),Z.preventDefault();const Y=q(Z);_({type:"reconnect-to",fromNodeId:ee.from,edgeKey:ee.edgeKey,mouseX:Y.x,mouseY:Y.y})},[q,h]),$=P.useCallback((Z,ee)=>{if(h)return;Z.stopPropagation(),Z.preventDefault();const Y=q(Z);_({type:"reconnect-from",fromNodeId:ee.from,fixedTargetId:ee.to,edgeKey:ee.edgeKey,mouseX:Y.x,mouseY:Y.y})},[q,h]),B=P.useCallback(Z=>{if(!x)return;const ee=q(Z);_(Y=>Y?{...Y,mouseX:ee.x,mouseY:ee.y}:null)},[x,q]),X=P.useCallback(()=>{x&&(C.current=!0,j&&V(j)&&(x.type==="new"?g(x.fromNodeId,j):x.type==="reconnect-to"?m(x.edgeKey,j):x.type==="reconnect-from"&&v(x.edgeKey,j)),_(null),A(null))},[x,j,V,g,m,v]),Q=P.useCallback(()=>{if(C.current){C.current=!1;return}l(null),d(null)},[l,d]);P.useEffect(()=>{if(h)return;const Z=ee=>{ee.target instanceof HTMLInputElement||ee.target instanceof HTMLTextAreaElement||ee.target instanceof HTMLSelectElement||(ee.key==="Delete"||ee.key==="Backspace")&&i&&i!=="start"&&(ee.preventDefault(),S(i),d(null))};return document.addEventListener("keydown",Z),()=>document.removeEventListener("keydown",Z)},[h,i,S,d]);const H=Z=>{const ee=O.get(Z.from),Y=O.get(Z.to);if(!ee||!Y)return null;let G,ae,re,be="middle",ve,Re;if(Z.direction==="down"){const Oe=ee.cx+Z.fromPort*(ee.w/2-10),ze=ee.cy+ee.h/2,We=Y.cx+Z.toPort*(Y.w/2-10),Ee=Y.cy-Y.h/2,fe=Ee-ze,je=We-Oe;G=`M ${Oe} ${ze} C ${Oe} ${ze+fe*.4}, ${We-je*.2} ${Ee-fe*.1}, ${We} ${Ee}`,ae=Oe+(We-Oe)*.5,re=ze+fe*.6,ve={x:Oe,y:ze},Re={x:We,y:Ee}}else if(Z.direction==="back"){const Oe=Z.from===Z.to,ze=ee.cx>=T/2,We=Z.backEdgeIndex*16,Ee=ze?T-20-We:20+We;if(Oe){const fe=ee.cx>=T/2,je=30+Z.backEdgeIndex*14,Ue=ee.cy-ee.h/2,It=fe?ee.cx+ee.w/2:ee.cx-ee.w/2,pe=fe?It+je:It-je,Ne=ee.cx+(fe?ee.w/4:-ee.w/4),Me=Ue-20-Z.backEdgeIndex*10;G=`M ${It} ${ee.cy} C ${pe} ${ee.cy}, ${pe} ${Me}, ${Ne} ${Ue}`,ae=pe+10,re=Me+4,be="middle",ve={x:It,y:ee.cy},Re={x:Ne,y:Ue}}else{const fe=ze?ee.cx+ee.w/2:ee.cx-ee.w/2,je=Y.cx+(ze?Y.w/4:-Y.w/4),Ue=Math.min(ee.cy,Y.cy)-Y.h/2-18-Z.backEdgeIndex*14;G=`M ${fe} ${ee.cy} L ${Ee} ${ee.cy} L ${Ee} ${Ue} L ${je} ${Ue} L ${je} ${Y.cy-Y.h/2}`,ae=Ee,re=(ee.cy+Ue)/2,be=ze?"start":"end",ve={x:fe,y:ee.cy},Re={x:je,y:Y.cy-Y.h/2}}}else{const Oe=Y.cx>ee.cx,ze=Z.sameEdgeIndex===0?-12:12,We=Oe?ee.cx+ee.w/2:ee.cx-ee.w/2,Ee=Oe?Y.cx-Y.w/2:Y.cx+Y.w/2,fe=ee.cy+ze,je=Y.cy+ze,Ue=(We+Ee)/2;G=`M ${We} ${fe} C ${Ue} ${fe}, ${Ue} ${je}, ${Ee} ${je}`,ae=Ue,re=(fe+je)/2-6,ve={x:We,y:fe},Re={x:Ee,y:je}}return{path:G,labelX:ae,labelY:re,labelAnchor:be,fromPt:ve,toPt:Re}},L=(Z,ee)=>{const Y=H(Z);if(!Y)return null;const{path:G,labelX:ae,labelY:re,labelAnchor:be}=Y,ve=i===Z.edgeKey,Re=Z.label&&!(Z.from==="$start"&&Z.label==="Always");return o.jsxs("g",{children:[o.jsx("path",{d:G,fill:"none",stroke:"transparent",strokeWidth:14,className:"cursor-pointer",onClick:Oe=>{Oe.stopPropagation(),d(ve?null:Z.edgeKey)}}),o.jsx("path",{d:G,fill:"none",stroke:ve?"#58a6ff":"#484f58",strokeWidth:ve?2.2:1.2,markerEnd:ve?"url(#arrow-selected)":"url(#arrow)",pointerEvents:"none"}),Re&&o.jsx("text",{x:ae+(be==="start"?5:be==="end"?-5:0),y:re+3,textAnchor:be,className:"text-[8px]",fill:ve?"#79c0ff":"#8b949e",style:{paintOrder:"stroke",stroke:"#0d1117",strokeWidth:3,strokeLinejoin:"round"},pointerEvents:"none",children:Z.label})]},ee)},R=()=>{if(!i||x)return null;const Z=D.find(re=>re.edgeKey===i);if(!Z)return null;const ee=H(Z);if(!ee)return null;const{fromPt:Y,toPt:G}=ee,ae=6;return o.jsxs(o.Fragment,{children:[Z.edgeKey!=="start"&&o.jsx("circle",{cx:Y.x,cy:Y.y,r:ae,fill:"#58a6ff",fillOpacity:.25,stroke:"#58a6ff",strokeWidth:2,strokeOpacity:.8,className:"cursor-grab",onMouseDown:re=>$(re,Z)}),o.jsx("circle",{cx:G.x,cy:G.y,r:ae,fill:"#58a6ff",fillOpacity:.25,stroke:"#58a6ff",strokeWidth:2,strokeOpacity:.8,className:"cursor-grab",onMouseDown:re=>I(re,Z)})]})},U=()=>{if(!x)return null;let Z,ee,Y,G;if(x.type==="reconnect-from"){const be=O.get(x.fixedTargetId);if(!be)return null;Z=x.mouseX,ee=x.mouseY,Y=be.cx,G=be.cy-be.h/2}else{const be=O.get(x.fromNodeId);if(!be)return null;Z=be.cx,ee=be.cy+be.h/2,Y=x.mouseX,G=x.mouseY}const ae=G-ee,re=Math.abs(ae)>10?`M ${Z} ${ee} C ${Z} ${ee+ae*.4}, ${Y} ${G-ae*.4}, ${Y} ${G}`:`M ${Z} ${ee} L ${Y} ${G}`;return o.jsx("path",{d:re,fill:"none",stroke:"#58a6ff",strokeWidth:2,strokeDasharray:"6 3",strokeOpacity:.7,pointerEvents:"none"})},F=Z=>{const ee=Z.cy+Z.h/2,Y=(x==null?void 0:x.fromNodeId)===Z.id;return o.jsx("circle",{cx:Z.cx,cy:ee,r:Cv,fill:Y?"#58a6ff":"#1c2128",stroke:Y?"#58a6ff":"#484f58",strokeWidth:1.5,strokeOpacity:Y?1:.5,className:"cursor-crosshair",onMouseDown:G=>W(G,Z.id)})},ne=Z=>{const ee=Z.cy-Z.h/2,Y=x&&j===Z.id&&V(Z.id);return o.jsx("circle",{cx:Z.cx,cy:ee,r:Cv,fill:Y?"#3fb950":"#1c2128",stroke:Y?"#3fb950":"#484f58",strokeWidth:1.5,strokeOpacity:Y?1:.5})};return o.jsxs("svg",{ref:k,viewBox:`0 0 ${T} ${z}`,className:"block w-full",preserveAspectRatio:"xMidYMin meet",onMouseMove:B,onMouseUp:X,onClick:Q,children:[o.jsxs("defs",{children:[o.jsx("marker",{id:"arrow",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"7",markerHeight:"5",orient:"auto",children:o.jsx("polygon",{points:"0 0, 10 3.5, 0 7",fill:"#484f58"})}),o.jsx("marker",{id:"arrow-selected",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"7",markerHeight:"5",orient:"auto",children:o.jsx("polygon",{points:"0 0, 10 3.5, 0 7",fill:"#58a6ff"})})]}),D.map((Z,ee)=>L(Z,ee)),N.map(Z=>{const ee=s===Z.id,Y=Z.cx-Z.w/2,G=Z.cy-Z.h/2,ae=y===Z.id,re=x&&j===Z.id&&V(Z.id);if(Z.type==="terminal"){const ve=Z.id==="$start",Re=ve?"#58a6ff":"#3fb950",Oe=ve,ze=!ve;return o.jsxs("g",{onClick:We=>{We.stopPropagation(),ve&&!h&&d("start")},className:ve&&!h?"cursor-pointer":void 0,children:[re&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:Z.h/2+3,fill:"none",stroke:"#3fb950",strokeOpacity:.6,strokeWidth:2}),ve&&i==="start"&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:Z.h/2+3,fill:"none",stroke:"#58a6ff",strokeOpacity:.5,strokeWidth:2}),o.jsx("rect",{x:Y,y:G,width:Z.w,height:Z.h,rx:Z.h/2,fill:Re,fillOpacity:.08,stroke:Re,strokeOpacity:.4,strokeWidth:1.5}),o.jsx("text",{x:Z.cx,y:Z.cy+4,textAnchor:"middle",fill:Re,className:"text-[10px] font-medium",pointerEvents:"none",children:Z.label}),Oe&&F(Z),ze&&ne(Z)]},Z.id)}const be=Z.color??"#6b7280";return o.jsxs("g",{onClick:ve=>{ve.stopPropagation(),h||l(ee?null:Z.id)},onMouseEnter:()=>b(Z.id),onMouseLeave:()=>b(null),className:h?void 0:"cursor-pointer",children:[re&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:12,fill:"none",stroke:"#3fb950",strokeOpacity:.6,strokeWidth:2}),ee&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:12,fill:"none",stroke:"#58a6ff",strokeOpacity:.5,strokeWidth:2}),o.jsx("rect",{x:Y,y:G,width:Z.w,height:Z.h,rx:10,fill:be,fillOpacity:.08,stroke:be,strokeOpacity:.6,strokeWidth:ee?2:1.5}),o.jsx("text",{x:Z.cx,y:Z.cy+4,textAnchor:"middle",fill:"#c9d1d9",className:"text-[11px] font-medium",pointerEvents:"none",children:Z.label}),!h&&F(Z),!h&&ne(Z),ae&&!x&&!h&&o.jsxs("g",{onClick:ve=>{ve.stopPropagation(),f(Z.id)},className:"cursor-pointer",children:[o.jsx("circle",{cx:Y+Z.w-2,cy:G+2,r:8,fill:"#0d1117",fillOpacity:.9,stroke:"#f85149",strokeOpacity:.5,strokeWidth:1}),o.jsx("line",{x1:Y+Z.w-5,y1:G-1,x2:Y+Z.w+1,y2:G+5,stroke:"#f85149",strokeWidth:1.5,strokeLinecap:"round"}),o.jsx("line",{x1:Y+Z.w+1,y1:G-1,x2:Y+Z.w-5,y2:G+5,stroke:"#f85149",strokeWidth:1.5,strokeLinecap:"round"})]})]},Z.id)}),x&&N.map(Z=>V(Z.id)?o.jsx("rect",{x:Z.cx-Z.w/2-8,y:Z.cy-Z.h/2-8,width:Z.w+16,height:Z.h+16,fill:"transparent",rx:12,onMouseEnter:()=>A(Z.id),onMouseLeave:()=>A(null),onMouseUp:ee=>{ee.stopPropagation(),X()}},`drop-${Z.id}`):null),U(),R()]})}const ar="w-full px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary",qs="w-full px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary",fn="block text-[11px] text-text-secondary mb-0.5";function YA({fromLabel:e,toLabel:r,condition:s,fromStep:i,agentTypes:c,onUpdateCondition:u,onDelete:h}){const l=i&&(i.type==="sub_agent"||i.type==="agent")?c.find(f=>f.id===(i.type==="sub_agent"?i.subAgentType:i.toolMode)):void 0,d=(l==null?void 0:l.results)&&l.results.length>0;return o.jsxs("div",{className:"space-y-3 text-sm",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold bg-blue-500/15 text-blue-300",children:"Transition"}),o.jsx("button",{onClick:h,className:"p-1 rounded text-text-muted hover:text-accent-error text-xs",children:"Delete"})]}),o.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-text-secondary",children:[o.jsx("span",{className:"font-medium text-text-primary",children:e}),o.jsx(Vv,{}),o.jsx("span",{className:"font-medium text-text-primary",children:r})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Condition"}),o.jsx("select",{value:s.type,onChange:f=>{u(f.target.value==="step_result"?{type:"step_result",result:"success"}:{type:f.target.value})},className:qs,children:B0.map(f=>o.jsx("option",{value:f.value,children:f.label},f.value))})]}),s.type==="step_result"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Result"}),d?o.jsx("select",{value:s.result??l.results[0],onChange:f=>{u({type:"step_result",result:f.target.value})},className:qs,children:l.results.map(f=>o.jsx("option",{value:f,children:f},f))}):o.jsx("input",{type:"text",value:s.result??"success",onChange:f=>u({type:"step_result",result:f.target.value}),placeholder:"e.g. success, passed, failed",className:ar})]}),o.jsx("p",{className:"text-text-muted text-[10px]",children:"Drag handles to reconnect. Press Delete to remove."})]})}function dh({variables:e,onInsert:r}){return e.length===0?null:o.jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:e.map(s=>o.jsx("button",{type:"button",onClick:()=>r(s.name),title:s.description,className:"px-1.5 py-0.5 rounded text-[10px] font-mono bg-bg-primary border border-border text-text-secondary hover:text-accent-primary hover:border-accent-primary/40 transition-colors",children:`{{${s.name}}}`},s.name))})}function XA({step:e,isEntry:r,agentTypes:s,transitionCount:i,templateVariables:c,onUpdate:u,onRemove:h,onSetEntry:l}){const{color:d,name:f}=Df(e,s);return o.jsxs("div",{className:"space-y-3 text-sm",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold",style:{backgroundColor:d+"20",color:d},children:f}),r&&o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold bg-accent-primary/15 text-accent-primary",children:"Entry"})]}),o.jsxs("div",{className:"flex items-center gap-1",children:[!r&&o.jsx("button",{onClick:l,className:"p-1 rounded text-text-muted hover:text-accent-primary text-xs",children:"Set entry"}),o.jsx("button",{onClick:h,className:"p-1 rounded text-text-muted hover:text-accent-error text-xs",children:"Delete"})]})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Type"}),o.jsx("select",{value:e.type,onChange:g=>{const m=g.target.value,v=m==="sub_agent"?"verification":"build";if(m==="agent"){const S=s.find(k=>!k.subagent);u({...e,type:m,phase:v,toolMode:(S==null?void 0:S.id)??"builder",name:(S==null?void 0:S.name)??"Agent"})}else if(m==="sub_agent"){const S=s.find(k=>k.subagent);u({...e,type:m,phase:v,subAgentType:(S==null?void 0:S.id)??"",name:(S==null?void 0:S.name)??"Sub-Agent"})}else u({...e,type:m,phase:v,name:"Shell"})},className:qs,children:VA.map(g=>o.jsx("option",{value:g.value,children:g.label},g.value))})]}),e.type==="agent"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Agent Type"}),o.jsx("select",{value:e.toolMode??"builder",onChange:g=>{const m=s.find(v=>v.id===g.target.value);u({...e,toolMode:g.target.value,name:(m==null?void 0:m.name)??g.target.value})},className:qs,children:s.filter(g=>!g.subagent).map(g=>o.jsx("option",{value:g.id,children:g.name},g.id))})]}),e.type==="sub_agent"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Sub-Agent Type"}),o.jsxs("select",{value:e.subAgentType??"",onChange:g=>{const m=s.find(v=>v.id===g.target.value);u({...e,subAgentType:g.target.value,name:(m==null?void 0:m.name)??g.target.value})},className:qs,children:[o.jsx("option",{value:"",children:"— select —"}),s.filter(g=>g.subagent).map(g=>o.jsx("option",{value:g.id,children:g.name},g.id))]})]}),(e.type==="agent"||e.type==="sub_agent")&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Prompt"}),o.jsx("textarea",{value:e.prompt??"",onChange:g=>u({...e,prompt:g.target.value||void 0}),rows:6,className:`${ar} resize-y text-xs`,placeholder:"Injected on first entry..."}),o.jsx(dh,{variables:c,onInsert:g=>u({...e,prompt:(e.prompt??"")+`{{${g}}}`})})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Nudge Prompt"}),o.jsx("textarea",{value:e.nudgePrompt??"",onChange:g=>u({...e,nudgePrompt:g.target.value||void 0}),rows:6,className:`${ar} resize-y text-xs`,placeholder:"Injected on re-entry..."}),o.jsx(dh,{variables:c,onInsert:g=>u({...e,nudgePrompt:(e.nudgePrompt??"")+`{{${g}}}`})})]})]}),e.type==="shell"&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Command"}),o.jsx("textarea",{value:e.command??"",onChange:g=>u({...e,command:g.target.value}),rows:3,className:`${ar} font-mono text-xs resize-y`,placeholder:"cd {{workdir}} && npm run lint"}),o.jsx(dh,{variables:c,onInsert:g=>u({...e,command:(e.command??"")+`{{${g}}}`})})]}),o.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Timeout (ms)"}),o.jsx("input",{type:"number",value:e.timeout??6e4,onChange:g=>u({...e,timeout:Number(g.target.value)}),className:`${ar} font-mono text-xs`})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Success Codes"}),o.jsx("input",{value:(e.successExitCodes??[0]).join(", "),onChange:g=>u({...e,successExitCodes:g.target.value.split(",").map(m=>Number(m.trim())).filter(m=>!isNaN(m))}),className:`${ar} font-mono text-xs`})]})]})]}),o.jsx("div",{className:"pt-1 border-t border-border/50",children:o.jsxs("p",{className:"text-text-muted text-[10px]",children:[i," outgoing transition",i!==1?"s":""," — drag from the bottom port to connect."]})})]})}const kv=[];function z0({isOpen:e,onClose:r,initialEditId:s}){const i=Tt(me=>me.defaults),c=Tt(me=>me.userItems),u=Tt(me=>me.loading),h=Tt(me=>me.templateVariables),l=Tt(me=>me.fetchWorkflows),d=Tt(me=>me.fetchWorkflow),f=Tt(me=>me.fetchDefaultContent),g=Tt(me=>me.fetchTemplateVariables),m=Tt(me=>me.createWorkflow),v=Tt(me=>me.updateWorkflow),S=Tt(me=>me.deleteWorkflow),{requestDelete:k,clearConfirm:C,isConfirming:y}=qh(),[b,x]=P.useState("list"),[_,j]=P.useState(null),[A,N]=P.useState(!1),[D,T]=P.useState(null),[z,O]=P.useState(null),[q,V]=P.useState(""),[W,I]=P.useState(""),[$,B]=P.useState(""),[X,Q]=P.useState("1.0.0"),[H,L]=P.useState("#3b82f6"),[R,U]=P.useState(""),[F,ne]=P.useState(50),[Z,ee]=P.useState(kv),[Y,G]=P.useState({type:"always"}),[ae,re]=P.useState(""),[be,ve]=P.useState(!1),[Re,Oe]=P.useState([]),[ze]=P.useState(null);P.useEffect(()=>{e&&(l(),g(),ke("/api/agents").then(me=>me.json()).then(me=>Oe(me.agents??[])).catch(()=>{}),T(null),O(null),s?i.some(ye=>ye.id===s)?f(s).then(ye=>{ye&&(V(ye.metadata.name+" (copy)"),I(`${s}-copy-${Date.now()}`),B(ye.metadata.description),Q(ye.metadata.version),L(ye.metadata.color??"#3b82f6"),U(ye.entryStep),ne(ye.settings.maxIterations),ee(ye.steps),G(ye.startCondition??{type:"always"}),re(""),j(null),N(!1),x("edit"))}):d(s).then(ye=>{ye&&(V(ye.metadata.name),I(ye.metadata.id),B(ye.metadata.description),Q(ye.metadata.version),L(ye.metadata.color??"#3b82f6"),U(ye.entryStep),ne(ye.settings.maxIterations),ee(ye.steps),G(ye.startCondition??{type:"always"}),re(""),j(s),N(!1),x("edit"))}):(x("list"),j(null),N(!1)))},[e,l,d,f,g,s]);const We=async me=>{const ye=await d(me);ye&&(j(me),V(ye.metadata.name),I(ye.metadata.id),B(ye.metadata.description),Q(ye.metadata.version),L(ye.metadata.color??"#3b82f6"),U(ye.entryStep),ne(ye.settings.maxIterations),ee(ye.steps),G(ye.startCondition??{type:"always"}),re(""),T(null),O(null),x("edit"))},Ee=async()=>{var Qe;const me=_??W;if(!me||!q)return re("Name is required."),!1;if(Z.length===0)return re("Add at least one step."),!1;let ye=R;if(!ye||!Z.some(He=>He.id===ye)){if(ye=((Qe=Z.find(He=>He.id))==null?void 0:Qe.id)??"",!ye)return re("All steps need an ID."),!1;U(ye)}ve(!0),re("");const we={metadata:{id:me,name:q,description:$,version:X||"1.0.0",color:H},entryStep:ye,settings:{maxIterations:F},steps:Z,startCondition:Y},Ve=_?await v(_,we):await m(we);return ve(!1),Ve.success?(_||j(me),!0):(re(Ve.error??"Failed to save."),!1)},fe=async()=>{await Ee()},je=async()=>{await Ee()&&(s?r():x("list"))},Ue=()=>{s?r():x("list")},It=me=>{V(me),_||I(qA(me))},pe=async me=>{if(i.some(we=>we.id===me)){const we=await f(me);if(!we)return;V(we.metadata.name),I(we.metadata.id),B(we.metadata.description),Q(we.metadata.version),L(we.metadata.color??"#3b82f6"),U(we.entryStep),ne(we.settings.maxIterations),ee(we.steps),G(we.startCondition??{type:"always"}),re(""),j(me),N(!0)}else{const we=await d(me);if(!we)return;V(we.metadata.name),I(we.metadata.id),B(we.metadata.description),Q(we.metadata.version),L(we.metadata.color??"#3b82f6"),U(we.entryStep),ne(we.settings.maxIterations),ee(we.steps),G(we.startCondition??{type:"always"}),re(""),j(me),N(!0)}x("edit")},Ne=async me=>{const we=i.some(Ve=>Ve.id===me)?await f(me):await d(me);we&&(V(we.metadata.name+" (copy)"),I(`${me}-copy-${Date.now()}`),B(we.metadata.description),Q(we.metadata.version),L(we.metadata.color??"#3b82f6"),U(we.entryStep),ne(we.settings.maxIterations),ee(we.steps),G(we.startCondition??{type:"always"}),re(""),j(null),N(!1),x("edit"))},Me=()=>{j(null),V(""),I(""),B(""),Q("1.0.0"),L("#3b82f6"),U(""),ne(50),ee(structuredClone(kv)),G({type:"always"}),re(""),T(null),O(null),N(!1),x("edit")},lt=async me=>{await S(me),C()},ue=P.useCallback(me=>{T(me),O(null)},[]),_e=P.useCallback(me=>{O(me),T(null)},[]),Te=D!==null?Number(D):-1,Ie=Te>=0?Z[Te]??null:null,$e=P.useCallback(me=>{ee(ye=>ye.map((we,Ve)=>Ve===Te?me:we))},[Te]),St=Y.type==="step_result"?`${Y.result}`:I0[Y.type]??Y.type,Ye=()=>{const me=Z.length,ye=WA(Z),we=Re.find(Ve=>!Ve.subagent);ee([...Z,{id:ye,name:(we==null?void 0:we.name)??"Agent",type:"agent",phase:"build",toolMode:(we==null?void 0:we.id)??"builder",transitions:[]}]),R||U(ye),ue(String(me))},Dt=P.useCallback((me,ye)=>{me==="$start"?(U(ye),_e("start")):ee(we=>{const Ve=we.find(He=>He.id===me),Qe=Ve?Ve.transitions.length:0;return _e(`${me}:${Qe}`),we.map(He=>He.id===me?{...He,transitions:[...He.transitions,{when:{type:"always"},goto:ye}]}:He)})},[_e]),gt=P.useCallback((me,ye)=>{if(me==="start")U(ye);else{const we=me.lastIndexOf(":"),Ve=me.slice(0,we),Qe=parseInt(me.slice(we+1));ee(He=>He.map(Zt=>Zt.id===Ve?{...Zt,transitions:Zt.transitions.map((Lt,Bt)=>Bt===Qe?{...Lt,goto:ye}:Lt)}:Zt))}},[]),Xt=P.useCallback((me,ye)=>{const we=me.lastIndexOf(":"),Ve=me.slice(0,we),Qe=parseInt(me.slice(we+1));ee(He=>{const Zt=He.find(Bt=>Bt.id===Ve);if(!Zt)return He;const Lt=Zt.transitions[Qe];return Lt?He.map(Bt=>Bt.id===Ve?{...Bt,transitions:Bt.transitions.filter((qr,oe)=>oe!==Qe)}:Bt.id===ye?{...Bt,transitions:[...Bt.transitions,Lt]}:Bt):He}),O(null)},[]),ct=P.useCallback(me=>{if(me==="start")U("");else{const ye=me.lastIndexOf(":"),we=me.slice(0,ye),Ve=parseInt(me.slice(ye+1));ee(Qe=>Qe.map(He=>He.id===we?{...He,transitions:He.transitions.filter((Zt,Lt)=>Lt!==Ve)}:He))}O(null)},[]),qn=P.useCallback((me,ye)=>{if(me==="start")G(ye);else{const we=me.lastIndexOf(":"),Ve=me.slice(0,we),Qe=parseInt(me.slice(we+1));ee(He=>He.map(Zt=>Zt.id===Ve?{...Zt,transitions:Zt.transitions.map((Lt,Bt)=>Bt===Qe?{...Lt,when:ye}:Lt)}:Zt))}},[]),sn=me=>Df(me,Re).name,Xi=()=>{if(!z)return null;if(z==="start"){const Lt=Z.find(Bt=>Bt.id===R);return{type:"start",fromLabel:"Start",toLabel:Lt?sn(Lt):"(none)",condition:Y}}const me=z.lastIndexOf(":"),ye=z.slice(0,me),we=parseInt(z.slice(me+1)),Ve=Z.find(Lt=>Lt.id===ye);if(!Ve)return null;const Qe=Ve.transitions[we];if(!Qe)return null;const He=Z.find(Lt=>Lt.id===Qe.goto),Zt=Qe.goto==="$done"?"Done":He?sn(He):Qe.goto;return{type:"step",fromLabel:sn(Ve),toLabel:Zt,condition:Qe.when}};if(b==="edit"){const me=Xi();return o.jsxs(jt,{isOpen:e,onClose:Ue,title:A?q:_?"Edit Workflow":"New Workflow",size:"full",children:[ae&&o.jsx("div",{className:"text-accent-error text-sm px-3 py-2 bg-accent-error/10 rounded mb-3",children:ae}),o.jsxs("div",{className:"flex items-end gap-3 mb-3 pb-3 border-b border-border flex-wrap",children:[o.jsxs("div",{className:"min-w-[140px]",children:[o.jsx("label",{className:fn,children:"Name"}),o.jsx("input",{value:q,onChange:ye=>It(ye.target.value),placeholder:"Workflow name",className:`${ar} ${A?"opacity-50":""}`,readOnly:A})]}),o.jsxs("div",{className:"min-w-[100px]",children:[o.jsx("label",{className:fn,children:"ID"}),o.jsx("input",{value:W,readOnly:!0,className:`${ar} font-mono opacity-50`})]}),o.jsxs("div",{className:"flex-1 min-w-[140px]",children:[o.jsx("label",{className:fn,children:"Description"}),o.jsx("input",{value:$,onChange:ye=>!A&&B(ye.target.value),readOnly:A,placeholder:"What does this workflow do?",className:`${ar} ${A?"opacity-50":""}`})]}),o.jsxs("div",{className:"w-20",children:[o.jsx("label",{className:fn,children:"Max Iter."}),o.jsx("input",{type:"number",value:F,onChange:ye=>!A&&ne(Number(ye.target.value)),readOnly:A,className:`${ar} font-mono ${A?"opacity-50":""}`})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Color"}),o.jsx("input",{type:"color",value:H,onChange:ye=>!A&&L(ye.target.value),disabled:A,className:`w-8 h-8 rounded border border-border bg-transparent ${A?"opacity-50":"cursor-pointer"}`})]})]}),o.jsxs("div",{className:"flex gap-3",style:{height:"calc(90vh - 220px)",minHeight:300},children:[o.jsxs("div",{className:"flex-1 min-w-0 bg-bg-primary/50 border border-border rounded-lg flex flex-col overflow-hidden",children:[o.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/50 shrink-0",children:[o.jsx("span",{className:"text-[10px] text-text-muted uppercase tracking-wider font-medium",children:"Flow"}),!A&&o.jsx("button",{onClick:Ye,className:"text-[11px] text-accent-primary hover:text-accent-primary/80",children:"+ Add Step"})]}),o.jsxs("div",{className:"flex-1 min-h-0 p-2 overflow-auto",children:[o.jsx(KA,{steps:Z,entryStep:R,selectedNodeId:(Ie==null?void 0:Ie.id)??null,selectedEdgeKey:z,startConditionLabel:St,agentTypes:Re,isReadOnly:A,onSelectNode:ye=>{if(ye===null){ue(null);return}const we=Z.findIndex(Ve=>Ve.id===ye);ue(we>=0?String(we):null)},onSelectEdge:_e,onRemoveStep:ye=>{var Ve;const we=Z.findIndex(Qe=>Qe.id===ye);if(ee(Qe=>Qe.filter(He=>He.id!==ye)),Te===we&&ue(null),R===ye){const Qe=Z.filter(He=>He.id!==ye);U(((Ve=Qe[0])==null?void 0:Ve.id)??"")}},onCreateTransition:Dt,onReconnectTo:gt,onReconnectFrom:Xt,onDeleteTransition:ct}),Z.length===0&&o.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-text-muted",children:[o.jsx("p",{className:"text-xs mb-2",children:"No steps yet"}),o.jsx("button",{onClick:Ye,className:"px-3 py-1.5 rounded bg-accent-primary/10 text-accent-primary text-xs hover:bg-accent-primary/20",children:"+ Add your first step"})]})]})]}),o.jsxs("div",{className:"w-[300px] shrink-0 border border-border rounded-lg bg-bg-secondary flex flex-col overflow-hidden",children:[o.jsx("div",{className:"px-3 py-1.5 border-b border-border shrink-0",children:o.jsx("span",{className:"text-[10px] text-text-muted uppercase tracking-wider font-medium",children:"Properties"})}),o.jsx("div",{className:"p-3 overflow-y-auto flex-1 min-h-0",children:A&&(me||Ie)?o.jsx("p",{className:"text-text-muted text-xs text-center py-8",children:'View only — click "Duplicate & Customize" to edit.'}):me?me.type==="start"?o.jsxs("div",{className:"space-y-3 text-sm",children:[o.jsx("div",{className:"flex items-center gap-2",children:o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold bg-blue-500/20 text-blue-300",children:"Start"})}),R&&o.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-text-secondary",children:[o.jsx("span",{className:"text-text-primary font-medium",children:"Start"}),o.jsx(Vv,{}),o.jsx("span",{className:"text-text-primary font-medium",children:me.toLabel})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Activation Condition"}),o.jsx("select",{value:Y.type,onChange:ye=>G(ye.target.value==="step_result"?{type:"step_result",result:"success"}:{type:ye.target.value}),className:qs,children:B0.map(ye=>o.jsx("option",{value:ye.value,children:ye.label},ye.value))})]}),Y.type==="step_result"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Result"}),R&&(()=>{const ye=Z.find(He=>He.id===R),we=ye&&(ye.type==="sub_agent"||ye.type==="agent")?Re.find(He=>He.id===(ye.type==="sub_agent"?ye.subAgentType:ye.toolMode)):void 0,Ve=(we==null?void 0:we.results)&&we.results.length>0,Qe=(we==null?void 0:we.results)??[];return Ve?o.jsx("select",{value:Y.result??Qe[0],onChange:He=>G({type:"step_result",result:He.target.value}),className:qs,children:Qe.map(He=>o.jsx("option",{value:He,children:He},He))}):o.jsx("input",{type:"text",value:Y.result??"success",onChange:He=>G({type:"step_result",result:He.target.value}),placeholder:"e.g. success, passed, failed",className:ar})})()]}),o.jsx("p",{className:"text-text-muted text-[10px]",children:"Workflow only proceeds when this condition is met. Drag the target handle to change entry step."})]}):o.jsx(YA,{fromLabel:me.fromLabel,toLabel:me.toLabel,condition:me.condition,fromStep:me.type==="step"?Z.find(ye=>ye.id===me.fromLabel):void 0,agentTypes:Re,onUpdateCondition:ye=>qn(z,ye),onDelete:()=>ct(z)}):Ie?o.jsx(XA,{step:Ie,isEntry:Ie.id===R,agentTypes:Re,transitionCount:Ie.transitions.length,templateVariables:h,onUpdate:$e,onRemove:()=>{var ye;if(Ie&&(ee(Z.filter((we,Ve)=>Ve!==Te)),ue(null),R===Ie.id)){const we=Z.filter((Ve,Qe)=>Qe!==Te);U(((ye=we[0])==null?void 0:ye.id)??"")}},onSetEntry:()=>U(Ie.id)}):o.jsxs("p",{className:"text-text-muted text-xs text-center py-8",children:["Click a node or edge to edit.",o.jsx("br",{}),"Drag from a port to connect."]})})]})]}),o.jsxs("div",{className:"flex justify-end gap-2 pt-3 mt-3 border-t border-border",children:[o.jsx(nt,{variant:"secondary",onClick:Ue,children:"Close"}),A?o.jsx(nt,{variant:"primary",onClick:()=>{V(q+" (copy)"),I(`${_}-copy-${Date.now()}`),j(null),N(!1)},children:"Duplicate & Customize"}):o.jsxs(o.Fragment,{children:[o.jsx(nt,{variant:"secondary",onClick:fe,disabled:be||!q,children:be?"Saving...":"Save"}),o.jsx(nt,{variant:"primary",onClick:je,disabled:be||!q,children:"Save & Close"})]})]})]})}return o.jsxs(jt,{isOpen:e,onClose:r,title:"Workflows",size:"lg",children:[o.jsxs("div",{className:"flex items-center justify-between mb-4",children:[o.jsx("p",{className:"text-text-secondary text-sm",children:"Workflows define the orchestrator's step sequence when running tasks."}),o.jsx("div",{className:"flex items-center gap-2 flex-shrink-0 ml-3",children:o.jsx(nt,{variant:"primary",size:"sm",onClick:Me,children:"+ New"})})]}),u&&i.length===0&&c.length===0?o.jsx("div",{className:"text-text-muted text-sm",children:"Loading workflows..."}):i.length===0&&c.length===0?o.jsx("div",{className:"text-text-muted text-sm",children:"No workflows installed."}):o.jsxs("div",{className:"space-y-4",children:[i.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Built-in"}),o.jsx("div",{className:"space-y-2",children:i.map(me=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsxs("div",{className:"min-w-0 flex-1 mr-3",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-primary text-sm font-medium",children:me.name}),o.jsxs("span",{className:"text-text-muted text-xs",children:["v",me.version]})]}),o.jsx("p",{className:"text-text-secondary text-xs mt-0.5 truncate",children:me.description})]}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx("button",{onClick:()=>pe(me.id),className:"p-1.5 rounded text-text-muted hover:text-text-primary hover:bg-bg-primary transition-colors",title:"View",children:o.jsx(lc,{})}),o.jsx(ao,{onClick:()=>Ne(me.id)})]})]},me.id))})]}),c.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Custom"}),o.jsx("div",{className:"space-y-2",children:c.map(me=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsxs("div",{className:"min-w-0 flex-1 mr-3",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-primary text-sm font-medium",children:me.name}),o.jsxs("span",{className:"text-text-muted text-xs",children:["v",me.version]})]}),o.jsx("p",{className:"text-text-secondary text-xs mt-0.5 truncate",children:me.description})]}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx(ao,{onClick:()=>Ne(me.id)}),o.jsx(Wi,{onClick:()=>We(me.id)}),y(me.id,"delete")?o.jsx(Wh,{onConfirm:()=>lt(me.id),onCancel:()=>{}}):o.jsx(Vh,{onClick:()=>k(me.id)})]})]},me.id))})]})]})]})}function ZA(e,r){const s=e.startCondition;if(!s||s.type==="always")return!0;switch(s.type){case"has_pending_criteria":return r.some(i=>i.status.type!=="passed");case"all_criteria_passed":return r.length===0||r.every(i=>i.status.type==="passed");case"all_criteria_completed_or_passed":return r.every(i=>i.status.type==="completed"||i.status.type==="passed");case"any_criteria_blocked":return r.some(i=>i.status.type==="failed"&&i.attempts.filter(c=>c.status==="failed").length>=4);case"step_result":return null;default:return null}}function QA({onSendCommand:e,onSelectWorkflow:r,onOpenCommandsManager:s,onOpenWorkflowsManager:i,onAttach:c,textareaContent:u,attachments:h,criteria:l}){const[d,f]=P.useState(!1),[g,m]=P.useState("commands"),[v,S]=P.useState(""),[k,C]=P.useState(0),[y,b]=P.useState(null),[x,_]=P.useState(null),j=P.useRef(null),A=P.useRef(null),N=hn(U=>U.defaults),D=hn(U=>U.userItems),T=hn(U=>U.fetchCommands),z=Tt(U=>U.defaults),O=Tt(U=>U.userItems),q=Tt(U=>U.fetchWorkflows),V=[...N,...D],W=[...z,...O];P.useEffect(()=>{d&&(g==="commands"?T():g==="workflows"&&q())},[d,g,T,q]),P.useEffect(()=>{d&&(S(""),C(0),requestAnimationFrame(()=>{var U;return(U=j.current)==null?void 0:U.focus()}))},[d,g]),P.useEffect(()=>{if(!d)return;const U=F=>{var ne;(ne=A.current)!=null&&ne.contains(F.target)||f(!1)};return document.addEventListener("mousedown",U),()=>document.removeEventListener("mousedown",U)},[d]);const I=U=>{switch(U.key){case"ArrowDown":U.preventDefault(),C(F=>{const Z=(g==="commands"?V:W).filter(ee=>{const Y=v.toLowerCase();return!Y||ee.name.toLowerCase().includes(Y)});return Math.min(F+1,Z.length-1)});break;case"ArrowUp":U.preventDefault(),C(F=>Math.max(F-1,0));break;case"Enter":U.preventDefault();break;case"Escape":U.preventDefault(),f(!1);break}},$=U=>{S(U),C(0)},B=V.filter(U=>!v||U.name.toLowerCase().includes(v.toLowerCase())),X=W.filter(U=>!v||U.name.toLowerCase().includes(v.toLowerCase())),Q=async U=>{const F=await hn.getState().fetchCommand(U);F&&e(F.prompt,F.metadata.agentMode,u,h),f(!1)},H=U=>{r(U),f(!1)},L=(U,F)=>{F.stopPropagation(),f(!1),b(U)},R=(U,F)=>{F.stopPropagation(),f(!1),_(U)};return o.jsxs("div",{ref:A,className:"relative",children:[o.jsx("button",{type:"button",onClick:()=>f(!d),className:"px-1.5 py-2 rounded-r bg-bg-secondary text-text-muted hover:text-text-primary hover:bg-bg-tertiary transition-colors border-l border-border/50",title:"More options",children:o.jsx(Gv,{className:"w-4 h-4"})}),d&&o.jsxs("div",{className:"absolute bottom-full right-0 mb-1 w-80 bg-bg-secondary border border-border rounded-lg shadow-xl z-50 overflow-hidden",children:[o.jsxs("div",{className:"flex border-b border-border",children:[o.jsx("button",{type:"button",onClick:()=>{m("commands"),S(""),C(0)},className:`flex-1 px-4 py-2 text-sm font-medium transition-colors ${g==="commands"?"text-accent-primary border-b-2 border-accent-primary":"text-text-muted hover:text-text-primary"}`,children:"Commands"}),o.jsx("button",{type:"button",onClick:()=>{m("workflows"),S(""),C(0)},className:`flex-1 px-4 py-2 text-sm font-medium transition-colors ${g==="workflows"?"text-accent-primary border-b-2 border-accent-primary":"text-text-muted hover:text-text-primary"}`,children:"Workflows"}),o.jsx("button",{type:"button",onClick:()=>m("attach"),className:`flex-1 px-4 py-2 text-sm font-medium transition-colors ${g==="attach"?"text-accent-primary border-b-2 border-accent-primary":"text-text-muted hover:text-text-primary"}`,children:"Attach"})]}),g!=="attach"&&o.jsx("div",{className:"p-2 border-b border-border",children:o.jsx("input",{ref:j,value:v,onChange:U=>$(U.target.value),onKeyDown:I,placeholder:g==="commands"?"Search commands...":"Search workflows...",className:"w-full px-2 py-1 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary"})}),o.jsx("div",{className:"overflow-y-auto max-h-64 p-1",children:g==="commands"?B.length===0?o.jsx("div",{className:"px-3 py-2 text-text-muted text-sm",children:V.length===0?"No commands yet":"No matches"}):B.map((U,F)=>o.jsxs("div",{className:`flex items-center gap-1 px-3 py-2 rounded transition-colors group ${F===k?"bg-accent-primary/20":"hover:bg-bg-tertiary"}`,children:[o.jsx("button",{type:"button",onClick:()=>Q(U.id),className:"flex-1 text-left",children:o.jsx("div",{className:"text-sm text-text-primary font-medium",children:U.name})}),o.jsx(Wi,{className:"opacity-0 group-hover:opacity-100",onClick:ne=>L(U.id,ne)})]},U.id)):g==="workflows"?X.length===0?o.jsx("div",{className:"px-3 py-2 text-text-muted text-sm",children:W.length===0?"No workflows yet":"No matches"}):X.map((U,F)=>{const ne=ZA(U,l),Z=U.color??"#3b82f6";return o.jsxs("div",{className:`flex items-center gap-2 px-3 py-2 rounded transition-colors group ${F===k?"bg-accent-primary/20":"hover:bg-bg-tertiary"}`,children:[o.jsxs("button",{type:"button",onClick:()=>H(U.id),className:"flex-1 text-left flex items-center gap-2",children:[o.jsx("span",{className:"w-2 h-2 rounded-full flex-shrink-0",style:{backgroundColor:Z}}),o.jsx("span",{className:"text-sm text-text-primary font-medium flex-1",children:U.name}),ne!==null&&o.jsx("span",{className:"w-1.5 h-1.5 rounded-full flex-shrink-0",style:{backgroundColor:ne?"#22c55e":"#6b7280"},title:ne?"Entry condition met":"Entry condition not met"})]}),o.jsx(Wi,{className:"opacity-0 group-hover:opacity-100",onClick:ee=>R(U.id,ee)})]},U.id)}):o.jsxs("div",{className:"p-4 flex flex-col items-center gap-3",children:[o.jsxs("button",{type:"button",onClick:()=>{c(),f(!1)},className:"flex items-center gap-2 px-4 py-2 rounded bg-bg-tertiary hover:bg-accent-primary/20 text-text-primary transition-colors",children:[o.jsx(hw,{className:"w-4 h-4"}),o.jsx("span",{className:"text-sm font-medium",children:"Attach image"})]}),o.jsx("span",{className:"text-xs text-text-muted",children:"or drag & drop into chat"})]})}),g!=="attach"&&o.jsx("div",{className:"border-t border-border p-1",children:o.jsx("button",{type:"button",onClick:()=>{f(!1),g==="commands"?s():i()},className:"w-full text-left px-3 py-1.5 rounded text-sm text-text-muted hover:text-text-primary hover:bg-bg-tertiary transition-colors",children:g==="commands"?"Manage Commands...":"Manage Workflows..."})})]}),o.jsx(M0,{isOpen:!!y,onClose:()=>b(null),initialEditId:y}),o.jsx(z0,{isOpen:!!x,onClose:()=>_(null),initialEditId:x})]})}function P0(e,r){if(!r)return!0;const s=r.toLowerCase().split(/\s+/),i=e.toLowerCase().split(/\s+/);return s.every(c=>{for(const u of i){let h=0;for(let l=0;l<u.length&&h<c.length;l++)u[l]===c[h]&&h++;if(h===c.length)return!0}return!1})}function H0(e,r,s,i,c){switch(e.key){case"ArrowDown":e.preventDefault(),s(u=>Math.min(u+1,r));break;case"ArrowUp":e.preventDefault(),s(u=>Math.max(u-1,0));break;case"Enter":e.preventDefault(),i();break;case"Escape":e.preventDefault(),c();break}}function JA({isOpen:e,onClose:r,onCloseComplete:s,onSelectCommand:i,onSelectWorkflow:c,onCloseCompleteAction:u,textareaContent:h,onSearchMessages:l,onToggleAutoScroll:d,isAutoScrollActive:f}){const[,g]=lr(),m=hn(R=>R.fetchCommands),v=Tt(R=>R.fetchWorkflows),S=At(R=>R.fetchAgents),k=hn(R=>R.defaults),C=hn(R=>R.userItems),y=Tt(R=>R.defaults),b=Tt(R=>R.userItems),x=At(R=>R.defaults),_=At(R=>R.userItems),j=Ce(R=>{var U;return(U=R.currentSession)==null?void 0:U.mode}),A=Ce(R=>{var U;return((U=R.currentSession)==null?void 0:U.dangerLevel)??"normal"}),N=Ce(R=>R.switchMode),D=Ce(R=>R.switchDangerLevel),T=Ce(R=>{var U;return(U=R.currentSession)==null?void 0:U.projectId}),z=P.useRef(void 0),[O,q]=P.useState(""),[V,W]=P.useState(0),I=P.useRef(null),$=P.useRef(!1);P.useEffect(()=>{e&&($.current=!0)},[e]),P.useEffect(()=>{if(e){m(),v(),S(),q(""),W(0);const R=setTimeout(()=>{var U;return(U=I.current)==null?void 0:U.focus()},50);return()=>clearTimeout(R)}},[e,m,v,S]),P.useEffect(()=>{var R;!e&&$.current&&(s==null||s(),(R=z.current)==null||R.call(z),z.current=void 0)},[e,s]);const B=(R,U)=>{const F=new Set(U.map(ne=>ne.id));return[...R.filter(ne=>!F.has(ne.id)),...U]},Q=[{id:"create-session",name:"New Session",prefix:"Action > Create",action:()=>T&&g(`/p/${T}/new`)},{id:"navigate-session",name:"Another Session",prefix:"Action > Navigate to",action:()=>{z.current=u,r()}},{id:"search-messages",name:"Messages",prefix:"Action > Search",action:()=>{r(),l==null||l()}},{id:"toggle-autoscroll",name:f?"Auto-scroll Off":"Auto-scroll On",prefix:"Action > Toggle",action:()=>{r(),d==null||d(!f)}},...B(x,_).filter(R=>!R.subagent&&R.id!==j).map(R=>({id:R.id,name:R.name,prefix:"Agent > Switch to",action:()=>N(R.id)})),...B(k,C).map(R=>({id:R.id,name:R.name,prefix:"Command > Launch",action:()=>i(R.id,h)})),...B(y,b).map(R=>({id:R.id,name:R.name,prefix:"Workflow > Run",action:()=>c(R.id)})),...["normal","dangerous"].filter(R=>R!==A).map(R=>({id:R,name:R.charAt(0).toUpperCase()+R.slice(1),prefix:"Mode > Switch to",action:()=>D(R)}))].filter(R=>P0(`${R.prefix} ${R.name}`,O)),H=Q.length-1,L=R=>{H0(R,H,W,()=>{var U;(U=Q[V])==null||U.action(),r()},r)};return e?xo.createPortal(o.jsxs("div",{className:"fixed inset-0 z-50 flex items-start justify-center pt-[15vh] p-4",children:[o.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:r}),o.jsxs("div",{className:"relative w-full max-w-md bg-bg-secondary border border-border rounded shadow-xl",children:[o.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-border",children:[o.jsx("input",{ref:I,type:"text",value:O,onChange:R=>{q(R.target.value),W(0)},onKeyDown:L,placeholder:"Search...",className:"flex-1 bg-transparent text-sm focus:outline-none placeholder:text-text-muted"}),o.jsx(Uh,{onClick:r,className:"shrink-0","aria-label":"Close"})]}),o.jsx("div",{className:"overflow-y-auto max-h-[60vh] p-2",children:Q.length===0?o.jsx("div",{className:"px-3 py-4 text-center text-text-muted text-sm",children:k.length+C.length+y.length+b.length>0?"No matches":"No agents, commands, or workflows yet"}):Q.map((R,U)=>o.jsxs("button",{type:"button",onClick:()=>{R.action(),r()},className:`w-full text-left px-3 py-2 rounded text-sm transition-colors ${U===V?"bg-accent-primary/20 text-text-primary":"text-text-secondary hover:bg-bg-tertiary hover:text-text-primary"}`,children:[o.jsxs("span",{className:"text-text-muted font-normal",children:[R.prefix," "]}),o.jsx("span",{children:R.name})]},R.id))})]})]}),document.body):null}function e4(e){const r=new Date(e),s=new Date;if(r.getDate()===s.getDate()&&r.getMonth()===s.getMonth()&&r.getFullYear()===s.getFullYear())return r.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1});const c=r.getFullYear(),u=String(r.getMonth()+1).padStart(2,"0"),h=String(r.getDate()).padStart(2,"0"),l=String(r.getHours()).padStart(2,"0"),d=String(r.getMinutes()).padStart(2,"0");return`${c}/${u}/${h} ${l}:${d}`}function t4({isOpen:e,onClose:r,messages:s,onSelectMessage:i}){const[c,u]=P.useState(""),[h,l]=P.useState(0),d=P.useRef(null),f=P.useRef(!1),g=s.filter(C=>C.role==="user"&&!C.isSystemGenerated&&C.messageKind!=="auto-prompt"&&C.messageKind!=="command");P.useEffect(()=>{e&&(f.current=!0)},[e]),P.useEffect(()=>{if(e){u(""),l(0);const C=setTimeout(()=>{var y;return(y=d.current)==null?void 0:y.focus()},50);return()=>clearTimeout(C)}},[e]);const m=g.filter(C=>P0(C.content,c)),v=m.length-1,S=C=>{H0(C,v,l,()=>{m[h]&&(i(m[h].id),r())},r)},k=C=>{i(C),r()};return e?xo.createPortal(o.jsxs("div",{className:"fixed inset-0 z-50 flex items-start justify-center pt-[15vh] p-4",children:[o.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:r}),o.jsxs("div",{className:"relative w-full max-w-md bg-bg-secondary border border-border rounded shadow-xl",children:[o.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-border",children:[o.jsx(Hh,{}),o.jsx("input",{ref:d,type:"text",value:c,onChange:C=>{u(C.target.value),l(0)},onKeyDown:S,placeholder:"Search messages...",className:"flex-1 bg-transparent text-sm focus:outline-none placeholder:text-text-muted"}),o.jsx("button",{type:"button",onClick:r,className:"p-0.5 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-primary transition-colors","aria-label":"Close",children:o.jsx(Fh,{className:"w-4 h-4"})})]}),o.jsx("div",{className:"overflow-y-auto max-h-[60vh] p-2",children:m.length===0?o.jsx("div",{className:"px-3 py-4 text-center text-text-muted text-sm",children:g.length>0?"No matches":"No messages yet"}):m.map((C,y)=>o.jsx("button",{type:"button",onClick:()=>k(C.id),className:`w-full text-left px-3 py-2 rounded text-sm transition-colors ${y===h?"bg-accent-primary/20 text-text-primary":"text-text-secondary hover:bg-bg-tertiary hover:text-text-primary"}`,children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsx("span",{className:"truncate flex-1",children:C.content}),o.jsx("span",{className:"text-text-muted text-xs shrink-0",children:e4(C.timestamp)})]})},C.id))})]})]}),document.body):null}function n4(e){return e==="criterion"}function r4(e){var r,s;return e.role!=="assistant"||e.subAgentId||(r=e.content)!=null&&r.trim()||(s=e.thinkingContent)!=null&&s.trim()||!e.toolCalls||e.toolCalls.length===0?!1:e.toolCalls.every(i=>n4(i.name))}function s4(e,r=[]){const s=[];let i=null,c=[],u,h=1;const l=new Map,d=new Map,f=[];for(const S of r)S.type==="message"?l.set(S.message.id,S):S.type==="subagent"?d.set(S.subAgentId,S):S.type==="criteria-batch"&&f.push(S);let g=0;const m=()=>{if(c.length>0){const S=f[g];S&&S.type==="criteria-batch"&&S.toolCalls.length===c.length&&S.toolCalls.every((C,y)=>{var b;return C.id===((b=c[y])==null?void 0:b.id)})?s.push(S):s.push({type:"criteria-batch",toolCalls:[...c]}),g++,c=[]}},v=()=>{if(!i)return;const S=i,k=d.get(S.subAgentId);k&&k.type==="subagent"&&k.messages.length===S.messages.length&&k.messages.every((y,b)=>y===S.messages[b])?s.push(k):s.push({type:"subagent",subAgentId:S.subAgentId,subAgentType:S.subAgentType,messages:S.messages}),i=null};for(const S of e)if(S.role!=="tool"){if(S.contextWindowId&&u&&S.contextWindowId!==u&&(m(),v(),h++,s.push({type:"context-divider",windowSequence:h})),u=S.contextWindowId,r4(S)){v();for(const k of S.toolCalls)c.push(k);continue}if(m(),S.subAgentId&&S.subAgentType)i&&i.subAgentId===S.subAgentId?i.messages.push(S):(v(),i={subAgentId:S.subAgentId,subAgentType:S.subAgentType,messages:[S]});else{v();const k=l.get(S.id);k&&k.type==="message"&&k.message===S?s.push(k):s.push({type:"message",message:S})}}return m(),v(),s}function i4(e){const{year:r,month:s,day:i}=sy(e);return`${r}/${s}/${i} ${uc(e)}`}function a4(e,r){return e.length<=r?e:e.substring(0,r)+"..."}const o4=10,l4=150;function c4(e){const r=[];if(e.recentUserPrompts)for(const s of e.recentUserPrompts)r.push({id:s.id,content:s.content,timestamp:s.timestamp,sessionId:e.id,sessionName:e.title||e.id});return r}function u4(e){return[...e].sort((i,c)=>new Date(c.timestamp).getTime()-new Date(i.timestamp).getTime()).slice(0,o4).reverse().map(i=>({id:i.id,content:i.content,timestamp:i.timestamp,formattedTimestamp:i4(i.timestamp),trimmedContent:a4(i.content,l4),sessionId:i.sessionId,sessionName:i.sessionName}))}function d4(e,r,s){const i=[],c=e.filter(u=>u.role==="user"&&!u.isSystemGenerated&&u.messageKind!=="auto-prompt");for(const u of c)i.push({id:u.id,content:u.content,timestamp:u.timestamp,sessionId:s??"",sessionName:"This session"});for(const u of r)s&&u.id===s||i.push(...c4(u));return u4(i)}function h4(e,r=[],s=null){const[i,c]=P.useState(0),[u,h]=P.useState(!1),l=P.useMemo(()=>d4(e,r,s),[e,r,s]),d=P.useCallback(()=>{l.length>0&&(c(l.length-1),h(!0))},[l.length]),f=P.useCallback(()=>{h(!1),c(0)},[]),g=P.useCallback(()=>{c(S=>l.length===0?S:S===0?l.length-1:S-1)},[l.length]),m=P.useCallback(()=>{c(S=>l.length===0?S:S===l.length-1?0:S+1)},[l.length]),v=P.useCallback(()=>{if(l.length===0||!u)return null;const S=l[i];return(S==null?void 0:S.content)??null},[l,i,u]);return{history:l,selectedIndex:i,showHistory:u,openHistory:d,closeHistory:f,navigateUp:g,navigateDown:m,selectCurrent:v}}function f4({criteriaSidebarOpen:e,onCriteriaSidebarToggle:r}={}){const s=e??!0,[i,c]=P.useState(""),[u,h]=P.useState([]),[l,d]=P.useState(!1),[f,g]=P.useState(null),[m,v]=P.useState(!1),[S,k]=P.useState(!1),[C,y]=P.useState(!1),[b,x]=P.useState(!1),[_,j]=P.useState(null),[A,N]=P.useState(null),D=P.useRef(null),T=P.useRef(null),z=P.useRef(null),O=Ce(oe=>oe.currentSession),q=Ce(oe=>oe.messages),V=Ce(oe=>oe.streamingMessage),W=Ce(oe=>oe.sessions),I=Ce(oe=>oe.error),$=Ce(oe=>oe.pendingQuestion),B=qv(),X=Ce(oe=>oe.sendMessage),Q=Ce(oe=>oe.clearError),H=Ce(oe=>oe.acceptAndBuild),L=Ce(oe=>oe.stopGeneration),R=Ce(oe=>oe.launchRunner),U=Ce(oe=>oe.cancelQueued),F=aw(),{showThinking:ne,showVerboseToolOutput:Z,showStats:ee,showAgentDefinitions:Y,showWorkflowBars:G}=Dh(),ae=Tt(oe=>oe.defaults),re=Tt(oe=>oe.userItems),be=[...ae,...re],ve=Tt(oe=>oe.fetchWorkflows),Re=At(oe=>oe.defaults),Oe=At(oe=>oe.userItems),ze=[...Re,...Oe].filter(oe=>!oe.subagent);P.useEffect(()=>{ve()},[ve]);const{history:We,selectedIndex:Ee,showHistory:fe,openHistory:je,closeHistory:Ue,navigateUp:It,navigateDown:pe,selectCurrent:Ne}=h4(q,W,O==null?void 0:O.id),Me=P.useCallback(oe=>{j(oe),St(!1);const Ae=document.querySelector(`[data-message-id="${oe}"]`);Ae&&Ae.scrollIntoView({behavior:"smooth",block:"center"}),setTimeout(()=>j(null),3e3)},[]);P.useEffect(()=>{const oe=Ae=>{N(Ae.detail.stats)};return window.addEventListener("open-turn-stats",oe),()=>window.removeEventListener("open-turn-stats",oe)},[]);const lt=P.useMemo(()=>V?q.map(oe=>oe.id===V.id?V:oe):q,[q,V]),ue=P.useRef([]),_e=P.useMemo(()=>{const oe=s4(lt,ue.current);return ue.current=oe,oe},[lt]),Te=P.useMemo(()=>BA(q),[q]),{force_scroll_to_bottom:Ie,isAutoScrollActive:$e,setAutoScroll:St}=L0(D,O),Ye=P.useCallback(()=>{const oe=T.current;if(!oe)return;oe.style.height="auto";const Ae=Math.min(200,oe.scrollHeight);oe.style.height=`${Ae}px`},[]);P.useEffect(()=>{if(!(O!=null&&O.id))return;const oe=`openfox:draft:${O.id}`,Ae=localStorage.getItem(oe);Ae!==null&&c(Ae)},[O==null?void 0:O.id]),P.useEffect(()=>{var oe;(oe=T.current)==null||oe.focus(),Ye()},[O==null?void 0:O.id,Ye]),P.useEffect(()=>{if(!(O!=null&&O.id))return;const oe=`openfox:draft:${O.id}`,Ae=setTimeout(()=>{i?localStorage.setItem(oe,i):localStorage.removeItem(oe)},500);return()=>clearTimeout(Ae)},[O==null?void 0:O.id,i]),P.useEffect(()=>{Ye()},[i,Ye]),P.useEffect(()=>{const oe=Ae=>{Ae.key==="Escape"&&B&&L(),Ae.key==="ScrollLock"&&St(!$e)};return window.addEventListener("keydown",oe),()=>window.removeEventListener("keydown",oe)},[B,L,$e]);const Dt=P.useRef(0);P.useEffect(()=>{const oe=Ae=>{if(Ae.key==="Shift"&&!Ae.ctrlKey&&!Ae.metaKey&&!Ae.altKey){const qe=Date.now();qe-Dt.current<300?(Ae.preventDefault(),y(!0),Dt.current=0):Dt.current=qe}};return window.addEventListener("keydown",oe),()=>window.removeEventListener("keydown",oe)},[]),P.useEffect(()=>{const oe=T.current;if(!oe)return;const Ae=async qe=>{var en;if(document.activeElement!==oe)return;const Ct=(en=qe.clipboardData)==null?void 0:en.items;if(Ct){for(const _n of Array.from(Ct))if(_n.type.startsWith("image/")){qe.preventDefault();const yr=_n.getAsFile();if(!yr)continue;await ch(yr,Xs=>h(Sn=>[...Sn,Xs]),g,{filename:"pasted-image"})}}};return oe.addEventListener("paste",Ae),()=>oe.removeEventListener("paste",Ae)},[]);const gt=()=>{c(""),h([]),O!=null&&O.id&&localStorage.removeItem(`openfox:draft:${O.id}`)},Xt=async oe=>{oe.preventDefault(),!(!i.trim()&&u.length===0)&&(Ie(),X(i,u.length>0?u:void 0),gt())},ct=oe=>{if((oe.ctrlKey||oe.metaKey)&&oe.code.startsWith("Digit")){const qe=parseInt(oe.code.slice(-1),10)-1,Ct=ze[qe];Ct&&(oe.preventDefault(),Ce.getState().switchMode(Ct.id));return}if(fe)switch(oe.key){case"Enter":oe.preventDefault();const Ae=Ne();Ae&&(c(Ae),Ue());return;case"Escape":oe.preventDefault(),Ue(),B&&L();return;case"ArrowUp":oe.preventDefault(),It();return;case"ArrowDown":oe.preventDefault(),pe();return}if(oe.key==="ArrowUp"&&i.trim()===""&&!fe){oe.preventDefault(),je();return}oe.key==="Enter"&&!oe.shiftKey&&(oe.preventDefault(),Xt(oe))},qn=P.useCallback(async oe=>{const Ae=oe.target.files;if(!(!Ae||Ae.length===0)){g(null);for(const qe of Array.from(Ae))await ch(qe,Ct=>h(en=>[...en,Ct]),g);z.current&&(z.current.value="")}},[]),sn=P.useCallback(oe=>{oe.preventDefault(),oe.stopPropagation(),d(!0)},[]),Xi=P.useCallback(oe=>{oe.preventDefault(),oe.stopPropagation(),d(!1)},[]),me=P.useCallback(async oe=>{oe.preventDefault(),oe.stopPropagation(),d(!1),g(null);const Ae=oe.dataTransfer.files;if(!(!Ae||Ae.length===0))for(const qe of Array.from(Ae))await ch(qe,Ct=>h(en=>[...en,Ct]),g)},[]),ye=P.useCallback(oe=>{h(Ae=>Ae.filter(qe=>qe.id!==oe))},[]),we=P.useCallback(()=>{var oe;(oe=z.current)==null||oe.click()},[]),Ve=(O==null?void 0:O.mode)==="planner",Qe=(O==null?void 0:O.mode)==="builder",He=((O==null?void 0:O.criteria.length)??0)>0,Zt=(O==null?void 0:O.phase)==="done",Lt=_e.some(oe=>oe.type==="message"&&oe.message.role==="assistant"),Bt=Ve&&He&&!B&&Lt&&!Zt,qr=oe=>{const Ae=i.trim()?i:void 0,qe=u.length>0?u:void 0;Ve?H(oe,Ae,qe):Qe&&R(Ae,qe,oe),gt()};return o.jsxs(o.Fragment,{children:[o.jsxs(n2,{criteriaSidebarOpen:s,onCriteriaSidebarToggle:r,messages:lt,children:[$&&o.jsx(_A,{question:$}),o.jsx(i2,{}),A&&o.jsx(dA,{stats:A,onClose:()=>N(null)}),o.jsx(SA,{}),o.jsxs("div",{ref:D,"data-testid":"chat-scroll-container",className:"flex-1 min-w-0 overflow-y-auto relative bg-primary",children:[o.jsx("div",{className:"pt-4",children:_e.map((oe,Ae)=>{if(oe.type==="context-divider")return o.jsxs("div",{className:"flex items-center gap-2 feed-item px-2 md:px-4",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{className:"text-[10px] text-text-muted font-medium px-2",children:"Earlier context summarized"}),o.jsx("div",{className:"flex-1 border-t border-border"})]},Ae);if(oe.type==="subagent"){const _n=oe.messages.some(yr=>yr.isStreaming);return o.jsx("div",{className:"px-2 md:px-4",children:o.jsx(mA,{messages:oe.messages,subAgentType:oe.subAgentType,subAgentId:oe.subAgentId,isStreaming:_n})},Ae)}if(oe.type==="criteria-batch")return o.jsx("div",{className:"feed-item px-2 md:px-4",children:o.jsx(D0,{toolCalls:oe.toolCalls,criteria:O==null?void 0:O.criteria})},Ae);const qe=oe.message;if(qe.role==="assistant")return o.jsx("div",{className:"px-2 md:px-4",children:o.jsx(Tf,{message:qe,showStats:ee,showThinking:ne,showVerboseToolOutput:Z})},Ae);const Ct=!Y&&qe.messageKind==="auto-prompt",en=!G&&(qe.messageKind==="workflow-started"||qe.messageKind==="task-completed");return Ct||en?null:o.jsx("div",{className:"px-2 md:px-4",children:o.jsx("div",{"data-message-id":qe.id,className:_===qe.id?"rounded animate-highlight-fade":void 0,children:o.jsx(R0,{message:qe,isLastAssistantMessage:!1,promptContext:qe.role==="user"?Te[qe.id]:void 0})})},Ae)})}),o.jsxs("div",{className:"px-2 md:px-4 pb-4",children:[I&&o.jsx("div",{className:"feed-item bg-red-500/10 border border-red-500/50 rounded p-2",children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{children:[o.jsx("div",{className:"text-red-400 text-sm font-medium",children:I.code}),o.jsx("div",{className:"text-red-300 text-xs mt-0.5",children:I.message})]}),o.jsx(oo,{onClick:Q,className:"text-red-400 hover:text-red-300 p-0.5",size:"sm"})]})}),Bt&&o.jsx("div",{className:"flex justify-center gap-2 feed-item flex-wrap",children:be.map(oe=>{const Ae=oe.color??"#3b82f6",qe=parseInt(Ae.slice(1,3),16),Ct=parseInt(Ae.slice(3,5),16),en=parseInt(Ae.slice(5,7),16),_n=`rgba(${qe},${Ct},${en},0.12)`,yr=`rgba(${qe},${Ct},${en},0.22)`,Xs=`rgba(${qe},${Ct},${en},0.25)`;return o.jsxs("button",{onClick:()=>H(oe.id),"data-testid":"workflow-run-button",className:"px-4 py-1.5 rounded text-sm font-medium transition-colors",style:{backgroundColor:_n,color:Ae,border:`1px solid ${Xs}`},onMouseEnter:Sn=>{Sn.currentTarget.style.backgroundColor=yr},onMouseLeave:Sn=>{Sn.currentTarget.style.backgroundColor=_n},children:["▶ ",oe.name]},oe.id)})}),B&&o.jsx(wA,{})]})]}),o.jsxs("form",{onSubmit:Xt,className:"relative p-2 md:p-4 bg-secondary",children:[o.jsxs("button",{type:"button",className:"absolute -top-8 right-12 md:right-16 text-sm text-text-muted hover:text-text-primary z-10 flex items-center gap-1.5",onClick:()=>St(!$e),children:[$e?o.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-accent-success"}):o.jsx(br,{className:"w-3 h-3 text-text-muted"}),$e?"live":"scroll to bottom"]}),o.jsx("button",{type:"button",onClick:()=>x(!0),className:"absolute -top-8 right-2 md:right-4 text-sm text-text-muted hover:text-text-primary z-10 flex items-center p-0.5 rounded hover:bg-bg-tertiary transition-colors","aria-label":"Search messages",children:o.jsx(Hh,{})}),o.jsx("input",{ref:z,type:"file",accept:".png,.jpg,.jpeg,.gif",onChange:qn,className:"hidden",multiple:!0}),f&&o.jsx("div",{className:"mb-2 p-2 bg-red-500/10 border border-red-500/50 rounded text-red-300 text-sm",children:f}),u.length>0&&o.jsx("div",{className:"mb-3 flex flex-wrap gap-2",children:u.map(oe=>o.jsx(CA,{attachment:oe,onRemove:ye},oe.id))}),fe&&o.jsx(kA,{history:We,selectedIndex:Ee,onSelect:oe=>{c(oe),Ue()},onEscape:Ue,onNavigate:oe=>{oe==="up"?It():pe()}}),F.length>0&&o.jsx("div",{className:"mb-2 flex flex-wrap gap-1.5",children:F.map(oe=>o.jsxs("div",{className:`inline-flex items-center gap-1.5 px-2 py-1 rounded text-xs ${oe.mode==="asap"?"bg-amber-500/15 text-amber-300 border border-amber-500/30":"bg-blue-500/15 text-blue-300 border border-blue-500/30"}`,children:[o.jsxs("span",{className:"font-medium",children:[oe.mode==="asap"?"ASAP":"Queue",":"]}),o.jsx("span",{className:"truncate max-w-[200px]",children:oe.content}),o.jsx(oo,{onClick:()=>U(oe.queueId),size:"sm"})]},oe.queueId))}),o.jsxs("div",{className:`flex items-end gap-3 p-3 rounded transition-colors ${l?"bg-accent-primary/10":"bg-primary"}`,onDragOver:sn,onDragLeave:Xi,onDrop:me,children:[o.jsx("textarea",{id:ty,ref:T,value:i,onChange:oe=>{c(oe.target.value),fe&&Ue()},onKeyDown:ct,placeholder:"What would you like to build?","data-testid":"chat-input-textarea",className:"flex-1 bg-transparent text-sm placeholder:text-text-muted resize-none overflow-y-auto focus:outline-none",style:{minHeight:"24px",maxHeight:"200px"},spellCheck:!1}),o.jsxs("div",{className:"flex items-center self-center",children:[o.jsx("button",{type:"button",onClick:()=>{var oe;!i.trim()&&u.length===0||((oe=D.current)==null||oe.scrollTo({top:D.current.scrollHeight,behavior:"smooth"}),X(i,u),gt())},disabled:!i.trim()&&u.length===0,"data-testid":"chat-send-button",className:"px-4 py-1.5 rounded-l bg-accent-primary/20 text-sm text-accent-primary font-medium hover:bg-accent-primary/30 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:"Send"}),o.jsx(QA,{onSendCommand:(oe,Ae,qe,Ct)=>{var _n;Ae&&(O==null?void 0:O.mode)!==Ae&&Ce.getState().switchMode(Ae);const en=qe&&qe.trim()?`${qe.trim()}
|
|
149
|
+
`,children:[o.jsxs("div",{className:"text-xs text-text-muted font-mono",children:[f.formattedTimestamp,f.sessionName&&o.jsxs(o.Fragment,{children:[" | ",o.jsx("span",{className:"text-accent-primary font-medium",children:f.sessionName})]})]}),o.jsx("div",{className:"text-sm text-text-primary mt-1",children:f.trimmedContent})]},f.id))})}const hn=$n((e,r)=>({defaults:[],userItems:[],loading:!1,fetchCommands:async()=>{await $h("/api/commands",e)},fetchCommand:async s=>{try{const i=await ke(`/api/commands/${s}`);return i.ok?await i.json():null}catch{return null}},fetchDefaultContent:async s=>{try{const i=await ke(`/api/commands/defaults/${s}`);return i.ok?await i.json():null}catch{return null}},createCommand:async s=>{const i=await xs("POST","/api/commands",s);return i.success&&await r().fetchCommands(),i},updateCommand:async(s,i)=>{const c=await xs("PUT",`/api/commands/${s}`,i);return c.success&&await r().fetchCommands(),c},deleteCommand:async s=>{try{const i=await ke(`/api/commands/${s}`,{method:"DELETE"}),c=await i.json();return i.ok?(e(u=>({userItems:u.userItems.filter(h=>h.id!==s)})),{success:!0}):{success:!1,error:c.error??"Failed to delete"}}catch{return{success:!1,error:"Network error"}}},duplicateCommand:async s=>{try{const i=await ke(`/api/commands/${s}/duplicate`,{method:"POST"}),c=await i.json();return i.ok?(await r().fetchCommands(),{success:!0}):{success:!1,error:c.error??"Failed to duplicate"}}catch{return{success:!1,error:"Network error"}}}})),EA={maxWidth:1920,maxHeight:1920,quality:.85,maxSizeBytes:1048576};async function jA(e,r={}){const s={...EA,...r};if(!e.type.startsWith("image/"))throw new Error("File is not an image");if(!["image/png","image/jpeg","image/gif"].includes(e.type))throw new Error(`Unsupported image format: ${e.type}. Only PNG, JPG, and GIF are supported.`);if(e.size<=s.maxSizeBytes){const c=await e.arrayBuffer(),u=OA(c),h=`data:${e.type};base64,${u}`,l=await O0(h);return{dataUrl:h,mimeType:e.type,size:e.size,width:l.width,height:l.height}}return await NA(e,s)}async function NA(e,r){const s=await AA(e),i=await O0(s),{width:c,height:u}=TA(i.width,i.height,r.maxWidth,r.maxHeight),h=DA();h.width=c,h.height=u;const l=h.getContext("2d");if(!l)throw new Error("Failed to get canvas context");l.imageSmoothingEnabled=!0,l.imageSmoothingQuality="high",l.drawImage(i,0,0,c,u);let d=r.quality,f;do{if(f=h.toDataURL(e.type.startsWith("image/gif")?"image/png":e.type,d),_v(f)<=r.maxSizeBytes||d<=.3)break;d-=.1}while(!0);const g=_v(f);return{dataUrl:f,mimeType:e.type.startsWith("image/gif")?"image/png":e.type,size:g,width:c,height:u}}function TA(e,r,s,i){const c=e/r;return e>r&&e>s?{width:s,height:Math.round(s/c)}:r>e&&r>i?{width:Math.round(i*c),height:i}:{width:e,height:r}}function AA(e){return new Promise((r,s)=>{const i=LA(),c=new i;c.onload=()=>r(c.result),c.onerror=()=>s(new Error("Failed to read file")),c.readAsDataURL(e)})}function O0(e){return new Promise((r,s)=>{const i=RA(),c=new i;c.onload=()=>r(c),c.onerror=()=>s(new Error("Failed to load image")),c.src=e})}function DA(){var r;const e=Af();if(!((r=e.document)!=null&&r.createElement))throw new Error("Image compression requires browser canvas APIs");return e.document.createElement("canvas")}function RA(){const e=Af();if(!e.Image)throw new Error("Image compression requires browser image APIs");return e.Image}function LA(){const e=Af();if(!e.FileReader)throw new Error("Image compression requires browser file APIs");return e.FileReader}function Af(){return globalThis}function OA(e){const r=new Uint8Array(e);let s="";for(let i=0;i<r.byteLength;i++){const c=r[i];c!==void 0&&(s+=String.fromCharCode(c))}return btoa(s)}function _v(e){const s=e.split(",")[1];return s?Math.round(s.length*3/4):0}function MA(e){return["image/png","image/jpeg","image/gif"].includes(e.type)}function IA(e,r=50*1024*1024){return e.size>r?{valid:!1,error:`Image file is too large (${Sv(e.size)}). Maximum size is ${Sv(r)}.`}:{valid:!0}}function Sv(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}async function ch(e,r,s,i={}){const{maxSizeBytes:c=50*1024*1024,filename:u}=i;if(!MA(e)){s(`Unsupported file type: ${e.type}. Only PNG, JPG, and GIF are supported.`);return}const h=IA(e,c);if(!h.valid){s(h.error??"Image file is too large");return}try{const l=await jA(e,{maxWidth:1920,maxHeight:1920,quality:.85,maxSizeBytes:1048576}),d={id:zv(),filename:u??e.name,mimeType:l.mimeType,size:l.size,data:l.dataUrl};r(d)}catch(l){const d=l instanceof Error?l.message??"Failed to process image":"Failed to process image";s(d)}}function BA(e){const r={};let s=null;for(const i of e){if(i.role==="user"&&!i.isSystemGenerated){s=i.id;continue}i.role==="assistant"&&i.promptContext&&s&&r[s]===void 0&&(r[s]=i.promptContext)}return r}function uh(e){return{contextWindow:e.contextWindow,temperature:e.temperature??null,topP:e.topP??null,topK:e.topK??null,maxTokens:e.maxTokens??null,supportsVision:e.supportsVision??null}}function zA({label:e,children:r}){return o.jsxs("div",{className:"space-y-3",children:[o.jsx("h4",{className:"text-sm font-medium text-text-secondary border-b border-border/50 pb-1",children:e}),r]})}function Qa({label:e,value:r,onChange:s,min:i,max:c,step:u=1,helpText:h,defaultValue:l}){const[d,f]=P.useState((r==null?void 0:r.toString())??""),[g,m]=P.useState(r===null);P.useEffect(()=>{f((r==null?void 0:r.toString())??""),m(r===null)},[r]);const v=k=>{if(f(k),k==="")s(null);else{const C=parseFloat(k);isNaN(C)||s(C)}},S=()=>{g?(m(!1),l!==void 0&&(f(l.toString()),s(l))):(m(!0),s(null))};return o.jsxs("div",{children:[o.jsxs("label",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary mb-1",children:[e,o.jsx("button",{type:"button",onClick:S,className:`text-xs px-1.5 py-0.5 rounded border ${g?"border-accent-primary/50 bg-accent-primary/10 text-accent-primary":"border-border text-text-muted hover:text-text-secondary"}`,title:g?"Click to set a custom value":"Click to use default",children:g?"default":"custom"})]}),o.jsx("input",{type:"number",min:i,max:c,step:u,value:d,readOnly:g,onChange:k=>v(k.target.value),onClick:()=>g&&S(),placeholder:g?"Using profile default (click to edit)":"",className:`w-full bg-bg-tertiary border border-border rounded px-3 py-2 text-text-primary focus:outline-none focus:border-accent-primary ${g?"opacity-50 cursor-pointer":""}`}),h&&o.jsx("p",{className:"text-xs text-text-muted mt-1",children:h})]})}function PA({isOpen:e,onClose:r,providerId:s,model:i}){const[c,u]=P.useState(()=>uh(i)),[h,l]=P.useState(!1),d=Rt(m=>m.updateModelSettings);P.useEffect(()=>{u(uh(i))},[i]);const f=async()=>{if(c.contextWindow<1024||c.contextWindow>1e7)return;l(!0);const m=c.temperature!==(i.temperature??null)||c.topP!==(i.topP??null)||c.topK!==(i.topK??null)||c.maxTokens!==(i.maxTokens??null)||c.supportsVision!==(i.supportsVision??null);await d(s,i.id,{contextWindow:c.contextWindow,...m&&{temperature:c.temperature,topP:c.topP,topK:c.topK,maxTokens:c.maxTokens,supportsVision:c.supportsVision??void 0}}),l(!1),r()},g=()=>{u(uh(i)),r()};return e?o.jsx(jt,{isOpen:e,onClose:r,title:"Model Properties",size:"sm",footer:o.jsxs("div",{className:"flex justify-end gap-2",children:[o.jsx(nt,{variant:"secondary",onClick:g,disabled:h,children:"Cancel"}),o.jsx(nt,{variant:"primary",onClick:f,disabled:h||c.contextWindow<1024||c.contextWindow>1e7,children:h?"Saving...":"Save"})]}),children:o.jsxs("div",{className:"space-y-4",children:[o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm font-medium text-text-secondary mb-1",children:"Model Name"}),o.jsx("p",{className:"text-text-primary bg-bg-tertiary px-3 py-2 rounded font-mono text-sm break-all",children:i.id})]}),o.jsx(Qa,{label:"Context Window",value:c.contextWindow,onChange:m=>m!==null&&u(v=>({...v,contextWindow:m})),min:1024,max:1e7,helpText:"Range: 1,024 - 10,000,000 tokens"}),o.jsxs(zA,{label:"Sampling Parameters",children:[o.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[o.jsx(Qa,{label:"Temperature",value:c.temperature,onChange:m=>u(v=>({...v,temperature:m})),min:0,max:2,step:.1,helpText:"0.0 - 2.0",defaultValue:1}),o.jsx(Qa,{label:"Top P",value:c.topP,onChange:m=>u(v=>({...v,topP:m})),min:0,max:1,step:.05,helpText:"0.0 - 1.0",defaultValue:1})]}),o.jsx(Qa,{label:"Top K",value:c.topK,onChange:m=>u(v=>({...v,topK:m})),min:1,max:200,helpText:"1 - 200 (leave as default if not supported)"})]}),o.jsx(Qa,{label:"Max Tokens",value:c.maxTokens,onChange:m=>u(v=>({...v,maxTokens:m})),min:256,max:32e3,helpText:"Maximum tokens to generate per response"}),o.jsxs("div",{children:[o.jsxs("label",{className:"flex items-center gap-2 text-sm font-medium text-text-secondary mb-1",children:[o.jsx("input",{type:"checkbox",checked:c.supportsVision??!1,onChange:m=>u(v=>({...v,supportsVision:m.target.checked})),className:"rounded border-border bg-bg-tertiary text-accent-primary focus:ring-accent-primary focus:ring-offset-0"}),"Vision Enabled"]}),o.jsx("p",{className:"text-xs text-text-muted",children:"Allow sending images directly to this model. Disable if the model doesn't support vision."})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm font-medium text-text-secondary mb-1",children:"Source"}),o.jsxs("p",{className:"text-text-primary bg-bg-tertiary px-3 py-2 rounded text-sm",children:[i.source==="backend"&&"Auto-detected from backend",i.source==="user"&&"Manually set",i.source==="default"&&"Default value"]})]})]})}):null}function HA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function FA(){var $;const[,e]=lr(),r=Ce(B=>B.currentSession),s=Ce(B=>B.setSessionProvider),[i,c]=P.useState(!1),[u,h]=P.useState([]),[l,d]=P.useState(null),f=P.useRef(null),[g,m]=P.useState(null),v=P.useRef(new Set),S=Rt(B=>B.providers),k=Rt(B=>B.activeProviderId),C=Rt(B=>B.model);Rt(B=>B.backend);const y=Rt(B=>B.llmStatus),b=Rt(B=>B.activating),x=Rt(B=>B.activateProvider),_=Rt(B=>B.refreshModel),j=Rt(B=>B.refreshProviderModels);P.useEffect(()=>{function B(X){f.current&&!f.current.contains(X.target)&&(c(!1),h([]),v.current=new Set)}return document.addEventListener("mousedown",B),()=>document.removeEventListener("mousedown",B)},[]),P.useEffect(()=>{if(i){const B=S.map(X=>X.id);h(B),B.forEach(X=>{v.current.has(X)||(v.current.add(X),D(X))})}},[i,S]),S.find(B=>B.id===k);const A=y==="disconnected",N=C?(($=C.split("/").pop())==null?void 0:$.replace(/-/g," "))??C:"detecting...",D=async B=>{d(B);try{await j(B)}catch{}finally{d(null)}},T=B=>{u.includes(B.id)?h(u.filter(X=>X!==B.id)):(h([...u,B.id]),D(B.id))},z=async B=>{if(B.id===k){T(B);return}r?(s(B.id,void 0),Rt.getState().syncFromSession(B.id,""),c(!1),h([])):await x(B.id)&&(c(!1),h([]))},O=B=>{T(B)},q=async(B,X)=>{B.stopPropagation(),v.current.delete(X),await j(X),await D(X)},V=(B,X)=>{m({providerId:B,model:X})},W=()=>{m(null)},I=async(B,X)=>{if(console.log("[ProviderSelector.handleModelClick] providerId:",B,"model:",X),r){console.log("[ProviderSelector.handleModelClick] Calling setSessionProvider"),s(B,X),Rt.getState().syncFromSession(B,X),h([]),c(!1);return}d("activating");try{(await ke(`/api/providers/${B}/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:X})})).ok&&(await Rt.getState().fetchConfig(),h([]),c(!1))}catch{}finally{d(null)}};return S.length===0?o.jsxs("button",{type:"button",onClick:()=>_(),className:"flex items-center gap-1 px-1.5 py-0.5 rounded hover:bg-bg-tertiary transition-colors group",title:A?"LLM server is offline. Click to retry.":C??"Click to refresh model",children:[A?o.jsx("span",{className:"text-sm text-accent-error animate-pulse",children:"LLM offline"}):o.jsx("span",{className:"text-sm text-accent-primary",children:N}),o.jsx("span",{className:"text-text-muted opacity-0 group-hover:opacity-100 transition-opacity",children:"↻"})]}):o.jsxs("div",{className:"relative",ref:f,children:[o.jsxs("button",{type:"button",onClick:()=>c(!i),className:"flex items-center gap-1 px-1.5 py-0.5 rounded hover:bg-bg-tertiary transition-colors group",title:"Click to switch provider or model",children:[A?o.jsx("span",{className:"text-sm text-accent-error animate-pulse",children:"offline"}):o.jsx("span",{className:"text-sm text-accent-primary",children:N}),o.jsx(br,{className:"w-3 h-3 text-text-muted transition-transform",rotate:i?180:0})]}),i&&o.jsxs("div",{className:"absolute bottom-full right-0 mb-1 w-72 bg-bg-secondary border border-border rounded-lg shadow-lg z-50 overflow-hidden max-h-[80vh] overflow-y-auto",children:[o.jsx("div",{className:"py-1",children:S.map(B=>{var X;return o.jsxs("div",{children:[o.jsxs("div",{className:`px-3 py-2 flex items-center justify-between ${B.id===k?"bg-bg-tertiary":"hover:bg-bg-tertiary"} ${b?"opacity-50 cursor-wait":"cursor-pointer"}`,children:[o.jsxs("div",{onClick:()=>!b&&z(B),className:"flex flex-col min-w-0 flex-1 cursor-pointer",children:[o.jsx("span",{className:`text-sm font-medium truncate ${B.id===k?"text-accent-primary":"text-text-primary"}`,children:B.name}),o.jsx("span",{className:"text-xs text-text-muted truncate",children:B.backend!=="auto"&&q1(B.backend)})]}),o.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[B.id===k?o.jsx("span",{className:"text-accent-success",title:"Active",children:o.jsx(Ur,{className:"w-4 h-4"})}):o.jsx("span",{className:"w-4"}),o.jsx("button",{type:"button",onClick:Q=>{Q.stopPropagation(),q(Q,B.id)},className:"p-0.5 hover:bg-bg-tertiary rounded transition-colors",title:"Refresh models",children:o.jsx(kw,{className:`w-4 h-4 ${l===B.id?"animate-spin":""} ${B.id===k?"text-accent-primary":"text-text-muted"}`})}),o.jsx("button",{type:"button",onClick:Q=>{Q.stopPropagation(),O(B)},className:"p-0.5 hover:bg-bg-tertiary rounded transition-colors",title:"Show models",children:o.jsx(br,{className:`w-4 h-4 transition-transform ${u.includes(B.id)?"rotate-180":""} ${B.id===k?"text-accent-primary":"text-text-muted"}`})})]})]}),u.includes(B.id)&&o.jsx("div",{className:"bg-bg-primary border-t border-border max-h-40 overflow-y-auto",children:l===B.id?o.jsx("div",{className:"px-4 py-2 text-xs text-text-muted",children:"Loading models..."}):(X=B.models)!=null&&X.length?B.models.map(Q=>{var H;return o.jsxs("button",{type:"button",onClick:()=>I(B.id,Q.id),disabled:l==="activating",className:`w-full px-4 py-1.5 text-left hover:bg-bg-tertiary transition-colors text-sm flex items-center justify-between group ${l==="activating"?"opacity-50 cursor-wait":""} ${C===Q.id?"text-accent-primary":"text-text-secondary"}`,children:[o.jsx("span",{className:"truncate flex-1",children:((H=Q.id.split("/").pop())==null?void 0:H.replace(/-/g," "))??Q.id}),o.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[o.jsx("span",{className:"text-xs text-text-muted",children:HA(Q.contextWindow)}),o.jsx("button",{type:"button",onClick:L=>{L.stopPropagation(),V(B.id,Q)},className:"opacity-0 group-hover:opacity-100 p-0.5 hover:bg-bg-tertiary rounded transition-opacity",title:"Edit model context",children:o.jsx(gw,{className:"w-3 h-3 text-text-muted"})})]}),C===Q.id&&o.jsx("span",{className:"text-accent-success flex-shrink-0 ml-1",children:o.jsx(Ur,{className:"w-3.5 h-3.5"})})]},Q.id)}):o.jsx("div",{className:"px-4 py-2 text-xs text-text-muted",children:"No models available"})})]},B.id)})}),o.jsx("div",{className:"border-t border-border px-3 py-2",children:o.jsx("button",{onClick:()=>e("/onboarding"),className:"text-xs text-accent-primary hover:underline",children:"Manage providers"})})]}),g&&o.jsx(PA,{isOpen:!0,onClose:W,providerId:g.providerId,model:g.model})]})}function UA(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function $A({onClick:e}){return o.jsx("button",{type:"button",onClick:e,className:"p-1.5 rounded text-text-muted hover:text-text-primary hover:bg-bg-primary transition-colors",title:"View",children:o.jsx(lc,{})})}function M0({isOpen:e,onClose:r,initialEditId:s}){const i=hn(fe=>fe.defaults),c=hn(fe=>fe.userItems),u=hn(fe=>fe.loading),h=hn(fe=>fe.fetchCommands),l=hn(fe=>fe.fetchCommand),d=hn(fe=>fe.fetchDefaultContent),f=hn(fe=>fe.createCommand),g=hn(fe=>fe.updateCommand),m=hn(fe=>fe.deleteCommand),[v,S]=P.useState(null),[k,C]=P.useState(null),{view:y,editingId:b,formError:x,saving:_,formData:j,setView:A,setEditingId:N,setFormError:D,setFormData:T,setSaving:z}=Jv(),{requestDelete:O,clearConfirm:q,isConfirming:V}=qh(),W=P.useRef(!1),I=At(fe=>fe.defaults),$=At(fe=>fe.userItems),B=At(fe=>fe.fetchAgents),Q=[...I,...$].filter(fe=>!fe.subagent),H=P.useRef(h),L=P.useRef(B),R=P.useRef(l),U=P.useRef(d),F=P.useRef(s),ne=P.useRef(A),Z=P.useRef(N),ee=P.useRef(D),Y=P.useRef(q);P.useEffect(()=>{H.current=h,L.current=B,R.current=l,U.current=d,F.current=s,ne.current=A,Z.current=N,ee.current=D,Y.current=q}),P.useEffect(()=>{if(e)if(H.current(),L.current(),W.current||(Y.current(),W.current=!0),F.current){const fe=i.some(je=>je.id===F.current);ne.current("edit"),Z.current(F.current),ee.current(""),fe?U.current(F.current).then(je=>{je&&T({name:je.metadata.name+" (copy)",id:`${F.current}-copy-${Date.now()}`,prompt:je.prompt,agentMode:je.metadata.agentMode??"",isDefault:!0})}):R.current(F.current).then(je=>{je&&T({name:je.metadata.name,id:je.metadata.id,prompt:je.prompt,agentMode:je.metadata.agentMode??"",isDefault:!1})})}else ne.current("list"),Z.current(null);else W.current=!1},[e]);const G=async fe=>{S(fe);const je=await d(fe);C((je==null?void 0:je.prompt)??null)},ae=async fe=>{if(i.some(Ue=>Ue.id===fe)){const Ue=await d(fe);Ue&&(N(null),T({name:`${Ue.metadata.name} (copy)`,id:`${fe}-copy-${Date.now()}`,prompt:Ue.prompt,agentMode:Ue.metadata.agentMode??"",isDefault:!0}),D(""),A("edit"))}else{const Ue=await l(fe);Ue&&(N(null),T({name:`${Ue.metadata.name} (copy)`,id:`${fe}-copy-${Date.now()}`,prompt:Ue.prompt,agentMode:Ue.metadata.agentMode??"",isDefault:!1}),D(""),A("edit"))}},re=()=>{T({name:"",id:"",prompt:"",agentMode:"",isDefault:!1}),N(null),A("edit")},be=async fe=>{const je=await l(fe);je&&(N(fe),T({name:je.metadata.name,id:je.metadata.id,prompt:je.prompt,agentMode:je.metadata.agentMode??"",isDefault:!1}),D(""),A("edit"))},ve=async fe=>{await m(fe),q()},Re=async()=>{const fe=b??j.id;if(!fe||!j.name||!j.prompt){D("Name and message are required.");return}z(!0),D("");const je={metadata:{id:fe,name:j.name,...j.agentMode?{agentMode:j.agentMode}:{}},prompt:j.prompt},Ue=b?await g(b,je):await f(je);if(z(!1),!Ue.success){D(Ue.error??"Failed to save command.");return}s?r():A("list")},Oe=()=>{s?r():(A("list"),S(null),C(null))},ze=fe=>{T(je=>({...je,name:fe})),(!b||j.isDefault)&&T(je=>({...je,id:UA(fe)}))},We=()=>{S(null),C(null),A("list")},Ee=()=>{v&&(S(null),A("edit"),N(v),d(v).then(fe=>{fe&&T({name:`${fe.metadata.name} (copy)`,id:`${v}-copy-${Date.now()}`,prompt:fe.prompt,agentMode:fe.metadata.agentMode??"",isDefault:!0})}))};if(v){const fe=i.find(je=>je.id===v);return o.jsx(jt,{isOpen:e,onClose:We,title:`Default: ${(fe==null?void 0:fe.name)??v}`,size:"xl",children:o.jsxs("div",{className:"flex flex-col h-full",children:[o.jsxs("div",{className:"space-y-3 mb-3",children:[o.jsxs("div",{className:"flex items-center gap-2 text-xs text-text-muted",children:[o.jsx("span",{className:"px-1.5 py-0.5 rounded bg-bg-tertiary text-text-secondary",children:"Built-in"}),o.jsx("span",{className:"font-mono",children:v})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Name"}),o.jsx("div",{className:"px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm",children:fe==null?void 0:fe.name})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Agent Mode"}),o.jsx("div",{className:"px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm text-text-muted",children:(fe==null?void 0:fe.agentMode)||"None"})]})]}),o.jsxs("div",{className:"flex-1 min-h-[120px] border-t border-border pt-3 flex flex-col",children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Message"}),o.jsx("textarea",{value:k??"",readOnly:!0,placeholder:"...",className:"flex-1 w-full px-3 py-2 bg-bg-tertiary border border-border rounded text-sm font-mono resize-none opacity-60"})]}),o.jsxs("div",{className:"flex justify-end gap-2 pt-3 mt-3 border-t border-border flex-shrink-0",children:[o.jsx(nt,{variant:"secondary",onClick:We,children:"Close"}),o.jsx(nt,{variant:"primary",onClick:Ee,children:"Duplicate & Customize"})]})]})})}return y==="edit"?o.jsx(jt,{isOpen:e,onClose:Oe,title:b?"Edit Command":"New Command",size:"xl",children:o.jsxs("div",{className:"flex flex-col h-full",children:[x&&o.jsx(Gh,{message:x}),o.jsxs("div",{className:"space-y-3 mb-3",children:[o.jsx(Qv,{name:j.name,id:j.id,nameLabel:"Name",idLabel:"ID",namePlaceholder:"My Command",idPlaceholder:"my-command",readOnlyId:!!b&&!j.isDefault,onNameChange:ze,onIdChange:fe=>T(je=>({...je,id:fe}))}),o.jsxs("div",{children:[o.jsxs("label",{className:"block text-xs text-text-secondary mb-1",children:["Agent Mode ",o.jsx("span",{className:"text-text-muted",children:"(optional)"})]}),o.jsxs("select",{value:j.agentMode,onChange:fe=>T(je=>({...je,agentMode:fe.target.value})),className:"w-full px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary",children:[o.jsx("option",{value:"",children:"None (keep current mode)"}),Q.map(fe=>o.jsx("option",{value:fe.id,children:fe.name},fe.id))]})]})]}),o.jsxs("div",{className:"flex-1 min-h-[120px] border-t border-border pt-3 flex flex-col",children:[o.jsx("label",{className:"block text-xs text-text-secondary mb-1",children:"Message"}),o.jsx("textarea",{value:j.prompt,onChange:fe=>T(je=>({...je,prompt:fe.target.value})),placeholder:"The message that will be sent when this command is triggered...",className:"h-80 w-full px-3 py-2 bg-bg-tertiary border border-border rounded text-sm font-mono resize-y focus:outline-none focus:ring-1 focus:ring-accent-primary"})]}),o.jsxs("div",{className:"flex justify-end gap-2 pt-3 mt-3 border-t border-border flex-shrink-0",children:[o.jsx(nt,{variant:"secondary",onClick:Oe,children:"Cancel"}),o.jsx(nt,{variant:"primary",onClick:Re,disabled:_||!j.name||!j.prompt,children:_?"Saving...":"Save"})]})]})}):o.jsxs(jt,{isOpen:e,onClose:r,title:"Commands",size:"lg",children:[o.jsx(Yv,{description:"Commands are pre-defined messages you can send with a single click.",onNew:re}),o.jsxs(Zv,{loading:u,hasItems:i.length>0||c.length>0,loadingLabel:"Loading commands...",emptyLabel:"No commands created yet.",children:[i.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Built-in"}),o.jsx("div",{className:"space-y-2",children:i.map(fe=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsx("div",{className:"min-w-0 flex-1 mr-3",children:o.jsx("span",{className:"text-text-primary text-sm font-medium",children:fe.name})}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx($A,{onClick:()=>G(fe.id)}),o.jsx(ao,{onClick:()=>ae(fe.id)})]})]},fe.id))})]}),c.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Custom"}),o.jsx("div",{className:"space-y-2",children:c.map(fe=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsx("div",{className:"min-w-0 flex-1 mr-3",children:o.jsx("div",{className:"flex items-center gap-2",children:o.jsx("span",{className:"text-text-primary text-sm font-medium",children:fe.name})})}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx(Wi,{onClick:()=>be(fe.id)}),o.jsx(ao,{onClick:()=>ae(fe.id)}),V(fe.id,"delete")?o.jsx(Wh,{onConfirm:()=>ve(fe.id),onCancel:q}):o.jsx(Vh,{onClick:()=>O(fe.id)})]})]},fe.id))})]})]})]})}function qA(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function WA(e){let r=1;for(;e.some(s=>s.id===`s${r}`);)r++;return`s${r}`}const VA=[{value:"agent",label:"Agent"},{value:"sub_agent",label:"Sub-Agent"},{value:"shell",label:"Shell"}],I0={all_criteria_passed:"All passed",all_criteria_completed_or_passed:"All completed",any_criteria_blocked:"Blocked",has_pending_criteria:"Pending/Failed",step_result:"Result",always:"Always"},B0=[{value:"all_criteria_passed",label:"All criteria passed"},{value:"all_criteria_completed_or_passed",label:"All criteria completed or passed"},{value:"any_criteria_blocked",label:"Any criteria blocked (retry limit)"},{value:"has_pending_criteria",label:"Has pending or failed criteria"},{value:"step_result",label:"Step result is..."},{value:"always",label:"Always (fallback)"}],zs=150,Fr=54,zi=80,Pn=30,Pi=70,wv=100,Ps=50,Vl=50,Cv=4;function Df(e,r){if(e.type==="agent"){const s=r.find(i=>i.id===e.toolMode);return{name:(s==null?void 0:s.name)??(e.toolMode||"Agent"),color:(s==null?void 0:s.color)||"#3b82f6"}}if(e.type==="sub_agent"){const s=r.find(i=>i.id===e.subAgentType);return{name:(s==null?void 0:s.name)??(e.subAgentType||"Sub-Agent"),color:(s==null?void 0:s.color)||"#a855f7"}}return{name:"Shell",color:"#22c55e"}}function GA(e,r,s,i){const c=Vl+Ps+zs+wv+zs+Ps+Vl,u=c/2,h=Vl+Ps+zs/2,l=Vl+Ps+zs+wv+zs/2,d=[],f=[],g=new Map,m=e.filter(I=>I.type==="agent"||I.type==="shell"),v=e.filter(I=>I.type==="sub_agent"),S=v.length>0,k=S?h:u,C=m.length>0?l:u,y=Ps+Pn/2;if(d.push({id:"$start",type:"terminal",label:"Start",cx:k,cy:y,w:zi,h:Pn}),g.set("$start",{cx:k,cy:y,w:zi,h:Pn}),e.length===0){const I=y+Pn/2+Pi*2+Pn/2;return d.push({id:"$done",type:"terminal",label:"Done",cx:k,cy:I,w:zi,h:Pn}),g.set("$done",{cx:k,cy:I,w:zi,h:Pn}),{nodes:d,edges:f,width:c,height:I+Pn/2+Ps,posMap:g}}const b=y+Pn/2+Pi,x=(I,$)=>{I.forEach((B,X)=>{const Q=b+X*(Fr+Pi)+Fr/2,{name:H,color:L}=Df(B,i);d.push({id:B.id,type:"step",label:H,color:L,cx:$,cy:Q,w:zs,h:Fr}),g.set(B.id,{cx:$,cy:Q,w:zs,h:Fr})})};x(m,k),x(v,C);const _=m.length>0?b+(m.length-1)*(Fr+Pi)+Fr/2:y,j=S?b+(v.length-1)*(Fr+Pi)+Fr/2:y,A=Math.max(_,j)+Fr/2+Pi+Pn/2;d.push({id:"$done",type:"terminal",label:"Done",cx:k,cy:A,w:zi,h:Pn}),g.set("$done",{cx:k,cy:A,w:zi,h:Pn});const N=[];r&&g.has(r)&&N.push({from:"$start",to:r,label:s,edgeKey:"start",direction:"down",backEdgeIndex:0});let D=0;for(const I of e)I.transitions.forEach(($,B)=>{if(!$.goto||!g.has($.goto))return;const X=g.get(I.id),Q=g.get($.goto),H=$.when.type==="step_result"?`${$.when.result}`:I0[$.when.type]??$.when.type,L=I.id===$.goto;let R;L?R="back":Q.cy>X.cy+1?R="down":Q.cy<X.cy-1?R="back":R="same",N.push({from:I.id,to:$.goto,label:H,edgeKey:`${I.id}:${B}`,direction:R,backEdgeIndex:R==="back"?D++:0})});const T=new Map,z=new Map,O=new Map,q=new Map;for(const I of N)I.direction==="down"&&(T.set(I.from,(T.get(I.from)??0)+1),z.set(I.to,(z.get(I.to)??0)+1));const V=new Map,W=new Map;for(const I of N){if(I.direction!=="same")continue;const $=[I.from,I.to].sort().join("|");V.set($,(V.get($)??0)+1)}for(const I of N){if(I.direction==="back"||I.direction==="same"){let R=0;if(I.direction==="same"){const U=[I.from,I.to].sort().join("|");R=W.get(U)??0,W.set(U,R+1)}f.push({...I,fromPort:0,toPort:0,sameEdgeIndex:R});continue}const $=T.get(I.from)??1,B=z.get(I.to)??1,X=O.get(I.from)??0,Q=q.get(I.to)??0;O.set(I.from,X+1),q.set(I.to,Q+1);const H=$===1?0:-.6+1.2*X/($-1),L=B===1?0:-.6+1.2*Q/(B-1);f.push({...I,fromPort:H,toPort:L,sameEdgeIndex:0})}return{nodes:d,edges:f,width:c,height:A+Pn/2+Ps,posMap:g}}function KA({steps:e,entryStep:r,selectedNodeId:s,selectedEdgeKey:i,startConditionLabel:c,agentTypes:u,isReadOnly:h,onSelectNode:l,onSelectEdge:d,onRemoveStep:f,onCreateTransition:g,onReconnectTo:m,onReconnectFrom:v,onDeleteTransition:S}){const k=P.useRef(null),C=P.useRef(!1),[y,b]=P.useState(null),[x,_]=P.useState(null),[j,A]=P.useState(null),{nodes:N,edges:D,width:T,height:z,posMap:O}=P.useMemo(()=>GA(e,r,c,u),[e,r,c,u]),q=P.useCallback(Z=>{var re;const ee=k.current;if(!ee)return{x:0,y:0};const Y=ee.createSVGPoint();Y.x=Z.clientX,Y.y=Z.clientY;const G=(re=ee.getScreenCTM())==null?void 0:re.inverse();if(!G)return{x:0,y:0};const ae=Y.matrixTransform(G);return{x:ae.x,y:ae.y}},[]),V=P.useCallback(Z=>!Z||!x||Z==="$start"?!1:x.type==="reconnect-from"?Z!=="$done":!0,[x]),W=P.useCallback((Z,ee)=>{if(h)return;Z.stopPropagation(),Z.preventDefault();const Y=q(Z);_({type:"new",fromNodeId:ee,mouseX:Y.x,mouseY:Y.y})},[q,h]),I=P.useCallback((Z,ee)=>{if(h)return;Z.stopPropagation(),Z.preventDefault();const Y=q(Z);_({type:"reconnect-to",fromNodeId:ee.from,edgeKey:ee.edgeKey,mouseX:Y.x,mouseY:Y.y})},[q,h]),$=P.useCallback((Z,ee)=>{if(h)return;Z.stopPropagation(),Z.preventDefault();const Y=q(Z);_({type:"reconnect-from",fromNodeId:ee.from,fixedTargetId:ee.to,edgeKey:ee.edgeKey,mouseX:Y.x,mouseY:Y.y})},[q,h]),B=P.useCallback(Z=>{if(!x)return;const ee=q(Z);_(Y=>Y?{...Y,mouseX:ee.x,mouseY:ee.y}:null)},[x,q]),X=P.useCallback(()=>{x&&(C.current=!0,j&&V(j)&&(x.type==="new"?g(x.fromNodeId,j):x.type==="reconnect-to"?m(x.edgeKey,j):x.type==="reconnect-from"&&v(x.edgeKey,j)),_(null),A(null))},[x,j,V,g,m,v]),Q=P.useCallback(()=>{if(C.current){C.current=!1;return}l(null),d(null)},[l,d]);P.useEffect(()=>{if(h)return;const Z=ee=>{ee.target instanceof HTMLInputElement||ee.target instanceof HTMLTextAreaElement||ee.target instanceof HTMLSelectElement||(ee.key==="Delete"||ee.key==="Backspace")&&i&&i!=="start"&&(ee.preventDefault(),S(i),d(null))};return document.addEventListener("keydown",Z),()=>document.removeEventListener("keydown",Z)},[h,i,S,d]);const H=Z=>{const ee=O.get(Z.from),Y=O.get(Z.to);if(!ee||!Y)return null;let G,ae,re,be="middle",ve,Re;if(Z.direction==="down"){const Oe=ee.cx+Z.fromPort*(ee.w/2-10),ze=ee.cy+ee.h/2,We=Y.cx+Z.toPort*(Y.w/2-10),Ee=Y.cy-Y.h/2,fe=Ee-ze,je=We-Oe;G=`M ${Oe} ${ze} C ${Oe} ${ze+fe*.4}, ${We-je*.2} ${Ee-fe*.1}, ${We} ${Ee}`,ae=Oe+(We-Oe)*.5,re=ze+fe*.6,ve={x:Oe,y:ze},Re={x:We,y:Ee}}else if(Z.direction==="back"){const Oe=Z.from===Z.to,ze=ee.cx>=T/2,We=Z.backEdgeIndex*16,Ee=ze?T-20-We:20+We;if(Oe){const fe=ee.cx>=T/2,je=30+Z.backEdgeIndex*14,Ue=ee.cy-ee.h/2,It=fe?ee.cx+ee.w/2:ee.cx-ee.w/2,pe=fe?It+je:It-je,Ne=ee.cx+(fe?ee.w/4:-ee.w/4),Me=Ue-20-Z.backEdgeIndex*10;G=`M ${It} ${ee.cy} C ${pe} ${ee.cy}, ${pe} ${Me}, ${Ne} ${Ue}`,ae=pe+10,re=Me+4,be="middle",ve={x:It,y:ee.cy},Re={x:Ne,y:Ue}}else{const fe=ze?ee.cx+ee.w/2:ee.cx-ee.w/2,je=Y.cx+(ze?Y.w/4:-Y.w/4),Ue=Math.min(ee.cy,Y.cy)-Y.h/2-18-Z.backEdgeIndex*14;G=`M ${fe} ${ee.cy} L ${Ee} ${ee.cy} L ${Ee} ${Ue} L ${je} ${Ue} L ${je} ${Y.cy-Y.h/2}`,ae=Ee,re=(ee.cy+Ue)/2,be=ze?"start":"end",ve={x:fe,y:ee.cy},Re={x:je,y:Y.cy-Y.h/2}}}else{const Oe=Y.cx>ee.cx,ze=Z.sameEdgeIndex===0?-12:12,We=Oe?ee.cx+ee.w/2:ee.cx-ee.w/2,Ee=Oe?Y.cx-Y.w/2:Y.cx+Y.w/2,fe=ee.cy+ze,je=Y.cy+ze,Ue=(We+Ee)/2;G=`M ${We} ${fe} C ${Ue} ${fe}, ${Ue} ${je}, ${Ee} ${je}`,ae=Ue,re=(fe+je)/2-6,ve={x:We,y:fe},Re={x:Ee,y:je}}return{path:G,labelX:ae,labelY:re,labelAnchor:be,fromPt:ve,toPt:Re}},L=(Z,ee)=>{const Y=H(Z);if(!Y)return null;const{path:G,labelX:ae,labelY:re,labelAnchor:be}=Y,ve=i===Z.edgeKey,Re=Z.label&&!(Z.from==="$start"&&Z.label==="Always");return o.jsxs("g",{children:[o.jsx("path",{d:G,fill:"none",stroke:"transparent",strokeWidth:14,className:"cursor-pointer",onClick:Oe=>{Oe.stopPropagation(),d(ve?null:Z.edgeKey)}}),o.jsx("path",{d:G,fill:"none",stroke:ve?"#58a6ff":"#484f58",strokeWidth:ve?2.2:1.2,markerEnd:ve?"url(#arrow-selected)":"url(#arrow)",pointerEvents:"none"}),Re&&o.jsx("text",{x:ae+(be==="start"?5:be==="end"?-5:0),y:re+3,textAnchor:be,className:"text-[8px]",fill:ve?"#79c0ff":"#8b949e",style:{paintOrder:"stroke",stroke:"#0d1117",strokeWidth:3,strokeLinejoin:"round"},pointerEvents:"none",children:Z.label})]},ee)},R=()=>{if(!i||x)return null;const Z=D.find(re=>re.edgeKey===i);if(!Z)return null;const ee=H(Z);if(!ee)return null;const{fromPt:Y,toPt:G}=ee,ae=6;return o.jsxs(o.Fragment,{children:[Z.edgeKey!=="start"&&o.jsx("circle",{cx:Y.x,cy:Y.y,r:ae,fill:"#58a6ff",fillOpacity:.25,stroke:"#58a6ff",strokeWidth:2,strokeOpacity:.8,className:"cursor-grab",onMouseDown:re=>$(re,Z)}),o.jsx("circle",{cx:G.x,cy:G.y,r:ae,fill:"#58a6ff",fillOpacity:.25,stroke:"#58a6ff",strokeWidth:2,strokeOpacity:.8,className:"cursor-grab",onMouseDown:re=>I(re,Z)})]})},U=()=>{if(!x)return null;let Z,ee,Y,G;if(x.type==="reconnect-from"){const be=O.get(x.fixedTargetId);if(!be)return null;Z=x.mouseX,ee=x.mouseY,Y=be.cx,G=be.cy-be.h/2}else{const be=O.get(x.fromNodeId);if(!be)return null;Z=be.cx,ee=be.cy+be.h/2,Y=x.mouseX,G=x.mouseY}const ae=G-ee,re=Math.abs(ae)>10?`M ${Z} ${ee} C ${Z} ${ee+ae*.4}, ${Y} ${G-ae*.4}, ${Y} ${G}`:`M ${Z} ${ee} L ${Y} ${G}`;return o.jsx("path",{d:re,fill:"none",stroke:"#58a6ff",strokeWidth:2,strokeDasharray:"6 3",strokeOpacity:.7,pointerEvents:"none"})},F=Z=>{const ee=Z.cy+Z.h/2,Y=(x==null?void 0:x.fromNodeId)===Z.id;return o.jsx("circle",{cx:Z.cx,cy:ee,r:Cv,fill:Y?"#58a6ff":"#1c2128",stroke:Y?"#58a6ff":"#484f58",strokeWidth:1.5,strokeOpacity:Y?1:.5,className:"cursor-crosshair",onMouseDown:G=>W(G,Z.id)})},ne=Z=>{const ee=Z.cy-Z.h/2,Y=x&&j===Z.id&&V(Z.id);return o.jsx("circle",{cx:Z.cx,cy:ee,r:Cv,fill:Y?"#3fb950":"#1c2128",stroke:Y?"#3fb950":"#484f58",strokeWidth:1.5,strokeOpacity:Y?1:.5})};return o.jsxs("svg",{ref:k,viewBox:`0 0 ${T} ${z}`,className:"block w-full",preserveAspectRatio:"xMidYMin meet",onMouseMove:B,onMouseUp:X,onClick:Q,children:[o.jsxs("defs",{children:[o.jsx("marker",{id:"arrow",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"7",markerHeight:"5",orient:"auto",children:o.jsx("polygon",{points:"0 0, 10 3.5, 0 7",fill:"#484f58"})}),o.jsx("marker",{id:"arrow-selected",viewBox:"0 0 10 7",refX:"10",refY:"3.5",markerWidth:"7",markerHeight:"5",orient:"auto",children:o.jsx("polygon",{points:"0 0, 10 3.5, 0 7",fill:"#58a6ff"})})]}),D.map((Z,ee)=>L(Z,ee)),N.map(Z=>{const ee=s===Z.id,Y=Z.cx-Z.w/2,G=Z.cy-Z.h/2,ae=y===Z.id,re=x&&j===Z.id&&V(Z.id);if(Z.type==="terminal"){const ve=Z.id==="$start",Re=ve?"#58a6ff":"#3fb950",Oe=ve,ze=!ve;return o.jsxs("g",{onClick:We=>{We.stopPropagation(),ve&&!h&&d("start")},className:ve&&!h?"cursor-pointer":void 0,children:[re&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:Z.h/2+3,fill:"none",stroke:"#3fb950",strokeOpacity:.6,strokeWidth:2}),ve&&i==="start"&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:Z.h/2+3,fill:"none",stroke:"#58a6ff",strokeOpacity:.5,strokeWidth:2}),o.jsx("rect",{x:Y,y:G,width:Z.w,height:Z.h,rx:Z.h/2,fill:Re,fillOpacity:.08,stroke:Re,strokeOpacity:.4,strokeWidth:1.5}),o.jsx("text",{x:Z.cx,y:Z.cy+4,textAnchor:"middle",fill:Re,className:"text-[10px] font-medium",pointerEvents:"none",children:Z.label}),Oe&&F(Z),ze&&ne(Z)]},Z.id)}const be=Z.color??"#6b7280";return o.jsxs("g",{onClick:ve=>{ve.stopPropagation(),h||l(ee?null:Z.id)},onMouseEnter:()=>b(Z.id),onMouseLeave:()=>b(null),className:h?void 0:"cursor-pointer",children:[re&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:12,fill:"none",stroke:"#3fb950",strokeOpacity:.6,strokeWidth:2}),ee&&o.jsx("rect",{x:Y-3,y:G-3,width:Z.w+6,height:Z.h+6,rx:12,fill:"none",stroke:"#58a6ff",strokeOpacity:.5,strokeWidth:2}),o.jsx("rect",{x:Y,y:G,width:Z.w,height:Z.h,rx:10,fill:be,fillOpacity:.08,stroke:be,strokeOpacity:.6,strokeWidth:ee?2:1.5}),o.jsx("text",{x:Z.cx,y:Z.cy+4,textAnchor:"middle",fill:"#c9d1d9",className:"text-[11px] font-medium",pointerEvents:"none",children:Z.label}),!h&&F(Z),!h&&ne(Z),ae&&!x&&!h&&o.jsxs("g",{onClick:ve=>{ve.stopPropagation(),f(Z.id)},className:"cursor-pointer",children:[o.jsx("circle",{cx:Y+Z.w-2,cy:G+2,r:8,fill:"#0d1117",fillOpacity:.9,stroke:"#f85149",strokeOpacity:.5,strokeWidth:1}),o.jsx("line",{x1:Y+Z.w-5,y1:G-1,x2:Y+Z.w+1,y2:G+5,stroke:"#f85149",strokeWidth:1.5,strokeLinecap:"round"}),o.jsx("line",{x1:Y+Z.w+1,y1:G-1,x2:Y+Z.w-5,y2:G+5,stroke:"#f85149",strokeWidth:1.5,strokeLinecap:"round"})]})]},Z.id)}),x&&N.map(Z=>V(Z.id)?o.jsx("rect",{x:Z.cx-Z.w/2-8,y:Z.cy-Z.h/2-8,width:Z.w+16,height:Z.h+16,fill:"transparent",rx:12,onMouseEnter:()=>A(Z.id),onMouseLeave:()=>A(null),onMouseUp:ee=>{ee.stopPropagation(),X()}},`drop-${Z.id}`):null),U(),R()]})}const ar="w-full px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary",qs="w-full px-2 py-1.5 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary",fn="block text-[11px] text-text-secondary mb-0.5";function YA({fromLabel:e,toLabel:r,condition:s,fromStep:i,agentTypes:c,onUpdateCondition:u,onDelete:h}){const l=i&&(i.type==="sub_agent"||i.type==="agent")?c.find(f=>f.id===(i.type==="sub_agent"?i.subAgentType:i.toolMode)):void 0,d=(l==null?void 0:l.results)&&l.results.length>0;return o.jsxs("div",{className:"space-y-3 text-sm",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold bg-blue-500/15 text-blue-300",children:"Transition"}),o.jsx("button",{onClick:h,className:"p-1 rounded text-text-muted hover:text-accent-error text-xs",children:"Delete"})]}),o.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-text-secondary",children:[o.jsx("span",{className:"font-medium text-text-primary",children:e}),o.jsx(Vv,{}),o.jsx("span",{className:"font-medium text-text-primary",children:r})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Condition"}),o.jsx("select",{value:s.type,onChange:f=>{u(f.target.value==="step_result"?{type:"step_result",result:"success"}:{type:f.target.value})},className:qs,children:B0.map(f=>o.jsx("option",{value:f.value,children:f.label},f.value))})]}),s.type==="step_result"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Result"}),d?o.jsx("select",{value:s.result??l.results[0],onChange:f=>{u({type:"step_result",result:f.target.value})},className:qs,children:l.results.map(f=>o.jsx("option",{value:f,children:f},f))}):o.jsx("input",{type:"text",value:s.result??"success",onChange:f=>u({type:"step_result",result:f.target.value}),placeholder:"e.g. success, passed, failed",className:ar})]}),o.jsx("p",{className:"text-text-muted text-[10px]",children:"Drag handles to reconnect. Press Delete to remove."})]})}function dh({variables:e,onInsert:r}){return e.length===0?null:o.jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:e.map(s=>o.jsx("button",{type:"button",onClick:()=>r(s.name),title:s.description,className:"px-1.5 py-0.5 rounded text-[10px] font-mono bg-bg-primary border border-border text-text-secondary hover:text-accent-primary hover:border-accent-primary/40 transition-colors",children:`{{${s.name}}}`},s.name))})}function XA({step:e,isEntry:r,agentTypes:s,transitionCount:i,templateVariables:c,onUpdate:u,onRemove:h,onSetEntry:l}){const{color:d,name:f}=Df(e,s);return o.jsxs("div",{className:"space-y-3 text-sm",children:[o.jsxs("div",{className:"flex items-center justify-between",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold",style:{backgroundColor:d+"20",color:d},children:f}),r&&o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold bg-accent-primary/15 text-accent-primary",children:"Entry"})]}),o.jsxs("div",{className:"flex items-center gap-1",children:[!r&&o.jsx("button",{onClick:l,className:"p-1 rounded text-text-muted hover:text-accent-primary text-xs",children:"Set entry"}),o.jsx("button",{onClick:h,className:"p-1 rounded text-text-muted hover:text-accent-error text-xs",children:"Delete"})]})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Type"}),o.jsx("select",{value:e.type,onChange:g=>{const m=g.target.value,v=m==="sub_agent"?"verification":"build";if(m==="agent"){const S=s.find(k=>!k.subagent);u({...e,type:m,phase:v,toolMode:(S==null?void 0:S.id)??"builder",name:(S==null?void 0:S.name)??"Agent"})}else if(m==="sub_agent"){const S=s.find(k=>k.subagent);u({...e,type:m,phase:v,subAgentType:(S==null?void 0:S.id)??"",name:(S==null?void 0:S.name)??"Sub-Agent"})}else u({...e,type:m,phase:v,name:"Shell"})},className:qs,children:VA.map(g=>o.jsx("option",{value:g.value,children:g.label},g.value))})]}),e.type==="agent"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Agent Type"}),o.jsx("select",{value:e.toolMode??"builder",onChange:g=>{const m=s.find(v=>v.id===g.target.value);u({...e,toolMode:g.target.value,name:(m==null?void 0:m.name)??g.target.value})},className:qs,children:s.filter(g=>!g.subagent).map(g=>o.jsx("option",{value:g.id,children:g.name},g.id))})]}),e.type==="sub_agent"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Sub-Agent Type"}),o.jsxs("select",{value:e.subAgentType??"",onChange:g=>{const m=s.find(v=>v.id===g.target.value);u({...e,subAgentType:g.target.value,name:(m==null?void 0:m.name)??g.target.value})},className:qs,children:[o.jsx("option",{value:"",children:"— select —"}),s.filter(g=>g.subagent).map(g=>o.jsx("option",{value:g.id,children:g.name},g.id))]})]}),(e.type==="agent"||e.type==="sub_agent")&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Prompt"}),o.jsx("textarea",{value:e.prompt??"",onChange:g=>u({...e,prompt:g.target.value||void 0}),rows:6,className:`${ar} resize-y text-xs`,placeholder:"Injected on first entry..."}),o.jsx(dh,{variables:c,onInsert:g=>u({...e,prompt:(e.prompt??"")+`{{${g}}}`})})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Nudge Prompt"}),o.jsx("textarea",{value:e.nudgePrompt??"",onChange:g=>u({...e,nudgePrompt:g.target.value||void 0}),rows:6,className:`${ar} resize-y text-xs`,placeholder:"Injected on re-entry..."}),o.jsx(dh,{variables:c,onInsert:g=>u({...e,nudgePrompt:(e.nudgePrompt??"")+`{{${g}}}`})})]})]}),e.type==="shell"&&o.jsxs(o.Fragment,{children:[o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Command"}),o.jsx("textarea",{value:e.command??"",onChange:g=>u({...e,command:g.target.value}),rows:3,className:`${ar} font-mono text-xs resize-y`,placeholder:"cd {{workdir}} && npm run lint"}),o.jsx(dh,{variables:c,onInsert:g=>u({...e,command:(e.command??"")+`{{${g}}}`})})]}),o.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Timeout (ms)"}),o.jsx("input",{type:"number",value:e.timeout??6e4,onChange:g=>u({...e,timeout:Number(g.target.value)}),className:`${ar} font-mono text-xs`})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Success Codes"}),o.jsx("input",{value:(e.successExitCodes??[0]).join(", "),onChange:g=>u({...e,successExitCodes:g.target.value.split(",").map(m=>Number(m.trim())).filter(m=>!isNaN(m))}),className:`${ar} font-mono text-xs`})]})]})]}),o.jsx("div",{className:"pt-1 border-t border-border/50",children:o.jsxs("p",{className:"text-text-muted text-[10px]",children:[i," outgoing transition",i!==1?"s":""," — drag from the bottom port to connect."]})})]})}const kv=[];function z0({isOpen:e,onClose:r,initialEditId:s}){const i=Tt(me=>me.defaults),c=Tt(me=>me.userItems),u=Tt(me=>me.loading),h=Tt(me=>me.templateVariables),l=Tt(me=>me.fetchWorkflows),d=Tt(me=>me.fetchWorkflow),f=Tt(me=>me.fetchDefaultContent),g=Tt(me=>me.fetchTemplateVariables),m=Tt(me=>me.createWorkflow),v=Tt(me=>me.updateWorkflow),S=Tt(me=>me.deleteWorkflow),{requestDelete:k,clearConfirm:C,isConfirming:y}=qh(),[b,x]=P.useState("list"),[_,j]=P.useState(null),[A,N]=P.useState(!1),[D,T]=P.useState(null),[z,O]=P.useState(null),[q,V]=P.useState(""),[W,I]=P.useState(""),[$,B]=P.useState(""),[X,Q]=P.useState("1.0.0"),[H,L]=P.useState("#3b82f6"),[R,U]=P.useState(""),[F,ne]=P.useState(50),[Z,ee]=P.useState(kv),[Y,G]=P.useState({type:"always"}),[ae,re]=P.useState(""),[be,ve]=P.useState(!1),[Re,Oe]=P.useState([]),[ze]=P.useState(null);P.useEffect(()=>{e&&(l(),g(),ke("/api/agents").then(me=>me.json()).then(me=>Oe(me.agents??[])).catch(()=>{}),T(null),O(null),s?i.some(ye=>ye.id===s)?f(s).then(ye=>{ye&&(V(ye.metadata.name+" (copy)"),I(`${s}-copy-${Date.now()}`),B(ye.metadata.description),Q(ye.metadata.version),L(ye.metadata.color??"#3b82f6"),U(ye.entryStep),ne(ye.settings.maxIterations),ee(ye.steps),G(ye.startCondition??{type:"always"}),re(""),j(null),N(!1),x("edit"))}):d(s).then(ye=>{ye&&(V(ye.metadata.name),I(ye.metadata.id),B(ye.metadata.description),Q(ye.metadata.version),L(ye.metadata.color??"#3b82f6"),U(ye.entryStep),ne(ye.settings.maxIterations),ee(ye.steps),G(ye.startCondition??{type:"always"}),re(""),j(s),N(!1),x("edit"))}):(x("list"),j(null),N(!1)))},[e,l,d,f,g,s]);const We=async me=>{const ye=await d(me);ye&&(j(me),V(ye.metadata.name),I(ye.metadata.id),B(ye.metadata.description),Q(ye.metadata.version),L(ye.metadata.color??"#3b82f6"),U(ye.entryStep),ne(ye.settings.maxIterations),ee(ye.steps),G(ye.startCondition??{type:"always"}),re(""),T(null),O(null),x("edit"))},Ee=async()=>{var Qe;const me=_??W;if(!me||!q)return re("Name is required."),!1;if(Z.length===0)return re("Add at least one step."),!1;let ye=R;if(!ye||!Z.some(He=>He.id===ye)){if(ye=((Qe=Z.find(He=>He.id))==null?void 0:Qe.id)??"",!ye)return re("All steps need an ID."),!1;U(ye)}ve(!0),re("");const we={metadata:{id:me,name:q,description:$,version:X||"1.0.0",color:H},entryStep:ye,settings:{maxIterations:F},steps:Z,startCondition:Y},Ve=_?await v(_,we):await m(we);return ve(!1),Ve.success?(_||j(me),!0):(re(Ve.error??"Failed to save."),!1)},fe=async()=>{await Ee()},je=async()=>{await Ee()&&(s?r():x("list"))},Ue=()=>{s?r():x("list")},It=me=>{V(me),_||I(qA(me))},pe=async me=>{if(i.some(we=>we.id===me)){const we=await f(me);if(!we)return;V(we.metadata.name),I(we.metadata.id),B(we.metadata.description),Q(we.metadata.version),L(we.metadata.color??"#3b82f6"),U(we.entryStep),ne(we.settings.maxIterations),ee(we.steps),G(we.startCondition??{type:"always"}),re(""),j(me),N(!0)}else{const we=await d(me);if(!we)return;V(we.metadata.name),I(we.metadata.id),B(we.metadata.description),Q(we.metadata.version),L(we.metadata.color??"#3b82f6"),U(we.entryStep),ne(we.settings.maxIterations),ee(we.steps),G(we.startCondition??{type:"always"}),re(""),j(me),N(!0)}x("edit")},Ne=async me=>{const we=i.some(Ve=>Ve.id===me)?await f(me):await d(me);we&&(V(we.metadata.name+" (copy)"),I(`${me}-copy-${Date.now()}`),B(we.metadata.description),Q(we.metadata.version),L(we.metadata.color??"#3b82f6"),U(we.entryStep),ne(we.settings.maxIterations),ee(we.steps),G(we.startCondition??{type:"always"}),re(""),j(null),N(!1),x("edit"))},Me=()=>{j(null),V(""),I(""),B(""),Q("1.0.0"),L("#3b82f6"),U(""),ne(50),ee(structuredClone(kv)),G({type:"always"}),re(""),T(null),O(null),N(!1),x("edit")},lt=async me=>{await S(me),C()},ue=P.useCallback(me=>{T(me),O(null)},[]),_e=P.useCallback(me=>{O(me),T(null)},[]),Te=D!==null?Number(D):-1,Ie=Te>=0?Z[Te]??null:null,$e=P.useCallback(me=>{ee(ye=>ye.map((we,Ve)=>Ve===Te?me:we))},[Te]),St=Y.type==="step_result"?`${Y.result}`:I0[Y.type]??Y.type,Ye=()=>{const me=Z.length,ye=WA(Z),we=Re.find(Ve=>!Ve.subagent);ee([...Z,{id:ye,name:(we==null?void 0:we.name)??"Agent",type:"agent",phase:"build",toolMode:(we==null?void 0:we.id)??"builder",transitions:[]}]),R||U(ye),ue(String(me))},Dt=P.useCallback((me,ye)=>{me==="$start"?(U(ye),_e("start")):ee(we=>{const Ve=we.find(He=>He.id===me),Qe=Ve?Ve.transitions.length:0;return _e(`${me}:${Qe}`),we.map(He=>He.id===me?{...He,transitions:[...He.transitions,{when:{type:"always"},goto:ye}]}:He)})},[_e]),gt=P.useCallback((me,ye)=>{if(me==="start")U(ye);else{const we=me.lastIndexOf(":"),Ve=me.slice(0,we),Qe=parseInt(me.slice(we+1));ee(He=>He.map(Zt=>Zt.id===Ve?{...Zt,transitions:Zt.transitions.map((Lt,Bt)=>Bt===Qe?{...Lt,goto:ye}:Lt)}:Zt))}},[]),Xt=P.useCallback((me,ye)=>{const we=me.lastIndexOf(":"),Ve=me.slice(0,we),Qe=parseInt(me.slice(we+1));ee(He=>{const Zt=He.find(Bt=>Bt.id===Ve);if(!Zt)return He;const Lt=Zt.transitions[Qe];return Lt?He.map(Bt=>Bt.id===Ve?{...Bt,transitions:Bt.transitions.filter((qr,oe)=>oe!==Qe)}:Bt.id===ye?{...Bt,transitions:[...Bt.transitions,Lt]}:Bt):He}),O(null)},[]),ct=P.useCallback(me=>{if(me==="start")U("");else{const ye=me.lastIndexOf(":"),we=me.slice(0,ye),Ve=parseInt(me.slice(ye+1));ee(Qe=>Qe.map(He=>He.id===we?{...He,transitions:He.transitions.filter((Zt,Lt)=>Lt!==Ve)}:He))}O(null)},[]),qn=P.useCallback((me,ye)=>{if(me==="start")G(ye);else{const we=me.lastIndexOf(":"),Ve=me.slice(0,we),Qe=parseInt(me.slice(we+1));ee(He=>He.map(Zt=>Zt.id===Ve?{...Zt,transitions:Zt.transitions.map((Lt,Bt)=>Bt===Qe?{...Lt,when:ye}:Lt)}:Zt))}},[]),sn=me=>Df(me,Re).name,Xi=()=>{if(!z)return null;if(z==="start"){const Lt=Z.find(Bt=>Bt.id===R);return{type:"start",fromLabel:"Start",toLabel:Lt?sn(Lt):"(none)",condition:Y}}const me=z.lastIndexOf(":"),ye=z.slice(0,me),we=parseInt(z.slice(me+1)),Ve=Z.find(Lt=>Lt.id===ye);if(!Ve)return null;const Qe=Ve.transitions[we];if(!Qe)return null;const He=Z.find(Lt=>Lt.id===Qe.goto),Zt=Qe.goto==="$done"?"Done":He?sn(He):Qe.goto;return{type:"step",fromLabel:sn(Ve),toLabel:Zt,condition:Qe.when}};if(b==="edit"){const me=Xi();return o.jsxs(jt,{isOpen:e,onClose:Ue,title:A?q:_?"Edit Workflow":"New Workflow",size:"full",children:[ae&&o.jsx("div",{className:"text-accent-error text-sm px-3 py-2 bg-accent-error/10 rounded mb-3",children:ae}),o.jsxs("div",{className:"flex items-end gap-3 mb-3 pb-3 border-b border-border flex-wrap",children:[o.jsxs("div",{className:"min-w-[140px]",children:[o.jsx("label",{className:fn,children:"Name"}),o.jsx("input",{value:q,onChange:ye=>It(ye.target.value),placeholder:"Workflow name",className:`${ar} ${A?"opacity-50":""}`,readOnly:A})]}),o.jsxs("div",{className:"min-w-[100px]",children:[o.jsx("label",{className:fn,children:"ID"}),o.jsx("input",{value:W,readOnly:!0,className:`${ar} font-mono opacity-50`})]}),o.jsxs("div",{className:"flex-1 min-w-[140px]",children:[o.jsx("label",{className:fn,children:"Description"}),o.jsx("input",{value:$,onChange:ye=>!A&&B(ye.target.value),readOnly:A,placeholder:"What does this workflow do?",className:`${ar} ${A?"opacity-50":""}`})]}),o.jsxs("div",{className:"w-20",children:[o.jsx("label",{className:fn,children:"Max Iter."}),o.jsx("input",{type:"number",value:F,onChange:ye=>!A&&ne(Number(ye.target.value)),readOnly:A,className:`${ar} font-mono ${A?"opacity-50":""}`})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Color"}),o.jsx("input",{type:"color",value:H,onChange:ye=>!A&&L(ye.target.value),disabled:A,className:`w-8 h-8 rounded border border-border bg-transparent ${A?"opacity-50":"cursor-pointer"}`})]})]}),o.jsxs("div",{className:"flex gap-3",style:{height:"calc(90vh - 220px)",minHeight:300},children:[o.jsxs("div",{className:"flex-1 min-w-0 bg-bg-primary/50 border border-border rounded-lg flex flex-col overflow-hidden",children:[o.jsxs("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/50 shrink-0",children:[o.jsx("span",{className:"text-[10px] text-text-muted uppercase tracking-wider font-medium",children:"Flow"}),!A&&o.jsx("button",{onClick:Ye,className:"text-[11px] text-accent-primary hover:text-accent-primary/80",children:"+ Add Step"})]}),o.jsxs("div",{className:"flex-1 min-h-0 p-2 overflow-auto",children:[o.jsx(KA,{steps:Z,entryStep:R,selectedNodeId:(Ie==null?void 0:Ie.id)??null,selectedEdgeKey:z,startConditionLabel:St,agentTypes:Re,isReadOnly:A,onSelectNode:ye=>{if(ye===null){ue(null);return}const we=Z.findIndex(Ve=>Ve.id===ye);ue(we>=0?String(we):null)},onSelectEdge:_e,onRemoveStep:ye=>{var Ve;const we=Z.findIndex(Qe=>Qe.id===ye);if(ee(Qe=>Qe.filter(He=>He.id!==ye)),Te===we&&ue(null),R===ye){const Qe=Z.filter(He=>He.id!==ye);U(((Ve=Qe[0])==null?void 0:Ve.id)??"")}},onCreateTransition:Dt,onReconnectTo:gt,onReconnectFrom:Xt,onDeleteTransition:ct}),Z.length===0&&o.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-text-muted",children:[o.jsx("p",{className:"text-xs mb-2",children:"No steps yet"}),o.jsx("button",{onClick:Ye,className:"px-3 py-1.5 rounded bg-accent-primary/10 text-accent-primary text-xs hover:bg-accent-primary/20",children:"+ Add your first step"})]})]})]}),o.jsxs("div",{className:"w-[300px] shrink-0 border border-border rounded-lg bg-bg-secondary flex flex-col overflow-hidden",children:[o.jsx("div",{className:"px-3 py-1.5 border-b border-border shrink-0",children:o.jsx("span",{className:"text-[10px] text-text-muted uppercase tracking-wider font-medium",children:"Properties"})}),o.jsx("div",{className:"p-3 overflow-y-auto flex-1 min-h-0",children:A&&(me||Ie)?o.jsx("p",{className:"text-text-muted text-xs text-center py-8",children:'View only — click "Duplicate & Customize" to edit.'}):me?me.type==="start"?o.jsxs("div",{className:"space-y-3 text-sm",children:[o.jsx("div",{className:"flex items-center gap-2",children:o.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] font-semibold bg-blue-500/20 text-blue-300",children:"Start"})}),R&&o.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-text-secondary",children:[o.jsx("span",{className:"text-text-primary font-medium",children:"Start"}),o.jsx(Vv,{}),o.jsx("span",{className:"text-text-primary font-medium",children:me.toLabel})]}),o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Activation Condition"}),o.jsx("select",{value:Y.type,onChange:ye=>G(ye.target.value==="step_result"?{type:"step_result",result:"success"}:{type:ye.target.value}),className:qs,children:B0.map(ye=>o.jsx("option",{value:ye.value,children:ye.label},ye.value))})]}),Y.type==="step_result"&&o.jsxs("div",{children:[o.jsx("label",{className:fn,children:"Result"}),R&&(()=>{const ye=Z.find(He=>He.id===R),we=ye&&(ye.type==="sub_agent"||ye.type==="agent")?Re.find(He=>He.id===(ye.type==="sub_agent"?ye.subAgentType:ye.toolMode)):void 0,Ve=(we==null?void 0:we.results)&&we.results.length>0,Qe=(we==null?void 0:we.results)??[];return Ve?o.jsx("select",{value:Y.result??Qe[0],onChange:He=>G({type:"step_result",result:He.target.value}),className:qs,children:Qe.map(He=>o.jsx("option",{value:He,children:He},He))}):o.jsx("input",{type:"text",value:Y.result??"success",onChange:He=>G({type:"step_result",result:He.target.value}),placeholder:"e.g. success, passed, failed",className:ar})})()]}),o.jsx("p",{className:"text-text-muted text-[10px]",children:"Workflow only proceeds when this condition is met. Drag the target handle to change entry step."})]}):o.jsx(YA,{fromLabel:me.fromLabel,toLabel:me.toLabel,condition:me.condition,fromStep:me.type==="step"?Z.find(ye=>ye.id===me.fromLabel):void 0,agentTypes:Re,onUpdateCondition:ye=>qn(z,ye),onDelete:()=>ct(z)}):Ie?o.jsx(XA,{step:Ie,isEntry:Ie.id===R,agentTypes:Re,transitionCount:Ie.transitions.length,templateVariables:h,onUpdate:$e,onRemove:()=>{var ye;if(Ie&&(ee(Z.filter((we,Ve)=>Ve!==Te)),ue(null),R===Ie.id)){const we=Z.filter((Ve,Qe)=>Qe!==Te);U(((ye=we[0])==null?void 0:ye.id)??"")}},onSetEntry:()=>U(Ie.id)}):o.jsxs("p",{className:"text-text-muted text-xs text-center py-8",children:["Click a node or edge to edit.",o.jsx("br",{}),"Drag from a port to connect."]})})]})]}),o.jsxs("div",{className:"flex justify-end gap-2 pt-3 mt-3 border-t border-border",children:[o.jsx(nt,{variant:"secondary",onClick:Ue,children:"Close"}),A?o.jsx(nt,{variant:"primary",onClick:()=>{V(q+" (copy)"),I(`${_}-copy-${Date.now()}`),j(null),N(!1)},children:"Duplicate & Customize"}):o.jsxs(o.Fragment,{children:[o.jsx(nt,{variant:"secondary",onClick:fe,disabled:be||!q,children:be?"Saving...":"Save"}),o.jsx(nt,{variant:"primary",onClick:je,disabled:be||!q,children:"Save & Close"})]})]})]})}return o.jsxs(jt,{isOpen:e,onClose:r,title:"Workflows",size:"lg",children:[o.jsxs("div",{className:"flex items-center justify-between mb-4",children:[o.jsx("p",{className:"text-text-secondary text-sm",children:"Workflows define the orchestrator's step sequence when running tasks."}),o.jsx("div",{className:"flex items-center gap-2 flex-shrink-0 ml-3",children:o.jsx(nt,{variant:"primary",size:"sm",onClick:Me,children:"+ New"})})]}),u&&i.length===0&&c.length===0?o.jsx("div",{className:"text-text-muted text-sm",children:"Loading workflows..."}):i.length===0&&c.length===0?o.jsx("div",{className:"text-text-muted text-sm",children:"No workflows installed."}):o.jsxs("div",{className:"space-y-4",children:[i.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Built-in"}),o.jsx("div",{className:"space-y-2",children:i.map(me=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsxs("div",{className:"min-w-0 flex-1 mr-3",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-primary text-sm font-medium",children:me.name}),o.jsxs("span",{className:"text-text-muted text-xs",children:["v",me.version]})]}),o.jsx("p",{className:"text-text-secondary text-xs mt-0.5 truncate",children:me.description})]}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx("button",{onClick:()=>pe(me.id),className:"p-1.5 rounded text-text-muted hover:text-text-primary hover:bg-bg-primary transition-colors",title:"View",children:o.jsx(lc,{})}),o.jsx(ao,{onClick:()=>Ne(me.id)})]})]},me.id))})]}),c.length>0&&o.jsxs("div",{children:[o.jsx("h3",{className:"text-xs font-medium text-text-secondary mb-2 uppercase tracking-wide",children:"Custom"}),o.jsx("div",{className:"space-y-2",children:c.map(me=>o.jsxs("div",{className:"flex items-center justify-between p-3 rounded border border-border bg-bg-tertiary",children:[o.jsxs("div",{className:"min-w-0 flex-1 mr-3",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("span",{className:"text-text-primary text-sm font-medium",children:me.name}),o.jsxs("span",{className:"text-text-muted text-xs",children:["v",me.version]})]}),o.jsx("p",{className:"text-text-secondary text-xs mt-0.5 truncate",children:me.description})]}),o.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[o.jsx(ao,{onClick:()=>Ne(me.id)}),o.jsx(Wi,{onClick:()=>We(me.id)}),y(me.id,"delete")?o.jsx(Wh,{onConfirm:()=>lt(me.id),onCancel:()=>{}}):o.jsx(Vh,{onClick:()=>k(me.id)})]})]},me.id))})]})]})]})}function ZA(e,r){const s=e.startCondition;if(!s||s.type==="always")return!0;switch(s.type){case"has_pending_criteria":return r.some(i=>i.status.type!=="passed");case"all_criteria_passed":return r.length===0||r.every(i=>i.status.type==="passed");case"all_criteria_completed_or_passed":return r.every(i=>i.status.type==="completed"||i.status.type==="passed");case"any_criteria_blocked":return r.some(i=>i.status.type==="failed"&&i.attempts.filter(c=>c.status==="failed").length>=4);case"step_result":return null;default:return null}}function QA({onSendCommand:e,onSelectWorkflow:r,onOpenCommandsManager:s,onOpenWorkflowsManager:i,onAttach:c,textareaContent:u,attachments:h,criteria:l}){const[d,f]=P.useState(!1),[g,m]=P.useState("commands"),[v,S]=P.useState(""),[k,C]=P.useState(0),[y,b]=P.useState(null),[x,_]=P.useState(null),j=P.useRef(null),A=P.useRef(null),N=hn(U=>U.defaults),D=hn(U=>U.userItems),T=hn(U=>U.fetchCommands),z=Tt(U=>U.defaults),O=Tt(U=>U.userItems),q=Tt(U=>U.fetchWorkflows),V=[...N,...D],W=[...z,...O];P.useEffect(()=>{d&&(g==="commands"?T():g==="workflows"&&q())},[d,g,T,q]),P.useEffect(()=>{d&&(S(""),C(0),requestAnimationFrame(()=>{var U;return(U=j.current)==null?void 0:U.focus()}))},[d,g]),P.useEffect(()=>{if(!d)return;const U=F=>{var ne;(ne=A.current)!=null&&ne.contains(F.target)||f(!1)};return document.addEventListener("mousedown",U),()=>document.removeEventListener("mousedown",U)},[d]);const I=U=>{switch(U.key){case"ArrowDown":U.preventDefault(),C(F=>{const Z=(g==="commands"?V:W).filter(ee=>{const Y=v.toLowerCase();return!Y||ee.name.toLowerCase().includes(Y)});return Math.min(F+1,Z.length-1)});break;case"ArrowUp":U.preventDefault(),C(F=>Math.max(F-1,0));break;case"Enter":U.preventDefault();break;case"Escape":U.preventDefault(),f(!1);break}},$=U=>{S(U),C(0)},B=V.filter(U=>!v||U.name.toLowerCase().includes(v.toLowerCase())),X=W.filter(U=>!v||U.name.toLowerCase().includes(v.toLowerCase())),Q=async U=>{const F=await hn.getState().fetchCommand(U);F&&e(F.prompt,F.metadata.agentMode,u,h),f(!1)},H=U=>{r(U),f(!1)},L=(U,F)=>{F.stopPropagation(),f(!1),b(U)},R=(U,F)=>{F.stopPropagation(),f(!1),_(U)};return o.jsxs("div",{ref:A,className:"relative",children:[o.jsx("button",{type:"button",onClick:()=>f(!d),className:"px-1.5 py-2 rounded-r bg-bg-secondary text-text-muted hover:text-text-primary hover:bg-bg-tertiary transition-colors border-l border-border/50",title:"More options",children:o.jsx(Gv,{className:"w-4 h-4"})}),d&&o.jsxs("div",{className:"absolute bottom-full right-0 mb-1 w-80 bg-bg-secondary border border-border rounded-lg shadow-xl z-50 overflow-hidden",children:[o.jsxs("div",{className:"flex border-b border-border",children:[o.jsx("button",{type:"button",onClick:()=>{m("commands"),S(""),C(0)},className:`flex-1 px-4 py-2 text-sm font-medium transition-colors ${g==="commands"?"text-accent-primary border-b-2 border-accent-primary":"text-text-muted hover:text-text-primary"}`,children:"Commands"}),o.jsx("button",{type:"button",onClick:()=>{m("workflows"),S(""),C(0)},className:`flex-1 px-4 py-2 text-sm font-medium transition-colors ${g==="workflows"?"text-accent-primary border-b-2 border-accent-primary":"text-text-muted hover:text-text-primary"}`,children:"Workflows"}),o.jsx("button",{type:"button",onClick:()=>m("attach"),className:`flex-1 px-4 py-2 text-sm font-medium transition-colors ${g==="attach"?"text-accent-primary border-b-2 border-accent-primary":"text-text-muted hover:text-text-primary"}`,children:"Attach"})]}),g!=="attach"&&o.jsx("div",{className:"p-2 border-b border-border",children:o.jsx("input",{ref:j,value:v,onChange:U=>$(U.target.value),onKeyDown:I,placeholder:g==="commands"?"Search commands...":"Search workflows...",className:"w-full px-2 py-1 bg-bg-tertiary border border-border rounded text-sm focus:outline-none focus:ring-1 focus:ring-accent-primary"})}),o.jsx("div",{className:"overflow-y-auto max-h-64 p-1",children:g==="commands"?B.length===0?o.jsx("div",{className:"px-3 py-2 text-text-muted text-sm",children:V.length===0?"No commands yet":"No matches"}):B.map((U,F)=>o.jsxs("div",{className:`flex items-center gap-1 px-3 py-2 rounded transition-colors group ${F===k?"bg-accent-primary/20":"hover:bg-bg-tertiary"}`,children:[o.jsx("button",{type:"button",onClick:()=>Q(U.id),className:"flex-1 text-left",children:o.jsx("div",{className:"text-sm text-text-primary font-medium",children:U.name})}),o.jsx(Wi,{className:"opacity-0 group-hover:opacity-100",onClick:ne=>L(U.id,ne)})]},U.id)):g==="workflows"?X.length===0?o.jsx("div",{className:"px-3 py-2 text-text-muted text-sm",children:W.length===0?"No workflows yet":"No matches"}):X.map((U,F)=>{const ne=ZA(U,l),Z=U.color??"#3b82f6";return o.jsxs("div",{className:`flex items-center gap-2 px-3 py-2 rounded transition-colors group ${F===k?"bg-accent-primary/20":"hover:bg-bg-tertiary"}`,children:[o.jsxs("button",{type:"button",onClick:()=>H(U.id),className:"flex-1 text-left flex items-center gap-2",children:[o.jsx("span",{className:"w-2 h-2 rounded-full flex-shrink-0",style:{backgroundColor:Z}}),o.jsx("span",{className:"text-sm text-text-primary font-medium flex-1",children:U.name}),ne!==null&&o.jsx("span",{className:"w-1.5 h-1.5 rounded-full flex-shrink-0",style:{backgroundColor:ne?"#22c55e":"#6b7280"},title:ne?"Entry condition met":"Entry condition not met"})]}),o.jsx(Wi,{className:"opacity-0 group-hover:opacity-100",onClick:ee=>R(U.id,ee)})]},U.id)}):o.jsxs("div",{className:"p-4 flex flex-col items-center gap-3",children:[o.jsxs("button",{type:"button",onClick:()=>{c(),f(!1)},className:"flex items-center gap-2 px-4 py-2 rounded bg-bg-tertiary hover:bg-accent-primary/20 text-text-primary transition-colors",children:[o.jsx(hw,{className:"w-4 h-4"}),o.jsx("span",{className:"text-sm font-medium",children:"Attach image"})]}),o.jsx("span",{className:"text-xs text-text-muted",children:"or drag & drop into chat"})]})}),g!=="attach"&&o.jsx("div",{className:"border-t border-border p-1",children:o.jsx("button",{type:"button",onClick:()=>{f(!1),g==="commands"?s():i()},className:"w-full text-left px-3 py-1.5 rounded text-sm text-text-muted hover:text-text-primary hover:bg-bg-tertiary transition-colors",children:g==="commands"?"Manage Commands...":"Manage Workflows..."})})]}),o.jsx(M0,{isOpen:!!y,onClose:()=>b(null),initialEditId:y}),o.jsx(z0,{isOpen:!!x,onClose:()=>_(null),initialEditId:x})]})}function P0(e,r){if(!r)return!0;const s=r.toLowerCase().split(/\s+/),i=e.toLowerCase().split(/\s+/);return s.every(c=>{for(const u of i){let h=0;for(let l=0;l<u.length&&h<c.length;l++)u[l]===c[h]&&h++;if(h===c.length)return!0}return!1})}function H0(e,r,s,i,c){switch(e.key){case"ArrowDown":e.preventDefault(),s(u=>Math.min(u+1,r));break;case"ArrowUp":e.preventDefault(),s(u=>Math.max(u-1,0));break;case"Enter":e.preventDefault(),i();break;case"Escape":e.preventDefault(),c();break}}function JA({isOpen:e,onClose:r,onCloseComplete:s,onSelectCommand:i,onSelectWorkflow:c,onCloseCompleteAction:u,textareaContent:h,onSearchMessages:l,onToggleAutoScroll:d,isAutoScrollActive:f}){const[,g]=lr(),m=hn(R=>R.fetchCommands),v=Tt(R=>R.fetchWorkflows),S=At(R=>R.fetchAgents),k=hn(R=>R.defaults),C=hn(R=>R.userItems),y=Tt(R=>R.defaults),b=Tt(R=>R.userItems),x=At(R=>R.defaults),_=At(R=>R.userItems),j=Ce(R=>{var U;return(U=R.currentSession)==null?void 0:U.mode}),A=Ce(R=>{var U;return((U=R.currentSession)==null?void 0:U.dangerLevel)??"normal"}),N=Ce(R=>R.switchMode),D=Ce(R=>R.switchDangerLevel),T=Ce(R=>{var U;return(U=R.currentSession)==null?void 0:U.projectId}),z=P.useRef(void 0),[O,q]=P.useState(""),[V,W]=P.useState(0),I=P.useRef(null),$=P.useRef(!1);P.useEffect(()=>{e&&($.current=!0)},[e]),P.useEffect(()=>{if(e){m(),v(),S(),q(""),W(0);const R=setTimeout(()=>{var U;return(U=I.current)==null?void 0:U.focus()},50);return()=>clearTimeout(R)}},[e,m,v,S]),P.useEffect(()=>{var R;!e&&$.current&&(s==null||s(),(R=z.current)==null||R.call(z),z.current=void 0)},[e,s]);const B=(R,U)=>{const F=new Set(U.map(ne=>ne.id));return[...R.filter(ne=>!F.has(ne.id)),...U]},Q=[{id:"create-session",name:"New Session",prefix:"Action > Create",action:()=>T&&g(`/p/${T}/new`)},{id:"navigate-session",name:"Another Session",prefix:"Action > Navigate to",action:()=>{z.current=u,r()}},{id:"search-messages",name:"Messages",prefix:"Action > Search",action:()=>{r(),l==null||l()}},{id:"toggle-autoscroll",name:f?"Auto-scroll Off":"Auto-scroll On",prefix:"Action > Toggle",action:()=>{r(),d==null||d(!f)}},...B(x,_).filter(R=>!R.subagent&&R.id!==j).map(R=>({id:R.id,name:R.name,prefix:"Agent > Switch to",action:()=>N(R.id)})),...B(k,C).map(R=>({id:R.id,name:R.name,prefix:"Command > Launch",action:()=>i(R.id,h)})),...B(y,b).map(R=>({id:R.id,name:R.name,prefix:"Workflow > Run",action:()=>c(R.id)})),...["normal","dangerous"].filter(R=>R!==A).map(R=>({id:R,name:R.charAt(0).toUpperCase()+R.slice(1),prefix:"Mode > Switch to",action:()=>D(R)}))].filter(R=>P0(`${R.prefix} ${R.name}`,O)),H=Q.length-1,L=R=>{H0(R,H,W,()=>{var U;(U=Q[V])==null||U.action(),r()},r)};return e?xo.createPortal(o.jsxs("div",{className:"fixed inset-0 z-50 flex items-start justify-center pt-[15vh] p-4",children:[o.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:r}),o.jsxs("div",{className:"relative w-full max-w-md bg-bg-secondary border border-border rounded shadow-xl",children:[o.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-border",children:[o.jsx("input",{ref:I,type:"text",value:O,onChange:R=>{q(R.target.value),W(0)},onKeyDown:L,placeholder:"Search...",className:"flex-1 bg-transparent text-sm focus:outline-none placeholder:text-text-muted"}),o.jsx(Uh,{onClick:r,className:"shrink-0","aria-label":"Close"})]}),o.jsx("div",{className:"overflow-y-auto max-h-[60vh] p-2",children:Q.length===0?o.jsx("div",{className:"px-3 py-4 text-center text-text-muted text-sm",children:k.length+C.length+y.length+b.length>0?"No matches":"No agents, commands, or workflows yet"}):Q.map((R,U)=>o.jsxs("button",{type:"button",onClick:()=>{R.action(),r()},className:`w-full text-left px-3 py-2 rounded text-sm transition-colors ${U===V?"bg-accent-primary/20 text-text-primary":"text-text-secondary hover:bg-bg-tertiary hover:text-text-primary"}`,children:[o.jsxs("span",{className:"text-text-muted font-normal",children:[R.prefix," "]}),o.jsx("span",{children:R.name})]},R.id))})]})]}),document.body):null}function e4(e){const r=new Date(e),s=new Date;if(r.getDate()===s.getDate()&&r.getMonth()===s.getMonth()&&r.getFullYear()===s.getFullYear())return r.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hour12:!1});const c=r.getFullYear(),u=String(r.getMonth()+1).padStart(2,"0"),h=String(r.getDate()).padStart(2,"0"),l=String(r.getHours()).padStart(2,"0"),d=String(r.getMinutes()).padStart(2,"0");return`${c}/${u}/${h} ${l}:${d}`}function t4({isOpen:e,onClose:r,messages:s,onSelectMessage:i}){const[c,u]=P.useState(""),[h,l]=P.useState(0),d=P.useRef(null),f=P.useRef(!1),g=s.filter(C=>C.role==="user"&&!C.isSystemGenerated&&C.messageKind!=="auto-prompt"&&C.messageKind!=="command");P.useEffect(()=>{e&&(f.current=!0)},[e]),P.useEffect(()=>{if(e){u(""),l(0);const C=setTimeout(()=>{var y;return(y=d.current)==null?void 0:y.focus()},50);return()=>clearTimeout(C)}},[e]);const m=g.filter(C=>P0(C.content,c)),v=m.length-1,S=C=>{H0(C,v,l,()=>{m[h]&&(i(m[h].id),r())},r)},k=C=>{i(C),r()};return e?xo.createPortal(o.jsxs("div",{className:"fixed inset-0 z-50 flex items-start justify-center pt-[15vh] p-4",children:[o.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:r}),o.jsxs("div",{className:"relative w-full max-w-md bg-bg-secondary border border-border rounded shadow-xl",children:[o.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 border-b border-border",children:[o.jsx(Hh,{}),o.jsx("input",{ref:d,type:"text",value:c,onChange:C=>{u(C.target.value),l(0)},onKeyDown:S,placeholder:"Search messages...",className:"flex-1 bg-transparent text-sm focus:outline-none placeholder:text-text-muted"}),o.jsx("button",{type:"button",onClick:r,className:"p-0.5 rounded hover:bg-bg-tertiary text-text-muted hover:text-text-primary transition-colors","aria-label":"Close",children:o.jsx(Fh,{className:"w-4 h-4"})})]}),o.jsx("div",{className:"overflow-y-auto max-h-[60vh] p-2",children:m.length===0?o.jsx("div",{className:"px-3 py-4 text-center text-text-muted text-sm",children:g.length>0?"No matches":"No messages yet"}):m.map((C,y)=>o.jsx("button",{type:"button",onClick:()=>k(C.id),className:`w-full text-left px-3 py-2 rounded text-sm transition-colors ${y===h?"bg-accent-primary/20 text-text-primary":"text-text-secondary hover:bg-bg-tertiary hover:text-text-primary"}`,children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsx("span",{className:"truncate flex-1",children:C.content}),o.jsx("span",{className:"text-text-muted text-xs shrink-0",children:e4(C.timestamp)})]})},C.id))})]})]}),document.body):null}function n4(e){return e==="criterion"}function r4(e){var r,s;return e.role!=="assistant"||e.subAgentId||(r=e.content)!=null&&r.trim()||(s=e.thinkingContent)!=null&&s.trim()||!e.toolCalls||e.toolCalls.length===0?!1:e.toolCalls.every(i=>n4(i.name))}function s4(e,r=[]){const s=[];let i=null,c=[],u,h=1;const l=new Map,d=new Map,f=[];for(const S of r)S.type==="message"?l.set(S.message.id,S):S.type==="subagent"?d.set(S.subAgentId,S):S.type==="criteria-batch"&&f.push(S);let g=0;const m=()=>{if(c.length>0){const S=f[g];S&&S.type==="criteria-batch"&&S.toolCalls.length===c.length&&S.toolCalls.every((C,y)=>{var b;return C.id===((b=c[y])==null?void 0:b.id)})?s.push(S):s.push({type:"criteria-batch",toolCalls:[...c]}),g++,c=[]}},v=()=>{if(!i)return;const S=i,k=d.get(S.subAgentId);k&&k.type==="subagent"&&k.messages.length===S.messages.length&&k.messages.every((y,b)=>y===S.messages[b])?s.push(k):s.push({type:"subagent",subAgentId:S.subAgentId,subAgentType:S.subAgentType,messages:S.messages}),i=null};for(const S of e)if(S.role!=="tool"){if(S.contextWindowId&&u&&S.contextWindowId!==u&&(m(),v(),h++,s.push({type:"context-divider",windowSequence:h})),u=S.contextWindowId,r4(S)){v();for(const k of S.toolCalls)c.push(k);continue}if(m(),S.subAgentId&&S.subAgentType)i&&i.subAgentId===S.subAgentId?i.messages.push(S):(v(),i={subAgentId:S.subAgentId,subAgentType:S.subAgentType,messages:[S]});else{v();const k=l.get(S.id);k&&k.type==="message"&&k.message===S?s.push(k):s.push({type:"message",message:S})}}return m(),v(),s}function i4(e){const{year:r,month:s,day:i}=sy(e);return`${r}/${s}/${i} ${uc(e)}`}function a4(e,r){return e.length<=r?e:e.substring(0,r)+"..."}const o4=10,l4=150;function c4(e){const r=[];if(e.recentUserPrompts)for(const s of e.recentUserPrompts)r.push({id:s.id,content:s.content,timestamp:s.timestamp,sessionId:e.id,sessionName:e.title||e.id});return r}function u4(e){return[...e].sort((i,c)=>new Date(c.timestamp).getTime()-new Date(i.timestamp).getTime()).slice(0,o4).reverse().map(i=>({id:i.id,content:i.content,timestamp:i.timestamp,formattedTimestamp:i4(i.timestamp),trimmedContent:a4(i.content,l4),sessionId:i.sessionId,sessionName:i.sessionName}))}function d4(e,r,s){const i=[],c=e.filter(u=>u.role==="user"&&!u.isSystemGenerated&&u.messageKind!=="auto-prompt");for(const u of c)i.push({id:u.id,content:u.content,timestamp:u.timestamp,sessionId:s??"",sessionName:"This session"});for(const u of r)s&&u.id===s||i.push(...c4(u));return u4(i)}function h4(e,r=[],s=null){const[i,c]=P.useState(0),[u,h]=P.useState(!1),l=P.useMemo(()=>d4(e,r,s),[e,r,s]),d=P.useCallback(()=>{l.length>0&&(c(l.length-1),h(!0))},[l.length]),f=P.useCallback(()=>{h(!1),c(0)},[]),g=P.useCallback(()=>{c(S=>l.length===0?S:S===0?l.length-1:S-1)},[l.length]),m=P.useCallback(()=>{c(S=>l.length===0?S:S===l.length-1?0:S+1)},[l.length]),v=P.useCallback(()=>{if(l.length===0||!u)return null;const S=l[i];return(S==null?void 0:S.content)??null},[l,i,u]);return{history:l,selectedIndex:i,showHistory:u,openHistory:d,closeHistory:f,navigateUp:g,navigateDown:m,selectCurrent:v}}function f4({criteriaSidebarOpen:e,onCriteriaSidebarToggle:r}={}){const s=e??!0,[i,c]=P.useState(""),[u,h]=P.useState([]),[l,d]=P.useState(!1),[f,g]=P.useState(null),[m,v]=P.useState(!1),[S,k]=P.useState(!1),[C,y]=P.useState(!1),[b,x]=P.useState(!1),[_,j]=P.useState(null),[A,N]=P.useState(null),D=P.useRef(null),T=P.useRef(null),z=P.useRef(null),O=Ce(oe=>oe.currentSession),q=Ce(oe=>oe.messages),V=Ce(oe=>oe.streamingMessage),W=Ce(oe=>oe.sessions),I=Ce(oe=>oe.error),$=Ce(oe=>oe.pendingQuestion),B=qv(),X=Ce(oe=>oe.sendMessage),Q=Ce(oe=>oe.clearError),H=Ce(oe=>oe.acceptAndBuild),L=Ce(oe=>oe.stopGeneration),R=Ce(oe=>oe.launchRunner),U=Ce(oe=>oe.cancelQueued),F=aw(),{showThinking:ne,showVerboseToolOutput:Z,showStats:ee,showAgentDefinitions:Y,showWorkflowBars:G}=Dh(),ae=Tt(oe=>oe.defaults),re=Tt(oe=>oe.userItems),be=[...ae,...re],ve=Tt(oe=>oe.fetchWorkflows),Re=At(oe=>oe.defaults),Oe=At(oe=>oe.userItems),ze=[...Re,...Oe].filter(oe=>!oe.subagent);P.useEffect(()=>{ve()},[ve]);const{history:We,selectedIndex:Ee,showHistory:fe,openHistory:je,closeHistory:Ue,navigateUp:It,navigateDown:pe,selectCurrent:Ne}=h4(q,W,O==null?void 0:O.id),Me=P.useCallback(oe=>{j(oe),St(!1);const Ae=document.querySelector(`[data-message-id="${oe}"]`);Ae&&Ae.scrollIntoView({behavior:"smooth",block:"center"}),setTimeout(()=>j(null),3e3)},[]);P.useEffect(()=>{const oe=Ae=>{N(Ae.detail.stats)};return window.addEventListener("open-turn-stats",oe),()=>window.removeEventListener("open-turn-stats",oe)},[]);const lt=P.useMemo(()=>V?q.map(oe=>oe.id===V.id?V:oe):q,[q,V]),ue=P.useRef([]),_e=P.useMemo(()=>{const oe=s4(lt,ue.current);return ue.current=oe,oe},[lt]),Te=P.useMemo(()=>BA(q),[q]),{force_scroll_to_bottom:Ie,isAutoScrollActive:$e,setAutoScroll:St}=L0(D,O),Ye=P.useCallback(()=>{const oe=T.current;if(!oe)return;oe.style.height="auto";const Ae=Math.min(200,oe.scrollHeight);oe.style.height=`${Ae}px`},[]);P.useEffect(()=>{if(!(O!=null&&O.id))return;const oe=`openfox:draft:${O.id}`,Ae=localStorage.getItem(oe);Ae!==null&&c(Ae)},[O==null?void 0:O.id]),P.useEffect(()=>{var oe;(oe=T.current)==null||oe.focus(),Ye()},[O==null?void 0:O.id,Ye]),P.useEffect(()=>{if(!(O!=null&&O.id))return;const oe=`openfox:draft:${O.id}`,Ae=setTimeout(()=>{i?localStorage.setItem(oe,i):localStorage.removeItem(oe)},500);return()=>clearTimeout(Ae)},[O==null?void 0:O.id,i]),P.useEffect(()=>{Ye()},[i,Ye]),P.useEffect(()=>{const oe=Ae=>{Ae.key==="Escape"&&B&&L(),Ae.key==="ScrollLock"&&St(!$e)};return window.addEventListener("keydown",oe),()=>window.removeEventListener("keydown",oe)},[B,L,$e]);const Dt=P.useRef(0);P.useEffect(()=>{const oe=Ae=>{if(Ae.key==="Shift"&&!Ae.ctrlKey&&!Ae.metaKey&&!Ae.altKey){const qe=Date.now();qe-Dt.current<300?(Ae.preventDefault(),y(!0),Dt.current=0):Dt.current=qe}};return window.addEventListener("keydown",oe),()=>window.removeEventListener("keydown",oe)},[]),P.useEffect(()=>{const oe=T.current;if(!oe)return;const Ae=async qe=>{var en;if(document.activeElement!==oe)return;const Ct=(en=qe.clipboardData)==null?void 0:en.items;if(Ct){for(const _n of Array.from(Ct))if(_n.type.startsWith("image/")){qe.preventDefault();const yr=_n.getAsFile();if(!yr)continue;await ch(yr,Xs=>h(Sn=>[...Sn,Xs]),g,{filename:"pasted-image"})}}};return oe.addEventListener("paste",Ae),()=>oe.removeEventListener("paste",Ae)},[]);const gt=()=>{c(""),h([]),O!=null&&O.id&&localStorage.removeItem(`openfox:draft:${O.id}`)},Xt=async oe=>{oe.preventDefault(),!(!i.trim()&&u.length===0)&&(Ie(),X(i,u.length>0?u:void 0),gt())},ct=oe=>{if((oe.ctrlKey||oe.metaKey)&&oe.code.startsWith("Digit")){const qe=parseInt(oe.code.slice(-1),10)-1,Ct=ze[qe];Ct&&(oe.preventDefault(),Ce.getState().switchMode(Ct.id));return}if(fe)switch(oe.key){case"Enter":oe.preventDefault();const Ae=Ne();Ae&&(c(Ae),Ue());return;case"Escape":oe.preventDefault(),Ue(),B&&L();return;case"ArrowUp":oe.preventDefault(),It();return;case"ArrowDown":oe.preventDefault(),pe();return}if(oe.key==="ArrowUp"&&i.trim()===""&&!fe){oe.preventDefault(),je();return}oe.key==="Enter"&&!oe.shiftKey&&(oe.preventDefault(),Xt(oe))},qn=P.useCallback(async oe=>{const Ae=oe.target.files;if(!(!Ae||Ae.length===0)){g(null);for(const qe of Array.from(Ae))await ch(qe,Ct=>h(en=>[...en,Ct]),g);z.current&&(z.current.value="")}},[]),sn=P.useCallback(oe=>{oe.preventDefault(),oe.stopPropagation(),d(!0)},[]),Xi=P.useCallback(oe=>{oe.preventDefault(),oe.stopPropagation(),d(!1)},[]),me=P.useCallback(async oe=>{oe.preventDefault(),oe.stopPropagation(),d(!1),g(null);const Ae=oe.dataTransfer.files;if(!(!Ae||Ae.length===0))for(const qe of Array.from(Ae))await ch(qe,Ct=>h(en=>[...en,Ct]),g)},[]),ye=P.useCallback(oe=>{h(Ae=>Ae.filter(qe=>qe.id!==oe))},[]),we=P.useCallback(()=>{var oe;(oe=z.current)==null||oe.click()},[]),Ve=(O==null?void 0:O.mode)==="planner",Qe=(O==null?void 0:O.mode)==="builder",He=((O==null?void 0:O.criteria.length)??0)>0,Zt=(O==null?void 0:O.phase)==="done",Lt=_e.some(oe=>oe.type==="message"&&oe.message.role==="assistant"),Bt=Ve&&He&&!B&&Lt&&!Zt,qr=oe=>{const Ae=i.trim()?i:void 0,qe=u.length>0?u:void 0;Ve?H(oe,Ae,qe):Qe&&R(Ae,qe,oe),gt()};return o.jsxs(o.Fragment,{children:[o.jsxs(n2,{criteriaSidebarOpen:s,onCriteriaSidebarToggle:r,messages:lt,children:[$&&o.jsx(_A,{question:$}),o.jsx(i2,{}),A&&o.jsx(dA,{stats:A,onClose:()=>N(null)}),o.jsx(SA,{}),o.jsxs("div",{ref:D,"data-testid":"chat-scroll-container",className:"flex-1 min-w-0 overflow-y-auto relative bg-primary",children:[o.jsx("div",{className:"pt-4",children:_e.map((oe,Ae)=>{if(oe.type==="context-divider")return o.jsxs("div",{className:"flex items-center gap-2 feed-item px-2 md:px-4",children:[o.jsx("div",{className:"flex-1 border-t border-border"}),o.jsx("span",{className:"text-[10px] text-text-muted font-medium px-2",children:"Earlier context summarized"}),o.jsx("div",{className:"flex-1 border-t border-border"})]},Ae);if(oe.type==="subagent"){const _n=oe.messages.some(yr=>yr.isStreaming);return o.jsx("div",{className:"px-2 md:px-4",children:o.jsx(mA,{messages:oe.messages,subAgentType:oe.subAgentType,subAgentId:oe.subAgentId,isStreaming:_n})},Ae)}if(oe.type==="criteria-batch")return o.jsx("div",{className:"feed-item px-2 md:px-4",children:o.jsx(D0,{toolCalls:oe.toolCalls,criteria:O==null?void 0:O.criteria})},Ae);const qe=oe.message;if(qe.role==="assistant")return o.jsx("div",{className:"px-2 md:px-4",children:o.jsx(Tf,{message:qe,showStats:ee,showThinking:ne,showVerboseToolOutput:Z})},Ae);const Ct=!Y&&qe.messageKind==="auto-prompt",en=!G&&(qe.messageKind==="workflow-started"||qe.messageKind==="task-completed");return Ct||en?null:o.jsx("div",{className:"px-2 md:px-4",children:o.jsx("div",{"data-message-id":qe.id,className:_===qe.id?"rounded animate-highlight-fade":void 0,children:o.jsx(R0,{message:qe,isLastAssistantMessage:!1,promptContext:qe.role==="user"?Te[qe.id]:void 0})})},Ae)})}),o.jsxs("div",{className:"px-2 md:px-4 pb-4",children:[I&&o.jsx("div",{className:"feed-item bg-red-500/10 border border-red-500/50 rounded p-2",children:o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{children:[o.jsx("div",{className:"text-red-400 text-sm font-medium",children:I.code}),o.jsx("div",{className:"text-red-300 text-xs mt-0.5",children:I.message})]}),o.jsx(oo,{onClick:Q,className:"text-red-400 hover:text-red-300 p-0.5",size:"sm"})]})}),Bt&&o.jsx("div",{className:"flex justify-center gap-2 feed-item flex-wrap",children:be.map(oe=>{const Ae=oe.color??"#3b82f6",qe=parseInt(Ae.slice(1,3),16),Ct=parseInt(Ae.slice(3,5),16),en=parseInt(Ae.slice(5,7),16),_n=`rgba(${qe},${Ct},${en},0.12)`,yr=`rgba(${qe},${Ct},${en},0.22)`,Xs=`rgba(${qe},${Ct},${en},0.25)`;return o.jsxs("button",{onClick:()=>H(oe.id),"data-testid":"workflow-run-button",className:"px-4 py-1.5 rounded text-sm font-medium transition-colors",style:{backgroundColor:_n,color:Ae,border:`1px solid ${Xs}`},onMouseEnter:Sn=>{Sn.currentTarget.style.backgroundColor=yr},onMouseLeave:Sn=>{Sn.currentTarget.style.backgroundColor=_n},children:["▶ ",oe.name]},oe.id)})}),B&&o.jsx(wA,{})]})]}),o.jsxs("form",{onSubmit:Xt,className:"relative p-2 md:p-4 bg-secondary",children:[o.jsxs("button",{type:"button",className:"absolute -top-8 right-12 md:right-16 text-sm text-text-muted hover:text-text-primary z-10 flex items-center gap-1.5",onClick:()=>St(!$e),children:[$e?o.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-accent-success"}):o.jsx(br,{className:"w-3 h-3 text-text-muted"}),$e?"live":"scroll to bottom"]}),o.jsx("button",{type:"button",onClick:()=>x(!0),className:"absolute -top-8 right-2 md:right-4 text-sm text-text-muted hover:text-text-primary z-10 flex items-center p-0.5 rounded hover:bg-bg-tertiary transition-colors","aria-label":"Search messages",children:o.jsx(Hh,{})}),o.jsx("input",{ref:z,type:"file",accept:".png,.jpg,.jpeg,.gif",onChange:qn,className:"hidden",multiple:!0}),f&&o.jsx("div",{className:"mb-2 p-2 bg-red-500/10 border border-red-500/50 rounded text-red-300 text-sm",children:f}),u.length>0&&o.jsx("div",{className:"mb-3 flex flex-wrap gap-2",children:u.map(oe=>o.jsx(CA,{attachment:oe,onRemove:ye},oe.id))}),fe&&o.jsx(kA,{history:We,selectedIndex:Ee,onSelect:oe=>{c(oe),Ue()},onEscape:Ue,onNavigate:oe=>{oe==="up"?It():pe()}}),F.length>0&&o.jsx("div",{className:"mb-2 flex flex-wrap gap-1.5",children:F.map(oe=>o.jsxs("div",{className:`inline-flex items-center gap-1.5 px-2 py-1 rounded text-xs ${oe.mode==="asap"?"bg-amber-500/15 text-amber-300 border border-amber-500/30":"bg-blue-500/15 text-blue-300 border border-blue-500/30"}`,children:[o.jsxs("span",{className:"font-medium",children:[oe.mode==="asap"?"ASAP":"Queue",":"]}),o.jsx("span",{className:"truncate max-w-[200px]",children:oe.content}),o.jsx(oo,{onClick:()=>U(oe.queueId),size:"sm"})]},oe.queueId))}),o.jsxs("div",{className:`flex items-end gap-3 p-3 rounded transition-colors ${l?"bg-accent-primary/10":"bg-primary"}`,onDragOver:sn,onDragLeave:Xi,onDrop:me,children:[o.jsx("textarea",{id:ty,ref:T,value:i,onChange:oe=>{c(oe.target.value),fe&&Ue()},onKeyDown:ct,placeholder:"What would you like to build?","data-testid":"chat-input-textarea",className:"flex-1 bg-transparent text-sm placeholder:text-text-muted resize-none overflow-y-auto focus:outline-none",style:{minHeight:"24px",maxHeight:"200px"},spellCheck:!1}),o.jsxs("div",{className:"flex items-center self-center",children:[o.jsx("button",{type:"button",onClick:()=>{var oe;!i.trim()&&u.length===0||((oe=D.current)==null||oe.scrollTo({top:D.current.scrollHeight,behavior:"smooth"}),X(i,u),gt())},disabled:!i.trim()&&u.length===0,"data-testid":"chat-send-button",className:"px-4 py-1.5 rounded-l bg-accent-primary/20 text-sm text-accent-primary font-medium hover:bg-accent-primary/30 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:"Send"}),o.jsx(QA,{onSendCommand:(oe,Ae,qe,Ct)=>{var _n;Ae&&(O==null?void 0:O.mode)!==Ae&&Ce.getState().switchMode(Ae);const en=qe&&qe.trim()?`${qe.trim()}
|
|
150
150
|
|
|
151
151
|
${oe}`:oe;(_n=D.current)==null||_n.scrollTo({top:D.current.scrollHeight,behavior:"smooth"}),X(en,Ct!=null&&Ct.length?Ct:void 0,{messageKind:"command",isSystemGenerated:!0}),gt()},onSelectWorkflow:qr,onOpenCommandsManager:()=>v(!0),onOpenWorkflowsManager:()=>k(!0),onAttach:we,textareaContent:i,attachments:u.length>0?u:void 0,criteria:(O==null?void 0:O.criteria)??[]})]})]}),o.jsxs("div",{className:"mt-3 flex items-center justify-between",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx(vA,{}),o.jsx(yA,{})]}),o.jsx(FA,{})]})]}),o.jsx(M0,{isOpen:m,onClose:()=>v(!1)}),o.jsx(z0,{isOpen:S,onClose:()=>k(!1)}),o.jsx(JA,{isOpen:C,onClose:()=>y(!1),onSearchMessages:()=>x(!0),isAutoScrollActive:$e,onToggleAutoScroll:St,textareaContent:i,onCloseComplete:ny,onCloseCompleteAction:()=>window.dispatchEvent(new CustomEvent("open-session-dropdown")),onSelectCommand:async(oe,Ae)=>{const qe=await hn.getState().fetchCommand(oe);if(qe){const Ct=Ae!=null&&Ae.trim()?`${Ae.trim()}
|
|
152
152
|
|
package/dist/web/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" type="image/png" href="/assets/openfox.png" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, height=device-height" />
|
|
7
7
|
<title>OpenFox</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-o22LDSSr.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Da8AupAk.css">
|
|
10
10
|
<link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
|
|
11
11
|
<body class="bg-bg-primary text-text-primary font-mono">
|
|
12
12
|
<div id="root"></div>
|
package/dist/web/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let o={};const
|
|
1
|
+
if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let o={};const l=e=>i(e,t),c={module:{uri:t},exports:o,require:l};s[t]=Promise.all(n.map(e=>c[e]||l(e))).then(e=>(r(...e),o))}}define(["./workbox-8c29f6e4"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"537f089b777ec99ba97709739c0c437a"},{url:"__inspect__.js",revision:"3232040b9bade73418bcfae3cb11c117"},{url:"assets/index-o22LDSSr.js",revision:null},{url:"assets/index-Da8AupAk.css",revision:null},{url:"assets/html2canvas.esm-QH1iLAAe.js",revision:null},{url:"assets/openfox-192.png",revision:"79feeb86d692c274854e37959a7dae67"},{url:"assets/openfox-512.png",revision:"fee24b214220594b4f595a467e73036e"},{url:"manifest.webmanifest",revision:"c25f372c782e623ab1e768a8dfe350ca"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
|