orbitchat 2.5.3 → 2.5.5

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 (53) hide show
  1. package/README.md +1 -1
  2. package/bin/orbitchat.js +12 -3
  3. package/dist/assets/{_baseUniq-BPMphbq5-fffIHFDu.js → _baseUniq-BPMphbq5-z1rjZivt.js} +1 -1
  4. package/dist/assets/api-GHsmF4Sa.js +2 -0
  5. package/dist/assets/{arc-D9rhTKV0-y3rSQgpA.js → arc-D9rhTKV0-C97LnXIB.js} +1 -1
  6. package/dist/assets/{architectureDiagram-VXUJARFQ-BiqZtsDe-N3Ea-ens.js → architectureDiagram-VXUJARFQ-BiqZtsDe-CUND7b3n.js} +1 -1
  7. package/dist/assets/{blockDiagram-VD42YOAC-zcRIdFTD-C7ZYwyCi.js → blockDiagram-VD42YOAC-zcRIdFTD-DU-jA4YR.js} +1 -1
  8. package/dist/assets/{c4Diagram-YG6GDRKO-DYXNcDX4-CkDkLR8J.js → c4Diagram-YG6GDRKO-DYXNcDX4-DV2FxwI1.js} +1 -1
  9. package/dist/assets/channel-CUIutAfm-CxA0aZEB.js +1 -0
  10. package/dist/assets/{chunk-4BX2VUAB-DAh9ktmY-CVI-DuLv.js → chunk-4BX2VUAB-DAh9ktmY-l4b0U1Yj.js} +1 -1
  11. package/dist/assets/{chunk-55IACEB6-Cza7pcpr-BBaeX93z.js → chunk-55IACEB6-Cza7pcpr-ClX9v3C5.js} +1 -1
  12. package/dist/assets/{chunk-B4BG7PRW-BTUSpeKy-B7y145sb.js → chunk-B4BG7PRW-BTUSpeKy-DbTSce4t.js} +1 -1
  13. package/dist/assets/{chunk-DI55MBZ5-DKt4WII7-Du6SLimY.js → chunk-DI55MBZ5-DKt4WII7-z7ZobPUN.js} +1 -1
  14. package/dist/assets/{chunk-FMBD7UC4-DdcCR8w3-ofnCuIvq.js → chunk-FMBD7UC4-DdcCR8w3-BqbVZVgO.js} +1 -1
  15. package/dist/assets/{chunk-QN33PNHL-v6AkzOl1-CG4Ubc14.js → chunk-QN33PNHL-v6AkzOl1-Ca7Wh8RO.js} +1 -1
  16. package/dist/assets/{chunk-QZHKN3VN-DVJOrqBZ-DCTCtPL-.js → chunk-QZHKN3VN-DVJOrqBZ-C3w2rUS6.js} +1 -1
  17. package/dist/assets/{chunk-TZMSLE5B-G2jJHqli-BbL9D06j.js → chunk-TZMSLE5B-G2jJHqli-DRzr-1xQ.js} +1 -1
  18. package/dist/assets/{classDiagram-2ON5EDUG-CxmgTanh-BrY4hA_F.js → classDiagram-2ON5EDUG-CxmgTanh-BRBnzZai.js} +1 -1
  19. package/dist/assets/{classDiagram-v2-WZHVMYZB-CxmgTanh-BrY4hA_F.js → classDiagram-v2-WZHVMYZB-CxmgTanh-BRBnzZai.js} +1 -1
  20. package/dist/assets/clone-CsNB4mMi-DJ5cPN0u.js +1 -0
  21. package/dist/assets/{cose-bilkent-S5V4N54A-BRr2Y6dg-Ch-OMMVT.js → cose-bilkent-S5V4N54A-BRr2Y6dg-D6srnG6T.js} +1 -1
  22. package/dist/assets/{dagre-6UL2VRFP-DX8gNHmJ-euumF4-X.js → dagre-6UL2VRFP-DX8gNHmJ-DY2mXPk6.js} +1 -1
  23. package/dist/assets/{diagram-PSM6KHXK-DNX818To-BJwExkYa.js → diagram-PSM6KHXK-DNX818To-CWog8RIY.js} +1 -1
  24. package/dist/assets/{diagram-QEK2KX5R-BDO6hKtm-ByxFKswO.js → diagram-QEK2KX5R-BDO6hKtm-CbW1gJs_.js} +1 -1
  25. package/dist/assets/{diagram-S2PKOQOG-IEqaDwzi-SM6e96a5.js → diagram-S2PKOQOG-IEqaDwzi-CXgNrmg9.js} +1 -1
  26. package/dist/assets/{erDiagram-Q2GNP2WA-DbLpN8Jp-DYKYq2TK.js → erDiagram-Q2GNP2WA-DbLpN8Jp-kLI5X3NK.js} +1 -1
  27. package/dist/assets/{flowDiagram-NV44I4VS-pJlHae8Y-w_SaXPo5.js → flowDiagram-NV44I4VS-pJlHae8Y-KdNpxtgw.js} +1 -1
  28. package/dist/assets/{ganttDiagram-JELNMOA3-J0Tkq5TR-BUWW8Vh3.js → ganttDiagram-JELNMOA3-J0Tkq5TR-BYwsQjUP.js} +1 -1
  29. package/dist/assets/{gitGraphDiagram-NY62KEGX-DgYonpsZ-DVkG4gJm.js → gitGraphDiagram-NY62KEGX-DgYonpsZ-fwt1Apbh.js} +1 -1
  30. package/dist/assets/{graph-BpcfrHXY-K9sA20e7.js → graph-BpcfrHXY-C37XKg-t.js} +1 -1
  31. package/dist/assets/{index-RpCKS3q1.js → index-C4Z8WqBT.js} +7 -7
  32. package/dist/assets/{index-DvNpGWs7-COncr4FG.js → index-DvNpGWs7-BQKVS4nm.js} +1 -1
  33. package/dist/assets/{infoDiagram-WHAUD3N6-C3JLOAnb-J7NBmmZy.js → infoDiagram-WHAUD3N6-C3JLOAnb-Duinz6LB.js} +1 -1
  34. package/dist/assets/{journeyDiagram-XKPGCS4Q-CfjB2Qdf-q42mmSWQ.js → journeyDiagram-XKPGCS4Q-CfjB2Qdf-M8lEOFeA.js} +1 -1
  35. package/dist/assets/{kanban-definition-3W4ZIXB7-CrW8yVmd-CGzKMkjY.js → kanban-definition-3W4ZIXB7-CrW8yVmd-DRvLAtM2.js} +1 -1
  36. package/dist/assets/{layout-bsfAhWjc-4zXteHbQ.js → layout-bsfAhWjc-Cl4LwW_I.js} +1 -1
  37. package/dist/assets/{min-C2aDz5ZK-J0LKb0tF.js → min-C2aDz5ZK-CjNJyk11.js} +1 -1
  38. package/dist/assets/{mindmap-definition-VGOIOE7T-Dj37RkY_-CXHE_MUG.js → mindmap-definition-VGOIOE7T-Dj37RkY_-rm-yjGNJ.js} +1 -1
  39. package/dist/assets/{pieDiagram-ADFJNKIX-BiQvDx8I-uvDnxJ2Z.js → pieDiagram-ADFJNKIX-BiQvDx8I-DzI_ztgk.js} +1 -1
  40. package/dist/assets/{quadrantDiagram-AYHSOK5B-D4b-YFzI-LNbfTy1s.js → quadrantDiagram-AYHSOK5B-D4b-YFzI-BRb9byvQ.js} +1 -1
  41. package/dist/assets/{requirementDiagram-UZGBJVZJ-km07nlVd-CmoRq-uT.js → requirementDiagram-UZGBJVZJ-km07nlVd-CVrxKvmF.js} +1 -1
  42. package/dist/assets/{sankeyDiagram-TZEHDZUN-LfuSRRbf-AwLbzDXN.js → sankeyDiagram-TZEHDZUN-LfuSRRbf-BfgMrETy.js} +1 -1
  43. package/dist/assets/{sequenceDiagram-WL72ISMW-CQ4J-0_7-B9dEWgb1.js → sequenceDiagram-WL72ISMW-CQ4J-0_7-Dv0HcJtc.js} +1 -1
  44. package/dist/assets/{stateDiagram-FKZM4ZOC-JtogJwt6-CJ7OoUqc.js → stateDiagram-FKZM4ZOC-JtogJwt6-BQvKg7k9.js} +1 -1
  45. package/dist/assets/{stateDiagram-v2-4FDKWEC3-DuQ7UaeU-ubmB1Vwq.js → stateDiagram-v2-4FDKWEC3-DuQ7UaeU-DAhUMAAL.js} +1 -1
  46. package/dist/assets/{timeline-definition-IT6M3QCI-Cs3NnF2M-CFWhYq_j.js → timeline-definition-IT6M3QCI-Cs3NnF2M-Dl2mtkIb.js} +1 -1
  47. package/dist/assets/{treemap-KMMF4GRG-CkW25-tn-ceJRh9-R.js → treemap-KMMF4GRG-CkW25-tn-WPT7N5G6.js} +1 -1
  48. package/dist/assets/{xychartDiagram-PRI3JC2R-JzAaXa5z-gbTE5_4p.js → xychartDiagram-PRI3JC2R-JzAaXa5z-C71Ro9b8.js} +1 -1
  49. package/dist/index.html +1 -1
  50. package/package.json +2 -2
  51. package/dist/assets/api-tSLlTydc.js +0 -2
  52. package/dist/assets/channel-CUIutAfm-BjJCSiEC.js +0 -1
  53. package/dist/assets/clone-CsNB4mMi-D9SArwGR.js +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-6UL2VRFP-DX8gNHmJ-euumF4-X.js","assets/graph-BpcfrHXY-K9sA20e7.js","assets/_baseUniq-BPMphbq5-fffIHFDu.js","assets/layout-bsfAhWjc-4zXteHbQ.js","assets/min-C2aDz5ZK-J0LKb0tF.js","assets/clone-CsNB4mMi-D9SArwGR.js","assets/cose-bilkent-S5V4N54A-BRr2Y6dg-Ch-OMMVT.js","assets/cytoscape.esm-CjI2IsL8-Da6dFVsf.js","assets/c4Diagram-YG6GDRKO-DYXNcDX4-CkDkLR8J.js","assets/chunk-TZMSLE5B-G2jJHqli-BbL9D06j.js","assets/flowDiagram-NV44I4VS-pJlHae8Y-w_SaXPo5.js","assets/chunk-FMBD7UC4-DdcCR8w3-ofnCuIvq.js","assets/chunk-55IACEB6-Cza7pcpr-BBaeX93z.js","assets/chunk-QN33PNHL-v6AkzOl1-CG4Ubc14.js","assets/channel-CUIutAfm-BjJCSiEC.js","assets/erDiagram-Q2GNP2WA-DbLpN8Jp-DYKYq2TK.js","assets/gitGraphDiagram-NY62KEGX-DgYonpsZ-DVkG4gJm.js","assets/chunk-4BX2VUAB-DAh9ktmY-CVI-DuLv.js","assets/chunk-QZHKN3VN-DVJOrqBZ-DCTCtPL-.js","assets/treemap-KMMF4GRG-CkW25-tn-ceJRh9-R.js","assets/infoDiagram-WHAUD3N6-C3JLOAnb-J7NBmmZy.js","assets/pieDiagram-ADFJNKIX-BiQvDx8I-uvDnxJ2Z.js","assets/arc-D9rhTKV0-y3rSQgpA.js","assets/requirementDiagram-UZGBJVZJ-km07nlVd-CmoRq-uT.js","assets/sequenceDiagram-WL72ISMW-CQ4J-0_7-B9dEWgb1.js","assets/classDiagram-2ON5EDUG-CxmgTanh-BrY4hA_F.js","assets/chunk-B4BG7PRW-BTUSpeKy-B7y145sb.js","assets/classDiagram-v2-WZHVMYZB-CxmgTanh-BrY4hA_F.js","assets/stateDiagram-FKZM4ZOC-JtogJwt6-CJ7OoUqc.js","assets/chunk-DI55MBZ5-DKt4WII7-Du6SLimY.js","assets/stateDiagram-v2-4FDKWEC3-DuQ7UaeU-ubmB1Vwq.js","assets/journeyDiagram-XKPGCS4Q-CfjB2Qdf-q42mmSWQ.js","assets/timeline-definition-IT6M3QCI-Cs3NnF2M-CFWhYq_j.js","assets/mindmap-definition-VGOIOE7T-Dj37RkY_-CXHE_MUG.js","assets/kanban-definition-3W4ZIXB7-CrW8yVmd-CGzKMkjY.js","assets/diagram-S2PKOQOG-IEqaDwzi-SM6e96a5.js","assets/diagram-QEK2KX5R-BDO6hKtm-ByxFKswO.js","assets/blockDiagram-VD42YOAC-zcRIdFTD-C7ZYwyCi.js","assets/architectureDiagram-VXUJARFQ-BiqZtsDe-N3Ea-ens.js","assets/diagram-PSM6KHXK-DNX818To-BJwExkYa.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dagre-6UL2VRFP-DX8gNHmJ-DY2mXPk6.js","assets/graph-BpcfrHXY-C37XKg-t.js","assets/_baseUniq-BPMphbq5-z1rjZivt.js","assets/layout-bsfAhWjc-Cl4LwW_I.js","assets/min-C2aDz5ZK-CjNJyk11.js","assets/clone-CsNB4mMi-DJ5cPN0u.js","assets/cose-bilkent-S5V4N54A-BRr2Y6dg-D6srnG6T.js","assets/cytoscape.esm-CjI2IsL8-Da6dFVsf.js","assets/c4Diagram-YG6GDRKO-DYXNcDX4-DV2FxwI1.js","assets/chunk-TZMSLE5B-G2jJHqli-DRzr-1xQ.js","assets/flowDiagram-NV44I4VS-pJlHae8Y-KdNpxtgw.js","assets/chunk-FMBD7UC4-DdcCR8w3-BqbVZVgO.js","assets/chunk-55IACEB6-Cza7pcpr-ClX9v3C5.js","assets/chunk-QN33PNHL-v6AkzOl1-Ca7Wh8RO.js","assets/channel-CUIutAfm-CxA0aZEB.js","assets/erDiagram-Q2GNP2WA-DbLpN8Jp-kLI5X3NK.js","assets/gitGraphDiagram-NY62KEGX-DgYonpsZ-fwt1Apbh.js","assets/chunk-4BX2VUAB-DAh9ktmY-l4b0U1Yj.js","assets/chunk-QZHKN3VN-DVJOrqBZ-C3w2rUS6.js","assets/treemap-KMMF4GRG-CkW25-tn-WPT7N5G6.js","assets/infoDiagram-WHAUD3N6-C3JLOAnb-Duinz6LB.js","assets/pieDiagram-ADFJNKIX-BiQvDx8I-DzI_ztgk.js","assets/arc-D9rhTKV0-C97LnXIB.js","assets/requirementDiagram-UZGBJVZJ-km07nlVd-CVrxKvmF.js","assets/sequenceDiagram-WL72ISMW-CQ4J-0_7-Dv0HcJtc.js","assets/classDiagram-2ON5EDUG-CxmgTanh-BRBnzZai.js","assets/chunk-B4BG7PRW-BTUSpeKy-DbTSce4t.js","assets/classDiagram-v2-WZHVMYZB-CxmgTanh-BRBnzZai.js","assets/stateDiagram-FKZM4ZOC-JtogJwt6-BQvKg7k9.js","assets/chunk-DI55MBZ5-DKt4WII7-z7ZobPUN.js","assets/stateDiagram-v2-4FDKWEC3-DuQ7UaeU-DAhUMAAL.js","assets/journeyDiagram-XKPGCS4Q-CfjB2Qdf-M8lEOFeA.js","assets/timeline-definition-IT6M3QCI-Cs3NnF2M-Dl2mtkIb.js","assets/mindmap-definition-VGOIOE7T-Dj37RkY_-rm-yjGNJ.js","assets/kanban-definition-3W4ZIXB7-CrW8yVmd-DRvLAtM2.js","assets/diagram-S2PKOQOG-IEqaDwzi-CXgNrmg9.js","assets/diagram-QEK2KX5R-BDO6hKtm-CbW1gJs_.js","assets/blockDiagram-VD42YOAC-zcRIdFTD-DU-jA4YR.js","assets/architectureDiagram-VXUJARFQ-BiqZtsDe-CUND7b3n.js","assets/diagram-PSM6KHXK-DNX818To-CWog8RIY.js"])))=>i.map(i=>d[i]);
2
2
  var Oae=Object.defineProperty;var Wae=(e,t,r)=>t in e?Oae(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var hA=(e,t,r)=>Wae(e,typeof t!="symbol"?t+"":t,r);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const A of document.querySelectorAll('link[rel="modulepreload"]'))n(A);new MutationObserver(A=>{for(const i of A)if(i.type==="childList")for(const a of i.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&n(a)}).observe(document,{childList:!0,subtree:!0});function r(A){const i={};return A.integrity&&(i.integrity=A.integrity),A.referrerPolicy&&(i.referrerPolicy=A.referrerPolicy),A.crossOrigin==="use-credentials"?i.credentials="include":A.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(A){if(A.ep)return;A.ep=!0;const i=r(A);fetch(A.href,i)}})();function Pae(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var IV={exports:{}},Yf={},yV={exports:{}},Mt={};/**
3
3
  * @license React
4
4
  * react.production.min.js
@@ -822,8 +822,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let n="<p>An error
822
822
  node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);const n=e.x,A=e.y,i=Math.abs(n-r.x),a=e.width/2;let s=r.x<t.x?a-i:a+i;const o=e.height/2,l=Math.abs(t.y-r.y),c=Math.abs(t.x-r.x);if(Math.abs(A-t.y)*a>Math.abs(n-t.x)*o){let u=r.y<t.y?t.y-o-A:A-o-t.y;s=c*u/l;const g={x:r.x<t.x?r.x+s:r.x-c+s,y:r.y<t.y?r.y+l-u:r.y-l+u};return s===0&&(g.x=t.x,g.y=t.y),c===0&&(g.x=t.x),l===0&&(g.y=t.y),ue.debug(`abc89 top/bottom calc, Q ${l}, q ${u}, R ${c}, r ${s}`,g),g}else{r.x<t.x?s=t.x-a-n:s=n-a-t.x;let u=l*s/c,g=r.x<t.x?r.x+c-s:r.x-c+s,d=r.y<t.y?r.y+u:r.y-u;return ue.debug(`sides calc abc89, Q ${l}, q ${u}, R ${c}, r ${s}`,{_x:g,_y:d}),s===0&&(g=t.x,d=t.y),c===0&&(g=t.x),l===0&&(d=t.y),{x:g,y:d}}},"intersection"),fO=F((e,t)=>{ue.warn("abc88 cutPathAtIntersect",e,t);let r=[],n=e[0],A=!1;return e.forEach(i=>{if(ue.info("abc88 checking point",i,t),!Yje(t,i)&&!A){const a=Nje(t,n,i);ue.debug("abc88 inside",i,n,a),ue.debug("abc88 intersection",a,t);let s=!1;r.forEach(o=>{s=s||o.x===a.x&&o.y===a.y}),r.some(o=>o.x===a.x&&o.y===a.y)?ue.warn("abc88 no intersect",a,r):r.push(a),A=!0}else ue.warn("abc88 outside",i,n),n=i,A||r.push(i)}),ue.debug("returning points",r),r},"cutPathAtIntersect");function Ite(e){const t=[],r=[];for(let n=1;n<e.length-1;n++){const A=e[n-1],i=e[n],a=e[n+1];(A.x===i.x&&i.y===a.y&&Math.abs(i.x-a.x)>5&&Math.abs(i.y-A.y)>5||A.y===i.y&&i.x===a.x&&Math.abs(i.x-A.x)>5&&Math.abs(i.y-a.y)>5)&&(t.push(i),r.push(n))}return{cornerPoints:t,cornerPointPositions:r}}F(Ite,"extractCornerPoints");var EO=F(function(e,t,r){const n=t.x-e.x,A=t.y-e.y,i=Math.sqrt(n*n+A*A),a=r/i;return{x:t.x-a*n,y:t.y-a*A}},"findAdjacentPoint"),bje=F(function(e){const{cornerPointPositions:t}=Ite(e),r=[];for(let n=0;n<e.length;n++)if(t.includes(n)){const A=e[n-1],i=e[n+1],a=e[n],s=EO(A,a,5),o=EO(i,a,5),l=o.x-s.x,c=o.y-s.y;r.push(s);const u=Math.sqrt(2)*2;let g={x:a.x,y:a.y};if(Math.abs(i.x-A.x)>10&&Math.abs(i.y-A.y)>=10){ue.debug("Corner point fixing",Math.abs(i.x-A.x),Math.abs(i.y-A.y));const d=5;a.x===s.x?g={x:l<0?s.x-d+u:s.x+d-u,y:c<0?s.y-u:s.y+u}:g={x:l<0?s.x-u:s.x+u,y:c<0?s.y-d+u:s.y+d-u}}else ue.debug("Corner point skipping fixing",Math.abs(i.x-A.x),Math.abs(i.y-A.y));r.push(g,o)}else r.push(e[n]);return r},"fixCorners"),xje=F((e,t,r)=>{const n=e-t-r,A=2,i=2,a=A+i,s=Math.floor(n/a),o=Array(s).fill(`${A} ${i}`).join(" ");return`0 ${t} ${o} ${r}`},"generateDashArray"),Dje=F(function(e,t,r,n,A,i,a,s=!1){var o;const{handDrawnSeed:l}=Ot();let c=t.points,u=!1;const g=A;var d=i;const B=[];for(const v in t.cssCompiledStyles)__(v)||B.push(t.cssCompiledStyles[v]);ue.debug("UIO intersect check",t.points,d.x,g.x),d.intersect&&g.intersect&&!s&&(c=c.slice(1,t.points.length-1),c.unshift(g.intersect(c[0])),ue.debug("Last point UIO",t.start,"-->",t.end,c[c.length-1],d,d.intersect(c[c.length-1])),c.push(d.intersect(c[c.length-1])));const h=btoa(JSON.stringify(c));t.toCluster&&(ue.info("to cluster abc88",r.get(t.toCluster)),c=fO(t.points,r.get(t.toCluster).node),u=!0),t.fromCluster&&(ue.debug("from cluster abc88",r.get(t.fromCluster),JSON.stringify(c,null,2)),c=fO(c.reverse(),r.get(t.fromCluster).node).reverse(),u=!0);let f=c.filter(v=>!Number.isNaN(v.y));f=bje(f);let p=Nd;switch(p=Sl,t.curve){case"linear":p=Sl;break;case"basis":p=Nd;break;case"cardinal":p=sq;break;case"bumpX":p=mU;break;case"bumpY":p=IU;break;case"catmullRom":p=lq;break;case"monotoneX":p=YU;break;case"monotoneY":p=NU;break;case"natural":p=bU;break;case"step":p=xU;break;case"stepAfter":p=kU;break;case"stepBefore":p=DU;break;default:p=Nd}const{x:w,y:E}=bUe(t),C=EU().x(w).y(E).curve(p);let m;switch(t.thickness){case"normal":m="edge-thickness-normal";break;case"thick":m="edge-thickness-thick";break;case"invisible":m="edge-thickness-invisible";break;default:m="edge-thickness-normal"}switch(t.pattern){case"solid":m+=" edge-pattern-solid";break;case"dotted":m+=" edge-pattern-dotted";break;case"dashed":m+=" edge-pattern-dashed";break;default:m+=" edge-pattern-solid"}let I,M=t.curve==="rounded"?yte(Cte(f,t),5):C(f);const b=Array.isArray(t.style)?t.style:[t.style];let k=b.find(v=>v==null?void 0:v.startsWith("stroke:")),N=!1;if(t.look==="handDrawn"){const v=Je.svg(e);Object.assign([],f);const H=v.path(M,{roughness:.3,seed:l});m+=" transition",I=Dt(H).select("path").attr("id",t.id).attr("class"," "+m+(t.classes?" "+t.classes:"")).attr("style",b?b.reduce((R,O)=>R+";"+O,""):"");let J=I.attr("d");I.attr("d",J),e.node().appendChild(I.node())}else{const v=B.join(";"),H=b?b.reduce((G,q)=>G+q+";",""):"";let J="";t.animate&&(J=" edge-animation-fast"),t.animation&&(J=" edge-animation-"+t.animation);const R=(v?v+";"+H+";":H)+";"+(b?b.reduce((G,q)=>G+";"+q,""):"");I=e.append("path").attr("d",M).attr("id",t.id).attr("class"," "+m+(t.classes?" "+t.classes:"")+(J??"")).attr("style",R),k=(o=R.match(/stroke:([^;]+)/))==null?void 0:o[1],N=t.animate===!0||!!t.animation||v.includes("animation");const O=I.node(),U=typeof O.getTotalLength=="function"?O.getTotalLength():0,P=vJ[t.arrowTypeStart]||0,ee=vJ[t.arrowTypeEnd]||0;if(t.look==="neo"&&!N){const G=`stroke-dasharray: ${t.pattern==="dotted"||t.pattern==="dashed"?xje(U,P,ee):`0 ${P} ${U-P-ee} ${ee}`}; stroke-dashoffset: 0;`;I.attr("style",G+I.attr("style"))}}I.attr("data-edge",!0),I.attr("data-et","edge"),I.attr("data-id",t.id),I.attr("data-points",h),t.showPoints&&f.forEach(v=>{e.append("circle").style("stroke","red").style("fill","red").attr("r",1).attr("cx",v.x).attr("cy",v.y)});let D="";(Ot().flowchart.arrowMarkerAbsolute||Ot().state.arrowMarkerAbsolute)&&(D=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,D=D.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),ue.info("arrowTypeStart",t.arrowTypeStart),ue.info("arrowTypeEnd",t.arrowTypeEnd),Cje(I,t,D,a,n,k);const z=Math.floor(c.length/2),L=c[z];zi.isLabelCoordinateInPath(L,I.attr("d"))||(u=!0);let T={};return u&&(T.updatedPath=c),T.originalPath=t.points,T},"insertEdge");function yte(e,t){if(e.length<2)return"";let r="";const n=e.length,A=1e-5;for(let i=0;i<n;i++){const a=e[i],s=e[i-1],o=e[i+1];if(i===0)r+=`M${a.x},${a.y}`;else if(i===n-1)r+=`L${a.x},${a.y}`;else{const l=a.x-s.x,c=a.y-s.y,u=o.x-a.x,g=o.y-a.y,d=Math.hypot(l,c),B=Math.hypot(u,g);if(d<A||B<A){r+=`L${a.x},${a.y}`;continue}const h=l/d,f=c/d,p=u/B,w=g/B,E=h*p+f*w,C=Math.max(-1,Math.min(1,E)),m=Math.acos(C);if(m<A||Math.abs(Math.PI-m)<A){r+=`L${a.x},${a.y}`;continue}const I=Math.min(t/Math.sin(m/2),d/2,B/2),M=a.x-h*I,b=a.y-f*I,k=a.x+p*I,N=a.y+w*I;r+=`L${M},${b}`,r+=`Q${a.x},${a.y} ${k},${N}`}}return r}F(yte,"generateRoundedPath");function jx(e,t){if(!e||!t)return{angle:0,deltaX:0,deltaY:0};const r=t.x-e.x,n=t.y-e.y;return{angle:Math.atan2(n,r),deltaX:r,deltaY:n}}F(jx,"calculateDeltaAndAngle");function Cte(e,t){const r=e.map(A=>({...A}));if(e.length>=2&&jn[t.arrowTypeStart]){const A=jn[t.arrowTypeStart],i=e[0],a=e[1],{angle:s}=jx(i,a),o=A*Math.cos(s),l=A*Math.sin(s);r[0].x=i.x+o,r[0].y=i.y+l}const n=e.length;if(n>=2&&jn[t.arrowTypeEnd]){const A=jn[t.arrowTypeEnd],i=e[n-1],a=e[n-2],{angle:s}=jx(a,i),o=A*Math.cos(s),l=A*Math.sin(s);r[n-1].x=i.x-o,r[n-1].y=i.y-l}return r}F(Cte,"applyMarkerOffsetsToPoints");var kje=F((e,t,r,n)=>{t.forEach(A=>{Vje[A](e,r,n)})},"insertMarkers"),Sje=F((e,t,r)=>{ue.trace("Making markers for ",r),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),Uje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),vje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),Gje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",r+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Rje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",r+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),jje=F((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),zje=F((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),Tje=F((e,t,r)=>{e.append("marker").attr("id",r+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",r+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Lje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),Hje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-onlyOneStart").attr("class","marker onlyOne "+t).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),e.append("defs").append("marker").attr("id",r+"_"+t+"-onlyOneEnd").attr("class","marker onlyOne "+t).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),Jje=F((e,t,r)=>{const n=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrOneStart").attr("class","marker zeroOrOne "+t).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");const A=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+t).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");A.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),A.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),Oje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-oneOrMoreStart").attr("class","marker oneOrMore "+t).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),e.append("defs").append("marker").attr("id",r+"_"+t+"-oneOrMoreEnd").attr("class","marker oneOrMore "+t).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),Wje=F((e,t,r)=>{const n=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+t).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");const A=e.append("defs").append("marker").attr("id",r+"_"+t+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+t).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");A.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),A.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),Pje=F((e,t,r)=>{e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0
823
823
  L20,10
824
824
  M20,10
825
- L0,20`)},"requirement_arrow"),Kje=F((e,t,r)=>{const n=e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),Vje={extension:Sje,composition:Uje,aggregation:vje,dependency:Gje,lollipop:Rje,point:jje,circle:zje,cross:Tje,barb:Lje,only_one:Hje,zero_or_one:Jje,one_or_more:Oje,zero_or_more:Wje,requirement_arrow:Pje,requirement_contains:Kje},Xje=kje,Zje={common:Lu,getConfig:Jn,insertCluster:Aje,insertEdge:Dje,insertEdgeLabel:Mje,insertMarkers:Xje,insertNode:mte,interpolateToCurve:WU,labelHelper:nt,log:ue,positionEdgeLabel:Fje},hB={},Qte=F(e=>{for(const t of e)hB[t.name]=t},"registerLayoutLoaders"),qje=F(()=>{Qte([{name:"dagre",loader:F(async()=>await Yt(()=>import("./dagre-6UL2VRFP-DX8gNHmJ-euumF4-X.js"),__vite__mapDeps([0,1,2,3,4,5])),"loader")},{name:"cose-bilkent",loader:F(async()=>await Yt(()=>import("./cose-bilkent-S5V4N54A-BRr2Y6dg-Ch-OMMVT.js"),__vite__mapDeps([6,7])),"loader")}])},"registerDefaultLayoutLoaders");qje();var z$e=F(async(e,t)=>{if(!(e.layoutAlgorithm in hB))throw new Error(`Unknown layout algorithm: ${e.layoutAlgorithm}`);const r=hB[e.layoutAlgorithm];return(await r.loader()).render(e,t,Zje,{algorithm:r.algorithm})},"render"),T$e=F((e="",{fallback:t="dagre"}={})=>{if(e in hB)return e;if(t in hB)return ue.warn(`Layout algorithm ${e} is not registered. Using ${t} as fallback.`),t;throw new Error(`Both layout algorithms ${e} and ${t} are not registered.`)},"getRegisteredLayoutAlgorithm"),Mte="comm",Fte="rule",Yte="decl",_je="@import",$je="@namespace",eze="@keyframes",tze="@layer",Nte=Math.abs,u2=String.fromCharCode;function bte(e){return e.trim()}function u0(e,t,r){return e.replace(t,r)}function rze(e,t,r){return e.indexOf(t,r)}function nu(e,t){return e.charCodeAt(t)|0}function Mu(e,t,r){return e.slice(t,r)}function ca(e){return e.length}function nze(e){return e.length}function Ip(e,t){return t.push(e),e}var LE=1,Fu=1,xte=0,Ei=0,Kr=0,Ku="";function g2(e,t,r,n,A,i,a,s){return{value:e,root:t,parent:r,type:n,props:A,children:i,line:LE,column:Fu,length:a,return:"",siblings:s}}function Aze(){return Kr}function ize(){return Kr=Ei>0?nu(Ku,--Ei):0,Fu--,Kr===10&&(Fu=1,LE--),Kr}function Pi(){return Kr=Ei<xte?nu(Ku,Ei++):0,Fu++,Kr===10&&(Fu=1,LE++),Kr}function ro(){return nu(Ku,Ei)}function g0(){return Ei}function HE(e,t){return Mu(Ku,e,t)}function pB(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function aze(e){return LE=Fu=1,xte=ca(Ku=e),Ei=0,[]}function sze(e){return Ku="",e}function tN(e){return bte(HE(Ei-1,zx(e===91?e+2:e===40?e+1:e)))}function oze(e){for(;(Kr=ro())&&Kr<33;)Pi();return pB(e)>2||pB(Kr)>3?"":" "}function lze(e,t){for(;--t&&Pi()&&!(Kr<48||Kr>102||Kr>57&&Kr<65||Kr>70&&Kr<97););return HE(e,g0()+(t<6&&ro()==32&&Pi()==32))}function zx(e){for(;Pi();)switch(Kr){case e:return Ei;case 34:case 39:e!==34&&e!==39&&zx(Kr);break;case 40:e===41&&zx(e);break;case 92:Pi();break}return Ei}function cze(e,t){for(;Pi()&&e+Kr!==57&&!(e+Kr===84&&ro()===47););return"/*"+HE(t,Ei-1)+"*"+u2(e===47?e:Pi())}function uze(e){for(;!pB(ro());)Pi();return HE(e,Ei)}function gze(e){return sze(d0("",null,null,null,[""],e=aze(e),0,[0],e))}function d0(e,t,r,n,A,i,a,s,o){for(var l=0,c=0,u=a,g=0,d=0,B=0,h=1,f=1,p=1,w=0,E="",C=A,m=i,I=n,M=E;f;)switch(B=w,w=Pi()){case 40:if(B!=108&&nu(M,u-1)==58){rze(M+=u0(tN(w),"&","&\f"),"&\f",Nte(l?s[l-1]:0))!=-1&&(p=-1);break}case 34:case 39:case 91:M+=tN(w);break;case 9:case 10:case 13:case 32:M+=oze(B);break;case 92:M+=lze(g0()-1,7);continue;case 47:switch(ro()){case 42:case 47:Ip(dze(cze(Pi(),g0()),t,r,o),o),(pB(B||1)==5||pB(ro()||1)==5)&&ca(M)&&Mu(M,-1,void 0)!==" "&&(M+=" ");break;default:M+="/"}break;case 123*h:s[l++]=ca(M)*p;case 125*h:case 59:case 0:switch(w){case 0:case 125:f=0;case 59+c:p==-1&&(M=u0(M,/\f/g,"")),d>0&&(ca(M)-u||h===0&&B===47)&&Ip(d>32?IO(M+";",n,r,u-1,o):IO(u0(M," ","")+";",n,r,u-2,o),o);break;case 59:M+=";";default:if(Ip(I=mO(M,t,r,l,c,A,s,E,C=[],m=[],u,i),i),w===123)if(c===0)d0(M,t,I,I,C,i,u,s,m);else{switch(g){case 99:if(nu(M,3)===110)break;case 108:if(nu(M,2)===97)break;default:c=0;case 100:case 109:case 115:}c?d0(e,I,I,n&&Ip(mO(e,I,I,0,0,A,s,E,A,C=[],u,m),m),A,m,u,s,n?C:m):d0(M,I,I,I,[""],m,0,s,m)}}l=c=d=0,h=p=1,E=M="",u=a;break;case 58:u=1+ca(M),d=B;default:if(h<1){if(w==123)--h;else if(w==125&&h++==0&&ize()==125)continue}switch(M+=u2(w),w*h){case 38:p=c>0?1:(M+="\f",-1);break;case 44:s[l++]=(ca(M)-1)*p,p=1;break;case 64:ro()===45&&(M+=tN(Pi())),g=ro(),c=u=ca(E=M+=uze(g0())),w++;break;case 45:B===45&&ca(M)==2&&(h=0)}}return i}function mO(e,t,r,n,A,i,a,s,o,l,c,u){for(var g=A-1,d=A===0?i:[""],B=nze(d),h=0,f=0,p=0;h<n;++h)for(var w=0,E=Mu(e,g+1,g=Nte(f=a[h])),C=e;w<B;++w)(C=bte(f>0?d[w]+" "+E:u0(E,/&\f/g,d[w])))&&(o[p++]=C);return g2(e,t,r,A===0?Fte:s,o,l,c,u)}function dze(e,t,r,n){return g2(e,t,r,Mte,u2(Aze()),Mu(e,2,-2),0,n)}function IO(e,t,r,n,A){return g2(e,t,r,Yte,Mu(e,0,n),Mu(e,n+1,-1),n,A)}function Tx(e,t){for(var r="",n=0;n<e.length;n++)r+=t(e[n],n,e,t)||"";return r}function Bze(e,t,r,n){switch(e.type){case tze:if(e.children.length)break;case _je:case $je:case Yte:return e.return=e.return||e.value;case Mte:return"";case eze:return e.return=e.value+"{"+Tx(e.children,n)+"}";case Fte:if(!ca(e.value=e.props.join(",")))return""}return ca(r=Tx(e.children,n))?e.return=e.value+"{"+r+"}":""}var hze=r$(Object.keys,Object),pze=Object.prototype,wze=pze.hasOwnProperty;function fze(e){if(!DE(e))return hze(e);var t=[];for(var r in Object(e))wze.call(e,r)&&r!="constructor"&&t.push(r);return t}var Lx=Ac(ba,"DataView"),Hx=Ac(ba,"Promise"),Jx=Ac(ba,"Set"),Ox=Ac(ba,"WeakMap"),yO="[object Map]",Eze="[object Object]",CO="[object Promise]",QO="[object Set]",MO="[object WeakMap]",FO="[object DataView]",mze=nc(Lx),Ize=nc(dB),yze=nc(Hx),Cze=nc(Jx),Qze=nc(Ox),Zo=Ou;(Lx&&Zo(new Lx(new ArrayBuffer(1)))!=FO||dB&&Zo(new dB)!=yO||Hx&&Zo(Hx.resolve())!=CO||Jx&&Zo(new Jx)!=QO||Ox&&Zo(new Ox)!=MO)&&(Zo=function(e){var t=Ou(e),r=t==Eze?e.constructor:void 0,n=r?nc(r):"";if(n)switch(n){case mze:return FO;case Ize:return yO;case yze:return CO;case Cze:return QO;case Qze:return MO}return t});var Mze="[object Map]",Fze="[object Set]",Yze=Object.prototype,Nze=Yze.hasOwnProperty;function YO(e){if(e==null)return!0;if(kE(e)&&(Sw(e)||typeof e=="string"||typeof e.splice=="function"||JU(e)||OU(e)||kw(e)))return!e.length;var t=Zo(e);if(t==Mze||t==Fze)return!e.size;if(DE(e))return!fze(e).length;for(var r in e)if(Nze.call(e,r))return!1;return!0}var Dte="c4",bze=F(e=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(e),"detector"),xze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./c4Diagram-YG6GDRKO-DYXNcDX4-CkDkLR8J.js");return{diagram:t}},__vite__mapDeps([8,9]));return{id:Dte,diagram:e}},"loader"),Dze={id:Dte,detector:bze,loader:xze},kze=Dze,kte="flowchart",Sze=F((e,t)=>{var r,n;return((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="dagre-wrapper"||((n=t==null?void 0:t.flowchart)==null?void 0:n.defaultRenderer)==="elk"?!1:/^\s*graph/.test(e)},"detector"),Uze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./flowDiagram-NV44I4VS-pJlHae8Y-w_SaXPo5.js");return{diagram:t}},__vite__mapDeps([10,11,12,13,14]));return{id:kte,diagram:e}},"loader"),vze={id:kte,detector:Sze,loader:Uze},Gze=vze,Ste="flowchart-v2",Rze=F((e,t)=>{var r,n,A;return((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="dagre-d3"?!1:(((n=t==null?void 0:t.flowchart)==null?void 0:n.defaultRenderer)==="elk"&&(t.layout="elk"),/^\s*graph/.test(e)&&((A=t==null?void 0:t.flowchart)==null?void 0:A.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(e))},"detector"),jze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./flowDiagram-NV44I4VS-pJlHae8Y-w_SaXPo5.js");return{diagram:t}},__vite__mapDeps([10,11,12,13,14]));return{id:Ste,diagram:e}},"loader"),zze={id:Ste,detector:Rze,loader:jze},Tze=zze,Ute="er",Lze=F(e=>/^\s*erDiagram/.test(e),"detector"),Hze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./erDiagram-Q2GNP2WA-DbLpN8Jp-DYKYq2TK.js");return{diagram:t}},__vite__mapDeps([15,12,13,14]));return{id:Ute,diagram:e}},"loader"),Jze={id:Ute,detector:Lze,loader:Hze},Oze=Jze,vte="gitGraph",Wze=F(e=>/^\s*gitGraph/.test(e),"detector"),Pze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./gitGraphDiagram-NY62KEGX-DgYonpsZ-DVkG4gJm.js");return{diagram:t}},__vite__mapDeps([16,17,18,19,4,2]));return{id:vte,diagram:e}},"loader"),Kze={id:vte,detector:Wze,loader:Pze},Vze=Kze,Gte="gantt",Xze=F(e=>/^\s*gantt/.test(e),"detector"),Zze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./ganttDiagram-JELNMOA3-J0Tkq5TR-BUWW8Vh3.js");return{diagram:t}},[]);return{id:Gte,diagram:e}},"loader"),qze={id:Gte,detector:Xze,loader:Zze},_ze=qze,Rte="info",$ze=F(e=>/^\s*info/.test(e),"detector"),eTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./infoDiagram-WHAUD3N6-C3JLOAnb-J7NBmmZy.js");return{diagram:t}},__vite__mapDeps([20,19,4,2]));return{id:Rte,diagram:e}},"loader"),tTe={id:Rte,detector:$ze,loader:eTe},jte="pie",rTe=F(e=>/^\s*pie/.test(e),"detector"),nTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./pieDiagram-ADFJNKIX-BiQvDx8I-uvDnxJ2Z.js");return{diagram:t}},__vite__mapDeps([21,17,19,4,2,22]));return{id:jte,diagram:e}},"loader"),ATe={id:jte,detector:rTe,loader:nTe},zte="quadrantChart",iTe=F(e=>/^\s*quadrantChart/.test(e),"detector"),aTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./quadrantDiagram-AYHSOK5B-D4b-YFzI-LNbfTy1s.js");return{diagram:t}},[]);return{id:zte,diagram:e}},"loader"),sTe={id:zte,detector:iTe,loader:aTe},oTe=sTe,Tte="xychart",lTe=F(e=>/^\s*xychart(-beta)?/.test(e),"detector"),cTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./xychartDiagram-PRI3JC2R-JzAaXa5z-gbTE5_4p.js");return{diagram:t}},[]);return{id:Tte,diagram:e}},"loader"),uTe={id:Tte,detector:lTe,loader:cTe},gTe=uTe,Lte="requirement",dTe=F(e=>/^\s*requirement(Diagram)?/.test(e),"detector"),BTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./requirementDiagram-UZGBJVZJ-km07nlVd-CmoRq-uT.js");return{diagram:t}},__vite__mapDeps([23,12,13]));return{id:Lte,diagram:e}},"loader"),hTe={id:Lte,detector:dTe,loader:BTe},pTe=hTe,Hte="sequence",wTe=F(e=>/^\s*sequenceDiagram/.test(e),"detector"),fTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./sequenceDiagram-WL72ISMW-CQ4J-0_7-B9dEWgb1.js");return{diagram:t}},__vite__mapDeps([24,9,18]));return{id:Hte,diagram:e}},"loader"),ETe={id:Hte,detector:wTe,loader:fTe},mTe=ETe,Jte="class",ITe=F((e,t)=>{var r;return((r=t==null?void 0:t.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(e)},"detector"),yTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./classDiagram-2ON5EDUG-CxmgTanh-BrY4hA_F.js");return{diagram:t}},__vite__mapDeps([25,26,11,12,13]));return{id:Jte,diagram:e}},"loader"),CTe={id:Jte,detector:ITe,loader:yTe},QTe=CTe,Ote="classDiagram",MTe=F((e,t)=>{var r;return/^\s*classDiagram/.test(e)&&((r=t==null?void 0:t.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(e)},"detector"),FTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./classDiagram-v2-WZHVMYZB-CxmgTanh-BrY4hA_F.js");return{diagram:t}},__vite__mapDeps([27,26,11,12,13]));return{id:Ote,diagram:e}},"loader"),YTe={id:Ote,detector:MTe,loader:FTe},NTe=YTe,Wte="state",bTe=F((e,t)=>{var r;return((r=t==null?void 0:t.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(e)},"detector"),xTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./stateDiagram-FKZM4ZOC-JtogJwt6-CJ7OoUqc.js");return{diagram:t}},__vite__mapDeps([28,29,12,13,1,2,3,4]));return{id:Wte,diagram:e}},"loader"),DTe={id:Wte,detector:bTe,loader:xTe},kTe=DTe,Pte="stateDiagram",STe=F((e,t)=>{var r;return!!(/^\s*stateDiagram-v2/.test(e)||/^\s*stateDiagram/.test(e)&&((r=t==null?void 0:t.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper")},"detector"),UTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./stateDiagram-v2-4FDKWEC3-DuQ7UaeU-ubmB1Vwq.js");return{diagram:t}},__vite__mapDeps([30,29,12,13]));return{id:Pte,diagram:e}},"loader"),vTe={id:Pte,detector:STe,loader:UTe},GTe=vTe,Kte="journey",RTe=F(e=>/^\s*journey/.test(e),"detector"),jTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./journeyDiagram-XKPGCS4Q-CfjB2Qdf-q42mmSWQ.js");return{diagram:t}},__vite__mapDeps([31,9,11,22]));return{id:Kte,diagram:e}},"loader"),zTe={id:Kte,detector:RTe,loader:jTe},TTe=zTe,LTe=F((e,t,r)=>{ue.debug(`rendering svg for syntax error
826
- `);const n=ISe(t),A=n.append("g");n.attr("viewBox","0 0 2412 512"),LX(n,100,512,!0),A.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),A.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),A.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),A.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),A.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),A.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),A.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),A.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),Vte={draw:LTe},HTe=Vte,JTe={db:{},renderer:Vte,parser:{parse:F(()=>{},"parse")}},OTe=JTe,Xte="flowchart-elk",WTe=F((e,t={})=>{var r;return/^\s*flowchart-elk/.test(e)||/^\s*(flowchart|graph)/.test(e)&&((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="elk"?(t.layout="elk",!0):!1},"detector"),PTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./flowDiagram-NV44I4VS-pJlHae8Y-w_SaXPo5.js");return{diagram:t}},__vite__mapDeps([10,11,12,13,14]));return{id:Xte,diagram:e}},"loader"),KTe={id:Xte,detector:WTe,loader:PTe},VTe=KTe,Zte="timeline",XTe=F(e=>/^\s*timeline/.test(e),"detector"),ZTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./timeline-definition-IT6M3QCI-Cs3NnF2M-CFWhYq_j.js");return{diagram:t}},__vite__mapDeps([32,22]));return{id:Zte,diagram:e}},"loader"),qTe={id:Zte,detector:XTe,loader:ZTe},_Te=qTe,qte="mindmap",$Te=F(e=>/^\s*mindmap/.test(e),"detector"),eLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./mindmap-definition-VGOIOE7T-Dj37RkY_-CXHE_MUG.js");return{diagram:t}},__vite__mapDeps([33,12,13]));return{id:qte,diagram:e}},"loader"),tLe={id:qte,detector:$Te,loader:eLe},rLe=tLe,_te="kanban",nLe=F(e=>/^\s*kanban/.test(e),"detector"),ALe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./kanban-definition-3W4ZIXB7-CrW8yVmd-CGzKMkjY.js");return{diagram:t}},__vite__mapDeps([34,11]));return{id:_te,diagram:e}},"loader"),iLe={id:_te,detector:nLe,loader:ALe},aLe=iLe,$te="sankey",sLe=F(e=>/^\s*sankey(-beta)?/.test(e),"detector"),oLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./sankeyDiagram-TZEHDZUN-LfuSRRbf-AwLbzDXN.js");return{diagram:t}},[]);return{id:$te,diagram:e}},"loader"),lLe={id:$te,detector:sLe,loader:oLe},cLe=lLe,ere="packet",uLe=F(e=>/^\s*packet(-beta)?/.test(e),"detector"),gLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./diagram-S2PKOQOG-IEqaDwzi-SM6e96a5.js");return{diagram:t}},__vite__mapDeps([35,17,19,4,2]));return{id:ere,diagram:e}},"loader"),dLe={id:ere,detector:uLe,loader:gLe},tre="radar",BLe=F(e=>/^\s*radar-beta/.test(e),"detector"),hLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./diagram-QEK2KX5R-BDO6hKtm-ByxFKswO.js");return{diagram:t}},__vite__mapDeps([36,17,19,4,2]));return{id:tre,diagram:e}},"loader"),pLe={id:tre,detector:BLe,loader:hLe},rre="block",wLe=F(e=>/^\s*block(-beta)?/.test(e),"detector"),fLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./blockDiagram-VD42YOAC-zcRIdFTD-C7ZYwyCi.js");return{diagram:t}},__vite__mapDeps([37,11,5,1,2,14]));return{id:rre,diagram:e}},"loader"),ELe={id:rre,detector:wLe,loader:fLe},mLe=ELe,nre="architecture",ILe=F(e=>/^\s*architecture/.test(e),"detector"),yLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./architectureDiagram-VXUJARFQ-BiqZtsDe-N3Ea-ens.js");return{diagram:t}},__vite__mapDeps([38,17,19,4,2,7]));return{id:nre,diagram:e}},"loader"),CLe={id:nre,detector:ILe,loader:yLe},QLe=CLe,Are="treemap",MLe=F(e=>/^\s*treemap/.test(e),"detector"),FLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./diagram-PSM6KHXK-DNX818To-BJwExkYa.js");return{diagram:t}},__vite__mapDeps([39,13,17,19,4,2]));return{id:Are,diagram:e}},"loader"),YLe={id:Are,detector:MLe,loader:FLe},NO=!1,JE=F(()=>{NO||(NO=!0,aw("error",OTe,e=>e.toLowerCase().trim()==="error"),aw("---",{db:{clear:F(()=>{},"clear")},styles:{},renderer:{draw:F(()=>{},"draw")},parser:{parse:F(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:F(()=>null,"init")},e=>e.toLowerCase().trimStart().startsWith("---")),Wb(VTe,rLe,QLe),Wb(kze,aLe,NTe,QTe,Oze,_ze,tTe,ATe,pTe,mTe,Tze,Gze,_Te,Vze,GTe,kTe,TTe,oTe,cLe,dLe,gTe,mLe,pLe,YLe))},"addDiagrams"),NLe=F(async()=>{ue.debug("Loading registered diagrams");const e=(await Promise.allSettled(Object.entries(bl).map(async([t,{detector:r,loader:n}])=>{if(n)try{Xb(t)}catch{try{const{diagram:A,id:i}=await n();aw(i,A,r)}catch(A){throw ue.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete bl[t],A}}}))).filter(t=>t.status==="rejected");if(e.length>0){ue.error(`Failed to load ${e.length} external diagrams`);for(const t of e)ue.error(t);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams"),bLe="graphics-document document";function ire(e,t){e.attr("role",bLe),t!==""&&e.attr("aria-roledescription",t)}F(ire,"setA11yDiagramInfo");function are(e,t,r,n){if(e.insert!==void 0){if(r){const A=`chart-desc-${n}`;e.attr("aria-describedby",A),e.insert("desc",":first-child").attr("id",A).text(r)}if(t){const A=`chart-title-${n}`;e.attr("aria-labelledby",A),e.insert("title",":first-child").attr("id",A).text(t)}}}F(are,"addSVGa11yTitleDescription");var yp,Wx=(yp=class{constructor(e,t,r,n,A){this.type=e,this.text=t,this.db=r,this.parser=n,this.renderer=A}static async fromText(e,t={}){var r,n;const A=Jn(),i=RS(e,A);e=YGe(e)+`
825
+ L0,20`)},"requirement_arrow"),Kje=F((e,t,r)=>{const n=e.append("defs").append("marker").attr("id",r+"_"+t+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),Vje={extension:Sje,composition:Uje,aggregation:vje,dependency:Gje,lollipop:Rje,point:jje,circle:zje,cross:Tje,barb:Lje,only_one:Hje,zero_or_one:Jje,one_or_more:Oje,zero_or_more:Wje,requirement_arrow:Pje,requirement_contains:Kje},Xje=kje,Zje={common:Lu,getConfig:Jn,insertCluster:Aje,insertEdge:Dje,insertEdgeLabel:Mje,insertMarkers:Xje,insertNode:mte,interpolateToCurve:WU,labelHelper:nt,log:ue,positionEdgeLabel:Fje},hB={},Qte=F(e=>{for(const t of e)hB[t.name]=t},"registerLayoutLoaders"),qje=F(()=>{Qte([{name:"dagre",loader:F(async()=>await Yt(()=>import("./dagre-6UL2VRFP-DX8gNHmJ-DY2mXPk6.js"),__vite__mapDeps([0,1,2,3,4,5])),"loader")},{name:"cose-bilkent",loader:F(async()=>await Yt(()=>import("./cose-bilkent-S5V4N54A-BRr2Y6dg-D6srnG6T.js"),__vite__mapDeps([6,7])),"loader")}])},"registerDefaultLayoutLoaders");qje();var z$e=F(async(e,t)=>{if(!(e.layoutAlgorithm in hB))throw new Error(`Unknown layout algorithm: ${e.layoutAlgorithm}`);const r=hB[e.layoutAlgorithm];return(await r.loader()).render(e,t,Zje,{algorithm:r.algorithm})},"render"),T$e=F((e="",{fallback:t="dagre"}={})=>{if(e in hB)return e;if(t in hB)return ue.warn(`Layout algorithm ${e} is not registered. Using ${t} as fallback.`),t;throw new Error(`Both layout algorithms ${e} and ${t} are not registered.`)},"getRegisteredLayoutAlgorithm"),Mte="comm",Fte="rule",Yte="decl",_je="@import",$je="@namespace",eze="@keyframes",tze="@layer",Nte=Math.abs,u2=String.fromCharCode;function bte(e){return e.trim()}function u0(e,t,r){return e.replace(t,r)}function rze(e,t,r){return e.indexOf(t,r)}function nu(e,t){return e.charCodeAt(t)|0}function Mu(e,t,r){return e.slice(t,r)}function ca(e){return e.length}function nze(e){return e.length}function Ip(e,t){return t.push(e),e}var LE=1,Fu=1,xte=0,Ei=0,Kr=0,Ku="";function g2(e,t,r,n,A,i,a,s){return{value:e,root:t,parent:r,type:n,props:A,children:i,line:LE,column:Fu,length:a,return:"",siblings:s}}function Aze(){return Kr}function ize(){return Kr=Ei>0?nu(Ku,--Ei):0,Fu--,Kr===10&&(Fu=1,LE--),Kr}function Pi(){return Kr=Ei<xte?nu(Ku,Ei++):0,Fu++,Kr===10&&(Fu=1,LE++),Kr}function ro(){return nu(Ku,Ei)}function g0(){return Ei}function HE(e,t){return Mu(Ku,e,t)}function pB(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function aze(e){return LE=Fu=1,xte=ca(Ku=e),Ei=0,[]}function sze(e){return Ku="",e}function tN(e){return bte(HE(Ei-1,zx(e===91?e+2:e===40?e+1:e)))}function oze(e){for(;(Kr=ro())&&Kr<33;)Pi();return pB(e)>2||pB(Kr)>3?"":" "}function lze(e,t){for(;--t&&Pi()&&!(Kr<48||Kr>102||Kr>57&&Kr<65||Kr>70&&Kr<97););return HE(e,g0()+(t<6&&ro()==32&&Pi()==32))}function zx(e){for(;Pi();)switch(Kr){case e:return Ei;case 34:case 39:e!==34&&e!==39&&zx(Kr);break;case 40:e===41&&zx(e);break;case 92:Pi();break}return Ei}function cze(e,t){for(;Pi()&&e+Kr!==57&&!(e+Kr===84&&ro()===47););return"/*"+HE(t,Ei-1)+"*"+u2(e===47?e:Pi())}function uze(e){for(;!pB(ro());)Pi();return HE(e,Ei)}function gze(e){return sze(d0("",null,null,null,[""],e=aze(e),0,[0],e))}function d0(e,t,r,n,A,i,a,s,o){for(var l=0,c=0,u=a,g=0,d=0,B=0,h=1,f=1,p=1,w=0,E="",C=A,m=i,I=n,M=E;f;)switch(B=w,w=Pi()){case 40:if(B!=108&&nu(M,u-1)==58){rze(M+=u0(tN(w),"&","&\f"),"&\f",Nte(l?s[l-1]:0))!=-1&&(p=-1);break}case 34:case 39:case 91:M+=tN(w);break;case 9:case 10:case 13:case 32:M+=oze(B);break;case 92:M+=lze(g0()-1,7);continue;case 47:switch(ro()){case 42:case 47:Ip(dze(cze(Pi(),g0()),t,r,o),o),(pB(B||1)==5||pB(ro()||1)==5)&&ca(M)&&Mu(M,-1,void 0)!==" "&&(M+=" ");break;default:M+="/"}break;case 123*h:s[l++]=ca(M)*p;case 125*h:case 59:case 0:switch(w){case 0:case 125:f=0;case 59+c:p==-1&&(M=u0(M,/\f/g,"")),d>0&&(ca(M)-u||h===0&&B===47)&&Ip(d>32?IO(M+";",n,r,u-1,o):IO(u0(M," ","")+";",n,r,u-2,o),o);break;case 59:M+=";";default:if(Ip(I=mO(M,t,r,l,c,A,s,E,C=[],m=[],u,i),i),w===123)if(c===0)d0(M,t,I,I,C,i,u,s,m);else{switch(g){case 99:if(nu(M,3)===110)break;case 108:if(nu(M,2)===97)break;default:c=0;case 100:case 109:case 115:}c?d0(e,I,I,n&&Ip(mO(e,I,I,0,0,A,s,E,A,C=[],u,m),m),A,m,u,s,n?C:m):d0(M,I,I,I,[""],m,0,s,m)}}l=c=d=0,h=p=1,E=M="",u=a;break;case 58:u=1+ca(M),d=B;default:if(h<1){if(w==123)--h;else if(w==125&&h++==0&&ize()==125)continue}switch(M+=u2(w),w*h){case 38:p=c>0?1:(M+="\f",-1);break;case 44:s[l++]=(ca(M)-1)*p,p=1;break;case 64:ro()===45&&(M+=tN(Pi())),g=ro(),c=u=ca(E=M+=uze(g0())),w++;break;case 45:B===45&&ca(M)==2&&(h=0)}}return i}function mO(e,t,r,n,A,i,a,s,o,l,c,u){for(var g=A-1,d=A===0?i:[""],B=nze(d),h=0,f=0,p=0;h<n;++h)for(var w=0,E=Mu(e,g+1,g=Nte(f=a[h])),C=e;w<B;++w)(C=bte(f>0?d[w]+" "+E:u0(E,/&\f/g,d[w])))&&(o[p++]=C);return g2(e,t,r,A===0?Fte:s,o,l,c,u)}function dze(e,t,r,n){return g2(e,t,r,Mte,u2(Aze()),Mu(e,2,-2),0,n)}function IO(e,t,r,n,A){return g2(e,t,r,Yte,Mu(e,0,n),Mu(e,n+1,-1),n,A)}function Tx(e,t){for(var r="",n=0;n<e.length;n++)r+=t(e[n],n,e,t)||"";return r}function Bze(e,t,r,n){switch(e.type){case tze:if(e.children.length)break;case _je:case $je:case Yte:return e.return=e.return||e.value;case Mte:return"";case eze:return e.return=e.value+"{"+Tx(e.children,n)+"}";case Fte:if(!ca(e.value=e.props.join(",")))return""}return ca(r=Tx(e.children,n))?e.return=e.value+"{"+r+"}":""}var hze=r$(Object.keys,Object),pze=Object.prototype,wze=pze.hasOwnProperty;function fze(e){if(!DE(e))return hze(e);var t=[];for(var r in Object(e))wze.call(e,r)&&r!="constructor"&&t.push(r);return t}var Lx=Ac(ba,"DataView"),Hx=Ac(ba,"Promise"),Jx=Ac(ba,"Set"),Ox=Ac(ba,"WeakMap"),yO="[object Map]",Eze="[object Object]",CO="[object Promise]",QO="[object Set]",MO="[object WeakMap]",FO="[object DataView]",mze=nc(Lx),Ize=nc(dB),yze=nc(Hx),Cze=nc(Jx),Qze=nc(Ox),Zo=Ou;(Lx&&Zo(new Lx(new ArrayBuffer(1)))!=FO||dB&&Zo(new dB)!=yO||Hx&&Zo(Hx.resolve())!=CO||Jx&&Zo(new Jx)!=QO||Ox&&Zo(new Ox)!=MO)&&(Zo=function(e){var t=Ou(e),r=t==Eze?e.constructor:void 0,n=r?nc(r):"";if(n)switch(n){case mze:return FO;case Ize:return yO;case yze:return CO;case Cze:return QO;case Qze:return MO}return t});var Mze="[object Map]",Fze="[object Set]",Yze=Object.prototype,Nze=Yze.hasOwnProperty;function YO(e){if(e==null)return!0;if(kE(e)&&(Sw(e)||typeof e=="string"||typeof e.splice=="function"||JU(e)||OU(e)||kw(e)))return!e.length;var t=Zo(e);if(t==Mze||t==Fze)return!e.size;if(DE(e))return!fze(e).length;for(var r in e)if(Nze.call(e,r))return!1;return!0}var Dte="c4",bze=F(e=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(e),"detector"),xze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./c4Diagram-YG6GDRKO-DYXNcDX4-DV2FxwI1.js");return{diagram:t}},__vite__mapDeps([8,9]));return{id:Dte,diagram:e}},"loader"),Dze={id:Dte,detector:bze,loader:xze},kze=Dze,kte="flowchart",Sze=F((e,t)=>{var r,n;return((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="dagre-wrapper"||((n=t==null?void 0:t.flowchart)==null?void 0:n.defaultRenderer)==="elk"?!1:/^\s*graph/.test(e)},"detector"),Uze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./flowDiagram-NV44I4VS-pJlHae8Y-KdNpxtgw.js");return{diagram:t}},__vite__mapDeps([10,11,12,13,14]));return{id:kte,diagram:e}},"loader"),vze={id:kte,detector:Sze,loader:Uze},Gze=vze,Ste="flowchart-v2",Rze=F((e,t)=>{var r,n,A;return((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="dagre-d3"?!1:(((n=t==null?void 0:t.flowchart)==null?void 0:n.defaultRenderer)==="elk"&&(t.layout="elk"),/^\s*graph/.test(e)&&((A=t==null?void 0:t.flowchart)==null?void 0:A.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(e))},"detector"),jze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./flowDiagram-NV44I4VS-pJlHae8Y-KdNpxtgw.js");return{diagram:t}},__vite__mapDeps([10,11,12,13,14]));return{id:Ste,diagram:e}},"loader"),zze={id:Ste,detector:Rze,loader:jze},Tze=zze,Ute="er",Lze=F(e=>/^\s*erDiagram/.test(e),"detector"),Hze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./erDiagram-Q2GNP2WA-DbLpN8Jp-kLI5X3NK.js");return{diagram:t}},__vite__mapDeps([15,12,13,14]));return{id:Ute,diagram:e}},"loader"),Jze={id:Ute,detector:Lze,loader:Hze},Oze=Jze,vte="gitGraph",Wze=F(e=>/^\s*gitGraph/.test(e),"detector"),Pze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./gitGraphDiagram-NY62KEGX-DgYonpsZ-fwt1Apbh.js");return{diagram:t}},__vite__mapDeps([16,17,18,19,4,2]));return{id:vte,diagram:e}},"loader"),Kze={id:vte,detector:Wze,loader:Pze},Vze=Kze,Gte="gantt",Xze=F(e=>/^\s*gantt/.test(e),"detector"),Zze=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./ganttDiagram-JELNMOA3-J0Tkq5TR-BYwsQjUP.js");return{diagram:t}},[]);return{id:Gte,diagram:e}},"loader"),qze={id:Gte,detector:Xze,loader:Zze},_ze=qze,Rte="info",$ze=F(e=>/^\s*info/.test(e),"detector"),eTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./infoDiagram-WHAUD3N6-C3JLOAnb-Duinz6LB.js");return{diagram:t}},__vite__mapDeps([20,19,4,2]));return{id:Rte,diagram:e}},"loader"),tTe={id:Rte,detector:$ze,loader:eTe},jte="pie",rTe=F(e=>/^\s*pie/.test(e),"detector"),nTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./pieDiagram-ADFJNKIX-BiQvDx8I-DzI_ztgk.js");return{diagram:t}},__vite__mapDeps([21,17,19,4,2,22]));return{id:jte,diagram:e}},"loader"),ATe={id:jte,detector:rTe,loader:nTe},zte="quadrantChart",iTe=F(e=>/^\s*quadrantChart/.test(e),"detector"),aTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./quadrantDiagram-AYHSOK5B-D4b-YFzI-BRb9byvQ.js");return{diagram:t}},[]);return{id:zte,diagram:e}},"loader"),sTe={id:zte,detector:iTe,loader:aTe},oTe=sTe,Tte="xychart",lTe=F(e=>/^\s*xychart(-beta)?/.test(e),"detector"),cTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./xychartDiagram-PRI3JC2R-JzAaXa5z-C71Ro9b8.js");return{diagram:t}},[]);return{id:Tte,diagram:e}},"loader"),uTe={id:Tte,detector:lTe,loader:cTe},gTe=uTe,Lte="requirement",dTe=F(e=>/^\s*requirement(Diagram)?/.test(e),"detector"),BTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./requirementDiagram-UZGBJVZJ-km07nlVd-CVrxKvmF.js");return{diagram:t}},__vite__mapDeps([23,12,13]));return{id:Lte,diagram:e}},"loader"),hTe={id:Lte,detector:dTe,loader:BTe},pTe=hTe,Hte="sequence",wTe=F(e=>/^\s*sequenceDiagram/.test(e),"detector"),fTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./sequenceDiagram-WL72ISMW-CQ4J-0_7-Dv0HcJtc.js");return{diagram:t}},__vite__mapDeps([24,9,18]));return{id:Hte,diagram:e}},"loader"),ETe={id:Hte,detector:wTe,loader:fTe},mTe=ETe,Jte="class",ITe=F((e,t)=>{var r;return((r=t==null?void 0:t.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(e)},"detector"),yTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./classDiagram-2ON5EDUG-CxmgTanh-BRBnzZai.js");return{diagram:t}},__vite__mapDeps([25,26,11,12,13]));return{id:Jte,diagram:e}},"loader"),CTe={id:Jte,detector:ITe,loader:yTe},QTe=CTe,Ote="classDiagram",MTe=F((e,t)=>{var r;return/^\s*classDiagram/.test(e)&&((r=t==null?void 0:t.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(e)},"detector"),FTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./classDiagram-v2-WZHVMYZB-CxmgTanh-BRBnzZai.js");return{diagram:t}},__vite__mapDeps([27,26,11,12,13]));return{id:Ote,diagram:e}},"loader"),YTe={id:Ote,detector:MTe,loader:FTe},NTe=YTe,Wte="state",bTe=F((e,t)=>{var r;return((r=t==null?void 0:t.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(e)},"detector"),xTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./stateDiagram-FKZM4ZOC-JtogJwt6-BQvKg7k9.js");return{diagram:t}},__vite__mapDeps([28,29,12,13,1,2,3,4]));return{id:Wte,diagram:e}},"loader"),DTe={id:Wte,detector:bTe,loader:xTe},kTe=DTe,Pte="stateDiagram",STe=F((e,t)=>{var r;return!!(/^\s*stateDiagram-v2/.test(e)||/^\s*stateDiagram/.test(e)&&((r=t==null?void 0:t.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper")},"detector"),UTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./stateDiagram-v2-4FDKWEC3-DuQ7UaeU-DAhUMAAL.js");return{diagram:t}},__vite__mapDeps([30,29,12,13]));return{id:Pte,diagram:e}},"loader"),vTe={id:Pte,detector:STe,loader:UTe},GTe=vTe,Kte="journey",RTe=F(e=>/^\s*journey/.test(e),"detector"),jTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./journeyDiagram-XKPGCS4Q-CfjB2Qdf-M8lEOFeA.js");return{diagram:t}},__vite__mapDeps([31,9,11,22]));return{id:Kte,diagram:e}},"loader"),zTe={id:Kte,detector:RTe,loader:jTe},TTe=zTe,LTe=F((e,t,r)=>{ue.debug(`rendering svg for syntax error
826
+ `);const n=ISe(t),A=n.append("g");n.attr("viewBox","0 0 2412 512"),LX(n,100,512,!0),A.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),A.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),A.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),A.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),A.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),A.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),A.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),A.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),Vte={draw:LTe},HTe=Vte,JTe={db:{},renderer:Vte,parser:{parse:F(()=>{},"parse")}},OTe=JTe,Xte="flowchart-elk",WTe=F((e,t={})=>{var r;return/^\s*flowchart-elk/.test(e)||/^\s*(flowchart|graph)/.test(e)&&((r=t==null?void 0:t.flowchart)==null?void 0:r.defaultRenderer)==="elk"?(t.layout="elk",!0):!1},"detector"),PTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./flowDiagram-NV44I4VS-pJlHae8Y-KdNpxtgw.js");return{diagram:t}},__vite__mapDeps([10,11,12,13,14]));return{id:Xte,diagram:e}},"loader"),KTe={id:Xte,detector:WTe,loader:PTe},VTe=KTe,Zte="timeline",XTe=F(e=>/^\s*timeline/.test(e),"detector"),ZTe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./timeline-definition-IT6M3QCI-Cs3NnF2M-Dl2mtkIb.js");return{diagram:t}},__vite__mapDeps([32,22]));return{id:Zte,diagram:e}},"loader"),qTe={id:Zte,detector:XTe,loader:ZTe},_Te=qTe,qte="mindmap",$Te=F(e=>/^\s*mindmap/.test(e),"detector"),eLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./mindmap-definition-VGOIOE7T-Dj37RkY_-rm-yjGNJ.js");return{diagram:t}},__vite__mapDeps([33,12,13]));return{id:qte,diagram:e}},"loader"),tLe={id:qte,detector:$Te,loader:eLe},rLe=tLe,_te="kanban",nLe=F(e=>/^\s*kanban/.test(e),"detector"),ALe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./kanban-definition-3W4ZIXB7-CrW8yVmd-DRvLAtM2.js");return{diagram:t}},__vite__mapDeps([34,11]));return{id:_te,diagram:e}},"loader"),iLe={id:_te,detector:nLe,loader:ALe},aLe=iLe,$te="sankey",sLe=F(e=>/^\s*sankey(-beta)?/.test(e),"detector"),oLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./sankeyDiagram-TZEHDZUN-LfuSRRbf-BfgMrETy.js");return{diagram:t}},[]);return{id:$te,diagram:e}},"loader"),lLe={id:$te,detector:sLe,loader:oLe},cLe=lLe,ere="packet",uLe=F(e=>/^\s*packet(-beta)?/.test(e),"detector"),gLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./diagram-S2PKOQOG-IEqaDwzi-CXgNrmg9.js");return{diagram:t}},__vite__mapDeps([35,17,19,4,2]));return{id:ere,diagram:e}},"loader"),dLe={id:ere,detector:uLe,loader:gLe},tre="radar",BLe=F(e=>/^\s*radar-beta/.test(e),"detector"),hLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./diagram-QEK2KX5R-BDO6hKtm-CbW1gJs_.js");return{diagram:t}},__vite__mapDeps([36,17,19,4,2]));return{id:tre,diagram:e}},"loader"),pLe={id:tre,detector:BLe,loader:hLe},rre="block",wLe=F(e=>/^\s*block(-beta)?/.test(e),"detector"),fLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./blockDiagram-VD42YOAC-zcRIdFTD-DU-jA4YR.js");return{diagram:t}},__vite__mapDeps([37,11,5,1,2,14]));return{id:rre,diagram:e}},"loader"),ELe={id:rre,detector:wLe,loader:fLe},mLe=ELe,nre="architecture",ILe=F(e=>/^\s*architecture/.test(e),"detector"),yLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./architectureDiagram-VXUJARFQ-BiqZtsDe-CUND7b3n.js");return{diagram:t}},__vite__mapDeps([38,17,19,4,2,7]));return{id:nre,diagram:e}},"loader"),CLe={id:nre,detector:ILe,loader:yLe},QLe=CLe,Are="treemap",MLe=F(e=>/^\s*treemap/.test(e),"detector"),FLe=F(async()=>{const{diagram:e}=await Yt(async()=>{const{diagram:t}=await import("./diagram-PSM6KHXK-DNX818To-CWog8RIY.js");return{diagram:t}},__vite__mapDeps([39,13,17,19,4,2]));return{id:Are,diagram:e}},"loader"),YLe={id:Are,detector:MLe,loader:FLe},NO=!1,JE=F(()=>{NO||(NO=!0,aw("error",OTe,e=>e.toLowerCase().trim()==="error"),aw("---",{db:{clear:F(()=>{},"clear")},styles:{},renderer:{draw:F(()=>{},"draw")},parser:{parse:F(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:F(()=>null,"init")},e=>e.toLowerCase().trimStart().startsWith("---")),Wb(VTe,rLe,QLe),Wb(kze,aLe,NTe,QTe,Oze,_ze,tTe,ATe,pTe,mTe,Tze,Gze,_Te,Vze,GTe,kTe,TTe,oTe,cLe,dLe,gTe,mLe,pLe,YLe))},"addDiagrams"),NLe=F(async()=>{ue.debug("Loading registered diagrams");const e=(await Promise.allSettled(Object.entries(bl).map(async([t,{detector:r,loader:n}])=>{if(n)try{Xb(t)}catch{try{const{diagram:A,id:i}=await n();aw(i,A,r)}catch(A){throw ue.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete bl[t],A}}}))).filter(t=>t.status==="rejected");if(e.length>0){ue.error(`Failed to load ${e.length} external diagrams`);for(const t of e)ue.error(t);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams"),bLe="graphics-document document";function ire(e,t){e.attr("role",bLe),t!==""&&e.attr("aria-roledescription",t)}F(ire,"setA11yDiagramInfo");function are(e,t,r,n){if(e.insert!==void 0){if(r){const A=`chart-desc-${n}`;e.attr("aria-describedby",A),e.insert("desc",":first-child").attr("id",A).text(r)}if(t){const A=`chart-title-${n}`;e.attr("aria-labelledby",A),e.insert("title",":first-child").attr("id",A).text(t)}}}F(are,"addSVGa11yTitleDescription");var yp,Wx=(yp=class{constructor(e,t,r,n,A){this.type=e,this.text=t,this.db=r,this.parser=n,this.renderer=A}static async fromText(e,t={}){var r,n;const A=Jn(),i=RS(e,A);e=YGe(e)+`
827
827
  `;try{Xb(i)}catch{const c=kFe(i);if(!c)throw new bX(`Diagram ${i} not found.`);const{id:u,diagram:g}=await c();aw(u,g)}const{db:a,parser:s,renderer:o,init:l}=Xb(i);return s.parser&&(s.parser.yy=a),(r=a.clear)==null||r.call(a),l==null||l(A),t.title&&((n=a.setDiagramTitle)==null||n.call(a,t.title)),await s.parse(e),new yp(i,e,a,s,o)}async render(e,t){await this.renderer.draw(this.text,e,t,this)}getParser(){return this.parser}getType(){return this.type}},F(yp,"Diagram"),yp),bO=[],xLe=F(()=>{bO.forEach(e=>{e()}),bO=[]},"attachFunctions"),DLe=F(e=>e.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");function sre(e){const t=e.match(NX);if(!t)return{text:e,metadata:{}};let r=NUe(t[1],{schema:YUe})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};const n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:e.slice(t[0].length),metadata:n}}F(sre,"extractFrontMatter");var kLe=F(e=>e.replace(/\r\n?/g,`
828
828
  `).replace(/<(\w+)([^>]*)>/g,(t,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),SLe=F(e=>{const{text:t,metadata:r}=sre(e),{displayMode:n,title:A,config:i={}}=r;return n&&(i.gantt||(i.gantt={}),i.gantt.displayMode=n),{title:A,config:i,text:t}},"processFrontmatter"),ULe=F(e=>{const t=zi.detectInit(e)??{},r=zi.detectDirective(e,"wrap");return Array.isArray(r)?t.wrap=r.some(({type:n})=>n==="wrap"):(r==null?void 0:r.type)==="wrap"&&(t.wrap=!0),{text:BGe(e),directive:t}},"processDirectives");function d2(e){const t=kLe(e),r=SLe(t),n=ULe(r.text),A=ZU(r.config,n.directive);return e=DLe(n.text),{code:e,title:r.title,config:A}}F(d2,"preprocessDiagram");function ore(e){const t=new TextEncoder().encode(e),r=Array.from(t,n=>String.fromCodePoint(n)).join("");return btoa(r)}F(ore,"toBase64");var vLe=5e4,GLe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",RLe="sandbox",jLe="loose",zLe="http://www.w3.org/2000/svg",TLe="http://www.w3.org/1999/xlink",LLe="http://www.w3.org/1999/xhtml",HLe="100%",JLe="100%",OLe="border:0;margin:0;",WLe="margin:0",PLe="allow-top-navigation-by-user-activation allow-popups",KLe='The "iframe" tag is not supported by your browser.',VLe=["foreignobject"],XLe=["dominant-baseline"];function B2(e){const t=d2(e);return Aw(),VFe(t.config??{}),t}F(B2,"processAndSetConfigs");async function lre(e,t){JE();try{const{code:r,config:n}=B2(e);return{diagramType:(await ure(r)).type,config:n}}catch(r){if(t!=null&&t.suppressErrors)return!1;throw r}}F(lre,"parse");var xO=F((e,t,r=[])=>`
829
829
  .${e} ${t} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),ZLe=F((e,t=new Map)=>{var r;let n="";if(e.themeCSS!==void 0&&(n+=`
@@ -922,7 +922,7 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(n+=`
922
922
  from { transform: rotate(0deg); }
923
923
  to { transform: rotate(360deg); }
924
924
  }
925
- `})]}),s.title&&_.jsx("h4",{style:{textAlign:"center",marginBottom:s.description?"4px":"12px",marginTop:0,color:T,fontWeight:600,background:"transparent"},children:s.title}),s.description&&_.jsx("p",{style:{textAlign:"center",marginTop:0,marginBottom:"12px",color:R,fontSize:"0.9rem"},children:s.description}),_.jsxs(WJe,{width:"100%",height:w,children:[s.type==="bar"&&_.jsxs(Sqe,{data:s.data,margin:Qe,barCategoryGap:"20%",children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>_.jsx(UD,{name:se.name,dataKey:se.key,fill:se.color,stackId:se.stackId,yAxisId:se.yAxisId,radius:[4,4,0,0]},se.key))]}),s.type==="line"&&_.jsxs(Dqe,{data:s.data,margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>_.jsx(xD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,strokeWidth:se.strokeWidth,dot:se.dot},se.key))]}),s.type==="area"&&_.jsxs(Xqe,{data:s.data,margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>_.jsx(DD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,fill:se.color,fillOpacity:se.opacity,stackId:se.stackId},se.key))]}),s.type==="composed"&&_.jsxs(qqe,{data:s.data,margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>{switch(se.type){case"line":return _.jsx(xD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,strokeWidth:se.strokeWidth,dot:se.dot},se.key);case"area":return _.jsx(DD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,fill:se.color,fillOpacity:se.opacity,stackId:se.stackId},se.key);case"scatter":return _.jsx(GD,{name:se.name,dataKey:se.key,fill:se.color,yAxisId:se.yAxisId},se.key);default:return _.jsx(UD,{name:se.name,dataKey:se.key,fill:se.color,stackId:se.stackId,yAxisId:se.yAxisId,radius:[4,4,0,0]},se.key)}})]}),s.type==="pie"&&_.jsxs(Wqe,{children:[_.jsx(Lie,{data:s.data,dataKey:((n=s.dataKeys)==null?void 0:n[0])||"value",nameKey:s.xKey||"name",cx:"50%",cy:"50%",outerRadius:w/3,label:{fill:T},children:s.data.map((se,et)=>_.jsx(ag,{fill:p[et%p.length]},`cell-${et}`))}),_.jsx(Ec,{contentStyle:we,itemStyle:Ye,formatter:De}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"})]}),s.type==="scatter"&&_.jsxs(Kqe,{margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"x",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{dataKey:((A=s.dataKeys)==null?void 0:A[0])||"y",width:80,tickFormatter:ke,...O,children:La(N,"left")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,_.jsx(GD,{name:"Data",data:s.data,fill:p[0]})]})]})]})};let mc=null;const i_e=async()=>{if(typeof window>"u")throw new Error("abcjs requires a browser environment");if(mc)return mc;try{const e=await Yt(()=>import("./index-DvNpGWs7-COncr4FG.js"),[]).then(r=>r.i),t=e.default||e;if(!t)throw new Error("abcjs module is empty");if(typeof t.renderAbc!="function")throw new Error(`renderAbc is not a function. Available methods: ${Object.keys(t).join(", ")}`);return mc=t,mc}catch(e){if(typeof window<"u"&&window.ABCJS)return mc=window.ABCJS,mc;const t=e instanceof Error?e.message:"Failed to load abcjs";throw new Error(`Failed to load abcjs: ${t}`)}},a_e=e=>{const t=e.trim();return/^[XMTLK]:/m.test(t)||/^X:\d+/m.test(t)},s_e=e=>{const t=e.trim();if(!t.includes("X:")||!/^K:/m.test(t))return!0;const r=t.split(`
925
+ `})]}),s.title&&_.jsx("h4",{style:{textAlign:"center",marginBottom:s.description?"4px":"12px",marginTop:0,color:T,fontWeight:600,background:"transparent"},children:s.title}),s.description&&_.jsx("p",{style:{textAlign:"center",marginTop:0,marginBottom:"12px",color:R,fontSize:"0.9rem"},children:s.description}),_.jsxs(WJe,{width:"100%",height:w,children:[s.type==="bar"&&_.jsxs(Sqe,{data:s.data,margin:Qe,barCategoryGap:"20%",children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>_.jsx(UD,{name:se.name,dataKey:se.key,fill:se.color,stackId:se.stackId,yAxisId:se.yAxisId,radius:[4,4,0,0]},se.key))]}),s.type==="line"&&_.jsxs(Dqe,{data:s.data,margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>_.jsx(xD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,strokeWidth:se.strokeWidth,dot:se.dot},se.key))]}),s.type==="area"&&_.jsxs(Xqe,{data:s.data,margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>_.jsx(DD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,fill:se.color,fillOpacity:se.opacity,stackId:se.stackId},se.key))]}),s.type==="composed"&&_.jsxs(qqe,{data:s.data,margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"name",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{yAxisId:"left",width:80,tickFormatter:ke,...O,children:La(N,"left")}),C&&_.jsx(sa,{yAxisId:"right",orientation:"right",width:80,tickFormatter:ke,...O,children:La(D,"right")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,E.map(se=>{switch(se.type){case"line":return _.jsx(xD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,strokeWidth:se.strokeWidth,dot:se.dot},se.key);case"area":return _.jsx(DD,{name:se.name,type:"monotone",dataKey:se.key,stroke:se.color,yAxisId:se.yAxisId,fill:se.color,fillOpacity:se.opacity,stackId:se.stackId},se.key);case"scatter":return _.jsx(GD,{name:se.name,dataKey:se.key,fill:se.color,yAxisId:se.yAxisId},se.key);default:return _.jsx(UD,{name:se.name,dataKey:se.key,fill:se.color,stackId:se.stackId,yAxisId:se.yAxisId,radius:[4,4,0,0]},se.key)}})]}),s.type==="pie"&&_.jsxs(Wqe,{children:[_.jsx(Lie,{data:s.data,dataKey:((n=s.dataKeys)==null?void 0:n[0])||"value",nameKey:s.xKey||"name",cx:"50%",cy:"50%",outerRadius:w/3,label:{fill:T},children:s.data.map((se,et)=>_.jsx(ag,{fill:p[et%p.length]},`cell-${et}`))}),_.jsx(Ec,{contentStyle:we,itemStyle:Ye,formatter:De}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"})]}),s.type==="scatter"&&_.jsxs(Kqe,{margin:Qe,children:[I&&_.jsx(Mc,{strokeDasharray:"3 3",stroke:L}),_.jsx(Fc,{dataKey:s.xKey||"x",label:ct,...O,...he,tickFormatter:Fe}),_.jsx(sa,{dataKey:((A=s.dataKeys)==null?void 0:A[0])||"y",width:80,tickFormatter:ke,...O,children:La(N,"left")}),_.jsx(Ec,{contentStyle:we,labelStyle:Z,itemStyle:Ye,formatter:De,labelFormatter:Ke,cursor:be}),m&&_.jsx(_o,{wrapperStyle:ze,iconSize:10,iconType:"square"}),M,_.jsx(GD,{name:"Data",data:s.data,fill:p[0]})]})]})]})};let mc=null;const i_e=async()=>{if(typeof window>"u")throw new Error("abcjs requires a browser environment");if(mc)return mc;try{const e=await Yt(()=>import("./index-DvNpGWs7-BQKVS4nm.js"),[]).then(r=>r.i),t=e.default||e;if(!t)throw new Error("abcjs module is empty");if(typeof t.renderAbc!="function")throw new Error(`renderAbc is not a function. Available methods: ${Object.keys(t).join(", ")}`);return mc=t,mc}catch(e){if(typeof window<"u"&&window.ABCJS)return mc=window.ABCJS,mc;const t=e instanceof Error?e.message:"Failed to load abcjs";throw new Error(`Failed to load abcjs: ${t}`)}},a_e=e=>{const t=e.trim();return/^[XMTLK]:/m.test(t)||/^X:\d+/m.test(t)},s_e=e=>{const t=e.trim();if(!t.includes("X:")||!/^K:/m.test(t))return!0;const r=t.split(`
926
926
  `),n=r[r.length-1].trim();return!!(n.match(/^[A-Z]:?\s*$/)&&n.length<3||n.endsWith("|")&&!n.endsWith("|]")&&!n.endsWith("||")&&n.replace(/\|/g,"").trim().length<2)},o_e=({code:e})=>{const t=y.useRef(null),[r,n]=y.useState(null),[A,i]=y.useState(!0),[a,s]=y.useState(!1),[o,l]=y.useState(!1),[c,u]=y.useState(!1),g=y.useRef(""),d=y.useRef(0),B=y.useRef(null);return y.useEffect(()=>{const h=e.trim();if(!h){i(!1),l(!1),s(!1);return}const f=Date.now(),p=f-d.current,w=e!==g.current;g.current=e,d.current=f;const E=s_e(h),C=w&&p<500&&p>0,m=E||C;if(E){s(!0),i(!0),n(null);return}a_e(e)?(l(!0),n(null),m&&s(!0)):(l(!1),m?(s(!0),n(null)):(n("Unable to detect ABC notation. Expected ABC notation starting with headers like X:, T:, M:, L:, or K:"),i(!1),s(!1)))},[e]),y.useEffect(()=>!o||!e.trim()?void 0:(a&&(B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{s(!1)},400)),(async()=>{try{i(!0);let h=0;const f=10;for(;!t.current&&h<f;)await new Promise(w=>setTimeout(w,50)),h++;if(!t.current)throw new Error("Container element not found after waiting");const p=await i_e();t.current.innerHTML="",p.renderAbc(t.current,e,{responsive:"resize",staffwidth:740,paddingleft:0,paddingright:0,paddingtop:15,paddingbottom:15,scale:1}),n(null),i(!1)}catch(h){const f=h instanceof Error?h.message:"Failed to render ABC notation";n(f),i(!1)}})(),()=>{B.current&&clearTimeout(B.current)}),[e,o,a]),r?_.jsxs("div",{className:"graph-error",children:[_.jsxs("div",{className:"graph-error-header",children:[_.jsx("div",{className:"graph-error-icon",children:"⚠️"}),_.jsxs("div",{className:"graph-error-content",children:[_.jsx("div",{className:"graph-error-title",children:"ABC Notation Rendering Error"}),_.jsx("div",{className:"graph-error-message",children:r})]})]}),_.jsxs("button",{className:"graph-error-toggle",onClick:()=>u(!c),type:"button",children:[c?"Hide":"Show"," Details"]}),c&&_.jsxs("details",{className:"graph-error-details",open:!0,children:[_.jsx("summary",{style:{cursor:"pointer",marginBottom:"8px",fontWeight:500},children:"ABC Notation Code"}),_.jsx("pre",{style:{marginTop:"8px",fontSize:"0.8em",opacity:.8,padding:"8px",background:"rgba(0, 0, 0, 0.05)",borderRadius:"4px",overflow:"auto",maxHeight:"200px"},children:_.jsx("code",{children:e})})]})]}):(A||a)&&!o?_.jsx("div",{className:"graph-container music-container abc-container",children:_.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:"30px 20px",color:"var(--md-text-secondary, #6b7280)",minHeight:"120px"},children:[_.jsx("svg",{style:{animation:"spin 1s linear infinite",marginBottom:"10px",width:"28px",height:"28px"},viewBox:"0 0 24 24",fill:"none",children:_.jsx("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"2",strokeDasharray:"32",strokeLinecap:"round"})}),_.jsx("span",{style:{fontWeight:500,fontSize:"14px"},children:a?"Receiving music notation...":"Loading music notation..."}),_.jsx("style",{children:`
927
927
  @keyframes spin {
928
928
  from { transform: rotate(0deg); }
@@ -950,9 +950,9 @@ ${_le}`,f_e=()=>{if(typeof document>"u"||document.getElementById(aV))return;cons
950
950
  { "name": "Business Analytics", "apiKey": "analytical", "apiUrl": "http://localhost:3000" }
951
951
  ]`,VITE_API_URL:"http://localhost:3000",VITE_CONSOLE_DEBUG:"false",VITE_DEFAULT_KEY:"default-key",VITE_ENABLE_API_MIDDLEWARE:"true",VITE_ENABLE_AUDIO_OUTPUT:"true",VITE_ENABLE_CONVERSATION_THREADS:"true",VITE_ENABLE_FEEDBACK:"false",VITE_ENABLE_UPLOAD:"true",VITE_GITHUB_OWNER:"schmitech",VITE_GITHUB_REPO:"orbit",VITE_LOCALE:"en-US",VITE_MAX_CONVERSATIONS:"5",VITE_MAX_FILES_PER_CONVERSATION:"3",VITE_MAX_FILE_SIZE_MB:"10",VITE_MAX_MESSAGES_PER_CONVERSATION:"10",VITE_MAX_MESSAGES_PER_THREAD:"4",VITE_MAX_MESSAGE_LENGTH:"500",VITE_MAX_TOTAL_FILES:"3",VITE_MAX_TOTAL_MESSAGES:"10",VITE_OUT_OF_SERVICE_MESSAGE:"",VITE_SHOW_GITHUB_STATS:"true",VITE_USE_LOCAL_API:"false"},Kl="http://localhost:3000";function m_e(e){return typeof e=="object"&&e!==null}const I_e={apiUrl:"VITE_API_URL",defaultKey:"VITE_DEFAULT_KEY",useLocalApi:"VITE_USE_LOCAL_API",localApiPath:"VITE_LOCAL_API_PATH",consoleDebug:"VITE_CONSOLE_DEBUG",enableUploadButton:"VITE_ENABLE_UPLOAD",enableAudioOutput:"VITE_ENABLE_AUDIO_OUTPUT",enableFeedbackButtons:"VITE_ENABLE_FEEDBACK",enableConversationThreads:"VITE_ENABLE_CONVERSATION_THREADS",enableApiMiddleware:"VITE_ENABLE_API_MIDDLEWARE",showGitHubStats:"VITE_SHOW_GITHUB_STATS",outOfServiceMessage:"VITE_OUT_OF_SERVICE_MESSAGE",githubOwner:"VITE_GITHUB_OWNER",githubRepo:"VITE_GITHUB_REPO",adapters:"VITE_ADAPTERS",maxFilesPerConversation:"VITE_MAX_FILES_PER_CONVERSATION",maxFileSizeMB:"VITE_MAX_FILE_SIZE_MB",maxTotalFiles:"VITE_MAX_TOTAL_FILES",maxConversations:"VITE_MAX_CONVERSATIONS",maxMessagesPerConversation:"VITE_MAX_MESSAGES_PER_CONVERSATION",maxMessagesPerThread:"VITE_MAX_MESSAGES_PER_THREAD",maxTotalMessages:"VITE_MAX_TOTAL_MESSAGES",maxMessageLength:"VITE_MAX_MESSAGE_LENGTH"};function y_e(){return typeof window<"u"&&m_e(window.ORBIT_CHAT_CONFIG)}function jt(e,t,r="string"){var o;const n=e==="showGitHubStats"||e==="githubOwner"||e==="githubRepo",A=y_e();if(!n){if(A){const l=(o=window.ORBIT_CHAT_CONFIG)==null?void 0:o[e];return l??t}if(typeof window<"u")switch(e){case"apiUrl":if(window.CHATBOT_API_URL)return window.CHATBOT_API_URL;break;case"defaultKey":if(window.CHATBOT_API_KEY)return window.CHATBOT_API_KEY;break}}const i=I_e[e],s=i?E_e[i]:void 0;if(s!=null&&s!==""){if(r==="boolean")return s==="true";if(r==="number"||r==="numberOrNull"){const l=parseInt(s,10);if(!isNaN(l))return r==="numberOrNull"&&l===0?null:l}else return s}return t}function Og(e,t){if(e===void 0||e==="")return t===0?null:t;const r=parseInt(e,10);return isNaN(r)||r<0?t===0?null:t:r===0?null:r}function CN(e,t){if(e===void 0||e==="")return t;const r=parseInt(e,10);return isNaN(r)||r<0?t:r}function vae(e){if(typeof e!="string")return null;const t=e.trim();if(!t)return null;const r=t.toLowerCase();return r==="false"||r==="0"||r==="off"||r==="disabled"?null:t}const Di={apiUrl:jt("apiUrl",Kl,"string"),defaultKey:jt("defaultKey","default-key","string"),useLocalApi:jt("useLocalApi",!1,"boolean"),localApiPath:jt("localApiPath",void 0,"string"),consoleDebug:jt("consoleDebug",!1,"boolean"),enableUploadButton:jt("enableUploadButton",!1,"boolean"),enableAudioOutput:jt("enableAudioOutput",!1,"boolean"),enableFeedbackButtons:jt("enableFeedbackButtons",!1,"boolean"),enableConversationThreads:jt("enableConversationThreads",!0,"boolean"),enableApiMiddleware:jt("enableApiMiddleware",!1,"boolean"),showGitHubStats:jt("showGitHubStats",!0,"boolean"),outOfServiceMessage:(()=>{const e=jt("outOfServiceMessage","","string");return vae(e)})(),githubOwner:jt("githubOwner","schmitech","string"),githubRepo:jt("githubRepo","orbit","string"),maxFilesPerConversation:(()=>{const e=jt("maxFilesPerConversation","5","string");return CN(e,5)})(),maxFileSizeMB:(()=>{const e=jt("maxFileSizeMB","50","string");return CN(e,50)})(),maxTotalFiles:(()=>{const e=jt("maxTotalFiles","100","string");return Og(e,100)})(),maxConversations:(()=>{const e=jt("maxConversations","10","string");return Og(e,10)})(),maxMessagesPerConversation:(()=>{const e=jt("maxMessagesPerConversation","1000","string");return Og(e,1e3)})(),maxMessagesPerThread:(()=>{const e=jt("maxMessagesPerThread","1000","string");return Og(e,1e3)})(),maxTotalMessages:(()=>{const e=jt("maxTotalMessages","10000","string");return Og(e,1e4)})(),maxMessageLength:(()=>{const e=jt("maxMessageLength","1000","string");return CN(e,1e3)})()};function Vr(){return jt("apiUrl",Kl,"string")}function Za(e){const t=e==null?void 0:e.trim();return t&&t.length>0?t:Vr()}function El(){return jt("defaultKey","default-key","string")}function C_e(){return jt("useLocalApi",!1,"boolean")}function Q_e(){return jt("localApiPath",void 0,"string")}function M_e(){return jt("enableUploadButton",!1,"boolean")}function F_e(){return jt("enableAudioOutput",!1,"boolean")}function Y_e(){return jt("enableFeedbackButtons",!1,"boolean")}function N_e(){return jt("enableConversationThreads",!0,"boolean")}function Tr(){return jt("enableApiMiddleware",!1,"boolean")}function b_e(){return Di.showGitHubStats}function sV(){return Di.githubOwner}function oV(){return Di.githubRepo}function x_e(){const e=jt("outOfServiceMessage","","string");return vae(e)}function D_e({audio:e,audioFormat:t="mp3",autoPlay:r=!1,maxSizeMB:n=10}){const A=y.useRef(null),[i,a]=y.useState(!1),[s,o]=y.useState(0),[l,c]=y.useState(0),[u,g]=y.useState(!0),[d,B]=y.useState(null),[h,f]=y.useState(null);y.useEffect(()=>{if(!e)return;let k=null,N=!0;return(async()=>{try{g(!0),B(null),f(null);const L=e.length*3/4/(1024*1024);if(L>n)throw new Error(`Audio file too large (${L.toFixed(1)}MB > ${n}MB limit)`);if(L>2&&(f(`Large audio file (${L.toFixed(1)}MB) - may take time to load`),fe("[AudioPlayer] Large audio file detected",{sizeMB:L.toFixed(2)})),!/^[A-Za-z0-9+/=]+$/.test(e.replace(/\s/g,"")))throw new Error("Invalid base64 audio data");const T=atob(e),v=new Uint8Array(T.length);for(let R=0;R<T.length;R++)v[R]=T.charCodeAt(R);const H=t==="mp3"?"audio/mpeg":t==="wav"?"audio/wav":t==="ogg"?"audio/ogg":t==="opus"?"audio/opus":t==="webm"?"audio/webm":`audio/${t}`,J=new Blob([v],{type:H});if(k=URL.createObjectURL(J),!N||!A.current){k&&URL.revokeObjectURL(k);return}A.current.src=k,g(!1),fe("[AudioPlayer] Audio loaded successfully",{format:t,mimeType:H,size:J.size}),r&&A.current&&A.current.play().catch(R=>{Su("[AudioPlayer] Auto-play failed:",R)})}catch{N&&(B("Failed to load audio"),g(!1))}})(),()=>{N=!1,k&&URL.revokeObjectURL(k)}},[e,t,r,n]);const p=()=>{A.current&&o(A.current.duration)},w=()=>{A.current&&c(A.current.currentTime)},E=()=>a(!0),C=()=>a(!1),m=()=>{a(!1),c(0)},I=()=>{A.current&&(i?A.current.pause():A.current.play().catch(k=>{B("Playback failed")}))},M=k=>{if(!A.current)return;const N=parseFloat(k.target.value);A.current.currentTime=N,c(N)},b=k=>{if(!isFinite(k))return"0:00";const N=Math.floor(k/60),D=Math.floor(k%60);return`${N}:${D.toString().padStart(2,"0")}`};return d?x.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-red-300 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-700 dark:bg-red-900/20 dark:text-red-400",children:[x.jsx(W0,{className:"h-4 w-4"}),x.jsx("span",{children:d})]}):x.jsxs("div",{className:"mt-3 flex flex-col gap-1",children:[h&&x.jsxs("div",{className:"text-xs text-amber-600 dark:text-amber-400 px-1",children:["⚠️ ",h]}),x.jsxs("div",{className:"flex items-center gap-3 rounded-md border border-gray-300 bg-white px-3 py-2 dark:border-[#4a4b54] dark:bg-[#343541]",children:[x.jsx("audio",{ref:A,onLoadedMetadata:p,onTimeUpdate:w,onPlay:E,onPause:C,onEnded:m}),x.jsx("button",{onClick:I,disabled:u,className:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-gray-200 hover:bg-gray-300 disabled:opacity-50 dark:bg-[#4a4b54] dark:hover:bg-[#565869]",title:i?"Pause":"Play",children:u?x.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-gray-400 border-t-transparent"}):i?x.jsx(Ule,{className:"h-4 w-4 text-gray-700 dark:text-[#ececf1]"}):x.jsx(Gle,{className:"h-4 w-4 text-gray-700 dark:text-[#ececf1]"})}),x.jsxs("div",{className:"flex flex-1 items-center gap-2",children:[x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:b(l)}),x.jsx("input",{type:"range",min:"0",max:s||0,value:l,onChange:M,disabled:u||!s,className:"flex-1 cursor-pointer accent-gray-600 dark:accent-[#bfc2cd]",style:{background:s?`linear-gradient(to right, rgb(75 85 99) 0%, rgb(75 85 99) ${l/s*100}%, rgb(229 231 235) ${l/s*100}%, rgb(229 231 235) 100%)`:"rgb(229 231 235)"}}),x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:b(s)})]}),x.jsx(W0,{className:"h-4 w-4 text-gray-500 dark:text-[#bfc2cd]"})]})]})}const k_e=["#","*","`","[","]","(",")","{","}","|","<",">"],Gae=e=>k_e.some(t=>e.includes(t));function Rae(e){if(!e||e.length<1e3)return!1;const t=/^[A-Za-z0-9+/=]+$/,r=e.replace(/\s+/g,"");if(r.length>1e4&&t.test(r)){const n=/\b(the|and|for|are|but|not|you|all|can|function|const|let|var|class|return|import|export|async|await|if|else|while|true|false|null|undefined|http|https|www|error|data|response|request|api|json|xml|html|css|js|py|java|cpp|def|print|console|log)\b/i.test(e),A=Gae(e),i=/[.,;:!?'"()-]/.test(e);if(!n&&!A&&!i)return!0}return!!(r.length>5e4&&t.test(r)&&e.replace(/[A-Za-z0-9+/=\s]/g,"").length<10)}function Ud(e){if(!e)return e;if(Rae(e))return"";const t=/([A-Za-z0-9+/=]{10000,})/g;return e.replace(t,n=>{const A=n.replace(/\s+/g,"");if(A.length>1e4&&/^[A-Za-z0-9+/=]+$/.test(A)){const i=/\b(function|const|let|var|class|return|import|export|if|else|while|for|true|false|null|def|print)\b/i.test(n),a=Gae(n),s=/[.,;:!?'"()-]/.test(n);if(!i&&!a&&!s)return""}return n})}function OD(e,t=5e4){return!e||e.length<=t?e:Rae(e)?"":e.substring(0,t)+`
952
952
 
953
- ... (content truncated due to length)`}const lt={maxFilesPerConversation:Di.maxFilesPerConversation,maxFileSizeMB:Di.maxFileSizeMB,maxTotalFiles:Di.maxTotalFiles,maxConversations:Di.maxConversations,maxMessagesPerConversation:Di.maxMessagesPerConversation,maxMessagesPerThread:Di.maxMessagesPerThread,maxTotalMessages:Di.maxTotalMessages,maxMessageLength:Di.maxMessageLength},S_e=[];function U_e({message:e,onRegenerate:t,onStartThread:r,onSendThreadMessage:n,threadMessages:A,sessionId:i,isThreadSendDisabled:a}){var je,_e;const[s,o]=y.useState(!1),[l,c]=y.useState(null),[u,g]=y.useState(""),[d,B]=y.useState(!1),[h,f]=y.useState(!1),p=y.useRef(((je=e.threadInfo)==null?void 0:je.thread_id)||null),w=y.useRef(null),E=y.useRef(null),C=y.useRef(""),m=e.role==="assistant",I=A??S_e,M=I.filter(Fe=>Fe.role==="assistant").length,b=I.filter(Fe=>!(Fe.role==="assistant"&&Fe.isStreaming)).length,k=I.some(Fe=>Fe.isStreaming),N="en-US",D=N_e(),z=lt.maxMessageLength,L=lt.maxMessagesPerThread,T=L!==null&&b>=L,v=T&&L!==null?`This thread reached the ${L} message limit. Start a new conversation for more follow-ups.`:null,{theme:H,isDark:J}=Of(),R=H.mode==="dark"?"dark":H.mode==="light"?"light":"",O=J?"dark":"light",U=y.useMemo(()=>["message-markdown w-full min-w-0","prose prose-slate dark:prose-invert max-w-none",R].filter(Boolean).join(" "),[R]),P=y.useMemo(()=>["message-markdown w-full min-w-0","prose prose-invert max-w-none",R].filter(Boolean).join(" "),[R]),ee=m?U:P,G=`${U} text-sm leading-6`,q=`${P} text-sm leading-6`;y.useEffect(()=>{var Fe,Ke;!p.current&&((Fe=e.threadInfo)!=null&&Fe.thread_id)&&B(!0),p.current=((Ke=e.threadInfo)==null?void 0:Ke.thread_id)||null},[(_e=e.threadInfo)==null?void 0:_e.thread_id]),y.useEffect(()=>{e.threadInfo||(g(""),B(!1),f(!1))},[e.threadInfo]),y.useEffect(()=>{M>0&&B(!0)},[M]),y.useEffect(()=>{if(!d||I.length===0)return;const Fe=I[I.length-1],Ke=(Fe==null?void 0:Fe.content)||"",Bt=Ke!==C.current;((Fe==null?void 0:Fe.isStreaming)||Bt)&&requestAnimationFrame(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)}),C.current=Ke},[d,I]);const Ae=y.useMemo(()=>{const Fe=e.timestamp instanceof Date?e.timestamp:new Date(e.timestamp),Ke=Fe.toLocaleDateString(N,{weekday:"short"}),Bt=Fe.toLocaleDateString(N,{month:"short"}),ir=Fe.getDate().toString().padStart(2,"0"),en=Fe.getFullYear(),Sr=Fe.toLocaleTimeString(N,{hour:"2-digit",minute:"2-digit",hour12:!0});return`${Ke}, ${Bt} ${ir}, ${en} ${Sr}`},[e.timestamp,N]),ae=m?"bg-gradient-to-br from-blue-100 to-blue-200 text-blue-900 dark:from-[#1f2a36] dark:to-[#1a2230] dark:text-[#c5d7ff]":"bg-gradient-to-br from-emerald-100 to-emerald-200 text-emerald-900 dark:from-[#0f1f17] dark:to-[#0b1712] dark:text-[#c7f5df]",oe=`message-bubble min-w-0 break-words leading-relaxed ${m?"border border-blue-100/80 bg-transparent text-[#0f172a] shadow-[0_15px_35px_-20px_rgba(15,23,42,0.25)] dark:border-[#1f2a36] dark:bg-transparent dark:text-[#e5edff]":"border border-emerald-100 bg-transparent text-[#1c3226] shadow-[0_12px_30px_-18px_rgba(15,52,33,0.25)] dark:border-[#1a2b21] dark:bg-transparent dark:text-[#dffbea]"} rounded-2xl px-4 py-3`,ge=m?"border-blue-100 bg-white/80 dark:border-[#1f2a36] dark:bg-white/5":"border-emerald-100 bg-white/80 dark:border-[#1a2b21] dark:bg-white/5",te=async()=>{try{await navigator.clipboard.writeText(e.content),o(!0),setTimeout(()=>o(!1),2e3)}catch{}},he=Fe=>{c(l===Fe?null:Fe)},we=y.useCallback(Fe=>(Fe instanceof Date?Fe:new Date(Fe)).toLocaleTimeString(N,{hour:"2-digit",minute:"2-digit"}),[N]),Z=async()=>{if(!n||!e.threadInfo||T)return;const Fe=u.trim();if(Fe){f(!0);try{await n(e.threadInfo.thread_id,e.id,Fe),g(""),setTimeout(()=>{w.current&&w.current.focus()},100)}catch{setTimeout(()=>{w.current&&w.current.focus()},100)}finally{f(!1)}}},Ye=Fe=>{Fe.key==="Enter"&&!Fe.shiftKey&&(Fe.preventDefault(),Z())},be=!e.threadInfo||!n||a||k||h||T;y.useEffect(()=>{if(!d||be)return;const Fe=w.current;if(!Fe)return;const Ke=requestAnimationFrame(()=>{Fe.focus();const Bt=Fe.value.length;Fe.setSelectionRange(Bt,Bt)});return()=>cancelAnimationFrame(Ke)},[d,be,h]),y.useEffect(()=>{if(w.current){const Ke=w.current;Ke.style.height="auto";const Bt=Ke.scrollHeight;Ke.style.height=`${Math.min(Bt,120)}px`,Ke.style.overflowY=Bt>120?"auto":"hidden"}},[u]);const De=y.useMemo(()=>e.isStreaming&&(!e.content||e.content==="…")?x.jsx("div",{className:ee,children:x.jsxs("div",{className:"flex items-center gap-1.5 py-1",children:[x.jsx("span",{className:"inline-block h-2.5 w-2.5 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"0ms"}}),x.jsx("span",{className:"inline-block h-2.5 w-2.5 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"150ms"}}),x.jsx("span",{className:"inline-block h-2.5 w-2.5 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"300ms"}})]})}):x.jsx(JD,{content:OD(Ud(e.content||"")),className:ee,syntaxTheme:O}),[ee,e.content,e.isStreaming,O]),ke=y.useMemo(()=>[...I].sort((Ke,Bt)=>{const ir=Ke.timestamp instanceof Date?Ke.timestamp.getTime():new Date(Ke.timestamp).getTime(),en=Bt.timestamp instanceof Date?Bt.timestamp.getTime():new Date(Bt.timestamp).getTime();return ir-en}).map(Ke=>{const Bt=Ke.role==="assistant",ir=Bt?G:q,en=Ke.isStreaming&&(!Ke.content||Ke.content==="…")?x.jsx("div",{className:ir,children:x.jsxs("div",{className:"flex items-center gap-1.5 py-1",children:[x.jsx("span",{className:"inline-block h-2 w-2 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"0ms"}}),x.jsx("span",{className:"inline-block h-2 w-2 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"150ms"}}),x.jsx("span",{className:"inline-block h-2 w-2 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"300ms"}})]})}):x.jsx(JD,{content:OD(Ud(Ke.content||"")),className:ir,syntaxTheme:O});return x.jsxs("div",{className:"flex items-start gap-3",children:[x.jsx("div",{className:`mt-0.5 flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full ${Bt?"bg-blue-100 text-blue-700 dark:bg-[#1f2a36] dark:text-[#c5d7ff]":"bg-emerald-100 text-emerald-700 dark:bg-[#1f2a36] dark:text-[#9ef0d5]"}`,children:Bt?x.jsx(WG,{className:"h-3.5 w-3.5"}):x.jsx(PG,{className:"h-3.5 w-3.5"})}),x.jsxs("div",{className:"flex-1 min-w-0 rounded-2xl border border-white/70 bg-white/90 px-4 py-3 text-sm shadow-sm dark:border-white/5 dark:bg-white/5 backdrop-blur overflow-hidden",children:[x.jsxs("div",{className:"mb-1 flex items-center justify-between text-[11px] font-semibold uppercase tracking-wide text-blue-900/70 dark:text-[#c5d7ff]",children:[x.jsx("span",{children:Bt?"Assistant":"You"}),x.jsx("span",{children:we(Ke.timestamp)})]}),x.jsx("div",{className:"thread-markdown-wrapper overflow-x-auto",children:en})]})]},Ke.id)}),[we,O,G,I,q]);return x.jsxs("div",{className:"group flex items-start gap-3 px-1 animate-fadeIn min-w-0 sm:px-0",children:[x.jsx("div",{className:`flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full self-start -mt-2 ml-1 shadow-sm ring-2 ring-white/50 dark:ring-white/10 sm:-mt-3 sm:ml-2 ${ae}`,children:m?x.jsx(WG,{className:"h-5 w-5"}):x.jsx(PG,{className:"h-5 w-5"})}),x.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[x.jsxs("div",{className:"flex flex-col gap-1.5 mb-1",children:[x.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-gray-700 dark:text-[#ececf1]",children:m?"Assistant":"You"}),x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:Ae})]}),x.jsxs("div",{className:oe,children:[De,e.attachments&&e.attachments.length>0&&x.jsx("div",{className:"mt-3 space-y-2",children:e.attachments.map(Fe=>x.jsxs("div",{className:`flex items-center gap-3 rounded-xl border p-3 ${ge}`,children:[x.jsx(Fle,{className:"h-4 w-4 text-gray-500 dark:text-[#bfc2cd]"}),x.jsxs("div",{className:"min-w-0 flex-1",children:[x.jsx("p",{className:"truncate text-sm font-medium text-[#353740] dark:text-[#ececf1]",children:Fe.filename}),x.jsxs("p",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:[(Fe.file_size/1024).toFixed(1)," KB"]})]})]},Fe.file_id))}),e.audio&&m&&!e.isStreaming&&x.jsx(D_e,{audio:e.audio,audioFormat:e.audioFormat,autoPlay:!1})]}),m&&!e.isStreaming&&x.jsxs("div",{className:"flex items-center gap-1 md:gap-2 text-xs text-gray-500 transition-opacity dark:text-[#bfc2cd] sm:opacity-0 sm:group-hover:opacity-100",children:[x.jsxs("button",{onClick:te,className:"inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a]",title:"Copy message",children:[x.jsx(Cle,{className:"h-4 w-4"}),x.jsx("span",{className:"hidden sm:inline",children:"Copy"})]}),t&&x.jsxs("button",{onClick:()=>t(e.id),className:"inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a]",title:"Regenerate response",children:[x.jsx(zle,{className:"h-4 w-4"}),x.jsx("span",{className:"hidden sm:inline",children:"Retry"})]}),D&&r&&e.supportsThreading&&!e.threadInfo&&i&&x.jsxs("button",{onClick:()=>r(e.id,i),className:"inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a]",title:"Start thread for follow-up questions",children:[x.jsx(O0,{className:"h-4 w-4"}),x.jsx("span",{className:"hidden sm:inline",children:"Start Thread"})]}),Y_e()&&x.jsxs("div",{className:"flex items-center gap-1",children:[x.jsx("button",{onClick:()=>he("up"),className:`rounded p-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a] ${l==="up"?"text-[#353740] dark:text-[#ececf1]":""}`,title:"Good response",children:x.jsx(Jle,{className:"h-4 w-4"})}),x.jsx("button",{onClick:()=>he("down"),className:`rounded p-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a] ${l==="down"?"text-[#353740] dark:text-[#ececf1]":""}`,title:"Poor response",children:x.jsx(Hle,{className:"h-4 w-4"})})]}),s&&x.jsx("span",{children:"Copied"})]}),D&&e.threadInfo&&x.jsxs("div",{className:"thread-panel mt-4 rounded-xl border border-blue-100/80 bg-blue-50/70 p-3 sm:p-4 text-sm shadow-sm ring-1 ring-blue-100/60 dark:border-[#1f2a36] dark:bg-[#0f1821] dark:ring-[#1f2a36]",children:[x.jsxs("div",{className:"flex items-center justify-between gap-2 text-sm font-semibold text-blue-900 dark:text-[#c5d7ff]",children:[x.jsxs("div",{className:"inline-flex items-center gap-2 uppercase tracking-wide text-xs sm:text-sm",children:[x.jsx(O0,{className:"h-3.5 w-3.5"}),x.jsxs("span",{children:["Thread",M>0?` (${M})`:""]})]}),x.jsx("button",{onClick:()=>B(Fe=>!Fe),className:"inline-flex items-center gap-1.5 sm:gap-2 rounded-full border border-blue-200/80 px-2.5 sm:px-3 py-1.5 text-xs uppercase tracking-wide text-blue-900 transition hover:bg-white/70 dark:border-[#233449] dark:text-[#c5d7ff] dark:hover:bg-white/10",children:d?x.jsxs(x.Fragment,{children:[x.jsx("span",{className:"hidden sm:inline",children:"Hide"}),x.jsx(yle,{className:"h-4 w-4 sm:h-3 sm:w-3"})]}):x.jsxs(x.Fragment,{children:[x.jsx("span",{className:"hidden sm:inline",children:"Show"}),x.jsx(R6,{className:"h-4 w-4 sm:h-3 sm:w-3"})]})})]}),d&&x.jsxs(x.Fragment,{children:[x.jsx("div",{ref:E,className:"mt-3 space-y-3 max-h-96 overflow-y-auto scroll-smooth",style:{scrollBehavior:"auto"},children:ke}),v&&x.jsx("div",{className:"mt-3 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/30 dark:bg-[#2f2410] dark:text-amber-100",children:v}),x.jsx("div",{className:"mt-3 rounded-xl border border-white/80 bg-white/95 p-3 shadow-sm dark:border-white/10 dark:bg-white/10",children:x.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3",children:[x.jsx("textarea",{ref:w,className:"flex-1 w-full sm:w-auto min-w-0 resize-none rounded-lg border border-gray-200 bg-gray-50 px-3 py-2.5 text-base sm:text-sm text-[#353740] placeholder-gray-500 outline-none transition focus:border-gray-400 focus:ring-1 focus:ring-gray-300 disabled:opacity-60 dark:border-[#3c3f4a] dark:bg-[#2d2f39] dark:text-[#ececf1] dark:placeholder-[#8e8ea0] dark:focus:border-[#8e8ea0] dark:focus:ring-[#8e8ea0]",placeholder:M>0?"Reply in thread...":"Ask a follow-up...",value:u,onChange:Fe=>g(Fe.target.value),onKeyDown:Ye,disabled:be,rows:1,maxLength:z,style:{minHeight:"44px",maxHeight:"120px",outline:"none",boxShadow:"none",WebkitAppearance:"none",MozAppearance:"none",appearance:"none"}}),x.jsxs("div",{className:"flex items-center justify-between sm:justify-end gap-2",children:[u.length>0&&x.jsx("div",{className:"text-xs text-gray-500 dark:text-[#bfc2cd] whitespace-nowrap",children:x.jsxs("span",{className:u.length>=z?"text-red-600 font-semibold":"",children:[u.length,"/",z]})}),x.jsx("button",{type:"button",onClick:Z,disabled:be||u.trim().length===0,className:`flex h-11 w-11 sm:h-9 sm:w-9 items-center justify-center rounded-full transition active:scale-95 ${u.trim().length>0&&!be?"bg-[#10a37f] text-white hover:bg-[#0f8f6f]":"bg-gray-200 text-gray-400 dark:bg-[#2f313a] dark:text-[#6b6f7a]"} disabled:cursor-not-allowed`,title:"Send thread message",children:h?x.jsx(qc,{className:"h-5 w-5 sm:h-4 sm:w-4 animate-spin"}):x.jsx(G6,{className:"h-5 w-5 sm:h-4 sm:w-4"})})]})]})})]})]})]})]})}function v_e(e=800,t=100,r="sine"){try{if(typeof window>"u"){fe("[SoundEffects] Window is not available for audio playback");return}const n=window.AudioContext??window.webkitAudioContext;if(!n){fe("[SoundEffects] AudioContext not supported in this browser");return}const A=new n,i=A.createOscillator(),a=A.createGain();i.connect(a),a.connect(A.destination),i.frequency.value=e,i.type=r,a.gain.setValueAtTime(.3,A.currentTime),a.gain.exponentialRampToValueAtTime(.01,A.currentTime+t/1e3),i.start(A.currentTime),i.stop(A.currentTime+t/1e3)}catch{}}const G_e={messageSent:{frequency:600,duration:80,type:"sine"},messageReceived:{frequency:800,duration:100,type:"sine"},success:{frequency:1e3,duration:150,type:"sine"},error:{frequency:400,duration:200,type:"square"},notification:{frequency:700,duration:120,type:"sine"}};function ld(e,t){if(!t)return;const r=G_e[e];if(r)try{v_e(r.frequency,r.duration,r.type),fe(`[SoundEffects] Playing ${e} sound effect`)}catch{}}function R_e({messages:e,onRegenerate:t,onStartThread:r,onSendThreadMessage:n,sessionId:A,isLoading:i}){const a=y.useRef(null),s=y.useRef(null),o=y.useRef(e.length),l=y.useRef(""),c=y.useRef(i),u=y.useRef(!0),{settings:g}=Wf(),{topLevelMessages:d,threadLookup:B}=y.useMemo(()=>{const p=new Map,w=[];return e.forEach(E=>{if(E.isThreadMessage&&E.parentMessageId){const C=p.get(E.parentMessageId)||[];p.set(E.parentMessageId,[...C,E]);return}w.push(E)}),{topLevelMessages:w,threadLookup:p}},[e]),h=()=>{if(!s.current)return;const{scrollTop:p,scrollHeight:w,clientHeight:E}=s.current,m=w-p-E<200;u.current=m},f=y.useCallback(()=>{requestAnimationFrame(()=>{s.current&&(s.current.scrollTop=s.current.scrollHeight)})},[]);return y.useEffect(()=>{const p=e.length,w=o.current,E=p>w,C=e[e.length-1],m=(C==null?void 0:C.content)||"",I=m!==l.current,M=(C==null?void 0:C.isStreaming)??!1;E||M&&I?(f(),u.current=!0):u.current&&I&&f(),o.current=p,l.current=m},[e,f]),y.useEffect(()=>{i&&(f(),u.current=!0)},[i,f]),y.useEffect(()=>{if(c.current&&!i){const p=e[e.length-1];(p==null?void 0:p.role)==="assistant"&&p.content&&ld("messageReceived",g.soundEnabled)}c.current=i},[i,e,g.soundEnabled]),d.length===0?x.jsx("div",{className:"flex-1 flex items-center justify-center px-4 sm:px-6",children:x.jsxs("div",{className:"text-center text-lg text-gray-500 dark:text-[#bfc2cd]",children:[x.jsx("p",{className:"text-xl",children:"Your messages will appear here."}),x.jsx("p",{className:"mt-1 text-lg",children:"Start the conversation by sending a prompt below."})]})}):x.jsx("div",{ref:s,className:"message-list flex-1 overflow-y-auto py-6",onScroll:h,children:x.jsxs("div",{className:"space-y-6 px-3 sm:px-4",children:[d.map(p=>x.jsx(U_e,{message:p,onRegenerate:t,onStartThread:r,onSendThreadMessage:n,threadMessages:B.get(p.id),sessionId:A,isThreadSendDisabled:i},p.id)),x.jsx("div",{ref:a,className:"h-8"})]})})}const j_e=2e3;function z_e(e,t){const[r,n]=y.useState(!1),[A,i]=y.useState(null),a=y.useRef(null),s=y.useRef(""),o=y.useRef(!1),l=y.useRef(null),c=y.useCallback(()=>{if(!s.current)return;const p=s.current;s.current="",e(" "+p)},[e]),u=typeof window<"u"&&("webkitSpeechRecognition"in window||"SpeechRecognition"in window),g=y.useCallback(()=>{!t||o.current||(o.current=!0,t())},[t]),d=y.useCallback(()=>{l.current!==null&&(clearTimeout(l.current),l.current=null)},[]),B=y.useCallback(()=>{d(),l.current=setTimeout(()=>{a.current?a.current.stop():g()},j_e)},[d,g]),h=y.useCallback(()=>{if(!u){i("Speech recognition is not supported in this browser. Please try Chrome, Edge, or Safari.");return}if(!r)try{o.current=!1;const p=window.SpeechRecognition||window.webkitSpeechRecognition,w=new p;w.continuous=!0,w.interimResults=!0,w.lang=navigator.language||"en-US",w.maxAlternatives=1,w.onstart=()=>{n(!0),i(null),fe("Speech recognition started"),B()},w.onresult=E=>{let C="",m="";for(let I=E.resultIndex;I<E.results.length;I++){const M=E.results[I][0].transcript;E.results[I].isFinal?C+=M:m+=M}m&&(s.current=m),C&&(s.current="",e(" "+C)),B()},w.onend=()=>{d(),c(),n(!1),a.current=null,fe("Speech recognition ended"),g()},w.onerror=E=>{switch(d(),Su("Speech recognition error:",E.error),n(!1),a.current=null,s.current="",g(),E.error){case"no-speech":i("No speech detected. Please try again.");break;case"audio-capture":i("Microphone access denied. Please allow microphone access and try again.");break;case"not-allowed":i("Microphone access not allowed. Please enable microphone permissions.");break;case"network":i("Network error occurred. Please check your connection.");break;default:i(`Speech recognition error: ${E.error}`)}},w.start(),a.current=w}catch{i("Failed to start speech recognition. Please try again."),n(!1)}},[u,e,r,c,g,B,d]),f=y.useCallback(()=>{if(a.current){const p=a.current;p.onend=null,p.onerror=null,p.onresult=null,p.onstart=null;try{p.stop()}catch{}a.current=null}d(),c(),n(!1),i(null),g()},[d,c,g]);return{isListening:r,isSupported:u,startListening:h,stopListening:f,error:A}}const T_e="2.5.3",L_e={"@schmitech/chatbot-api":"^2.1.2"},jae={version:T_e,dependencies:L_e},zae=jae.version,lV=jae.dependencies["@schmitech/chatbot-api"];async function WD(){try{return(await Yt(()=>import("./api-tSLlTydc.js"),[])).version||lV}catch{return lV}}async function Tae(){const e=await WD();return{appVersion:zae,apiVersion:e,isLocalApi:!1}}let Ha=null;function Wg(){let e=null,t=null;const r=(A,i,a,s)=>{e=a||null,t=s||null},n=()=>{if(!t)throw new Error("Adapter name is required when middleware is enabled");return{async*streamChat(A,i,a,s,o,l,c,u,g,d,B){var p,w;const h={messages:[{role:"user",content:A}],stream:i!==!1};a&&a.length>0&&(h.file_ids=a),s&&(h.thread_id=s),o&&(h.audio_input=o),l&&(h.audio_format=l),c&&(h.language=c),u!==void 0&&(h.return_audio=u),g&&(h.tts_voice=g),d&&(h.source_language=d),B&&(h.target_language=B);const f=await fetch("/api/proxy/v1/chat",{method:"POST",headers:{"Content-Type":"application/json","X-Adapter-Name":t,...e?{"X-Session-ID":e}:{}},body:JSON.stringify(h)});if(!f.ok)throw new Error(`API request failed: ${f.status} ${f.statusText}`);if((p=f.headers.get("content-type"))!=null&&p.includes("text/event-stream")){const E=(w=f.body)==null?void 0:w.getReader(),C=new TextDecoder;let m="";if(!E)throw new Error("Response body is not readable");for(;;){const{done:I,value:M}=await E.read();if(I)break;m+=C.decode(M,{stream:!0});const b=m.split(`
953
+ ... (content truncated due to length)`}const lt={maxFilesPerConversation:Di.maxFilesPerConversation,maxFileSizeMB:Di.maxFileSizeMB,maxTotalFiles:Di.maxTotalFiles,maxConversations:Di.maxConversations,maxMessagesPerConversation:Di.maxMessagesPerConversation,maxMessagesPerThread:Di.maxMessagesPerThread,maxTotalMessages:Di.maxTotalMessages,maxMessageLength:Di.maxMessageLength},S_e=[];function U_e({message:e,onRegenerate:t,onStartThread:r,onSendThreadMessage:n,threadMessages:A,sessionId:i,isThreadSendDisabled:a}){var je,_e;const[s,o]=y.useState(!1),[l,c]=y.useState(null),[u,g]=y.useState(""),[d,B]=y.useState(!1),[h,f]=y.useState(!1),p=y.useRef(((je=e.threadInfo)==null?void 0:je.thread_id)||null),w=y.useRef(null),E=y.useRef(null),C=y.useRef(""),m=e.role==="assistant",I=A??S_e,M=I.filter(Fe=>Fe.role==="assistant").length,b=I.filter(Fe=>!(Fe.role==="assistant"&&Fe.isStreaming)).length,k=I.some(Fe=>Fe.isStreaming),N="en-US",D=N_e(),z=lt.maxMessageLength,L=lt.maxMessagesPerThread,T=L!==null&&b>=L,v=T&&L!==null?`This thread reached the ${L} message limit. Start a new conversation for more follow-ups.`:null,{theme:H,isDark:J}=Of(),R=H.mode==="dark"?"dark":H.mode==="light"?"light":"",O=J?"dark":"light",U=y.useMemo(()=>["message-markdown w-full min-w-0","prose prose-slate dark:prose-invert max-w-none",R].filter(Boolean).join(" "),[R]),P=y.useMemo(()=>["message-markdown w-full min-w-0","prose prose-invert max-w-none",R].filter(Boolean).join(" "),[R]),ee=m?U:P,G=`${U} text-sm leading-6`,q=`${P} text-sm leading-6`;y.useEffect(()=>{var Fe,Ke;!p.current&&((Fe=e.threadInfo)!=null&&Fe.thread_id)&&B(!0),p.current=((Ke=e.threadInfo)==null?void 0:Ke.thread_id)||null},[(_e=e.threadInfo)==null?void 0:_e.thread_id]),y.useEffect(()=>{e.threadInfo||(g(""),B(!1),f(!1))},[e.threadInfo]),y.useEffect(()=>{M>0&&B(!0)},[M]),y.useEffect(()=>{if(!d||I.length===0)return;const Fe=I[I.length-1],Ke=(Fe==null?void 0:Fe.content)||"",Bt=Ke!==C.current;((Fe==null?void 0:Fe.isStreaming)||Bt)&&requestAnimationFrame(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)}),C.current=Ke},[d,I]);const Ae=y.useMemo(()=>{const Fe=e.timestamp instanceof Date?e.timestamp:new Date(e.timestamp),Ke=Fe.toLocaleDateString(N,{weekday:"short"}),Bt=Fe.toLocaleDateString(N,{month:"short"}),ir=Fe.getDate().toString().padStart(2,"0"),en=Fe.getFullYear(),Sr=Fe.toLocaleTimeString(N,{hour:"2-digit",minute:"2-digit",hour12:!0});return`${Ke}, ${Bt} ${ir}, ${en} ${Sr}`},[e.timestamp,N]),ae=m?"bg-gradient-to-br from-blue-100 to-blue-200 text-blue-900 dark:from-[#1f2a36] dark:to-[#1a2230] dark:text-[#c5d7ff]":"bg-gradient-to-br from-emerald-100 to-emerald-200 text-emerald-900 dark:from-[#0f1f17] dark:to-[#0b1712] dark:text-[#c7f5df]",oe=`message-bubble min-w-0 break-words leading-relaxed ${m?"border border-blue-100/80 bg-transparent text-[#0f172a] shadow-[0_15px_35px_-20px_rgba(15,23,42,0.25)] dark:border-[#1f2a36] dark:bg-transparent dark:text-[#e5edff]":"border border-emerald-100 bg-transparent text-[#1c3226] shadow-[0_12px_30px_-18px_rgba(15,52,33,0.25)] dark:border-[#1a2b21] dark:bg-transparent dark:text-[#dffbea]"} rounded-2xl px-4 py-3`,ge=m?"border-blue-100 bg-white/80 dark:border-[#1f2a36] dark:bg-white/5":"border-emerald-100 bg-white/80 dark:border-[#1a2b21] dark:bg-white/5",te=async()=>{try{await navigator.clipboard.writeText(e.content),o(!0),setTimeout(()=>o(!1),2e3)}catch{}},he=Fe=>{c(l===Fe?null:Fe)},we=y.useCallback(Fe=>(Fe instanceof Date?Fe:new Date(Fe)).toLocaleTimeString(N,{hour:"2-digit",minute:"2-digit"}),[N]),Z=async()=>{if(!n||!e.threadInfo||T)return;const Fe=u.trim();if(Fe){f(!0);try{await n(e.threadInfo.thread_id,e.id,Fe),g(""),setTimeout(()=>{w.current&&w.current.focus()},100)}catch{setTimeout(()=>{w.current&&w.current.focus()},100)}finally{f(!1)}}},Ye=Fe=>{Fe.key==="Enter"&&!Fe.shiftKey&&(Fe.preventDefault(),Z())},be=!e.threadInfo||!n||a||k||h||T;y.useEffect(()=>{if(!d||be)return;const Fe=w.current;if(!Fe)return;const Ke=requestAnimationFrame(()=>{Fe.focus();const Bt=Fe.value.length;Fe.setSelectionRange(Bt,Bt)});return()=>cancelAnimationFrame(Ke)},[d,be,h]),y.useEffect(()=>{if(w.current){const Ke=w.current;Ke.style.height="auto";const Bt=Ke.scrollHeight;Ke.style.height=`${Math.min(Bt,120)}px`,Ke.style.overflowY=Bt>120?"auto":"hidden"}},[u]);const De=y.useMemo(()=>e.isStreaming&&(!e.content||e.content==="…")?x.jsx("div",{className:ee,children:x.jsxs("div",{className:"flex items-center gap-1.5 py-1",children:[x.jsx("span",{className:"inline-block h-2.5 w-2.5 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"0ms"}}),x.jsx("span",{className:"inline-block h-2.5 w-2.5 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"150ms"}}),x.jsx("span",{className:"inline-block h-2.5 w-2.5 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"300ms"}})]})}):x.jsx(JD,{content:OD(Ud(e.content||"")),className:ee,syntaxTheme:O}),[ee,e.content,e.isStreaming,O]),ke=y.useMemo(()=>[...I].sort((Ke,Bt)=>{const ir=Ke.timestamp instanceof Date?Ke.timestamp.getTime():new Date(Ke.timestamp).getTime(),en=Bt.timestamp instanceof Date?Bt.timestamp.getTime():new Date(Bt.timestamp).getTime();return ir-en}).map(Ke=>{const Bt=Ke.role==="assistant",ir=Bt?G:q,en=Ke.isStreaming&&(!Ke.content||Ke.content==="…")?x.jsx("div",{className:ir,children:x.jsxs("div",{className:"flex items-center gap-1.5 py-1",children:[x.jsx("span",{className:"inline-block h-2 w-2 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"0ms"}}),x.jsx("span",{className:"inline-block h-2 w-2 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"150ms"}}),x.jsx("span",{className:"inline-block h-2 w-2 animate-bounce rounded-full bg-gray-400 dark:bg-[#bfc2cd]",style:{animationDelay:"300ms"}})]})}):x.jsx(JD,{content:OD(Ud(Ke.content||"")),className:ir,syntaxTheme:O});return x.jsxs("div",{className:"flex items-start gap-3",children:[x.jsx("div",{className:`mt-0.5 flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full ${Bt?"bg-blue-100 text-blue-700 dark:bg-[#1f2a36] dark:text-[#c5d7ff]":"bg-emerald-100 text-emerald-700 dark:bg-[#1f2a36] dark:text-[#9ef0d5]"}`,children:Bt?x.jsx(WG,{className:"h-3.5 w-3.5"}):x.jsx(PG,{className:"h-3.5 w-3.5"})}),x.jsxs("div",{className:"flex-1 min-w-0 rounded-2xl border border-white/70 bg-white/90 px-4 py-3 text-sm shadow-sm dark:border-white/5 dark:bg-white/5 backdrop-blur overflow-hidden",children:[x.jsxs("div",{className:"mb-1 flex items-center justify-between text-[11px] font-semibold uppercase tracking-wide text-blue-900/70 dark:text-[#c5d7ff]",children:[x.jsx("span",{children:Bt?"Assistant":"You"}),x.jsx("span",{children:we(Ke.timestamp)})]}),x.jsx("div",{className:"thread-markdown-wrapper overflow-x-auto",children:en})]})]},Ke.id)}),[we,O,G,I,q]);return x.jsxs("div",{className:"group flex items-start gap-3 px-1 animate-fadeIn min-w-0 sm:px-0",children:[x.jsx("div",{className:`flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full self-start -mt-2 ml-1 shadow-sm ring-2 ring-white/50 dark:ring-white/10 sm:-mt-3 sm:ml-2 ${ae}`,children:m?x.jsx(WG,{className:"h-5 w-5"}):x.jsx(PG,{className:"h-5 w-5"})}),x.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[x.jsxs("div",{className:"flex flex-col gap-1.5 mb-1",children:[x.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-gray-700 dark:text-[#ececf1]",children:m?"Assistant":"You"}),x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:Ae})]}),x.jsxs("div",{className:oe,children:[De,e.attachments&&e.attachments.length>0&&x.jsx("div",{className:"mt-3 space-y-2",children:e.attachments.map(Fe=>x.jsxs("div",{className:`flex items-center gap-3 rounded-xl border p-3 ${ge}`,children:[x.jsx(Fle,{className:"h-4 w-4 text-gray-500 dark:text-[#bfc2cd]"}),x.jsxs("div",{className:"min-w-0 flex-1",children:[x.jsx("p",{className:"truncate text-sm font-medium text-[#353740] dark:text-[#ececf1]",children:Fe.filename}),x.jsxs("p",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:[(Fe.file_size/1024).toFixed(1)," KB"]})]})]},Fe.file_id))}),e.audio&&m&&!e.isStreaming&&x.jsx(D_e,{audio:e.audio,audioFormat:e.audioFormat,autoPlay:!1})]}),m&&!e.isStreaming&&x.jsxs("div",{className:"flex items-center gap-1 md:gap-2 text-xs text-gray-500 transition-opacity dark:text-[#bfc2cd] sm:opacity-0 sm:group-hover:opacity-100",children:[x.jsxs("button",{onClick:te,className:"inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a]",title:"Copy message",children:[x.jsx(Cle,{className:"h-4 w-4"}),x.jsx("span",{className:"hidden sm:inline",children:"Copy"})]}),t&&x.jsxs("button",{onClick:()=>t(e.id),className:"inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a]",title:"Regenerate response",children:[x.jsx(zle,{className:"h-4 w-4"}),x.jsx("span",{className:"hidden sm:inline",children:"Retry"})]}),D&&r&&e.supportsThreading&&!e.threadInfo&&i&&x.jsxs("button",{onClick:()=>r(e.id,i),className:"inline-flex items-center gap-1 rounded px-2 py-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a]",title:"Start thread for follow-up questions",children:[x.jsx(O0,{className:"h-4 w-4"}),x.jsx("span",{className:"hidden sm:inline",children:"Start Thread"})]}),Y_e()&&x.jsxs("div",{className:"flex items-center gap-1",children:[x.jsx("button",{onClick:()=>he("up"),className:`rounded p-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a] ${l==="up"?"text-[#353740] dark:text-[#ececf1]":""}`,title:"Good response",children:x.jsx(Jle,{className:"h-4 w-4"})}),x.jsx("button",{onClick:()=>he("down"),className:`rounded p-1 hover:bg-gray-200 dark:hover:bg-[#3c3f4a] ${l==="down"?"text-[#353740] dark:text-[#ececf1]":""}`,title:"Poor response",children:x.jsx(Hle,{className:"h-4 w-4"})})]}),s&&x.jsx("span",{children:"Copied"})]}),D&&e.threadInfo&&x.jsxs("div",{className:"thread-panel mt-4 rounded-xl border border-blue-100/80 bg-blue-50/70 p-3 sm:p-4 text-sm shadow-sm ring-1 ring-blue-100/60 dark:border-[#1f2a36] dark:bg-[#0f1821] dark:ring-[#1f2a36]",children:[x.jsxs("div",{className:"flex items-center justify-between gap-2 text-sm font-semibold text-blue-900 dark:text-[#c5d7ff]",children:[x.jsxs("div",{className:"inline-flex items-center gap-2 uppercase tracking-wide text-xs sm:text-sm",children:[x.jsx(O0,{className:"h-3.5 w-3.5"}),x.jsxs("span",{children:["Thread",M>0?` (${M})`:""]})]}),x.jsx("button",{onClick:()=>B(Fe=>!Fe),className:"inline-flex items-center gap-1.5 sm:gap-2 rounded-full border border-blue-200/80 px-2.5 sm:px-3 py-1.5 text-xs uppercase tracking-wide text-blue-900 transition hover:bg-white/70 dark:border-[#233449] dark:text-[#c5d7ff] dark:hover:bg-white/10",children:d?x.jsxs(x.Fragment,{children:[x.jsx("span",{className:"hidden sm:inline",children:"Hide"}),x.jsx(yle,{className:"h-4 w-4 sm:h-3 sm:w-3"})]}):x.jsxs(x.Fragment,{children:[x.jsx("span",{className:"hidden sm:inline",children:"Show"}),x.jsx(R6,{className:"h-4 w-4 sm:h-3 sm:w-3"})]})})]}),d&&x.jsxs(x.Fragment,{children:[x.jsx("div",{ref:E,className:"mt-3 space-y-3 max-h-96 overflow-y-auto scroll-smooth",style:{scrollBehavior:"auto"},children:ke}),v&&x.jsx("div",{className:"mt-3 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/30 dark:bg-[#2f2410] dark:text-amber-100",children:v}),x.jsx("div",{className:"mt-3 rounded-xl border border-white/80 bg-white/95 p-3 shadow-sm dark:border-white/10 dark:bg-white/10",children:x.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3",children:[x.jsx("textarea",{ref:w,className:"flex-1 w-full sm:w-auto min-w-0 resize-none rounded-lg border border-gray-200 bg-gray-50 px-3 py-2.5 text-base sm:text-sm text-[#353740] placeholder-gray-500 outline-none transition focus:border-gray-400 focus:ring-1 focus:ring-gray-300 disabled:opacity-60 dark:border-[#3c3f4a] dark:bg-[#2d2f39] dark:text-[#ececf1] dark:placeholder-[#8e8ea0] dark:focus:border-[#8e8ea0] dark:focus:ring-[#8e8ea0]",placeholder:M>0?"Reply in thread...":"Ask a follow-up...",value:u,onChange:Fe=>g(Fe.target.value),onKeyDown:Ye,disabled:be,rows:1,maxLength:z,style:{minHeight:"44px",maxHeight:"120px",outline:"none",boxShadow:"none",WebkitAppearance:"none",MozAppearance:"none",appearance:"none"}}),x.jsxs("div",{className:"flex items-center justify-between sm:justify-end gap-2",children:[u.length>0&&x.jsx("div",{className:"text-xs text-gray-500 dark:text-[#bfc2cd] whitespace-nowrap",children:x.jsxs("span",{className:u.length>=z?"text-red-600 font-semibold":"",children:[u.length,"/",z]})}),x.jsx("button",{type:"button",onClick:Z,disabled:be||u.trim().length===0,className:`flex h-11 w-11 sm:h-9 sm:w-9 items-center justify-center rounded-full transition active:scale-95 ${u.trim().length>0&&!be?"bg-[#10a37f] text-white hover:bg-[#0f8f6f]":"bg-gray-200 text-gray-400 dark:bg-[#2f313a] dark:text-[#6b6f7a]"} disabled:cursor-not-allowed`,title:"Send thread message",children:h?x.jsx(qc,{className:"h-5 w-5 sm:h-4 sm:w-4 animate-spin"}):x.jsx(G6,{className:"h-5 w-5 sm:h-4 sm:w-4"})})]})]})})]})]})]})]})}function v_e(e=800,t=100,r="sine"){try{if(typeof window>"u"){fe("[SoundEffects] Window is not available for audio playback");return}const n=window.AudioContext??window.webkitAudioContext;if(!n){fe("[SoundEffects] AudioContext not supported in this browser");return}const A=new n,i=A.createOscillator(),a=A.createGain();i.connect(a),a.connect(A.destination),i.frequency.value=e,i.type=r,a.gain.setValueAtTime(.3,A.currentTime),a.gain.exponentialRampToValueAtTime(.01,A.currentTime+t/1e3),i.start(A.currentTime),i.stop(A.currentTime+t/1e3)}catch{}}const G_e={messageSent:{frequency:600,duration:80,type:"sine"},messageReceived:{frequency:800,duration:100,type:"sine"},success:{frequency:1e3,duration:150,type:"sine"},error:{frequency:400,duration:200,type:"square"},notification:{frequency:700,duration:120,type:"sine"}};function ld(e,t){if(!t)return;const r=G_e[e];if(r)try{v_e(r.frequency,r.duration,r.type),fe(`[SoundEffects] Playing ${e} sound effect`)}catch{}}function R_e({messages:e,onRegenerate:t,onStartThread:r,onSendThreadMessage:n,sessionId:A,isLoading:i}){const a=y.useRef(null),s=y.useRef(null),o=y.useRef(e.length),l=y.useRef(""),c=y.useRef(i),u=y.useRef(!0),{settings:g}=Wf(),{topLevelMessages:d,threadLookup:B}=y.useMemo(()=>{const p=new Map,w=[];return e.forEach(E=>{if(E.isThreadMessage&&E.parentMessageId){const C=p.get(E.parentMessageId)||[];p.set(E.parentMessageId,[...C,E]);return}w.push(E)}),{topLevelMessages:w,threadLookup:p}},[e]),h=()=>{if(!s.current)return;const{scrollTop:p,scrollHeight:w,clientHeight:E}=s.current,m=w-p-E<200;u.current=m},f=y.useCallback(()=>{requestAnimationFrame(()=>{s.current&&(s.current.scrollTop=s.current.scrollHeight)})},[]);return y.useEffect(()=>{const p=e.length,w=o.current,E=p>w,C=e[e.length-1],m=(C==null?void 0:C.content)||"",I=m!==l.current,M=(C==null?void 0:C.isStreaming)??!1;E||M&&I?(f(),u.current=!0):u.current&&I&&f(),o.current=p,l.current=m},[e,f]),y.useEffect(()=>{i&&(f(),u.current=!0)},[i,f]),y.useEffect(()=>{if(c.current&&!i){const p=e[e.length-1];(p==null?void 0:p.role)==="assistant"&&p.content&&ld("messageReceived",g.soundEnabled)}c.current=i},[i,e,g.soundEnabled]),d.length===0?x.jsx("div",{className:"flex-1 flex items-center justify-center px-4 sm:px-6",children:x.jsxs("div",{className:"text-center text-lg text-gray-500 dark:text-[#bfc2cd]",children:[x.jsx("p",{className:"text-xl",children:"Your messages will appear here."}),x.jsx("p",{className:"mt-1 text-lg",children:"Start the conversation by sending a prompt below."})]})}):x.jsx("div",{ref:s,className:"message-list flex-1 overflow-y-auto py-6",onScroll:h,children:x.jsxs("div",{className:"space-y-6 px-3 sm:px-4",children:[d.map(p=>x.jsx(U_e,{message:p,onRegenerate:t,onStartThread:r,onSendThreadMessage:n,threadMessages:B.get(p.id),sessionId:A,isThreadSendDisabled:i},p.id)),x.jsx("div",{ref:a,className:"h-8"})]})})}const j_e=2e3;function z_e(e,t){const[r,n]=y.useState(!1),[A,i]=y.useState(null),a=y.useRef(null),s=y.useRef(""),o=y.useRef(!1),l=y.useRef(null),c=y.useCallback(()=>{if(!s.current)return;const p=s.current;s.current="",e(" "+p)},[e]),u=typeof window<"u"&&("webkitSpeechRecognition"in window||"SpeechRecognition"in window),g=y.useCallback(()=>{!t||o.current||(o.current=!0,t())},[t]),d=y.useCallback(()=>{l.current!==null&&(clearTimeout(l.current),l.current=null)},[]),B=y.useCallback(()=>{d(),l.current=setTimeout(()=>{a.current?a.current.stop():g()},j_e)},[d,g]),h=y.useCallback(()=>{if(!u){i("Speech recognition is not supported in this browser. Please try Chrome, Edge, or Safari.");return}if(!r)try{o.current=!1;const p=window.SpeechRecognition||window.webkitSpeechRecognition,w=new p;w.continuous=!0,w.interimResults=!0,w.lang=navigator.language||"en-US",w.maxAlternatives=1,w.onstart=()=>{n(!0),i(null),fe("Speech recognition started"),B()},w.onresult=E=>{let C="",m="";for(let I=E.resultIndex;I<E.results.length;I++){const M=E.results[I][0].transcript;E.results[I].isFinal?C+=M:m+=M}m&&(s.current=m),C&&(s.current="",e(" "+C)),B()},w.onend=()=>{d(),c(),n(!1),a.current=null,fe("Speech recognition ended"),g()},w.onerror=E=>{switch(d(),Su("Speech recognition error:",E.error),n(!1),a.current=null,s.current="",g(),E.error){case"no-speech":i("No speech detected. Please try again.");break;case"audio-capture":i("Microphone access denied. Please allow microphone access and try again.");break;case"not-allowed":i("Microphone access not allowed. Please enable microphone permissions.");break;case"network":i("Network error occurred. Please check your connection.");break;default:i(`Speech recognition error: ${E.error}`)}},w.start(),a.current=w}catch{i("Failed to start speech recognition. Please try again."),n(!1)}},[u,e,r,c,g,B,d]),f=y.useCallback(()=>{if(a.current){const p=a.current;p.onend=null,p.onerror=null,p.onresult=null,p.onstart=null;try{p.stop()}catch{}a.current=null}d(),c(),n(!1),i(null),g()},[d,c,g]);return{isListening:r,isSupported:u,startListening:h,stopListening:f,error:A}}const T_e="2.5.5",L_e={"@schmitech/chatbot-api":"^2.1.3"},jae={version:T_e,dependencies:L_e},zae=jae.version,lV=jae.dependencies["@schmitech/chatbot-api"];async function WD(){try{return(await Yt(()=>import("./api-GHsmF4Sa.js"),[])).version||lV}catch{return lV}}async function Tae(){const e=await WD();return{appVersion:zae,apiVersion:e,isLocalApi:!1}}let Ha=null;function Wg(){let e=null,t=null;const r=(A,i,a,s)=>{e=a||null,t=s||null},n=()=>{if(!t)throw new Error("Adapter name is required when middleware is enabled");return{async*streamChat(A,i,a,s,o,l,c,u,g,d,B){var p,w;const h={messages:[{role:"user",content:A}],stream:i!==!1};a&&a.length>0&&(h.file_ids=a),s&&(h.thread_id=s),o&&(h.audio_input=o),l&&(h.audio_format=l),c&&(h.language=c),u!==void 0&&(h.return_audio=u),g&&(h.tts_voice=g),d&&(h.source_language=d),B&&(h.target_language=B);const f=await fetch("/api/v1/chat",{method:"POST",headers:{"Content-Type":"application/json","X-Adapter-Name":t,...e?{"X-Session-ID":e}:{}},body:JSON.stringify(h)});if(!f.ok)throw new Error(`API request failed: ${f.status} ${f.statusText}`);if((p=f.headers.get("content-type"))!=null&&p.includes("text/event-stream")){const E=(w=f.body)==null?void 0:w.getReader(),C=new TextDecoder;let m="";if(!E)throw new Error("Response body is not readable");for(;;){const{done:I,value:M}=await E.read();if(I)break;m+=C.decode(M,{stream:!0});const b=m.split(`
954
954
  `);m=b.pop()||"";for(const k of b)if(k.startsWith("data: "))try{const N=JSON.parse(k.substring(6));yield{text:N.text||N.content||N.message||N.response||"",done:N.done||!1,audio:N.audio,audioFormat:N.audio_format||N.audioFormat,audio_chunk:N.audio_chunk,chunk_index:N.chunk_index,threading:N.threading}}catch{}}if(m.trim()){const I=m.split(`
955
- `);for(const M of I)if(M.startsWith("data: "))try{const b=JSON.parse(M.substring(6));yield{text:b.text||b.content||b.message||b.response||"",done:b.done||!1,audio:b.audio,audioFormat:b.audio_format||b.audioFormat,audio_chunk:b.audio_chunk,chunk_index:b.chunk_index,threading:b.threading}}catch{}}}else{const E=await f.json();yield{text:E.message||E.response||"",done:!0}}},async createThread(A,i){const a=await fetch("/api/proxy/api/threads",{method:"POST",headers:{"Content-Type":"application/json","X-Adapter-Name":t,"X-Session-ID":i},body:JSON.stringify({message_id:A,session_id:i})});if(!a.ok)throw new Error(`Failed to create thread: ${a.statusText}`);return a.json()},async getThreadInfo(A){const i=await fetch(`/api/proxy/api/threads/${A}`,{headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to get thread info: ${i.statusText}`);return i.json()},async deleteThread(A){const i=await fetch(`/api/proxy/api/threads/${A}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to delete thread: ${i.statusText}`);return i.json()},async clearConversationHistory(A){const i=await fetch(`/api/proxy/admin/chat-history/${A||e}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to clear history: ${i.statusText}`);return i.json()},async deleteConversationWithFiles(A,i){const a=A||e,s=i&&i.length>0?`?file_ids=${i.join(",")}`:"",o=await fetch(`/api/proxy/admin/conversations/${a}${s}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!o.ok)throw new Error(`Failed to delete conversation: ${o.statusText}`);return o.json()},getSessionId:()=>e,async uploadFile(A){const i=new FormData;i.append("file",A);const a=await fetch("/api/proxy/api/files/upload",{method:"POST",headers:{"X-Adapter-Name":t},body:i});if(!a.ok)throw new Error(`Failed to upload file: ${a.statusText}`);return a.json()},async listFiles(){const A=await fetch("/api/proxy/api/files",{headers:{"X-Adapter-Name":t}});if(!A.ok)throw new Error(`Failed to list files: ${A.statusText}`);const i=await A.json();return Array.isArray(i)?i:i.files||[]},async getFileInfo(A){const i=await fetch(`/api/proxy/api/files/${A}`,{headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to get file info: ${i.statusText}`);return i.json()},async queryFile(A,i,a){const s=await fetch(`/api/proxy/api/files/${A}/query`,{method:"POST",headers:{"Content-Type":"application/json","X-Adapter-Name":t},body:JSON.stringify({query:i,max_results:a})});if(!s.ok)throw new Error(`Failed to query file: ${s.statusText}`);return s.json()},async deleteFile(A){const i=await fetch(`/api/proxy/api/files/${A}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to delete file: ${i.statusText}`);return i.json()},async validateApiKey(){const A=await fetch(`/api/proxy/admin/api-keys/${t}/status`,{headers:{"X-Adapter-Name":t}});if(!A.ok)throw new Error(`Failed to validate API key: ${A.statusText}`);return A.json()},async getAdapterInfo(){const A=await fetch("/api/proxy/admin/api-keys/info",{headers:{"X-Adapter-Name":t}});if(!A.ok){const i=await A.text();throw new Error(`Failed to get adapter info: ${A.status} ${A.statusText} - ${i}`)}return A.json()}}};return{configureApi:r,streamChat:async function*(A,i,a,s,o,l,c,u,g,d,B){yield*n().streamChat(A,i,a,s,o,l,c,u,g,d,B)},ApiClient:class{constructor(i){hA(this,"client");t=i.adapterName||null,e=i.sessionId||null,this.client=n()}async*streamChat(...i){yield*this.client.streamChat(...i)}get createThread(){var i;return(i=this.client.createThread)==null?void 0:i.bind(this.client)}get getThreadInfo(){var i;return(i=this.client.getThreadInfo)==null?void 0:i.bind(this.client)}get deleteThread(){var i;return(i=this.client.deleteThread)==null?void 0:i.bind(this.client)}get clearConversationHistory(){var i;return(i=this.client.clearConversationHistory)==null?void 0:i.bind(this.client)}get deleteConversationWithFiles(){var i;return(i=this.client.deleteConversationWithFiles)==null?void 0:i.bind(this.client)}get getSessionId(){var i;return(i=this.client.getSessionId)==null?void 0:i.bind(this.client)}get uploadFile(){var i;return(i=this.client.uploadFile)==null?void 0:i.bind(this.client)}get listFiles(){var i;return(i=this.client.listFiles)==null?void 0:i.bind(this.client)}get getFileInfo(){var i;return(i=this.client.getFileInfo)==null?void 0:i.bind(this.client)}get queryFile(){var i;return(i=this.client.queryFile)==null?void 0:i.bind(this.client)}get deleteFile(){var i;return(i=this.client.deleteFile)==null?void 0:i.bind(this.client)}get validateApiKey(){var i;return(i=this.client.validateApiKey)==null?void 0:i.bind(this.client)}get getAdapterInfo(){var i;return(i=this.client.getAdapterInfo)==null?void 0:i.bind(this.client)}}}}async function H_e(e){return e==="@local-node-api/api.mjs"?Yt(()=>import("./api-BHF9IxKN.js"),[]):import(e)}async function J_e(){if(Ha)return Ha;const e=C_e(),t=Q_e(),r=Tr();try{if(e){let n;t?t.startsWith("/")?n=t.startsWith("/src/")?`.${t.substring(4)}${t.endsWith(".mjs")?"":"/api.mjs"}`:"../../../node-api/dist/api.mjs":t.startsWith("../")||t.startsWith("./")?n=t.endsWith(".mjs")?t:`${t}/api.mjs`:n=`./${t}${t.endsWith(".mjs")?"":"/api.mjs"}`:n="../../../node-api/dist/api.mjs",fe(`🔧 Loading local API from: ${n}`);const A=await H_e(n);r?(fe("🔐 API Middleware enabled - routing through proxy"),Ha=Wg()):Ha={configureApi:A.configureApi,streamChat:A.streamChat,ApiClient:A.ApiClient},fe("✅ Local API loaded successfully")}else{fe("📦 Loading npm package API");const n=await Yt(()=>import("./api-tSLlTydc.js"),[]),A=async function*(s,o,l,c,u,g,d,B,h,f,p){yield*n.streamChat(s,o,l,c,u,g,d,B,h,f,p)};class i{constructor(o){hA(this,"client");if(r&&o.adapterName){const l=Wg();this.client=new l.ApiClient(o)}else this.client=new n.ApiClient(o)}async*streamChat(o,l,c,u,g,d,B,h,f,p,w){yield*this.client.streamChat(o,l,c,u,g,d,B,h,f,p,w)}get createThread(){var o;return(o=this.client.createThread)==null?void 0:o.bind(this.client)}get getThreadInfo(){var o;return(o=this.client.getThreadInfo)==null?void 0:o.bind(this.client)}get deleteThread(){var o;return(o=this.client.deleteThread)==null?void 0:o.bind(this.client)}get clearConversationHistory(){var o;return(o=this.client.clearConversationHistory)==null?void 0:o.bind(this.client)}get deleteConversationWithFiles(){var o;return(o=this.client.deleteConversationWithFiles)==null?void 0:o.bind(this.client)}get getSessionId(){var o;return(o=this.client.getSessionId)==null?void 0:o.bind(this.client)}get uploadFile(){var o;return(o=this.client.uploadFile)==null?void 0:o.bind(this.client)}get listFiles(){var o;return(o=this.client.listFiles)==null?void 0:o.bind(this.client)}get getFileInfo(){var o;return(o=this.client.getFileInfo)==null?void 0:o.bind(this.client)}get queryFile(){var o;return(o=this.client.queryFile)==null?void 0:o.bind(this.client)}get deleteFile(){var o;return(o=this.client.deleteFile)==null?void 0:o.bind(this.client)}get validateApiKey(){var o;return(o=this.client.validateApiKey)==null?void 0:o.bind(this.client)}get getAdapterInfo(){var o;return(o=this.client.getAdapterInfo)==null?void 0:o.bind(this.client)}}r?(fe("🔐 API Middleware enabled - routing through proxy"),Ha=Wg()):Ha={configureApi:n.configureApi,streamChat:A,ApiClient:i};const a=await WD();fe(`✅ NPM package API loaded successfully (v${a})`)}}catch(n){if(e)try{const A=await Yt(()=>import("./api-tSLlTydc.js"),[]),i=async function*(o,l,c,u,g,d,B,h,f,p,w){yield*A.streamChat(o,l,c,u,g,d,B,h,f,p,w)};class a{constructor(l){hA(this,"client");if(r&&l.adapterName){const c=Wg();this.client=new c.ApiClient(l)}else this.client=new A.ApiClient(l)}async*streamChat(l,c,u,g,d,B,h,f,p,w,E){yield*this.client.streamChat(l,c,u,g,d,B,h,f,p,w,E)}get createThread(){var l;return(l=this.client.createThread)==null?void 0:l.bind(this.client)}get getThreadInfo(){var l;return(l=this.client.getThreadInfo)==null?void 0:l.bind(this.client)}get deleteThread(){var l;return(l=this.client.deleteThread)==null?void 0:l.bind(this.client)}get clearConversationHistory(){var l;return(l=this.client.clearConversationHistory)==null?void 0:l.bind(this.client)}get deleteConversationWithFiles(){var l;return(l=this.client.deleteConversationWithFiles)==null?void 0:l.bind(this.client)}get getSessionId(){var l;return(l=this.client.getSessionId)==null?void 0:l.bind(this.client)}get uploadFile(){var l;return(l=this.client.uploadFile)==null?void 0:l.bind(this.client)}get listFiles(){var l;return(l=this.client.listFiles)==null?void 0:l.bind(this.client)}get getFileInfo(){var l;return(l=this.client.getFileInfo)==null?void 0:l.bind(this.client)}get queryFile(){var l;return(l=this.client.queryFile)==null?void 0:l.bind(this.client)}get deleteFile(){var l;return(l=this.client.deleteFile)==null?void 0:l.bind(this.client)}get validateApiKey(){var l;return(l=this.client.validateApiKey)==null?void 0:l.bind(this.client)}get getAdapterInfo(){var l;return(l=this.client.getAdapterInfo)==null?void 0:l.bind(this.client)}}r?(fe("🔐 API Middleware enabled - routing through proxy"),Ha=Wg()):Ha={configureApi:A.configureApi,streamChat:i,ApiClient:a};const s=await WD();fe(`✅ Fallback to NPM package successful (v${s})`)}catch{throw new Error("Failed to load both local and npm API packages")}else throw n}return Ha}async function En(){return await J_e()}const Rp=El(),O_e=()=>{try{if(typeof window>"u"||!window.localStorage)return null;const e=window.localStorage.getItem("chat-api-url");return e&&e===Kl?(window.localStorage.removeItem("chat-api-url"),null):e}catch{return null}},Pg=e=>{const t=e==null?void 0:e.trim();if(t)return t;const r=O_e();return r&&r!==Kl?r:Vr()},jp=()=>typeof window>"u"?null:window.CHATBOT_API_KEY||null;class xB{static async uploadFile(t,r,n,A,i){try{const a=lt.maxFileSizeMB*1024*1024;if(t.size>a)throw new Error(`File size exceeds maximum limit of ${lt.maxFileSizeMB}MB`);if(!(["application/pdf","text/plain","text/markdown","text/csv","application/json","text/html","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/vnd.ms-excel.sheet.macroEnabled.12","text/x-python","text/x-python-script","text/x-java-source","text/x-java","text/x-sql","text/javascript","application/javascript","text/typescript","application/typescript","text/x-c++src","text/x-csrc","text/x-c","text/x-go","text/x-rust","text/x-ruby","text/x-php","text/x-shellscript","text/x-sh","text/yaml","text/x-yaml","text/xml","application/xml","text/css","text/x-scss","text/x-sass","text/x-less","image/png","image/jpeg","image/tiff","audio/wav","audio/mpeg","audio/mp3","audio/mp4","audio/ogg","audio/flac","audio/webm","audio/x-m4a","audio/aac","text/vtt"].includes(t.type)||/\.(pdf|txt|md|csv|json|html|docx|pptx|xlsx|py|java|sql|js|mjs|ts|tsx|cpp|cxx|cc|c|h|hpp|go|rs|rb|php|sh|bash|zsh|yaml|yml|xml|css|scss|sass|less|png|jpe?g|tiff?|wav|mp3|mp4|ogg|flac|webm|m4a|aac|vtt)$/i.test(t.name)||(t.type==="application/x-zip-compressed"||t.type==="application/zip")&&/\.xlsx$/i.test(t.name)))throw new Error(`File type not supported: ${t.type||"unknown"}`);r&&r({filename:t.name,progress:0,status:"uploading"});const l=await En(),c=Pg(A),u=Tr();let g=null,d=null;if(u){if(d=i||(typeof window<"u"?localStorage.getItem("chat-adapter-name"):null),!d)throw new Error("Adapter not configured. Please select an adapter from the dropdown.");fe(`🔑 Using adapter: ${d}`)}else{if(g=n||localStorage.getItem("chat-api-key")||jp()||Rp,!g||g==="your-api-key-here")throw new Error(`API key not configured or invalid. Please:
955
+ `);for(const M of I)if(M.startsWith("data: "))try{const b=JSON.parse(M.substring(6));yield{text:b.text||b.content||b.message||b.response||"",done:b.done||!1,audio:b.audio,audioFormat:b.audio_format||b.audioFormat,audio_chunk:b.audio_chunk,chunk_index:b.chunk_index,threading:b.threading}}catch{}}}else{const E=await f.json();yield{text:E.message||E.response||"",done:!0}}},async createThread(A,i){const a=await fetch("/api/threads",{method:"POST",headers:{"Content-Type":"application/json","X-Adapter-Name":t,"X-Session-ID":i},body:JSON.stringify({message_id:A,session_id:i})});if(!a.ok)throw new Error(`Failed to create thread: ${a.statusText}`);return a.json()},async getThreadInfo(A){const i=await fetch(`/api/threads/${A}`,{headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to get thread info: ${i.statusText}`);return i.json()},async deleteThread(A){const i=await fetch(`/api/threads/${A}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to delete thread: ${i.statusText}`);return i.json()},async clearConversationHistory(A){const i=await fetch(`/api/admin/chat-history/${A||e}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to clear history: ${i.statusText}`);return i.json()},async deleteConversationWithFiles(A,i){const a=A||e,s=i&&i.length>0?`?file_ids=${i.join(",")}`:"",o=await fetch(`/api/admin/conversations/${a}${s}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!o.ok)throw new Error(`Failed to delete conversation: ${o.statusText}`);return o.json()},getSessionId:()=>e,async uploadFile(A){const i=new FormData;i.append("file",A);const a=await fetch("/api/files/upload",{method:"POST",headers:{"X-Adapter-Name":t},body:i});if(!a.ok)throw new Error(`Failed to upload file: ${a.statusText}`);return a.json()},async listFiles(){const A=await fetch("/api/files",{headers:{"X-Adapter-Name":t}});if(!A.ok)throw new Error(`Failed to list files: ${A.statusText}`);const i=await A.json();return Array.isArray(i)?i:i.files||[]},async getFileInfo(A){const i=await fetch(`/api/files/${A}`,{headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to get file info: ${i.statusText}`);return i.json()},async queryFile(A,i,a){const s=await fetch(`/api/files/${A}/query`,{method:"POST",headers:{"Content-Type":"application/json","X-Adapter-Name":t},body:JSON.stringify({query:i,max_results:a})});if(!s.ok)throw new Error(`Failed to query file: ${s.statusText}`);return s.json()},async deleteFile(A){const i=await fetch(`/api/files/${A}`,{method:"DELETE",headers:{"X-Adapter-Name":t}});if(!i.ok)throw new Error(`Failed to delete file: ${i.statusText}`);return i.json()},async validateApiKey(){const A=await fetch(`/api/admin/api-keys/${t}/status`,{headers:{"X-Adapter-Name":t}});if(!A.ok)throw new Error(`Failed to validate API key: ${A.statusText}`);return A.json()},async getAdapterInfo(){const A=await fetch("/api/admin/api-keys/info",{headers:{"X-Adapter-Name":t}});if(!A.ok){const i=await A.text();throw new Error(`Failed to get adapter info: ${A.status} ${A.statusText} - ${i}`)}return A.json()}}};return{configureApi:r,streamChat:async function*(A,i,a,s,o,l,c,u,g,d,B){yield*n().streamChat(A,i,a,s,o,l,c,u,g,d,B)},ApiClient:class{constructor(i){hA(this,"client");t=i.adapterName||null,e=i.sessionId||null,this.client=n()}async*streamChat(...i){yield*this.client.streamChat(...i)}get createThread(){var i;return(i=this.client.createThread)==null?void 0:i.bind(this.client)}get getThreadInfo(){var i;return(i=this.client.getThreadInfo)==null?void 0:i.bind(this.client)}get deleteThread(){var i;return(i=this.client.deleteThread)==null?void 0:i.bind(this.client)}get clearConversationHistory(){var i;return(i=this.client.clearConversationHistory)==null?void 0:i.bind(this.client)}get deleteConversationWithFiles(){var i;return(i=this.client.deleteConversationWithFiles)==null?void 0:i.bind(this.client)}get getSessionId(){var i;return(i=this.client.getSessionId)==null?void 0:i.bind(this.client)}get uploadFile(){var i;return(i=this.client.uploadFile)==null?void 0:i.bind(this.client)}get listFiles(){var i;return(i=this.client.listFiles)==null?void 0:i.bind(this.client)}get getFileInfo(){var i;return(i=this.client.getFileInfo)==null?void 0:i.bind(this.client)}get queryFile(){var i;return(i=this.client.queryFile)==null?void 0:i.bind(this.client)}get deleteFile(){var i;return(i=this.client.deleteFile)==null?void 0:i.bind(this.client)}get validateApiKey(){var i;return(i=this.client.validateApiKey)==null?void 0:i.bind(this.client)}get getAdapterInfo(){var i;return(i=this.client.getAdapterInfo)==null?void 0:i.bind(this.client)}}}}async function H_e(e){return e==="@local-node-api/api.mjs"?Yt(()=>import("./api-BHF9IxKN.js"),[]):import(e)}async function J_e(){if(Ha)return Ha;const e=C_e(),t=Q_e(),r=Tr();try{if(e){let n;t?t.startsWith("/")?n=t.startsWith("/src/")?`.${t.substring(4)}${t.endsWith(".mjs")?"":"/api.mjs"}`:"../../../node-api/dist/api.mjs":t.startsWith("../")||t.startsWith("./")?n=t.endsWith(".mjs")?t:`${t}/api.mjs`:n=`./${t}${t.endsWith(".mjs")?"":"/api.mjs"}`:n="../../../node-api/dist/api.mjs",fe(`🔧 Loading local API from: ${n}`);const A=await H_e(n);r?(fe("🔐 API Middleware enabled - routing through proxy"),Ha=Wg()):Ha={configureApi:A.configureApi,streamChat:A.streamChat,ApiClient:A.ApiClient},fe("✅ Local API loaded successfully")}else{fe("📦 Loading npm package API");const n=await Yt(()=>import("./api-GHsmF4Sa.js"),[]),A=async function*(s,o,l,c,u,g,d,B,h,f,p){yield*n.streamChat(s,o,l,c,u,g,d,B,h,f,p)};class i{constructor(o){hA(this,"client");if(r&&o.adapterName){const l=Wg();this.client=new l.ApiClient(o)}else this.client=new n.ApiClient(o)}async*streamChat(o,l,c,u,g,d,B,h,f,p,w){yield*this.client.streamChat(o,l,c,u,g,d,B,h,f,p,w)}get createThread(){var o;return(o=this.client.createThread)==null?void 0:o.bind(this.client)}get getThreadInfo(){var o;return(o=this.client.getThreadInfo)==null?void 0:o.bind(this.client)}get deleteThread(){var o;return(o=this.client.deleteThread)==null?void 0:o.bind(this.client)}get clearConversationHistory(){var o;return(o=this.client.clearConversationHistory)==null?void 0:o.bind(this.client)}get deleteConversationWithFiles(){var o;return(o=this.client.deleteConversationWithFiles)==null?void 0:o.bind(this.client)}get getSessionId(){var o;return(o=this.client.getSessionId)==null?void 0:o.bind(this.client)}get uploadFile(){var o;return(o=this.client.uploadFile)==null?void 0:o.bind(this.client)}get listFiles(){var o;return(o=this.client.listFiles)==null?void 0:o.bind(this.client)}get getFileInfo(){var o;return(o=this.client.getFileInfo)==null?void 0:o.bind(this.client)}get queryFile(){var o;return(o=this.client.queryFile)==null?void 0:o.bind(this.client)}get deleteFile(){var o;return(o=this.client.deleteFile)==null?void 0:o.bind(this.client)}get validateApiKey(){var o;return(o=this.client.validateApiKey)==null?void 0:o.bind(this.client)}get getAdapterInfo(){var o;return(o=this.client.getAdapterInfo)==null?void 0:o.bind(this.client)}}r?(fe("🔐 API Middleware enabled - routing through proxy"),Ha=Wg()):Ha={configureApi:n.configureApi,streamChat:A,ApiClient:i};const a=await WD();fe(`✅ NPM package API loaded successfully (v${a})`)}}catch(n){if(e)try{const A=await Yt(()=>import("./api-GHsmF4Sa.js"),[]),i=async function*(o,l,c,u,g,d,B,h,f,p,w){yield*A.streamChat(o,l,c,u,g,d,B,h,f,p,w)};class a{constructor(l){hA(this,"client");if(r&&l.adapterName){const c=Wg();this.client=new c.ApiClient(l)}else this.client=new A.ApiClient(l)}async*streamChat(l,c,u,g,d,B,h,f,p,w,E){yield*this.client.streamChat(l,c,u,g,d,B,h,f,p,w,E)}get createThread(){var l;return(l=this.client.createThread)==null?void 0:l.bind(this.client)}get getThreadInfo(){var l;return(l=this.client.getThreadInfo)==null?void 0:l.bind(this.client)}get deleteThread(){var l;return(l=this.client.deleteThread)==null?void 0:l.bind(this.client)}get clearConversationHistory(){var l;return(l=this.client.clearConversationHistory)==null?void 0:l.bind(this.client)}get deleteConversationWithFiles(){var l;return(l=this.client.deleteConversationWithFiles)==null?void 0:l.bind(this.client)}get getSessionId(){var l;return(l=this.client.getSessionId)==null?void 0:l.bind(this.client)}get uploadFile(){var l;return(l=this.client.uploadFile)==null?void 0:l.bind(this.client)}get listFiles(){var l;return(l=this.client.listFiles)==null?void 0:l.bind(this.client)}get getFileInfo(){var l;return(l=this.client.getFileInfo)==null?void 0:l.bind(this.client)}get queryFile(){var l;return(l=this.client.queryFile)==null?void 0:l.bind(this.client)}get deleteFile(){var l;return(l=this.client.deleteFile)==null?void 0:l.bind(this.client)}get validateApiKey(){var l;return(l=this.client.validateApiKey)==null?void 0:l.bind(this.client)}get getAdapterInfo(){var l;return(l=this.client.getAdapterInfo)==null?void 0:l.bind(this.client)}}r?(fe("🔐 API Middleware enabled - routing through proxy"),Ha=Wg()):Ha={configureApi:A.configureApi,streamChat:i,ApiClient:a};const s=await WD();fe(`✅ Fallback to NPM package successful (v${s})`)}catch{throw new Error("Failed to load both local and npm API packages")}else throw n}return Ha}async function En(){return await J_e()}const Rp=El(),O_e=()=>{try{if(typeof window>"u"||!window.localStorage)return null;const e=window.localStorage.getItem("chat-api-url");return e&&e===Kl?(window.localStorage.removeItem("chat-api-url"),null):e}catch{return null}},Pg=e=>{const t=e==null?void 0:e.trim();if(t)return t;const r=O_e();return r&&r!==Kl?r:Vr()},jp=()=>typeof window>"u"?null:window.CHATBOT_API_KEY||null;class xB{static async uploadFile(t,r,n,A,i){try{const a=lt.maxFileSizeMB*1024*1024;if(t.size>a)throw new Error(`File size exceeds maximum limit of ${lt.maxFileSizeMB}MB`);if(!(["application/pdf","text/plain","text/markdown","text/csv","application/json","text/html","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/vnd.ms-excel.sheet.macroEnabled.12","text/x-python","text/x-python-script","text/x-java-source","text/x-java","text/x-sql","text/javascript","application/javascript","text/typescript","application/typescript","text/x-c++src","text/x-csrc","text/x-c","text/x-go","text/x-rust","text/x-ruby","text/x-php","text/x-shellscript","text/x-sh","text/yaml","text/x-yaml","text/xml","application/xml","text/css","text/x-scss","text/x-sass","text/x-less","image/png","image/jpeg","image/tiff","audio/wav","audio/mpeg","audio/mp3","audio/mp4","audio/ogg","audio/flac","audio/webm","audio/x-m4a","audio/aac","text/vtt"].includes(t.type)||/\.(pdf|txt|md|csv|json|html|docx|pptx|xlsx|py|java|sql|js|mjs|ts|tsx|cpp|cxx|cc|c|h|hpp|go|rs|rb|php|sh|bash|zsh|yaml|yml|xml|css|scss|sass|less|png|jpe?g|tiff?|wav|mp3|mp4|ogg|flac|webm|m4a|aac|vtt)$/i.test(t.name)||(t.type==="application/x-zip-compressed"||t.type==="application/zip")&&/\.xlsx$/i.test(t.name)))throw new Error(`File type not supported: ${t.type||"unknown"}`);r&&r({filename:t.name,progress:0,status:"uploading"});const l=await En(),c=Pg(A),u=Tr();let g=null,d=null;if(u){if(d=i||(typeof window<"u"?localStorage.getItem("chat-adapter-name"):null),!d)throw new Error("Adapter not configured. Please select an adapter from the dropdown.");fe(`🔑 Using adapter: ${d}`)}else{if(g=n||localStorage.getItem("chat-api-key")||jp()||Rp,!g||g==="your-api-key-here")throw new Error(`API key not configured or invalid. Please:
956
956
  1. Open Settings (⚙️ icon) in the top-right corner
957
957
  2. Enter a valid API key
958
958
  3. To create an API key: POST to /admin/api-keys with admin credentials
@@ -972,7 +972,7 @@ ${_le}`,f_e=()=>{if(typeof document>"u"||document.getElementById(aV))return;cons
972
972
  { "name": "Application Logs", "apiKey": "elasticsearch", "apiUrl": "http://localhost:3000" },
973
973
  { "name": "Classified CMS", "apiKey": "classified", "apiUrl": "http://localhost:3000" },
974
974
  { "name": "Business Analytics", "apiKey": "analytical", "apiUrl": "http://localhost:3000" }
975
- ]`;try{const t=JSON.parse(e);if(Array.isArray(t)){fe("Loading adapters from VITE_ADAPTERS environment variable");const r=t.map(gV).filter(n=>n!==null);if(r.length>0)return r}}catch{}return null}async function Lae(){if(Wo)return Wo;try{const t=await fetch("/api/adapters");if(t.ok)return Wo=(await t.json()).adapters,fe("Fetched adapters from /api/adapters:",Wo),Wo;fe(`/api/adapters returned ${t.status}, trying fallback`)}catch{}const e=X_e();if(e&&e.length>0)return Wo=e,Wo;throw new Error("No adapters available. Configure VITE_ADAPTERS environment variable.")}async function Hae(){try{const e=await Lae();return e.length>0?e[0]:null}catch{return null}}class Z_e{constructor(){hA(this,"audioQueue",[]);hA(this,"isPlaying",!1);hA(this,"currentAudio",null);hA(this,"audioContext",null);hA(this,"isEnabled",!1);hA(this,"onPlaybackStart",null);hA(this,"onPlaybackEnd",null);hA(this,"onChunkPlayed",null);hA(this,"blobUrls",[]);hA(this,"suppressPlaybackErrors",!1)}async enableAudio(){try{try{const t=new Audio("data:audio/wav;base64,UklGRigAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=");t.volume=0,await t.play(),t.pause()}catch{fe("[AudioStreamManager] Silent audio unlock deferred (will work on next interaction)")}return this.isEnabled=!0,fe("[AudioStreamManager] Audio playback enabled"),!0}catch{return!1}}disableAudio(){!this.isEnabled&&!this.isPlaying||(this.isEnabled=!1,this.stop())}async ensureAudioContext(){if(!this.audioContext&&typeof AudioContext<"u")try{return this.audioContext=new AudioContext,this.audioContext.state==="suspended"&&await this.audioContext.resume(),!0}catch{return!1}if(this.audioContext&&this.audioContext.state==="suspended")try{await this.audioContext.resume()}catch{return!1}return!0}isAudioEnabled(){return this.isEnabled}setOnPlaybackStart(t){this.onPlaybackStart=t}setOnPlaybackEnd(t){this.onPlaybackEnd=t}setOnChunkPlayed(t){this.onChunkPlayed=t}async addChunk(t){if(!this.isEnabled){fe(`[AudioStreamManager] Audio disabled, dropping chunk ${t.chunkIndex}`);return}fe(`[AudioStreamManager] Adding chunk ${t.chunkIndex} to queue`),this.audioQueue.push(t),this.audioQueue.sort((r,n)=>r.chunkIndex-n.chunkIndex),this.isPlaying||this.playNextChunk()}async playNextChunk(){var r,n;if(this.audioQueue.length===0){this.isPlaying=!1,this.onPlaybackEnd&&this.onPlaybackEnd();return}if(!this.isEnabled){this.audioQueue=[],this.isPlaying=!1;return}this.suppressPlaybackErrors=!1,await this.ensureAudioContext(),this.isPlaying=!0;const t=this.audioQueue.shift();try{if(!this.isPlaying)return;if(this.onPlaybackStart&&t.chunkIndex===0&&this.onPlaybackStart(),fe(`[AudioStreamManager] Playing chunk ${t.chunkIndex}`),!t.audio||t.audio.length===0)throw new Error(`Empty audio data for chunk ${t.chunkIndex}`);let A;try{A=atob(t.audio)}catch(u){throw new Error(`Failed to decode base64 audio for chunk ${t.chunkIndex}: ${u instanceof Error?u.message:String(u)}`)}if(A.length===0)throw new Error(`Decoded audio data is empty for chunk ${t.chunkIndex}`);const i=new Uint8Array(A.length);for(let u=0;u<A.length;u++)i[u]=A.charCodeAt(u);const a=t.audioFormat==="mp3"?"audio/mpeg":t.audioFormat==="wav"?"audio/wav":t.audioFormat==="ogg"?"audio/ogg":t.audioFormat==="opus"?"audio/ogg; codecs=opus":t.audioFormat==="webm"?"audio/webm":`audio/${t.audioFormat}`,s=new Blob([i],{type:a}),o=URL.createObjectURL(s);this.blobUrls.push(o);const l=new Audio;l.src=o,this.currentAudio=l;const c=()=>{l.src&&(l.src=""),URL.revokeObjectURL(o),this.blobUrls=this.blobUrls.filter(u=>u!==o)};await new Promise((u,g)=>{let d=!1;const B=()=>{var w;if(d)return;const f=l.error,p=f?{code:f.code,message:f.message||`MediaError code ${f.code}`,MEDIA_ERR_ABORTED:f.code===MediaError.MEDIA_ERR_ABORTED,MEDIA_ERR_NETWORK:f.code===MediaError.MEDIA_ERR_NETWORK,MEDIA_ERR_DECODE:f.code===MediaError.MEDIA_ERR_DECODE,MEDIA_ERR_SRC_NOT_SUPPORTED:f.code===MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED}:"Unknown error";if(this.suppressPlaybackErrors){d=!0,c(),u();return}d=!0,console.error(`[AudioStreamManager] Error playing chunk ${t.chunkIndex}:`,p,{audioFormat:t.audioFormat,chunkIndex:t.chunkIndex,audioLength:t.audio.length,mimeType:a,audioContextState:(w=this.audioContext)==null?void 0:w.state,audioSrc:l.src,audioReadyState:l.readyState}),Su(`[AudioStreamManager] Error playing chunk ${t.chunkIndex}:`,p),c(),g(new Error(`Audio playback error: ${JSON.stringify(p)}`))};l.addEventListener("error",B,{once:!0});const h=async()=>{var f;if(!d)try{l.addEventListener("ended",()=>{d||(d=!0,fe(`[AudioStreamManager] Chunk ${t.chunkIndex} finished`),this.onChunkPlayed&&this.onChunkPlayed(t.chunkIndex),c(),u())},{once:!0});const p=l.play();p&&await p}catch(p){if(d)return;if(this.suppressPlaybackErrors){d=!0,c(),u();return}d=!0,console.error(`[AudioStreamManager] Audio.play() rejected for chunk ${t.chunkIndex}:`,p,{audioFormat:t.audioFormat,chunkIndex:t.chunkIndex,audioContextState:(f=this.audioContext)==null?void 0:f.state,isEnabled:this.isEnabled,audioSrc:l.src,audioReadyState:l.readyState}),c(),g(p)}};l.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?h():l.addEventListener("canplay",h,{once:!0})}),this.currentAudio=null,this.playNextChunk()}catch(A){if(this.suppressPlaybackErrors)return;const i=A instanceof Error?A.message:String(A);console.error(`[AudioStreamManager] Failed to play chunk ${t.chunkIndex}:`,i,A,{audioFormat:t.audioFormat,chunkIndex:t.chunkIndex,audioLength:(r=t.audio)==null?void 0:r.length,audioContextState:(n=this.audioContext)==null?void 0:n.state,isEnabled:this.isEnabled}),Su(`[AudioStreamManager] Failed to play chunk ${t.chunkIndex}:`,A),this.playNextChunk()}}stop(){this.suppressPlaybackErrors=!0,this.isPlaying=!1,this.audioQueue=[],this.currentAudio&&(this.currentAudio.pause(),this.currentAudio.src="",this.currentAudio=null),this.blobUrls.forEach(t=>URL.revokeObjectURL(t)),this.blobUrls=[]}reset(){this.stop()}getQueueSize(){return this.audioQueue.length}isCurrentlyPlaying(){return this.isPlaying}}const ul=new Z_e,tn=El(),Oc=new Map,q_e=32,dV=(e,t)=>{const r=Oc.get(e);if(r){if(r.timeoutId&&(clearTimeout(r.timeoutId),r.timeoutId=null),r.content){const n=r.content;r.content="",t(A=>({conversations:A.conversations.map(i=>{if(i.id!==e)return i;const a=[...i.messages],s=a[a.length-1];return s&&s.role==="assistant"&&(a[a.length-1]={...s,content:s.content+n}),{...i,messages:a,updatedAt:new Date}})}))}Oc.delete(e)}},Ff=()=>{const e=localStorage.getItem("chatbot-session-id");if(e)return e;const t=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return localStorage.setItem("chatbot-session-id",t),t},__e=e=>{localStorage.setItem("chatbot-session-id",e)};let $_e=0;const QN=e=>{const t=Date.now(),r=++$_e,n=Math.random().toString(36).substr(2,9);return`msg_${t}_${r}_${n}_${e}`},$a=()=>{const e=Date.now(),t=Math.random().toString(36).substr(2,9);return`session_${e}_${t}`},BV=e=>e.filter(t=>!t.isThreadMessage&&!(t.role==="assistant"&&t.isStreaming)).length;let ml=!1,Il="";async function Js(){if(ml&&Il)return!0;try{const e=await En(),t=localStorage.getItem("chat-api-url");t&&t===Kl&&localStorage.removeItem("chat-api-url");const r=t&&t!==Kl?t:Vr(),n=localStorage.getItem("chat-api-key")||tn,A=Ff();return e.configureApi(r,n,A),Il=r,ml=!0,!0}catch(e){return fn("Failed to configure API:",e),!1}}const wt=V_e((e,t)=>({conversations:[],currentConversationId:null,isLoading:!1,error:null,sessionId:Ff(),getSessionId:()=>t().sessionId,configureApiSettings:async(r,n,A,i)=>{const a=t(),s=a.conversations.find(c=>c.id===a.currentConversationId),o=Tr(),l=(s==null?void 0:s.sessionId)||A||Ff();A&&__e(A),e({sessionId:l});try{const c=await En();if(o){if(!i||!i.trim())throw new Error("Adapter name is required when API middleware is enabled");c.configureApi(r,null,l,i),Il=r,ml=!0;let u;try{const g=new c.ApiClient({apiUrl:r,apiKey:null,sessionId:null,adapterName:i});typeof g.getAdapterInfo=="function"&&(u=await g.getAdapterInfo(),fe("Adapter info loaded:",u))}catch(g){xt("Failed to load adapter info:",g)}if(s)e(g=>({conversations:g.conversations.map(d=>d.id===s.id?{...d,adapterName:i,apiUrl:r,adapterInfo:u,apiKey:void 0,updatedAt:new Date}:d)}));else if(i&&i.trim()){const g=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,d=$a();e(B=>({conversations:[...B.conversations,{id:g,sessionId:d,title:"New Conversation",messages:[],createdAt:new Date,updatedAt:new Date,adapterName:i,apiUrl:r,adapterInfo:u}],currentConversationId:g}))}}else{let u;if(n&&n.trim())try{const g=new c.ApiClient({apiUrl:r,apiKey:n,sessionId:null});if(typeof g.validateApiKey=="function"){fe("Validating API key before configuration...");const d=await g.validateApiKey();fe("API key validation successful:",{exists:d.exists,active:d.active,adapter_name:d.adapter_name,client_name:d.client_name})}else xt("API key validation not available (validateApiKey method not found)");if(typeof g.getAdapterInfo=="function")try{u=await g.getAdapterInfo(),fe("Adapter info loaded:",u)}catch(d){xt("Failed to load adapter info:",d)}}catch(g){throw g instanceof Error?g:new Error(`API key validation failed: ${String(g)}`)}if(c.configureApi(r,n||"",l),Il=r,ml=!0,s&&n&&n.trim())e(g=>({conversations:g.conversations.map(d=>d.id===s.id?{...d,apiKey:n,apiUrl:r,adapterInfo:u,adapterName:void 0,updatedAt:new Date}:d)})),setTimeout(()=>{const g=t();localStorage.setItem("chat-state",JSON.stringify({conversations:g.conversations,currentConversationId:g.currentConversationId}))},0);else if(n&&n.trim()){const g=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,d=$a(),B={id:g,sessionId:d,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:n,apiUrl:r,adapterInfo:u};e(h=>{const f=lt.maxConversations;if(f!==null&&h.conversations.length>=f){const p=`Maximum of ${f} conversations reached. Please delete an existing conversation before starting a new one.`;return xt(p),h}return{conversations:[B,...h.conversations],currentConversationId:g,sessionId:d}}),setTimeout(()=>{const h=t();localStorage.setItem("chat-state",JSON.stringify({conversations:h.conversations,currentConversationId:h.currentConversationId}))},0)}}}catch(c){throw e({isLoading:!1}),c instanceof Error?c:new Error("Failed to configure API settings")}o?i?localStorage.setItem("chat-adapter-name",i):localStorage.removeItem("chat-adapter-name"):(r&&r!==Kl?localStorage.setItem("chat-api-url",r):localStorage.removeItem("chat-api-url"),n&&localStorage.setItem("chat-api-key",n)),e({isLoading:!1})},createConversation:()=>{const r=t(),n=lt.maxConversations,A=r.conversations.length,i=r.currentConversationId?r.conversations.find(d=>d.id===r.currentConversationId):null;if(n!==null&&A>=n){const d=`Maximum of ${n} conversations reached. Please delete an existing conversation before starting a new one.`;throw e({error:d}),new Error(d)}if(i&&i.messages.length===0){const d="Finish or delete the current conversation before starting a new one.";throw e({error:d}),new Error(d)}const a=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,s=$a(),o=Vr(),l=tn,c=Tr(),u=c&&typeof window<"u"?localStorage.getItem("chat-adapter-name"):null,g={id:a,sessionId:s,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:c?void 0:l,apiUrl:o,adapterName:u||void 0};return e(d=>({conversations:[g,...d.conversations],currentConversationId:a,sessionId:s})),Js().then(d=>{d&&En().then(B=>{c&&u?B.configureApi(o,null,s,u):B.configureApi(o,l,s);try{const h=new B.ApiClient({apiUrl:o,apiKey:c?null:l,sessionId:null,adapterName:c?u:null});typeof h.getAdapterInfo=="function"&&h.getAdapterInfo().then(f=>{fe("✅ Adapter info loaded for new conversation:",f);const p=wt.getState();wt.setState({conversations:p.conversations.map(w=>w.id===a?{...w,adapterInfo:f,updatedAt:new Date}:w)})}).catch(f=>{xt("Failed to load adapter info for new conversation:",f)})}catch{}})}),setTimeout(()=>{const d=t();localStorage.setItem("chat-state",JSON.stringify({conversations:d.conversations,currentConversationId:d.currentConversationId}))},0),a},selectConversation:async r=>{const n=t().conversations.find(A=>A.id===r);if(n){const A=n.messages.some(o=>o.role==="assistant"&&o.isStreaming);e({currentConversationId:r,sessionId:n.sessionId,isLoading:A});const i=n.apiUrl||Vr(),a=n.apiKey||tn;if(await Js()){const o=await En();if(o.configureApi(i,a,n.sessionId),!n.adapterInfo)try{const l=new o.ApiClient({apiUrl:i,apiKey:a,sessionId:null});if(typeof l.getAdapterInfo=="function"){const c=await l.getAdapterInfo();fe("Adapter info loaded for conversation:",c),e(u=>({conversations:u.conversations.map(g=>g.id===r?{...g,adapterInfo:c,updatedAt:new Date}:g)})),setTimeout(()=>{const u=t();localStorage.setItem("chat-state",JSON.stringify({conversations:u.conversations,currentConversationId:u.currentConversationId}))},0)}}catch{}}}setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},deleteConversation:async r=>{var i,a;const n=t(),A=n.conversations.find(s=>s.id===r);if(fe(`🗑️ Deleting conversation ${r}:`,{conversationId:r,sessionId:A==null?void 0:A.sessionId,title:A==null?void 0:A.title,messageCount:A==null?void 0:A.messages.length,fileCount:((i=A==null?void 0:A.attachedFiles)==null?void 0:i.length)||0}),n.currentConversationId===r&&ul.stop(),A!=null&&A.sessionId)try{if(!await Js())fn("Failed to configure API for conversation deletion");else{const o=Tr(),l=A.apiUrl||Vr(),c=A.apiKey||tn,u=A.adapterName;o?u?fe(`🔑 Using conversation's adapter for deletion: ${u} (conversation: ${r})`):xt(`Skipping server deletion for conversation ${r}: adapter not configured`):fe(`🔑 Using conversation's API key for deletion: ${c.substring(0,8)}... (conversation: ${r})`);const g=await En(),d=new g.ApiClient({apiUrl:l,apiKey:o?null:c,sessionId:A.sessionId,adapterName:o?u:null}),B=((a=A==null?void 0:A.attachedFiles)==null?void 0:a.map(h=>h.file_id))||[];if(fe(`🔧 Calling deleteConversationWithFiles for session: ${A.sessionId}`),fe(`🔧 File IDs to delete: ${B.join(", ")||"none"}`),d.deleteConversationWithFiles){const h=await d.deleteConversationWithFiles(A.sessionId,B);fe(`✅ Deleted conversation and files for session: ${A.sessionId}`,h),fe(` - Deleted ${h.deleted_messages} messages`),fe(` - Deleted ${h.deleted_files} files`),h.file_deletion_errors&&h.file_deletion_errors.length>0&&xt(` - Errors deleting files: ${h.file_deletion_errors.join(", ")}`)}else xt("⚠️ deleteConversationWithFiles method not available on API client")}}catch(s){fn("Failed to clear conversation history from server:",s)}e(s=>{var c;const o=s.conversations.filter(u=>u.id!==r),l=s.currentConversationId===r?((c=o[0])==null?void 0:c.id)||null:s.currentConversationId;if(o.length===0){const u=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,g=$a(),d=Vr(),B={id:u,sessionId:g,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:d};return Js().then(h=>{h&&En().then(f=>{f.configureApi(d,tn,g);try{const p=new f.ApiClient({apiUrl:d,apiKey:tn,sessionId:null});typeof p.validateApiKey=="function"&&p.validateApiKey().then(()=>{fe("✅ Default API key validated after creating new conversation")}).catch(()=>{xt("Failed to validate default API key")}),typeof p.getAdapterInfo=="function"&&p.getAdapterInfo().then(w=>{fe("✅ Adapter info loaded for default key:",w);const E=wt.getState();wt.setState({conversations:E.conversations.map(C=>C.id===u?{...C,adapterInfo:w,updatedAt:new Date}:C)})}).catch(()=>{xt("Failed to load adapter info for default key")})}catch{}})}),setTimeout(()=>{localStorage.setItem("chat-state",JSON.stringify({conversations:[B],currentConversationId:u}))},0),{conversations:[B],currentConversationId:u,sessionId:g}}return setTimeout(()=>{localStorage.setItem("chat-state",JSON.stringify({conversations:o,currentConversationId:l}))},0),{conversations:o,currentConversationId:l}})},deleteAllConversations:async()=>{const n=[...t().conversations];ul.stop();const A=n.map(async c=>{var u;if(c!=null&&c.sessionId)try{if(!await Js()){fn("Failed to configure API for conversation deletion");return}const d=Tr(),B=Za(c.apiUrl),h=c.apiKey||tn,f=c.adapterName;if(d&&!f){fe(`Skipping server deletion for conversation ${c.id}: adapter not configured`);return}const p=await En(),w=new p.ApiClient({apiUrl:B,apiKey:d?null:h,sessionId:c.sessionId,adapterName:d?f:null}),E=((u=c==null?void 0:c.attachedFiles)==null?void 0:u.map(C=>C.file_id))||[];w.deleteConversationWithFiles?(await w.deleteConversationWithFiles(c.sessionId,E),fe(`✅ Deleted conversation ${c.id} and files`)):xt(`deleteConversationWithFiles not available for conversation ${c.id}`)}catch(g){fn(`Failed to delete conversation ${c.id} from server:`,g)}});Promise.allSettled(A).then(c=>{const u=c.filter(g=>g.status==="rejected");u.length>0&&fn(`Some conversations failed to delete from server: ${u.length}`,u)});const i=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,a=$a(),s=Vr(),o=Tr(),l={id:i,sessionId:a,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:o?void 0:tn,apiUrl:s};Js().then(c=>{c&&En().then(async u=>{if(o)try{const g=await Hae();if(g){u.configureApi(s,null,a,g.name);const d=new u.ApiClient({apiUrl:s,apiKey:null,sessionId:null,adapterName:g.name});if(typeof d.getAdapterInfo=="function"){const B=await d.getAdapterInfo();fe("✅ Adapter info loaded after clearing conversations:",B);const h=wt.getState();wt.setState({conversations:h.conversations.map(f=>f.id===i?{...f,adapterName:g.name,adapterInfo:B,updatedAt:new Date}:f)}),setTimeout(()=>{const f=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:f.conversations,currentConversationId:f.currentConversationId}))},0)}}}catch{}else{u.configureApi(s,tn,a);try{const g=new u.ApiClient({apiUrl:s,apiKey:tn,sessionId:null});typeof g.validateApiKey=="function"&&g.validateApiKey().then(()=>{fe("✅ Default API key validated after clearing all conversations")}).catch(()=>{xt("Failed to validate default API key")}),typeof g.getAdapterInfo=="function"&&g.getAdapterInfo().then(d=>{fe("✅ Adapter info loaded for default key:",d);const B=wt.getState();wt.setState({conversations:B.conversations.map(h=>h.id===i?{...h,adapterInfo:d,updatedAt:new Date}:h)})}).catch(()=>{xt("Failed to load adapter info for default key")})}catch{}}})}),e({conversations:[l],currentConversationId:i,sessionId:a}),setTimeout(()=>{localStorage.setItem("chat-state",JSON.stringify({conversations:[l],currentConversationId:i}))},0)},sendMessage:async(r,n,A)=>{var i,a,s,o,l,c,u,g,d,B,h;try{if(t().isLoading){xt("Another request is already in progress");return}if(!await Js())throw new Error("API not properly configured. Please configure API settings first.");let p=t().currentConversationId;p||(p=t().createConversation());const w=t().conversations.find(v=>v.id===p);if(!w)throw new Error("Conversation not found");const E=n?n.map(v=>{var J;const H=(J=w==null?void 0:w.attachedFiles)==null?void 0:J.find(R=>R.file_id===v);return H||{file_id:v,filename:"",mime_type:"",file_size:0}}).filter(v=>v!==void 0):[];E.length>0&&E.forEach(v=>{t().addFileToConversation(p,v)});const C=A||null;let m,I=null;if(C){if(m=w.messages.find(v=>{var H;return((H=v.threadInfo)==null?void 0:H.thread_id)===C}),!m)throw new Error("Thread metadata not found. Please recreate the thread from this message.");if(I=((i=m.threadInfo)==null?void 0:i.thread_session_id)||null,!I)throw new Error("Thread session is missing. Please recreate the thread from this message.")}const M=BV(w.messages),b=lt.maxMessagesPerConversation;if(b!==null&&M>=b){xt(`[chatStore] Conversation ${p} reached the message limit (${b}).`),e({isLoading:!1});return}const k=lt.maxTotalMessages;if(k!==null&&t().conversations.reduce((H,J)=>H+BV(J.messages),0)>=k){xt(`[chatStore] Workspace reached the total message limit (${k}).`),e({isLoading:!1});return}const N={id:QN("user"),content:r,role:"user",timestamp:new Date,attachments:E.length>0?E:void 0},D=QN("assistant"),z={id:D,content:"",role:"assistant",timestamp:new Date,isStreaming:!0};if(C&&m){N.isThreadMessage=!0,N.threadId=C,N.parentMessageId=m.id,z.isThreadMessage=!0,z.threadId=C,z.parentMessageId=m.id;const v=lt.maxMessagesPerThread;if(v!==null&&w.messages.filter(J=>J.isThreadMessage?(J.threadId===C||J.parentMessageId===m.id)&&!(J.role==="assistant"&&J.isStreaming):!1).length>=v){xt(`[chatStore] Thread ${C} reached the message limit (${v}).`),e({isLoading:!1});return}}e(v=>{const H=v.conversations.find(O=>O.id===p),J=(H==null?void 0:H.messages.filter(O=>O.role==="assistant"&&O.isStreaming))||[];return J.length>0&&xt(`Cleaning up ${J.length} existing streaming messages`),{conversations:v.conversations.map(O=>{if(O.id!==p)return{...O,messages:O.messages};const U=O.messages.filter(P=>!(P.role==="assistant"&&P.isStreaming));return{...O,messages:[...U,N,z],updatedAt:new Date,title:O.messages.length===0?r.slice(0,50)+(r.length>50?"...":""):O.title}}),isLoading:!0,error:null}});const L=p;let T=!1;ul.reset();try{const v=t().conversations.find(Z=>Z.id===L);if(!v)throw new Error("Conversation not found");const H=Tr();if(H){if(!v.adapterName)throw xt(`[sendMessage] Conversation ${L} has no adapter name`),new Error("Adapter not configured for this conversation. Please select an adapter first.");fe(`[sendMessage] Using adapter for conversation ${L}: ${v.adapterName}`)}else{if(!v.apiKey)throw xt(`[sendMessage] Conversation ${L} has no API key`),new Error("API key not configured for this conversation. Please configure API settings first.");fe(`[sendMessage] Using API key for conversation ${L}: ${v.apiKey.substring(0,8)}...`)}const J=Za(v.apiUrl),R=v.apiKey,O=v.adapterName,U=A||null,P=I||v.sessionId,ee=await En();H?ee.configureApi(J,null,P,O):ee.configureApi(J,R,P),U&&P!==v.sessionId&&fe(`[chatStore] Thread mode: using thread session ${P} (original: ${v.sessionId})`),fe("[chatStore] Starting streamChat with fileIds:",n);const G=t().conversations.find(Z=>Z.id===L),q=((s=(a=G==null?void 0:G.adapterInfo)==null?void 0:a.adapter_name)==null?void 0:s.includes("voice"))||((l=(o=G==null?void 0:G.adapterInfo)==null?void 0:o.adapter_name)==null?void 0:l.includes("audio"))||((u=(c=G==null?void 0:G.adapterInfo)==null?void 0:c.adapter_name)==null?void 0:u.includes("multilingual")),Ae=()=>{try{const Z=localStorage.getItem("chat-settings");if(Z)return JSON.parse(Z).voiceEnabled===!0}catch(Z){xt("Failed to read global voice setting:",Z)}return!1},ae=G==null?void 0:G.audioSettings,oe=Ae(),ge=(ae==null?void 0:ae.enabled)??oe??q,te=(ae==null?void 0:ae.ttsVoice)||void 0,he=(ae==null?void 0:ae.language)||"en-US",we=ae==null?void 0:ae.audioFormat;fe("[chatStore] Audio settings:",{returnAudio:ge,ttsVoice:te,language:he,audioFormat:we,isVoiceAdapter:q,adapterName:(g=G==null?void 0:G.adapterInfo)==null?void 0:g.adapter_name});for await(const Z of ee.streamChat(r,!0,n,U||void 0,void 0,void 0,he,ge,te)){if(fe("[chatStore] Received stream chunk:",{text:(d=Z.text)==null?void 0:d.substring(0,50),done:Z.done,hasAudio:!!Z.audio,hasAudioChunk:!!Z.audio_chunk,audioFormat:Z.audioFormat,audioLength:(B=Z.audio)==null?void 0:B.length,chunkIndex:Z.chunk_index}),Z.audio_chunk){fe("[chatStore] Received audio chunk:",{chunk_index:Z.chunk_index,audioFormat:Z.audioFormat,audioLength:(h=Z.audio_chunk)==null?void 0:h.length});const Ye=Z.chunk_index??0;ul.addChunk({audio:Z.audio_chunk,audioFormat:Z.audioFormat||"opus",chunkIndex:Ye})}if(Z.text){const Ye=Ud(Z.text);Ye?(t().appendToLastMessage(Ye,L),T=!0):Z.text.length>100&&xt("[chatStore] Filtered out potential base64 audio data from message content")}if(Z.audio&&Z.done&&e(Ye=>({conversations:Ye.conversations.map(be=>{if(be.id!==L)return be;const De=[...be.messages],ke=De[De.length-1];return ke&&ke.role==="assistant"&&(De[De.length-1]={...ke,audio:Z.audio,audioFormat:Z.audioFormat||"mp3"}),{...be,messages:De,updatedAt:new Date}})})),Z.done){fe("[chatStore] Stream completed, receivedAnyText:",T),fe("[chatStore] Done chunk received:",{hasThreading:!!Z.threading,threading:Z.threading,assistantMessageId:D});const Ye=Z.threading;Ye&&Ye.supports_threading&&(e(be=>({conversations:be.conversations.map(De=>De.id!==L?De:{...De,messages:De.messages.map(ke=>ke.id===D?{...ke,supportsThreading:!0,databaseMessageId:Ye.message_id}:ke),updatedAt:new Date})})),fe(`[chatStore] Message ${D} marked as supporting threading`,{message_id:Ye.message_id,session_id:Ye.session_id,databaseMessageId:Ye.message_id}));break}}T||(xt("[chatStore] No text received from stream, showing error message"),t().appendToLastMessage("No response received from the server. Please try again later.",L))}catch(v){fn("Chat API error:",v),t().appendToLastMessage("Sorry, there was an error processing your request.",L)}dV(L,e),e(v=>{const H=v.conversations.map(O=>O.id===L?{...O,messages:O.messages.map(U=>U.id===D?{...U,isStreaming:!1}:U),updatedAt:new Date}:O),J=H.find(O=>O.id===v.currentConversationId),R=J?J.messages.some(O=>O.role==="assistant"&&O.isStreaming):!1;return{conversations:H,isLoading:R}}),setTimeout(()=>{const v=t();localStorage.setItem("chat-state",JSON.stringify({conversations:v.conversations,currentConversationId:v.currentConversationId}))},0)}catch(f){fn("Chat store error:",f),e(()=>({isLoading:!1,error:`Failed to send message: ${f instanceof Error?f.message:"Unknown error"}`}))}},createThread:async(r,n)=>{try{const A=t().conversations.find(h=>h.sessionId===n);if(!A)throw new Error("Conversation not found for session");const i=Tr();if(i&&!A.adapterName)throw new Error("Adapter not configured for this conversation");if(!i&&!A.apiKey)throw new Error("API key not configured for this conversation");const a=A.messages.find(h=>h.id===r);if(!a)throw new Error("Message not found");const s=a.databaseMessageId||r,o=Za(A.apiUrl||Vr()),l=A.apiKey||tn,c=A.adapterName,u=await En(),g=new u.ApiClient({apiUrl:o,apiKey:i?null:l,sessionId:n,adapterName:i?c:null}),B=await new(await Yt(async()=>{const{ThreadService:h}=await import("./threadService-B9Db3n0J.js");return{ThreadService:h}},[])).ThreadService(g).createThread(s,n);e(h=>({conversations:h.conversations.map(f=>f.sessionId!==n?f:{...f,messages:f.messages.map(p=>p.id===r?{...p,threadInfo:B,supportsThreading:!0}:p),currentThreadId:void 0,currentThreadSessionId:void 0})})),fe(`[chatStore] Created thread ${B.thread_id} for message ${r}`)}catch(A){throw fn("Failed to create thread:",A),A}},appendToLastMessage:(r,n)=>{const A=Ud(r);if(!A&&r)return;const i=OD(A),a=n||t().currentConversationId;if(!a)return;const s=a,o=Oc.get(s);o?(o.content+=i,o.timeoutId&&clearTimeout(o.timeoutId)):Oc.set(s,{content:i,timeoutId:null});const l=()=>{const u=Oc.get(s);if(!u||!u.content)return;const g=u.content;u.content="",u.timeoutId=null,e(d=>({conversations:d.conversations.map(B=>{if(B.id!==a)return B;const h=[...B.messages],f=h[h.length-1];return f&&f.role==="assistant"&&f.isStreaming&&(h[h.length-1]={...f,content:f.content+g}),{...B,messages:h,updatedAt:new Date}})}))},c=Oc.get(s);c.timeoutId=setTimeout(l,q_e)},regenerateResponse:async r=>{var n,A,i,a,s,o;try{if(t().isLoading){xt("Another request is already in progress");return}if(!await Js())throw new Error("API not properly configured");const c=t(),u=c.conversations.find(w=>w.id===c.currentConversationId);if(!u)return;const g=u.messages.findIndex(w=>w.id===r);if(g===-1)return;const d=u.messages[g-1];if(!d||d.role!=="user")return;const B=(d.attachments||[]).map(w=>w.file_id).filter(w=>typeof w=="string"&&w.length>0),h=QN("assistant");e(w=>({conversations:w.conversations.map(E=>E.id===w.currentConversationId?{...E,messages:[...E.messages.slice(0,g),{id:h,content:"",role:"assistant",timestamp:new Date,isStreaming:!0}],updatedAt:new Date}:E),isLoading:!0,error:null}));const f=c.currentConversationId;if(!f)throw new Error("No conversation selected");let p=!1;try{const w=t().conversations.find(L=>L.id===f);if(!w)throw new Error("Conversation not found");const E=Tr();if(E){if(!w.adapterName)throw new Error("Adapter not configured for this conversation. Please select an adapter first.")}else if(!w.apiKey)throw new Error("API key not configured for this conversation. Please configure API settings first.");if(w.sessionId){const L=Za(w.apiUrl),T=w.apiKey,v=w.adapterName,H=await En();E?H.configureApi(L,null,w.sessionId,v):H.configureApi(L,T,w.sessionId)}const C=await En(),m=t().conversations.find(L=>L.id===f),I=((A=(n=m==null?void 0:m.adapterInfo)==null?void 0:n.adapter_name)==null?void 0:A.includes("voice"))||((a=(i=m==null?void 0:m.adapterInfo)==null?void 0:i.adapter_name)==null?void 0:a.includes("audio"))||((o=(s=m==null?void 0:m.adapterInfo)==null?void 0:s.adapter_name)==null?void 0:o.includes("multilingual")),M=()=>{try{const L=localStorage.getItem("chat-settings");if(L)return JSON.parse(L).voiceEnabled===!0}catch(L){xt("Failed to read global voice setting:",L)}return!1},b=m==null?void 0:m.audioSettings,k=M(),N=(b==null?void 0:b.enabled)??k??I,D=(b==null?void 0:b.ttsVoice)||void 0,z=(b==null?void 0:b.language)||"en-US";for await(const L of C.streamChat(d.content,!0,B.length>0?B:void 0,void 0,void 0,void 0,z,N,D)){if(L.text){const T=Ud(L.text);T?(t().appendToLastMessage(T,f),p=!0):L.text.length>100&&xt("[chatStore] Filtered out potential base64 audio data from regenerated message content")}if(L.audio&&L.done&&e(T=>({conversations:T.conversations.map(v=>{if(v.id!==f)return v;const H=[...v.messages],J=H[H.length-1];return J&&J.role==="assistant"&&(H[H.length-1]={...J,audio:L.audio,audioFormat:L.audioFormat||"mp3"}),{...v,messages:H,updatedAt:new Date}})})),L.done)break}p||t().appendToLastMessage("No response received from the server. Please try again later.",f)}catch(w){fn("Regenerate API error:",w),t().appendToLastMessage("Sorry, there was an error regenerating the response.",f)}dV(f,e),e(w=>{const E=w.conversations.map(I=>I.id===f?{...I,messages:I.messages.map(M=>M.id===h?{...M,isStreaming:!1}:M),updatedAt:new Date}:I),C=E.find(I=>I.id===w.currentConversationId),m=C?C.messages.some(I=>I.role==="assistant"&&I.isStreaming):!1;return{conversations:E,isLoading:m}})}catch(l){fn("Regenerate error:",l),e({isLoading:!1,error:`Failed to regenerate response: ${l instanceof Error?l.message:"Unknown error"}`})}},updateConversationTitle:(r,n)=>{e(A=>({conversations:A.conversations.map(i=>i.id===r?{...i,title:n,updatedAt:new Date}:i)})),setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},clearError:()=>{e({error:null})},cleanupStreamingMessages:()=>{e(r=>({conversations:r.conversations.map(n=>(n.id===r.currentConversationId,n)),isLoading:!1}))},canCreateNewConversation:()=>{const r=t(),n=lt.maxConversations;if(!r.currentConversationId)return n===null||r.conversations.length<n;const A=r.conversations.find(i=>i.id===r.currentConversationId);return A&&A.messages.length>0?n===null||r.conversations.length<n:!1},getConversationCount:()=>t().conversations.length,addFileToConversation:(r,n)=>{fe("[chatStore] addFileToConversation called",{conversationId:r,fileId:n.file_id,filename:n.filename}),e(A=>{var s,o;const i={conversations:A.conversations.map(l=>l.id===r?{...l,attachedFiles:[...(l.attachedFiles||[]).filter(c=>c.file_id!==n.file_id),n],updatedAt:new Date}:l)},a=i.conversations.find(l=>l.id===r);return fe(`[chatStore] Updated conversation ${r}`,{hasConversation:!!a,attachedFilesCount:((s=a==null?void 0:a.attachedFiles)==null?void 0:s.length)||0,attachedFiles:(o=a==null?void 0:a.attachedFiles)==null?void 0:o.map(l=>({file_id:l.file_id,filename:l.filename}))}),i}),setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},removeFileFromConversation:async(r,n)=>{try{const A=t().conversations.find(l=>l.id===r);if(!A)throw new Error("Conversation not found");if(Tr()){if(!A.adapterName)throw new Error("Adapter not configured for this conversation. Cannot delete file.")}else if(!A.apiKey)throw new Error("API key not configured for this conversation. Cannot delete file.");const a=A.apiKey,s=A.adapterName,o=Za(A.apiUrl);fe(`[chatStore] Calling FileUploadService.deleteFile for ${n}`),await xB.deleteFile(n,a,o,s),fe(`[chatStore] Successfully deleted file ${n} from server`)}catch(A){A instanceof Error&&(A.message.includes("404")||A.message.includes("File not found"))}e(A=>({conversations:A.conversations.map(i=>i.id===r?{...i,attachedFiles:(i.attachedFiles||[]).filter(a=>a.file_id!==n),updatedAt:new Date}:i)})),setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},loadConversationFiles:async r=>{try{const n=t().conversations.find(g=>g.id===r);if(!n)return;if(Tr()){if(!n.adapterName){fe(`Skipping file load for conversation ${r}: adapter not configured`);return}}else if(!n.apiKey){fe(`Skipping file load for conversation ${r}: API key not configured`);return}const i=n.apiKey,a=n.adapterName,s=Za(n.apiUrl);if(new Set((n.attachedFiles||[]).map(g=>g.file_id)).size===0){fe(`No files to sync for conversation ${r}`);return}const c=(await xB.listFiles(i,s,a)).map(g=>({file_id:g.file_id,filename:g.filename,mime_type:g.mime_type,file_size:g.file_size,upload_timestamp:g.upload_timestamp,processing_status:g.processing_status,chunk_count:g.chunk_count})),u=new Map(c.map(g=>[g.file_id,g]));e(g=>{const d=g.conversations.find(h=>h.id===r);if(!d)return g;const B=(d.attachedFiles||[]).map(h=>u.get(h.file_id)||h).filter(h=>u.has(h.file_id)||!h.processing_status||h.processing_status==="processing");return{conversations:g.conversations.map(h=>h.id===r?{...h,attachedFiles:B,updatedAt:new Date}:h)}}),setTimeout(()=>{const g=t();localStorage.setItem("chat-state",JSON.stringify({conversations:g.conversations,currentConversationId:g.currentConversationId}))},0)}catch(n){fn(`Failed to load files for conversation ${r}:`,n)}},syncConversationFiles:async r=>{await t().loadConversationFiles(r)}})),e$e=async()=>{var c;const e=localStorage.getItem("chat-state"),t=Vr(),r=typeof window<"u"?!!localStorage.getItem("chat-api-url"):!1;let n=Ff(),A=!1;if(e)try{const u=JSON.parse(e),g=h=>{if(h instanceof Date)return h;const f=h?new Date(h):new Date;return Number.isNaN(f.getTime())?new Date:f},d=Array.isArray(u.conversations)?u.conversations:[];if(u.conversations=d.map(h=>{const p=(Array.isArray(h.messages)?h.messages:[]).filter(m=>!(m.role==="assistant"&&m.isStreaming)).map(m=>({...m,timestamp:g(m.timestamp),isStreaming:!1})),w={id:h.id,sessionId:h.sessionId||$a(),title:h.title||"New Chat",messages:p,createdAt:g(h.createdAt),updatedAt:g(h.updatedAt),attachedFiles:h.attachedFiles||[],apiKey:h.apiKey||tn,adapterName:h.adapterName,apiUrl:h.apiUrl,adapterInfo:h.adapterInfo,audioSettings:h.audioSettings,currentThreadId:void 0,currentThreadSessionId:void 0},C=w.messages.length===0&&(!w.apiKey||w.apiKey===tn)&&!r?t:Za(h.apiUrl);return{...w,apiUrl:C}}),A=u.conversations&&u.conversations.length>0,u.currentConversationId&&u.conversations){const h=u.conversations.find(f=>f.id===u.currentConversationId);h&&h.sessionId&&(n=h.sessionId)}if(!u.conversations||u.conversations.length===0){const h=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=$a(),p={id:h,sessionId:f,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:Vr()};wt.setState({conversations:[p],currentConversationId:h,sessionId:f}),n=f}else wt.setState({conversations:u.conversations||[],currentConversationId:u.currentConversationId||((c=u.conversations[0])==null?void 0:c.id)||null,sessionId:n}),!u.currentConversationId&&u.conversations.length>0&&(wt.setState({currentConversationId:u.conversations[0].id,sessionId:u.conversations[0].sessionId||n}),n=u.conversations[0].sessionId||n);const B=wt.getState().conversations;fe("📋 Loaded conversations:",B.map(h=>{var f;return{id:h.id,title:h.title,sessionId:h.sessionId,messageCount:((f=h.messages)==null?void 0:f.length)||0}})),setTimeout(()=>{wt.getState().cleanupStreamingMessages()},100)}catch(u){fn("Failed to load chat state:",u);const g=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,d=$a(),B=Vr(),h={id:g,sessionId:d,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:B};wt.setState({conversations:[h],currentConversationId:g,sessionId:d}),n=d}else{const u=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,g=$a(),d=Vr(),B={id:u,sessionId:g,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:d};wt.setState({conversations:[B],currentConversationId:u,sessionId:g}),n=g}const i=wt.getState(),a=i.currentConversationId?i.conversations.find(u=>u.id===i.currentConversationId):null,s=Tr(),o=A&&(a!=null&&a.apiKey)?a.apiKey:tn,l=A&&(a!=null&&a.apiUrl)?a.apiUrl:Vr();try{const u=await En();if(s){const g=a==null?void 0:a.adapterName;if(g){if(u.configureApi(l,null,n,g),Il=l,ml=!0,fe("✅ Using existing adapter from conversation:",g),!(a!=null&&a.adapterInfo))try{const d=new u.ApiClient({apiUrl:l,apiKey:null,sessionId:null,adapterName:g});if(typeof d.getAdapterInfo=="function"){const B=await d.getAdapterInfo();fe("✅ Adapter info loaded for existing adapter:",B);const h=wt.getState();h.currentConversationId&&(wt.setState({conversations:h.conversations.map(f=>f.id===h.currentConversationId?{...f,adapterInfo:B,updatedAt:new Date}:f)}),setTimeout(()=>{const f=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:f.conversations,currentConversationId:f.currentConversationId}))},0))}}catch(d){xt("Failed to load adapter info for existing adapter:",d)}}else{const d=await Hae();if(d){fe("🔄 Auto-selecting first adapter:",d.name),u.configureApi(l,null,n,d.name),Il=l,ml=!0,localStorage.setItem("chat-adapter-name",d.name);try{const B=new u.ApiClient({apiUrl:l,apiKey:null,sessionId:null,adapterName:d.name});let h;typeof B.getAdapterInfo=="function"&&(h=await B.getAdapterInfo(),fe("✅ Adapter info loaded for auto-selected adapter:",h));const f=wt.getState();f.currentConversationId&&(wt.setState({conversations:f.conversations.map(p=>p.id===f.currentConversationId?{...p,adapterName:d.name,adapterInfo:h,apiUrl:l,apiKey:void 0,updatedAt:new Date}:p)}),setTimeout(()=>{const p=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:p.conversations,currentConversationId:p.currentConversationId}))},0))}catch(B){xt("Failed to validate auto-selected adapter on startup:",B)}}else xt("No adapters available for auto-selection in middleware mode")}}else if(u.configureApi(l,o,n),Il=l,ml=!0,o===tn)try{const g=new u.ApiClient({apiUrl:l,apiKey:o,sessionId:null});if(typeof g.validateApiKey=="function"&&(await g.validateApiKey(),fe("✅ Default API key validated on startup")),typeof g.getAdapterInfo=="function"){const d=await g.getAdapterInfo();fe("✅ Adapter info loaded for default key:",d);const B=wt.getState();B.currentConversationId&&wt.setState({conversations:B.conversations.map(h=>h.id===B.currentConversationId?{...h,adapterInfo:d,updatedAt:new Date}:h)})}}catch(g){xt("Failed to validate default API key on startup:",g)}}catch(u){fn("Failed to initialize API:",u)}};typeof window<"u"&&e$e();const t$e=El(),r$e=new Map,n$e=new Map,A$e=new Map,i$e=()=>{if(typeof window>"u")return null;try{return localStorage.getItem("chat-adapter-name")}catch{return null}},Jae=e=>typeof e=="object"&&e!==null&&"message"in e,a$e=e=>e instanceof Error?e.message:typeof e=="string"?e:Jae(e)?e.message??"Unknown error":"Unknown error";function s$e({conversationId:e,onFilesSelected:t,onUploadError:r,onClose:n,onUploadingChange:A,onUploadSuccess:i,maxFiles:a=lt.maxFilesPerConversation,disabled:s=!1}){const[o,l]=y.useState(!1),[c,u]=y.useState(0),g=y.useRef(null),d=y.useRef(A$e),B=y.useRef(new Map),h=y.useRef(!0),f=y.useRef(r$e),p=y.useRef(n$e),w=y.useRef(e),E=wt(P=>P.conversations),C=y.useMemo(()=>{if(!e)return new Map;const P=f.current.get(e);return P?new Map(P):new Map},[e,c]),m=y.useCallback(P=>{if(!P){A==null||A(null,!1),u(q=>q+1);return}const ee=f.current.get(P)||new Map,G=E.find(q=>q.id===P);if(G&&G.attachedFiles){const q=G.attachedFiles.filter(oe=>!oe.processing_status||oe.processing_status==="processing"||oe.processing_status==="uploading"),Ae=new Map(ee);let ae=!1;q.forEach(oe=>{if(!Array.from(ee.values()).find(te=>te.fileId===oe.file_id)){const te=`${P}-${oe.filename}-${oe.file_id}`;Ae.set(te,{filename:oe.filename,progress:oe.processing_status==="uploading"?50:90,status:oe.processing_status||"processing",fileId:oe.file_id}),ae=!0}}),ae||Ae.size>0?(f.current.set(P,Ae),A==null||A(P,!0)):(f.current.delete(P),A==null||A(P,!1))}else ee.size>0?f.current.set(P,ee):f.current.delete(P),A==null||A(P,ee.size>0);u(q=>q+1)},[E,A]);y.useEffect(()=>{w.current=e,m(e)},[e,m]),y.useEffect(()=>{e&&m(e)},[E,e,m]);const I=y.useCallback((P,ee)=>{if(!P)return;const G=f.current.get(P)||new Map,q=ee(new Map(G));q.size>0?f.current.set(P,q):f.current.delete(P),A==null||A(P,q.size>0),u(Ae=>Ae+1)},[A]),M=y.useCallback((P,ee)=>{if(!P)return;const G=p.current.get(P)||[],q=ee([...G||[]]),Ae=new Set(G.map(ae=>ae.file_id));if(p.current.set(P,q),t(P,q),i){const ae=q.filter(oe=>!Ae.has(oe.file_id));ae.length>0&&i(P,ae)}u(ae=>ae+1)},[t,i]),b=wt(P=>P.removeFileFromConversation),k=wt(P=>P.addFileToConversation);y.useEffect(()=>(h.current=!0,()=>{h.current=!1}),[]);const N=y.useCallback(()=>{h.current=!1,new Map(B.current).forEach(ee=>ee.abort()),setTimeout(()=>{const ee=wt.getState(),G=new Map(ee.conversations.map(Ae=>[Ae.id,Ae])),q=[];d.current.forEach((Ae,ae)=>{var oe;if(Ae){const ge=G.get(Ae);if(new Set(((oe=ge==null?void 0:ge.attachedFiles)==null?void 0:oe.map(he=>he.file_id))||[]).has(ae)){d.current.delete(ae);return}}q.push({fileId:ae,conversationId:Ae||null})}),q.length>0&&(n==null||n(),q.forEach(async({fileId:Ae,conversationId:ae})=>{try{if(ae)await b(ae,Ae);else{const ge=Tr()?i$e():null;await xB.deleteFile(Ae,void 0,void 0,ge??void 0)}}catch(oe){if(Jae(oe)){const ge=oe.message??"";!ge.includes("404")&&ge.includes("File not found")}}}))},300)},[n,b]);y.useEffect(()=>N,[N]);const D=y.useCallback(async P=>{if(!P||P.length===0)return;const ee=Array.from(P),G=wt.getState(),q=e||G.currentConversationId;if(!q){r==null||r("Please select or create a conversation before uploading files.");return}const Ae=G.conversations.find(we=>we.id===q);if(!Ae){r==null||r("Conversation not found. Please try again.");return}if((p.current.get(q)||[]).length+ee.length>a){const we=`Maximum ${a} files allowed per conversation. Please remove some files first.`;r==null||r(we);return}if(lt.maxTotalFiles!==null&&G.conversations.reduce((Ye,be)=>{var De;return Ye+(((De=be.attachedFiles)==null?void 0:De.length)||0)},0)+ee.length>lt.maxTotalFiles){const Ye=`Maximum ${lt.maxTotalFiles} total files allowed across all conversations. Please remove some files from other conversations first.`;r==null||r(Ye);return}const oe=Tr();if(oe){if(!Ae.adapterName){r==null||r("Adapter not configured for this conversation. Please select an adapter first.");return}}else if(!Ae.apiKey||Ae.apiKey===t$e){r==null||r("API key not configured for this conversation. Please configure API settings first.");return}const ge=Ae.apiKey,te=Ae.adapterName,he=Za(Ae.apiUrl);for(let we=0;we<ee.length;we++){const Z=ee[we],Ye=new AbortController;B.current.set(Z.name,Ye);const be=`${q}-${Z.name}-${Date.now()}-${we}`;let De=null;try{const ke=await xB.uploadFile(Z,je=>{if(I(q,_e=>(_e.set(be,je),_e)),je.fileId&&!De){De=je.fileId,d.current.set(je.fileId,q);const _e={file_id:je.fileId,filename:Z.name,mime_type:Z.type||"application/octet-stream",file_size:Z.size,processing_status:je.status==="uploading"?"uploading":je.status==="processing"?"processing":je.status==="completed"?"completed":void 0};fe(`[FileUpload] Adding file ${je.fileId} to conversation ${q} immediately (status: ${_e.processing_status})`),k(q,_e)}},ge,he,oe?te:void 0).catch(je=>{if(je.message&&je.message.includes("was deleted")){De&&d.current.delete(De);const _e=je.message.match(/File\s+([\w-]+)\s+was deleted/);return _e&&_e[1]&&d.current.delete(_e[1]),fe(`File ${Z.name} was deleted during upload`),null}throw je});ke?(d.current.set(ke.file_id,q),fe(`[FileUpload] Updating file ${ke.file_id} in conversation ${q} with final status`),k(q,ke),ke.processing_status==="completed"?I(q,je=>(je.delete(be),je)):I(q,je=>{const _e=je.get(be);return _e&&je.set(be,{..._e,progress:90,status:"processing",fileId:ke.file_id}),je}),M(q,je=>{if(new Set(je.map(Ke=>Ke.file_id)).has(ke.file_id))return je;const Fe=[...je,ke];return fe(`[FileUpload] Updated uploadedFiles for ${q}: ${Fe.length} files`,Fe),Fe})):(xt(`Upload completed for ${Z.name} but uploadedAttachment is null`),I(q,je=>(je.delete(be),je)))}catch(ke){const je=a$e(ke);if(ke instanceof DOMException&&ke.name==="AbortError"||Ye.signal.aborted){fe(`Upload cancelled for ${Z.name}`),De&&d.current.delete(De);continue}if(je.includes("was deleted")){fe(`File ${Z.name} was deleted during upload`),De&&d.current.delete(De);const _e=je.match(/File\s+([\w-]+)\s+was deleted/);_e&&_e[1]&&d.current.delete(_e[1]);continue}h.current?(Su(`Failed to upload file ${Z.name}:`,ke),Su(`File type: ${Z.type}, File name: ${Z.name}`),r==null||r(je||`Failed to upload ${Z.name}`)):xt(`Upload error for ${Z.name} (component unmounted):`,je),De&&d.current.delete(De)}finally{B.current.delete(Z.name)}}},[k,e,a,r,M,I]),z=y.useCallback(P=>{P.preventDefault(),P.stopPropagation(),s||l(!0)},[s]),L=y.useCallback(P=>{P.preventDefault(),P.stopPropagation(),l(!1)},[]),T=y.useCallback(P=>{if(P.preventDefault(),P.stopPropagation(),l(!1),s)return;const ee=P.dataTransfer.files;D(ee)},[s,D]),v=y.useCallback(P=>{const ee=P.target.files;D(ee),g.current&&(g.current.value="")},[D]),H=y.useCallback(()=>{!s&&g.current&&g.current.click()},[s]),J=C.size>0,R=y.useMemo(()=>{const P=new Map;return E.forEach(ee=>{P.set(ee.id,ee.title||"Conversation")}),P},[E]),O=y.useMemo(()=>{const P=[];return f.current.forEach((ee,G)=>{G!==e&&ee.size>0&&P.push({conversationId:G,uploads:Array.from(ee.entries()).map(([q,Ae])=>({key:q,progress:Ae}))})}),P},[e,c]),U=x.jsx("div",{className:"w-full max-w-full overflow-hidden space-y-2",children:Array.from(C.values()).map(P=>x.jsxs("div",{className:"w-full max-w-full flex items-center gap-3 p-3 bg-slate-50 dark:bg-slate-800/50 rounded-lg overflow-hidden",children:[x.jsx(qc,{className:"w-4 h-4 text-emerald-600 dark:text-emerald-400 animate-spin flex-shrink-0"}),x.jsxs("div",{className:"flex-1 min-w-0 overflow-hidden",children:[x.jsx("p",{className:"text-sm font-medium text-slate-700 dark:text-slate-300 truncate",children:P.filename}),x.jsx("div",{className:"mt-1 bg-slate-200 dark:bg-slate-700 rounded-full h-1.5",children:x.jsx("div",{className:"bg-emerald-600 dark:bg-emerald-400 h-1.5 rounded-full transition-all duration-300",style:{width:`${P.progress}%`}})})]}),x.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:P.status==="uploading"?"Uploading...":P.status==="processing"?"Processing...":P.status==="completed"?"Done":"Error"})]},P.filename))});return J?x.jsx("div",{className:"w-full max-w-full overflow-hidden space-y-3",children:U}):x.jsxs("div",{className:"w-full max-w-full overflow-hidden space-y-3",children:[x.jsxs("div",{onClick:H,onDragOver:z,onDragLeave:L,onDrop:T,className:`
975
+ ]`;try{const t=JSON.parse(e);if(Array.isArray(t)){fe("Loading adapters from VITE_ADAPTERS environment variable");const r=t.map(gV).filter(n=>n!==null);if(r.length>0)return r}}catch{}return null}async function Lae(){if(Wo)return Wo;try{const t=await fetch("/api/adapters");if(t.ok)return Wo=(await t.json()).adapters,fe("Fetched adapters from /api/adapters:",Wo),Wo;fe(`/api/adapters returned ${t.status}, trying fallback`)}catch{}const e=X_e();if(e&&e.length>0)return Wo=e,Wo;throw new Error("No adapters available. Configure VITE_ADAPTERS environment variable.")}async function Hae(){try{const e=await Lae();return e.length>0?e[0]:null}catch{return null}}class Z_e{constructor(){hA(this,"audioQueue",[]);hA(this,"isPlaying",!1);hA(this,"currentAudio",null);hA(this,"audioContext",null);hA(this,"isEnabled",!1);hA(this,"onPlaybackStart",null);hA(this,"onPlaybackEnd",null);hA(this,"onChunkPlayed",null);hA(this,"blobUrls",[]);hA(this,"suppressPlaybackErrors",!1)}async enableAudio(){try{try{const t=new Audio("data:audio/wav;base64,UklGRigAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQAAAAA=");t.volume=0,await t.play(),t.pause()}catch{fe("[AudioStreamManager] Silent audio unlock deferred (will work on next interaction)")}return this.isEnabled=!0,fe("[AudioStreamManager] Audio playback enabled"),!0}catch{return!1}}disableAudio(){!this.isEnabled&&!this.isPlaying||(this.isEnabled=!1,this.stop())}async ensureAudioContext(){if(!this.audioContext&&typeof AudioContext<"u")try{return this.audioContext=new AudioContext,this.audioContext.state==="suspended"&&await this.audioContext.resume(),!0}catch{return!1}if(this.audioContext&&this.audioContext.state==="suspended")try{await this.audioContext.resume()}catch{return!1}return!0}isAudioEnabled(){return this.isEnabled}setOnPlaybackStart(t){this.onPlaybackStart=t}setOnPlaybackEnd(t){this.onPlaybackEnd=t}setOnChunkPlayed(t){this.onChunkPlayed=t}async addChunk(t){if(!this.isEnabled){fe(`[AudioStreamManager] Audio disabled, dropping chunk ${t.chunkIndex}`);return}fe(`[AudioStreamManager] Adding chunk ${t.chunkIndex} to queue`),this.audioQueue.push(t),this.audioQueue.sort((r,n)=>r.chunkIndex-n.chunkIndex),this.isPlaying||this.playNextChunk()}async playNextChunk(){var r,n;if(this.audioQueue.length===0){this.isPlaying=!1,this.onPlaybackEnd&&this.onPlaybackEnd();return}if(!this.isEnabled){this.audioQueue=[],this.isPlaying=!1;return}this.suppressPlaybackErrors=!1,await this.ensureAudioContext(),this.isPlaying=!0;const t=this.audioQueue.shift();try{if(!this.isPlaying)return;if(this.onPlaybackStart&&t.chunkIndex===0&&this.onPlaybackStart(),fe(`[AudioStreamManager] Playing chunk ${t.chunkIndex}`),!t.audio||t.audio.length===0)throw new Error(`Empty audio data for chunk ${t.chunkIndex}`);let A;try{A=atob(t.audio)}catch(u){throw new Error(`Failed to decode base64 audio for chunk ${t.chunkIndex}: ${u instanceof Error?u.message:String(u)}`)}if(A.length===0)throw new Error(`Decoded audio data is empty for chunk ${t.chunkIndex}`);const i=new Uint8Array(A.length);for(let u=0;u<A.length;u++)i[u]=A.charCodeAt(u);const a=t.audioFormat==="mp3"?"audio/mpeg":t.audioFormat==="wav"?"audio/wav":t.audioFormat==="ogg"?"audio/ogg":t.audioFormat==="opus"?"audio/ogg; codecs=opus":t.audioFormat==="webm"?"audio/webm":`audio/${t.audioFormat}`,s=new Blob([i],{type:a}),o=URL.createObjectURL(s);this.blobUrls.push(o);const l=new Audio;l.src=o,this.currentAudio=l;const c=()=>{l.src&&(l.src=""),URL.revokeObjectURL(o),this.blobUrls=this.blobUrls.filter(u=>u!==o)};await new Promise((u,g)=>{let d=!1;const B=()=>{var w;if(d)return;const f=l.error,p=f?{code:f.code,message:f.message||`MediaError code ${f.code}`,MEDIA_ERR_ABORTED:f.code===MediaError.MEDIA_ERR_ABORTED,MEDIA_ERR_NETWORK:f.code===MediaError.MEDIA_ERR_NETWORK,MEDIA_ERR_DECODE:f.code===MediaError.MEDIA_ERR_DECODE,MEDIA_ERR_SRC_NOT_SUPPORTED:f.code===MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED}:"Unknown error";if(this.suppressPlaybackErrors){d=!0,c(),u();return}d=!0,console.error(`[AudioStreamManager] Error playing chunk ${t.chunkIndex}:`,p,{audioFormat:t.audioFormat,chunkIndex:t.chunkIndex,audioLength:t.audio.length,mimeType:a,audioContextState:(w=this.audioContext)==null?void 0:w.state,audioSrc:l.src,audioReadyState:l.readyState}),Su(`[AudioStreamManager] Error playing chunk ${t.chunkIndex}:`,p),c(),g(new Error(`Audio playback error: ${JSON.stringify(p)}`))};l.addEventListener("error",B,{once:!0});const h=async()=>{var f;if(!d)try{l.addEventListener("ended",()=>{d||(d=!0,fe(`[AudioStreamManager] Chunk ${t.chunkIndex} finished`),this.onChunkPlayed&&this.onChunkPlayed(t.chunkIndex),c(),u())},{once:!0});const p=l.play();p&&await p}catch(p){if(d)return;if(this.suppressPlaybackErrors){d=!0,c(),u();return}d=!0,console.error(`[AudioStreamManager] Audio.play() rejected for chunk ${t.chunkIndex}:`,p,{audioFormat:t.audioFormat,chunkIndex:t.chunkIndex,audioContextState:(f=this.audioContext)==null?void 0:f.state,isEnabled:this.isEnabled,audioSrc:l.src,audioReadyState:l.readyState}),c(),g(p)}};l.readyState>=HTMLMediaElement.HAVE_CURRENT_DATA?h():l.addEventListener("canplay",h,{once:!0})}),this.currentAudio=null,this.playNextChunk()}catch(A){if(this.suppressPlaybackErrors)return;const i=A instanceof Error?A.message:String(A);console.error(`[AudioStreamManager] Failed to play chunk ${t.chunkIndex}:`,i,A,{audioFormat:t.audioFormat,chunkIndex:t.chunkIndex,audioLength:(r=t.audio)==null?void 0:r.length,audioContextState:(n=this.audioContext)==null?void 0:n.state,isEnabled:this.isEnabled}),Su(`[AudioStreamManager] Failed to play chunk ${t.chunkIndex}:`,A),this.playNextChunk()}}stop(){this.suppressPlaybackErrors=!0,this.isPlaying=!1,this.audioQueue=[],this.currentAudio&&(this.currentAudio.pause(),this.currentAudio.src="",this.currentAudio=null),this.blobUrls.forEach(t=>URL.revokeObjectURL(t)),this.blobUrls=[]}reset(){this.stop()}getQueueSize(){return this.audioQueue.length}isCurrentlyPlaying(){return this.isPlaying}}const ul=new Z_e,tn=El(),Oc=new Map,q_e=32,dV=(e,t)=>{const r=Oc.get(e);if(r){if(r.timeoutId&&(clearTimeout(r.timeoutId),r.timeoutId=null),r.content){const n=r.content;r.content="",t(A=>({conversations:A.conversations.map(i=>{if(i.id!==e)return i;const a=[...i.messages],s=a[a.length-1];return s&&s.role==="assistant"&&(a[a.length-1]={...s,content:s.content+n}),{...i,messages:a,updatedAt:new Date}})}))}Oc.delete(e)}},Ff=()=>{const e=localStorage.getItem("chatbot-session-id");if(e)return e;const t=`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return localStorage.setItem("chatbot-session-id",t),t},__e=e=>{localStorage.setItem("chatbot-session-id",e)};let $_e=0;const QN=e=>{const t=Date.now(),r=++$_e,n=Math.random().toString(36).substr(2,9);return`msg_${t}_${r}_${n}_${e}`},$a=()=>{const e=Date.now(),t=Math.random().toString(36).substr(2,9);return`session_${e}_${t}`},BV=e=>e.filter(t=>!t.isThreadMessage&&!(t.role==="assistant"&&t.isStreaming)).length;let ml=!1,Il="";async function Js(){if(ml&&Il)return!0;try{const e=await En(),t=localStorage.getItem("chat-api-url");t&&t===Kl&&localStorage.removeItem("chat-api-url");const r=t&&t!==Kl?t:Vr(),n=localStorage.getItem("chat-api-key")||tn,A=Ff();return e.configureApi(r,n,A),Il=r,ml=!0,!0}catch(e){return fn("Failed to configure API:",e),!1}}const wt=V_e((e,t)=>({conversations:[],currentConversationId:null,isLoading:!1,error:null,sessionId:Ff(),getSessionId:()=>t().sessionId,configureApiSettings:async(r,n,A,i)=>{const a=t(),s=a.conversations.find(c=>c.id===a.currentConversationId),o=Tr(),l=(s==null?void 0:s.sessionId)||A||Ff();A&&__e(A),e({sessionId:l});try{const c=await En();if(o){if(!i||!i.trim())throw new Error("Adapter name is required when API middleware is enabled");c.configureApi(r,null,l,i),Il=r,ml=!0;let u;try{const g=new c.ApiClient({apiUrl:r,apiKey:null,sessionId:null,adapterName:i});typeof g.getAdapterInfo=="function"&&(u=await g.getAdapterInfo(),fe("Adapter info loaded:",u))}catch(g){xt("Failed to load adapter info:",g)}if(s)e(g=>({conversations:g.conversations.map(d=>d.id===s.id?{...d,adapterName:i,apiUrl:r,adapterInfo:u,apiKey:void 0,updatedAt:new Date}:d)}));else if(i&&i.trim()){const g=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,d=$a();e(B=>({conversations:[...B.conversations,{id:g,sessionId:d,title:"New Conversation",messages:[],createdAt:new Date,updatedAt:new Date,adapterName:i,apiUrl:r,adapterInfo:u}],currentConversationId:g}))}}else{let u;if(n&&n.trim())try{const g=new c.ApiClient({apiUrl:r,apiKey:n,sessionId:null});if(typeof g.validateApiKey=="function"){fe("Validating API key before configuration...");const d=await g.validateApiKey();fe("API key validation successful:",{exists:d.exists,active:d.active,adapter_name:d.adapter_name,client_name:d.client_name})}else xt("API key validation not available (validateApiKey method not found)");if(typeof g.getAdapterInfo=="function")try{u=await g.getAdapterInfo(),fe("Adapter info loaded:",u)}catch(d){xt("Failed to load adapter info:",d)}}catch(g){throw g instanceof Error?g:new Error(`API key validation failed: ${String(g)}`)}if(c.configureApi(r,n||"",l),Il=r,ml=!0,s&&n&&n.trim())e(g=>({conversations:g.conversations.map(d=>d.id===s.id?{...d,apiKey:n,apiUrl:r,adapterInfo:u,adapterName:void 0,updatedAt:new Date}:d)})),setTimeout(()=>{const g=t();localStorage.setItem("chat-state",JSON.stringify({conversations:g.conversations,currentConversationId:g.currentConversationId}))},0);else if(n&&n.trim()){const g=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,d=$a(),B={id:g,sessionId:d,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:n,apiUrl:r,adapterInfo:u};e(h=>{const f=lt.maxConversations;if(f!==null&&h.conversations.length>=f){const p=`Maximum of ${f} conversations reached. Please delete an existing conversation before starting a new one.`;return xt(p),h}return{conversations:[B,...h.conversations],currentConversationId:g,sessionId:d}}),setTimeout(()=>{const h=t();localStorage.setItem("chat-state",JSON.stringify({conversations:h.conversations,currentConversationId:h.currentConversationId}))},0)}}}catch(c){throw e({isLoading:!1}),c instanceof Error?c:new Error("Failed to configure API settings")}o?i?localStorage.setItem("chat-adapter-name",i):localStorage.removeItem("chat-adapter-name"):(r&&r!==Kl?localStorage.setItem("chat-api-url",r):localStorage.removeItem("chat-api-url"),n&&localStorage.setItem("chat-api-key",n)),e({isLoading:!1})},createConversation:()=>{const r=t(),n=lt.maxConversations,A=r.conversations.length,i=r.currentConversationId?r.conversations.find(d=>d.id===r.currentConversationId):null;if(n!==null&&A>=n){const d=`Maximum of ${n} conversations reached. Please delete an existing conversation before starting a new one.`;throw e({error:d}),new Error(d)}if(i&&i.messages.length===0){const d="Finish or delete the current conversation before starting a new one.";throw e({error:d}),new Error(d)}const a=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,s=$a(),o=Vr(),l=tn,c=Tr(),u=c&&typeof window<"u"?localStorage.getItem("chat-adapter-name"):null,g={id:a,sessionId:s,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:c?void 0:l,apiUrl:o,adapterName:u||void 0};return e(d=>({conversations:[g,...d.conversations],currentConversationId:a,sessionId:s})),Js().then(d=>{d&&En().then(B=>{c&&u?B.configureApi(o,null,s,u):B.configureApi(o,l,s);try{const h=new B.ApiClient({apiUrl:o,apiKey:c?null:l,sessionId:null,adapterName:c?u:null});typeof h.getAdapterInfo=="function"&&h.getAdapterInfo().then(f=>{fe("✅ Adapter info loaded for new conversation:",f);const p=wt.getState();wt.setState({conversations:p.conversations.map(w=>w.id===a?{...w,adapterInfo:f,updatedAt:new Date}:w)})}).catch(f=>{xt("Failed to load adapter info for new conversation:",f)})}catch{}})}),setTimeout(()=>{const d=t();localStorage.setItem("chat-state",JSON.stringify({conversations:d.conversations,currentConversationId:d.currentConversationId}))},0),a},selectConversation:async r=>{const n=t().conversations.find(A=>A.id===r);if(n){const A=n.messages.some(o=>o.role==="assistant"&&o.isStreaming);e({currentConversationId:r,sessionId:n.sessionId,isLoading:A});const i=n.apiUrl||Vr(),a=n.apiKey||tn;if(await Js()){const o=await En();if(o.configureApi(i,a,n.sessionId),!n.adapterInfo)try{const l=new o.ApiClient({apiUrl:i,apiKey:a,sessionId:null});if(typeof l.getAdapterInfo=="function"){const c=await l.getAdapterInfo();fe("Adapter info loaded for conversation:",c),e(u=>({conversations:u.conversations.map(g=>g.id===r?{...g,adapterInfo:c,updatedAt:new Date}:g)})),setTimeout(()=>{const u=t();localStorage.setItem("chat-state",JSON.stringify({conversations:u.conversations,currentConversationId:u.currentConversationId}))},0)}}catch{}}}setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},deleteConversation:async r=>{var i,a;const n=t(),A=n.conversations.find(s=>s.id===r);if(fe(`🗑️ Deleting conversation ${r}:`,{conversationId:r,sessionId:A==null?void 0:A.sessionId,title:A==null?void 0:A.title,messageCount:A==null?void 0:A.messages.length,fileCount:((i=A==null?void 0:A.attachedFiles)==null?void 0:i.length)||0}),n.currentConversationId===r&&ul.stop(),A!=null&&A.sessionId)try{if(!await Js())fn("Failed to configure API for conversation deletion");else{const o=Tr(),l=A.apiUrl||Vr(),c=A.apiKey||tn,u=A.adapterName;o?u?fe(`🔑 Using conversation's adapter for deletion: ${u} (conversation: ${r})`):xt(`Skipping server deletion for conversation ${r}: adapter not configured`):fe(`🔑 Using conversation's API key for deletion: ${c.substring(0,8)}... (conversation: ${r})`);const g=await En(),d=new g.ApiClient({apiUrl:l,apiKey:o?null:c,sessionId:A.sessionId,adapterName:o?u:null}),B=((a=A==null?void 0:A.attachedFiles)==null?void 0:a.map(h=>h.file_id))||[];if(fe(`🔧 Calling deleteConversationWithFiles for session: ${A.sessionId}`),fe(`🔧 File IDs to delete: ${B.join(", ")||"none"}`),d.deleteConversationWithFiles){const h=await d.deleteConversationWithFiles(A.sessionId,B);fe(`✅ Deleted conversation and files for session: ${A.sessionId}`,h),fe(` - Deleted ${h.deleted_messages} messages`),fe(` - Deleted ${h.deleted_files} files`),h.file_deletion_errors&&h.file_deletion_errors.length>0&&xt(` - Errors deleting files: ${h.file_deletion_errors.join(", ")}`)}else xt("⚠️ deleteConversationWithFiles method not available on API client")}}catch(s){fn("Failed to clear conversation history from server:",s)}e(s=>{var c;const o=s.conversations.filter(u=>u.id!==r),l=s.currentConversationId===r?((c=o[0])==null?void 0:c.id)||null:s.currentConversationId;if(o.length===0){const u=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,g=$a(),d=Vr(),B={id:u,sessionId:g,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:d};return Js().then(h=>{h&&En().then(f=>{f.configureApi(d,tn,g);try{const p=new f.ApiClient({apiUrl:d,apiKey:tn,sessionId:null});typeof p.validateApiKey=="function"&&p.validateApiKey().then(()=>{fe("✅ Default API key validated after creating new conversation")}).catch(()=>{xt("Failed to validate default API key")}),typeof p.getAdapterInfo=="function"&&p.getAdapterInfo().then(w=>{fe("✅ Adapter info loaded for default key:",w);const E=wt.getState();wt.setState({conversations:E.conversations.map(C=>C.id===u?{...C,adapterInfo:w,updatedAt:new Date}:C)})}).catch(()=>{xt("Failed to load adapter info for default key")})}catch{}})}),setTimeout(()=>{localStorage.setItem("chat-state",JSON.stringify({conversations:[B],currentConversationId:u}))},0),{conversations:[B],currentConversationId:u,sessionId:g}}return setTimeout(()=>{localStorage.setItem("chat-state",JSON.stringify({conversations:o,currentConversationId:l}))},0),{conversations:o,currentConversationId:l}})},deleteAllConversations:async()=>{const n=[...t().conversations];ul.stop();const A=n.map(async c=>{var u;if(c!=null&&c.sessionId)try{if(!await Js()){fn("Failed to configure API for conversation deletion");return}const d=Tr(),B=Za(c.apiUrl),h=c.apiKey||tn,f=c.adapterName;if(d&&!f){fe(`Skipping server deletion for conversation ${c.id}: adapter not configured`);return}const p=await En(),w=new p.ApiClient({apiUrl:B,apiKey:d?null:h,sessionId:c.sessionId,adapterName:d?f:null}),E=((u=c==null?void 0:c.attachedFiles)==null?void 0:u.map(C=>C.file_id))||[];w.deleteConversationWithFiles?(await w.deleteConversationWithFiles(c.sessionId,E),fe(`✅ Deleted conversation ${c.id} and files`)):xt(`deleteConversationWithFiles not available for conversation ${c.id}`)}catch(g){fn(`Failed to delete conversation ${c.id} from server:`,g)}});Promise.allSettled(A).then(c=>{const u=c.filter(g=>g.status==="rejected");u.length>0&&fn(`Some conversations failed to delete from server: ${u.length}`,u)});const i=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,a=$a(),s=Vr(),o=Tr(),l={id:i,sessionId:a,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:o?void 0:tn,apiUrl:s};Js().then(c=>{c&&En().then(async u=>{if(o)try{const g=await Hae();if(g){u.configureApi(s,null,a,g.name);const d=new u.ApiClient({apiUrl:s,apiKey:null,sessionId:null,adapterName:g.name});if(typeof d.getAdapterInfo=="function"){const B=await d.getAdapterInfo();fe("✅ Adapter info loaded after clearing conversations:",B);const h=wt.getState();wt.setState({conversations:h.conversations.map(f=>f.id===i?{...f,adapterName:g.name,adapterInfo:B,updatedAt:new Date}:f)}),setTimeout(()=>{const f=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:f.conversations,currentConversationId:f.currentConversationId}))},0)}}}catch{}else{u.configureApi(s,tn,a);try{const g=new u.ApiClient({apiUrl:s,apiKey:tn,sessionId:null});typeof g.validateApiKey=="function"&&g.validateApiKey().then(()=>{fe("✅ Default API key validated after clearing all conversations")}).catch(()=>{xt("Failed to validate default API key")}),typeof g.getAdapterInfo=="function"&&g.getAdapterInfo().then(d=>{fe("✅ Adapter info loaded for default key:",d);const B=wt.getState();wt.setState({conversations:B.conversations.map(h=>h.id===i?{...h,adapterInfo:d,updatedAt:new Date}:h)})}).catch(()=>{xt("Failed to load adapter info for default key")})}catch{}}})}),e({conversations:[l],currentConversationId:i,sessionId:a}),setTimeout(()=>{localStorage.setItem("chat-state",JSON.stringify({conversations:[l],currentConversationId:i}))},0)},sendMessage:async(r,n,A)=>{var i,a,s,o,l,c,u,g,d,B,h;try{if(t().isLoading){xt("Another request is already in progress");return}if(!await Js())throw new Error("API not properly configured. Please configure API settings first.");let p=t().currentConversationId;p||(p=t().createConversation());const w=t().conversations.find(v=>v.id===p);if(!w)throw new Error("Conversation not found");const E=n?n.map(v=>{var J;const H=(J=w==null?void 0:w.attachedFiles)==null?void 0:J.find(R=>R.file_id===v);return H||{file_id:v,filename:"",mime_type:"",file_size:0}}).filter(v=>v!==void 0):[];E.length>0&&E.forEach(v=>{t().addFileToConversation(p,v)});const C=A||null;let m,I=null;if(C){if(m=w.messages.find(v=>{var H;return((H=v.threadInfo)==null?void 0:H.thread_id)===C}),!m)throw new Error("Thread metadata not found. Please recreate the thread from this message.");if(I=((i=m.threadInfo)==null?void 0:i.thread_session_id)||null,!I)throw new Error("Thread session is missing. Please recreate the thread from this message.")}const M=BV(w.messages),b=lt.maxMessagesPerConversation;if(b!==null&&M>=b){xt(`[chatStore] Conversation ${p} reached the message limit (${b}).`),e({isLoading:!1});return}const k=lt.maxTotalMessages;if(k!==null&&t().conversations.reduce((H,J)=>H+BV(J.messages),0)>=k){xt(`[chatStore] Workspace reached the total message limit (${k}).`),e({isLoading:!1});return}const N={id:QN("user"),content:r,role:"user",timestamp:new Date,attachments:E.length>0?E:void 0},D=QN("assistant"),z={id:D,content:"",role:"assistant",timestamp:new Date,isStreaming:!0};if(C&&m){N.isThreadMessage=!0,N.threadId=C,N.parentMessageId=m.id,z.isThreadMessage=!0,z.threadId=C,z.parentMessageId=m.id;const v=lt.maxMessagesPerThread;if(v!==null&&w.messages.filter(J=>J.isThreadMessage?(J.threadId===C||J.parentMessageId===m.id)&&!(J.role==="assistant"&&J.isStreaming):!1).length>=v){xt(`[chatStore] Thread ${C} reached the message limit (${v}).`),e({isLoading:!1});return}}e(v=>{const H=v.conversations.find(O=>O.id===p),J=(H==null?void 0:H.messages.filter(O=>O.role==="assistant"&&O.isStreaming))||[];return J.length>0&&xt(`Cleaning up ${J.length} existing streaming messages`),{conversations:v.conversations.map(O=>{if(O.id!==p)return{...O,messages:O.messages};const U=O.messages.filter(P=>!(P.role==="assistant"&&P.isStreaming));return{...O,messages:[...U,N,z],updatedAt:new Date,title:O.messages.length===0?r.slice(0,50)+(r.length>50?"...":""):O.title}}),isLoading:!0,error:null}});const L=p;let T=!1;ul.reset();try{const v=t().conversations.find(Z=>Z.id===L);if(!v)throw new Error("Conversation not found");const H=Tr();if(H){if(!v.adapterName)throw xt(`[sendMessage] Conversation ${L} has no adapter name`),new Error("Adapter not configured for this conversation. Please select an adapter first.");fe(`[sendMessage] Using adapter for conversation ${L}: ${v.adapterName}`)}else{if(!v.apiKey)throw xt(`[sendMessage] Conversation ${L} has no API key`),new Error("API key not configured for this conversation. Please configure API settings first.");fe(`[sendMessage] Using API key for conversation ${L}: ${v.apiKey.substring(0,8)}...`)}const J=Za(v.apiUrl),R=v.apiKey,O=v.adapterName,U=A||null,P=I||v.sessionId,ee=await En();H?ee.configureApi(J,null,P,O):ee.configureApi(J,R,P),U&&P!==v.sessionId&&fe(`[chatStore] Thread mode: using thread session ${P} (original: ${v.sessionId})`),fe("[chatStore] Starting streamChat with fileIds:",n);const G=t().conversations.find(Z=>Z.id===L),q=((s=(a=G==null?void 0:G.adapterInfo)==null?void 0:a.adapter_name)==null?void 0:s.includes("voice"))||((l=(o=G==null?void 0:G.adapterInfo)==null?void 0:o.adapter_name)==null?void 0:l.includes("audio"))||((u=(c=G==null?void 0:G.adapterInfo)==null?void 0:c.adapter_name)==null?void 0:u.includes("multilingual")),Ae=()=>{try{const Z=localStorage.getItem("chat-settings");if(Z)return JSON.parse(Z).voiceEnabled===!0}catch(Z){xt("Failed to read global voice setting:",Z)}return!1},ae=G==null?void 0:G.audioSettings,oe=Ae(),ge=(ae==null?void 0:ae.enabled)??oe??q,te=(ae==null?void 0:ae.ttsVoice)||void 0,he=(ae==null?void 0:ae.language)||"en-US",we=ae==null?void 0:ae.audioFormat;fe("[chatStore] Audio settings:",{returnAudio:ge,ttsVoice:te,language:he,audioFormat:we,isVoiceAdapter:q,adapterName:(g=G==null?void 0:G.adapterInfo)==null?void 0:g.adapter_name});for await(const Z of ee.streamChat(r,!0,n,U||void 0,void 0,void 0,he,ge,te)){if(fe("[chatStore] Received stream chunk:",{text:(d=Z.text)==null?void 0:d.substring(0,50),done:Z.done,hasAudio:!!Z.audio,hasAudioChunk:!!Z.audio_chunk,audioFormat:Z.audioFormat,audioLength:(B=Z.audio)==null?void 0:B.length,chunkIndex:Z.chunk_index}),Z.audio_chunk){fe("[chatStore] Received audio chunk:",{chunk_index:Z.chunk_index,audioFormat:Z.audioFormat,audioLength:(h=Z.audio_chunk)==null?void 0:h.length});const Ye=Z.chunk_index??0;ul.addChunk({audio:Z.audio_chunk,audioFormat:Z.audioFormat||"opus",chunkIndex:Ye})}if(Z.text){const Ye=Ud(Z.text);Ye?(t().appendToLastMessage(Ye,L),T=!0):Z.text.length>100&&xt("[chatStore] Filtered out potential base64 audio data from message content")}if(Z.audio&&Z.done&&e(Ye=>({conversations:Ye.conversations.map(be=>{if(be.id!==L)return be;const De=[...be.messages],ke=De[De.length-1];return ke&&ke.role==="assistant"&&(De[De.length-1]={...ke,audio:Z.audio,audioFormat:Z.audioFormat||"mp3"}),{...be,messages:De,updatedAt:new Date}})})),Z.done){fe("[chatStore] Stream completed, receivedAnyText:",T),fe("[chatStore] Done chunk received:",{hasThreading:!!Z.threading,threading:Z.threading,assistantMessageId:D});const Ye=Z.threading;Ye&&Ye.supports_threading&&(e(be=>({conversations:be.conversations.map(De=>De.id!==L?De:{...De,messages:De.messages.map(ke=>ke.id===D?{...ke,supportsThreading:!0,databaseMessageId:Ye.message_id}:ke),updatedAt:new Date})})),fe(`[chatStore] Message ${D} marked as supporting threading`,{message_id:Ye.message_id,session_id:Ye.session_id,databaseMessageId:Ye.message_id}));break}}T||(xt("[chatStore] No text received from stream, showing error message"),t().appendToLastMessage("No response received from the server. Please try again later.",L))}catch(v){fn("Chat API error:",v);let H="Sorry, there was an error processing your request.";v instanceof Error&&(v.message.startsWith("Server error:")?H=v.message.substring(14):(v.message.includes("Could not connect")||v.message.includes("timed out"))&&(H=v.message)),t().appendToLastMessage(H,L)}dV(L,e),e(v=>{const H=v.conversations.map(O=>O.id===L?{...O,messages:O.messages.map(U=>U.id===D?{...U,isStreaming:!1}:U),updatedAt:new Date}:O),J=H.find(O=>O.id===v.currentConversationId),R=J?J.messages.some(O=>O.role==="assistant"&&O.isStreaming):!1;return{conversations:H,isLoading:R}}),setTimeout(()=>{const v=t();localStorage.setItem("chat-state",JSON.stringify({conversations:v.conversations,currentConversationId:v.currentConversationId}))},0)}catch(f){fn("Chat store error:",f),e(()=>({isLoading:!1,error:`Failed to send message: ${f instanceof Error?f.message:"Unknown error"}`}))}},createThread:async(r,n)=>{try{const A=t().conversations.find(h=>h.sessionId===n);if(!A)throw new Error("Conversation not found for session");const i=Tr();if(i&&!A.adapterName)throw new Error("Adapter not configured for this conversation");if(!i&&!A.apiKey)throw new Error("API key not configured for this conversation");const a=A.messages.find(h=>h.id===r);if(!a)throw new Error("Message not found");const s=a.databaseMessageId||r,o=Za(A.apiUrl||Vr()),l=A.apiKey||tn,c=A.adapterName,u=await En(),g=new u.ApiClient({apiUrl:o,apiKey:i?null:l,sessionId:n,adapterName:i?c:null}),B=await new(await Yt(async()=>{const{ThreadService:h}=await import("./threadService-B9Db3n0J.js");return{ThreadService:h}},[])).ThreadService(g).createThread(s,n);e(h=>({conversations:h.conversations.map(f=>f.sessionId!==n?f:{...f,messages:f.messages.map(p=>p.id===r?{...p,threadInfo:B,supportsThreading:!0}:p),currentThreadId:void 0,currentThreadSessionId:void 0})})),fe(`[chatStore] Created thread ${B.thread_id} for message ${r}`)}catch(A){throw fn("Failed to create thread:",A),A}},appendToLastMessage:(r,n)=>{const A=Ud(r);if(!A&&r)return;const i=OD(A),a=n||t().currentConversationId;if(!a)return;const s=a,o=Oc.get(s);o?(o.content+=i,o.timeoutId&&clearTimeout(o.timeoutId)):Oc.set(s,{content:i,timeoutId:null});const l=()=>{const u=Oc.get(s);if(!u||!u.content)return;const g=u.content;u.content="",u.timeoutId=null,e(d=>({conversations:d.conversations.map(B=>{if(B.id!==a)return B;const h=[...B.messages],f=h[h.length-1];return f&&f.role==="assistant"&&f.isStreaming&&(h[h.length-1]={...f,content:f.content+g}),{...B,messages:h,updatedAt:new Date}})}))},c=Oc.get(s);c.timeoutId=setTimeout(l,q_e)},regenerateResponse:async r=>{var n,A,i,a,s,o;try{if(t().isLoading){xt("Another request is already in progress");return}if(!await Js())throw new Error("API not properly configured");const c=t(),u=c.conversations.find(w=>w.id===c.currentConversationId);if(!u)return;const g=u.messages.findIndex(w=>w.id===r);if(g===-1)return;const d=u.messages[g-1];if(!d||d.role!=="user")return;const B=(d.attachments||[]).map(w=>w.file_id).filter(w=>typeof w=="string"&&w.length>0),h=QN("assistant");e(w=>({conversations:w.conversations.map(E=>E.id===w.currentConversationId?{...E,messages:[...E.messages.slice(0,g),{id:h,content:"",role:"assistant",timestamp:new Date,isStreaming:!0}],updatedAt:new Date}:E),isLoading:!0,error:null}));const f=c.currentConversationId;if(!f)throw new Error("No conversation selected");let p=!1;try{const w=t().conversations.find(L=>L.id===f);if(!w)throw new Error("Conversation not found");const E=Tr();if(E){if(!w.adapterName)throw new Error("Adapter not configured for this conversation. Please select an adapter first.")}else if(!w.apiKey)throw new Error("API key not configured for this conversation. Please configure API settings first.");if(w.sessionId){const L=Za(w.apiUrl),T=w.apiKey,v=w.adapterName,H=await En();E?H.configureApi(L,null,w.sessionId,v):H.configureApi(L,T,w.sessionId)}const C=await En(),m=t().conversations.find(L=>L.id===f),I=((A=(n=m==null?void 0:m.adapterInfo)==null?void 0:n.adapter_name)==null?void 0:A.includes("voice"))||((a=(i=m==null?void 0:m.adapterInfo)==null?void 0:i.adapter_name)==null?void 0:a.includes("audio"))||((o=(s=m==null?void 0:m.adapterInfo)==null?void 0:s.adapter_name)==null?void 0:o.includes("multilingual")),M=()=>{try{const L=localStorage.getItem("chat-settings");if(L)return JSON.parse(L).voiceEnabled===!0}catch(L){xt("Failed to read global voice setting:",L)}return!1},b=m==null?void 0:m.audioSettings,k=M(),N=(b==null?void 0:b.enabled)??k??I,D=(b==null?void 0:b.ttsVoice)||void 0,z=(b==null?void 0:b.language)||"en-US";for await(const L of C.streamChat(d.content,!0,B.length>0?B:void 0,void 0,void 0,void 0,z,N,D)){if(L.text){const T=Ud(L.text);T?(t().appendToLastMessage(T,f),p=!0):L.text.length>100&&xt("[chatStore] Filtered out potential base64 audio data from regenerated message content")}if(L.audio&&L.done&&e(T=>({conversations:T.conversations.map(v=>{if(v.id!==f)return v;const H=[...v.messages],J=H[H.length-1];return J&&J.role==="assistant"&&(H[H.length-1]={...J,audio:L.audio,audioFormat:L.audioFormat||"mp3"}),{...v,messages:H,updatedAt:new Date}})})),L.done)break}p||t().appendToLastMessage("No response received from the server. Please try again later.",f)}catch(w){fn("Regenerate API error:",w);let E="Sorry, there was an error regenerating the response.";w instanceof Error&&(w.message.startsWith("Server error:")?E=w.message.substring(14):(w.message.includes("Could not connect")||w.message.includes("timed out"))&&(E=w.message)),t().appendToLastMessage(E,f)}dV(f,e),e(w=>{const E=w.conversations.map(I=>I.id===f?{...I,messages:I.messages.map(M=>M.id===h?{...M,isStreaming:!1}:M),updatedAt:new Date}:I),C=E.find(I=>I.id===w.currentConversationId),m=C?C.messages.some(I=>I.role==="assistant"&&I.isStreaming):!1;return{conversations:E,isLoading:m}})}catch(l){fn("Regenerate error:",l),e({isLoading:!1,error:`Failed to regenerate response: ${l instanceof Error?l.message:"Unknown error"}`})}},updateConversationTitle:(r,n)=>{e(A=>({conversations:A.conversations.map(i=>i.id===r?{...i,title:n,updatedAt:new Date}:i)})),setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},clearError:()=>{e({error:null})},cleanupStreamingMessages:()=>{e(r=>({conversations:r.conversations.map(n=>(n.id===r.currentConversationId,n)),isLoading:!1}))},canCreateNewConversation:()=>{const r=t(),n=lt.maxConversations;if(!r.currentConversationId)return n===null||r.conversations.length<n;const A=r.conversations.find(i=>i.id===r.currentConversationId);return A&&A.messages.length>0?n===null||r.conversations.length<n:!1},getConversationCount:()=>t().conversations.length,addFileToConversation:(r,n)=>{fe("[chatStore] addFileToConversation called",{conversationId:r,fileId:n.file_id,filename:n.filename}),e(A=>{var s,o;const i={conversations:A.conversations.map(l=>l.id===r?{...l,attachedFiles:[...(l.attachedFiles||[]).filter(c=>c.file_id!==n.file_id),n],updatedAt:new Date}:l)},a=i.conversations.find(l=>l.id===r);return fe(`[chatStore] Updated conversation ${r}`,{hasConversation:!!a,attachedFilesCount:((s=a==null?void 0:a.attachedFiles)==null?void 0:s.length)||0,attachedFiles:(o=a==null?void 0:a.attachedFiles)==null?void 0:o.map(l=>({file_id:l.file_id,filename:l.filename}))}),i}),setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},removeFileFromConversation:async(r,n)=>{try{const A=t().conversations.find(l=>l.id===r);if(!A)throw new Error("Conversation not found");if(Tr()){if(!A.adapterName)throw new Error("Adapter not configured for this conversation. Cannot delete file.")}else if(!A.apiKey)throw new Error("API key not configured for this conversation. Cannot delete file.");const a=A.apiKey,s=A.adapterName,o=Za(A.apiUrl);fe(`[chatStore] Calling FileUploadService.deleteFile for ${n}`),await xB.deleteFile(n,a,o,s),fe(`[chatStore] Successfully deleted file ${n} from server`)}catch(A){A instanceof Error&&(A.message.includes("404")||A.message.includes("File not found"))}e(A=>({conversations:A.conversations.map(i=>i.id===r?{...i,attachedFiles:(i.attachedFiles||[]).filter(a=>a.file_id!==n),updatedAt:new Date}:i)})),setTimeout(()=>{const A=t();localStorage.setItem("chat-state",JSON.stringify({conversations:A.conversations,currentConversationId:A.currentConversationId}))},0)},loadConversationFiles:async r=>{try{const n=t().conversations.find(g=>g.id===r);if(!n)return;if(Tr()){if(!n.adapterName){fe(`Skipping file load for conversation ${r}: adapter not configured`);return}}else if(!n.apiKey){fe(`Skipping file load for conversation ${r}: API key not configured`);return}const i=n.apiKey,a=n.adapterName,s=Za(n.apiUrl);if(new Set((n.attachedFiles||[]).map(g=>g.file_id)).size===0){fe(`No files to sync for conversation ${r}`);return}const c=(await xB.listFiles(i,s,a)).map(g=>({file_id:g.file_id,filename:g.filename,mime_type:g.mime_type,file_size:g.file_size,upload_timestamp:g.upload_timestamp,processing_status:g.processing_status,chunk_count:g.chunk_count})),u=new Map(c.map(g=>[g.file_id,g]));e(g=>{const d=g.conversations.find(h=>h.id===r);if(!d)return g;const B=(d.attachedFiles||[]).map(h=>u.get(h.file_id)||h).filter(h=>u.has(h.file_id)||!h.processing_status||h.processing_status==="processing");return{conversations:g.conversations.map(h=>h.id===r?{...h,attachedFiles:B,updatedAt:new Date}:h)}}),setTimeout(()=>{const g=t();localStorage.setItem("chat-state",JSON.stringify({conversations:g.conversations,currentConversationId:g.currentConversationId}))},0)}catch(n){fn(`Failed to load files for conversation ${r}:`,n)}},syncConversationFiles:async r=>{await t().loadConversationFiles(r)}})),e$e=async()=>{var c;const e=localStorage.getItem("chat-state"),t=Vr(),r=typeof window<"u"?!!localStorage.getItem("chat-api-url"):!1;let n=Ff(),A=!1;if(e)try{const u=JSON.parse(e),g=h=>{if(h instanceof Date)return h;const f=h?new Date(h):new Date;return Number.isNaN(f.getTime())?new Date:f},d=Array.isArray(u.conversations)?u.conversations:[];if(u.conversations=d.map(h=>{const p=(Array.isArray(h.messages)?h.messages:[]).filter(m=>!(m.role==="assistant"&&m.isStreaming)).map(m=>({...m,timestamp:g(m.timestamp),isStreaming:!1})),w={id:h.id,sessionId:h.sessionId||$a(),title:h.title||"New Chat",messages:p,createdAt:g(h.createdAt),updatedAt:g(h.updatedAt),attachedFiles:h.attachedFiles||[],apiKey:h.apiKey||tn,adapterName:h.adapterName,apiUrl:h.apiUrl,adapterInfo:h.adapterInfo,audioSettings:h.audioSettings,currentThreadId:void 0,currentThreadSessionId:void 0},C=w.messages.length===0&&(!w.apiKey||w.apiKey===tn)&&!r?t:Za(h.apiUrl);return{...w,apiUrl:C}}),A=u.conversations&&u.conversations.length>0,u.currentConversationId&&u.conversations){const h=u.conversations.find(f=>f.id===u.currentConversationId);h&&h.sessionId&&(n=h.sessionId)}if(!u.conversations||u.conversations.length===0){const h=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,f=$a(),p={id:h,sessionId:f,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:Vr()};wt.setState({conversations:[p],currentConversationId:h,sessionId:f}),n=f}else wt.setState({conversations:u.conversations||[],currentConversationId:u.currentConversationId||((c=u.conversations[0])==null?void 0:c.id)||null,sessionId:n}),!u.currentConversationId&&u.conversations.length>0&&(wt.setState({currentConversationId:u.conversations[0].id,sessionId:u.conversations[0].sessionId||n}),n=u.conversations[0].sessionId||n);const B=wt.getState().conversations;fe("📋 Loaded conversations:",B.map(h=>{var f;return{id:h.id,title:h.title,sessionId:h.sessionId,messageCount:((f=h.messages)==null?void 0:f.length)||0}})),setTimeout(()=>{wt.getState().cleanupStreamingMessages()},100)}catch(u){fn("Failed to load chat state:",u);const g=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,d=$a(),B=Vr(),h={id:g,sessionId:d,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:B};wt.setState({conversations:[h],currentConversationId:g,sessionId:d}),n=d}else{const u=`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,g=$a(),d=Vr(),B={id:u,sessionId:g,title:"New Chat",messages:[],createdAt:new Date,updatedAt:new Date,apiKey:tn,apiUrl:d};wt.setState({conversations:[B],currentConversationId:u,sessionId:g}),n=g}const i=wt.getState(),a=i.currentConversationId?i.conversations.find(u=>u.id===i.currentConversationId):null,s=Tr(),o=A&&(a!=null&&a.apiKey)?a.apiKey:tn,l=A&&(a!=null&&a.apiUrl)?a.apiUrl:Vr();try{const u=await En();if(s){const g=a==null?void 0:a.adapterName;if(g){if(u.configureApi(l,null,n,g),Il=l,ml=!0,fe("✅ Using existing adapter from conversation:",g),!(a!=null&&a.adapterInfo))try{const d=new u.ApiClient({apiUrl:l,apiKey:null,sessionId:null,adapterName:g});if(typeof d.getAdapterInfo=="function"){const B=await d.getAdapterInfo();fe("✅ Adapter info loaded for existing adapter:",B);const h=wt.getState();h.currentConversationId&&(wt.setState({conversations:h.conversations.map(f=>f.id===h.currentConversationId?{...f,adapterInfo:B,updatedAt:new Date}:f)}),setTimeout(()=>{const f=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:f.conversations,currentConversationId:f.currentConversationId}))},0))}}catch(d){xt("Failed to load adapter info for existing adapter:",d)}}else{const d=await Hae();if(d){fe("🔄 Auto-selecting first adapter:",d.name),u.configureApi(l,null,n,d.name),Il=l,ml=!0,localStorage.setItem("chat-adapter-name",d.name);try{const B=new u.ApiClient({apiUrl:l,apiKey:null,sessionId:null,adapterName:d.name});let h;typeof B.getAdapterInfo=="function"&&(h=await B.getAdapterInfo(),fe("✅ Adapter info loaded for auto-selected adapter:",h));const f=wt.getState();f.currentConversationId&&(wt.setState({conversations:f.conversations.map(p=>p.id===f.currentConversationId?{...p,adapterName:d.name,adapterInfo:h,apiUrl:l,apiKey:void 0,updatedAt:new Date}:p)}),setTimeout(()=>{const p=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:p.conversations,currentConversationId:p.currentConversationId}))},0))}catch(B){xt("Failed to validate auto-selected adapter on startup:",B)}}else xt("No adapters available for auto-selection in middleware mode")}}else if(u.configureApi(l,o,n),Il=l,ml=!0,o===tn)try{const g=new u.ApiClient({apiUrl:l,apiKey:o,sessionId:null});if(typeof g.validateApiKey=="function"&&(await g.validateApiKey(),fe("✅ Default API key validated on startup")),typeof g.getAdapterInfo=="function"){const d=await g.getAdapterInfo();fe("✅ Adapter info loaded for default key:",d);const B=wt.getState();B.currentConversationId&&wt.setState({conversations:B.conversations.map(h=>h.id===B.currentConversationId?{...h,adapterInfo:d,updatedAt:new Date}:h)})}}catch(g){xt("Failed to validate default API key on startup:",g)}}catch(u){fn("Failed to initialize API:",u)}};typeof window<"u"&&e$e();const t$e=El(),r$e=new Map,n$e=new Map,A$e=new Map,i$e=()=>{if(typeof window>"u")return null;try{return localStorage.getItem("chat-adapter-name")}catch{return null}},Jae=e=>typeof e=="object"&&e!==null&&"message"in e,a$e=e=>e instanceof Error?e.message:typeof e=="string"?e:Jae(e)?e.message??"Unknown error":"Unknown error";function s$e({conversationId:e,onFilesSelected:t,onUploadError:r,onClose:n,onUploadingChange:A,onUploadSuccess:i,maxFiles:a=lt.maxFilesPerConversation,disabled:s=!1}){const[o,l]=y.useState(!1),[c,u]=y.useState(0),g=y.useRef(null),d=y.useRef(A$e),B=y.useRef(new Map),h=y.useRef(!0),f=y.useRef(r$e),p=y.useRef(n$e),w=y.useRef(e),E=wt(P=>P.conversations),C=y.useMemo(()=>{if(!e)return new Map;const P=f.current.get(e);return P?new Map(P):new Map},[e,c]),m=y.useCallback(P=>{if(!P){A==null||A(null,!1),u(q=>q+1);return}const ee=f.current.get(P)||new Map,G=E.find(q=>q.id===P);if(G&&G.attachedFiles){const q=G.attachedFiles.filter(oe=>!oe.processing_status||oe.processing_status==="processing"||oe.processing_status==="uploading"),Ae=new Map(ee);let ae=!1;q.forEach(oe=>{if(!Array.from(ee.values()).find(te=>te.fileId===oe.file_id)){const te=`${P}-${oe.filename}-${oe.file_id}`;Ae.set(te,{filename:oe.filename,progress:oe.processing_status==="uploading"?50:90,status:oe.processing_status||"processing",fileId:oe.file_id}),ae=!0}}),ae||Ae.size>0?(f.current.set(P,Ae),A==null||A(P,!0)):(f.current.delete(P),A==null||A(P,!1))}else ee.size>0?f.current.set(P,ee):f.current.delete(P),A==null||A(P,ee.size>0);u(q=>q+1)},[E,A]);y.useEffect(()=>{w.current=e,m(e)},[e,m]),y.useEffect(()=>{e&&m(e)},[E,e,m]);const I=y.useCallback((P,ee)=>{if(!P)return;const G=f.current.get(P)||new Map,q=ee(new Map(G));q.size>0?f.current.set(P,q):f.current.delete(P),A==null||A(P,q.size>0),u(Ae=>Ae+1)},[A]),M=y.useCallback((P,ee)=>{if(!P)return;const G=p.current.get(P)||[],q=ee([...G||[]]),Ae=new Set(G.map(ae=>ae.file_id));if(p.current.set(P,q),t(P,q),i){const ae=q.filter(oe=>!Ae.has(oe.file_id));ae.length>0&&i(P,ae)}u(ae=>ae+1)},[t,i]),b=wt(P=>P.removeFileFromConversation),k=wt(P=>P.addFileToConversation);y.useEffect(()=>(h.current=!0,()=>{h.current=!1}),[]);const N=y.useCallback(()=>{h.current=!1,new Map(B.current).forEach(ee=>ee.abort()),setTimeout(()=>{const ee=wt.getState(),G=new Map(ee.conversations.map(Ae=>[Ae.id,Ae])),q=[];d.current.forEach((Ae,ae)=>{var oe;if(Ae){const ge=G.get(Ae);if(new Set(((oe=ge==null?void 0:ge.attachedFiles)==null?void 0:oe.map(he=>he.file_id))||[]).has(ae)){d.current.delete(ae);return}}q.push({fileId:ae,conversationId:Ae||null})}),q.length>0&&(n==null||n(),q.forEach(async({fileId:Ae,conversationId:ae})=>{try{if(ae)await b(ae,Ae);else{const ge=Tr()?i$e():null;await xB.deleteFile(Ae,void 0,void 0,ge??void 0)}}catch(oe){if(Jae(oe)){const ge=oe.message??"";!ge.includes("404")&&ge.includes("File not found")}}}))},300)},[n,b]);y.useEffect(()=>N,[N]);const D=y.useCallback(async P=>{if(!P||P.length===0)return;const ee=Array.from(P),G=wt.getState(),q=e||G.currentConversationId;if(!q){r==null||r("Please select or create a conversation before uploading files.");return}const Ae=G.conversations.find(we=>we.id===q);if(!Ae){r==null||r("Conversation not found. Please try again.");return}if((p.current.get(q)||[]).length+ee.length>a){const we=`Maximum ${a} files allowed per conversation. Please remove some files first.`;r==null||r(we);return}if(lt.maxTotalFiles!==null&&G.conversations.reduce((Ye,be)=>{var De;return Ye+(((De=be.attachedFiles)==null?void 0:De.length)||0)},0)+ee.length>lt.maxTotalFiles){const Ye=`Maximum ${lt.maxTotalFiles} total files allowed across all conversations. Please remove some files from other conversations first.`;r==null||r(Ye);return}const oe=Tr();if(oe){if(!Ae.adapterName){r==null||r("Adapter not configured for this conversation. Please select an adapter first.");return}}else if(!Ae.apiKey||Ae.apiKey===t$e){r==null||r("API key not configured for this conversation. Please configure API settings first.");return}const ge=Ae.apiKey,te=Ae.adapterName,he=Za(Ae.apiUrl);for(let we=0;we<ee.length;we++){const Z=ee[we],Ye=new AbortController;B.current.set(Z.name,Ye);const be=`${q}-${Z.name}-${Date.now()}-${we}`;let De=null;try{const ke=await xB.uploadFile(Z,je=>{if(I(q,_e=>(_e.set(be,je),_e)),je.fileId&&!De){De=je.fileId,d.current.set(je.fileId,q);const _e={file_id:je.fileId,filename:Z.name,mime_type:Z.type||"application/octet-stream",file_size:Z.size,processing_status:je.status==="uploading"?"uploading":je.status==="processing"?"processing":je.status==="completed"?"completed":void 0};fe(`[FileUpload] Adding file ${je.fileId} to conversation ${q} immediately (status: ${_e.processing_status})`),k(q,_e)}},ge,he,oe?te:void 0).catch(je=>{if(je.message&&je.message.includes("was deleted")){De&&d.current.delete(De);const _e=je.message.match(/File\s+([\w-]+)\s+was deleted/);return _e&&_e[1]&&d.current.delete(_e[1]),fe(`File ${Z.name} was deleted during upload`),null}throw je});ke?(d.current.set(ke.file_id,q),fe(`[FileUpload] Updating file ${ke.file_id} in conversation ${q} with final status`),k(q,ke),ke.processing_status==="completed"?I(q,je=>(je.delete(be),je)):I(q,je=>{const _e=je.get(be);return _e&&je.set(be,{..._e,progress:90,status:"processing",fileId:ke.file_id}),je}),M(q,je=>{if(new Set(je.map(Ke=>Ke.file_id)).has(ke.file_id))return je;const Fe=[...je,ke];return fe(`[FileUpload] Updated uploadedFiles for ${q}: ${Fe.length} files`,Fe),Fe})):(xt(`Upload completed for ${Z.name} but uploadedAttachment is null`),I(q,je=>(je.delete(be),je)))}catch(ke){const je=a$e(ke);if(ke instanceof DOMException&&ke.name==="AbortError"||Ye.signal.aborted){fe(`Upload cancelled for ${Z.name}`),De&&d.current.delete(De);continue}if(je.includes("was deleted")){fe(`File ${Z.name} was deleted during upload`),De&&d.current.delete(De);const _e=je.match(/File\s+([\w-]+)\s+was deleted/);_e&&_e[1]&&d.current.delete(_e[1]);continue}h.current?(Su(`Failed to upload file ${Z.name}:`,ke),Su(`File type: ${Z.type}, File name: ${Z.name}`),r==null||r(je||`Failed to upload ${Z.name}`)):xt(`Upload error for ${Z.name} (component unmounted):`,je),De&&d.current.delete(De)}finally{B.current.delete(Z.name)}}},[k,e,a,r,M,I]),z=y.useCallback(P=>{P.preventDefault(),P.stopPropagation(),s||l(!0)},[s]),L=y.useCallback(P=>{P.preventDefault(),P.stopPropagation(),l(!1)},[]),T=y.useCallback(P=>{if(P.preventDefault(),P.stopPropagation(),l(!1),s)return;const ee=P.dataTransfer.files;D(ee)},[s,D]),v=y.useCallback(P=>{const ee=P.target.files;D(ee),g.current&&(g.current.value="")},[D]),H=y.useCallback(()=>{!s&&g.current&&g.current.click()},[s]),J=C.size>0,R=y.useMemo(()=>{const P=new Map;return E.forEach(ee=>{P.set(ee.id,ee.title||"Conversation")}),P},[E]),O=y.useMemo(()=>{const P=[];return f.current.forEach((ee,G)=>{G!==e&&ee.size>0&&P.push({conversationId:G,uploads:Array.from(ee.entries()).map(([q,Ae])=>({key:q,progress:Ae}))})}),P},[e,c]),U=x.jsx("div",{className:"w-full max-w-full overflow-hidden space-y-2",children:Array.from(C.values()).map(P=>x.jsxs("div",{className:"w-full max-w-full flex items-center gap-3 p-3 bg-slate-50 dark:bg-slate-800/50 rounded-lg overflow-hidden",children:[x.jsx(qc,{className:"w-4 h-4 text-emerald-600 dark:text-emerald-400 animate-spin flex-shrink-0"}),x.jsxs("div",{className:"flex-1 min-w-0 overflow-hidden",children:[x.jsx("p",{className:"text-sm font-medium text-slate-700 dark:text-slate-300 truncate",children:P.filename}),x.jsx("div",{className:"mt-1 bg-slate-200 dark:bg-slate-700 rounded-full h-1.5",children:x.jsx("div",{className:"bg-emerald-600 dark:bg-emerald-400 h-1.5 rounded-full transition-all duration-300",style:{width:`${P.progress}%`}})})]}),x.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:P.status==="uploading"?"Uploading...":P.status==="processing"?"Processing...":P.status==="completed"?"Done":"Error"})]},P.filename))});return J?x.jsx("div",{className:"w-full max-w-full overflow-hidden space-y-3",children:U}):x.jsxs("div",{className:"w-full max-w-full overflow-hidden space-y-3",children:[x.jsxs("div",{onClick:H,onDragOver:z,onDragLeave:L,onDrop:T,className:`
976
976
  relative w-full max-w-full border-2 border-dashed rounded-xl p-3 sm:p-4 transition-all cursor-pointer
977
977
  ${o?"border-emerald-500 bg-emerald-50 dark:bg-emerald-900/20 dark:border-emerald-400":s?"border-slate-200 dark:border-slate-700 bg-slate-50 dark:bg-slate-800/50 cursor-not-allowed opacity-50":"border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900/50 hover:border-emerald-400 hover:bg-emerald-50/30 dark:hover:bg-emerald-900/10"}
978
978
  `,children:[x.jsx("input",{ref:g,type:"file",multiple:!0,onChange:v,className:"hidden",disabled:s,accept:".pdf,.doc,.docx,.txt,.md,.csv,.json,.html,.pptx,.xlsx,.py,.java,.sql,.js,.mjs,.ts,.tsx,.cpp,.cxx,.cc,.c,.h,.hpp,.go,.rs,.rb,.php,.sh,.bash,.zsh,.yaml,.yml,.xml,.css,.scss,.sass,.less,.png,.jpg,.jpeg,.tiff,.wav,.mp3,.mp4,.ogg,.flac,.webm,.m4a,.aac,.vtt"}),x.jsxs("div",{className:"flex flex-col items-center justify-center gap-2 text-center",children:[x.jsx(Ple,{className:`w-6 h-6 ${o?"text-emerald-600 dark:text-emerald-400":"text-slate-400 dark:text-slate-500"}`}),x.jsxs("div",{className:"px-2",children:[x.jsx("p",{className:"text-xs sm:text-sm font-medium text-slate-700 dark:text-slate-300",children:s?"File upload disabled":o?"Drop files here":"Click or drag files to upload"}),x.jsxs("p",{className:"text-[10px] sm:text-xs text-slate-500 dark:text-slate-400 mt-0.5 px-1",children:["PDF, DOCX, TXT, CSV, JSON, HTML, code files (.py, .js, .ts, .java, .sql, etc.), images, audio (max ",a," files)"]})]})]})]}),O.length>0&&x.jsxs("div",{className:"w-full max-w-full space-y-3 rounded-lg border border-slate-200 bg-white p-3 dark:border-slate-700 dark:bg-slate-900/40",children:[x.jsx("p",{className:"text-xs font-semibold text-slate-600 dark:text-slate-300",children:"Uploads in other conversations"}),O.map(({conversationId:P,uploads:ee})=>x.jsxs("div",{className:"space-y-2",children:[x.jsx("div",{className:"text-xs font-medium text-slate-500 dark:text-slate-400",children:R.get(P)||"Conversation"}),ee.map(({key:G,progress:q})=>x.jsxs("div",{className:"w-full max-w-full flex items-center gap-3 p-3 bg-slate-50 dark:bg-slate-800/50 rounded-lg overflow-hidden",children:[x.jsx(qc,{className:"w-4 h-4 text-emerald-600 dark:text-emerald-400 animate-spin flex-shrink-0"}),x.jsxs("div",{className:"flex-1 min-w-0 overflow-hidden",children:[x.jsx("p",{className:"text-sm font-medium text-slate-700 dark:text-slate-300 truncate",children:q.filename}),x.jsx("div",{className:"mt-1 bg-slate-200 dark:bg-slate-700 rounded-full h-1.5",children:x.jsx("div",{className:"bg-emerald-600 dark:bg-emerald-400 h-1.5 rounded-full transition-all duration-300",style:{width:`${q.progress}%`}})})]}),x.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:q.status==="uploading"?"Uploading...":q.status==="processing"?"Processing...":q.status==="completed"?"Done":"Error"})]},G))]},P))]})]})}const hV={"image/jpeg":"jpg","image/jpg":"jpg","image/png":"png","image/tiff":"tiff","image/tif":"tif","image/gif":"gif","image/webp":"webp","application/pdf":"pdf","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/msword":"doc","text/plain":"txt","text/markdown":"md","application/json":"json"};function o$e(e){if(!e)return"bin";if(hV[e])return hV[e];const t=e.split("/");return t.length===2&&t[1]?t[1]:"bin"}function l$e(e){return e.replace(/[^a-zA-Z0-9._-]/g,"_").replace(/_+/g,"_")||"pasted-file"}function c$e(e){const t=e.lastIndexOf(".");return t===-1||t===e.length-1?null:e.slice(t+1).toLowerCase()}function u$e(e){const t=e.lastIndexOf(".");return t===-1?e:e.slice(0,t)}function g$e(e,t){const r=Date.now(),n=e.name&&e.name.trim().length>0?e.name.trim():"pasted-file",A=l$e(u$e(n)),a=c$e(n)||o$e(e.type),s=`${A}-${r}-${t}.${a}`;return new File([e],s,{type:e.type||"application/octet-stream"})}function pV({onSend:e,disabled:t=!1,placeholder:r="Ask me anything...",isCentered:n=!1}){var cg;const[A,i]=y.useState(""),[a,s]=y.useState(!1),[o,l]=y.useState(!1),[c,u]=y.useState(!1),[g,d]=y.useState([]),[B,h]=y.useState({}),[f,p]=y.useState(new Map),[w,E]=y.useState(!1),[C,m]=y.useState(!1),[I,M]=y.useState(null),[b,k]=y.useState(null),[N,D]=y.useState(null),z=y.useRef(null),L=y.useRef(new Set),T=y.useRef(""),v=y.useRef(!1),H=y.useRef(0),J=y.useRef(null),{settings:R,updateSettings:O}=Wf(),U=y.useCallback((me,Ze)=>{me&&h(ut=>{if(ut[me]===Ze)return ut;const ht={...ut};return Ze?ht[me]=!0:delete ht[me],ht})},[]),[P,ee]=y.useState(0),{createConversation:G,currentConversationId:q,conversations:Ae,isLoading:ae,syncConversationFiles:oe}=wt(),ge=Ae.find(me=>me.id===q),te=ge?ge.messages.filter(me=>!(me.role==="assistant"&&me.isStreaming)).length:0,he=Ae.reduce((me,Ze)=>me+Ze.messages.filter(ut=>!(ut.role==="assistant"&&ut.isStreaming)).length,0),we=!!ge&&lt.maxMessagesPerConversation!==null&&te>=lt.maxMessagesPerConversation,Z=lt.maxTotalMessages!==null&&he>=lt.maxTotalMessages,Ye=y.useCallback(()=>{ee(me=>me+1)},[]),{isListening:be,isSupported:De,startListening:ke,stopListening:je,error:_e}=z_e(me=>{i(Ze=>{const ut=(Ze+me).slice(0,lt.maxMessageLength);return T.current=ut,ut})},Ye),Fe=F_e(),Ke=Fe&&De,Bt=M_e(),ir=(ge==null?void 0:ge.attachedFiles)||[],en=Ae.reduce((me,Ze)=>{var ut;return me+(((ut=Ze.attachedFiles)==null?void 0:ut.length)||0)},0),Sr=lt.maxFilesPerConversation!==null&&lt.maxFilesPerConversation>0&&ir.length>=lt.maxFilesPerConversation,Kt=lt.maxTotalFiles!==null&&en>=lt.maxTotalFiles,ie=((cg=ge==null?void 0:ge.adapterInfo)==null?void 0:cg.isFileSupported)??!1,le=g.some(me=>me.processing_status?me.processing_status!=="completed"&&me.processing_status!=="error"&&me.processing_status!=="failed":!0)||ir.some(me=>me.processing_status?me.processing_status!=="completed"&&me.processing_status!=="error"&&me.processing_status!=="failed":!0),Qe=q?!!B[q]:!1,At=Object.values(B).some(Boolean),de=t||le||Qe||(we||Z),ze=Bt&&ie,se=Sr||Kt,et=!ze||de||se;y.useEffect(()=>{if(z.current){z.current.style.height="auto";const Ze=z.current.scrollHeight;z.current.style.height=`${Math.min(Ze,120)}px`,z.current.style.overflowY=Ze>120?"auto":"hidden"}},[A]);const ot=()=>{const me=document.activeElement;return me&&me.tagName==="TEXTAREA"};y.useEffect(()=>{!de&&z.current&&!ot()&&z.current.focus()},[de]);const yt=y.useRef(ae);y.useEffect(()=>{yt.current&&!ae&&!de&&z.current&&setTimeout(()=>{z.current&&!ot()&&z.current.focus()},100),yt.current=ae},[ae,de]),y.useEffect(()=>{if(!Ke||(P>H.current&&(v.current=!0,H.current=P),!v.current||P===0))return;const me=setTimeout(()=>{const Ze=T.current.trim(),ut=wt.getState();if(fe("[MessageInput] Auto-send check after voice completion:",{hasMessage:!!Ze,isInputDisabled:de,isComposing:a,isLoading:ut.isLoading}),!Ze){v.current=!1;return}if(!de&&!a&&!ut.isLoading){const ht=ut.conversations.find(ur=>ur.id===ut.currentConversationId),Bn=((ht==null?void 0:ht.attachedFiles)||[]).map(ur=>ur.file_id);e(Ze,Bn.length>0?Bn:void 0),v.current=!1,i(""),T.current="",z.current&&(z.current.style.height="auto",z.current.style.overflowY="hidden")}},400);return()=>clearTimeout(me)},[Ke,P,de,a,e]),y.useEffect(()=>{Qe&&c&&u(!1)},[Qe,c]),y.useEffect(()=>{!Qe&&g.length},[Qe,g.length,c]);const Ut=y.useCallback((me,Ze)=>{setTimeout(()=>{let ut=wt.getState(),ht=Ze||ut.currentConversationId;if(ht||(ht=G(),ut=wt.getState(),ht=ut.currentConversationId||ht),!ht)return;const cr=new Set(me.map(ur=>ur.file_id)),Bn=[];L.current.forEach((ur,Ur)=>{const[,...Jt]=Ur.split("-"),Ga=Jt.join("-");cr.has(Ga)||Bn.push(Ur)}),Bn.forEach(ur=>L.current.delete(ur)),me.forEach(ur=>{const Ur=`${ht}-${ur.file_id}`;L.current.has(Ur)||(L.current.add(Ur),fe(`[MessageInput] Adding file ${ur.file_id} to conversation ${ht}`),ut.addFileToConversation(ht,ur))})},0)},[G]);y.useEffect(()=>{if(q!==J.current)if(J.current=q||null,q&&ge){const me=ge.attachedFiles||[];d(me.map(Ze=>({...Ze})))}else d([])},[q,ge]),y.useEffect(()=>{if(q&&ge){const me=ge.attachedFiles||[];me.length>0?d(Ze=>{const ut=new Set(Ze.map(cr=>cr.file_id)),ht=me.filter(cr=>!ut.has(cr.file_id));return ht.length>0?(fe(`[MessageInput] Syncing ${ht.length} missing files from conversation to UI`),[...Ze,...ht]):Ze}):me.length===0&&g.length>0&&d([])}},[q,ge,Ae,g.length]),y.useEffect(()=>{var Bn;const me=typeof window<"u"&&((Bn=window.ORBIT_CHAT_CONFIG)==null?void 0:Bn.enableApiMiddleware)===!0;if(!q||!ge||(me?!ge.adapterName:!ge.apiKey))return;const Ze=ge.attachedFiles||[],ut=Ze.length>0,ht=Ze.filter(ur=>!ur.processing_status||ur.processing_status==="processing"||ur.processing_status==="uploading");if(ut&&(fe(`[MessageInput] Syncing ${Ze.length} files for conversation ${q}...`),oe(q).catch(ur=>{})),ht.length===0)return;fe(`[MessageInput] Found ${ht.length} files still processing, starting poll...`);const cr=setInterval(async()=>{const Ur=wt.getState().conversations.find(ea=>ea.id===q);if(!Ur){clearInterval(cr);return}if((Ur.attachedFiles||[]).filter(ea=>!ea.processing_status||ea.processing_status==="processing"||ea.processing_status==="uploading").length===0){clearInterval(cr);return}try{await oe(q)}catch{}},3e3);return()=>{clearInterval(cr)}},[q,ge,oe]),y.useEffect(()=>{h(me=>{const Ze=new Set(Ae.map(cr=>cr.id));let ut=!1;const ht={...me};return Object.keys(ht).forEach(cr=>{Ze.has(cr)||(delete ht[cr],ut=!0)}),ut?ht:me})},[Ae]);const vt=me=>{if(me.preventDefault(),(A.trim()||g.length>0)&&!de&&!a){be&&je();const ut=((ge==null?void 0:ge.attachedFiles)||[]).map(ht=>ht.file_id);e(A.trim(),ut.length>0?ut:void 0),ld("messageSent",R.soundEnabled),i(""),T.current="",d([]),u(!1),z.current&&(z.current.style.height="auto",z.current.style.overflowY="hidden")}},fr=y.useCallback(me=>{if(!me||me.length===0)return;const Ze=me.length===1?`File "${me[0].filename}" uploaded successfully`:`${me.length} files uploaded successfully`;ld("success",R.soundEnabled),k(Ze),setTimeout(()=>{k(null)},6e3)},[R.soundEnabled]),bt=y.useCallback((me,Ze)=>{fe(`[MessageInput] handleFilesSelected called with ${Ze.length} files for conversation ${me}:`,Ze),me&&(me===q&&d(Ze),Ut(Ze,me))},[q,Ut]),ei=y.useCallback((me,Ze)=>{me===q&&fr(Ze)},[q,fr]),og=me=>{me.key==="Enter"&&!me.shiftKey&&!a&&(me.preventDefault(),vt(me))},$i=()=>{be?je():ke()},lc=()=>{O({voiceEnabled:!R.voiceEnabled})},cc=y.useCallback(async me=>{if(!Bt||!o||!ie||de)return;const Ze=me.clipboardData;if(!Ze||!Ze.items)return;const ht=Array.from(Ze.items).filter(Ur=>Ur.kind==="file");if(ht.length===0)return;const cr=[];if(ht.forEach((Ur,Jt)=>{const Ga=Ur.getAsFile();Ga&&cr.push(g$e(Ga,Jt))}),cr.length===0)return;me.preventDefault(),M(null),k(null);let Bn=null;const ur=Tr();try{const Ur=wt.getState(),Jt=Ur.conversations.find(Ie=>Ie.id===Ur.currentConversationId);if(((Jt==null?void 0:Jt.attachedFiles)||[]).length+cr.length>lt.maxFilesPerConversation)throw new Error(`Maximum ${lt.maxFilesPerConversation} files allowed per conversation. Please remove some files first.`);if(lt.maxTotalFiles!==null&&Ur.conversations.reduce((pt,$t)=>{var ft;return pt+(((ft=$t.attachedFiles)==null?void 0:ft.length)||0)},0)+cr.length>lt.maxTotalFiles)throw new Error(`Maximum ${lt.maxTotalFiles} total files allowed across all conversations. Please remove some files from other conversations first.`);if(!Jt)throw new Error("Conversation not found. Please select a conversation first.");if(ur){if(!Jt.adapterName)throw new Error("Adapter not configured for this conversation. Please select an adapter first.")}else if(!Jt.apiKey||Jt.apiKey===El())throw new Error("API key not configured for this conversation. Please configure API settings first.");const Yh=Jt.apiKey,Nh=Za(Jt.apiUrl),Um=Jt.adapterName;Bn=Jt.id,U(Bn,!0);const V=[],Se=[];for(let Ie=0;Ie<cr.length;Ie++){const pt=cr[Ie],$t=pt.name||`Clipboard file ${Ie+1}`,ft=`${$t}-${Date.now()}-${Ie}`;p(Xn=>{const ar=new Map(Xn);return ar.set(ft,{filename:$t,progress:0,status:"uploading"}),ar});const Yi=Xn=>{p(ar=>{const Zn=new Map(ar),To=Zn.get(ft);return To&&Zn.set(ft,{...To,filename:$t,progress:Xn.progress,status:Xn.status,fileId:Xn.fileId}),Zn})},UA=()=>new Promise(Xn=>{p(ar=>{const Zn=new Map(ar),To=Zn.get(ft);return To&&Zn.set(ft,{...To,progress:100,status:"completed"}),Zn}),setTimeout(()=>{p(ar=>{const Zn=new Map(ar);return Zn.delete(ft),Zn}),Xn()},2500)});fe(`[MessageInput] Pasting file: ${pt.name}, type: ${pt.type||"unknown"}, size: ${pt.size}`);const vA=await xB.uploadFile(pt,Xn=>{fe(`[MessageInput] Paste upload progress for ${pt.name}: ${Xn.progress}% - ${Xn.status}`),Yi(Xn)},Yh,Nh,ur?Um:void 0);V.push(vA),Se.push(UA())}if(V.length>0){let Ie=V;if(Bn&&Bn===q){const pt=new Set(g.map(ft=>ft.file_id)),$t=V.filter(ft=>!pt.has(ft.file_id));$t.length>0?(d(ft=>[...ft,...$t]),Ie=$t):Ie=[]}Ie.length>0&&Ut(Ie,Bn),await Promise.all(Se),fr(V)}}catch(Ur){const Jt=Ur instanceof Error?Ur.message:"Failed to paste file";ld("error",R.soundEnabled),M(Jt),Jt.toLowerCase().includes("maximum")&&D(Jt),setTimeout(()=>{M(null)},5e3),p(new Map)}finally{U(Bn,!1)}},[g,q,o,ie,de,U,R.soundEnabled,fr,Ut,Bt]),Rs=Z?`Workspace limit of ${lt.maxTotalMessages} messages reached. Delete or archive old conversations to continue.`:we?`This chat hit the ${lt.maxMessagesPerConversation} message limit. Start a new conversation to continue.`:le||Qe?"Files are uploading/processing, please wait...":ze?"Message ORBIT or drop files here":r,zo=[];Z&&lt.maxTotalMessages!==null&&zo.push(`Workspace limit of ${lt.maxTotalMessages} total messages reached. Delete or export older conversations to continue.`),we&&lt.maxMessagesPerConversation!==null&&zo.push(`This conversation reached the ${lt.maxMessagesPerConversation} message limit. Start a new conversation to keep chatting.`),N&&zo.push(N),y.useEffect(()=>{!Fe||!_e||ld("error",R.soundEnabled)},[Fe,R.soundEnabled,_e]),y.useEffect(()=>{if(!N)return;const me=setTimeout(()=>D(null),5e3);return()=>clearTimeout(me)},[N]);const Fh=n?"max-w-3xl":"max-w-5xl",lg=n?"flex justify-center":"";return x.jsx("div",{className:`bg-white px-3 py-3 md:px-0 md:py-4 dark:bg-[#212121] sm:px-4 ${lg}`,children:x.jsxs("div",{className:`mx-auto w-full ${Fh}`,children:[_e&&Fe&&x.jsx("div",{className:"mb-3 w-full rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-600/40 dark:bg-red-900/30 dark:text-red-200",children:_e}),I&&x.jsx("div",{className:"mb-3 w-full rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-600/40 dark:bg-red-900/30 dark:text-red-200",children:I}),b&&x.jsxs("div",{className:"mb-3 w-full flex items-center gap-2 rounded-md border border-green-200 bg-green-50 px-3 py-2 text-sm text-green-700 dark:border-green-600/40 dark:bg-green-900/30 dark:text-green-200",children:[x.jsx(Ile,{className:"h-4 w-4 flex-shrink-0"}),x.jsx("span",{children:b})]}),zo.length>0&&x.jsx("div",{className:"mb-3 w-full rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:border-amber-500/40 dark:bg-[#2f2410] dark:text-amber-100",children:x.jsx("ul",{className:"list-disc space-y-1 pl-4",children:zo.map((me,Ze)=>x.jsx("li",{children:me},`${me}-${Ze}`))})}),x.jsxs("form",{onSubmit:vt,className:"flex w-full flex-col gap-2 md:gap-3",children:[x.jsxs("div",{className:`flex flex-col md:flex-row md:items-center gap-3 md:gap-2 rounded-2xl md:rounded-lg border px-4 py-3 md:px-4 md:py-3 shadow-sm transition-all ${o?"border-gray-400 shadow-md dark:border-[#565869] dark:shadow-lg":"border-gray-300 dark:border-[#40414f]"} bg-gray-50 dark:bg-[#2d2f39]`,children:[x.jsx("textarea",{ref:z,value:A,onChange:me=>i(me.target.value),onKeyDown:og,onPaste:cc,onCompositionStart:()=>s(!0),onCompositionEnd:()=>s(!1),onFocus:()=>l(!0),onBlur:()=>l(!1),placeholder:Rs,disabled:de,rows:1,maxLength:lt.maxMessageLength,className:"flex-1 w-full md:w-auto min-w-0 resize-none bg-transparent py-1 text-base md:text-sm text-[#353740] placeholder-gray-500 focus:outline-none dark:text-[#ececf1] dark:placeholder-[#8e8ea0]",style:{minHeight:"24px",maxHeight:"120px",border:"none",outline:"none",boxShadow:"none",WebkitAppearance:"none",MozAppearance:"none",appearance:"none",caretColor:A.trim()||o?"inherit":"transparent"}}),x.jsxs("div",{className:"flex items-center justify-between md:justify-end gap-1 md:gap-2 md:flex-shrink-0",children:[x.jsxs("div",{className:"flex items-center gap-1 md:gap-2",children:[Bt&&x.jsx("button",{type:"button",onClick:me=>{me.preventDefault(),et||u(!c)},disabled:et,onMouseEnter:()=>E(!0),onMouseLeave:()=>E(!1),className:`flex h-10 w-10 md:h-8 md:w-8 shrink-0 items-center justify-center rounded-full transition-all active:scale-95 ${c||g.length>0?"bg-gray-200 text-[#353740] dark:bg-[#565869] dark:text-[#ececf1]":et?"cursor-not-allowed text-gray-300 dark:text-[#6b6f7a]":"text-gray-500 hover:bg-gray-200 hover:text-[#353740] dark:text-[#bfc2cd] dark:hover:bg-[#565869]"}`,title:ie?se&&Sr&&lt.maxFilesPerConversation!==null?`Maximum of ${lt.maxFilesPerConversation} files reached in this conversation. Start a new chat to upload more.`:se&&Kt&&lt.maxTotalFiles!==null?`Workspace limit of ${lt.maxTotalFiles} total files reached. Remove files from other conversations first.`:de?"Files are uploading/processing. Please wait...":g.length>0?`${g.length} file(s) attached`:"Attach files":"File upload not supported by this adapter",children:et&&w?x.jsx(_c,{className:"h-5 w-5 md:h-4 md:w-4"}):x.jsx(j6,{className:"h-5 w-5 md:h-4 md:w-4"})}),A.length>0&&x.jsx("div",{className:"px-2 text-xs text-gray-500 dark:text-[#bfc2cd] md:min-w-[72px] md:text-right",children:x.jsxs("span",{className:A.length>=lt.maxMessageLength?"text-red-600 font-semibold":"",children:[A.length,"/",lt.maxMessageLength]})})]}),x.jsxs("div",{className:"flex items-center gap-1 md:gap-2",children:[Fe&&x.jsxs(x.Fragment,{children:[x.jsx("button",{type:"button",onClick:lc,className:`flex h-10 w-10 md:h-8 md:w-8 shrink-0 items-center justify-center rounded-full transition-all active:scale-95 ${R.voiceEnabled?"bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300":"text-gray-500 hover:bg-gray-200 hover:text-[#353740] dark:text-[#bfc2cd] dark:hover:bg-[#565869]"}`,title:R.voiceEnabled?"Voice responses enabled - Click to disable":"Enable voice responses (text-to-speech)",children:R.voiceEnabled?x.jsx(W0,{className:"h-5 w-5"}):x.jsx(Kle,{className:"h-5 w-5"})}),Ke&&x.jsx("button",{type:"button",onClick:$i,disabled:de,onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),className:`flex h-10 w-10 md:h-8 md:w-8 shrink-0 items-center justify-center rounded-full transition-all active:scale-95 ${be?"bg-red-100 text-red-600 dark:bg-red-900/40 dark:text-red-300":de?"cursor-not-allowed text-gray-300 dark:text-[#6b6f7a]":"text-gray-500 hover:bg-gray-200 hover:text-[#353740] dark:text-[#bfc2cd] dark:hover:bg-[#565869]"}`,title:de?"Files are uploading/processing. Please wait...":be?"Stop recording":"Start voice input",children:be||de&&C?x.jsx(Nle,{className:"h-5 w-5"}):x.jsx(ble,{className:"h-5 w-5"})})]}),(le||Qe)&&x.jsx("div",{className:"flex h-10 w-10 md:h-8 md:w-8 shrink-0 items-center justify-center",children:x.jsx(qc,{className:"h-5 w-5 md:h-4 md:w-4 animate-spin text-gray-500 dark:text-[#bfc2cd]"})}),x.jsx("button",{type:"submit",disabled:!A.trim()&&g.length===0||de||a,className:`flex h-11 w-11 md:h-8 md:w-8 shrink-0 items-center justify-center rounded-full transition-all active:scale-95 ${(A.trim()||g.length>0)&&!de&&!a?"bg-black text-white hover:bg-gray-800 dark:bg-white dark:text-black dark:hover:bg-gray-200":"bg-gray-300 text-gray-500 dark:bg-[#565869] dark:text-[#6b6f7a]"}`,title:"Send message",children:x.jsx(G6,{className:"h-5 w-5 md:h-4 md:w-4"})})]})]})]}),g.length>0&&x.jsx("div",{className:"flex flex-wrap gap-2",children:g.map(me=>{const Ze=!me.processing_status||me.processing_status==="processing"||me.processing_status==="uploading";return x.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-gray-200 bg-white px-2 py-1 text-xs dark:border-[#4a4b54] dark:bg-[#2d2f39]",children:[Ze&&x.jsx(qc,{className:"h-3 w-3 animate-spin text-emerald-600 dark:text-emerald-400 flex-shrink-0"}),x.jsx("span",{className:"truncate max-w-[150px] text-[#353740] dark:text-[#ececf1]",children:me.filename}),Ze&&x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:me.processing_status==="uploading"?"Uploading...":"Processing..."}),x.jsx("button",{disabled:!0,className:"text-gray-300 dark:text-[#4a4b54] cursor-not-allowed",title:"File removal disabled; use Clear All in sidebar",children:x.jsx(_c,{className:"h-3 w-3"})})]},me.file_id)})}),Bt&&(ie||At)&&x.jsxs("div",{className:`rounded-md border border-gray-200 bg-white p-3 dark:border-[#4a4b54] dark:bg-[#2d2f39] ${!c&&!Qe&&f.size===0&&!At?"hidden":""}`,children:[c&&x.jsxs("div",{className:"mb-2 flex items-center justify-between text-sm text-[#353740] dark:text-[#ececf1]",children:[x.jsx("span",{children:"Upload files"}),x.jsx("button",{onClick:()=>u(!1),className:"rounded p-1 text-gray-500 hover:bg-gray-100 hover:text-[#353740] dark:text-[#bfc2cd] dark:hover:bg-[#3c3f4a]",title:"Close",children:x.jsx(_c,{className:"h-4 w-4"})})]}),(Qe||f.size>0)&&!c&&f.size===0&&x.jsx("div",{className:"mb-2 text-sm text-[#353740] dark:text-[#ececf1]",children:"Uploading files…"}),f.size>0&&x.jsx("div",{className:"mb-2 space-y-2",children:Array.from(f.entries()).map(([me,Ze])=>x.jsxs("div",{className:"w-full max-w-full flex items-center gap-3 p-3 bg-gray-50 dark:bg-[#1f1f24] rounded-lg overflow-hidden",children:[x.jsx(qc,{className:"w-4 h-4 text-emerald-600 dark:text-emerald-400 animate-spin flex-shrink-0"}),x.jsxs("div",{className:"flex-1 min-w-0 overflow-hidden",children:[x.jsx("p",{className:"text-sm font-medium text-[#353740] dark:text-[#ececf1] truncate",children:Ze.filename}),x.jsx("div",{className:"mt-1 bg-gray-200 dark:bg-[#3c3f4a] rounded-full h-1.5",children:x.jsx("div",{className:"bg-emerald-600 dark:bg-emerald-400 h-1.5 rounded-full transition-all duration-300",style:{width:`${Ze.progress??0}%`}})})]}),x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:Ze.status==="uploading"?"Uploading...":Ze.status==="processing"?"Processing...":Ze.status==="completed"?"Done":"Pending"})]},me))}),x.jsx(s$e,{conversationId:q,onFilesSelected:bt,onUploadError:me=>{D(me)},onUploadingChange:U,onUploadSuccess:ei,maxFiles:lt.maxFilesPerConversation,disabled:et})]}),x.jsx("div",{className:"h-5 md:h-4",children:Ke&&be&&x.jsxs("span",{className:"flex items-center gap-2 text-sm md:text-xs text-gray-500 dark:text-[#bfc2cd]",children:[x.jsx("span",{className:"h-2.5 w-2.5 md:h-2 md:w-2 animate-pulse rounded-full bg-red-500"}),"Listening..."]})})]})]})})}const d$e="rounded-t-[32px] border border-white/40 bg-white/95 px-4 pb-4 pt-[max(env(safe-area-inset-top),1rem)] shadow-[0_25px_60px_rgba(15,23,42,0.15)] backdrop-blur-xl dark:border-[#2f303d] dark:bg-[#1c1d23]/95 md:rounded-none md:border-0 md:bg-transparent md:px-0 md:pb-0 md:pt-0 md:shadow-none md:backdrop-blur-0 md:dark:bg-transparent md:dark:border-0",wV="-mx-4 mt-auto overflow-hidden rounded-t-[28px] border-t border-x border-white/40 bg-white/98 pb-[max(env(safe-area-inset-bottom),0.75rem)] shadow-[0_-12px_45px_rgba(15,23,42,0.2)] backdrop-blur-xl transition-all duration-200 dark:border-[#2f303d] dark:bg-[#1c1d23]/98 md:mx-0 md:mt-0 md:overflow-visible md:rounded-none md:border-0 md:bg-transparent md:pb-0 md:shadow-none md:backdrop-blur-0 md:dark:bg-transparent md:dark:border-0 [&>div]:rounded-t-[28px] md:[&>div]:rounded-none [&>div]:bg-transparent md:[&>div]:px-0",B$e="sticky top-0 z-10 -mx-4 px-4 pt-2 pb-4 bg-white/95 backdrop-blur-xl dark:bg-[#1c1d23]/95 border-b border-white/50 dark:border-white/10 md:static md:mx-0 md:px-0 md:pt-6 md:pb-6 md:bg-transparent md:backdrop-blur-0 md:border-gray-200 md:dark:border-[#4a4b54] md:dark:bg-transparent";function h$e({onOpenSettings:e,onOpenSidebar:t}){var k;const{conversations:r,currentConversationId:n,sendMessage:A,regenerateResponse:i,isLoading:a,configureApiSettings:s,error:o,clearError:l,createThread:c}=wt(),{settings:u}=Wf(),{theme:g,isDark:d}=Of(),B=g.mode==="dark"?"dark":g.mode==="light"?"light":"",h=d?"dark":"light",f=["message-markdown w-full min-w-0","prose prose-slate dark:prose-invert max-w-none",B].filter(Boolean).join(" "),[p,w]=y.useState(!1),E=r.find(N=>N.id===n),C=Tr();y.useEffect(()=>{var N,D,z;C&&fe("[ChatInterface] Middleware mode state:",{hasConversation:!!E,adapterName:E==null?void 0:E.adapterName,hasAdapterInfo:!!(E!=null&&E.adapterInfo),hasNotes:!!((N=E==null?void 0:E.adapterInfo)!=null&&N.notes),notes:((z=(D=E==null?void 0:E.adapterInfo)==null?void 0:D.notes)==null?void 0:z.substring(0,50))+"..."})},[C,E==null?void 0:E.adapterName,E==null?void 0:E.adapterInfo]);const m=y.useRef(null);y.useEffect(()=>{(async()=>{var L;const D=E==null?void 0:E.adapterName;if(m.current===D)return;const z=!(E!=null&&E.adapterInfo)||(E==null?void 0:E.adapterInfo)&&E.adapterInfo.notes===void 0;if(C&&D&&z){m.current=D,fe("[ChatInterface] Loading adapter info - adapterName:",D,"reason:",E!=null&&E.adapterInfo?"notes undefined":"missing");try{const T=(E==null?void 0:E.apiUrl)||Vr();fe("[ChatInterface] Calling configureApiSettings for:",D),await s(T,void 0,void 0,D),fe("[ChatInterface] Adapter info loaded successfully")}catch{m.current=null}}else fe("[ChatInterface] Skipping adapter info load:",{isMiddlewareEnabled:C,adapterName:D,hasAdapterInfo:!!(E!=null&&E.adapterInfo),hasNotes:((L=E==null?void 0:E.adapterInfo)==null?void 0:L.notes)!==void 0,refValue:m.current})})()},[C,E==null?void 0:E.adapterName,E==null?void 0:E.adapterInfo,E==null?void 0:E.apiUrl,s]),y.useEffect(()=>{let N=null;const D=()=>{N&&(N(),N=null)};if(u.voiceEnabled){if(ul.isAudioEnabled())return D;const z=()=>{D();const L=async()=>{D(),await ul.enableAudio()||z()};document.addEventListener("pointerdown",L,{once:!0}),document.addEventListener("keydown",L,{once:!0}),N=()=>{document.removeEventListener("pointerdown",L),document.removeEventListener("keydown",L)}};return z(),D}return D(),ul.disableAudio(),D},[u.voiceEnabled]);const I=(N,D,z)=>{A(N,D,z)},M=async(N,D,z)=>{await A(z,void 0,N)},b=async()=>{if(!(!E||!E.apiKey&&!E.adapterName)){w(!0);try{const N=await En(),D=E.apiUrl||Vr(),z=E.apiKey,L=E.adapterName,T=new N.ApiClient({apiUrl:D,apiKey:z||null,sessionId:null,adapterName:L||null});if(typeof T.getAdapterInfo=="function"){const v=await T.getAdapterInfo();fe("Adapter info refreshed:",v),wt.setState(H=>({conversations:H.conversations.map(J=>J.id===n?{...J,adapterInfo:v,updatedAt:new Date}:J)})),setTimeout(()=>{const H=wt.getState();localStorage.setItem("chat-state",JSON.stringify({conversations:H.conversations,currentConversationId:H.currentConversationId}))},0)}}catch{}finally{w(!1)}}};return x.jsx("div",{className:"flex-1 flex flex-col bg-gray-50 dark:bg-[#202123] overflow-hidden",children:x.jsx("div",{className:"flex h-full w-full flex-col px-3 sm:px-6 overflow-hidden",children:x.jsxs("div",{className:`mx-auto flex h-full w-full max-w-5xl flex-col overflow-hidden ${d$e}`,children:[o&&x.jsx("div",{className:"mt-6 rounded-md border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-600/40 dark:bg-red-900/30 dark:text-red-200",children:x.jsxs("div",{className:"flex items-start justify-between",children:[x.jsx("p",{children:o}),x.jsx("button",{onClick:l,className:"ml-4 rounded p-1 text-red-500 hover:bg-red-100 hover:text-red-700 dark:text-red-200 dark:hover:bg-red-800/40","aria-label":"Dismiss error",children:"×"})]})}),x.jsxs("div",{className:B$e,children:[t&&x.jsxs("div",{className:"mb-4 grid grid-cols-2 gap-3 md:hidden",children:[x.jsxs("button",{onClick:t,className:"inline-flex items-center justify-center gap-2 rounded-2xl border border-white/50 bg-white/80 px-4 py-3.5 text-sm font-semibold text-gray-800 shadow-sm active:scale-[0.97] transition-all duration-150 hover:bg-white dark:border-[#2f303d] dark:bg-[#232430] dark:text-[#ececf1]","aria-label":"Open conversations menu",children:[x.jsx(Yle,{className:"h-5 w-5"}),"Chats"]}),x.jsxs("button",{onClick:e,className:"inline-flex items-center justify-center gap-2 rounded-2xl border border-white/50 bg-[#11121a]/90 px-4 py-3.5 text-sm font-semibold text-white shadow-sm active:scale-[0.97] transition-all duration-150 hover:bg-[#0c0d14] dark:border-[#3b3c49] dark:bg-[#565869] dark:hover:bg-[#6b6f7a]","aria-label":"Open settings",children:[x.jsx(z6,{className:"h-5 w-5"}),"Settings"]})]}),x.jsx("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:x.jsx("div",{className:"min-w-0 flex-1",children:(E==null?void 0:E.adapterInfo)&&x.jsxs("div",{className:"mb-4",children:[x.jsxs("div",{className:"flex flex-wrap items-center gap-2 mb-3",children:[E.adapterInfo.model&&x.jsxs("div",{className:"inline-flex items-center gap-2 rounded-full border border-gray-200 bg-gray-100 px-2.5 py-1 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:border-[#4a4b54] dark:bg-[#343541] dark:text-[#bfc2cd]",children:[x.jsx("span",{children:"Model"}),x.jsx("span",{className:"text-gray-800 normal-case dark:text-[#ececf1]",children:E.adapterInfo.model})]}),x.jsxs("div",{className:"inline-flex items-center gap-2 rounded-md border border-gray-200 bg-gray-100 px-2.5 py-1 text-xs font-semibold uppercase tracking-wider text-gray-600 dark:border-[#4a4b54] dark:bg-[#343541] dark:text-[#bfc2cd]",children:[x.jsx("span",{children:"Agent"}),x.jsx("span",{className:"text-gray-800 normal-case dark:text-[#ececf1]",children:E.adapterName||E.adapterInfo.adapter_name||"Configured Agent"})]}),x.jsxs("button",{onClick:b,disabled:p||!(E!=null&&E.apiKey)&&!(E!=null&&E.adapterName),className:"inline-flex items-center gap-1 rounded-full border border-gray-200 px-2.5 py-1 text-xs font-semibold text-gray-600 transition-colors hover:bg-gray-200 hover:text-gray-900 dark:border-[#4a4b54] dark:text-[#bfc2cd] dark:hover:bg-[#4a4b54] dark:hover:text-white disabled:opacity-50 disabled:cursor-not-allowed",title:"Refresh adapter info",children:[x.jsx(jle,{className:`h-4 w-4 ${p?"animate-spin":""}`}),x.jsx("span",{className:"hidden sm:inline",children:"Refresh"})]})]}),x.jsx("h1",{className:"text-2xl font-semibold text-[#353740] dark:text-[#ececf1] mb-2",children:(E==null?void 0:E.title)||"New Chat"}),E&&x.jsxs("div",{className:"flex items-center gap-2 text-sm text-gray-500 dark:text-[#bfc2cd]",children:[x.jsx("span",{className:"font-medium",children:E.messages.length}),x.jsxs("span",{children:["Updated ",E.updatedAt.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})]})]})]})})})]}),!E||E.messages.length===0?x.jsx("div",{className:"flex flex-1 flex-col min-h-0 pt-4 md:pt-6",children:x.jsx("div",{className:"flex-1 flex flex-col justify-between md:justify-start md:flex-none",children:x.jsxs("div",{className:"w-full space-y-3",children:[x.jsx("div",{className:"mb-2",children:(k=E==null?void 0:E.adapterInfo)!=null&&k.notes?x.jsx("div",{className:"text-base text-gray-600 dark:text-[#bfc2cd] leading-relaxed",children:x.jsx(JD,{content:E.adapterInfo.notes,className:f,syntaxTheme:h})}):x.jsx("h2",{className:"text-xl md:text-2xl font-medium text-[#353740] dark:text-[#ececf1]",children:"How can I assist you today?"})}),x.jsx("div",{className:wV,children:x.jsx(pV,{onSend:I,disabled:a||!E||(C?!E.adapterName:!E.apiKey),placeholder:"Message ORBIT..."})})]})})}):x.jsxs("div",{className:"flex flex-1 flex-col",children:[x.jsx(R_e,{messages:E.messages,onRegenerate:i,onStartThread:async(N,D)=>{try{await c(N,D)}catch{}},onSendThreadMessage:M,sessionId:E.sessionId,isLoading:a}),x.jsx("div",{className:wV,children:x.jsx(pV,{onSend:I,disabled:a||!E||(C?!E.adapterName:!E.apiKey),placeholder:"Message ORBIT..."})})]})]})})})}function fV({isOpen:e,onClose:t,onConfirm:r,title:n,message:A,confirmText:i="Confirm",cancelText:a="Cancel",type:s="danger",isLoading:o=!1}){if(!e)return null;const l=()=>{o||r()},u=(()=>{switch(s){case"danger":return{icon:"text-red-500",iconBg:"bg-red-100 dark:bg-red-900/20",confirmButton:"bg-red-600 hover:bg-red-700 focus:ring-red-500",border:"border-red-200 dark:border-red-800"};case"warning":return{icon:"text-amber-500",iconBg:"bg-amber-100 dark:bg-amber-900/20",confirmButton:"bg-amber-600 hover:bg-amber-700 focus:ring-amber-500",border:"border-amber-200 dark:border-amber-800"};default:return{icon:"text-blue-500",iconBg:"bg-blue-100 dark:bg-blue-900/20",confirmButton:"bg-blue-600 hover:bg-blue-700 focus:ring-blue-500",border:"border-blue-200 dark:border-blue-800"}}})();return x.jsx("div",{className:"fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 z-50 animate-fadeIn",children:x.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl w-full max-w-md transform animate-fadeIn",children:[x.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-700",children:[x.jsxs("div",{className:"flex items-center gap-3",children:[x.jsx("div",{className:`w-10 h-10 rounded-full ${u.iconBg} flex items-center justify-center`,children:x.jsx(Tk,{className:`w-5 h-5 ${u.icon}`})}),x.jsx("h2",{className:"text-lg font-semibold text-gray-900 dark:text-gray-100",children:n})]}),x.jsx("button",{onClick:t,className:"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",children:x.jsx(_c,{className:"w-5 h-5 text-gray-500 dark:text-gray-400"})})]}),x.jsx("div",{className:"p-6",children:x.jsx("p",{className:"text-gray-600 dark:text-gray-300 leading-relaxed",children:A})}),x.jsxs("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 rounded-b-2xl",children:[x.jsx("button",{onClick:t,disabled:o,className:"px-4 py-2.5 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg transition-colors font-medium disabled:opacity-50 disabled:cursor-not-allowed",children:a}),x.jsx("button",{onClick:l,disabled:o,className:`px-4 py-2.5 text-white rounded-lg transition-all font-medium shadow-sm hover:shadow-md transform hover:scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-800 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none ${u.confirmButton}`,children:o?x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx("div",{className:"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"}),"Clearing..."]}):i})]})]})})}const p$e=(e,t)=>{const[r,n]=y.useState({stars:0,forks:0,license:"Apache-2.0",description:"An adaptable, open-source context-aware inference engine designed for privacy, control, and independence from proprietary models.",isLoading:!0,error:null});return y.useEffect(()=>{(async()=>{var i;try{const a=await fetch(`https://api.github.com/repos/${e}/${t}`);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);const s=await a.json();n({stars:s.stargazers_count||0,forks:s.forks_count||0,license:((i=s.license)==null?void 0:i.name)||"Apache-2.0",description:s.description||"An adaptable, open-source context-aware inference engine designed for privacy, control, and independence from proprietary models.",isLoading:!1,error:null})}catch(a){console.warn("Failed to fetch GitHub stats:",a),n({stars:104,forks:19,license:"Apache-2.0",description:"An adaptable, open-source context-aware inference engine designed for privacy, control, and independence from proprietary models.",isLoading:!1,error:a instanceof Error?a.message:"Failed to fetch stats"})}})()},[e,t]),r};function EV({selectedAdapter:e,onAdapterChange:t,disabled:r}){const[n,A]=y.useState([]),[i,a]=y.useState(!0),[s,o]=y.useState(null),[l,c]=y.useState(!1);y.useEffect(()=>{let B=!0;async function h(){try{a(!0),o(null);const f=await Lae();B&&A(f)}catch{B&&o("Failed to load adapters. Please check your connection.")}finally{B&&a(!1)}}return h(),()=>{B=!1}},[]);const u=y.useRef(!1),g=y.useRef(t);y.useEffect(()=>{g.current=t},[t]),y.useEffect(()=>{if(e){u.current=!0;return}!u.current&&n.length>0&&(u.current=!0)},[n,e]);const d=n.find(B=>B.name===e);return x.jsxs("div",{className:"relative w-full",children:[x.jsx("label",{className:"sr-only",children:"Adapter"}),x.jsxs("div",{className:"relative",children:[x.jsx("button",{type:"button",onClick:()=>!r&&c(!l),disabled:r||i||n.length===0,className:"w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-left text-sm text-[#353740] focus:border-gray-400 focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed dark:border-[#4a4b54] dark:bg-[#343541] dark:text-[#ececf1] dark:focus:border-[#6b6f7a]",children:x.jsxs("div",{className:"flex items-center justify-between gap-2",children:[x.jsx("span",{className:`truncate ${d?"":"text-gray-500 dark:text-gray-400"}`,children:i?"Loading adapters…":s?"Error loading adapters":d?d.name:n.length===0?"No adapters available":"Select agent"}),x.jsx(R6,{className:`h-4 w-4 flex-shrink-0 transition-transform ${l?"rotate-180":""}`})]})}),l&&!r&&n.length>0&&x.jsxs(x.Fragment,{children:[x.jsx("div",{className:"fixed inset-0 z-10",onClick:()=>c(!1)}),x.jsx("div",{className:"absolute z-20 mt-1 w-full rounded-md border border-gray-200 bg-white shadow-lg ring-1 ring-black/5 dark:border-[#4a4b54] dark:bg-[#1f2027]",children:x.jsx("div",{className:"max-h-60 overflow-auto py-1",children:n.map(B=>{const h=B.name===e;return x.jsx("button",{type:"button",onClick:()=>{h||t(B.name),c(!1)},className:`w-full px-3 py-2 text-left text-sm transition-colors ${h?"bg-blue-50 text-blue-700 dark:bg-blue-900/30 dark:text-blue-200":"text-[#353740] hover:bg-gray-50 dark:text-[#ececf1] dark:hover:bg-[#2a2d35]"}`,children:x.jsx("span",{className:"font-medium truncate",children:B.name})},B.name)})})})]})]}),s&&x.jsx("p",{className:"mt-1 text-xs text-red-600 dark:text-red-400",children:s})]})}const zp=100,w$e={small:{cardText:"text-xs",cardPadding:"px-2.5 py-2",cardGap:"gap-0",titleText:"text-sm",metaText:"text-[10px]",metaGap:"gap-1",badgePadding:"px-1.5 py-0.5",badgeText:"text-[10px]",badgeIcon:"h-3 w-3",actionButton:"p-1.5",actionIcon:"h-3.5 w-3.5"},medium:{cardText:"text-sm",cardPadding:"px-3 py-3",cardGap:"gap-0",titleText:"text-sm",metaText:"text-[11px]",metaGap:"gap-1.5",badgePadding:"px-2 py-0.5",badgeText:"text-[11px]",badgeIcon:"h-3.5 w-3.5",actionButton:"p-2",actionIcon:"h-4 w-4"},large:{cardText:"text-base",cardPadding:"px-4 py-4",cardGap:"gap-0",titleText:"text-base",metaText:"text-sm",metaGap:"gap-2",badgePadding:"px-2.5 py-1",badgeText:"text-sm",badgeIcon:"h-4 w-4",actionButton:"p-2",actionIcon:"h-4 w-4"}};function mV({onRequestClose:e,onOpenSettings:t}){const{conversations:r,currentConversationId:n,createConversation:A,selectConversation:i,deleteConversation:a,deleteAllConversations:s,updateConversationTitle:o,canCreateNewConversation:l,getConversationCount:c,configureApiSettings:u,clearError:g}=wt(),d=r.find(de=>de.id===n),[B,h]=y.useState(""),[f,p]=y.useState(null),[w,E]=y.useState(""),[C,m]=y.useState({isOpen:!1,conversationId:"",conversationTitle:"",isDeleting:!1}),[I,M]=y.useState({isOpen:!1,isDeleting:!1}),[b,k]=y.useState(!1),[N,D]=y.useState(()=>Vr()),[z,L]=y.useState(()=>El()),[T,v]=y.useState(null),[H,J]=y.useState(!1),[R,O]=y.useState(!1),[U,P]=y.useState(null),ee=Tr(),G=!d||d.messages.length===0,{theme:q}=Of(),Ae=w$e[q.fontSize??"medium"];y.useEffect(()=>{if(!ee){v(null);return}d!=null&&d.adapterName?v(d.adapterName):v(null)},[ee,d==null?void 0:d.adapterName]),y.useEffect(()=>{P(null)},[n]);const ae=r.filter(de=>de.title.toLowerCase().includes(B.toLowerCase())||de.messages.some(ze=>ze.content.toLowerCase().includes(B.toLowerCase()))),oe=l(),ge=c(),te=lt.maxConversations,he=te!==null&&ge>=te,we=d?d.messages.length===0:!1,Z=te!==null?`${ge}/${te} conversations`:`${ge} conversation${ge===1?"":"s"}`,Ye=oe?"Start a new conversation":he?`Maximum ${te} conversations reached. Delete a conversation to create a new one.`:we?"Current conversation is empty. Send a message first to create a new conversation.":"Finish your current conversation before starting a new one.",be=b_e(),De=p$e(sV(),oV()),ke=()=>{const de=Vr(),ze=d==null?void 0:d.apiUrl,se=ze&&ze!==de?ze:de,et=(d==null?void 0:d.apiKey)||El();D(se),L(et),P(null),J(!1),k(!0)},je=async de=>{if(de&&de.preventDefault(),ee){if(N&&T){O(!0),P(null);try{await u(N,void 0,void 0,T),g(),k(!1)}catch(ze){const se=ze instanceof Error?ze.message:"Failed to configure adapter";P(se)}finally{O(!1)}}}else if(N&&z){O(!0),P(null);try{await u(N,z),g(),P(null),J(!1),k(!1)}catch(ze){const se=ze instanceof Error?ze.message:"Failed to configure API settings";P(se)}finally{O(!1)}}},_e=async de=>{if(G){v(de),P(null),O(!0);try{const ze=(d==null?void 0:d.apiUrl)||Vr();await u(ze,void 0,void 0,de),g()}catch(ze){const se=ze instanceof Error?ze.message:"Failed to configure adapter";P(se)}finally{O(!1)}}},Fe=()=>{try{A(),e==null||e()}catch(de){xt("Cannot create new conversation:",de instanceof Error?de.message:"Unknown error")}},Ke=async de=>{try{await i(de),e==null||e()}catch{}},Bt=(de,ze)=>{de.stopPropagation(),m({isOpen:!0,conversationId:ze.id,conversationTitle:ze.title,isDeleting:!1})},ir=async()=>{m(de=>({...de,isDeleting:!0}));try{await a(C.conversationId),m({isOpen:!1,conversationId:"",conversationTitle:"",isDeleting:!1})}catch{m({isOpen:!1,conversationId:"",conversationTitle:"",isDeleting:!1})}},en=()=>{m({isOpen:!1,conversationId:"",conversationTitle:"",isDeleting:!1})},Sr=(de,ze)=>{de.stopPropagation(),p(ze.id),E(ze.title.slice(0,zp))},Kt=de=>{const ze=w.slice(0,zp).trim();ze&&o(de,ze),p(null),E("")},ie=()=>{p(null),E("")},le=()=>{M({isOpen:!0,isDeleting:!1})},Qe=async()=>{M(de=>({...de,isDeleting:!0}));try{await s(),M({isOpen:!1,isDeleting:!1})}catch{M({isOpen:!1,isDeleting:!1})}},At=()=>{M({isOpen:!1,isDeleting:!1})},ct=de=>{const ze=de.toLocaleDateString([],{year:"numeric",month:"short",day:"numeric"}),se=de.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return`${ze} · ${se}`};return x.jsxs(x.Fragment,{children:[b&&x.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 px-4",children:x.jsxs("form",{onSubmit:je,className:"w-full max-w-md rounded-lg border border-gray-200 bg-white p-6 shadow-lg dark:border-[#444654] dark:bg-[#202123]",children:[x.jsx("h2",{className:"mb-4 text-lg font-medium text-[#353740] dark:text-[#ececf1]",children:ee?"Select Adapter":"Configure API Settings"}),x.jsxs("div",{className:"space-y-5",children:[!ee&&x.jsxs("div",{children:[x.jsx("label",{className:"mb-2 block text-sm font-medium text-[#353740] dark:text-[#d1d5db]",children:"API URL"}),x.jsx("input",{type:"text",value:N,onChange:de=>D(de.target.value),className:"w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-[#353740] focus:border-gray-400 focus:outline-none dark:border-[#4a4b54] dark:bg-[#343541] dark:text-[#ececf1]",placeholder:"https://api.example.com"})]}),ee?x.jsx(EV,{selectedAdapter:T||(d==null?void 0:d.adapterName)||null,onAdapterChange:de=>{v(de),P(null)},disabled:R}):x.jsxs("div",{children:[x.jsx("label",{className:"mb-2 block text-sm font-medium text-[#353740] dark:text-[#d1d5db]",children:"API Key"}),x.jsxs("div",{className:"relative",children:[x.jsx("input",{type:H?"text":"password",value:z,onChange:de=>{L(de.target.value),P(null)},className:"w-full rounded-md border border-gray-300 bg-white px-3 py-2 pr-10 text-sm text-[#353740] focus:border-gray-400 focus:outline-none dark:border-[#4a4b54] dark:bg-[#343541] dark:text-[#ececf1]",placeholder:"your-api-key",disabled:R}),x.jsx("button",{type:"button",onClick:()=>J(!H),className:"absolute right-2 top-1/2 -translate-y-1/2 rounded p-1 text-gray-500 hover:text-gray-700 dark:text-[#d1d5db] dark:hover:text-white","aria-label":H?"Hide API key":"Show API key",disabled:R,children:H?x.jsx(Qle,{className:"h-4 w-4"}):x.jsx(Mle,{className:"h-4 w-4"})})]})]}),U&&x.jsx("div",{className:"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-600/40 dark:bg-red-900/30 dark:text-red-200",children:U}),x.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[x.jsx("button",{type:"button",onClick:()=>{const de=(d==null?void 0:d.apiUrl)||Vr(),ze=(d==null?void 0:d.apiKey)||El();D(de),L(ze),P(null),J(!1),k(!1)},className:"rounded-md border border-transparent px-4 py-2 text-sm text-gray-600 hover:border-gray-300 hover:text-gray-900 disabled:cursor-not-allowed disabled:opacity-50 dark:text-[#d1d5db] dark:hover:text-white",disabled:R,children:"Cancel"}),x.jsx("button",{type:"submit",disabled:R||(ee?!T:!N||!z),className:"rounded-md bg-[#343541] px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-[#282b32] disabled:cursor-not-allowed disabled:opacity-50 dark:bg-[#565869] dark:hover:bg-[#6b6f7a]",children:R?"Validating...":"Update"})]})]})]})}),x.jsxs("div",{className:"flex h-full w-full md:w-72 flex-col border-r border-b border-gray-200 bg-gradient-to-b from-white via-gray-50 to-gray-100 dark:border-[#4a4b54] dark:bg-[#202123] dark:bg-none",children:[x.jsxs("div",{className:"border-b border-gray-200 bg-white/95 p-4 shadow-sm dark:border-[#4a4b54] dark:bg-[#202123] dark:shadow-none",children:[x.jsxs("button",{onClick:Fe,disabled:!oe,className:`flex w-full items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium ${oe?"bg-[#343541] text-white hover:bg-[#2c2f36] dark:bg-[#565869] dark:hover:bg-[#6b6f7a]":"cursor-not-allowed bg-gray-200 text-gray-500 dark:bg-[#3c3f4a] dark:text-[#6b6f7a]"}`,title:Ye,children:[x.jsx(Rle,{className:"h-4 w-4"}),"New Conversation"]}),x.jsxs("div",{className:"mt-3 space-y-2",children:[x.jsx("div",{className:"text-center",children:x.jsx("span",{className:"text-xs text-gray-500 dark:text-[#bfc2cd]",children:Z})}),r.length>0&&r.some(de=>de.messages.length>0)&&x.jsxs("button",{onClick:le,className:"flex w-full items-center justify-center gap-2 rounded-md border border-red-300 px-3 py-2 text-sm font-medium text-red-600 hover:bg-red-50 hover:border-red-400 dark:border-red-600/40 dark:text-red-400 dark:hover:bg-red-900/20 dark:hover:border-red-500/60 transition-colors",title:"Delete all conversations",children:[x.jsx(Ole,{className:"h-4 w-4"}),"Clear All"]})]}),x.jsxs("div",{className:"mt-4 space-y-3 border-t border-gray-200 pt-4 dark:border-[#4a4b54]",children:[x.jsxs("div",{className:"flex items-center justify-between text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-[#bfc2cd]",children:[x.jsx("span",{children:"Version"}),x.jsxs("span",{className:"text-gray-900 dark:text-white",children:["v",zae]})]}),ee?x.jsxs("div",{className:"space-y-1.5",children:[x.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-[#bfc2cd]",children:"AGENT"}),x.jsx(EV,{selectedAdapter:T||(d==null?void 0:d.adapterName)||null,onAdapterChange:_e,disabled:!G||R})]}):x.jsx("button",{onClick:ke,disabled:!G,className:"flex w-full items-center justify-center gap-2 rounded-md border border-gray-300 px-3 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 hover:border-gray-400 disabled:cursor-not-allowed disabled:opacity-50 dark:border-[#4a4b54] dark:text-[#ececf1] dark:hover:bg-[#3c3f4a] dark:hover:border-[#6b6f7a] dark:disabled:hover:bg-transparent dark:disabled:hover:border-[#4a4b54]",children:"Configure API"}),x.jsxs("button",{onClick:t,disabled:!t,className:"flex w-full items-center justify-center gap-2 rounded-md bg-[#343541] px-3 py-2 text-sm font-medium text-white transition-colors hover:bg-[#2c2f36] disabled:cursor-not-allowed disabled:opacity-50 dark:bg-[#565869] dark:hover:bg-[#6b6f7a]",children:[x.jsx(z6,{className:"h-4 w-4"}),"Settings"]}),U&&!b&&x.jsx("p",{className:"text-xs text-red-600 dark:text-red-400",children:U})]})]}),x.jsx("div",{className:"border-b border-gray-200 bg-white/90 px-4 py-3 shadow-sm dark:border-[#4a4b54] dark:bg-[#202123] dark:bg-none dark:shadow-none",children:x.jsxs("div",{className:"relative flex items-center",children:[x.jsx(Tle,{className:"pointer-events-none absolute left-3 h-4 w-4 text-gray-400"}),x.jsx("input",{type:"text",placeholder:"Search conversations",value:B,onChange:de=>h(de.target.value),className:"w-full rounded-md border border-gray-300 bg-white py-2 pl-9 pr-3 text-sm text-[#353740] placeholder-gray-400 shadow-inner focus:border-gray-400 focus:outline-none dark:border-[#4a4b54] dark:bg-[#343541] dark:text-[#ececf1] dark:shadow-none"})]})}),x.jsx("div",{className:"flex-1 overflow-y-auto px-3 py-3 dark:bg-[#202123] dark:bg-none",children:ae.length===0?x.jsxs("div",{className:"rounded-xl border border-dashed border-gray-300 bg-white/90 p-6 text-center text-sm text-gray-500 shadow-sm dark:border-[#4a4b54] dark:bg-[#252830] dark:text-[#bfc2cd] dark:shadow-none",children:[x.jsx(O0,{className:"mx-auto mb-3 h-6 w-6 text-gray-400 dark:text-[#6b6f7a]"}),x.jsx("p",{children:B?"No conversations found":"No conversations yet"})]}):x.jsx("div",{className:"space-y-2",children:ae.map(de=>x.jsx("div",{onClick:()=>Ke(de.id),className:`group flex cursor-pointer items-start rounded-xl border text-left transition shadow-sm ${Ae.cardGap} ${Ae.cardPadding} ${Ae.cardText} dark:shadow-none ${n===de.id?"border-[#343541] bg-white dark:border-[#6b6f7a] dark:bg-[#2c2f36]":"border-gray-100 bg-white hover:border-gray-300 hover:bg-gray-50 dark:border-transparent dark:bg-[#252830] dark:hover:border-[#4a4b54] dark:hover:bg-[#2f323c]"}`,children:f===de.id?x.jsx("input",{type:"text",value:w,onChange:ze=>E(ze.target.value.slice(0,zp)),onKeyDown:ze=>{ze.key==="Enter"&&Kt(de.id),ze.key==="Escape"&&ie()},onBlur:()=>Kt(de.id),maxLength:zp,className:`flex-1 border-none bg-transparent text-[#353740] focus:outline-none dark:text-[#ececf1] ${Ae.titleText}`,autoFocus:!0}):x.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[x.jsxs("div",{className:`flex items-center gap-2 ${Ae.cardText}`,children:[x.jsx("h3",{className:`flex-1 truncate font-semibold ${Ae.titleText} ${n===de.id?"text-[#1f2937] dark:text-white":"text-gray-700 dark:text-[#d4d7e2]"}`,children:de.title}),x.jsxs("div",{className:"flex items-center gap-1 opacity-0 transition-opacity group-hover:opacity-100",children:[x.jsx("button",{onClick:ze=>Sr(ze,de),className:`rounded-full text-gray-500 hover:bg-gray-200 hover:text-[#353740] dark:text-[#bfc2cd] dark:hover:bg-[#3c3f4a] ${Ae.actionButton}`,title:"Rename conversation",children:x.jsx(vle,{className:Ae.actionIcon})}),x.jsx("button",{onClick:ze=>Bt(ze,de),className:`rounded-full text-red-500 hover:bg-red-50 dark:text-red-300 dark:hover:bg-red-900/30 ${Ae.actionButton}`,title:"Delete conversation",children:x.jsx(T6,{className:Ae.actionIcon})})]})]}),x.jsxs("div",{className:`mt-1 flex items-center overflow-hidden pr-1 text-gray-500 dark:text-[#a6acc5] ${Ae.metaGap} ${Ae.metaText}`,children:[x.jsx("span",{className:"min-w-0 flex-1 truncate leading-none",children:ct(de.updatedAt)}),x.jsxs("span",{className:`inline-flex shrink-0 items-center gap-1 rounded-full bg-white/80 font-medium text-gray-600 shadow-sm dark:bg-white/10 dark:text-[#e5e7f4] leading-none ${Ae.badgePadding} ${Ae.badgeText}`,children:[x.jsx(O0,{className:Ae.badgeIcon}),de.messages.length]}),de.attachedFiles&&de.attachedFiles.length>0&&x.jsxs("span",{className:`inline-flex shrink-0 items-center gap-1 rounded-full bg-white/80 font-medium text-gray-600 shadow-sm dark:bg-white/10 dark:text-[#e5e7f4] leading-none ${Ae.badgePadding} ${Ae.badgeText}`,children:[x.jsx(j6,{className:Ae.badgeIcon}),de.attachedFiles.length]})]})]})},de.id))})}),be&&x.jsx("div",{className:"border-t border-gray-200 p-4 dark:border-[#4a4b54]",children:x.jsxs("div",{className:"text-center",children:[x.jsx("div",{className:"flex items-center justify-center mb-3",children:x.jsx("span",{className:"text-sm font-medium text-gray-900 dark:text-[#ececf1]",children:"Powered by ORBIT"})}),De.isLoading?x.jsxs("div",{className:"flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-[#bfc2cd] mb-3",children:[x.jsx("div",{className:"animate-spin rounded-full h-4 w-4 border-b-2 border-gray-400"}),x.jsx("span",{children:"Loading stats..."})]}):De.error?x.jsx("div",{className:"flex items-center justify-center gap-2 text-xs text-red-500 dark:text-red-400 mb-3",children:x.jsx("span",{children:"⚠️ Failed to load stats"})}):x.jsxs("div",{className:"flex items-center justify-center gap-4 text-xs text-gray-500 dark:text-[#bfc2cd] mb-3",children:[x.jsxs("div",{className:"flex items-center gap-1",children:[x.jsx("svg",{className:"w-4 h-4 text-yellow-500",fill:"currentColor",viewBox:"0 0 24 24",children:x.jsx("path",{d:"M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"})}),x.jsxs("span",{children:[De.stars.toLocaleString()," stars"]})]}),x.jsxs("div",{className:"flex items-center gap-1",children:[x.jsx("svg",{className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 16 16",children:x.jsx("path",{d:"M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75H4.5A.75.75 0 013 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"})}),x.jsxs("span",{children:[De.forks.toLocaleString()," forks"]})]})]}),x.jsxs("a",{href:`https://github.com/${sV()}/${oV()}`,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300 transition-colors",children:[x.jsx("svg",{className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 24 24",children:x.jsx("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"})}),"View on GitHub"]})]})})]}),x.jsx(fV,{isOpen:C.isOpen,onClose:en,onConfirm:ir,title:"Delete Conversation",message:`Are you sure you want to delete "${C.conversationTitle}"? This will clear the conversation history from both the server and your local storage. This action cannot be undone.`,confirmText:"Delete",cancelText:"Cancel",type:"danger",isLoading:C.isDeleting}),x.jsx(fV,{isOpen:I.isOpen,onClose:At,onConfirm:Qe,title:"Clear All Conversations",message:`Are you sure you want to delete all ${ge} conversation${ge!==1?"s":""}? This will clear all conversation history from both the server and your local storage. This action cannot be undone.`,confirmText:"Clear All",cancelText:"Cancel",type:"danger",isLoading:I.isDeleting})]})}function f$e({isOpen:e,onClose:t}){const{theme:r,updateTheme:n}=Of(),{settings:A,updateSettings:i}=Wf(),[a,s]=y.useState(null),[o,l]=y.useState(!1),[c,u]=y.useState(""),[g,d]=y.useState(!1);if(y.useEffect(()=>{e&&Tae().then(s)},[e]),!e)return null;const B=I=>{n({mode:I})},h=I=>{n({fontSize:I})},f=()=>{n({highContrast:!r.highContrast})},p=()=>{i({soundEnabled:!A.soundEnabled})},w=()=>{u(""),d(!1),l(!0)},E=()=>{l(!1),u(""),d(!1)},C=()=>{E(),localStorage.clear(),window.location.reload()},m=g&&c.trim().toLowerCase()==="reset";return x.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center p-4 z-50",children:x.jsxs("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-2xl w-full max-w-md max-h-[90vh] flex flex-col overflow-hidden relative",children:[x.jsxs("div",{className:"flex-shrink-0 flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-600",children:[x.jsx("h2",{className:"text-xl font-semibold text-gray-900 dark:text-gray-100",children:"Settings"}),x.jsx("button",{onClick:t,className:"p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors",children:x.jsx(_c,{className:"w-5 h-5 text-gray-500 dark:text-gray-400"})})]}),x.jsxs("div",{className:"flex-1 min-h-0 p-6 space-y-6 overflow-y-auto",children:[x.jsxs("div",{className:"space-y-4",children:[x.jsxs("h3",{className:"text-lg font-medium text-gray-900 dark:text-gray-100 flex items-center gap-2",children:[x.jsx(Sle,{className:"w-5 h-5"}),"Appearance"]}),x.jsxs("div",{className:"space-y-2",children:[x.jsx("label",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Theme"}),x.jsx("div",{className:"grid grid-cols-3 gap-2",children:[{value:"light",label:"Light",icon:Lle},{value:"dark",label:"Dark",icon:Dle},{value:"system",label:"System",icon:xle}].map(({value:I,label:M,icon:b})=>x.jsxs("button",{onClick:()=>B(I),className:`flex flex-col items-center gap-2 p-3 rounded-lg border-2 transition-all duration-200 ${r.mode===I?"border-blue-500 bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300":"border-gray-200 dark:border-gray-600 hover:border-gray-300 dark:hover:border-gray-500 text-gray-700 dark:text-gray-300"}`,children:[x.jsx(b,{className:"w-5 h-5"}),x.jsx("span",{className:"text-sm font-medium",children:M})]},I))})]}),x.jsxs("div",{className:"flex items-center justify-between",children:[x.jsxs("div",{children:[x.jsx("label",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"High Contrast"}),x.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Improve readability with enhanced contrast"})]}),x.jsx("button",{onClick:f,className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${r.highContrast?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"}`,children:x.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${r.highContrast?"translate-x-6":"translate-x-1"}`})})]}),x.jsxs("div",{className:"space-y-2",children:[x.jsxs("label",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 flex items-center gap-2",children:[x.jsx(Wle,{className:"w-4 h-4"}),"Font Size"]}),x.jsx("div",{className:"grid grid-cols-3 gap-2",children:[{value:"small",label:"Small"},{value:"medium",label:"Medium"},{value:"large",label:"Large"}].map(({value:I,label:M})=>x.jsx("button",{onClick:()=>h(I),className:`p-2 rounded-lg border-2 transition-colors text-center ${r.fontSize===I?"border-blue-500 bg-blue-50 dark:bg-blue-900/20":"border-gray-200 dark:border-gray-600 hover:border-gray-300 dark:hover:border-gray-500"}`,children:x.jsx("span",{className:`font-medium ${I==="small"?"text-sm":I==="large"?"text-lg":"text-base"}`,children:M})},I))})]})]}),x.jsxs("div",{className:"space-y-4",children:[x.jsx("h3",{className:"text-lg font-medium text-gray-900 dark:text-gray-100",children:"Chat Preferences"}),x.jsxs("div",{className:"flex items-center justify-between",children:[x.jsxs("div",{className:"flex items-center gap-2",children:[x.jsx(W0,{className:"w-4 h-4 text-gray-600 dark:text-gray-400"}),x.jsxs("div",{children:[x.jsx("label",{className:"text-sm font-medium text-gray-700 dark:text-gray-300",children:"Sound Effects"}),x.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Play sounds for notifications and events"})]})]}),x.jsx("button",{onClick:p,className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${A.soundEnabled?"bg-blue-600":"bg-gray-200 dark:bg-gray-600"}`,children:x.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white transition-transform ${A.soundEnabled?"translate-x-6":"translate-x-1"}`})})]})]}),x.jsxs("div",{className:"space-y-4 pt-4 border-t border-gray-200 dark:border-gray-600",children:[x.jsxs("h3",{className:"text-lg font-medium text-gray-900 dark:text-gray-100 flex items-center gap-2",children:[x.jsx(T6,{className:"w-5 h-5"}),"Data Management"]}),x.jsxs("div",{className:"space-y-3",children:[x.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Clear all application data including conversations, and personalized settings."}),x.jsx("button",{onClick:w,className:"w-full px-4 py-2 text-sm font-medium text-red-600 dark:text-red-400 border border-red-300 dark:border-red-700 rounded-lg hover:bg-red-50 dark:hover:bg-red-900/20 transition-colors",children:"Reset Application"})]})]}),x.jsxs("div",{className:"space-y-2 pt-4 border-t border-gray-200 dark:border-gray-600",children:[x.jsxs("h3",{className:"text-sm font-medium text-gray-700 dark:text-gray-300 flex items-center gap-2",children:[x.jsx(kle,{className:"w-4 h-4"}),"About"]}),x.jsxs("div",{className:"space-y-1",children:[x.jsxs("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:["AI Chat Application v",(a==null?void 0:a.appVersion)||"1.0.0"]}),x.jsxs("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:["API Package: @schmitech/chatbot-api v",(a==null?void 0:a.apiVersion)||"^0.5.3",(a==null?void 0:a.isLocalApi)&&x.jsx("span",{className:"ml-1 px-1.5 py-0.5 bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300 rounded text-xs font-medium",children:"Local"})]}),x.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Built with React, TypeScript, and Tailwind CSS"})]})]})]}),o&&x.jsx("div",{className:"absolute inset-0 bg-black/70 flex items-center justify-center p-4 z-50",children:x.jsxs("div",{className:"w-full max-w-sm rounded-2xl bg-white dark:bg-gray-900 border border-red-100 dark:border-red-800 shadow-2xl p-6 space-y-4",children:[x.jsxs("div",{className:"flex items-start gap-3",children:[x.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/40",children:x.jsx(Tk,{className:"w-5 h-5 text-red-600 dark:text-red-400"})}),x.jsxs("div",{children:[x.jsx("p",{className:"text-base font-semibold text-gray-900 dark:text-gray-100",children:"Reset application data?"}),x.jsxs("p",{className:"text-sm text-gray-600 dark:text-gray-400",children:["This removes everything stored on this device. Type ",x.jsx("span",{className:"font-semibold text-gray-900 dark:text-gray-100",children:"RESET"})," to continue."]})]})]}),x.jsxs("div",{className:"space-y-2",children:[x.jsx("label",{className:"text-xs font-medium text-gray-700 dark:text-gray-300",children:"Confirmation text"}),x.jsx("input",{value:c,onChange:I=>u(I.target.value.toUpperCase()),placeholder:"RESET",className:"w-full rounded-lg border border-gray-300 dark:border-gray-600 bg-transparent px-3 py-2 text-sm uppercase tracking-widest focus:outline-none focus:ring-2 focus:ring-red-400 dark:text-gray-100"})]}),x.jsxs("label",{className:"flex items-start gap-2 text-xs text-gray-600 dark:text-gray-400",children:[x.jsx("input",{type:"checkbox",checked:g,onChange:I=>d(I.target.checked),className:"mt-0.5 h-4 w-4 rounded border-gray-300 dark:border-gray-500 text-red-600 focus:ring-red-500"}),x.jsx("span",{children:"I understand this action is permanent and will reload the app."})]}),x.jsxs("div",{className:"flex gap-2 pt-2",children:[x.jsx("button",{onClick:E,className:"flex-1 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:"Keep my data"}),x.jsx("button",{onClick:C,disabled:!m,className:`flex-1 px-4 py-2 text-sm font-semibold rounded-lg transition-colors ${m?"bg-red-600 text-white hover:bg-red-700 dark:bg-red-700 dark:hover:bg-red-600":"bg-red-200 text-red-600/60 dark:bg-red-900/20 dark:text-red-400/60 cursor-not-allowed"}`,children:"Delete everything"})]})]})})]})})}function E$e({message:e}){return x.jsx("div",{className:"min-h-screen bg-slate-950 text-white flex items-center justify-center px-4 py-12",children:x.jsxs("div",{className:"max-w-lg w-full text-center space-y-6",children:[x.jsx("div",{className:"flex justify-center",children:x.jsx("div",{className:"bg-white/10 rounded-full p-4",children:x.jsx(Tk,{className:"h-10 w-10 text-amber-300","aria-hidden":"true"})})}),x.jsx("div",{className:"space-y-2",children:x.jsx("p",{className:"text-2xl font-semibold tracking-tight",children:"ORBIT is temporarily unavailable"})}),x.jsx("p",{className:"text-sm text-white/60",children:e})]})})}function m$e(){const[e,t]=y.useState(!1),[r,n]=y.useState(!1),A=x_e();return A?x.jsx(OG,{children:x.jsx(E$e,{message:A})}):x.jsx(OG,{children:x.jsx(fle,{children:x.jsxs("div",{className:"min-h-screen flex flex-col md:flex-row bg-white dark:bg-[#212121] text-slate-900 dark:text-slate-100",children:[x.jsx("div",{className:"hidden md:flex md:min-h-screen",children:x.jsx(mV,{onOpenSettings:()=>t(!0)})}),x.jsx("div",{className:"flex-1 flex justify-center w-full",children:x.jsx(h$e,{onOpenSettings:()=>t(!0),onOpenSidebar:()=>n(!0)})}),x.jsx(f$e,{isOpen:e,onClose:()=>t(!1)}),r&&x.jsxs("div",{className:"fixed inset-0 z-50 flex md:hidden",children:[x.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:()=>n(!1),"aria-hidden":"true"}),x.jsxs("div",{className:"relative z-10 h-full w-[min(18rem,85vw)] animate-slideIn",children:[x.jsx(mV,{onRequestClose:()=>n(!1),onOpenSettings:()=>{t(!0),n(!1)}}),x.jsx("button",{onClick:()=>n(!1),className:"absolute -right-3 top-[max(env(safe-area-inset-top),0.75rem)] rounded-full bg-white/95 p-2.5 text-gray-600 shadow-lg active:scale-95 transition-transform dark:bg-[#2d2f39] dark:text-[#ececf1]","aria-label":"Close menu",children:x.jsx(_c,{className:"h-5 w-5"})})]})]})]})})})}Tae().then(e=>{fe(`📱 App Version: v${e.appVersion}`),fe(`📦 API Package: @schmitech/chatbot-api v${e.apiVersion}`),fe(`🔧 API Mode: ${e.isLocalApi?"Local":"NPM Package"}`)});S6(document.getElementById("root")).render(x.jsx(y.StrictMode,{children:x.jsx(m$e,{})}));export{rFe as $,ys as A,pYe as B,yje as C,S$e as D,IYe as E,hYe as F,Pe as G,Q$e as H,Md as I,M$e as J,CYe as K,Jn as L,NUe as M,Dje as N,zi as O,Xje as P,F as Q,EGe as R,vUe as S,SX as T,LH as U,TH as V,Vke as W,ZU as X,fi as Y,MZ as Z,Yt as _,G$e as a,HX as a$,tFe as a0,TZ as a1,gU as a2,EE as a3,GDe as a4,vDe as a5,mu as a6,UDe as a7,SDe as a8,fw as a9,nYe as aA,jS as aB,vH as aC,Nd as aD,aGe as aE,sGe as aF,c$ as aG,NE as aH,lGe as aI,iGe as aJ,_ve as aK,Sw as aL,g$ as aM,Sve as aN,HU as aO,$ve as aP,rc as aQ,l$ as aR,Rve as aS,kE as aT,z2e as aU,fGe as aV,WB as aW,uYe as aX,OB as aY,He as aZ,qe as a_,ZB as aa,cU as ab,oU as ac,il as ad,ww as ae,oZ as af,QA as ag,xbe as ah,KS as ai,iZ as aj,VB as ak,F$e as al,ISe as am,CH as an,SE as ao,eU as ap,Br as aq,fU as ar,CE as as,jFe as at,SRe as au,tU as av,EU as aw,C$e as ax,pu as ay,cGe as az,mte as b,wU as b0,NJ as b1,YJ as b2,XZ as b3,mw as b4,x$e as b5,Y$e as b6,yu as b7,_i as b8,N$e as b9,_2e as bA,YO as bB,th as bC,DRe as bD,xRe as bE,$S as bF,We as bG,__ as bH,Ove as bI,fze as bJ,Jx as bK,Uo as bL,Ou as bM,i$ as bN,kw as bO,OU as bP,JJ as bQ,_B as bR,k$e as ba,b$e as bb,D$e as bc,y$e as bd,bUe as be,ln as bf,vo as bg,P$ as bh,ic as bi,f$ as bj,st as bk,ma as bl,LU as bm,O2e as bn,Zo as bo,JU as bp,L2e as bq,K2e as br,Wu as bs,jve as bt,J2e as bu,H2e as bv,VJ as bw,$B as bx,n$ as by,xw as bz,R$e as c,Mi as d,fYe as e,LX as f,An as g,wYe as h,v$e as i,yGe as j,Ot as k,Lu as l,Fje as m,U$e as n,j$e as o,EYe as p,m$ as q,T$e as r,ue as s,Aje as t,z$e as u,mYe as v,Dt as w,YUe as x,Mje as y,TU as z};