local-operator-ui 0.10.5 → 0.10.7

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.
Files changed (47) hide show
  1. package/README.md +2 -2
  2. package/out/main/index.jsc +0 -0
  3. package/out/preload/index.jsc +0 -0
  4. package/out/renderer/assets/{_basePickBy-J6QOPIw6.js → _basePickBy-bM9rKo9j.js} +2 -2
  5. package/out/renderer/assets/{_baseUniq-CjrpCuGP.js → _baseUniq-BTyNyH8f.js} +1 -1
  6. package/out/renderer/assets/{arc-B9dHmVa3.js → arc-52ZNS7Mc.js} +1 -1
  7. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-iZe3FGai.js → architectureDiagram-IEHRJDOE-DTuFQLSd.js} +7 -7
  8. package/out/renderer/assets/{blockDiagram-JOT3LUYC-Ct7Hjgdp.js → blockDiagram-JOT3LUYC-0CMD1kXE.js} +5 -5
  9. package/out/renderer/assets/{c4Diagram-VJAJSXHY-DPAI5Oul.js → c4Diagram-VJAJSXHY-CAD1cJIP.js} +2 -2
  10. package/out/renderer/assets/{channel-kBkjl2tX.js → channel-DooqkKMQ.js} +1 -1
  11. package/out/renderer/assets/{chunk-4BMEZGHF-BbIA2hPK.js → chunk-4BMEZGHF-BLVBfkLN.js} +1 -1
  12. package/out/renderer/assets/{chunk-A2AXSNBT-ChTSPi_g.js → chunk-A2AXSNBT-_jAI_WF2.js} +2 -2
  13. package/out/renderer/assets/{chunk-AEK57VVT-CbZX12yb.js → chunk-AEK57VVT-B8P3MENQ.js} +2 -2
  14. package/out/renderer/assets/{chunk-D6G4REZN-hnXFWy0U.js → chunk-D6G4REZN-7goIf0uD.js} +1 -1
  15. package/out/renderer/assets/{chunk-RZ5BOZE2-DJGZKKsw.js → chunk-RZ5BOZE2-BZZkFFOx.js} +1 -1
  16. package/out/renderer/assets/{chunk-XZIHB7SX-Ui8w9_LJ.js → chunk-XZIHB7SX-C6Qx8kIn.js} +1 -1
  17. package/out/renderer/assets/{classDiagram-GIVACNV2-B-m9p15O.js → classDiagram-GIVACNV2-nutPpuAF.js} +3 -3
  18. package/out/renderer/assets/{classDiagram-v2-COTLJTTW-B-m9p15O.js → classDiagram-v2-COTLJTTW-nutPpuAF.js} +3 -3
  19. package/out/renderer/assets/{clone-D3nlta8f.js → clone-Dv3v3K10.js} +1 -1
  20. package/out/renderer/assets/{dagre-OKDRZEBW-CuBbVbAE.js → dagre-OKDRZEBW-BvjVk-VL.js} +6 -6
  21. package/out/renderer/assets/{diagram-SSKATNLV-Ddt-5-58.js → diagram-SSKATNLV-BC3f615s.js} +6 -6
  22. package/out/renderer/assets/{diagram-VNBRO52H-CptIzsnS.js → diagram-VNBRO52H-iVluvYAy.js} +6 -6
  23. package/out/renderer/assets/{erDiagram-Q7BY3M3F-hAtjkKRt.js → erDiagram-Q7BY3M3F-BHceBobZ.js} +3 -3
  24. package/out/renderer/assets/{flowDiagram-4HSFHLVR-COKwAFv7.js → flowDiagram-4HSFHLVR-CGYyv_WQ.js} +3 -3
  25. package/out/renderer/assets/{ganttDiagram-APWFNJXF-DzqtejzU.js → ganttDiagram-APWFNJXF-CQlU1hxI.js} +1 -1
  26. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-CCkiOue7.js → gitGraphDiagram-7IBYFJ6S-CSTRzS4J.js} +7 -7
  27. package/out/renderer/assets/{graph-D_O_nUCU.js → graph-CoEJ_k0b.js} +2 -2
  28. package/out/renderer/assets/{index-BkfYRfhG.js → index-Ckb5yety.js} +1 -1
  29. package/out/renderer/assets/{index-C0xVwDO6.js → index-E4JRScZr.js} +1696 -604
  30. package/out/renderer/assets/{index-DyCWQ6pn.js → index-luCXlbKf.js} +1 -1
  31. package/out/renderer/assets/{infoDiagram-PH2N3AL5-D2pi_Avu.js → infoDiagram-PH2N3AL5-D8GfR9L-.js} +5 -5
  32. package/out/renderer/assets/{journeyDiagram-U35MCT3I-CYV7gt8_.js → journeyDiagram-U35MCT3I-BP4duAhq.js} +3 -3
  33. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-z_jHtS3N.js → kanban-definition-NDS4AKOZ-DuCd7BpW.js} +1 -1
  34. package/out/renderer/assets/{layout-DgQHyz0Y.js → layout-TBoOITHR.js} +4 -4
  35. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-ByeOpUXU.js → mindmap-definition-ALO5MXBD-2COFVHJu.js} +1 -1
  36. package/out/renderer/assets/{pieDiagram-IB7DONF6-CzpV9GLV.js → pieDiagram-IB7DONF6-D7Kjesl8.js} +7 -7
  37. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-TRIu05Kz.js → quadrantDiagram-7GDLP6J5-CuEBETqd.js} +1 -1
  38. package/out/renderer/assets/{radar-MK3ICKWK-DNJgoIIb.js → radar-MK3ICKWK-4ySuwLbU.js} +4 -4
  39. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-DtZxlcxe.js → requirementDiagram-KVF5MWMF-B2OB8-5B.js} +2 -2
  40. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-CsDA2pgF.js → sankeyDiagram-QLVOVGJD-6_bJ06DP.js} +1 -1
  41. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DXZSfjCv.js → sequenceDiagram-X6HHIX6F-CbmjJ1pE.js} +3 -3
  42. package/out/renderer/assets/{stateDiagram-DGXRK772-gJvvYfHT.js → stateDiagram-DGXRK772-zxpsm9Bs.js} +7 -7
  43. package/out/renderer/assets/{stateDiagram-v2-YXO3MK2T-DUjC-b8t.js → stateDiagram-v2-YXO3MK2T-DArpC2cJ.js} +3 -3
  44. package/out/renderer/assets/{timeline-definition-BDJGKUSR-DpFxQaCe.js → timeline-definition-BDJGKUSR-CSaG1Dv0.js} +2 -2
  45. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-BWFbhKHp.js → xychartDiagram-VJFVF3MP-Bg2SvRep.js} +1 -1
  46. package/out/renderer/index.html +1 -1
  47. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-DyCWQ6pn.js","./fonts-Bb3Axuvj.js","./fonts-B9KBGB-g.css","./index-BkfYRfhG.js","./pug-By0kVCfm.js","./javascript-C3MnDRiU.js","./dagre-OKDRZEBW-CuBbVbAE.js","./graph-D_O_nUCU.js","./_baseUniq-CjrpCuGP.js","./layout-DgQHyz0Y.js","./_basePickBy-J6QOPIw6.js","./clone-D3nlta8f.js","./c4Diagram-VJAJSXHY-DPAI5Oul.js","./chunk-D6G4REZN-hnXFWy0U.js","./flowDiagram-4HSFHLVR-COKwAFv7.js","./chunk-RZ5BOZE2-DJGZKKsw.js","./channel-kBkjl2tX.js","./erDiagram-Q7BY3M3F-hAtjkKRt.js","./gitGraphDiagram-7IBYFJ6S-CCkiOue7.js","./chunk-4BMEZGHF-BbIA2hPK.js","./chunk-XZIHB7SX-Ui8w9_LJ.js","./radar-MK3ICKWK-DNJgoIIb.js","./ganttDiagram-APWFNJXF-DzqtejzU.js","./infoDiagram-PH2N3AL5-D2pi_Avu.js","./pieDiagram-IB7DONF6-CzpV9GLV.js","./arc-B9dHmVa3.js","./quadrantDiagram-7GDLP6J5-TRIu05Kz.js","./xychartDiagram-VJFVF3MP-BWFbhKHp.js","./requirementDiagram-KVF5MWMF-DtZxlcxe.js","./sequenceDiagram-X6HHIX6F-DXZSfjCv.js","./classDiagram-GIVACNV2-B-m9p15O.js","./chunk-A2AXSNBT-ChTSPi_g.js","./classDiagram-v2-COTLJTTW-B-m9p15O.js","./stateDiagram-DGXRK772-gJvvYfHT.js","./chunk-AEK57VVT-CbZX12yb.js","./stateDiagram-v2-YXO3MK2T-DUjC-b8t.js","./journeyDiagram-U35MCT3I-CYV7gt8_.js","./timeline-definition-BDJGKUSR-DpFxQaCe.js","./mindmap-definition-ALO5MXBD-ByeOpUXU.js","./cytoscape.esm-C0AOj4uS.js","./kanban-definition-NDS4AKOZ-z_jHtS3N.js","./sankeyDiagram-QLVOVGJD-CsDA2pgF.js","./diagram-VNBRO52H-CptIzsnS.js","./diagram-SSKATNLV-Ddt-5-58.js","./blockDiagram-JOT3LUYC-Ct7Hjgdp.js","./architectureDiagram-IEHRJDOE-iZe3FGai.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-luCXlbKf.js","./fonts-Bb3Axuvj.js","./fonts-B9KBGB-g.css","./index-Ckb5yety.js","./pug-By0kVCfm.js","./javascript-C3MnDRiU.js","./dagre-OKDRZEBW-BvjVk-VL.js","./graph-CoEJ_k0b.js","./_baseUniq-BTyNyH8f.js","./layout-TBoOITHR.js","./_basePickBy-bM9rKo9j.js","./clone-Dv3v3K10.js","./c4Diagram-VJAJSXHY-CAD1cJIP.js","./chunk-D6G4REZN-7goIf0uD.js","./flowDiagram-4HSFHLVR-CGYyv_WQ.js","./chunk-RZ5BOZE2-BZZkFFOx.js","./channel-DooqkKMQ.js","./erDiagram-Q7BY3M3F-BHceBobZ.js","./gitGraphDiagram-7IBYFJ6S-CSTRzS4J.js","./chunk-4BMEZGHF-BLVBfkLN.js","./chunk-XZIHB7SX-C6Qx8kIn.js","./radar-MK3ICKWK-4ySuwLbU.js","./ganttDiagram-APWFNJXF-CQlU1hxI.js","./infoDiagram-PH2N3AL5-D8GfR9L-.js","./pieDiagram-IB7DONF6-D7Kjesl8.js","./arc-52ZNS7Mc.js","./quadrantDiagram-7GDLP6J5-CuEBETqd.js","./xychartDiagram-VJFVF3MP-Bg2SvRep.js","./requirementDiagram-KVF5MWMF-B2OB8-5B.js","./sequenceDiagram-X6HHIX6F-CbmjJ1pE.js","./classDiagram-GIVACNV2-nutPpuAF.js","./chunk-A2AXSNBT-_jAI_WF2.js","./classDiagram-v2-COTLJTTW-nutPpuAF.js","./stateDiagram-DGXRK772-zxpsm9Bs.js","./chunk-AEK57VVT-B8P3MENQ.js","./stateDiagram-v2-YXO3MK2T-DArpC2cJ.js","./journeyDiagram-U35MCT3I-BP4duAhq.js","./timeline-definition-BDJGKUSR-CSaG1Dv0.js","./mindmap-definition-ALO5MXBD-2COFVHJu.js","./cytoscape.esm-C0AOj4uS.js","./kanban-definition-NDS4AKOZ-DuCd7BpW.js","./sankeyDiagram-QLVOVGJD-6_bJ06DP.js","./diagram-VNBRO52H-iVluvYAy.js","./diagram-SSKATNLV-BC3f615s.js","./blockDiagram-JOT3LUYC-0CMD1kXE.js","./architectureDiagram-IEHRJDOE-DTuFQLSd.js"])))=>i.map(i=>d[i]);
2
2
  import { i as createStyled, l as resolveProps, m as useTheme, n as useTheme$1, r as reactExports, o as React, p as useEnhancedEffect$1, q as clsx, t as useForkRef$1, v as extendSxProp, j as jsxRuntimeExports, w as handleBreakpoints, x as resolveBreakpointValues, y as createUnarySpacing, z as deepmerge, A as mergeBreakpointsInOrder, F as composeClasses$1, G as generateUtilityClass$1, I as createTheme$1, J as getValue$1, h as React$1, K as requireReactDom, g as getDefaultExportFromCjs, L as defaultTheme$2, M as THEME_ID, N as generateUtilityClasses$1, O as useDefaultProps, s as styled$1, P as capitalize$1, Q as memoTheme, _ as _inheritsLoose, S as _objectWithoutPropertiesLoose$k, U as TransitionGroupContext, V as _extends$w, W as duration, u as useTheme$2, X as useTimeout$1, Y as useId$1, Z as ButtonBase, b as alpha$1, $ as createSimplePaletteValueFilter, a0 as CircularProgress, a1 as Paper, a2 as darken$1, a3 as lighten$1, a4 as useEventCallback$1, a5 as useRtl, a6 as globalCss, a7 as formatMuiErrorMessage$1, a8 as rootShouldForwardProp, T as Typography, a9 as css$1, k as keyframes, aa as getPath$2, ab as isFocusVisible, ac as typographyClasses, ad as slotShouldForwardProp, ae as clamp, af as emphasize, ag as Timeout$1, c as createLucideIcon, a as Button, B as Box, ah as FontAwesomeIcon, ai as faExclamationTriangle, D as DEFAULT_THEME, aj as faChevronLeft, ak as faChevronRight, al as faRobot, am as faCheck, an as faTimes, ao as faEraser, ap as faPen, aq as faFileImport, ar as faUpload, as as GlobalStyles, at as requireReact, au as faComment, av as faSave, aw as faEdit, ax as faTrashAlt, ay as faInfoCircle, az as faGear, aA as faPlus, aB as faServer, aC as faStar, aD as faTag, aE as faIdCard, aF as faCalendarAlt, aG as faCodeBranch, aH as faShieldAlt, aI as faArrowLeft, aJ as faClock, C as Code, aK as faSliders, aL as faTrash, aM as faHome, aN as faDownload, aO as faFileAlt, aP as faDesktop, aQ as faImage, aR as faMusic, aS as faVideo, aT as faLaptop, aU as faUsers, aV as faDatabase, aW as faBoxOpen, aX as faBook, aY as faHdd, aZ as faBox, a_ as faArchive, a$ as faNetworkWired, b0 as faFolder, b1 as faFolderOpen, b2 as faFolderTree, b3 as faArrowDown, b4 as faPaperclip, b5 as faStop, b6 as faPaperPlane, b7 as faFile, b8 as faExclamationCircle, b9 as faChevronDown, ba as isDevelopmentMode, bb as faCommentSlash, bc as faArrowRight, bd as faBrain, be as faWandMagicSparkles, bf as faExternalLinkAlt, bg as faKey, bh as radientTheme, bi as faGlobe, bj as faSearch, bk as PropTypes, bl as shouldForwardProp, bm as TransitionGroup, bn as commonjsGlobal, bo as faLock, bp as faPuzzlePiece, H as HardDrive, bq as faSignOut, br as themes$1, bs as faMoon, bt as faSun, bu as faHexagonNodes, bv as faSkull, bw as faLeaf, bx as faCode, by as faMountain, bz as faFire, bA as faIcicles, bB as faBolt, bC as faAdjust, bD as faWaveSquare, bE as faUser, bF as faEnvelope, bG as faHistory, bH as faListAlt, bI as faCreditCard, bJ as faPlusCircle, bK as faChartLine, bL as faShield, bM as library$1, bN as icons$1, f as CssBaseline, e as ThemeProvider$1, d as getTheme, R as ReactDOM$1, E as ErrorBoundary } from "./fonts-Bb3Axuvj.js";
3
3
  const styled = createStyled();
4
4
  function getThemeProps(params) {
@@ -29429,6 +29429,52 @@ const StaticApi = {
29429
29429
  getVideoUrl,
29430
29430
  getHtmlUrl
29431
29431
  };
29432
+ const TranscriptionApi = {
29433
+ /**
29434
+ * Transcribe Audio File
29435
+ *
29436
+ * Transcribes an audio file using the specified model and parameters.
29437
+ * The audio file is sent as `multipart/form-data`.
29438
+ * @param baseUrl - The base URL of the Local Operator API.
29439
+ * @param params - The parameters for the transcription request.
29440
+ * @returns A promise that resolves to the transcription result.
29441
+ * @throws Will throw an error if the request fails.
29442
+ */
29443
+ async createTranscription(baseUrl, params) {
29444
+ const formData = new FormData();
29445
+ formData.append("file", params.file);
29446
+ if (params.model !== void 0) formData.append("model", params.model);
29447
+ if (params.prompt !== void 0) formData.append("prompt", params.prompt);
29448
+ if (params.response_format !== void 0)
29449
+ formData.append("response_format", params.response_format);
29450
+ if (params.temperature !== void 0)
29451
+ formData.append("temperature", params.temperature.toString());
29452
+ if (params.language !== void 0)
29453
+ formData.append("language", params.language);
29454
+ if (params.provider !== void 0)
29455
+ formData.append("provider", params.provider);
29456
+ const response = await fetch(`${baseUrl}/v1/transcriptions`, {
29457
+ method: "POST",
29458
+ body: formData,
29459
+ // Content-Type for FormData is set automatically by the browser, including the boundary.
29460
+ // Ensure 'Accept' header is set if the server expects it, though for FormData it's often not strictly needed for the request itself.
29461
+ // However, for consistency with other API calls and to ensure JSON error responses are handled:
29462
+ headers: {
29463
+ Accept: "application/json"
29464
+ }
29465
+ });
29466
+ if (!response.ok) {
29467
+ let errorDetail = `Transcription request failed: ${response.status} ${response.statusText}`;
29468
+ try {
29469
+ const errorData = await response.json();
29470
+ errorDetail = errorData.message || errorData.detail || errorDetail;
29471
+ } catch (_2) {
29472
+ }
29473
+ throw new Error(errorDetail);
29474
+ }
29475
+ return response.json();
29476
+ }
29477
+ };
29432
29478
  var WebsocketConnectionType = /* @__PURE__ */ ((WebsocketConnectionType2) => {
29433
29479
  WebsocketConnectionType2["MESSAGE"] = "message";
29434
29480
  WebsocketConnectionType2["HEALTH"] = "health";
@@ -30012,6 +30058,12 @@ class LocalOperatorClient {
30012
30058
  get schedules() {
30013
30059
  return this.bindBaseUrlToApi(SchedulesApi);
30014
30060
  }
30061
+ /**
30062
+ * Get the Transcription API client with methods bound to the base URL
30063
+ */
30064
+ get transcription() {
30065
+ return this.bindBaseUrlToApi(TranscriptionApi);
30066
+ }
30015
30067
  /**
30016
30068
  * Bind the base URL to all methods of an API client
30017
30069
  *
@@ -35956,30 +36008,30 @@ const useAgentSelectionStore = create$3()(
35956
36008
  * This source code is licensed under the ISC license.
35957
36009
  * See the LICENSE file in the root directory of this source tree.
35958
36010
  */
35959
- const __iconNode$1l = [
36011
+ const __iconNode$1q = [
35960
36012
  ["rect", { width: "20", height: "5", x: "2", y: "3", rx: "1", key: "1wp1u1" }],
35961
36013
  ["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
35962
36014
  ["path", { d: "M10 12h4", key: "a56b0p" }]
35963
36015
  ];
35964
- const Archive = createLucideIcon("archive", __iconNode$1l);
36016
+ const Archive = createLucideIcon("archive", __iconNode$1q);
35965
36017
  /**
35966
36018
  * @license lucide-react v0.507.0 - ISC
35967
36019
  *
35968
36020
  * This source code is licensed under the ISC license.
35969
36021
  * See the LICENSE file in the root directory of this source tree.
35970
36022
  */
35971
- const __iconNode$1k = [
36023
+ const __iconNode$1p = [
35972
36024
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
35973
36025
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
35974
36026
  ];
35975
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1k);
36027
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$1p);
35976
36028
  /**
35977
36029
  * @license lucide-react v0.507.0 - ISC
35978
36030
  *
35979
36031
  * This source code is licensed under the ISC license.
35980
36032
  * See the LICENSE file in the root directory of this source tree.
35981
36033
  */
35982
- const __iconNode$1j = [
36034
+ const __iconNode$1o = [
35983
36035
  ["path", { d: "M2 10v3", key: "1fnikh" }],
35984
36036
  ["path", { d: "M6 6v11", key: "11sgs0" }],
35985
36037
  ["path", { d: "M10 3v18", key: "yhl04a" }],
@@ -35987,14 +36039,14 @@ const __iconNode$1j = [
35987
36039
  ["path", { d: "M18 5v13", key: "123xd1" }],
35988
36040
  ["path", { d: "M22 10v3", key: "154ddg" }]
35989
36041
  ];
35990
- const AudioLines = createLucideIcon("audio-lines", __iconNode$1j);
36042
+ const AudioLines = createLucideIcon("audio-lines", __iconNode$1o);
35991
36043
  /**
35992
36044
  * @license lucide-react v0.507.0 - ISC
35993
36045
  *
35994
36046
  * This source code is licensed under the ISC license.
35995
36047
  * See the LICENSE file in the root directory of this source tree.
35996
36048
  */
35997
- const __iconNode$1i = [
36049
+ const __iconNode$1n = [
35998
36050
  [
35999
36051
  "path",
36000
36052
  {
@@ -36003,14 +36055,14 @@ const __iconNode$1i = [
36003
36055
  }
36004
36056
  ]
36005
36057
  ];
36006
- const Book = createLucideIcon("book", __iconNode$1i);
36058
+ const Book = createLucideIcon("book", __iconNode$1n);
36007
36059
  /**
36008
36060
  * @license lucide-react v0.507.0 - ISC
36009
36061
  *
36010
36062
  * This source code is licensed under the ISC license.
36011
36063
  * See the LICENSE file in the root directory of this source tree.
36012
36064
  */
36013
- const __iconNode$1h = [
36065
+ const __iconNode$1m = [
36014
36066
  ["path", { d: "M12 8V4H8", key: "hb8ula" }],
36015
36067
  ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
36016
36068
  ["path", { d: "M2 14h2", key: "vft8re" }],
@@ -36018,25 +36070,25 @@ const __iconNode$1h = [
36018
36070
  ["path", { d: "M15 13v2", key: "1xurst" }],
36019
36071
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
36020
36072
  ];
36021
- const Bot = createLucideIcon("bot", __iconNode$1h);
36073
+ const Bot = createLucideIcon("bot", __iconNode$1m);
36022
36074
  /**
36023
36075
  * @license lucide-react v0.507.0 - ISC
36024
36076
  *
36025
36077
  * This source code is licensed under the ISC license.
36026
36078
  * See the LICENSE file in the root directory of this source tree.
36027
36079
  */
36028
- const __iconNode$1g = [
36080
+ const __iconNode$1l = [
36029
36081
  ["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }],
36030
36082
  ["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }]
36031
36083
  ];
36032
- const Briefcase = createLucideIcon("briefcase", __iconNode$1g);
36084
+ const Briefcase = createLucideIcon("briefcase", __iconNode$1l);
36033
36085
  /**
36034
36086
  * @license lucide-react v0.507.0 - ISC
36035
36087
  *
36036
36088
  * This source code is licensed under the ISC license.
36037
36089
  * See the LICENSE file in the root directory of this source tree.
36038
36090
  */
36039
- const __iconNode$1f = [
36091
+ const __iconNode$1k = [
36040
36092
  ["path", { d: "M8 2v4", key: "1cmpym" }],
36041
36093
  ["path", { d: "M16 2v4", key: "4m81vk" }],
36042
36094
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
@@ -36048,136 +36100,160 @@ const __iconNode$1f = [
36048
36100
  ["path", { d: "M12 18h.01", key: "mhygvu" }],
36049
36101
  ["path", { d: "M16 18h.01", key: "kzsmim" }]
36050
36102
  ];
36051
- const CalendarDays = createLucideIcon("calendar-days", __iconNode$1f);
36103
+ const CalendarDays = createLucideIcon("calendar-days", __iconNode$1k);
36104
+ /**
36105
+ * @license lucide-react v0.507.0 - ISC
36106
+ *
36107
+ * This source code is licensed under the ISC license.
36108
+ * See the LICENSE file in the root directory of this source tree.
36109
+ */
36110
+ const __iconNode$1j = [
36111
+ ["path", { d: "M8 2v4", key: "1cmpym" }],
36112
+ ["path", { d: "M16 2v4", key: "4m81vk" }],
36113
+ ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
36114
+ ["path", { d: "M3 10h18", key: "8toen8" }]
36115
+ ];
36116
+ const Calendar = createLucideIcon("calendar", __iconNode$1j);
36052
36117
  /**
36053
36118
  * @license lucide-react v0.507.0 - ISC
36054
36119
  *
36055
36120
  * This source code is licensed under the ISC license.
36056
36121
  * See the LICENSE file in the root directory of this source tree.
36057
36122
  */
36058
- const __iconNode$1e = [
36123
+ const __iconNode$1i = [
36059
36124
  ["line", { x1: "18", x2: "18", y1: "20", y2: "10", key: "1xfpm4" }],
36060
36125
  ["line", { x1: "12", x2: "12", y1: "20", y2: "4", key: "be30l9" }],
36061
36126
  ["line", { x1: "6", x2: "6", y1: "20", y2: "14", key: "1r4le6" }]
36062
36127
  ];
36063
- const ChartNoAxesColumn = createLucideIcon("chart-no-axes-column", __iconNode$1e);
36128
+ const ChartNoAxesColumn = createLucideIcon("chart-no-axes-column", __iconNode$1i);
36064
36129
  /**
36065
36130
  * @license lucide-react v0.507.0 - ISC
36066
36131
  *
36067
36132
  * This source code is licensed under the ISC license.
36068
36133
  * See the LICENSE file in the root directory of this source tree.
36069
36134
  */
36070
- const __iconNode$1d = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
36071
- const Check = createLucideIcon("check", __iconNode$1d);
36135
+ const __iconNode$1h = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
36136
+ const Check = createLucideIcon("check", __iconNode$1h);
36072
36137
  /**
36073
36138
  * @license lucide-react v0.507.0 - ISC
36074
36139
  *
36075
36140
  * This source code is licensed under the ISC license.
36076
36141
  * See the LICENSE file in the root directory of this source tree.
36077
36142
  */
36078
- const __iconNode$1c = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
36079
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$1c);
36143
+ const __iconNode$1g = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
36144
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$1g);
36080
36145
  /**
36081
36146
  * @license lucide-react v0.507.0 - ISC
36082
36147
  *
36083
36148
  * This source code is licensed under the ISC license.
36084
36149
  * See the LICENSE file in the root directory of this source tree.
36085
36150
  */
36086
- const __iconNode$1b = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
36087
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1b);
36151
+ const __iconNode$1f = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
36152
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$1f);
36088
36153
  /**
36089
36154
  * @license lucide-react v0.507.0 - ISC
36090
36155
  *
36091
36156
  * This source code is licensed under the ISC license.
36092
36157
  * See the LICENSE file in the root directory of this source tree.
36093
36158
  */
36094
- const __iconNode$1a = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
36095
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$1a);
36159
+ const __iconNode$1e = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
36160
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$1e);
36096
36161
  /**
36097
36162
  * @license lucide-react v0.507.0 - ISC
36098
36163
  *
36099
36164
  * This source code is licensed under the ISC license.
36100
36165
  * See the LICENSE file in the root directory of this source tree.
36101
36166
  */
36102
- const __iconNode$19 = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
36103
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$19);
36167
+ const __iconNode$1d = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
36168
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$1d);
36104
36169
  /**
36105
36170
  * @license lucide-react v0.507.0 - ISC
36106
36171
  *
36107
36172
  * This source code is licensed under the ISC license.
36108
36173
  * See the LICENSE file in the root directory of this source tree.
36109
36174
  */
36110
- const __iconNode$18 = [
36175
+ const __iconNode$1c = [
36111
36176
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
36112
36177
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
36113
36178
  ];
36114
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$18);
36179
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$1c);
36115
36180
  /**
36116
36181
  * @license lucide-react v0.507.0 - ISC
36117
36182
  *
36118
36183
  * This source code is licensed under the ISC license.
36119
36184
  * See the LICENSE file in the root directory of this source tree.
36120
36185
  */
36121
- const __iconNode$17 = [
36186
+ const __iconNode$1b = [
36122
36187
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36123
36188
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
36124
36189
  ];
36125
- const CircleCheck = createLucideIcon("circle-check", __iconNode$17);
36190
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$1b);
36126
36191
  /**
36127
36192
  * @license lucide-react v0.507.0 - ISC
36128
36193
  *
36129
36194
  * This source code is licensed under the ISC license.
36130
36195
  * See the LICENSE file in the root directory of this source tree.
36131
36196
  */
36132
- const __iconNode$16 = [
36197
+ const __iconNode$1a = [
36133
36198
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36134
36199
  ["path", { d: "M17 12h.01", key: "1m0b6t" }],
36135
36200
  ["path", { d: "M12 12h.01", key: "1mp3jc" }],
36136
36201
  ["path", { d: "M7 12h.01", key: "eqddd0" }]
36137
36202
  ];
36138
- const CircleEllipsis = createLucideIcon("circle-ellipsis", __iconNode$16);
36203
+ const CircleEllipsis = createLucideIcon("circle-ellipsis", __iconNode$1a);
36139
36204
  /**
36140
36205
  * @license lucide-react v0.507.0 - ISC
36141
36206
  *
36142
36207
  * This source code is licensed under the ISC license.
36143
36208
  * See the LICENSE file in the root directory of this source tree.
36144
36209
  */
36145
- const __iconNode$15 = [
36210
+ const __iconNode$19 = [
36146
36211
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36147
36212
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
36148
36213
  ["path", { d: "M12 17h.01", key: "p32p05" }]
36149
36214
  ];
36150
- const CircleHelp = createLucideIcon("circle-help", __iconNode$15);
36215
+ const CircleHelp = createLucideIcon("circle-help", __iconNode$19);
36151
36216
  /**
36152
36217
  * @license lucide-react v0.507.0 - ISC
36153
36218
  *
36154
36219
  * This source code is licensed under the ISC license.
36155
36220
  * See the LICENSE file in the root directory of this source tree.
36156
36221
  */
36157
- const __iconNode$14 = [
36222
+ const __iconNode$18 = [
36158
36223
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36159
36224
  ["polygon", { points: "10 8 16 12 10 16 10 8", key: "1cimsy" }]
36160
36225
  ];
36161
- const CirclePlay = createLucideIcon("circle-play", __iconNode$14);
36226
+ const CirclePlay = createLucideIcon("circle-play", __iconNode$18);
36162
36227
  /**
36163
36228
  * @license lucide-react v0.507.0 - ISC
36164
36229
  *
36165
36230
  * This source code is licensed under the ISC license.
36166
36231
  * See the LICENSE file in the root directory of this source tree.
36167
36232
  */
36168
- const __iconNode$13 = [
36233
+ const __iconNode$17 = [
36169
36234
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36170
36235
  ["path", { d: "M8 12h8", key: "1wcyev" }],
36171
36236
  ["path", { d: "M12 8v8", key: "napkw2" }]
36172
36237
  ];
36173
- const CirclePlus = createLucideIcon("circle-plus", __iconNode$13);
36238
+ const CirclePlus = createLucideIcon("circle-plus", __iconNode$17);
36174
36239
  /**
36175
36240
  * @license lucide-react v0.507.0 - ISC
36176
36241
  *
36177
36242
  * This source code is licensed under the ISC license.
36178
36243
  * See the LICENSE file in the root directory of this source tree.
36179
36244
  */
36180
- const __iconNode$12 = [
36245
+ const __iconNode$16 = [
36246
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36247
+ ["rect", { x: "9", y: "9", width: "6", height: "6", rx: "1", key: "1ssd4o" }]
36248
+ ];
36249
+ const CircleStop = createLucideIcon("circle-stop", __iconNode$16);
36250
+ /**
36251
+ * @license lucide-react v0.507.0 - ISC
36252
+ *
36253
+ * This source code is licensed under the ISC license.
36254
+ * See the LICENSE file in the root directory of this source tree.
36255
+ */
36256
+ const __iconNode$15 = [
36181
36257
  ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
36182
36258
  [
36183
36259
  "path",
@@ -36191,72 +36267,72 @@ const __iconNode$12 = [
36191
36267
  ["path", { d: "M8 11h.01", key: "1dfujw" }],
36192
36268
  ["path", { d: "M8 16h.01", key: "18s6g9" }]
36193
36269
  ];
36194
- const ClipboardList = createLucideIcon("clipboard-list", __iconNode$12);
36270
+ const ClipboardList = createLucideIcon("clipboard-list", __iconNode$15);
36195
36271
  /**
36196
36272
  * @license lucide-react v0.507.0 - ISC
36197
36273
  *
36198
36274
  * This source code is licensed under the ISC license.
36199
36275
  * See the LICENSE file in the root directory of this source tree.
36200
36276
  */
36201
- const __iconNode$11 = [
36277
+ const __iconNode$14 = [
36202
36278
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36203
36279
  ["polyline", { points: "12 6 12 12 16 14", key: "68esgv" }]
36204
36280
  ];
36205
- const Clock$1 = createLucideIcon("clock", __iconNode$11);
36281
+ const Clock$1 = createLucideIcon("clock", __iconNode$14);
36206
36282
  /**
36207
36283
  * @license lucide-react v0.507.0 - ISC
36208
36284
  *
36209
36285
  * This source code is licensed under the ISC license.
36210
36286
  * See the LICENSE file in the root directory of this source tree.
36211
36287
  */
36212
- const __iconNode$10 = [
36288
+ const __iconNode$13 = [
36213
36289
  ["path", { d: "M12 13v8", key: "1l5pq0" }],
36214
36290
  ["path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242", key: "1pljnt" }],
36215
36291
  ["path", { d: "m8 17 4-4 4 4", key: "1quai1" }]
36216
36292
  ];
36217
- const CloudUpload = createLucideIcon("cloud-upload", __iconNode$10);
36293
+ const CloudUpload = createLucideIcon("cloud-upload", __iconNode$13);
36218
36294
  /**
36219
36295
  * @license lucide-react v0.507.0 - ISC
36220
36296
  *
36221
36297
  * This source code is licensed under the ISC license.
36222
36298
  * See the LICENSE file in the root directory of this source tree.
36223
36299
  */
36224
- const __iconNode$$ = [
36300
+ const __iconNode$12 = [
36225
36301
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
36226
36302
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
36227
36303
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
36228
36304
  ];
36229
- const CodeXml = createLucideIcon("code-xml", __iconNode$$);
36305
+ const CodeXml = createLucideIcon("code-xml", __iconNode$12);
36230
36306
  /**
36231
36307
  * @license lucide-react v0.507.0 - ISC
36232
36308
  *
36233
36309
  * This source code is licensed under the ISC license.
36234
36310
  * See the LICENSE file in the root directory of this source tree.
36235
36311
  */
36236
- const __iconNode$_ = [
36312
+ const __iconNode$11 = [
36237
36313
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
36238
36314
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
36239
36315
  ];
36240
- const Copy = createLucideIcon("copy", __iconNode$_);
36316
+ const Copy = createLucideIcon("copy", __iconNode$11);
36241
36317
  /**
36242
36318
  * @license lucide-react v0.507.0 - ISC
36243
36319
  *
36244
36320
  * This source code is licensed under the ISC license.
36245
36321
  * See the LICENSE file in the root directory of this source tree.
36246
36322
  */
36247
- const __iconNode$Z = [
36323
+ const __iconNode$10 = [
36248
36324
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
36249
36325
  ["polyline", { points: "7 10 12 15 17 10", key: "2ggqvy" }],
36250
36326
  ["line", { x1: "12", x2: "12", y1: "15", y2: "3", key: "1vk2je" }]
36251
36327
  ];
36252
- const Download = createLucideIcon("download", __iconNode$Z);
36328
+ const Download = createLucideIcon("download", __iconNode$10);
36253
36329
  /**
36254
36330
  * @license lucide-react v0.507.0 - ISC
36255
36331
  *
36256
36332
  * This source code is licensed under the ISC license.
36257
36333
  * See the LICENSE file in the root directory of this source tree.
36258
36334
  */
36259
- const __iconNode$Y = [
36335
+ const __iconNode$$ = [
36260
36336
  ["path", { d: "M21.54 15H17a2 2 0 0 0-2 2v4.54", key: "1djwo0" }],
36261
36337
  [
36262
36338
  "path",
@@ -36268,38 +36344,38 @@ const __iconNode$Y = [
36268
36344
  ["path", { d: "M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05", key: "14pb5j" }],
36269
36345
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
36270
36346
  ];
36271
- const Earth = createLucideIcon("earth", __iconNode$Y);
36347
+ const Earth = createLucideIcon("earth", __iconNode$$);
36272
36348
  /**
36273
36349
  * @license lucide-react v0.507.0 - ISC
36274
36350
  *
36275
36351
  * This source code is licensed under the ISC license.
36276
36352
  * See the LICENSE file in the root directory of this source tree.
36277
36353
  */
36278
- const __iconNode$X = [
36354
+ const __iconNode$_ = [
36279
36355
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
36280
36356
  ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
36281
36357
  ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
36282
36358
  ];
36283
- const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$X);
36359
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$_);
36284
36360
  /**
36285
36361
  * @license lucide-react v0.507.0 - ISC
36286
36362
  *
36287
36363
  * This source code is licensed under the ISC license.
36288
36364
  * See the LICENSE file in the root directory of this source tree.
36289
36365
  */
36290
- const __iconNode$W = [
36366
+ const __iconNode$Z = [
36291
36367
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
36292
36368
  ["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
36293
36369
  ["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
36294
36370
  ];
36295
- const Ellipsis = createLucideIcon("ellipsis", __iconNode$W);
36371
+ const Ellipsis = createLucideIcon("ellipsis", __iconNode$Z);
36296
36372
  /**
36297
36373
  * @license lucide-react v0.507.0 - ISC
36298
36374
  *
36299
36375
  * This source code is licensed under the ISC license.
36300
36376
  * See the LICENSE file in the root directory of this source tree.
36301
36377
  */
36302
- const __iconNode$V = [
36378
+ const __iconNode$Y = [
36303
36379
  [
36304
36380
  "path",
36305
36381
  {
@@ -36310,65 +36386,65 @@ const __iconNode$V = [
36310
36386
  ["path", { d: "M22 21H7", key: "t4ddhn" }],
36311
36387
  ["path", { d: "m5 11 9 9", key: "1mo9qw" }]
36312
36388
  ];
36313
- const Eraser = createLucideIcon("eraser", __iconNode$V);
36389
+ const Eraser = createLucideIcon("eraser", __iconNode$Y);
36314
36390
  /**
36315
36391
  * @license lucide-react v0.507.0 - ISC
36316
36392
  *
36317
36393
  * This source code is licensed under the ISC license.
36318
36394
  * See the LICENSE file in the root directory of this source tree.
36319
36395
  */
36320
- const __iconNode$U = [
36396
+ const __iconNode$X = [
36321
36397
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
36322
36398
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
36323
36399
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
36324
36400
  ];
36325
- const ExternalLink = createLucideIcon("external-link", __iconNode$U);
36401
+ const ExternalLink = createLucideIcon("external-link", __iconNode$X);
36326
36402
  /**
36327
36403
  * @license lucide-react v0.507.0 - ISC
36328
36404
  *
36329
36405
  * This source code is licensed under the ISC license.
36330
36406
  * See the LICENSE file in the root directory of this source tree.
36331
36407
  */
36332
- const __iconNode$T = [
36408
+ const __iconNode$W = [
36333
36409
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
36334
36410
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
36335
36411
  ["circle", { cx: "10", cy: "12", r: "2", key: "737tya" }],
36336
36412
  ["path", { d: "m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22", key: "wt3hpn" }]
36337
36413
  ];
36338
- const FileImage = createLucideIcon("file-image", __iconNode$T);
36414
+ const FileImage = createLucideIcon("file-image", __iconNode$W);
36339
36415
  /**
36340
36416
  * @license lucide-react v0.507.0 - ISC
36341
36417
  *
36342
36418
  * This source code is licensed under the ISC license.
36343
36419
  * See the LICENSE file in the root directory of this source tree.
36344
36420
  */
36345
- const __iconNode$S = [
36421
+ const __iconNode$V = [
36346
36422
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
36347
36423
  ["path", { d: "M4 7V4a2 2 0 0 1 2-2 2 2 0 0 0-2 2", key: "1vk7w2" }],
36348
36424
  ["path", { d: "M4.063 20.999a2 2 0 0 0 2 1L18 22a2 2 0 0 0 2-2V7l-5-5H6", key: "1jink5" }],
36349
36425
  ["path", { d: "m5 11-3 3", key: "1dgrs4" }],
36350
36426
  ["path", { d: "m5 17-3-3h10", key: "1mvvaf" }]
36351
36427
  ];
36352
- const FileOutput = createLucideIcon("file-output", __iconNode$S);
36428
+ const FileOutput = createLucideIcon("file-output", __iconNode$V);
36353
36429
  /**
36354
36430
  * @license lucide-react v0.507.0 - ISC
36355
36431
  *
36356
36432
  * This source code is licensed under the ISC license.
36357
36433
  * See the LICENSE file in the root directory of this source tree.
36358
36434
  */
36359
- const __iconNode$R = [
36435
+ const __iconNode$U = [
36360
36436
  ["path", { d: "M12 17h.01", key: "p32p05" }],
36361
36437
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z", key: "1mlx9k" }],
36362
36438
  ["path", { d: "M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3", key: "mhlwft" }]
36363
36439
  ];
36364
- const FileQuestion = createLucideIcon("file-question", __iconNode$R);
36440
+ const FileQuestion = createLucideIcon("file-question", __iconNode$U);
36365
36441
  /**
36366
36442
  * @license lucide-react v0.507.0 - ISC
36367
36443
  *
36368
36444
  * This source code is licensed under the ISC license.
36369
36445
  * See the LICENSE file in the root directory of this source tree.
36370
36446
  */
36371
- const __iconNode$Q = [
36447
+ const __iconNode$T = [
36372
36448
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
36373
36449
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
36374
36450
  ["path", { d: "M8 13h2", key: "yr2amv" }],
@@ -36376,64 +36452,64 @@ const __iconNode$Q = [
36376
36452
  ["path", { d: "M8 17h2", key: "2yhykz" }],
36377
36453
  ["path", { d: "M14 17h2", key: "10kma7" }]
36378
36454
  ];
36379
- const FileSpreadsheet = createLucideIcon("file-spreadsheet", __iconNode$Q);
36455
+ const FileSpreadsheet = createLucideIcon("file-spreadsheet", __iconNode$T);
36380
36456
  /**
36381
36457
  * @license lucide-react v0.507.0 - ISC
36382
36458
  *
36383
36459
  * This source code is licensed under the ISC license.
36384
36460
  * See the LICENSE file in the root directory of this source tree.
36385
36461
  */
36386
- const __iconNode$P = [
36462
+ const __iconNode$S = [
36387
36463
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
36388
36464
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
36389
36465
  ["path", { d: "M10 9H8", key: "b1mrlr" }],
36390
36466
  ["path", { d: "M16 13H8", key: "t4e002" }],
36391
36467
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
36392
36468
  ];
36393
- const FileText = createLucideIcon("file-text", __iconNode$P);
36469
+ const FileText = createLucideIcon("file-text", __iconNode$S);
36394
36470
  /**
36395
36471
  * @license lucide-react v0.507.0 - ISC
36396
36472
  *
36397
36473
  * This source code is licensed under the ISC license.
36398
36474
  * See the LICENSE file in the root directory of this source tree.
36399
36475
  */
36400
- const __iconNode$O = [
36476
+ const __iconNode$R = [
36401
36477
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
36402
36478
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
36403
36479
  ["path", { d: "M12 12v6", key: "3ahymv" }],
36404
36480
  ["path", { d: "m15 15-3-3-3 3", key: "15xj92" }]
36405
36481
  ];
36406
- const FileUp = createLucideIcon("file-up", __iconNode$O);
36482
+ const FileUp = createLucideIcon("file-up", __iconNode$R);
36407
36483
  /**
36408
36484
  * @license lucide-react v0.507.0 - ISC
36409
36485
  *
36410
36486
  * This source code is licensed under the ISC license.
36411
36487
  * See the LICENSE file in the root directory of this source tree.
36412
36488
  */
36413
- const __iconNode$N = [
36489
+ const __iconNode$Q = [
36414
36490
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
36415
36491
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
36416
36492
  ["path", { d: "m10 11 5 3-5 3v-6Z", key: "7ntvm4" }]
36417
36493
  ];
36418
- const FileVideo = createLucideIcon("file-video", __iconNode$N);
36494
+ const FileVideo = createLucideIcon("file-video", __iconNode$Q);
36419
36495
  /**
36420
36496
  * @license lucide-react v0.507.0 - ISC
36421
36497
  *
36422
36498
  * This source code is licensed under the ISC license.
36423
36499
  * See the LICENSE file in the root directory of this source tree.
36424
36500
  */
36425
- const __iconNode$M = [
36501
+ const __iconNode$P = [
36426
36502
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
36427
36503
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }]
36428
36504
  ];
36429
- const File$1 = createLucideIcon("file", __iconNode$M);
36505
+ const File$1 = createLucideIcon("file", __iconNode$P);
36430
36506
  /**
36431
36507
  * @license lucide-react v0.507.0 - ISC
36432
36508
  *
36433
36509
  * This source code is licensed under the ISC license.
36434
36510
  * See the LICENSE file in the root directory of this source tree.
36435
36511
  */
36436
- const __iconNode$L = [
36512
+ const __iconNode$O = [
36437
36513
  [
36438
36514
  "path",
36439
36515
  {
@@ -36444,14 +36520,14 @@ const __iconNode$L = [
36444
36520
  ["path", { d: "M6.453 15h11.094", key: "3shlmq" }],
36445
36521
  ["path", { d: "M8.5 2h7", key: "csnxdl" }]
36446
36522
  ];
36447
- const FlaskConical = createLucideIcon("flask-conical", __iconNode$L);
36523
+ const FlaskConical = createLucideIcon("flask-conical", __iconNode$O);
36448
36524
  /**
36449
36525
  * @license lucide-react v0.507.0 - ISC
36450
36526
  *
36451
36527
  * This source code is licensed under the ISC license.
36452
36528
  * See the LICENSE file in the root directory of this source tree.
36453
36529
  */
36454
- const __iconNode$K = [
36530
+ const __iconNode$N = [
36455
36531
  [
36456
36532
  "path",
36457
36533
  {
@@ -36460,14 +36536,14 @@ const __iconNode$K = [
36460
36536
  }
36461
36537
  ]
36462
36538
  ];
36463
- const FolderOpen = createLucideIcon("folder-open", __iconNode$K);
36539
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$N);
36464
36540
  /**
36465
36541
  * @license lucide-react v0.507.0 - ISC
36466
36542
  *
36467
36543
  * This source code is licensed under the ISC license.
36468
36544
  * See the LICENSE file in the root directory of this source tree.
36469
36545
  */
36470
- const __iconNode$J = [
36546
+ const __iconNode$M = [
36471
36547
  [
36472
36548
  "path",
36473
36549
  {
@@ -36478,14 +36554,14 @@ const __iconNode$J = [
36478
36554
  ["path", { d: "M22 10v6", key: "1lu8f3" }],
36479
36555
  ["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }]
36480
36556
  ];
36481
- const GraduationCap = createLucideIcon("graduation-cap", __iconNode$J);
36557
+ const GraduationCap = createLucideIcon("graduation-cap", __iconNode$M);
36482
36558
  /**
36483
36559
  * @license lucide-react v0.507.0 - ISC
36484
36560
  *
36485
36561
  * This source code is licensed under the ISC license.
36486
36562
  * See the LICENSE file in the root directory of this source tree.
36487
36563
  */
36488
- const __iconNode$I = [
36564
+ const __iconNode$L = [
36489
36565
  [
36490
36566
  "path",
36491
36567
  {
@@ -36495,14 +36571,14 @@ const __iconNode$I = [
36495
36571
  ],
36496
36572
  ["path", { d: "M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27", key: "1uw2ng" }]
36497
36573
  ];
36498
- const HeartPulse = createLucideIcon("heart-pulse", __iconNode$I);
36574
+ const HeartPulse = createLucideIcon("heart-pulse", __iconNode$L);
36499
36575
  /**
36500
36576
  * @license lucide-react v0.507.0 - ISC
36501
36577
  *
36502
36578
  * This source code is licensed under the ISC license.
36503
36579
  * See the LICENSE file in the root directory of this source tree.
36504
36580
  */
36505
- const __iconNode$H = [
36581
+ const __iconNode$K = [
36506
36582
  [
36507
36583
  "path",
36508
36584
  {
@@ -36511,26 +36587,26 @@ const __iconNode$H = [
36511
36587
  }
36512
36588
  ]
36513
36589
  ];
36514
- const Heart = createLucideIcon("heart", __iconNode$H);
36590
+ const Heart = createLucideIcon("heart", __iconNode$K);
36515
36591
  /**
36516
36592
  * @license lucide-react v0.507.0 - ISC
36517
36593
  *
36518
36594
  * This source code is licensed under the ISC license.
36519
36595
  * See the LICENSE file in the root directory of this source tree.
36520
36596
  */
36521
- const __iconNode$G = [
36597
+ const __iconNode$J = [
36522
36598
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
36523
36599
  ["path", { d: "M3 3v5h5", key: "1xhq8a" }],
36524
36600
  ["path", { d: "M12 7v5l4 2", key: "1fdv2h" }]
36525
36601
  ];
36526
- const History = createLucideIcon("history", __iconNode$G);
36602
+ const History = createLucideIcon("history", __iconNode$J);
36527
36603
  /**
36528
36604
  * @license lucide-react v0.507.0 - ISC
36529
36605
  *
36530
36606
  * This source code is licensed under the ISC license.
36531
36607
  * See the LICENSE file in the root directory of this source tree.
36532
36608
  */
36533
- const __iconNode$F = [
36609
+ const __iconNode$I = [
36534
36610
  ["path", { d: "M12 3v12", key: "1x0j5s" }],
36535
36611
  ["path", { d: "m8 11 4 4 4-4", key: "1dohi6" }],
36536
36612
  [
@@ -36541,38 +36617,38 @@ const __iconNode$F = [
36541
36617
  }
36542
36618
  ]
36543
36619
  ];
36544
- const Import = createLucideIcon("import", __iconNode$F);
36620
+ const Import = createLucideIcon("import", __iconNode$I);
36545
36621
  /**
36546
36622
  * @license lucide-react v0.507.0 - ISC
36547
36623
  *
36548
36624
  * This source code is licensed under the ISC license.
36549
36625
  * See the LICENSE file in the root directory of this source tree.
36550
36626
  */
36551
- const __iconNode$E = [
36627
+ const __iconNode$H = [
36552
36628
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
36553
36629
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
36554
36630
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
36555
36631
  ];
36556
- const Info$1 = createLucideIcon("info", __iconNode$E);
36632
+ const Info$1 = createLucideIcon("info", __iconNode$H);
36557
36633
  /**
36558
36634
  * @license lucide-react v0.507.0 - ISC
36559
36635
  *
36560
36636
  * This source code is licensed under the ISC license.
36561
36637
  * See the LICENSE file in the root directory of this source tree.
36562
36638
  */
36563
- const __iconNode$D = [
36639
+ const __iconNode$G = [
36564
36640
  ["path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4", key: "g0fldk" }],
36565
36641
  ["path", { d: "m21 2-9.6 9.6", key: "1j0ho8" }],
36566
36642
  ["circle", { cx: "7.5", cy: "15.5", r: "5.5", key: "yqb3hr" }]
36567
36643
  ];
36568
- const Key = createLucideIcon("key", __iconNode$D);
36644
+ const Key = createLucideIcon("key", __iconNode$G);
36569
36645
  /**
36570
36646
  * @license lucide-react v0.507.0 - ISC
36571
36647
  *
36572
36648
  * This source code is licensed under the ISC license.
36573
36649
  * See the LICENSE file in the root directory of this source tree.
36574
36650
  */
36575
- const __iconNode$C = [
36651
+ const __iconNode$F = [
36576
36652
  [
36577
36653
  "path",
36578
36654
  {
@@ -36595,27 +36671,27 @@ const __iconNode$C = [
36595
36671
  }
36596
36672
  ]
36597
36673
  ];
36598
- const Layers = createLucideIcon("layers", __iconNode$C);
36674
+ const Layers = createLucideIcon("layers", __iconNode$F);
36599
36675
  /**
36600
36676
  * @license lucide-react v0.507.0 - ISC
36601
36677
  *
36602
36678
  * This source code is licensed under the ISC license.
36603
36679
  * See the LICENSE file in the root directory of this source tree.
36604
36680
  */
36605
- const __iconNode$B = [
36681
+ const __iconNode$E = [
36606
36682
  ["rect", { width: "7", height: "7", x: "3", y: "3", rx: "1", key: "1g98yp" }],
36607
36683
  ["rect", { width: "7", height: "7", x: "14", y: "3", rx: "1", key: "6d4xhi" }],
36608
36684
  ["rect", { width: "7", height: "7", x: "14", y: "14", rx: "1", key: "nxv5o0" }],
36609
36685
  ["rect", { width: "7", height: "7", x: "3", y: "14", rx: "1", key: "1bb6yr" }]
36610
36686
  ];
36611
- const LayoutGrid = createLucideIcon("layout-grid", __iconNode$B);
36687
+ const LayoutGrid = createLucideIcon("layout-grid", __iconNode$E);
36612
36688
  /**
36613
36689
  * @license lucide-react v0.507.0 - ISC
36614
36690
  *
36615
36691
  * This source code is licensed under the ISC license.
36616
36692
  * See the LICENSE file in the root directory of this source tree.
36617
36693
  */
36618
- const __iconNode$A = [
36694
+ const __iconNode$D = [
36619
36695
  [
36620
36696
  "path",
36621
36697
  {
@@ -36626,102 +36702,114 @@ const __iconNode$A = [
36626
36702
  ["path", { d: "M9 18h6", key: "x1upvd" }],
36627
36703
  ["path", { d: "M10 22h4", key: "ceow96" }]
36628
36704
  ];
36629
- const Lightbulb = createLucideIcon("lightbulb", __iconNode$A);
36705
+ const Lightbulb = createLucideIcon("lightbulb", __iconNode$D);
36630
36706
  /**
36631
36707
  * @license lucide-react v0.507.0 - ISC
36632
36708
  *
36633
36709
  * This source code is licensed under the ISC license.
36634
36710
  * See the LICENSE file in the root directory of this source tree.
36635
36711
  */
36636
- const __iconNode$z = [
36712
+ const __iconNode$C = [
36637
36713
  ["path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71", key: "1cjeqo" }],
36638
36714
  ["path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71", key: "19qd67" }]
36639
36715
  ];
36640
- const Link = createLucideIcon("link", __iconNode$z);
36716
+ const Link = createLucideIcon("link", __iconNode$C);
36641
36717
  /**
36642
36718
  * @license lucide-react v0.507.0 - ISC
36643
36719
  *
36644
36720
  * This source code is licensed under the ISC license.
36645
36721
  * See the LICENSE file in the root directory of this source tree.
36646
36722
  */
36647
- const __iconNode$y = [
36723
+ const __iconNode$B = [
36648
36724
  ["path", { d: "M21 12h-8", key: "1bmf0i" }],
36649
36725
  ["path", { d: "M21 6H8", key: "1pqkrb" }],
36650
36726
  ["path", { d: "M21 18h-8", key: "1tm79t" }],
36651
36727
  ["path", { d: "M3 6v4c0 1.1.9 2 2 2h3", key: "1ywdgy" }],
36652
36728
  ["path", { d: "M3 10v6c0 1.1.9 2 2 2h3", key: "2wc746" }]
36653
36729
  ];
36654
- const ListTree = createLucideIcon("list-tree", __iconNode$y);
36730
+ const ListTree = createLucideIcon("list-tree", __iconNode$B);
36655
36731
  /**
36656
36732
  * @license lucide-react v0.507.0 - ISC
36657
36733
  *
36658
36734
  * This source code is licensed under the ISC license.
36659
36735
  * See the LICENSE file in the root directory of this source tree.
36660
36736
  */
36661
- const __iconNode$x = [
36737
+ const __iconNode$A = [
36662
36738
  ["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7", key: "132q7q" }],
36663
36739
  ["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", key: "izxlao" }]
36664
36740
  ];
36665
- const Mail = createLucideIcon("mail", __iconNode$x);
36741
+ const Mail = createLucideIcon("mail", __iconNode$A);
36666
36742
  /**
36667
36743
  * @license lucide-react v0.507.0 - ISC
36668
36744
  *
36669
36745
  * This source code is licensed under the ISC license.
36670
36746
  * See the LICENSE file in the root directory of this source tree.
36671
36747
  */
36672
- const __iconNode$w = [
36748
+ const __iconNode$z = [
36673
36749
  ["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }],
36674
36750
  ["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }],
36675
36751
  ["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }],
36676
36752
  ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
36677
36753
  ];
36678
- const Maximize2 = createLucideIcon("maximize-2", __iconNode$w);
36754
+ const Maximize2 = createLucideIcon("maximize-2", __iconNode$z);
36679
36755
  /**
36680
36756
  * @license lucide-react v0.507.0 - ISC
36681
36757
  *
36682
36758
  * This source code is licensed under the ISC license.
36683
36759
  * See the LICENSE file in the root directory of this source tree.
36684
36760
  */
36685
- const __iconNode$v = [
36761
+ const __iconNode$y = [
36686
36762
  ["path", { d: "m3 11 18-5v12L3 14v-3z", key: "n962bs" }],
36687
36763
  ["path", { d: "M11.6 16.8a3 3 0 1 1-5.8-1.6", key: "1yl0tm" }]
36688
36764
  ];
36689
- const Megaphone = createLucideIcon("megaphone", __iconNode$v);
36765
+ const Megaphone = createLucideIcon("megaphone", __iconNode$y);
36690
36766
  /**
36691
36767
  * @license lucide-react v0.507.0 - ISC
36692
36768
  *
36693
36769
  * This source code is licensed under the ISC license.
36694
36770
  * See the LICENSE file in the root directory of this source tree.
36695
36771
  */
36696
- const __iconNode$u = [
36772
+ const __iconNode$x = [
36697
36773
  ["path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z", key: "vv11sd" }]
36698
36774
  ];
36699
- const MessageCircle = createLucideIcon("message-circle", __iconNode$u);
36775
+ const MessageCircle = createLucideIcon("message-circle", __iconNode$x);
36700
36776
  /**
36701
36777
  * @license lucide-react v0.507.0 - ISC
36702
36778
  *
36703
36779
  * This source code is licensed under the ISC license.
36704
36780
  * See the LICENSE file in the root directory of this source tree.
36705
36781
  */
36706
- const __iconNode$t = [
36782
+ const __iconNode$w = [
36707
36783
  ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }]
36708
36784
  ];
36709
- const MessageSquare = createLucideIcon("message-square", __iconNode$t);
36785
+ const MessageSquare = createLucideIcon("message-square", __iconNode$w);
36786
+ /**
36787
+ * @license lucide-react v0.507.0 - ISC
36788
+ *
36789
+ * This source code is licensed under the ISC license.
36790
+ * See the LICENSE file in the root directory of this source tree.
36791
+ */
36792
+ const __iconNode$v = [
36793
+ ["path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z", key: "131961" }],
36794
+ ["path", { d: "M19 10v2a7 7 0 0 1-14 0v-2", key: "1vc78b" }],
36795
+ ["line", { x1: "12", x2: "12", y1: "19", y2: "22", key: "x3vr5v" }]
36796
+ ];
36797
+ const Mic = createLucideIcon("mic", __iconNode$v);
36710
36798
  /**
36711
36799
  * @license lucide-react v0.507.0 - ISC
36712
36800
  *
36713
36801
  * This source code is licensed under the ISC license.
36714
36802
  * See the LICENSE file in the root directory of this source tree.
36715
36803
  */
36716
- const __iconNode$s = [["path", { d: "M5 12h14", key: "1ays0h" }]];
36717
- const Minus$1 = createLucideIcon("minus", __iconNode$s);
36804
+ const __iconNode$u = [["path", { d: "M5 12h14", key: "1ays0h" }]];
36805
+ const Minus$1 = createLucideIcon("minus", __iconNode$u);
36718
36806
  /**
36719
36807
  * @license lucide-react v0.507.0 - ISC
36720
36808
  *
36721
36809
  * This source code is licensed under the ISC license.
36722
36810
  * See the LICENSE file in the root directory of this source tree.
36723
36811
  */
36724
- const __iconNode$r = [
36812
+ const __iconNode$t = [
36725
36813
  ["path", { d: "M12 2v20", key: "t6zp3m" }],
36726
36814
  ["path", { d: "m15 19-3 3-3-3", key: "11eu04" }],
36727
36815
  ["path", { d: "m19 9 3 3-3 3", key: "1mg7y2" }],
@@ -36729,14 +36817,14 @@ const __iconNode$r = [
36729
36817
  ["path", { d: "m5 9-3 3 3 3", key: "j64kie" }],
36730
36818
  ["path", { d: "m9 5 3-3 3 3", key: "l8vdw6" }]
36731
36819
  ];
36732
- const Move = createLucideIcon("move", __iconNode$r);
36820
+ const Move = createLucideIcon("move", __iconNode$t);
36733
36821
  /**
36734
36822
  * @license lucide-react v0.507.0 - ISC
36735
36823
  *
36736
36824
  * This source code is licensed under the ISC license.
36737
36825
  * See the LICENSE file in the root directory of this source tree.
36738
36826
  */
36739
- const __iconNode$q = [
36827
+ const __iconNode$s = [
36740
36828
  ["path", { d: "m14.622 17.897-10.68-2.913", key: "vj2p1u" }],
36741
36829
  [
36742
36830
  "path",
@@ -36753,7 +36841,31 @@ const __iconNode$q = [
36753
36841
  }
36754
36842
  ]
36755
36843
  ];
36756
- const Paintbrush = createLucideIcon("paintbrush", __iconNode$q);
36844
+ const Paintbrush = createLucideIcon("paintbrush", __iconNode$s);
36845
+ /**
36846
+ * @license lucide-react v0.507.0 - ISC
36847
+ *
36848
+ * This source code is licensed under the ISC license.
36849
+ * See the LICENSE file in the root directory of this source tree.
36850
+ */
36851
+ const __iconNode$r = [
36852
+ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
36853
+ ["path", { d: "M15 3v18", key: "14nvp0" }],
36854
+ ["path", { d: "m8 9 3 3-3 3", key: "12hl5m" }]
36855
+ ];
36856
+ const PanelRightClose = createLucideIcon("panel-right-close", __iconNode$r);
36857
+ /**
36858
+ * @license lucide-react v0.507.0 - ISC
36859
+ *
36860
+ * This source code is licensed under the ISC license.
36861
+ * See the LICENSE file in the root directory of this source tree.
36862
+ */
36863
+ const __iconNode$q = [
36864
+ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
36865
+ ["path", { d: "M15 3v18", key: "14nvp0" }],
36866
+ ["path", { d: "m10 15-3-3 3-3", key: "1pgupc" }]
36867
+ ];
36868
+ const PanelRightOpen = createLucideIcon("panel-right-open", __iconNode$q);
36757
36869
  /**
36758
36870
  * @license lucide-react v0.507.0 - ISC
36759
36871
  *
@@ -37138,7 +37250,7 @@ const __iconNode = [
37138
37250
  ["line", { x1: "8", x2: "14", y1: "11", y2: "11", key: "durymu" }]
37139
37251
  ];
37140
37252
  const ZoomOut = createLucideIcon("zoom-out", __iconNode);
37141
- const StyledDialog$1 = styled$1(Dialog)(({ theme: theme2 }) => ({
37253
+ const StyledDialog$2 = styled$1(Dialog)(({ theme: theme2 }) => ({
37142
37254
  "& .MuiBackdrop-root": {
37143
37255
  backdropFilter: "blur(8px)",
37144
37256
  backgroundColor: alpha$1(theme2.palette.background.default, 0.7)
@@ -37214,7 +37326,7 @@ const BaseDialog = ({
37214
37326
  dataTourTag
37215
37327
  }) => {
37216
37328
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
37217
- StyledDialog$1,
37329
+ StyledDialog$2,
37218
37330
  {
37219
37331
  open: open2,
37220
37332
  onClose,
@@ -37636,11 +37748,36 @@ const DEFAULT_CHAT_SIDEBAR_WIDTH = 320;
37636
37748
  const useUiPreferencesStore = create$3()(
37637
37749
  persist(
37638
37750
  (set2) => ({
37751
+ isCommandPaletteOpen: false,
37752
+ commandPaletteQuery: "",
37639
37753
  isSidebarCollapsed: false,
37640
37754
  themeName: DEFAULT_THEME,
37641
37755
  canvasWidth: DEFAULT_CANVAS_WIDTH,
37642
37756
  chatSidebarWidth: DEFAULT_CHAT_SIDEBAR_WIDTH,
37643
37757
  isCanvasOpen: false,
37758
+ isCreateAgentDialogOpen: false,
37759
+ openCreateAgentDialog: () => {
37760
+ set2({ isCreateAgentDialogOpen: true });
37761
+ },
37762
+ closeCreateAgentDialog: () => {
37763
+ set2({ isCreateAgentDialogOpen: false });
37764
+ },
37765
+ openCommandPalette: () => {
37766
+ set2({ isCommandPaletteOpen: true });
37767
+ },
37768
+ closeCommandPalette: () => {
37769
+ set2({ isCommandPaletteOpen: false, commandPaletteQuery: "" });
37770
+ },
37771
+ toggleCommandPalette: () => {
37772
+ set2((state2) => ({
37773
+ isCommandPaletteOpen: !state2.isCommandPaletteOpen,
37774
+ commandPaletteQuery: !state2.isCommandPaletteOpen ? "" : state2.commandPaletteQuery
37775
+ // Clear query if opening, retain if closing (though it's cleared by closeCommandPalette)
37776
+ }));
37777
+ },
37778
+ setCommandPaletteQuery: (query) => {
37779
+ set2({ commandPaletteQuery: query });
37780
+ },
37644
37781
  toggleSidebar: () => {
37645
37782
  set2((state2) => ({
37646
37783
  isSidebarCollapsed: !state2.isSidebarCollapsed
@@ -67813,7 +67950,7 @@ const AgentsSidebar = ({
67813
67950
  }) => {
67814
67951
  const navigate = useNavigate();
67815
67952
  const [searchQuery, setSearchQuery2] = reactExports.useState("");
67816
- const [isCreateDialogOpen, setIsCreateDialogOpen] = reactExports.useState(false);
67953
+ const { openCreateAgentDialog } = useUiPreferencesStore();
67817
67954
  const [isImportDialogOpen, setIsImportDialogOpen] = reactExports.useState(false);
67818
67955
  const perPage = 50;
67819
67956
  const [isUploadDialogOpen, setIsUploadDialogOpen] = reactExports.useState(false);
@@ -67856,12 +67993,6 @@ const AgentsSidebar = ({
67856
67993
  },
67857
67994
  [onSelectAgent]
67858
67995
  );
67859
- const handleOpenCreateDialog = reactExports.useCallback(() => {
67860
- setIsCreateDialogOpen(true);
67861
- }, []);
67862
- const handleCloseCreateDialog = reactExports.useCallback(() => {
67863
- setIsCreateDialogOpen(false);
67864
- }, []);
67865
67996
  const handleOpenImportDialog = reactExports.useCallback(() => {
67866
67997
  setIsImportDialogOpen(true);
67867
67998
  }, []);
@@ -67985,7 +68116,7 @@ const AgentsSidebar = ({
67985
68116
  title: "Agents",
67986
68117
  searchQuery,
67987
68118
  onSearchChange: (query) => setSearchQuery2(query),
67988
- onNewAgentClick: handleOpenCreateDialog,
68119
+ onNewAgentClick: openCreateAgentDialog,
67989
68120
  onImportAgentClick: handleOpenImportDialog,
67990
68121
  importAgentTooltip: "Import an agent from a ZIP file"
67991
68122
  }
@@ -68023,14 +68154,6 @@ const AgentsSidebar = ({
68023
68154
  },
68024
68155
  agent.id
68025
68156
  )) }),
68026
- /* @__PURE__ */ jsxRuntimeExports.jsx(
68027
- CreateAgentDialog,
68028
- {
68029
- open: isCreateDialogOpen,
68030
- onClose: handleCloseCreateDialog,
68031
- onAgentCreated: handleAgentCreated
68032
- }
68033
- ),
68034
68157
  /* @__PURE__ */ jsxRuntimeExports.jsx(
68035
68158
  ImportAgentDialog,
68036
68159
  {
@@ -86932,7 +87055,7 @@ const languages = [
86932
87055
  name: "Go",
86933
87056
  extensions: ["go"],
86934
87057
  load() {
86935
- return __vitePreload(() => import("./index-DyCWQ6pn.js"), true ? __vite__mapDeps([0,1,2]) : void 0, import.meta.url).then((m2) => m2.go());
87058
+ return __vitePreload(() => import("./index-luCXlbKf.js"), true ? __vite__mapDeps([0,1,2]) : void 0, import.meta.url).then((m2) => m2.go());
86936
87059
  }
86937
87060
  }),
86938
87061
  /* @__PURE__ */ LanguageDescription.of({
@@ -87109,7 +87232,7 @@ const languages = [
87109
87232
  alias: ["yml"],
87110
87233
  extensions: ["yaml", "yml"],
87111
87234
  load() {
87112
- return __vitePreload(() => import("./index-BkfYRfhG.js"), true ? __vite__mapDeps([3,1,2]) : void 0, import.meta.url).then((m2) => m2.yaml());
87235
+ return __vitePreload(() => import("./index-Ckb5yety.js"), true ? __vite__mapDeps([3,1,2]) : void 0, import.meta.url).then((m2) => m2.yaml());
87113
87236
  }
87114
87237
  }),
87115
87238
  // Legacy modes ported from CodeMirror 5
@@ -169548,7 +169671,7 @@ var registerDefaultLayoutLoaders = /* @__PURE__ */ __name(() => {
169548
169671
  registerLayoutLoaders([
169549
169672
  {
169550
169673
  name: "dagre",
169551
- loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-OKDRZEBW-CuBbVbAE.js"), true ? __vite__mapDeps([6,7,8,9,10,11,1,2]) : void 0, import.meta.url), "loader")
169674
+ loader: /* @__PURE__ */ __name(async () => await __vitePreload(() => import("./dagre-OKDRZEBW-BvjVk-VL.js"), true ? __vite__mapDeps([6,7,8,9,10,11,1,2]) : void 0, import.meta.url), "loader")
169552
169675
  }
169553
169676
  ]);
169554
169677
  }, "registerDefaultLayoutLoaders");
@@ -170138,7 +170261,7 @@ var detector = /* @__PURE__ */ __name((txt) => {
170138
170261
  }, "detector");
170139
170262
  var loader = /* @__PURE__ */ __name(async () => {
170140
170263
  const { diagram: diagram2 } = await __vitePreload(async () => {
170141
- const { diagram: diagram22 } = await import("./c4Diagram-VJAJSXHY-DPAI5Oul.js");
170264
+ const { diagram: diagram22 } = await import("./c4Diagram-VJAJSXHY-CAD1cJIP.js");
170142
170265
  return { diagram: diagram22 };
170143
170266
  }, true ? __vite__mapDeps([12,13,1,2]) : void 0, import.meta.url);
170144
170267
  return { id, diagram: diagram2 };
@@ -170158,7 +170281,7 @@ var detector2 = /* @__PURE__ */ __name((txt, config2) => {
170158
170281
  }, "detector");
170159
170282
  var loader2 = /* @__PURE__ */ __name(async () => {
170160
170283
  const { diagram: diagram2 } = await __vitePreload(async () => {
170161
- const { diagram: diagram22 } = await import("./flowDiagram-4HSFHLVR-COKwAFv7.js");
170284
+ const { diagram: diagram22 } = await import("./flowDiagram-4HSFHLVR-CGYyv_WQ.js");
170162
170285
  return { diagram: diagram22 };
170163
170286
  }, true ? __vite__mapDeps([14,15,16,1,2]) : void 0, import.meta.url);
170164
170287
  return { id: id2, diagram: diagram2 };
@@ -170184,7 +170307,7 @@ var detector3 = /* @__PURE__ */ __name((txt, config2) => {
170184
170307
  }, "detector");
170185
170308
  var loader3 = /* @__PURE__ */ __name(async () => {
170186
170309
  const { diagram: diagram2 } = await __vitePreload(async () => {
170187
- const { diagram: diagram22 } = await import("./flowDiagram-4HSFHLVR-COKwAFv7.js");
170310
+ const { diagram: diagram22 } = await import("./flowDiagram-4HSFHLVR-CGYyv_WQ.js");
170188
170311
  return { diagram: diagram22 };
170189
170312
  }, true ? __vite__mapDeps([14,15,16,1,2]) : void 0, import.meta.url);
170190
170313
  return { id: id3, diagram: diagram2 };
@@ -170201,7 +170324,7 @@ var detector4 = /* @__PURE__ */ __name((txt) => {
170201
170324
  }, "detector");
170202
170325
  var loader4 = /* @__PURE__ */ __name(async () => {
170203
170326
  const { diagram: diagram2 } = await __vitePreload(async () => {
170204
- const { diagram: diagram22 } = await import("./erDiagram-Q7BY3M3F-hAtjkKRt.js");
170327
+ const { diagram: diagram22 } = await import("./erDiagram-Q7BY3M3F-BHceBobZ.js");
170205
170328
  return { diagram: diagram22 };
170206
170329
  }, true ? __vite__mapDeps([17,15,16,1,2]) : void 0, import.meta.url);
170207
170330
  return { id: id4, diagram: diagram2 };
@@ -170218,7 +170341,7 @@ var detector5 = /* @__PURE__ */ __name((txt) => {
170218
170341
  }, "detector");
170219
170342
  var loader5 = /* @__PURE__ */ __name(async () => {
170220
170343
  const { diagram: diagram2 } = await __vitePreload(async () => {
170221
- const { diagram: diagram22 } = await import("./gitGraphDiagram-7IBYFJ6S-CCkiOue7.js");
170344
+ const { diagram: diagram22 } = await import("./gitGraphDiagram-7IBYFJ6S-CSTRzS4J.js");
170222
170345
  return { diagram: diagram22 };
170223
170346
  }, true ? __vite__mapDeps([18,19,20,21,8,10,11,1,2]) : void 0, import.meta.url);
170224
170347
  return { id: id5, diagram: diagram2 };
@@ -170235,7 +170358,7 @@ var detector6 = /* @__PURE__ */ __name((txt) => {
170235
170358
  }, "detector");
170236
170359
  var loader6 = /* @__PURE__ */ __name(async () => {
170237
170360
  const { diagram: diagram2 } = await __vitePreload(async () => {
170238
- const { diagram: diagram22 } = await import("./ganttDiagram-APWFNJXF-DzqtejzU.js");
170361
+ const { diagram: diagram22 } = await import("./ganttDiagram-APWFNJXF-CQlU1hxI.js");
170239
170362
  return { diagram: diagram22 };
170240
170363
  }, true ? __vite__mapDeps([22,1,2]) : void 0, import.meta.url);
170241
170364
  return { id: id6, diagram: diagram2 };
@@ -170252,7 +170375,7 @@ var detector7 = /* @__PURE__ */ __name((txt) => {
170252
170375
  }, "detector");
170253
170376
  var loader7 = /* @__PURE__ */ __name(async () => {
170254
170377
  const { diagram: diagram2 } = await __vitePreload(async () => {
170255
- const { diagram: diagram22 } = await import("./infoDiagram-PH2N3AL5-D2pi_Avu.js");
170378
+ const { diagram: diagram22 } = await import("./infoDiagram-PH2N3AL5-D8GfR9L-.js");
170256
170379
  return { diagram: diagram22 };
170257
170380
  }, true ? __vite__mapDeps([23,21,8,10,11,1,2]) : void 0, import.meta.url);
170258
170381
  return { id: id7, diagram: diagram2 };
@@ -170268,7 +170391,7 @@ var detector8 = /* @__PURE__ */ __name((txt) => {
170268
170391
  }, "detector");
170269
170392
  var loader8 = /* @__PURE__ */ __name(async () => {
170270
170393
  const { diagram: diagram2 } = await __vitePreload(async () => {
170271
- const { diagram: diagram22 } = await import("./pieDiagram-IB7DONF6-CzpV9GLV.js");
170394
+ const { diagram: diagram22 } = await import("./pieDiagram-IB7DONF6-D7Kjesl8.js");
170272
170395
  return { diagram: diagram22 };
170273
170396
  }, true ? __vite__mapDeps([24,19,21,8,10,11,25,1,2]) : void 0, import.meta.url);
170274
170397
  return { id: id8, diagram: diagram2 };
@@ -170284,7 +170407,7 @@ var detector9 = /* @__PURE__ */ __name((txt) => {
170284
170407
  }, "detector");
170285
170408
  var loader9 = /* @__PURE__ */ __name(async () => {
170286
170409
  const { diagram: diagram2 } = await __vitePreload(async () => {
170287
- const { diagram: diagram22 } = await import("./quadrantDiagram-7GDLP6J5-TRIu05Kz.js");
170410
+ const { diagram: diagram22 } = await import("./quadrantDiagram-7GDLP6J5-CuEBETqd.js");
170288
170411
  return { diagram: diagram22 };
170289
170412
  }, true ? __vite__mapDeps([26,1,2]) : void 0, import.meta.url);
170290
170413
  return { id: id9, diagram: diagram2 };
@@ -170301,7 +170424,7 @@ var detector10 = /* @__PURE__ */ __name((txt) => {
170301
170424
  }, "detector");
170302
170425
  var loader10 = /* @__PURE__ */ __name(async () => {
170303
170426
  const { diagram: diagram2 } = await __vitePreload(async () => {
170304
- const { diagram: diagram22 } = await import("./xychartDiagram-VJFVF3MP-BWFbhKHp.js");
170427
+ const { diagram: diagram22 } = await import("./xychartDiagram-VJFVF3MP-Bg2SvRep.js");
170305
170428
  return { diagram: diagram22 };
170306
170429
  }, true ? __vite__mapDeps([27,1,2]) : void 0, import.meta.url);
170307
170430
  return { id: id10, diagram: diagram2 };
@@ -170318,7 +170441,7 @@ var detector11 = /* @__PURE__ */ __name((txt) => {
170318
170441
  }, "detector");
170319
170442
  var loader11 = /* @__PURE__ */ __name(async () => {
170320
170443
  const { diagram: diagram2 } = await __vitePreload(async () => {
170321
- const { diagram: diagram22 } = await import("./requirementDiagram-KVF5MWMF-DtZxlcxe.js");
170444
+ const { diagram: diagram22 } = await import("./requirementDiagram-KVF5MWMF-B2OB8-5B.js");
170322
170445
  return { diagram: diagram22 };
170323
170446
  }, true ? __vite__mapDeps([28,15,1,2]) : void 0, import.meta.url);
170324
170447
  return { id: id11, diagram: diagram2 };
@@ -170335,7 +170458,7 @@ var detector12 = /* @__PURE__ */ __name((txt) => {
170335
170458
  }, "detector");
170336
170459
  var loader12 = /* @__PURE__ */ __name(async () => {
170337
170460
  const { diagram: diagram2 } = await __vitePreload(async () => {
170338
- const { diagram: diagram22 } = await import("./sequenceDiagram-X6HHIX6F-DXZSfjCv.js");
170461
+ const { diagram: diagram22 } = await import("./sequenceDiagram-X6HHIX6F-CbmjJ1pE.js");
170339
170462
  return { diagram: diagram22 };
170340
170463
  }, true ? __vite__mapDeps([29,13,20,1,2]) : void 0, import.meta.url);
170341
170464
  return { id: id12, diagram: diagram2 };
@@ -170355,7 +170478,7 @@ var detector13 = /* @__PURE__ */ __name((txt, config2) => {
170355
170478
  }, "detector");
170356
170479
  var loader13 = /* @__PURE__ */ __name(async () => {
170357
170480
  const { diagram: diagram2 } = await __vitePreload(async () => {
170358
- const { diagram: diagram22 } = await import("./classDiagram-GIVACNV2-B-m9p15O.js");
170481
+ const { diagram: diagram22 } = await import("./classDiagram-GIVACNV2-nutPpuAF.js");
170359
170482
  return { diagram: diagram22 };
170360
170483
  }, true ? __vite__mapDeps([30,31,15,1,2]) : void 0, import.meta.url);
170361
170484
  return { id: id13, diagram: diagram2 };
@@ -170375,7 +170498,7 @@ var detector14 = /* @__PURE__ */ __name((txt, config2) => {
170375
170498
  }, "detector");
170376
170499
  var loader14 = /* @__PURE__ */ __name(async () => {
170377
170500
  const { diagram: diagram2 } = await __vitePreload(async () => {
170378
- const { diagram: diagram22 } = await import("./classDiagram-v2-COTLJTTW-B-m9p15O.js");
170501
+ const { diagram: diagram22 } = await import("./classDiagram-v2-COTLJTTW-nutPpuAF.js");
170379
170502
  return { diagram: diagram22 };
170380
170503
  }, true ? __vite__mapDeps([32,31,15,1,2]) : void 0, import.meta.url);
170381
170504
  return { id: id14, diagram: diagram2 };
@@ -170395,7 +170518,7 @@ var detector15 = /* @__PURE__ */ __name((txt, config2) => {
170395
170518
  }, "detector");
170396
170519
  var loader15 = /* @__PURE__ */ __name(async () => {
170397
170520
  const { diagram: diagram2 } = await __vitePreload(async () => {
170398
- const { diagram: diagram22 } = await import("./stateDiagram-DGXRK772-gJvvYfHT.js");
170521
+ const { diagram: diagram22 } = await import("./stateDiagram-DGXRK772-zxpsm9Bs.js");
170399
170522
  return { diagram: diagram22 };
170400
170523
  }, true ? __vite__mapDeps([33,34,15,7,8,9,10,1,2]) : void 0, import.meta.url);
170401
170524
  return { id: id15, diagram: diagram2 };
@@ -170418,7 +170541,7 @@ var detector16 = /* @__PURE__ */ __name((txt, config2) => {
170418
170541
  }, "detector");
170419
170542
  var loader16 = /* @__PURE__ */ __name(async () => {
170420
170543
  const { diagram: diagram2 } = await __vitePreload(async () => {
170421
- const { diagram: diagram22 } = await import("./stateDiagram-v2-YXO3MK2T-DUjC-b8t.js");
170544
+ const { diagram: diagram22 } = await import("./stateDiagram-v2-YXO3MK2T-DArpC2cJ.js");
170422
170545
  return { diagram: diagram22 };
170423
170546
  }, true ? __vite__mapDeps([35,34,15,1,2]) : void 0, import.meta.url);
170424
170547
  return { id: id16, diagram: diagram2 };
@@ -170435,7 +170558,7 @@ var detector17 = /* @__PURE__ */ __name((txt) => {
170435
170558
  }, "detector");
170436
170559
  var loader17 = /* @__PURE__ */ __name(async () => {
170437
170560
  const { diagram: diagram2 } = await __vitePreload(async () => {
170438
- const { diagram: diagram22 } = await import("./journeyDiagram-U35MCT3I-CYV7gt8_.js");
170561
+ const { diagram: diagram22 } = await import("./journeyDiagram-U35MCT3I-BP4duAhq.js");
170439
170562
  return { diagram: diagram22 };
170440
170563
  }, true ? __vite__mapDeps([36,13,25,1,2]) : void 0, import.meta.url);
170441
170564
  return { id: id17, diagram: diagram2 };
@@ -170505,7 +170628,7 @@ var detector18 = /* @__PURE__ */ __name((txt, config2 = {}) => {
170505
170628
  }, "detector");
170506
170629
  var loader18 = /* @__PURE__ */ __name(async () => {
170507
170630
  const { diagram: diagram2 } = await __vitePreload(async () => {
170508
- const { diagram: diagram22 } = await import("./flowDiagram-4HSFHLVR-COKwAFv7.js");
170631
+ const { diagram: diagram22 } = await import("./flowDiagram-4HSFHLVR-CGYyv_WQ.js");
170509
170632
  return { diagram: diagram22 };
170510
170633
  }, true ? __vite__mapDeps([14,15,16,1,2]) : void 0, import.meta.url);
170511
170634
  return { id: id18, diagram: diagram2 };
@@ -170522,7 +170645,7 @@ var detector19 = /* @__PURE__ */ __name((txt) => {
170522
170645
  }, "detector");
170523
170646
  var loader19 = /* @__PURE__ */ __name(async () => {
170524
170647
  const { diagram: diagram2 } = await __vitePreload(async () => {
170525
- const { diagram: diagram22 } = await import("./timeline-definition-BDJGKUSR-DpFxQaCe.js");
170648
+ const { diagram: diagram22 } = await import("./timeline-definition-BDJGKUSR-CSaG1Dv0.js");
170526
170649
  return { diagram: diagram22 };
170527
170650
  }, true ? __vite__mapDeps([37,25,1,2]) : void 0, import.meta.url);
170528
170651
  return { id: id19, diagram: diagram2 };
@@ -170539,7 +170662,7 @@ var detector20 = /* @__PURE__ */ __name((txt) => {
170539
170662
  }, "detector");
170540
170663
  var loader20 = /* @__PURE__ */ __name(async () => {
170541
170664
  const { diagram: diagram2 } = await __vitePreload(async () => {
170542
- const { diagram: diagram22 } = await import("./mindmap-definition-ALO5MXBD-ByeOpUXU.js");
170665
+ const { diagram: diagram22 } = await import("./mindmap-definition-ALO5MXBD-2COFVHJu.js");
170543
170666
  return { diagram: diagram22 };
170544
170667
  }, true ? __vite__mapDeps([38,39,1,2]) : void 0, import.meta.url);
170545
170668
  return { id: id20, diagram: diagram2 };
@@ -170556,7 +170679,7 @@ var detector21 = /* @__PURE__ */ __name((txt) => {
170556
170679
  }, "detector");
170557
170680
  var loader21 = /* @__PURE__ */ __name(async () => {
170558
170681
  const { diagram: diagram2 } = await __vitePreload(async () => {
170559
- const { diagram: diagram22 } = await import("./kanban-definition-NDS4AKOZ-z_jHtS3N.js");
170682
+ const { diagram: diagram22 } = await import("./kanban-definition-NDS4AKOZ-DuCd7BpW.js");
170560
170683
  return { diagram: diagram22 };
170561
170684
  }, true ? __vite__mapDeps([40,1,2]) : void 0, import.meta.url);
170562
170685
  return { id: id21, diagram: diagram2 };
@@ -170573,7 +170696,7 @@ var detector22 = /* @__PURE__ */ __name((txt) => {
170573
170696
  }, "detector");
170574
170697
  var loader22 = /* @__PURE__ */ __name(async () => {
170575
170698
  const { diagram: diagram2 } = await __vitePreload(async () => {
170576
- const { diagram: diagram22 } = await import("./sankeyDiagram-QLVOVGJD-CsDA2pgF.js");
170699
+ const { diagram: diagram22 } = await import("./sankeyDiagram-QLVOVGJD-6_bJ06DP.js");
170577
170700
  return { diagram: diagram22 };
170578
170701
  }, true ? __vite__mapDeps([41,1,2]) : void 0, import.meta.url);
170579
170702
  return { id: id22, diagram: diagram2 };
@@ -170590,7 +170713,7 @@ var detector23 = /* @__PURE__ */ __name((txt) => {
170590
170713
  }, "detector");
170591
170714
  var loader23 = /* @__PURE__ */ __name(async () => {
170592
170715
  const { diagram: diagram2 } = await __vitePreload(async () => {
170593
- const { diagram: diagram22 } = await import("./diagram-VNBRO52H-CptIzsnS.js");
170716
+ const { diagram: diagram22 } = await import("./diagram-VNBRO52H-iVluvYAy.js");
170594
170717
  return { diagram: diagram22 };
170595
170718
  }, true ? __vite__mapDeps([42,19,21,8,10,11,1,2]) : void 0, import.meta.url);
170596
170719
  return { id: id23, diagram: diagram2 };
@@ -170606,7 +170729,7 @@ var detector24 = /* @__PURE__ */ __name((txt) => {
170606
170729
  }, "detector");
170607
170730
  var loader24 = /* @__PURE__ */ __name(async () => {
170608
170731
  const { diagram: diagram2 } = await __vitePreload(async () => {
170609
- const { diagram: diagram22 } = await import("./diagram-SSKATNLV-Ddt-5-58.js");
170732
+ const { diagram: diagram22 } = await import("./diagram-SSKATNLV-BC3f615s.js");
170610
170733
  return { diagram: diagram22 };
170611
170734
  }, true ? __vite__mapDeps([43,19,21,8,10,11,1,2]) : void 0, import.meta.url);
170612
170735
  return { id: id24, diagram: diagram2 };
@@ -170622,7 +170745,7 @@ var detector25 = /* @__PURE__ */ __name((txt) => {
170622
170745
  }, "detector");
170623
170746
  var loader25 = /* @__PURE__ */ __name(async () => {
170624
170747
  const { diagram: diagram2 } = await __vitePreload(async () => {
170625
- const { diagram: diagram22 } = await import("./blockDiagram-JOT3LUYC-Ct7Hjgdp.js");
170748
+ const { diagram: diagram22 } = await import("./blockDiagram-JOT3LUYC-0CMD1kXE.js");
170626
170749
  return { diagram: diagram22 };
170627
170750
  }, true ? __vite__mapDeps([44,11,8,7,16,1,2]) : void 0, import.meta.url);
170628
170751
  return { id: id25, diagram: diagram2 };
@@ -170639,7 +170762,7 @@ var detector26 = /* @__PURE__ */ __name((txt) => {
170639
170762
  }, "detector");
170640
170763
  var loader26 = /* @__PURE__ */ __name(async () => {
170641
170764
  const { diagram: diagram2 } = await __vitePreload(async () => {
170642
- const { diagram: diagram22 } = await import("./architectureDiagram-IEHRJDOE-iZe3FGai.js");
170765
+ const { diagram: diagram22 } = await import("./architectureDiagram-IEHRJDOE-DTuFQLSd.js");
170643
170766
  return { diagram: diagram22 };
170644
170767
  }, true ? __vite__mapDeps([45,19,20,21,8,10,11,39,1,2]) : void 0, import.meta.url);
170645
170768
  return { id: id26, diagram: diagram2 };
@@ -174830,6 +174953,200 @@ const AttachmentsPreview = ({
174830
174953
  ) })
174831
174954
  ] }, `${index2}-${attachment}`)) });
174832
174955
  };
174956
+ const BUFFER_SIZE = 120;
174957
+ const MIN_BAR_HEIGHT = 2;
174958
+ const MAX_BAR_HEIGHT = 24;
174959
+ const FRAMES_TO_SKIP = 4;
174960
+ const createPulseAnimation = (primaryColor) => keyframes`
174961
+ 0% {
174962
+ transform: scale(0.95);
174963
+ box-shadow: 0 0 0 0 ${alpha$1(primaryColor, 0.7)};
174964
+ }
174965
+ 70% {
174966
+ transform: scale(1);
174967
+ box-shadow: 0 0 0 10px ${alpha$1(primaryColor, 0)};
174968
+ }
174969
+ 100% {
174970
+ transform: scale(0.95);
174971
+ box-shadow: 0 0 0 0 ${alpha$1(primaryColor, 0)};
174972
+ }
174973
+ `;
174974
+ const RecordingIndicatorContainer = styled$1(Box)(({ theme: theme2 }) => ({
174975
+ flex: 1,
174976
+ display: "flex",
174977
+ alignItems: "center",
174978
+ justifyContent: "center",
174979
+ minHeight: "50px",
174980
+ padding: theme2.spacing(1, 2),
174981
+ borderRadius: theme2.shape.borderRadius * 2,
174982
+ backgroundColor: alpha$1(theme2.palette.primary.main, 0.08),
174983
+ border: `1px solid ${alpha$1(theme2.palette.primary.main, 0.2)}`,
174984
+ color: theme2.palette.primary.main,
174985
+ gap: theme2.spacing(2)
174986
+ }));
174987
+ const RecordingText = styled$1(Typography)(({ theme: theme2 }) => ({
174988
+ fontSize: "0.9rem",
174989
+ fontWeight: 500,
174990
+ color: theme2.palette.primary.main
174991
+ }));
174992
+ const RecordingDot = styled$1(Box)(({ theme: theme2 }) => ({
174993
+ width: 8,
174994
+ height: 8,
174995
+ backgroundColor: theme2.palette.primary.main,
174996
+ borderRadius: "50%",
174997
+ animation: `${createPulseAnimation(theme2.palette.primary.main)} 1.5s infinite ease-in-out`,
174998
+ flexShrink: 0
174999
+ }));
175000
+ const WaveformCanvas = styled$1("canvas")(() => ({
175001
+ display: "block",
175002
+ width: "100%",
175003
+ height: `${MAX_BAR_HEIGHT}px`,
175004
+ flex: 1
175005
+ }));
175006
+ const AudioRecordingIndicator = ({
175007
+ isRecording
175008
+ }) => {
175009
+ const theme2 = useTheme$2();
175010
+ const canvasRef = reactExports.useRef(null);
175011
+ const animationFrameRef = reactExports.useRef();
175012
+ const mediaStreamRef = reactExports.useRef(null);
175013
+ const audioContextRef = reactExports.useRef(null);
175014
+ const analyserRef = reactExports.useRef(null);
175015
+ const dataArrayRef = reactExports.useRef(null);
175016
+ const heightsRef = reactExports.useRef(Array(BUFFER_SIZE).fill(MIN_BAR_HEIGHT));
175017
+ const frameCountRef = reactExports.useRef(0);
175018
+ reactExports.useEffect(() => {
175019
+ if (!isRecording) {
175020
+ return;
175021
+ }
175022
+ const canvas = canvasRef.current;
175023
+ if (!canvas) {
175024
+ return;
175025
+ }
175026
+ const ctx = canvas.getContext("2d");
175027
+ if (!ctx) {
175028
+ return;
175029
+ }
175030
+ const resizeCanvas = () => {
175031
+ const { width, height } = canvas.getBoundingClientRect();
175032
+ const dpr = window.devicePixelRatio || 1;
175033
+ canvas.width = width * dpr;
175034
+ canvas.height = height * dpr;
175035
+ ctx.scale(dpr, dpr);
175036
+ };
175037
+ resizeCanvas();
175038
+ window.addEventListener("resize", resizeCanvas);
175039
+ heightsRef.current = Array(BUFFER_SIZE).fill(MIN_BAR_HEIGHT);
175040
+ frameCountRef.current = 0;
175041
+ const drawWaveform = () => {
175042
+ const { width, height } = canvas.getBoundingClientRect();
175043
+ ctx.clearRect(0, 0, width, height);
175044
+ const barWidth = width / BUFFER_SIZE;
175045
+ const spacingRatio = 0.4;
175046
+ const barSpacing = barWidth * spacingRatio;
175047
+ const actualBarWidth = barWidth * (1 - spacingRatio);
175048
+ const radius = actualBarWidth / 2;
175049
+ heightsRef.current.forEach((h2, i2) => {
175050
+ const x2 = i2 * barWidth + barSpacing / 2;
175051
+ const centerY = height / 2;
175052
+ const barHeight = h2;
175053
+ const y2 = centerY - barHeight / 2;
175054
+ const isMinimalData = h2 <= MIN_BAR_HEIGHT;
175055
+ ctx.fillStyle = isMinimalData ? alpha$1(theme2.palette.primary.main, 0.3) : theme2.palette.primary.main;
175056
+ ctx.beginPath();
175057
+ ctx.roundRect(x2, y2, actualBarWidth, barHeight, radius);
175058
+ ctx.fill();
175059
+ });
175060
+ };
175061
+ const updateLoop = () => {
175062
+ if (analyserRef.current && dataArrayRef.current) {
175063
+ analyserRef.current.getByteFrequencyData(dataArrayRef.current);
175064
+ let sum = 0;
175065
+ const data2 = dataArrayRef.current;
175066
+ for (let i2 = 0; i2 < data2.length; i2++) {
175067
+ sum += data2[i2];
175068
+ }
175069
+ const avg = data2.length ? sum / data2.length : 0;
175070
+ const newHeight = Math.max(
175071
+ MIN_BAR_HEIGHT,
175072
+ avg / 255 * (MAX_BAR_HEIGHT - MIN_BAR_HEIGHT) + MIN_BAR_HEIGHT
175073
+ );
175074
+ frameCountRef.current += 1;
175075
+ if (frameCountRef.current > FRAMES_TO_SKIP) {
175076
+ heightsRef.current.shift();
175077
+ heightsRef.current.push(newHeight);
175078
+ frameCountRef.current = 0;
175079
+ drawWaveform();
175080
+ }
175081
+ }
175082
+ animationFrameRef.current = requestAnimationFrame(updateLoop);
175083
+ };
175084
+ (async () => {
175085
+ try {
175086
+ const stream = await navigator.mediaDevices.getUserMedia({
175087
+ audio: true
175088
+ });
175089
+ mediaStreamRef.current = stream;
175090
+ const AudioContextClass = window.AudioContext || window.webkitAudioContext;
175091
+ const audioCtx = new AudioContextClass();
175092
+ audioContextRef.current = audioCtx;
175093
+ const analyser = audioCtx.createAnalyser();
175094
+ analyser.fftSize = 64;
175095
+ analyser.smoothingTimeConstant = 0.6;
175096
+ analyserRef.current = analyser;
175097
+ const source = audioCtx.createMediaStreamSource(stream);
175098
+ source.connect(analyser);
175099
+ dataArrayRef.current = new Uint8Array(analyser.frequencyBinCount);
175100
+ updateLoop();
175101
+ } catch (error) {
175102
+ console.warn(
175103
+ "Could not access microphone for waveform visualization:",
175104
+ error
175105
+ );
175106
+ const randomLoop = () => {
175107
+ const randH = Math.max(
175108
+ MIN_BAR_HEIGHT,
175109
+ Math.random() * (MAX_BAR_HEIGHT - MIN_BAR_HEIGHT) + MIN_BAR_HEIGHT
175110
+ );
175111
+ frameCountRef.current += 1;
175112
+ if (frameCountRef.current > FRAMES_TO_SKIP) {
175113
+ heightsRef.current.shift();
175114
+ heightsRef.current.push(randH);
175115
+ frameCountRef.current = 0;
175116
+ drawWaveform();
175117
+ }
175118
+ animationFrameRef.current = requestAnimationFrame(randomLoop);
175119
+ };
175120
+ randomLoop();
175121
+ }
175122
+ })();
175123
+ return () => {
175124
+ window.removeEventListener("resize", resizeCanvas);
175125
+ if (animationFrameRef.current) {
175126
+ cancelAnimationFrame(animationFrameRef.current);
175127
+ }
175128
+ if (mediaStreamRef.current) {
175129
+ for (const track of mediaStreamRef.current.getTracks()) {
175130
+ track.stop();
175131
+ }
175132
+ mediaStreamRef.current = null;
175133
+ }
175134
+ if (audioContextRef.current && audioContextRef.current.state !== "closed") {
175135
+ audioContextRef.current.close().catch(console.error);
175136
+ audioContextRef.current = null;
175137
+ }
175138
+ };
175139
+ }, [isRecording, theme2.palette.primary.main]);
175140
+ if (!isRecording) {
175141
+ return null;
175142
+ }
175143
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(RecordingIndicatorContainer, { children: [
175144
+ /* @__PURE__ */ jsxRuntimeExports.jsx(RecordingDot, {}),
175145
+ /* @__PURE__ */ jsxRuntimeExports.jsx(RecordingText, { variant: "body2", children: "Recording" }),
175146
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformCanvas, { ref: canvasRef })
175147
+ ] });
175148
+ };
175149
+ AudioRecordingIndicator.displayName = "AudioRecordingIndicator";
174833
175150
  const MAX_RECENT_DIRECTORIES = 5;
174834
175151
  const useRecentDirectoriesStore = create$3()(
174835
175152
  persist(
@@ -175349,6 +175666,32 @@ const ScrollToBottomButton = ({
175349
175666
  }
175350
175667
  ) }) });
175351
175668
  };
175669
+ const waveformAnimation = keyframes`
175670
+ 0%, 100% { height: 2px; }
175671
+ 50% { height: 16px; }
175672
+ `;
175673
+ const WaveformContainer = styled$1(Box)(() => ({
175674
+ display: "flex",
175675
+ alignItems: "center",
175676
+ height: "24px",
175677
+ gap: "2px"
175678
+ }));
175679
+ const WaveformBar = styled$1(Box)(({ theme: theme2 }) => ({
175680
+ width: "3px",
175681
+ backgroundColor: theme2.palette.primary.main,
175682
+ animation: `${waveformAnimation} 1.2s infinite ease-in-out`,
175683
+ borderRadius: "1px"
175684
+ }));
175685
+ const WaveformAnimation = () => {
175686
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(WaveformContainer, { children: [
175687
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformBar, { sx: { animationDelay: "0s" } }),
175688
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformBar, { sx: { animationDelay: "0.2s", height: "8px" } }),
175689
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformBar, { sx: { animationDelay: "0.4s" } }),
175690
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformBar, { sx: { animationDelay: "0.6s", height: "12px" } }),
175691
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformBar, { sx: { animationDelay: "0.8s" } })
175692
+ ] });
175693
+ };
175694
+ WaveformAnimation.displayName = "WaveformAnimation";
175352
175695
  const InputOuterContainer = styled$1(Box)(({ theme: theme2 }) => ({
175353
175696
  width: "100%",
175354
175697
  flexGrow: 1,
@@ -175550,238 +175893,369 @@ const EmptyStateTitle = styled$1(Typography)(({ theme: theme2 }) => ({
175550
175893
  marginBottom: theme2.spacing(2)
175551
175894
  }
175552
175895
  }));
175553
- const MessageInput = ({
175554
- onSendMessage,
175555
- isLoading,
175556
- conversationId,
175557
- messages,
175558
- currentJobId,
175559
- onCancelJob,
175560
- isFarFromBottom = false,
175561
- scrollToBottom = () => {
175562
- },
175563
- initialSuggestions,
175564
- agentData
175565
- }) => {
175566
- const [attachments, setAttachments] = reactExports.useState([]);
175567
- const fileInputRef = reactExports.useRef(null);
175568
- const MAX_SUGGESTIONS = 7;
175569
- const suggestions = reactExports.useMemo(() => {
175570
- if (!initialSuggestions || initialSuggestions.length === 0) return [];
175571
- if (initialSuggestions.length <= MAX_SUGGESTIONS) {
175572
- return initialSuggestions;
175573
- }
175574
- const shuffled = [...initialSuggestions].sort(() => Math.random() - 0.5);
175575
- return shuffled.slice(0, MAX_SUGGESTIONS);
175576
- }, [initialSuggestions]);
175577
- const onSubmit = reactExports.useMemo(
175578
- () => (message2) => {
175579
- onSendMessage(message2, attachments);
175580
- setAttachments([]);
175581
- },
175582
- // attachments is a dependency, but this is safe because attachments is local state
175583
- // and onSendMessage is a prop (assumed stable)
175584
- [onSendMessage, attachments]
175585
- );
175586
- const {
175587
- inputValue: newMessage,
175588
- setInputValue: setNewMessage,
175589
- handleKeyDown,
175590
- handleSubmit: submitMessage,
175591
- textareaRef
175592
- } = useMessageInput({
175896
+ const TranscriptionIndicator = styled$1(Box)(({ theme: theme2 }) => ({
175897
+ flex: 1,
175898
+ display: "flex",
175899
+ alignItems: "center",
175900
+ justifyContent: "center",
175901
+ minHeight: "50px",
175902
+ padding: theme2.spacing(1, 2),
175903
+ borderRadius: theme2.shape.borderRadius,
175904
+ color: theme2.palette.primary.dark,
175905
+ gap: theme2.spacing(1)
175906
+ }));
175907
+ const TranscriptionText = styled$1(Typography)(({ theme: theme2 }) => ({
175908
+ fontSize: "0.9rem",
175909
+ fontWeight: 500,
175910
+ marginRight: theme2.spacing(1.5)
175911
+ }));
175912
+ const MessageInput = reactExports.forwardRef(
175913
+ ({
175914
+ onSendMessage,
175915
+ isLoading,
175593
175916
  conversationId,
175594
- onSubmit,
175595
- scrollToBottom
175596
- });
175597
- const handleSubmit = (e3) => {
175598
- e3.preventDefault();
175599
- if (!newMessage.trim() && attachments.length === 0) return;
175600
- submitMessage();
175601
- };
175602
- const handleFileSelect = (e3) => {
175603
- if (e3.target.files && e3.target.files.length > 0) {
175604
- const newAttachments = Array.from(e3.target.files).map((file) => {
175605
- const filePath = file.path;
175606
- if (filePath) {
175607
- return normalizePath(filePath);
175917
+ messages,
175918
+ currentJobId,
175919
+ onCancelJob,
175920
+ isFarFromBottom = false,
175921
+ scrollToBottom = () => {
175922
+ },
175923
+ initialSuggestions,
175924
+ agentData
175925
+ }, ref) => {
175926
+ const [attachments, setAttachments] = reactExports.useState([]);
175927
+ const [isRecording, setIsRecording] = reactExports.useState(false);
175928
+ const [audioBlob, setAudioBlob] = reactExports.useState(null);
175929
+ const [isTranscribing, setIsTranscribing] = reactExports.useState(false);
175930
+ const mediaRecorderRef = reactExports.useRef(null);
175931
+ const audioChunksRef = reactExports.useRef([]);
175932
+ const fileInputRef = reactExports.useRef(null);
175933
+ const MAX_SUGGESTIONS2 = 7;
175934
+ const suggestions = reactExports.useMemo(() => {
175935
+ if (!initialSuggestions || initialSuggestions.length === 0) return [];
175936
+ if (initialSuggestions.length <= MAX_SUGGESTIONS2) {
175937
+ return initialSuggestions;
175938
+ }
175939
+ const shuffled = [...initialSuggestions].sort(() => Math.random() - 0.5);
175940
+ return shuffled.slice(0, MAX_SUGGESTIONS2);
175941
+ }, [initialSuggestions]);
175942
+ const onSubmit = reactExports.useMemo(
175943
+ () => (message2) => {
175944
+ onSendMessage(message2, attachments);
175945
+ setAttachments([]);
175946
+ },
175947
+ [onSendMessage, attachments]
175948
+ );
175949
+ const {
175950
+ inputValue: newMessage,
175951
+ setInputValue: setNewMessage,
175952
+ handleKeyDown,
175953
+ handleSubmit: submitMessage,
175954
+ textareaRef
175955
+ } = useMessageInput({
175956
+ conversationId,
175957
+ onSubmit,
175958
+ scrollToBottom
175959
+ });
175960
+ reactExports.useImperativeHandle(ref, () => ({
175961
+ focusInput: () => {
175962
+ textareaRef.current?.focus();
175963
+ }
175964
+ }));
175965
+ const isInputDisabled = Boolean(isLoading && currentJobId);
175966
+ reactExports.useEffect(() => {
175967
+ if (!isInputDisabled && !isRecording && !isTranscribing) {
175968
+ const activeElement = document.activeElement;
175969
+ const isInputFocused = activeElement && (activeElement.tagName === "INPUT" || activeElement.tagName === "TEXTAREA");
175970
+ if (!isInputFocused) {
175971
+ textareaRef.current?.focus();
175608
175972
  }
175609
- return URL.createObjectURL(file);
175610
- });
175611
- setAttachments((prev2) => [...prev2, ...newAttachments]);
175612
- if (fileInputRef.current) {
175613
- fileInputRef.current.value = "";
175614
175973
  }
175615
- }
175616
- };
175617
- const handleRemoveAttachment = (index2) => {
175618
- setAttachments((prev2) => {
175619
- const newAttachments = [...prev2];
175620
- if (newAttachments[index2].startsWith("blob:")) {
175621
- URL.revokeObjectURL(newAttachments[index2]);
175974
+ }, [isInputDisabled, isRecording, isTranscribing, textareaRef]);
175975
+ const handleStartRecording = reactExports.useCallback(async () => {
175976
+ if (navigator?.mediaDevices?.getUserMedia) {
175977
+ try {
175978
+ const stream = await navigator.mediaDevices.getUserMedia({
175979
+ audio: true
175980
+ });
175981
+ mediaRecorderRef.current = new MediaRecorder(stream);
175982
+ audioChunksRef.current = [];
175983
+ mediaRecorderRef.current.ondataavailable = (event) => {
175984
+ audioChunksRef.current.push(event.data);
175985
+ };
175986
+ mediaRecorderRef.current.onstop = () => {
175987
+ const completeAudioBlob = new Blob(audioChunksRef.current, {
175988
+ type: "audio/webm"
175989
+ });
175990
+ setAudioBlob(completeAudioBlob);
175991
+ for (const track of stream.getTracks()) {
175992
+ track.stop();
175993
+ }
175994
+ };
175995
+ mediaRecorderRef.current.start();
175996
+ setIsRecording(true);
175997
+ setAudioBlob(null);
175998
+ } catch (err) {
175999
+ console.error("Error accessing microphone:", err);
176000
+ showErrorToast(
176001
+ "Error accessing microphone. Please ensure microphone permissions are granted."
176002
+ );
176003
+ }
176004
+ } else {
176005
+ console.error("getUserMedia not supported on your browser!");
176006
+ showErrorToast("Audio recording is not supported on your browser.");
175622
176007
  }
175623
- newAttachments.splice(index2, 1);
175624
- return newAttachments;
175625
- });
175626
- };
175627
- const triggerFileInput = () => {
175628
- fileInputRef.current?.click();
175629
- };
175630
- const handlePaste = (event) => {
175631
- const items = event.clipboardData?.items;
175632
- if (items) {
175633
- for (let i2 = 0; i2 < items.length; i2++) {
175634
- if (items[i2].type.indexOf("image") !== -1 || items[i2].kind === "file") {
175635
- const file = items[i2].getAsFile();
175636
- if (file) {
175637
- const reader = new FileReader();
175638
- reader.onload = (e3) => {
175639
- if (e3.target?.result) {
175640
- setAttachments((prev2) => [...prev2, e3.target?.result]);
175641
- }
175642
- };
175643
- reader.readAsDataURL(file);
176008
+ }, []);
176009
+ const handleStopRecording = reactExports.useCallback(() => {
176010
+ if (mediaRecorderRef.current && isRecording) {
176011
+ mediaRecorderRef.current.stop();
176012
+ setIsRecording(false);
176013
+ }
176014
+ }, [isRecording]);
176015
+ const handleSendAudio = reactExports.useCallback(async () => {
176016
+ if (!audioBlob) return;
176017
+ try {
176018
+ setIsTranscribing(true);
176019
+ const response = await TranscriptionApi.createTranscription(
176020
+ apiConfig.baseUrl,
176021
+ {
176022
+ file: new File([audioBlob], "recording.webm", {
176023
+ type: "audio/webm"
176024
+ })
175644
176025
  }
176026
+ );
176027
+ if (response.result?.text) {
176028
+ const newText = response.result?.text || "";
176029
+ setNewMessage(newMessage + newText);
175645
176030
  }
176031
+ setAudioBlob(null);
176032
+ } catch (error) {
176033
+ console.error("Error transcribing audio:", error);
176034
+ showErrorToast("Error transcribing audio. Please try again.");
176035
+ } finally {
176036
+ setIsTranscribing(false);
175646
176037
  }
175647
- }
175648
- };
175649
- const isInputDisabled = Boolean(isLoading && currentJobId);
175650
- const handleSuggestionClick = (suggestion) => {
175651
- if (isInputDisabled) return;
175652
- onSendMessage(suggestion, attachments);
175653
- setAttachments([]);
175654
- setNewMessage("");
175655
- };
175656
- const inputContent = /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, style: { width: "100%" }, children: [
175657
- /* @__PURE__ */ jsxRuntimeExports.jsxs(InputInnerContainer, { children: [
175658
- attachments.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
175659
- AttachmentsPreview,
175660
- {
175661
- attachments,
175662
- onRemoveAttachment: handleRemoveAttachment,
175663
- disabled: isInputDisabled
175664
- }
175665
- ),
175666
- /* @__PURE__ */ jsxRuntimeExports.jsx(
175667
- StyledTextField$2,
175668
- {
175669
- fullWidth: true,
175670
- placeholder: isInputDisabled ? "Agent is busy" : "Ask me for help",
175671
- value: newMessage,
175672
- onChange: (e3) => setNewMessage(e3.target.value),
175673
- onKeyDown: handleKeyDown,
175674
- onPaste: handlePaste,
175675
- multiline: true,
175676
- maxRows: 4,
175677
- variant: "outlined",
175678
- inputRef: textareaRef,
175679
- disabled: isInputDisabled,
175680
- inputProps: {
175681
- "data-tour-tag": "chat-input-textarea"
176038
+ }, [audioBlob, setNewMessage, newMessage]);
176039
+ reactExports.useEffect(() => {
176040
+ if (audioBlob) {
176041
+ handleSendAudio();
176042
+ }
176043
+ }, [audioBlob, handleSendAudio]);
176044
+ const handleSubmit = (e3) => {
176045
+ e3.preventDefault();
176046
+ if (!newMessage.trim() && attachments.length === 0) return;
176047
+ submitMessage();
176048
+ };
176049
+ const handleFileSelect = (e3) => {
176050
+ if (e3.target.files && e3.target.files.length > 0) {
176051
+ const newAttachments = Array.from(e3.target.files).map((file) => {
176052
+ const filePath = file.path;
176053
+ if (filePath) {
176054
+ return normalizePath(filePath);
175682
176055
  }
176056
+ return URL.createObjectURL(file);
176057
+ });
176058
+ setAttachments((prev2) => [...prev2, ...newAttachments]);
176059
+ if (fileInputRef.current) {
176060
+ fileInputRef.current.value = "";
175683
176061
  }
175684
- ),
175685
- /* @__PURE__ */ jsxRuntimeExports.jsxs(ButtonsRow, { children: [
175686
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { display: "flex", alignItems: "center", gap: 1, children: [
175687
- /* @__PURE__ */ jsxRuntimeExports.jsx(
175688
- "input",
175689
- {
175690
- type: "file",
175691
- ref: fileInputRef,
175692
- onChange: handleFileSelect,
175693
- style: { display: "none" },
175694
- disabled: isInputDisabled,
175695
- multiple: true
175696
- }
175697
- ),
175698
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip$1, { title: "Attach file", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
175699
- AttachmentButton,
175700
- {
175701
- onClick: triggerFileInput,
175702
- color: "primary",
175703
- size: "small",
175704
- "aria-label": "Attach file",
175705
- "data-tour-tag": "chat-input-attach-file-button",
175706
- disabled: isInputDisabled,
175707
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(FontAwesomeIcon, { icon: faPaperclip })
175708
- }
175709
- ) }) }),
175710
- conversationId && /* @__PURE__ */ jsxRuntimeExports.jsx(
175711
- DirectoryIndicator,
175712
- {
175713
- agentId: conversationId,
175714
- currentWorkingDirectory: agentData?.current_working_directory
175715
- }
175716
- )
175717
- ] }),
175718
- /* @__PURE__ */ jsxRuntimeExports.jsx(Box, { display: "flex", alignItems: "center", gap: 1, children: isLoading && currentJobId ? (
175719
- // @ts-ignore Tooltip type issue
175720
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip$1, { title: "Stop agent", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
175721
- SendButton,
175722
- {
175723
- type: "button",
175724
- variant: "contained",
175725
- color: "error",
175726
- onClick: () => onCancelJob?.(currentJobId),
175727
- "aria-label": "Stop agent",
175728
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(FontAwesomeIcon, { icon: faStop })
175729
- }
175730
- ) }) })
175731
- ) : (
175732
- // @ts-ignore Tooltip type issue
175733
- /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip$1, { title: "Send message", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
175734
- SendButton,
175735
- {
175736
- type: "submit",
175737
- variant: "contained",
175738
- color: "primary",
175739
- disabled: isLoading || !newMessage.trim() && attachments.length === 0,
175740
- "aria-label": "Send message",
175741
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(FontAwesomeIcon, { icon: faPaperPlane })
176062
+ }
176063
+ };
176064
+ const handleRemoveAttachment = (index2) => {
176065
+ setAttachments((prev2) => {
176066
+ const newAttachments = [...prev2];
176067
+ if (newAttachments[index2].startsWith("blob:")) {
176068
+ URL.revokeObjectURL(newAttachments[index2]);
176069
+ }
176070
+ newAttachments.splice(index2, 1);
176071
+ return newAttachments;
176072
+ });
176073
+ };
176074
+ const triggerFileInput = () => {
176075
+ fileInputRef.current?.click();
176076
+ };
176077
+ const handlePaste = (event) => {
176078
+ const items = event.clipboardData?.items;
176079
+ if (items) {
176080
+ for (let i2 = 0; i2 < items.length; i2++) {
176081
+ if (items[i2].type.indexOf("image") !== -1 || items[i2].kind === "file") {
176082
+ const file = items[i2].getAsFile();
176083
+ if (file) {
176084
+ const reader = new FileReader();
176085
+ reader.onload = (e3) => {
176086
+ if (e3.target?.result) {
176087
+ setAttachments((prev2) => [
176088
+ ...prev2,
176089
+ e3.target?.result
176090
+ ]);
176091
+ }
176092
+ };
176093
+ reader.readAsDataURL(file);
175742
176094
  }
175743
- ) }) })
175744
- ) })
175745
- ] })
175746
- ] }),
175747
- messages.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(SuggestionsContainer, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
175748
- Box,
175749
- {
175750
- sx: {
175751
- display: "flex",
175752
- flexWrap: "wrap",
175753
- gap: 1,
175754
- marginTop: 1.5,
175755
- justifyContent: "center"
175756
- },
175757
- children: suggestions.map((suggestion) => /* @__PURE__ */ jsxRuntimeExports.jsx(
175758
- SuggestionChip,
176095
+ }
176096
+ }
176097
+ }
176098
+ };
176099
+ const handleSuggestionClick = (suggestion) => {
176100
+ if (isInputDisabled) return;
176101
+ onSendMessage(suggestion, attachments);
176102
+ setAttachments([]);
176103
+ setNewMessage("");
176104
+ };
176105
+ const inputContent = /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, style: { width: "100%" }, children: [
176106
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(InputInnerContainer, { children: [
176107
+ attachments.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
176108
+ AttachmentsPreview,
175759
176109
  {
176110
+ attachments,
176111
+ onRemoveAttachment: handleRemoveAttachment,
176112
+ disabled: isInputDisabled || isRecording || isTranscribing
176113
+ }
176114
+ ),
176115
+ isRecording ? /* @__PURE__ */ jsxRuntimeExports.jsx(AudioRecordingIndicator, { isRecording }) : isTranscribing ? /* @__PURE__ */ jsxRuntimeExports.jsxs(TranscriptionIndicator, { children: [
176116
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TranscriptionText, { variant: "body2", children: "Processing audio..." }),
176117
+ /* @__PURE__ */ jsxRuntimeExports.jsx(WaveformAnimation, {})
176118
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
176119
+ StyledTextField$2,
176120
+ {
176121
+ fullWidth: true,
176122
+ placeholder: isInputDisabled ? "Agent is busy" : "Ask me for help",
176123
+ value: newMessage,
176124
+ onChange: (e3) => setNewMessage(e3.target.value),
176125
+ onKeyDown: handleKeyDown,
176126
+ onPaste: handlePaste,
176127
+ multiline: true,
176128
+ maxRows: 4,
175760
176129
  variant: "outlined",
175761
- size: "small",
175762
- onClick: () => handleSuggestionClick(suggestion),
176130
+ inputRef: textareaRef,
175763
176131
  disabled: isInputDisabled,
175764
- children: suggestion
176132
+ inputProps: {
176133
+ "data-tour-tag": "chat-input-textarea"
176134
+ }
176135
+ }
176136
+ ),
176137
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(ButtonsRow, { children: [
176138
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { display: "flex", alignItems: "center", gap: 1, children: [
176139
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
176140
+ "input",
176141
+ {
176142
+ type: "file",
176143
+ ref: fileInputRef,
176144
+ onChange: handleFileSelect,
176145
+ style: { display: "none" },
176146
+ disabled: isInputDisabled || isRecording || isTranscribing,
176147
+ multiple: true
176148
+ }
176149
+ ),
176150
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip$1, { title: "Attach file", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
176151
+ AttachmentButton,
176152
+ {
176153
+ onClick: triggerFileInput,
176154
+ color: "primary",
176155
+ size: "small",
176156
+ "aria-label": "Attach file",
176157
+ "data-tour-tag": "chat-input-attach-file-button",
176158
+ disabled: isInputDisabled || isRecording || isTranscribing,
176159
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(FontAwesomeIcon, { icon: faPaperclip })
176160
+ }
176161
+ ) }) }),
176162
+ conversationId && /* @__PURE__ */ jsxRuntimeExports.jsx(
176163
+ DirectoryIndicator,
176164
+ {
176165
+ agentId: conversationId,
176166
+ currentWorkingDirectory: agentData?.current_working_directory
176167
+ }
176168
+ )
176169
+ ] }),
176170
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Box, { display: "flex", alignItems: "center", gap: 1, children: [
176171
+ !isLoading && !currentJobId && !isTranscribing && // @ts-ignore Tooltip type issue
176172
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
176173
+ Tooltip$1,
176174
+ {
176175
+ title: isRecording ? "Stop recording" : "Start recording",
176176
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
176177
+ IconButton,
176178
+ {
176179
+ onClick: isRecording ? handleStopRecording : handleStartRecording,
176180
+ color: isRecording ? "error" : "primary",
176181
+ size: "small",
176182
+ "aria-label": isRecording ? "Stop recording" : "Start recording",
176183
+ disabled: isLoading,
176184
+ children: isRecording ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleStop, { size: 24 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Mic, { size: 24 })
176185
+ }
176186
+ ) })
176187
+ }
176188
+ ),
176189
+ isLoading && currentJobId ? (
176190
+ // @ts-ignore Tooltip type issue
176191
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip$1, { title: "Stop agent", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
176192
+ SendButton,
176193
+ {
176194
+ type: "button",
176195
+ variant: "contained",
176196
+ color: "error",
176197
+ onClick: () => onCancelJob?.(currentJobId),
176198
+ "aria-label": "Stop agent",
176199
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(FontAwesomeIcon, { icon: faStop })
176200
+ }
176201
+ ) }) })
176202
+ ) : (
176203
+ // @ts-ignore Tooltip type issue
176204
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip$1, { title: "Send message", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
176205
+ SendButton,
176206
+ {
176207
+ type: "submit",
176208
+ variant: "contained",
176209
+ color: "primary",
176210
+ disabled: isLoading || isRecording || isTranscribing || !newMessage.trim() && attachments.length === 0,
176211
+ "aria-label": "Send message",
176212
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(FontAwesomeIcon, { icon: faPaperPlane })
176213
+ }
176214
+ ) }) })
176215
+ )
176216
+ ] })
176217
+ ] })
176218
+ ] }),
176219
+ messages.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(SuggestionsContainer, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
176220
+ Box,
176221
+ {
176222
+ sx: {
176223
+ display: "flex",
176224
+ flexWrap: "wrap",
176225
+ gap: 1,
176226
+ marginTop: 1.5,
176227
+ justifyContent: "center"
175765
176228
  },
175766
- suggestion
175767
- ))
175768
- }
175769
- ) })
175770
- ] });
175771
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(InputOuterContainer, { children: [
175772
- messages.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsxs(EmptyStateContainer$2, { children: [
175773
- /* @__PURE__ */ jsxRuntimeExports.jsx(EmptyStateTitle, { variant: "h6", children: "What can I help you with today?" }),
175774
- inputContent
175775
- ] }) : inputContent,
175776
- /* @__PURE__ */ jsxRuntimeExports.jsx(
175777
- ScrollToBottomButton,
175778
- {
175779
- visible: isFarFromBottom,
175780
- onClick: scrollToBottom
175781
- }
175782
- )
175783
- ] });
175784
- };
176229
+ children: suggestions.map((suggestion) => /* @__PURE__ */ jsxRuntimeExports.jsx(
176230
+ SuggestionChip,
176231
+ {
176232
+ variant: "outlined",
176233
+ size: "small",
176234
+ onClick: () => handleSuggestionClick(suggestion),
176235
+ disabled: isInputDisabled || isRecording || isTranscribing,
176236
+ children: suggestion
176237
+ },
176238
+ suggestion
176239
+ ))
176240
+ }
176241
+ ) })
176242
+ ] });
176243
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(InputOuterContainer, { children: [
176244
+ messages.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsxs(EmptyStateContainer$2, { children: [
176245
+ /* @__PURE__ */ jsxRuntimeExports.jsx(EmptyStateTitle, { variant: "h6", children: "What can I help you with today?" }),
176246
+ inputContent
176247
+ ] }) : inputContent,
176248
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
176249
+ ScrollToBottomButton,
176250
+ {
176251
+ visible: isFarFromBottom,
176252
+ onClick: scrollToBottom
176253
+ }
176254
+ )
176255
+ ] });
176256
+ }
176257
+ );
176258
+ MessageInput.displayName = "MessageInput";
175785
176259
  const RingLoadingIndicator = ({
175786
176260
  size = 30
175787
176261
  }) => {
@@ -216216,7 +216690,8 @@ const ChatContent = ({
216216
216690
  currentJobId,
216217
216691
  onCancelJob,
216218
216692
  agentData,
216219
- refetch
216693
+ refetch,
216694
+ messageInputRef
216220
216695
  }) => {
216221
216696
  const canvasContainerRef = reactExports.useRef(null);
216222
216697
  const canvasPanelWidth = useUiPreferencesStore((s2) => s2.canvasWidth);
@@ -216288,6 +216763,7 @@ const ChatContent = ({
216288
216763
  !(isLoadingMessages && messages.length === 0) && /* @__PURE__ */ jsxRuntimeExports.jsx(
216289
216764
  MessageInput,
216290
216765
  {
216766
+ ref: messageInputRef,
216291
216767
  onSendMessage,
216292
216768
  initialSuggestions: DEFAULT_MESSAGE_SUGGESTIONS,
216293
216769
  isLoading,
@@ -216612,7 +217088,7 @@ const ChatSidebar = ({
216612
217088
  onNavigateToAgentSettings
216613
217089
  }) => {
216614
217090
  const [searchQuery, setSearchQuery2] = reactExports.useState("");
216615
- const [isCreateDialogOpen, setIsCreateDialogOpen] = reactExports.useState(false);
217091
+ const { openCreateAgentDialog } = useUiPreferencesStore();
216616
217092
  const [isImportDialogOpen, setIsImportDialogOpen] = reactExports.useState(false);
216617
217093
  const perPage = 50;
216618
217094
  const [isUploadDialogOpen, setIsUploadDialogOpen] = reactExports.useState(false);
@@ -216662,12 +217138,6 @@ const ChatSidebar = ({
216662
217138
  },
216663
217139
  [onSelectConversation]
216664
217140
  );
216665
- const handleOpenCreateDialog = reactExports.useCallback(() => {
216666
- setIsCreateDialogOpen(true);
216667
- }, []);
216668
- const handleCloseCreateDialog = reactExports.useCallback(() => {
216669
- setIsCreateDialogOpen(false);
216670
- }, []);
216671
217141
  const handleOpenImportDialog = reactExports.useCallback(() => {
216672
217142
  setIsImportDialogOpen(true);
216673
217143
  }, []);
@@ -216782,7 +217252,7 @@ const ChatSidebar = ({
216782
217252
  title: "Agents",
216783
217253
  searchQuery,
216784
217254
  onSearchChange: (query) => setSearchQuery2(query),
216785
- onNewAgentClick: handleOpenCreateDialog,
217255
+ onNewAgentClick: openCreateAgentDialog,
216786
217256
  onImportAgentClick: handleOpenImportDialog,
216787
217257
  importAgentTooltip: "Import an agent from a ZIP file"
216788
217258
  }
@@ -216824,14 +217294,6 @@ const ChatSidebar = ({
216824
217294
  },
216825
217295
  agent.id
216826
217296
  )) }),
216827
- /* @__PURE__ */ jsxRuntimeExports.jsx(
216828
- CreateAgentDialog,
216829
- {
216830
- open: isCreateDialogOpen,
216831
- onClose: handleCloseCreateDialog,
216832
- onAgentCreated: handleAgentCreated
216833
- }
216834
- ),
216835
217297
  /* @__PURE__ */ jsxRuntimeExports.jsx(
216836
217298
  ImportAgentDialog,
216837
217299
  {
@@ -216929,6 +217391,7 @@ const PlaceholderView = ({
216929
217391
  };
216930
217392
  const ChatPage = () => {
216931
217393
  const didAutoScrollRef = React$1.useRef(false);
217394
+ const messageInputRef = reactExports.useRef(null);
216932
217395
  const { agentId, navigateToAgent } = useAgentRouteParam();
216933
217396
  const navigate = useNavigate();
216934
217397
  const queryClient2 = useQueryClient();
@@ -216981,6 +217444,7 @@ const ChatPage = () => {
216981
217444
  const messagesEndRef = reactExports.useRef(null);
216982
217445
  reactExports.useEffect(() => {
216983
217446
  if (agentId) {
217447
+ const previousAgentId = previousConversationIdRef.current;
216984
217448
  setLastChatAgentId(agentId);
216985
217449
  if (!isLoadingMessages && messages.length > 0) {
216986
217450
  const prevMessages = getMessages(agentId);
@@ -216988,6 +217452,11 @@ const ChatPage = () => {
216988
217452
  scrollToBottom();
216989
217453
  }
216990
217454
  }
217455
+ if (previousAgentId && previousAgentId !== agentId) {
217456
+ Promise.resolve().then(() => {
217457
+ messageInputRef.current?.focusInput();
217458
+ });
217459
+ }
216991
217460
  }
216992
217461
  }, [
216993
217462
  agentId,
@@ -217008,10 +217477,13 @@ const ChatPage = () => {
217008
217477
  if (!didAutoScrollRef.current && agentId && !isLoadingMessages && messages.length > 0) {
217009
217478
  if (messagesContainerRef.current) {
217010
217479
  messagesContainerRef.current.scrollTop = 0;
217011
- didAutoScrollRef.current = true;
217012
217480
  }
217481
+ Promise.resolve().then(() => {
217482
+ messageInputRef.current?.focusInput();
217483
+ });
217484
+ didAutoScrollRef.current = true;
217013
217485
  }
217014
- }, [agentId, isLoadingMessages, messages.length]);
217486
+ }, [agentId, isLoadingMessages, messages.length, scrollToBottom]);
217015
217487
  const previousConversationIdRef = reactExports.useRef(void 0);
217016
217488
  reactExports.useEffect(() => {
217017
217489
  if (conversationId) {
@@ -217220,7 +217692,8 @@ Store messages: ${JSON.stringify(getMessages(conversationId || ""), null, 2)}`;
217220
217692
  currentJobId,
217221
217693
  onCancelJob: handleCancelJob,
217222
217694
  agentData,
217223
- refetch
217695
+ refetch,
217696
+ messageInputRef
217224
217697
  }
217225
217698
  );
217226
217699
  };
@@ -217239,6 +217712,689 @@ Store messages: ${JSON.stringify(getMessages(conversationId || ""), null, 2)}`;
217239
217712
  }
217240
217713
  );
217241
217714
  };
217715
+ const getIconElement = (section) => {
217716
+ if (section.isImage && typeof section.icon === "string") {
217717
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
217718
+ "img",
217719
+ {
217720
+ src: section.icon,
217721
+ alt: section.label,
217722
+ style: { width: 20, height: 20, objectFit: "contain" }
217723
+ }
217724
+ );
217725
+ }
217726
+ if (section.isFontAwesome) {
217727
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
217728
+ FontAwesomeIcon,
217729
+ {
217730
+ icon: section.icon,
217731
+ size: "lg",
217732
+ style: { width: 16, height: 16 }
217733
+ }
217734
+ );
217735
+ }
217736
+ const IconComponent = section.icon;
217737
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(IconComponent, { size: 16 });
217738
+ };
217739
+ const RadientIcon = "" + new URL("radient-icon-1024x1024-D_JJedvo.png", import.meta.url).href;
217740
+ const SidebarContainer$1 = styled$1(Paper)(({ theme: theme2 }) => ({
217741
+ width: "100%",
217742
+ height: "100%",
217743
+ borderRadius: 0,
217744
+ backgroundColor: theme2.palette.sidebar.secondaryBackground,
217745
+ boxShadow: "none",
217746
+ display: "flex",
217747
+ flexDirection: "column",
217748
+ overflow: "hidden",
217749
+ borderRight: `1px solid ${theme2.palette.sidebar.border}`
217750
+ }));
217751
+ const SidebarHeader = styled$1(Box)(({ theme: theme2 }) => ({
217752
+ padding: theme2.spacing(3),
217753
+ borderBottom: `1px solid ${theme2.palette.sidebar.border}`
217754
+ }));
217755
+ const SidebarTitle = styled$1(Typography)(({ theme: theme2 }) => ({
217756
+ fontWeight: 600,
217757
+ fontSize: "1rem",
217758
+ color: theme2.palette.text.primary
217759
+ }));
217760
+ const SidebarList = styled$1(List$1)(({ theme: theme2 }) => ({
217761
+ padding: theme2.spacing(2),
217762
+ flexGrow: 1
217763
+ }));
217764
+ const SidebarItemButton = styled$1(ListItemButton, {
217765
+ shouldForwardProp: (prop) => prop !== "isActive"
217766
+ })(({ theme: theme2, isActive }) => ({
217767
+ borderRadius: 8,
217768
+ marginBottom: 4,
217769
+ paddingTop: 10,
217770
+ paddingBottom: 10,
217771
+ color: isActive ? theme2.palette.sidebar.itemActiveText : theme2.palette.sidebar.itemText,
217772
+ backgroundColor: isActive ? theme2.palette.sidebar.itemActive : "transparent",
217773
+ transition: "all 0.2s ease-out",
217774
+ position: "relative",
217775
+ overflow: "hidden",
217776
+ "&:hover": {
217777
+ backgroundColor: isActive ? theme2.palette.sidebar.itemActiveHover : theme2.palette.sidebar.itemHover,
217778
+ transform: "translateX(4px)"
217779
+ },
217780
+ ...isActive && {
217781
+ "&::before": {
217782
+ content: '""',
217783
+ position: "absolute",
217784
+ left: 0,
217785
+ top: "50%",
217786
+ transform: "translateY(-50%)",
217787
+ width: 4,
217788
+ height: "60%",
217789
+ backgroundColor: theme2.palette.sidebar.itemActiveText,
217790
+ borderRadius: "0 4px 4px 0"
217791
+ }
217792
+ }
217793
+ }));
217794
+ const SidebarItemIcon = styled$1(ListItemIcon, {
217795
+ shouldForwardProp: (prop) => prop !== "isActive"
217796
+ })(({ theme: theme2, isActive }) => ({
217797
+ minWidth: 40,
217798
+ color: isActive ? theme2.palette.sidebar.itemActiveText : theme2.palette.icon.text,
217799
+ transition: "transform 0.2s ease, color 0.2s ease",
217800
+ ...isActive && {
217801
+ transform: "scale(1.1)"
217802
+ }
217803
+ }));
217804
+ const IconImage$2 = styled$1("img")(() => ({
217805
+ width: 30,
217806
+ height: 30,
217807
+ marginLeft: -4,
217808
+ objectFit: "contain"
217809
+ }));
217810
+ const SettingsSidebar = ({
217811
+ activeSection,
217812
+ onSelectSection,
217813
+ sections
217814
+ }) => {
217815
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(SidebarContainer$1, { elevation: 0, children: [
217816
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarTitle, { variant: "subtitle1", children: "Settings Navigation" }) }),
217817
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarList, { children: sections.map((section) => {
217818
+ let tourTag;
217819
+ switch (section.id) {
217820
+ case "general":
217821
+ tourTag = "settings-sidebar-general";
217822
+ break;
217823
+ case "radient":
217824
+ tourTag = "settings-sidebar-radient-account";
217825
+ break;
217826
+ case "integrations":
217827
+ tourTag = "settings-sidebar-integrations";
217828
+ break;
217829
+ case "appearance":
217830
+ tourTag = "settings-sidebar-appearance";
217831
+ break;
217832
+ case "credentials":
217833
+ tourTag = "settings-sidebar-api-credentials";
217834
+ break;
217835
+ case "updates":
217836
+ tourTag = "settings-sidebar-application-updates";
217837
+ break;
217838
+ default:
217839
+ tourTag = void 0;
217840
+ }
217841
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
217842
+ SidebarItemButton,
217843
+ {
217844
+ isActive: activeSection === section.id,
217845
+ onClick: () => onSelectSection(section.id),
217846
+ "data-tour-tag": tourTag,
217847
+ children: [
217848
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarItemIcon, { isActive: activeSection === section.id, children: section.isImage ? /* @__PURE__ */ jsxRuntimeExports.jsx(IconImage$2, { src: section.icon, alt: section.label }) : section.isFontAwesome ? /* @__PURE__ */ jsxRuntimeExports.jsx(
217849
+ FontAwesomeIcon,
217850
+ {
217851
+ icon: section.icon,
217852
+ style: { fontSize: 20 }
217853
+ }
217854
+ ) : (() => {
217855
+ const IconComponent = section.icon;
217856
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(IconComponent, { size: 22, strokeWidth: 2.1 });
217857
+ })() }),
217858
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
217859
+ ListItemText,
217860
+ {
217861
+ primary: section.label,
217862
+ primaryTypographyProps: {
217863
+ fontWeight: activeSection === section.id ? 600 : 500,
217864
+ fontSize: "0.95rem"
217865
+ }
217866
+ }
217867
+ )
217868
+ ]
217869
+ },
217870
+ section.id
217871
+ );
217872
+ }) })
217873
+ ] });
217874
+ };
217875
+ const DEFAULT_SETTINGS_SECTIONS = [
217876
+ {
217877
+ id: "general",
217878
+ label: "General Settings",
217879
+ icon: Settings$1
217880
+ },
217881
+ {
217882
+ id: "radient",
217883
+ label: "Radient Account",
217884
+ icon: RadientIcon,
217885
+ isImage: true
217886
+ },
217887
+ {
217888
+ id: "integrations",
217889
+ label: "Integrations",
217890
+ icon: Puzzle
217891
+ },
217892
+ {
217893
+ id: "appearance",
217894
+ label: "Appearance",
217895
+ icon: Paintbrush
217896
+ },
217897
+ {
217898
+ id: "credentials",
217899
+ label: "API Credentials",
217900
+ icon: Key
217901
+ },
217902
+ {
217903
+ id: "updates",
217904
+ label: "Application Updates",
217905
+ icon: Download
217906
+ }
217907
+ ];
217908
+ function useDebounce(value, delay) {
217909
+ const [debouncedValue, setDebouncedValue] = reactExports.useState(value);
217910
+ reactExports.useEffect(() => {
217911
+ const handler = setTimeout(() => {
217912
+ setDebouncedValue(value);
217913
+ }, delay);
217914
+ return () => {
217915
+ clearTimeout(handler);
217916
+ };
217917
+ }, [value, delay]);
217918
+ return debouncedValue;
217919
+ }
217920
+ const StyledDialog$1 = styled$1(Dialog)(({ theme: theme2 }) => ({
217921
+ "& .MuiDialog-paper": {
217922
+ width: "600px",
217923
+ maxWidth: "90vw",
217924
+ borderRadius: theme2.shape.borderRadius * 2,
217925
+ backgroundColor: theme2.palette.background.default,
217926
+ backgroundImage: "none",
217927
+ boxShadow: theme2.shadows[8],
217928
+ border: `1px solid ${theme2.palette.divider}`
217929
+ }
217930
+ }));
217931
+ const SearchInputContainer = styled$1("div")(({ theme: theme2 }) => ({
217932
+ padding: theme2.spacing(2, 3),
217933
+ borderBottom: `1px solid ${theme2.palette.divider}`
217934
+ }));
217935
+ const ResultsListContainer = styled$1(List$1)(({ theme: theme2 }) => ({
217936
+ maxHeight: "400px",
217937
+ overflowY: "auto",
217938
+ padding: 0,
217939
+ // Custom scrollbar styles
217940
+ "&::-webkit-scrollbar": {
217941
+ width: "8px"
217942
+ },
217943
+ "&::-webkit-scrollbar-track": {
217944
+ background: "transparent"
217945
+ },
217946
+ "&::-webkit-scrollbar-thumb": {
217947
+ background: theme2.palette.mode === "dark" ? "rgba(255, 255, 255, 0.2)" : "rgba(0, 0, 0, 0.2)",
217948
+ borderRadius: "4px",
217949
+ "&:hover": {
217950
+ background: theme2.palette.mode === "dark" ? "rgba(255, 255, 255, 0.3)" : "rgba(0, 0, 0, 0.3)"
217951
+ }
217952
+ },
217953
+ // Firefox scrollbar styles
217954
+ scrollbarWidth: "thin",
217955
+ scrollbarColor: theme2.palette.mode === "dark" ? "rgba(255, 255, 255, 0.2) transparent" : "rgba(0, 0, 0, 0.2) transparent"
217956
+ }));
217957
+ const ResultItemStyled = styled$1(ListItemButton)(({ theme: theme2 }) => ({
217958
+ padding: theme2.spacing(0.5, 2),
217959
+ borderRadius: 8,
217960
+ "&:hover": {
217961
+ backgroundColor: theme2.palette.action.hover
217962
+ }
217963
+ }));
217964
+ const ActionChip = styled$1(Chip)(() => ({
217965
+ fontSize: "0.7rem",
217966
+ height: "20px",
217967
+ marginLeft: "auto"
217968
+ }));
217969
+ const PAGE_DEFINITIONS = [
217970
+ {
217971
+ name: "Chat",
217972
+ path: "/chat",
217973
+ category: "Navigation",
217974
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageSquare, { size: 16 })
217975
+ },
217976
+ {
217977
+ name: "My Agents",
217978
+ path: "/agents",
217979
+ category: "Navigation",
217980
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Users, { size: 16 })
217981
+ },
217982
+ {
217983
+ name: "Agent Hub",
217984
+ path: "/agent-hub",
217985
+ category: "Navigation",
217986
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Store, { size: 16 })
217987
+ },
217988
+ {
217989
+ name: "Schedules",
217990
+ path: "/schedules",
217991
+ category: "Navigation",
217992
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { size: 16 })
217993
+ },
217994
+ {
217995
+ name: "Settings",
217996
+ path: "/settings",
217997
+ category: "Navigation",
217998
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Settings$1, { size: 16 })
217999
+ }
218000
+ ];
218001
+ const MAX_SUGGESTIONS = 15;
218002
+ const getActionLabel = (type2) => {
218003
+ switch (type2) {
218004
+ case "page":
218005
+ return "Navigate";
218006
+ case "agent-chat":
218007
+ return "Chat";
218008
+ case "agent-settings":
218009
+ return "Configure";
218010
+ case "settings-section":
218011
+ return "Configure";
218012
+ case "create-agent":
218013
+ return "Create";
218014
+ case "clear-conversation":
218015
+ return "Clear";
218016
+ case "toggle-canvas":
218017
+ return "Toggle";
218018
+ default:
218019
+ return "Open";
218020
+ }
218021
+ };
218022
+ const getActionColor = (type2) => {
218023
+ switch (type2) {
218024
+ case "page":
218025
+ return "primary";
218026
+ case "agent-chat":
218027
+ return "success";
218028
+ case "agent-settings":
218029
+ return "warning";
218030
+ case "settings-section":
218031
+ return "info";
218032
+ case "create-agent":
218033
+ return "success";
218034
+ case "clear-conversation":
218035
+ return "error";
218036
+ case "toggle-canvas":
218037
+ return "secondary";
218038
+ default:
218039
+ return "default";
218040
+ }
218041
+ };
218042
+ const CommandPalette = () => {
218043
+ const navigate = useNavigate();
218044
+ const location2 = useLocation();
218045
+ const {
218046
+ isCommandPaletteOpen,
218047
+ closeCommandPalette,
218048
+ commandPaletteQuery,
218049
+ setCommandPaletteQuery,
218050
+ isCanvasOpen,
218051
+ setCanvasOpen,
218052
+ isCreateAgentDialogOpen,
218053
+ // Use global state
218054
+ openCreateAgentDialog,
218055
+ // Use global action
218056
+ closeCreateAgentDialog
218057
+ // Use global action
218058
+ } = useUiPreferencesStore();
218059
+ const { agentId: currentAgentIdFromRoute } = useAgentRouteParam();
218060
+ const { getLastAgentId } = useAgentSelectionStore();
218061
+ const { data: agentsData } = useAgents(1, 20);
218062
+ const theme2 = useTheme$2();
218063
+ const clearConversationMutation = useClearAgentConversation();
218064
+ const [selectedIndex, setSelectedIndex] = reactExports.useState(0);
218065
+ const [localQuery, setLocalQuery] = reactExports.useState(commandPaletteQuery);
218066
+ const debouncedLocalQuery = useDebounce(localQuery, 200);
218067
+ const [isClearConfirmationOpen, setIsClearConfirmationOpen] = reactExports.useState(false);
218068
+ const effectiveAgentId = currentAgentIdFromRoute || getLastAgentId("chat");
218069
+ const isOnChatPage = location2.pathname.startsWith("/chat");
218070
+ reactExports.useEffect(() => {
218071
+ setCommandPaletteQuery(debouncedLocalQuery);
218072
+ }, [debouncedLocalQuery, setCommandPaletteQuery]);
218073
+ reactExports.useEffect(() => {
218074
+ if (isCommandPaletteOpen) {
218075
+ setLocalQuery(commandPaletteQuery);
218076
+ }
218077
+ }, [isCommandPaletteOpen, commandPaletteQuery]);
218078
+ const handleQueryChange = reactExports.useCallback(
218079
+ (event) => {
218080
+ setLocalQuery(event.target.value);
218081
+ },
218082
+ []
218083
+ );
218084
+ const handleClearSearch = reactExports.useCallback(() => {
218085
+ setLocalQuery("");
218086
+ }, []);
218087
+ const inputPropsStyle = reactExports.useMemo(() => ({ fontSize: "1rem" }), []);
218088
+ const startAdornment = reactExports.useMemo(
218089
+ () => /* @__PURE__ */ jsxRuntimeExports.jsx(InputAdornment, { position: "start", sx: { width: "28px" }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { size: 16, color: theme2.palette.action.active }) }),
218090
+ [theme2.palette.action.active]
218091
+ );
218092
+ const endAdornment = reactExports.useMemo(
218093
+ () => localQuery ? /* @__PURE__ */ jsxRuntimeExports.jsx(InputAdornment, { position: "end", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
218094
+ IconButton,
218095
+ {
218096
+ "aria-label": "clear search",
218097
+ onClick: handleClearSearch,
218098
+ edge: "end",
218099
+ size: "small",
218100
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$2, { size: 16 })
218101
+ }
218102
+ ) }) : null,
218103
+ [localQuery, handleClearSearch]
218104
+ );
218105
+ const textFieldInputProps = reactExports.useMemo(
218106
+ () => ({
218107
+ startAdornment,
218108
+ endAdornment,
218109
+ disableUnderline: true,
218110
+ style: inputPropsStyle
218111
+ }),
218112
+ [startAdornment, endAdornment, inputPropsStyle]
218113
+ );
218114
+ const pages = reactExports.useMemo(() => {
218115
+ return PAGE_DEFINITIONS.map((p2, i2) => ({
218116
+ ...p2,
218117
+ id: `page-${i2}`,
218118
+ type: "page"
218119
+ }));
218120
+ }, []);
218121
+ const settingsSectionItems = reactExports.useMemo(() => {
218122
+ return DEFAULT_SETTINGS_SECTIONS.map((section) => ({
218123
+ id: `settings-section-${section.id}`,
218124
+ type: "settings-section",
218125
+ name: section.label,
218126
+ category: "Settings Section",
218127
+ path: `/settings?section=${section.id}`,
218128
+ icon: getIconElement(section)
218129
+ }));
218130
+ }, []);
218131
+ const handleCreateAgent = reactExports.useCallback(() => {
218132
+ closeCommandPalette();
218133
+ openCreateAgentDialog();
218134
+ }, [closeCommandPalette, openCreateAgentDialog]);
218135
+ const handleClearConversation = reactExports.useCallback(() => {
218136
+ if (effectiveAgentId) {
218137
+ setIsClearConfirmationOpen(true);
218138
+ }
218139
+ }, [effectiveAgentId]);
218140
+ const confirmActualClearConversation = reactExports.useCallback(() => {
218141
+ if (effectiveAgentId) {
218142
+ clearConversationMutation.mutate({ agentId: effectiveAgentId });
218143
+ }
218144
+ setIsClearConfirmationOpen(false);
218145
+ closeCommandPalette();
218146
+ }, [effectiveAgentId, clearConversationMutation, closeCommandPalette]);
218147
+ const cancelClearConversation = reactExports.useCallback(() => {
218148
+ setIsClearConfirmationOpen(false);
218149
+ }, []);
218150
+ const handleToggleCanvas = reactExports.useCallback(() => {
218151
+ setCanvasOpen(!isCanvasOpen);
218152
+ closeCommandPalette();
218153
+ }, [isCanvasOpen, setCanvasOpen, closeCommandPalette]);
218154
+ const handleAgentCreated = reactExports.useCallback(
218155
+ (agentId) => {
218156
+ navigate(`/chat/${agentId}`);
218157
+ closeCreateAgentDialog();
218158
+ },
218159
+ [navigate, closeCreateAgentDialog]
218160
+ );
218161
+ const actionItems = reactExports.useMemo(() => {
218162
+ const items = [];
218163
+ items.push({
218164
+ id: "create-agent",
218165
+ type: "create-agent",
218166
+ name: "Create Agent",
218167
+ category: "Actions",
218168
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus$1, { size: 16 }),
218169
+ action: handleCreateAgent
218170
+ });
218171
+ if (isOnChatPage && effectiveAgentId) {
218172
+ items.push({
218173
+ id: "clear-conversation",
218174
+ type: "clear-conversation",
218175
+ name: "Clear Conversation",
218176
+ category: "Actions",
218177
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { size: 16 }),
218178
+ action: handleClearConversation
218179
+ });
218180
+ }
218181
+ if (isOnChatPage) {
218182
+ items.push({
218183
+ id: "toggle-canvas",
218184
+ type: "toggle-canvas",
218185
+ name: isCanvasOpen ? "Close Canvas" : "Open Canvas",
218186
+ category: "Actions",
218187
+ icon: isCanvasOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(PanelRightClose, { size: 16 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(PanelRightOpen, { size: 16 }),
218188
+ action: handleToggleCanvas
218189
+ });
218190
+ }
218191
+ return items;
218192
+ }, [
218193
+ isOnChatPage,
218194
+ effectiveAgentId,
218195
+ isCanvasOpen,
218196
+ handleCreateAgent,
218197
+ handleClearConversation,
218198
+ handleToggleCanvas
218199
+ ]);
218200
+ const handleItemClick = reactExports.useCallback(
218201
+ (item) => {
218202
+ if (item.action) {
218203
+ item.action();
218204
+ } else if (item.path) {
218205
+ navigate(item.path);
218206
+ closeCommandPalette();
218207
+ }
218208
+ },
218209
+ [navigate, closeCommandPalette]
218210
+ );
218211
+ const allItems = reactExports.useMemo(() => {
218212
+ const agentItems = [];
218213
+ if (agentsData?.agents) {
218214
+ for (const agent of agentsData.agents) {
218215
+ agentItems.push({
218216
+ id: `agent-chat-${agent.id}`,
218217
+ type: "agent-chat",
218218
+ name: agent.name,
218219
+ category: "Agent",
218220
+ path: `/chat/${agent.id}`,
218221
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageSquare, { size: 16 })
218222
+ });
218223
+ agentItems.push({
218224
+ id: `agent-settings-${agent.id}`,
218225
+ type: "agent-settings",
218226
+ name: agent.name,
218227
+ category: "Agent",
218228
+ path: `/agents/${agent.id}`,
218229
+ icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Settings$1, { size: 16 })
218230
+ });
218231
+ }
218232
+ }
218233
+ return [...actionItems, ...pages, ...settingsSectionItems, ...agentItems];
218234
+ }, [agentsData, pages, settingsSectionItems, actionItems]);
218235
+ const filteredItems = reactExports.useMemo(() => {
218236
+ if (!debouncedLocalQuery) {
218237
+ return allItems.slice(0, MAX_SUGGESTIONS);
218238
+ }
218239
+ const lowerCaseQuery = debouncedLocalQuery.toLowerCase();
218240
+ const filtered = allItems.filter(
218241
+ (item) => item.name.toLowerCase().includes(lowerCaseQuery) || item.category.toLowerCase().includes(lowerCaseQuery)
218242
+ );
218243
+ return filtered.slice(0, MAX_SUGGESTIONS);
218244
+ }, [allItems, debouncedLocalQuery]);
218245
+ reactExports.useEffect(() => {
218246
+ setSelectedIndex(0);
218247
+ }, [filteredItems, isCommandPaletteOpen]);
218248
+ reactExports.useEffect(() => {
218249
+ const handleKeyDown = (event) => {
218250
+ if (!isCommandPaletteOpen) return;
218251
+ if (event.key === "ArrowDown") {
218252
+ event.preventDefault();
218253
+ setSelectedIndex((prev2) => (prev2 + 1) % filteredItems.length);
218254
+ } else if (event.key === "ArrowUp") {
218255
+ event.preventDefault();
218256
+ setSelectedIndex(
218257
+ (prev2) => (prev2 - 1 + filteredItems.length) % filteredItems.length
218258
+ );
218259
+ } else if (event.key === "Enter") {
218260
+ event.preventDefault();
218261
+ if (filteredItems[selectedIndex]) {
218262
+ handleItemClick(filteredItems[selectedIndex]);
218263
+ }
218264
+ } else if (event.key === "Escape") {
218265
+ closeCommandPalette();
218266
+ }
218267
+ };
218268
+ window.addEventListener("keydown", handleKeyDown);
218269
+ return () => {
218270
+ window.removeEventListener("keydown", handleKeyDown);
218271
+ };
218272
+ }, [
218273
+ isCommandPaletteOpen,
218274
+ filteredItems,
218275
+ selectedIndex,
218276
+ closeCommandPalette,
218277
+ handleItemClick
218278
+ ]);
218279
+ if (!isCommandPaletteOpen) {
218280
+ return null;
218281
+ }
218282
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
218283
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
218284
+ StyledDialog$1,
218285
+ {
218286
+ "data-tour-tag": "command-palette-dialog",
218287
+ open: isCommandPaletteOpen,
218288
+ onClose: closeCommandPalette,
218289
+ "aria-labelledby": "command-palette-dialog-title",
218290
+ fullWidth: true,
218291
+ disableRestoreFocus: true,
218292
+ children: [
218293
+ /* @__PURE__ */ jsxRuntimeExports.jsx(SearchInputContainer, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
218294
+ TextField,
218295
+ {
218296
+ autoFocus: true,
218297
+ fullWidth: true,
218298
+ variant: "standard",
218299
+ placeholder: "Search actions, agents, and pages",
218300
+ value: localQuery,
218301
+ onChange: handleQueryChange,
218302
+ InputProps: textFieldInputProps,
218303
+ autoComplete: "off"
218304
+ }
218305
+ ) }),
218306
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { sx: { padding: 0 }, children: [
218307
+ filteredItems.length === 0 && debouncedLocalQuery && /* @__PURE__ */ jsxRuntimeExports.jsx(
218308
+ Typography,
218309
+ {
218310
+ sx: { p: 3, textAlign: "center", color: "text.secondary" },
218311
+ children: "No results found."
218312
+ }
218313
+ ),
218314
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ResultsListContainer, { sx: { padding: 0.5 }, children: filteredItems.map((item, index2) => /* @__PURE__ */ jsxRuntimeExports.jsx(
218315
+ ListItem,
218316
+ {
218317
+ disablePadding: true,
218318
+ dense: true,
218319
+ sx: { padding: 0.5 },
218320
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
218321
+ ResultItemStyled,
218322
+ {
218323
+ selected: selectedIndex === index2,
218324
+ onClick: () => handleItemClick(item),
218325
+ onMouseMove: () => setSelectedIndex(index2),
218326
+ children: [
218327
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
218328
+ ListItemIcon,
218329
+ {
218330
+ sx: {
218331
+ minWidth: "20px",
218332
+ display: "flex",
218333
+ alignItems: "center",
218334
+ justifyContent: "center",
218335
+ mr: 1.5,
218336
+ color: "text.secondary"
218337
+ },
218338
+ children: item.icon || /* @__PURE__ */ jsxRuntimeExports.jsx(FileText, { size: 16 })
218339
+ }
218340
+ ),
218341
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
218342
+ ListItemText,
218343
+ {
218344
+ primary: /* @__PURE__ */ jsxRuntimeExports.jsxs(
218345
+ Box,
218346
+ {
218347
+ sx: { display: "flex", alignItems: "center", gap: 1 },
218348
+ children: [
218349
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "body2", children: item.name }),
218350
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Typography, { variant: "caption", color: "text.secondary", children: item.category })
218351
+ ]
218352
+ }
218353
+ )
218354
+ }
218355
+ ),
218356
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
218357
+ ActionChip,
218358
+ {
218359
+ label: getActionLabel(item.type),
218360
+ size: "small",
218361
+ color: getActionColor(item.type),
218362
+ variant: "outlined"
218363
+ }
218364
+ )
218365
+ ]
218366
+ }
218367
+ )
218368
+ },
218369
+ item.id
218370
+ )) })
218371
+ ] })
218372
+ ]
218373
+ }
218374
+ ),
218375
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
218376
+ CreateAgentDialog,
218377
+ {
218378
+ open: isCreateAgentDialogOpen,
218379
+ onClose: closeCreateAgentDialog,
218380
+ onAgentCreated: handleAgentCreated
218381
+ }
218382
+ ),
218383
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
218384
+ ConfirmationModal,
218385
+ {
218386
+ open: isClearConfirmationOpen,
218387
+ title: "Clear Conversation",
218388
+ message: "Are you sure you want to clear this conversation? This action cannot be undone and all messages will be permanently deleted.",
218389
+ confirmText: "Clear",
218390
+ cancelText: "Cancel",
218391
+ isDangerous: true,
218392
+ onConfirm: confirmActualClearConversation,
218393
+ onCancel: cancelClearConversation
218394
+ }
218395
+ )
218396
+ ] });
218397
+ };
217242
218398
  const StyledDialog = styled$1(Dialog)(({ theme: theme2 }) => ({
217243
218399
  "& .MuiBackdrop-root": {
217244
218400
  background: "linear-gradient(135deg, rgba(40,40,40,1), rgba(15,15,15,0.95), rgba(5,5,5,1), rgba(56,201,106,0.15))",
@@ -218507,7 +219663,6 @@ const ModelCredentialStep = () => {
218507
219663
  ] })
218508
219664
  ] });
218509
219665
  };
218510
- const RadientIcon = "" + new URL("radient-icon-1024x1024-D_JJedvo.png", import.meta.url).href;
218511
219666
  const ChoiceCard = styled$1(Box)(({ theme: theme2 }) => ({
218512
219667
  display: "flex",
218513
219668
  flexDirection: "column",
@@ -223140,7 +224295,44 @@ const tourSteps = [
223140
224295
  text: "Next",
223141
224296
  classes: "shepherd-button-primary",
223142
224297
  action: function() {
223143
- this.next();
224298
+ const { openCommandPalette } = useUiPreferencesStore.getState();
224299
+ openCommandPalette();
224300
+ setTimeout(() => {
224301
+ this.next();
224302
+ }, 500);
224303
+ }
224304
+ }
224305
+ ]
224306
+ },
224307
+ {
224308
+ id: "pre-command-palette-open-canvas",
224309
+ title: "Command Palette",
224310
+ attachTo: {
224311
+ element: '[data-tour-tag="command-palette-dialog"]',
224312
+ on: "right"
224313
+ },
224314
+ text: "Let's quickly look at another powerful feature: the Command Palette. You can open it anywhere in the app by pressing <code>Cmd+K</code> on Mac and <code>Ctrl+K</code> on Windows or Linux. This is a helpful window that you can open from anywhere in the app to be able to access agents, settings, pages, and much more using your keyboard. It can often be faster to access sections in the app this way instead of clicking through menus. You can type an agent's name to find the chat for that agent, and then hit Enter to open it.",
224315
+ buttons: [
224316
+ {
224317
+ text: "Back",
224318
+ classes: "shepherd-button-secondary",
224319
+ action: function() {
224320
+ const { closeCommandPalette } = useUiPreferencesStore.getState();
224321
+ closeCommandPalette();
224322
+ setTimeout(() => {
224323
+ this.back();
224324
+ }, 500);
224325
+ }
224326
+ },
224327
+ {
224328
+ text: "Next",
224329
+ classes: "shepherd-button-primary",
224330
+ action: function() {
224331
+ const { closeCommandPalette } = useUiPreferencesStore.getState();
224332
+ closeCommandPalette();
224333
+ setTimeout(() => {
224334
+ this.next();
224335
+ }, 500);
223144
224336
  }
223145
224337
  }
223146
224338
  ]
@@ -223158,7 +224350,11 @@ const tourSteps = [
223158
224350
  text: "Back",
223159
224351
  classes: "shepherd-button-secondary",
223160
224352
  action: function() {
223161
- this.back();
224353
+ const { openCommandPalette } = useUiPreferencesStore.getState();
224354
+ openCommandPalette();
224355
+ setTimeout(() => {
224356
+ this.back();
224357
+ }, 500);
223162
224358
  }
223163
224359
  },
223164
224360
  {
@@ -224255,6 +225451,9 @@ const useOnboardingTour = () => {
224255
225451
  ...defaultStepOptions
224256
225452
  };
224257
225453
  tourInstance.options.useModalOverlay = useModalOverlay;
225454
+ if (options?.firstAgentId) {
225455
+ tourInstance.options.firstAgentId = options.firstAgentId;
225456
+ }
224258
225457
  tourInstance.off("complete", completeTourOnboarding);
224259
225458
  tourInstance.on("complete", completeTourOnboarding);
224260
225459
  tourInstance.off("cancel", completeTourOnboarding);
@@ -224288,15 +225487,23 @@ const TourInitiator = () => {
224288
225487
  const { isModalComplete, isTourComplete } = useOnboardingStore();
224289
225488
  const { startTour: initiateTourFromHook } = useOnboardingTour();
224290
225489
  const shepherdContext = React$1.useContext(Jt);
225490
+ const { data: agentsData } = useAgents(1, 1);
224291
225491
  reactExports.useEffect(() => {
224292
225492
  if (isModalComplete && !isTourComplete && shepherdContext) {
224293
225493
  const timer2 = setTimeout(() => {
224294
- initiateTourFromHook();
225494
+ const firstAgentId = agentsData?.agents?.[0]?.id;
225495
+ initiateTourFromHook({ firstAgentId });
224295
225496
  }, 500);
224296
225497
  return () => clearTimeout(timer2);
224297
225498
  }
224298
225499
  return void 0;
224299
- }, [isModalComplete, isTourComplete, shepherdContext, initiateTourFromHook]);
225500
+ }, [
225501
+ isModalComplete,
225502
+ isTourComplete,
225503
+ shepherdContext,
225504
+ initiateTourFromHook,
225505
+ agentsData
225506
+ ]);
224300
225507
  return null;
224301
225508
  };
224302
225509
  const OnboardingProvider = ({
@@ -260031,174 +261238,6 @@ const RadientAccountSection = ({
260031
261238
  )
260032
261239
  ] });
260033
261240
  };
260034
- const SidebarContainer$1 = styled$1(Paper)(({ theme: theme2 }) => ({
260035
- width: "100%",
260036
- height: "100%",
260037
- borderRadius: 0,
260038
- backgroundColor: theme2.palette.sidebar.secondaryBackground,
260039
- boxShadow: "none",
260040
- display: "flex",
260041
- flexDirection: "column",
260042
- overflow: "hidden",
260043
- borderRight: `1px solid ${theme2.palette.sidebar.border}`
260044
- }));
260045
- const SidebarHeader = styled$1(Box)(({ theme: theme2 }) => ({
260046
- padding: theme2.spacing(3),
260047
- borderBottom: `1px solid ${theme2.palette.sidebar.border}`
260048
- }));
260049
- const SidebarTitle = styled$1(Typography)(({ theme: theme2 }) => ({
260050
- fontWeight: 600,
260051
- fontSize: "1rem",
260052
- color: theme2.palette.text.primary
260053
- }));
260054
- const SidebarList = styled$1(List$1)(({ theme: theme2 }) => ({
260055
- padding: theme2.spacing(2),
260056
- flexGrow: 1
260057
- }));
260058
- const SidebarItemButton = styled$1(ListItemButton, {
260059
- shouldForwardProp: (prop) => prop !== "isActive"
260060
- })(({ theme: theme2, isActive }) => ({
260061
- borderRadius: 8,
260062
- marginBottom: 4,
260063
- paddingTop: 10,
260064
- paddingBottom: 10,
260065
- color: isActive ? theme2.palette.sidebar.itemActiveText : theme2.palette.sidebar.itemText,
260066
- backgroundColor: isActive ? theme2.palette.sidebar.itemActive : "transparent",
260067
- transition: "all 0.2s ease-out",
260068
- position: "relative",
260069
- overflow: "hidden",
260070
- "&:hover": {
260071
- backgroundColor: isActive ? theme2.palette.sidebar.itemActiveHover : theme2.palette.sidebar.itemHover,
260072
- transform: "translateX(4px)"
260073
- },
260074
- ...isActive && {
260075
- "&::before": {
260076
- content: '""',
260077
- position: "absolute",
260078
- left: 0,
260079
- top: "50%",
260080
- transform: "translateY(-50%)",
260081
- width: 4,
260082
- height: "60%",
260083
- backgroundColor: theme2.palette.sidebar.itemActiveText,
260084
- borderRadius: "0 4px 4px 0"
260085
- }
260086
- }
260087
- }));
260088
- const SidebarItemIcon = styled$1(ListItemIcon, {
260089
- shouldForwardProp: (prop) => prop !== "isActive"
260090
- })(({ theme: theme2, isActive }) => ({
260091
- minWidth: 40,
260092
- color: isActive ? theme2.palette.sidebar.itemActiveText : theme2.palette.icon.text,
260093
- transition: "transform 0.2s ease, color 0.2s ease",
260094
- ...isActive && {
260095
- transform: "scale(1.1)"
260096
- }
260097
- }));
260098
- const IconImage$2 = styled$1("img")(() => ({
260099
- width: 30,
260100
- height: 30,
260101
- marginLeft: -4,
260102
- objectFit: "contain"
260103
- }));
260104
- const SettingsSidebar = ({
260105
- activeSection,
260106
- onSelectSection,
260107
- sections
260108
- }) => {
260109
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(SidebarContainer$1, { elevation: 0, children: [
260110
- /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarTitle, { variant: "subtitle1", children: "Settings Navigation" }) }),
260111
- /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarList, { children: sections.map((section) => {
260112
- let tourTag;
260113
- switch (section.id) {
260114
- case "general":
260115
- tourTag = "settings-sidebar-general";
260116
- break;
260117
- case "radient":
260118
- tourTag = "settings-sidebar-radient-account";
260119
- break;
260120
- case "integrations":
260121
- tourTag = "settings-sidebar-integrations";
260122
- break;
260123
- case "appearance":
260124
- tourTag = "settings-sidebar-appearance";
260125
- break;
260126
- case "credentials":
260127
- tourTag = "settings-sidebar-api-credentials";
260128
- break;
260129
- case "updates":
260130
- tourTag = "settings-sidebar-application-updates";
260131
- break;
260132
- default:
260133
- tourTag = void 0;
260134
- }
260135
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(
260136
- SidebarItemButton,
260137
- {
260138
- isActive: activeSection === section.id,
260139
- onClick: () => onSelectSection(section.id),
260140
- "data-tour-tag": tourTag,
260141
- children: [
260142
- /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarItemIcon, { isActive: activeSection === section.id, children: section.isImage ? /* @__PURE__ */ jsxRuntimeExports.jsx(IconImage$2, { src: section.icon, alt: section.label }) : section.isFontAwesome ? /* @__PURE__ */ jsxRuntimeExports.jsx(
260143
- FontAwesomeIcon,
260144
- {
260145
- icon: section.icon,
260146
- style: { fontSize: 20 }
260147
- }
260148
- ) : (() => {
260149
- const IconComponent = section.icon;
260150
- return /* @__PURE__ */ jsxRuntimeExports.jsx(IconComponent, { size: 22, strokeWidth: 2.1 });
260151
- })() }),
260152
- /* @__PURE__ */ jsxRuntimeExports.jsx(
260153
- ListItemText,
260154
- {
260155
- primary: section.label,
260156
- primaryTypographyProps: {
260157
- fontWeight: activeSection === section.id ? 600 : 500,
260158
- fontSize: "0.95rem"
260159
- }
260160
- }
260161
- )
260162
- ]
260163
- },
260164
- section.id
260165
- );
260166
- }) })
260167
- ] });
260168
- };
260169
- const DEFAULT_SETTINGS_SECTIONS = [
260170
- {
260171
- id: "general",
260172
- label: "General Settings",
260173
- icon: Settings$1
260174
- },
260175
- {
260176
- id: "radient",
260177
- label: "Radient Account",
260178
- icon: RadientIcon,
260179
- isImage: true
260180
- },
260181
- {
260182
- id: "integrations",
260183
- label: "Integrations",
260184
- icon: Puzzle
260185
- },
260186
- {
260187
- id: "appearance",
260188
- label: "Appearance",
260189
- icon: Paintbrush
260190
- },
260191
- {
260192
- id: "credentials",
260193
- label: "API Credentials",
260194
- icon: Key
260195
- },
260196
- {
260197
- id: "updates",
260198
- label: "Application Updates",
260199
- icon: Download
260200
- }
260201
- ];
260202
261241
  const StyledTextField = styled$1(TextField)(({ theme: theme2 }) => ({
260203
261242
  width: "100%",
260204
261243
  "& .MuiInputBase-root": {
@@ -261547,6 +262586,7 @@ const SettingsPage = () => {
261547
262586
  const [isScrolling, setIsScrolling] = reactExports.useState(false);
261548
262587
  const scrollTimeoutRef = reactExports.useRef(null);
261549
262588
  const { startTour: startOnboardingTour } = useOnboardingTour();
262589
+ const location2 = useLocation();
261550
262590
  const theme2 = useTheme$2();
261551
262591
  const { data: credentialsData, refetch: refetchCredentials } = useCredentials();
261552
262592
  const { refreshModels } = useModels();
@@ -261579,31 +262619,36 @@ const SettingsPage = () => {
261579
262619
  credentials: reactExports.useRef(null),
261580
262620
  updates: reactExports.useRef(null)
261581
262621
  }).current;
261582
- const handleSelectSection = (sectionId) => {
261583
- setActiveSection(sectionId);
261584
- setIsScrolling(true);
261585
- const ref = sectionRefs[sectionId];
261586
- const contentContainer = document.querySelector("[data-settings-content]");
261587
- if (ref?.current && contentContainer) {
261588
- const containerRect = contentContainer.getBoundingClientRect();
261589
- const elementRect = ref.current.getBoundingClientRect();
261590
- const scrollTop = elementRect.top - containerRect.top + contentContainer.scrollTop;
261591
- contentContainer.scrollTo({
261592
- top: scrollTop - 80,
261593
- // Adjust offset as needed (e.g., header height + padding)
261594
- behavior: "smooth"
261595
- });
261596
- if (scrollTimeoutRef.current) {
261597
- clearTimeout(scrollTimeoutRef.current);
261598
- }
261599
- scrollTimeoutRef.current = setTimeout(() => {
262622
+ const handleSelectSection = reactExports.useCallback(
262623
+ (sectionId) => {
262624
+ setActiveSection(sectionId);
262625
+ setIsScrolling(true);
262626
+ const ref = sectionRefs[sectionId];
262627
+ const contentContainer = document.querySelector(
262628
+ "[data-settings-content]"
262629
+ );
262630
+ if (ref?.current && contentContainer) {
262631
+ const containerRect = contentContainer.getBoundingClientRect();
262632
+ const elementRect = ref.current.getBoundingClientRect();
262633
+ const scrollTop = elementRect.top - containerRect.top + contentContainer.scrollTop;
262634
+ contentContainer.scrollTo({
262635
+ top: scrollTop - 80,
262636
+ // Adjust offset as needed (e.g., header height + padding)
262637
+ behavior: "smooth"
262638
+ });
262639
+ if (scrollTimeoutRef.current) {
262640
+ clearTimeout(scrollTimeoutRef.current);
262641
+ }
262642
+ scrollTimeoutRef.current = setTimeout(() => {
262643
+ setIsScrolling(false);
262644
+ scrollTimeoutRef.current = null;
262645
+ }, 600);
262646
+ } else {
261600
262647
  setIsScrolling(false);
261601
- scrollTimeoutRef.current = null;
261602
- }, 600);
261603
- } else {
261604
- setIsScrolling(false);
261605
- }
261606
- };
262648
+ }
262649
+ },
262650
+ [sectionRefs]
262651
+ );
261607
262652
  reactExports.useEffect(() => {
261608
262653
  const contentContainer = document.querySelector("[data-settings-content]");
261609
262654
  if (!contentContainer) return void 0;
@@ -261634,6 +262679,17 @@ const SettingsPage = () => {
261634
262679
  }
261635
262680
  };
261636
262681
  }, [sectionRefs, activeSection, isScrolling]);
262682
+ reactExports.useEffect(() => {
262683
+ const queryParams = new URLSearchParams(location2.search);
262684
+ const sectionFromQuery = queryParams.get("section");
262685
+ if (sectionFromQuery && sectionRefs[sectionFromQuery]) {
262686
+ const timer2 = setTimeout(() => {
262687
+ handleSelectSection(sectionFromQuery);
262688
+ }, 100);
262689
+ return () => clearTimeout(timer2);
262690
+ }
262691
+ return void 0;
262692
+ }, [location2.search, sectionRefs, handleSelectSection]);
261637
262693
  const handleUpdateField = async (field, value) => {
261638
262694
  setSavingField(field);
261639
262695
  try {
@@ -262538,7 +263594,7 @@ const SidebarNavigation = () => {
262538
263594
  const expanded = !isSidebarCollapsed;
262539
263595
  const navItems = [
262540
263596
  {
262541
- icon: MessageCircle,
263597
+ icon: MessageSquare,
262542
263598
  label: "Chat",
262543
263599
  path: "/chat",
262544
263600
  isActive: currentView === "chat",
@@ -262759,10 +263815,38 @@ const App = () => {
262759
263815
  openRadientConsole,
262760
263816
  onLowCreditsDialogClose
262761
263817
  } = useLowCreditsDialog();
263818
+ const {
263819
+ toggleCommandPalette,
263820
+ isCommandPaletteOpen,
263821
+ isCreateAgentDialogOpen,
263822
+ // Get dialog state from store
263823
+ closeCreateAgentDialog
263824
+ // Get close action from store
263825
+ } = useUiPreferencesStore();
263826
+ const navigate = useNavigate();
263827
+ const handleAgentCreated = (agentId) => {
263828
+ navigate(`/chat/${agentId}`);
263829
+ closeCreateAgentDialog();
263830
+ };
263831
+ reactExports.useEffect(() => {
263832
+ const handleToggleCommandPalette = () => {
263833
+ toggleCommandPalette();
263834
+ };
263835
+ const unsubscribe = window.electron.ipcRenderer.on(
263836
+ "toggle-command-palette",
263837
+ handleToggleCommandPalette
263838
+ );
263839
+ return () => {
263840
+ if (unsubscribe) {
263841
+ unsubscribe();
263842
+ }
263843
+ };
263844
+ }, [toggleCommandPalette]);
262762
263845
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(OnboardingProvider, { children: [
262763
263846
  /* @__PURE__ */ jsxRuntimeExports.jsx(OnboardingTourGlobalStyles, {}),
262764
263847
  /* @__PURE__ */ jsxRuntimeExports.jsxs(AppContainer, { children: [
262765
263848
  /* @__PURE__ */ jsxRuntimeExports.jsx(CssBaseline, {}),
263849
+ isCommandPaletteOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(CommandPalette, {}),
262766
263850
  /* @__PURE__ */ jsxRuntimeExports.jsx(ModelsInitializer, {}),
262767
263851
  /* @__PURE__ */ jsxRuntimeExports.jsx(OnboardingModal, { open: isOnboardingActive }),
262768
263852
  /* @__PURE__ */ jsxRuntimeExports.jsx(ConnectivityBanner, {}),
@@ -262775,6 +263859,14 @@ const App = () => {
262775
263859
  onGoToConsole: openRadientConsole
262776
263860
  }
262777
263861
  ),
263862
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
263863
+ CreateAgentDialog,
263864
+ {
263865
+ open: isCreateAgentDialogOpen,
263866
+ onClose: closeCreateAgentDialog,
263867
+ onAgentCreated: handleAgentCreated
263868
+ }
263869
+ ),
262778
263870
  /* @__PURE__ */ jsxRuntimeExports.jsx(SidebarNavigation, {}),
262779
263871
  /* @__PURE__ */ jsxRuntimeExports.jsx(MainContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Routes, { children: [
262780
263872
  /* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/", element: /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: "/chat", replace: true }) }),