opencami 2.0.0 → 2.1.0

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 (69) hide show
  1. package/dist/client/assets/{CSPContext-CrlIQW7-.js → CSPContext-CxrBvJ99.js} +1 -1
  2. package/dist/client/assets/{DirectionContext-X-0CRn1O.js → DirectionContext-BOL0P_1j.js} +1 -1
  3. package/dist/client/assets/_sessionKey-CTtu2ipR.js +25 -0
  4. package/dist/client/assets/agents-D7JS19Lo.js +2 -0
  5. package/dist/client/assets/{agents-screen-BhOVp_S6.js → agents-screen-CqdzZKaR.js} +1 -1
  6. package/dist/client/assets/bots-DAInzfLx.js +2 -0
  7. package/dist/client/assets/{bots-screen-DLFd0ydi.js → bots-screen-RYovD6cu.js} +1 -1
  8. package/dist/client/assets/{button-D0n2Qsd_.js → button-Bv-7bwZZ.js} +1 -1
  9. package/dist/client/assets/{composite-GtKwZKbV.js → composite-DwQIZFe9.js} +1 -1
  10. package/dist/client/assets/{connect-vQWL0_11.js → connect-DZSrhhNT.js} +1 -1
  11. package/dist/client/assets/{dashboard-Knwc61i1.js → dashboard-y8KVUVF-.js} +1 -1
  12. package/dist/client/assets/{event-CHpdjYFR.js → event-Cnr9OETn.js} +1 -1
  13. package/dist/client/assets/{file-explorer-screen-FoYNs9zK.js → file-explorer-screen-C_mYUJsr.js} +1 -1
  14. package/dist/client/assets/files-CG0jFYdO.js +2 -0
  15. package/dist/client/assets/follow-up-suggestions-C6RzpstA.js +2 -0
  16. package/dist/client/assets/{index-CNPHef4O.js → index-3-ASY4Cl.js} +1 -1
  17. package/dist/client/assets/index-BZxJSF4T.js +3 -0
  18. package/dist/client/assets/{keyboard-shortcuts-dialog-DP8ptQ7N.js → keyboard-shortcuts-dialog-jm4-DftO.js} +1 -1
  19. package/dist/client/assets/{main-xPlWrMhO.js → main-CbISK-pm.js} +2 -2
  20. package/dist/client/assets/{markdown-3Js_RbUp.js → markdown-UD7RzskQ.js} +1 -1
  21. package/dist/client/assets/memory-BYRJ1l_4.js +2 -0
  22. package/dist/client/assets/{memory-screen-nzRra2Qi.js → memory-screen-BRsm-Q8A.js} +1 -1
  23. package/dist/client/assets/{menu-BnSEqetd.js → menu-DRjoHFvG.js} +1 -1
  24. package/dist/client/assets/{opencami-logo-B_hLbomw.js → opencami-logo-D2mv84sX.js} +1 -1
  25. package/dist/client/assets/{proxy-BnlGpgC1.js → proxy-DtxqfBHY.js} +1 -1
  26. package/dist/client/assets/{react-BgjQyJHw.js → react-C_7UlEtd.js} +1 -1
  27. package/dist/client/assets/{search-dialog-Bib2QY9u.js → search-dialog-lsT8JUtT.js} +1 -1
  28. package/dist/client/assets/{search-sources-badge-COHcYFRB.js → search-sources-badge-BnqKxoia.js} +1 -1
  29. package/dist/client/assets/{session-export-dialog-ooPnfHh_.js → session-export-dialog-DHHpvwI8.js} +1 -1
  30. package/dist/client/assets/settings-dialog-vrd0eJGw.js +1 -0
  31. package/dist/client/assets/skills-Svd-7oxQ.js +2 -0
  32. package/dist/client/assets/{skills-panel-D2uMdCHp.js → skills-panel-Dkuo0yyD.js} +1 -1
  33. package/dist/client/assets/{switch-BUQ0qH6r.js → switch-BYFBYPmi.js} +1 -1
  34. package/dist/client/assets/{tabs-BEyU6TjN.js → tabs-1jrPkdUE.js} +1 -1
  35. package/dist/client/assets/{thinking-CA48yhOE.js → thinking-D9BBn5kK.js} +1 -1
  36. package/dist/client/assets/{tooltip-CcIdgcV0.js → tooltip-DzFgDY86.js} +1 -1
  37. package/dist/client/assets/{use-file-explorer-state-CN_IJGcd.js → use-file-explorer-state-Dwhw6Mpg.js} +1 -1
  38. package/dist/client/assets/{useBaseUiId-ClbEYEil.js → useBaseUiId-BdQC9KF3.js} +1 -1
  39. package/dist/client/assets/{useCompositeItem-B_OxfJee.js → useCompositeItem-BI09zNFD.js} +1 -1
  40. package/dist/client/assets/{useControlled-CyT-lqbs.js → useControlled-Bc2Emhlx.js} +1 -1
  41. package/dist/client/assets/{useMutation-eQUrsn-X.js → useMutation-CMp81lDO.js} +1 -1
  42. package/dist/client/assets/{useOnFirstRender-CR_o2MK_.js → useOnFirstRender-DpB3w0o4.js} +1 -1
  43. package/dist/client/assets/{useQuery-k6EMRoMD.js → useQuery-_BEWdUe1.js} +1 -1
  44. package/dist/server/assets/{_sessionKey-CaFqmyhU.js → _sessionKey-COz7RLKC.js} +121 -23
  45. package/dist/server/assets/_tanstack-start-manifest_v-D0f-0Utn.js +4 -0
  46. package/dist/server/assets/{connect-CTVBm0Vc.js → connect-sd_NDvQN.js} +1 -1
  47. package/dist/server/assets/follow-up-suggestions-DRQqO8_S.js +183 -0
  48. package/dist/server/assets/{index-B_F4DTUu.js → index-197lqzv2.js} +2 -0
  49. package/dist/server/assets/{index-C7lmufwX.js → index-sXe2QC5V.js} +1 -1
  50. package/dist/server/assets/{markdown-CFdYXCRQ.js → markdown-Dk1YdosA.js} +1 -1
  51. package/dist/server/assets/{memory-screen-vqXczcVo.js → memory-screen-DA_o-N1Z.js} +2 -2
  52. package/dist/server/assets/{memory-rBB015W-.js → memory-woPzJFfs.js} +1 -1
  53. package/dist/server/assets/{router-X2L0PDPI.js → router-CZhxPkYW.js} +305 -150
  54. package/dist/server/assets/{search-dialog-CXhofdoP.js → search-dialog-DlvWfq1e.js} +5 -5
  55. package/dist/server/assets/{settings-dialog-CPdftvjz.js → settings-dialog-BGtrS2RJ.js} +62 -1
  56. package/dist/server/assets/{thinking-YkRSlXtf.js → thinking-fzwT_aVT.js} +5 -5
  57. package/dist/server/server.js +2 -2
  58. package/package.json +1 -1
  59. package/dist/client/assets/_sessionKey-yNQ57svB.js +0 -23
  60. package/dist/client/assets/agents-WqWjsymD.js +0 -2
  61. package/dist/client/assets/bots-DNqiFT7w.js +0 -2
  62. package/dist/client/assets/files-BtR_gArr.js +0 -2
  63. package/dist/client/assets/follow-up-suggestions-DVXNLqga.js +0 -5
  64. package/dist/client/assets/index-CTT0Y1ya.js +0 -3
  65. package/dist/client/assets/memory-BRGPq5t6.js +0 -2
  66. package/dist/client/assets/settings-dialog-B8mz99u-.js +0 -1
  67. package/dist/client/assets/skills-DA9J_tsC.js +0 -2
  68. package/dist/server/assets/_tanstack-start-manifest_v-P3skSR3R.js +0 -4
  69. package/dist/server/assets/follow-up-suggestions-DHv2_XzB.js +0 -275
@@ -1,5 +0,0 @@
1
- import{r as u,j as r}from"./main-xPlWrMhO.js";import{H as b,p as j,l as A,c as w}from"./button-D0n2Qsd_.js";const E=[/```[\s\S]*?```/g,/`[^`]+`/g,/\b(function|const|let|var|class|import|export|return|async|await)\b/g];function N(t){const e=[],o=t.match(/"([^"]+)"|'([^']+)'/g);o&&e.push(...o.map(s=>s.replace(/['"]/g,"")));const n=t.match(/\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*\b/g);n&&e.push(...n.filter(s=>!["I","The","A","An","This"].includes(s)));const i=t.match(/`([^`]+)`/g);return i&&e.push(...i.map(s=>s.replace(/`/g,""))),[...new Set(e)].slice(0,5)}function R(t){return E.some(e=>e.test(t))}function F(t){return/^[\s]*[-*•\d]+[.)\s]/m.test(t)||/\b(first|second|third|1\.|2\.|3\.)/i.test(t)}function I(t){return/\b(alternatively|another|other option|could also|you might|consider)\b/i.test(t)}function U(t){return/\b(because|since|due to|reason|why|how|what|when|where)\b/i.test(t)}function W(t){return/\b(however|but|note|warning|caution|careful|important|keep in mind|be aware)\b/i.test(t)}function $(t){const e=[],o=N(t);if(R(t)&&(e.push({text:"Can you explain this code step by step?",type:"clarify"}),e.push({text:"How would I modify this for my use case?",type:"actionable"})),F(t)&&(e.push({text:"Can you elaborate on the first point?",type:"expand"}),e.push({text:"Which of these is most important to start with?",type:"actionable"})),I(t)&&(e.push({text:"What are the pros and cons of each approach?",type:"alternative"}),e.push({text:"Which option would you recommend and why?",type:"clarify"})),U(t)&&e.length<3&&e.push({text:"Can you give me a practical example?",type:"example"}),W(t)&&e.length<3&&e.push({text:"What potential issues should I watch out for?",type:"clarify"}),o.length>0&&e.length<3){const s=o[0];e.push({text:`Tell me more about ${s}`,type:"expand"})}const n=[{text:"Can you give me a concrete example?",type:"example"},{text:"What would be the next steps?",type:"actionable"},{text:"How does this work in practice?",type:"expand"},{text:"Are there any common mistakes to avoid?",type:"clarify"},{text:"Can you simplify this explanation?",type:"clarify"}],i=new Set(e.map(s=>s.type));for(const s of n){if(e.length>=3)break;i.has(s.type)||(e.push(s),i.add(s.type))}for(const s of n){if(e.length>=3)break;e.some(a=>a.text===s.text)||e.push(s)}return e.slice(0,3)}function v(t){return $(t).map(e=>e.text)}async function z(t,e){const o=await fetch("/api/llm-features",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"followups",conversationContext:t}),signal:e});if(!o.ok)throw new Error(`API error: ${o.status}`);const n=await o.json();return n.ok&&Array.isArray(n.suggestions)&&n.suggestions.length>0?n.suggestions:[]}function H(t,e,o){const{minResponseLength:n=50,heuristicsOnly:i=!1}=o??{},[s,a]=u.useState([]),[g,l]=u.useState(!1),[m,p]=u.useState(null),[k,h]=u.useState(null),y=u.useRef(""),d=u.useRef(null);return u.useEffect(()=>{if(!t||t.trim().length<n){a([]),h(null),l(!1),p(null);return}const x=t.slice(0,200)+t.length;if(x===y.current)return;if(y.current=x,d.current&&d.current.abort(),i){const c=v(t);a(c),h("heuristic"),l(!1),p(null);return}const f=new AbortController;d.current=f,l(!0),p(null);const S=v(t);a(S),h("heuristic");const C=e?`Context: ${e}
2
-
3
- Assistant's response:
4
- ${t.slice(0,2e3)}`:`Assistant's response:
5
- ${t.slice(0,2e3)}`;z(C,f.signal).then(c=>{f.signal.aborted||(c.length>0&&(a(c),h("openclaw")),l(!1))}).catch(c=>{f.signal.aborted||(p(c instanceof Error?c.message:String(c)),l(!1))})},[t,e,n,i]),{suggestions:s,isLoading:g,error:m,source:k}}function L({responseText:t,contextSummary:e,onSuggestionClick:o,disabled:n=!1,className:i}){const{suggestions:s,isLoading:a,source:g}=H(t,e,{minResponseLength:50});return s.length===0&&!a?null:r.jsxs("div",{className:w("flex flex-col gap-2 mt-3",i),children:[r.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-primary-500",children:[r.jsx("span",{className:"text-primary-400",children:"✨"}),r.jsx("span",{children:a?r.jsxs("span",{className:"flex items-center gap-1",children:["Thinking of follow-ups",r.jsx(b,{icon:j,size:12,strokeWidth:2,className:"animate-spin text-primary-400"})]}):g==="openclaw"?"AI suggestions":"Follow-up suggestions"})]}),r.jsx("div",{className:"flex flex-wrap gap-2",children:s.map((l,m)=>r.jsxs("button",{type:"button",disabled:n,onClick:()=>o(l),className:w("group inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full","text-sm text-primary-700 bg-primary-50 border border-primary-200","hover:bg-primary-100 hover:border-primary-300 hover:text-primary-900","focus:outline-none focus:ring-2 focus:ring-primary-500/20 focus:ring-offset-1","transition-all duration-150 cursor-pointer","disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-primary-50 disabled:hover:border-primary-200",a&&"opacity-75"),children:[r.jsx("span",{children:l}),r.jsx(b,{icon:A,size:14,strokeWidth:2,className:"text-primary-400 group-hover:text-primary-600 group-hover:translate-x-0.5 transition-all duration-150"})]},`${m}-${l.slice(0,20)}`))})]})}const Z=u.memo(L);export{Z as FollowUpSuggestions};
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/cpp-B-lmv-kZ.js","assets/regexp-CDVJQ6XC.js","assets/c-BIGW1oBm.js","assets/sql-BLtJtn59.js","assets/graphql-ChdNCCLP.js","assets/javascript-wDzz0qaB.js","assets/typescript-BPQ3VLAy.js","assets/jsx-g9-lgVsj.js","assets/tsx-COt5Ahok.js","assets/html-GMplVEZG.js","assets/css-DPfMkruS.js","assets/php-Dhbhpdrm.js","assets/xml-sdJ4AIDG.js","assets/java-CylS5w8V.js","assets/json-Cp-IABpG.js","assets/ruby-NiQIzKut.js","assets/shell-DfDnw5Jg.js","assets/yaml-Buea-lGh.js","assets/core-BrHBc0Zp.js","assets/index-T4TOjvD0.js"])))=>i.map(i=>d[i]);
2
- import{r as m,j as u,_ as r}from"./main-xPlWrMhO.js";import{H as A,n as z,B as N,F as U,X as G,x as X,c as P}from"./button-D0n2Qsd_.js";import{c as $}from"./react-BgjQyJHw.js";function Q(e,o){let t;try{t=e()}catch{return}return{getItem:i=>{var s;const f=h=>h===null?null:JSON.parse(h,void 0),d=(s=t.getItem(i))!=null?s:null;return d instanceof Promise?d.then(f):f(d)},setItem:(i,s)=>t.setItem(i,JSON.stringify(s,void 0)),removeItem:i=>t.removeItem(i)}}const j=e=>o=>{try{const t=e(o);return t instanceof Promise?t:{then(n){return j(n)(t)},catch(n){return this}}}catch(t){return{then(n){return this},catch(n){return j(n)(t)}}}},Y=(e,o)=>(t,n,i)=>{let s={storage:Q(()=>window.localStorage),partialize:a=>a,version:0,merge:(a,v)=>({...v,...a}),...o},f=!1,d=0;const h=new Set,y=new Set;let c=s.storage;if(!c)return e((...a)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),t(...a)},n,i);const I=()=>{const a=s.partialize({...n()});return c.setItem(s.name,{state:a,version:s.version})},T=i.setState;i.setState=(a,v)=>(T(a,v),I());const x=e((...a)=>(t(...a),I()),n,i);i.getInitialState=()=>x;let g;const E=()=>{var a,v;if(!c)return;const L=++d;f=!1,h.forEach(l=>{var _;return l((_=n())!=null?_:x)});const w=((v=s.onRehydrateStorage)==null?void 0:v.call(s,(a=n())!=null?a:x))||void 0;return j(c.getItem.bind(c))(s.name).then(l=>{if(l)if(typeof l.version=="number"&&l.version!==s.version){if(s.migrate){const _=s.migrate(l.state,l.version);return _ instanceof Promise?_.then(S=>[!0,S]):[!0,_]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,l.state];return[!1,void 0]}).then(l=>{var _;if(L!==d)return;const[S,O]=l;if(g=s.merge(O,(_=n())!=null?_:x),t(g,!0),S)return I()}).then(()=>{L===d&&(w?.(g,void 0),g=n(),f=!0,y.forEach(l=>l(g)))}).catch(l=>{L===d&&w?.(void 0,l)})};return i.persist={setOptions:a=>{s={...s,...a},a.storage&&(c=a.storage)},clearStorage:()=>{c?.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>E(),hasHydrated:()=>f,onHydrate:a=>(h.add(a),()=>{h.delete(a)}),onFinishHydration:a=>(y.add(a),()=>{y.delete(a)})},s.skipHydration||E(),g||x},K=Y,D=$()(K(e=>({settings:{showToolMessages:!0,showReasoningBlocks:!0,showSearchSources:!0,inlineFilePreview:!1,theme:"system",fontFamily:"system",density:"comfortable",accentColor:"green",chatWidth:"wide",sidebarWidth:"normal",bubbleStyle:"default"},updateSettings:o=>e(t=>({settings:{...t.settings,...o}}))}),{name:"chat-settings",merge:(e,o)=>{const t=e;return{...o,...t,settings:{...o.settings,...t?.settings??{}}}}}));function de(){const e=D(t=>t.settings),o=D(t=>t.updateSettings);return{settings:e,updateSettings:o}}function Z(){const e=D(n=>n.settings.theme),[o,t]=m.useState(!1);return m.useEffect(()=>{if(typeof window>"u")return;const n=window.matchMedia("(prefers-color-scheme: dark)");t(n.matches);function i(s){t(s.matches)}return n.addEventListener("change",i),()=>n.removeEventListener("change",i)},[]),m.useMemo(()=>e==="dark"?"dark":e==="light"||e==="frost-light"?"light":e==="frost-dark"||o?"dark":"light",[e,o])}const ee=new Set(["bash","c","cpp","csharp","css","diff","dockerfile","go","graphql","html","java","javascript","json","jsx","kotlin","markdown","php","python","regexp","ruby","rust","shell","sql","swift","toml","typescript","tsx","xml","yaml"]),te={js:"javascript",ts:"typescript",tsx:"tsx",jsx:"jsx",typescriptreact:"tsx",javascriptreact:"jsx",react:"jsx",sh:"bash",shell:"bash",yml:"yaml",md:"markdown",txt:"text"};function M(e){const t=e.trim().toLowerCase().replace(/^language-/,"").replace(/^\[|\]$/g,"").split(/[\s,]+/)[0]||"text";return te[t]??t}function re(e){const o=M(e);return ee.has(o)?o:"text"}function ne(e){return{bash:"Bash",python:"Python",javascript:"JavaScript",typescript:"TypeScript",tsx:"TSX",jsx:"JSX",json:"JSON",html:"HTML",css:"CSS",sql:"SQL",yaml:"YAML",markdown:"Markdown",text:"Plain Text"}[e]||e.charAt(0).toUpperCase()+e.slice(1)}const se={bash:()=>r(()=>import("./shell-DfDnw5Jg.js").then(e=>e.b),[]).then(e=>e.default),c:()=>r(()=>import("./c-BIGW1oBm.js"),[]).then(e=>e.default),cpp:()=>r(()=>import("./cpp-B-lmv-kZ.js"),__vite__mapDeps([0,1,2,3])).then(e=>e.default),csharp:()=>r(()=>import("./csharp-COcwbKMJ.js"),[]).then(e=>e.default),css:()=>r(()=>import("./css-DPfMkruS.js"),[]).then(e=>e.default),diff:()=>r(()=>import("./diff-D97Zzqfu.js"),[]).then(e=>e.default),dockerfile:()=>r(()=>import("./dockerfile-BcOcwvcX.js"),[]).then(e=>e.default),go:()=>r(()=>import("./go-CxLEBnE3.js"),[]).then(e=>e.default),graphql:()=>r(()=>import("./graphql-ChdNCCLP.js"),__vite__mapDeps([4,5,6,7,8])).then(e=>e.default),html:()=>r(()=>import("./html-GMplVEZG.js"),__vite__mapDeps([9,5,10])).then(e=>e.default),java:()=>r(()=>import("./java-CylS5w8V.js"),[]).then(e=>e.default),javascript:()=>r(()=>import("./javascript-wDzz0qaB.js"),[]).then(e=>e.default),json:()=>r(()=>import("./json-Cp-IABpG.js"),[]).then(e=>e.default),jsx:()=>r(()=>import("./jsx-g9-lgVsj.js"),[]).then(e=>e.default),kotlin:()=>r(()=>import("./kotlin-BdnUsdx6.js"),[]).then(e=>e.default),markdown:()=>r(()=>import("./markdown-Cvjx9yec.js"),[]).then(e=>e.default),php:()=>r(()=>import("./php-Dhbhpdrm.js"),__vite__mapDeps([11,9,5,10,12,13,3,14])).then(e=>e.default),python:()=>r(()=>import("./python-B6aJPvgy.js"),[]).then(e=>e.default),regexp:()=>r(()=>import("./regexp-CDVJQ6XC.js"),[]).then(e=>e.default),ruby:()=>r(()=>import("./ruby-NiQIzKut.js"),__vite__mapDeps([15,9,5,10,12,13,3,4,6,7,8,0,1,2,16,17])).then(e=>e.default),rust:()=>r(()=>import("./rust-B1yitclQ.js"),[]).then(e=>e.default),shell:()=>r(()=>import("./shell-DfDnw5Jg.js").then(e=>e.a),[]).then(e=>e.default),sql:()=>r(()=>import("./sql-BLtJtn59.js"),[]).then(e=>e.default),swift:()=>r(()=>import("./swift-D82vCrfD.js"),[]).then(e=>e.default),toml:()=>r(()=>import("./toml-vGWfd6FD.js"),[]).then(e=>e.default),typescript:()=>r(()=>import("./typescript-BPQ3VLAy.js"),[]).then(e=>e.default),tsx:()=>r(()=>import("./tsx-COt5Ahok.js"),[]).then(e=>e.default),xml:()=>r(()=>import("./xml-sdJ4AIDG.js"),__vite__mapDeps([12,13])).then(e=>e.default),yaml:()=>r(()=>import("./yaml-Buea-lGh.js"),[]).then(e=>e.default)},ae={sh:"bash",zsh:"bash",js:"javascript",ts:"typescript",py:"python",rb:"ruby",rs:"rust",cs:"csharp","c++":"cpp",yml:"yaml",md:"markdown",docker:"dockerfile"};let k=null;const H=new Set;async function oe(){if(!k){const[{createHighlighterCore:e},{createJavaScriptRegexEngine:o},t,n]=await Promise.all([r(()=>import("./core-BrHBc0Zp.js"),__vite__mapDeps([18,19])),r(()=>import("./engine-javascript-PwbX1GN8.js"),[]),r(()=>import("./vitesse-dark-D0r3Knsf.js"),[]).then(i=>i.default),r(()=>import("./vitesse-light-CVO1_9PV.js"),[]).then(i=>i.default)]);k=e({themes:[t,n],langs:[],engine:o()})}return k}async function ie(e,o){const t=ae[o]||o;if(H.has(t))return t;const n=se[t];if(!n)return"text";try{const i=await n();return await e.loadLanguage(i),H.add(t),t}catch{return"text"}}function _e({content:e,ariaLabel:o,language:t="text",filename:n,className:i,isStreaming:s=!1}){const f=Z(),[d,h]=m.useState(!1),[y,c]=m.useState(null),[I,T]=m.useState("text"),[x,g]=m.useState(),[E,a]=m.useState(!1),v=m.useMemo(()=>e,[e]),L=M(t||"text"),w=f==="dark"?"vitesse-dark":"vitesse-light";m.useEffect(()=>{let p=!0,b=null;const V=re(L);if(T(V),s)return c(null),()=>{p=!1};async function B(){try{const R=await oe();if(!p)return;const C=await ie(R,V);if(!p)return;const J=R.codeToHtml(e,{lang:C,theme:w});if(p){T(C),c(J);const q=R.getTheme(w);g(q.bg)}}catch{p&&c(null)}}return b=window.setTimeout(()=>{B()},160),()=>{p=!1,b&&window.clearTimeout(b)}},[e,s,L,w]),m.useEffect(()=>{if(typeof window>"u")return;const p=window.localStorage.getItem("opencami-code-wrap");a(p==="1")},[]);function l(){a(p=>{const b=!p;return typeof window<"u"&&window.localStorage.setItem("opencami-code-wrap",b?"1":"0"),b})}async function _(){try{await navigator.clipboard.writeText(e),h(!0),window.setTimeout(()=>h(!1),1600)}catch{h(!1)}}const F=!(e.replace(/\n$/,"").split(`
3
- `).length<=1),W=ne(I);return u.jsxs("div",{className:P("code-block group relative w-full min-w-0 max-w-full overflow-hidden rounded-lg border border-primary-200",i),children:[u.jsxs("div",{className:P("flex items-center justify-between px-3 pt-2"),style:{backgroundColor:x},children:[u.jsx("span",{className:"text-xs font-medium text-primary-500 flex items-center gap-1.5 min-w-0",children:n?u.jsxs(u.Fragment,{children:[u.jsx(A,{icon:z,size:14,strokeWidth:1.8}),u.jsx("span",{className:"truncate",children:n})]}):W}),u.jsxs("div",{className:"flex items-center gap-3",children:[u.jsxs(N,{variant:"ghost","aria-label":E?"Disable wrap":"Enable wrap",className:"h-auto px-0 text-xs font-medium text-primary-500 hover:text-primary-800 hover:bg-transparent",onClick:l,children:[u.jsx(A,{icon:U,size:14,strokeWidth:1.8}),E?"No wrap":"Wrap"]}),u.jsxs(N,{variant:"ghost","aria-label":o??"Copy code",className:"h-auto px-0 text-xs font-medium text-primary-500 hover:text-primary-800 hover:bg-transparent",onClick:()=>{_().catch(()=>{})},children:[u.jsx(A,{icon:d?G:X,size:14,strokeWidth:1.8}),d?"Copied":"Copy"]})]})]}),y?u.jsx("div",{className:P("w-full min-w-0 max-w-full text-sm text-primary-900 overflow-x-hidden [&>pre]:w-full [&>pre]:min-w-0 [&>pre]:max-w-full [&>pre]:px-3 [&>pre]:py-3",E?"[&>pre]:whitespace-pre-wrap [&>pre]:break-words [&_.line]:whitespace-pre-wrap [&_.line]:break-words":"overflow-x-auto [&>pre]:whitespace-pre [&>pre]:overflow-x-auto",F&&"[&>pre]:[counter-reset:line] [&_.line]:before:content-[counter(line)] [&_.line]:before:[counter-increment:line] [&_.line]:before:inline-block [&_.line]:before:w-8 [&_.line]:before:mr-4 [&_.line]:before:text-right [&_.line]:before:select-none [&_.line]:before:text-primary-500/60"),dangerouslySetInnerHTML:{__html:y}}):u.jsx("pre",{className:P("w-full min-w-0 max-w-full text-sm px-3 py-3 overflow-x-auto",E?"whitespace-pre-wrap break-words":"whitespace-pre overflow-x-auto"),children:u.jsx("code",{className:"block",children:v})})]})}export{_e as C,K as p,re as r,de as u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/memory-screen-nzRra2Qi.js","assets/main-xPlWrMhO.js","assets/useQuery-k6EMRoMD.js","assets/useMutation-eQUrsn-X.js","assets/button-D0n2Qsd_.js","assets/markdown-3Js_RbUp.js","assets/index-CTT0Y1ya.js","assets/react-BgjQyJHw.js","assets/use-file-explorer-state-CN_IJGcd.js","assets/useOnFirstRender-CR_o2MK_.js","assets/useBaseUiId-ClbEYEil.js","assets/event-CHpdjYFR.js","assets/visuallyHidden-COI6QeQH.js","assets/composite-GtKwZKbV.js","assets/index-T4TOjvD0.js"])))=>i.map(i=>d[i]);
2
- import{j as e,r,_ as s}from"./main-xPlWrMhO.js";const n=r.lazy(()=>s(()=>import("./memory-screen-nzRra2Qi.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])).then(t=>({default:t.MemoryScreen})));function a(){return e.jsx(r.Suspense,{fallback:e.jsx("div",{className:"flex h-screen items-center justify-center text-primary-500 text-sm",children:"Loading…"}),children:e.jsx(n,{})})}export{a as component};
@@ -1 +0,0 @@
1
- import{r as d,j as t}from"./main-xPlWrMhO.js";import{c as ve}from"./react-BgjQyJHw.js";import{B as je,H as T,V as we,z as Se,f as Ce,P as ke,S as Ie,g as Pe,R as Ne,j as Ve,c as I,o as Ee,v as Ae,k as Te,s as We,m as Fe}from"./button-D0n2Qsd_.js";import{D as Be,a as Oe,b as ze,c as De,d as B}from"./use-file-explorer-state-CN_IJGcd.js";import{S as u}from"./switch-BUQ0qH6r.js";import{T as b,a as g,b as x}from"./tabs-BEyU6TjN.js";import{u as Le}from"./index-CTT0Y1ya.js";import"./useOnFirstRender-CR_o2MK_.js";import"./useBaseUiId-ClbEYEil.js";import"./event-CHpdjYFR.js";import"./visuallyHidden-COI6QeQH.js";import"./composite-GtKwZKbV.js";import"./useControlled-CyT-lqbs.js";import"./useCompositeItem-B_OxfJee.js";import"./DirectionContext-X-0CRn1O.js";import"./CSPContext-CrlIQW7-.js";function Me(){if(typeof window>"u")return!1;try{return window.localStorage.getItem("feature_artifacts")==="true"}catch{return!1}}const Re=ve()(s=>({isEnabled:Me(),isPanelOpen:!1,content:"",type:null,setArtifact:function(m,a){s({content:m,type:a,isPanelOpen:!0})},clearArtifact:function(){s({content:"",type:null})},openPanel:function(){s({isPanelOpen:!0})},closePanel:function(){s({isPanelOpen:!1})},setEnabled:function(m){if(typeof window<"u")try{window.localStorage.setItem("feature_artifacts",String(m))}catch{}s({isEnabled:m})}}));function p({title:s,tabId:r,activeTab:m,children:a}){const o=r&&m&&r!==m;return t.jsxs("div",{className:I("border-b border-primary-200 py-2 last:border-0",o&&"md:hidden"),children:[t.jsx("h3",{className:"mb-1.5 text-sm font-semibold text-primary-700",children:s}),t.jsx("div",{className:"space-y-1.5",children:a})]})}function l({label:s,description:r,inline:m,children:a}){return m?t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsxs("div",{className:"flex-1 select-none",children:[t.jsx("div",{className:"text-[13px] font-medium text-primary-800",children:s}),r&&t.jsx("div",{className:"text-xs text-primary-500",children:r})]}),t.jsx("div",{className:"flex items-center gap-2",children:a})]}):t.jsxs("div",{className:"space-y-1",children:[t.jsxs("div",{className:"select-none",children:[t.jsx("div",{className:"text-[13px] font-medium text-primary-800",children:s}),r&&t.jsx("div",{className:"text-xs text-primary-500",children:r})]}),t.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:a})]})}const H=[{value:"14px",label:"S"},{value:"16px",label:"M"},{value:"18px",label:"L"},{value:"20px",label:"XL"}],P=[{value:"system",label:"System",cssValue:'-apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',previewClass:"font-sans"},{value:"inter",label:"Inter",cssValue:'"Inter", sans-serif',previewClass:'font-["Inter",sans-serif]'},{value:"roboto",label:"Roboto",cssValue:'"Roboto", sans-serif',previewClass:'font-["Roboto",sans-serif]'}],G=[{value:"compact",label:"Compact"},{value:"comfortable",label:"Comfortable"},{value:"spacious",label:"Spacious"}],N=[{value:"green",label:"Green",accent:"#22c55e",hover:"#16a34a",light:"rgba(34, 197, 94, 0.10)",fg:"#ffffff"},{value:"blue",label:"Blue",accent:"#3b82f6",hover:"#2563eb",light:"rgba(59, 130, 246, 0.10)",fg:"#ffffff"},{value:"purple",label:"Purple",accent:"#8b5cf6",hover:"#7c3aed",light:"rgba(139, 92, 246, 0.10)",fg:"#ffffff"},{value:"orange",label:"Orange",accent:"#f97316",hover:"#ea580c",light:"rgba(249, 115, 22, 0.10)",fg:"#ffffff"},{value:"pink",label:"Pink",accent:"#ec4899",hover:"#db2777",light:"rgba(236, 72, 153, 0.10)",fg:"#ffffff"},{value:"red",label:"Red",accent:"#ef4444",hover:"#dc2626",light:"rgba(239, 68, 68, 0.10)",fg:"#ffffff"},{value:"cyan",label:"Cyan",accent:"#06b6d4",hover:"#0891b2",light:"rgba(6, 182, 212, 0.10)",fg:"#ffffff"},{value:"yellow",label:"Yellow",accent:"#eab308",hover:"#ca8a04",light:"rgba(234, 179, 8, 0.10)",fg:"#ffffff"},{value:"white",label:"White",accent:"#ffffff",hover:"#e5e5e5",light:"rgba(255, 255, 255, 0.10)",fg:"#1a1a1a"}],V=[{value:"narrow",label:"Narrow",cssValue:"640px"},{value:"medium",label:"Medium",cssValue:"800px"},{value:"wide",label:"Wide",cssValue:"1000px"},{value:"full",label:"Full",cssValue:"100%"}],E=[{value:"compact",label:"Compact",cssValue:"200px"},{value:"normal",label:"Normal",cssValue:"260px"},{value:"wide",label:"Wide",cssValue:"320px"},{value:"xl",label:"XL",cssValue:"400px"}],q=[{value:"default",label:"Default"},{value:"bubbles",label:"Bubbles"},{value:"minimal",label:"Minimal"}];function O(s){return H.some(r=>r.value===s)}function z(s){return P.some(r=>r.value===s)}function D(s){return G.some(r=>r.value===s)}function L(s){return N.some(r=>r.value===s)}function M(s){return V.some(r=>r.value===s)}function R(s){return E.some(r=>r.value===s)}function _(s){return q.some(r=>r.value===s)}function rt({open:s,onOpenChange:r,onClose:m}){const{settings:a,updateSettings:o}=Le(),[f,J]=d.useState("appearance"),[U,X]=d.useState(()=>{if(typeof window>"u")return"16px";try{const e=localStorage.getItem("opencami-text-size");if(e&&O(e))return e}catch{}return"16px"}),[Y,Q]=d.useState(()=>{if(typeof window>"u")return!0;try{const e=localStorage.getItem("opencami-tts-enabled");return e===null?!0:e==="true"}catch{return!0}}),[W,K]=d.useState(()=>{if(typeof window>"u")return"auto";try{return localStorage.getItem("opencami-tts-provider")||"auto"}catch{return"auto"}}),[Z,$]=d.useState(()=>{if(typeof window>"u")return"nova";try{return localStorage.getItem("opencami-tts-voice")||"nova"}catch{return"nova"}}),[ee,te]=d.useState(()=>{if(typeof window>"u")return"auto";try{return localStorage.getItem("opencami-stt-provider")||"auto"}catch{return"auto"}});d.useEffect(()=>{if(!(typeof window>"u"))try{const e=localStorage.getItem("opencami-font-family");e&&z(e)?(y(e),a.fontFamily!==e&&o({fontFamily:e})):y(a.fontFamily);const n=localStorage.getItem("opencami-density");n&&D(n)?(v(n),a.density!==n&&o({density:n})):v(a.density);const i=localStorage.getItem("opencami-accent-color");i&&L(i)?(j(i),a.accentColor!==i&&o({accentColor:i})):j(a.accentColor);const c=localStorage.getItem("opencami-chat-width");c&&M(c)?(w(c),a.chatWidth!==c&&o({chatWidth:c})):w(a.chatWidth);const h=localStorage.getItem("opencami-sidebar-width");h&&R(h)?(S(h),a.sidebarWidth!==h&&o({sidebarWidth:h})):S(a.sidebarWidth);const k=localStorage.getItem("opencami-bubble-style");k&&_(k)?(C(k),a.bubbleStyle!==k&&o({bubbleStyle:k})):C(a.bubbleStyle)}catch{y(a.fontFamily),v(a.density),j(a.accentColor),w(a.chatWidth),S(a.sidebarWidth),C(a.bubbleStyle)}},[]),d.useEffect(()=>{y(a.fontFamily)},[a.fontFamily]),d.useEffect(()=>{v(a.density)},[a.density]),d.useEffect(()=>{j(a.accentColor)},[a.accentColor]),d.useEffect(()=>{w(a.chatWidth)},[a.chatWidth]),d.useEffect(()=>{S(a.sidebarWidth)},[a.sidebarWidth]),d.useEffect(()=>{C(a.bubbleStyle)},[a.bubbleStyle]);const ae=e=>{K(e);try{localStorage.setItem("opencami-tts-provider",e)}catch{}},ne=e=>{$(e);try{localStorage.setItem("opencami-tts-voice",e)}catch{}},re=e=>{te(e);try{localStorage.setItem("opencami-stt-provider",e)}catch{}};function se(e){typeof document>"u"||document.documentElement.style.setProperty("--opencami-text-size",e)}function y(e){if(typeof document>"u")return;const i=P.find(c=>c.value===e)?.cssValue??P[0].cssValue;document.documentElement.style.setProperty("--opencami-font-family",i)}function v(e){if(typeof document>"u")return;const n=document.documentElement;if(n.style.setProperty("--opencami-density",e),e==="compact"){n.style.setProperty("--opencami-msg-padding-y","0.25rem"),n.style.setProperty("--opencami-msg-gap","0.25rem"),n.style.setProperty("--opencami-user-bubble-py","0.4rem");return}if(e==="spacious"){n.style.setProperty("--opencami-msg-padding-y","1.25rem"),n.style.setProperty("--opencami-msg-gap","1rem"),n.style.setProperty("--opencami-user-bubble-py","1rem");return}n.style.setProperty("--opencami-msg-padding-y","0.75rem"),n.style.setProperty("--opencami-msg-gap","0.5rem"),n.style.setProperty("--opencami-user-bubble-py","0.625rem")}function j(e){if(typeof document>"u")return;const n=N.find(c=>c.value===e)??N[0],i=document.documentElement;i.style.setProperty("--opencami-accent",n.accent),i.style.setProperty("--opencami-accent-hover",n.hover),i.style.setProperty("--opencami-accent-light",n.light),i.style.setProperty("--opencami-accent-fg",n.fg)}function w(e){if(typeof document>"u")return;const n=V.find(i=>i.value===e)??V[2];document.documentElement.style.setProperty("--opencami-chat-width",n.cssValue)}function S(e){if(typeof document>"u")return;const n=E.find(i=>i.value===e)??E[1];document.documentElement.style.setProperty("--opencami-sidebar-width",n.cssValue)}function C(e){typeof document>"u"||document.documentElement.setAttribute("data-opencami-bubble-style",e)}const le=e=>{if(O(e)){X(e),se(e);try{localStorage.setItem("opencami-text-size",e)}catch{}}},ie=e=>{if(z(e)){y(e),o({fontFamily:e});try{localStorage.setItem("opencami-font-family",e)}catch{}}},oe=e=>{if(D(e)){v(e),o({density:e});try{localStorage.setItem("opencami-density",e)}catch{}}},ce=e=>{if(L(e)){j(e),o({accentColor:e});try{localStorage.setItem("opencami-accent-color",e)}catch{}}},de=e=>{if(M(e)){w(e),o({chatWidth:e});try{localStorage.setItem("opencami-chat-width",e)}catch{}}},ue=e=>{if(R(e)){S(e),o({sidebarWidth:e});try{localStorage.setItem("opencami-sidebar-width",e)}catch{}}},me=e=>{if(_(e)){C(e),o({bubbleStyle:e});try{localStorage.setItem("opencami-bubble-style",e)}catch{}}},he=e=>{Q(e);try{localStorage.setItem("opencami-tts-enabled",String(e))}catch{}window.dispatchEvent(new StorageEvent("storage",{key:"opencami-tts-enabled",newValue:String(e)}))},[F,fe]=d.useState(!1),A=d.useRef(null),[pe,be]=d.useState(()=>{if(typeof window>"u")return!0;try{const e=localStorage.getItem("opencami-personas-enabled");return e===null?!0:e==="true"}catch{return!0}});d.useEffect(()=>{let e=!0;async function n(){A.current?.abort();const i=new AbortController;A.current=i;try{const c=await fetch("/api/personas",{signal:i.signal});if(!c.ok)return;const h=await c.json();e&&h.ok&&fe(h.available)}catch(c){if(c instanceof Error&&c.name==="AbortError")return}}return n(),()=>{e=!1,A.current?.abort()}},[]);const ge=e=>{be(e);try{localStorage.setItem("opencami-personas-enabled",String(e))}catch{}window.dispatchEvent(new StorageEvent("storage",{key:"opencami-personas-enabled",newValue:String(e)}))},xe=[{value:"system",label:"Auto",icon:Ee},{value:"light",label:"Light",icon:Ae},{value:"dark",label:"Dark",icon:Te},{value:"chameleon",label:"Cham",icon:We},{value:"frost-light",label:"Ice",icon:Fe}];function ye(e){if(typeof document>"u")return;const n=document.documentElement,i=window.matchMedia("(prefers-color-scheme: dark)");n.classList.remove("light","dark","system","chameleon","frost","frost-light","frost-dark"),n.style.colorScheme="",n.classList.add(e);const c=e==="frost-light",h=e==="frost-dark";(c||h)&&n.classList.add("frost"),h&&n.classList.add("dark"),e==="system"&&i.matches&&n.classList.add("dark"),c&&(n.classList.remove("dark"),n.style.colorScheme="light")}return t.jsx(Be,{open:s,onOpenChange:r,children:t.jsx(Oe,{className:"w-[min(680px,92vw)] max-h-[85vh] overflow-y-auto",children:t.jsxs("div",{className:"p-3",children:[t.jsxs("div",{className:"flex items-start justify-between",children:[t.jsxs("div",{children:[t.jsx(ze,{className:"mb-1",children:"Settings"}),t.jsx(De,{className:"hidden",children:"Configure OpenCami"})]}),t.jsx(B,{render:t.jsx(je,{size:"icon-sm",variant:"ghost",className:"text-primary-500 hover:bg-primary-100 hover:text-primary-700","aria-label":"Close",children:t.jsx(T,{icon:we,size:20,strokeWidth:1.5})})})]}),t.jsxs("div",{className:"mt-2 flex md:flex-row flex-col md:gap-3 gap-0 md:min-h-[400px]",children:[t.jsx("nav",{className:"hidden md:flex flex-col gap-0.5 min-w-[160px] border-r border-primary-200 pr-3",children:[{id:"connection",label:"Connection",icon:Se},{id:"appearance",label:"Appearance",icon:Ce},{id:"chat",label:"Chat",icon:ke},{id:"workspace",label:"Workspace",icon:Ie},{id:"personas",label:"Personas",icon:Pe},{id:"voice",label:"Voice",icon:Ne},{id:"about",label:"About",icon:Ve}].map(e=>t.jsxs("button",{onClick:()=>J(e.id),className:I("flex items-center gap-2 px-2.5 py-1.5 rounded-md text-sm text-left transition-colors",f===e.id?"text-primary-900 font-medium":"text-primary-600 hover:text-primary-900 hover:bg-primary-50"),style:f===e.id?{backgroundColor:"var(--opencami-accent-light)"}:void 0,children:[t.jsx(T,{icon:e.icon,size:16,strokeWidth:1.5}),e.label]},e.id))}),t.jsxs("div",{className:"flex-1 overflow-y-auto md:max-h-[calc(85vh-90px)] max-h-none",children:[t.jsx(p,{title:"Connection",tabId:"connection",activeTab:f,children:t.jsx(l,{inline:!0,label:"Status",children:t.jsxs("span",{className:"flex items-center gap-1.5 text-sm text-green-600",children:[t.jsx("span",{className:"size-2 rounded-full bg-green-500"}),"Connected"]})})}),t.jsxs(p,{title:"Appearance",tabId:"appearance",activeTab:f,children:[t.jsx(l,{label:"Theme",children:t.jsx(b,{value:a.theme,onValueChange:e=>{const n=e;ye(n),o({theme:n})},children:t.jsx(g,{variant:"default",className:"gap-1.5 flex-wrap *:data-[slot=tab-indicator]:duration-0",children:xe.map(e=>t.jsxs(x,{value:e.value,className:"text-[11px] px-1 py-0.5 gap-0.5",children:[e.icon&&t.jsx(T,{icon:e.icon,size:13,strokeWidth:1.5}),t.jsx("span",{children:e.label})]},e.value))})})}),t.jsx(l,{label:"Accent Color",children:t.jsx("div",{className:"flex gap-0.5 flex-wrap",children:N.map(e=>{const n=a.accentColor===e.value;return t.jsx("button",{type:"button",onClick:()=>ce(e.value),className:I("flex items-center justify-center rounded-md p-1 transition-all duration-150",n?"scale-110":"hover:bg-primary-50 hover:scale-105"),children:t.jsx("span",{className:I("size-6 rounded-full transition-shadow duration-150",n?"ring-2 ring-offset-2":"border-2 border-primary-200"),style:{backgroundColor:e.accent,...n?{"--tw-ring-color":e.accent}:{}}})},e.value)})})}),t.jsx(l,{label:"Text Size",children:t.jsx(b,{value:U,onValueChange:le,children:t.jsx(g,{variant:"default",className:"gap-2 *:data-[slot=tab-indicator]:duration-0",children:H.map(e=>t.jsx(x,{value:e.value,children:t.jsx("span",{className:"tabular-nums text-xs",children:e.label})},e.value))})})}),t.jsx(l,{inline:!0,label:"Font",children:t.jsx(b,{value:a.fontFamily,onValueChange:ie,children:t.jsx(g,{variant:"default",className:"gap-1 *:data-[slot=tab-indicator]:duration-0",children:P.map(e=>t.jsx(x,{value:e.value,children:t.jsx("span",{className:"text-xs",style:{fontFamily:e.cssValue},children:e.label})},e.value))})})}),t.jsx(l,{inline:!0,label:"Density",children:t.jsx(b,{value:a.density,onValueChange:oe,children:t.jsx(g,{variant:"default",className:"gap-1 *:data-[slot=tab-indicator]:duration-0",children:G.map(e=>t.jsx(x,{value:e.value,children:t.jsx("span",{className:"text-xs",children:e.label})},e.value))})})}),t.jsx(l,{inline:!0,label:"Bubbles",children:t.jsx(b,{value:a.bubbleStyle,onValueChange:me,children:t.jsx(g,{variant:"default",className:"gap-1 *:data-[slot=tab-indicator]:duration-0",children:q.map(e=>t.jsx(x,{value:e.value,children:t.jsx("span",{className:"text-xs",children:e.label})},e.value))})})}),t.jsx(l,{inline:!0,label:"Chat Width",children:t.jsx(b,{value:a.chatWidth,onValueChange:de,children:t.jsx(g,{variant:"default",className:"gap-1 *:data-[slot=tab-indicator]:duration-0",children:V.map(e=>t.jsx(x,{value:e.value,children:t.jsx("span",{className:"text-xs",children:e.label})},e.value))})})}),t.jsx(l,{inline:!0,label:"Sidebar",children:t.jsx(b,{value:a.sidebarWidth,onValueChange:ue,children:t.jsx(g,{variant:"default",className:"gap-1 *:data-[slot=tab-indicator]:duration-0",children:E.map(e=>t.jsx(x,{value:e.value,children:t.jsx("span",{className:"text-xs",children:e.label})},e.value))})})})]}),t.jsxs(p,{title:"Chat",tabId:"chat",activeTab:f,children:[t.jsx(l,{inline:!0,label:"Show tool messages",children:t.jsx(u,{checked:a.showToolMessages,onCheckedChange:e=>o({showToolMessages:e})})}),t.jsx(l,{inline:!0,label:"Show reasoning blocks",children:t.jsx(u,{checked:a.showReasoningBlocks,onCheckedChange:e=>o({showReasoningBlocks:e})})}),t.jsx(l,{inline:!0,label:"Show search sources",children:t.jsx(u,{checked:a.showSearchSources,onCheckedChange:e=>o({showSearchSources:e})})}),t.jsx(l,{inline:!0,label:"Inline File Preview",description:"Make file paths in messages clickable to preview file contents",children:t.jsx(u,{checked:a.inlineFilePreview,onCheckedChange:e=>o({inlineFilePreview:e})})})]}),t.jsxs(p,{title:"Workspace",tabId:"workspace",activeTab:f,children:[t.jsx(l,{inline:!0,label:"File Explorer",description:"Browse and edit workspace files from the sidebar",children:t.jsx(u,{checked:(()=>{try{const e=localStorage.getItem("opencami-file-explorer");return e===null?!0:e==="true"}catch{return!0}})(),onCheckedChange:e=>{localStorage.setItem("opencami-file-explorer",String(e)),window.location.reload()}})}),t.jsx(l,{inline:!0,label:"Memory Viewer",description:"Browse and edit MEMORY.md and daily memory files",children:t.jsx(u,{checked:(()=>{try{const e=localStorage.getItem("opencami-memory-viewer");return e===null?!0:e==="true"}catch{return!0}})(),onCheckedChange:e=>{localStorage.setItem("opencami-memory-viewer",String(e)),window.location.reload()}})}),t.jsx(l,{inline:!0,label:"Agent Manager (Beta)",description:"Show Agent Manager in sidebar for creating and managing agents",children:t.jsx(u,{checked:(()=>{try{return localStorage.getItem("opencami-agent-manager")==="true"}catch{return!1}})(),onCheckedChange:e=>{localStorage.setItem("opencami-agent-manager",String(e)),window.location.reload()}})}),t.jsx(l,{inline:!0,label:"Skills Browser (Beta)",description:"Browse and install skills from ClawHub",children:t.jsx(u,{checked:(()=>{try{return localStorage.getItem("opencami-skills-browser")==="true"}catch{return!1}})(),onCheckedChange:e=>{localStorage.setItem("opencami-skills-browser",String(e)),window.location.reload()}})}),t.jsx(l,{inline:!0,label:"Cron Jobs Panel (Beta)",description:"Show Cron Jobs in sidebar for managing OpenClaw cron schedules",children:t.jsx(u,{checked:(()=>{try{return localStorage.getItem("opencami-cron-manager")==="true"}catch{return!1}})(),onCheckedChange:e=>{localStorage.setItem("opencami-cron-manager",String(e)),window.location.reload()}})}),t.jsx(l,{inline:!0,label:"Dashboard (Beta)",description:"Show Dashboard in sidebar with system and gateway widgets",children:t.jsx(u,{checked:(()=>{try{return localStorage.getItem("feature_dashboard")==="true"}catch{return!1}})(),onCheckedChange:e=>{localStorage.setItem("feature_dashboard",String(e)),window.location.reload()}})}),t.jsx(l,{inline:!0,label:"Artifacts Preview (Beta)",description:"Show live HTML/SVG preview panel when AI generates code",children:t.jsx(u,{checked:(()=>{try{return localStorage.getItem("feature_artifacts")==="true"}catch{return!1}})(),onCheckedChange:e=>{localStorage.setItem("feature_artifacts",String(e)),Re.getState().setEnabled(e)}})})]}),t.jsxs(p,{title:"Personas",tabId:"personas",activeTab:f,children:[F?t.jsx(l,{inline:!0,label:"Persona Picker",description:"Show persona picker in chat (20 personalities)",children:t.jsx(u,{checked:pe,onCheckedChange:ge})}):t.jsx(l,{inline:!0,label:"Persona Picker",description:"Install the Personas skill to unlock 20 AI personalities",children:t.jsx(u,{checked:!1,disabled:!0})}),!F&&t.jsx("div",{className:"pt-1",children:t.jsx("a",{href:"https://www.clawhub.ai/robbyczgw-cla/personas",target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary-600 hover:text-primary-900 hover:underline",children:"Get it on ClawHub →"})})]}),t.jsxs(p,{title:"Text-to-Speech",tabId:"voice",activeTab:f,children:[t.jsx(l,{inline:!0,label:"Voice Playback",description:"Add a 🔊 button to AI messages for text-to-speech",children:t.jsx(u,{checked:Y,onCheckedChange:he})}),t.jsx(l,{inline:!0,label:"TTS Provider",description:"Choose which service generates speech",children:t.jsxs("select",{value:W,onChange:e=>ae(e.target.value),className:"rounded-md border border-primary-200 bg-surface px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500",children:[t.jsx("option",{value:"auto",children:"Auto"}),t.jsx("option",{value:"elevenlabs",children:"ElevenLabs"}),t.jsx("option",{value:"openai",children:"OpenAI"}),t.jsx("option",{value:"edge",children:"Edge TTS (free)"})]})}),W==="openai"&&t.jsx(l,{inline:!0,label:"Voice",description:"OpenAI voice selection",children:t.jsx("select",{value:Z,onChange:e=>ne(e.target.value),className:"rounded-md border border-primary-200 bg-surface px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500",children:["alloy","echo","fable","onyx","nova","shimmer"].map(e=>t.jsx("option",{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})})]}),t.jsx(p,{title:"Speech-to-Text",tabId:"voice",activeTab:f,children:t.jsx(l,{inline:!0,label:"STT Provider",description:"Choose which service transcribes your voice",children:t.jsxs("select",{value:ee,onChange:e=>re(e.target.value),className:"rounded-md border border-primary-200 bg-surface px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500",children:[t.jsx("option",{value:"auto",children:"Auto"}),t.jsx("option",{value:"elevenlabs",children:"ElevenLabs"}),t.jsx("option",{value:"openai",children:"OpenAI"}),t.jsx("option",{value:"browser",children:"Browser (free)"})]})})}),t.jsxs(p,{title:"About",tabId:"about",activeTab:f,children:[t.jsx("div",{className:"text-sm text-primary-800",children:"OpenCami"}),t.jsxs("div",{className:"flex gap-4 pt-2",children:[t.jsx("a",{href:"https://github.com/robbyczgw-cla/opencami",target:"_blank",rel:"noopener noreferrer",className:"text-sm text-primary-600 hover:text-primary-900 hover:underline",children:"GitHub"}),t.jsx("a",{href:"https://docs.openclaw.ai",target:"_blank",rel:"noopener noreferrer",className:"text-sm text-primary-600 hover:text-primary-900 hover:underline",children:"OpenClaw docs"})]})]})]})]}),t.jsx("div",{className:"mt-2 flex justify-end",children:t.jsx(B,{onClick:m,children:"Close"})})]})})})}export{rt as SettingsDialog};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/skills-panel-D2uMdCHp.js","assets/main-xPlWrMhO.js","assets/button-D0n2Qsd_.js","assets/tabs-BEyU6TjN.js","assets/useControlled-CyT-lqbs.js","assets/useBaseUiId-ClbEYEil.js","assets/useCompositeItem-B_OxfJee.js","assets/DirectionContext-X-0CRn1O.js","assets/event-CHpdjYFR.js","assets/composite-GtKwZKbV.js","assets/CSPContext-CrlIQW7-.js"])))=>i.map(i=>d[i]);
2
- import{j as e,r as t,_ as r}from"./main-xPlWrMhO.js";const l=t.lazy(()=>r(()=>import("./skills-panel-D2uMdCHp.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(s=>({default:s.SkillsPanel})));function a(){return e.jsx(t.Suspense,{fallback:e.jsx("div",{className:"flex h-screen items-center justify-center text-primary-500 text-sm",children:"Loading…"}),children:e.jsx(l,{})})}export{a as component};
@@ -1,4 +0,0 @@
1
- const tsrStartManifest = () => ({ "routes": { "__root__": { "filePath": "/root/opencami/src/routes/__root.tsx", "children": ["/", "/agents", "/bots", "/connect", "/dashboard", "/files", "/memory", "/new", "/skills", "/api/agents", "/api/cron", "/api/follow-ups", "/api/history", "/api/llm-features", "/api/models", "/api/paths", "/api/personas", "/api/ping", "/api/send", "/api/sessions", "/api/skills", "/api/stream", "/api/stt", "/api/tts", "/chat/$sessionKey", "/api/dashboard/crons", "/api/dashboard/gateway", "/api/dashboard/system", "/api/files/delete", "/api/files/download", "/api/files/info", "/api/files/list", "/api/files/mkdir", "/api/files/read", "/api/files/rename", "/api/files/save", "/api/files/upload"], "preloads": ["/assets/main-xPlWrMhO.js"], "assets": [] }, "/": { "filePath": "/root/opencami/src/routes/index.tsx", "assets": [], "preloads": ["/assets/index-CNPHef4O.js"] }, "/agents": { "filePath": "/root/opencami/src/routes/agents.tsx", "assets": [], "preloads": ["/assets/agents-WqWjsymD.js"] }, "/bots": { "filePath": "/root/opencami/src/routes/bots.tsx", "assets": [], "preloads": ["/assets/bots-DNqiFT7w.js"] }, "/connect": { "filePath": "/root/opencami/src/routes/connect.tsx", "assets": [], "preloads": ["/assets/connect-vQWL0_11.js", "/assets/index-CTT0Y1ya.js", "/assets/button-D0n2Qsd_.js", "/assets/react-BgjQyJHw.js"] }, "/dashboard": { "filePath": "/root/opencami/src/routes/dashboard.tsx", "assets": [], "preloads": ["/assets/dashboard-Knwc61i1.js", "/assets/useQuery-k6EMRoMD.js"] }, "/files": { "filePath": "/root/opencami/src/routes/files.tsx", "assets": [], "preloads": ["/assets/files-BtR_gArr.js"] }, "/memory": { "filePath": "/root/opencami/src/routes/memory.tsx", "assets": [], "preloads": ["/assets/memory-BRGPq5t6.js"] }, "/new": { "filePath": "/root/opencami/src/routes/new.tsx", "assets": [], "preloads": ["/assets/new-DLlBm66g.js"] }, "/skills": { "filePath": "/root/opencami/src/routes/skills.tsx", "assets": [], "preloads": ["/assets/skills-DA9J_tsC.js"] }, "/api/agents": { "filePath": "/root/opencami/src/routes/api/agents.ts" }, "/api/cron": { "filePath": "/root/opencami/src/routes/api/cron.ts" }, "/api/follow-ups": { "filePath": "/root/opencami/src/routes/api/follow-ups.ts" }, "/api/history": { "filePath": "/root/opencami/src/routes/api/history.ts" }, "/api/llm-features": { "filePath": "/root/opencami/src/routes/api/llm-features.ts" }, "/api/models": { "filePath": "/root/opencami/src/routes/api/models.ts" }, "/api/paths": { "filePath": "/root/opencami/src/routes/api/paths.ts" }, "/api/personas": { "filePath": "/root/opencami/src/routes/api/personas.ts" }, "/api/ping": { "filePath": "/root/opencami/src/routes/api/ping.ts" }, "/api/send": { "filePath": "/root/opencami/src/routes/api/send.ts" }, "/api/sessions": { "filePath": "/root/opencami/src/routes/api/sessions.ts" }, "/api/skills": { "filePath": "/root/opencami/src/routes/api/skills.ts" }, "/api/stream": { "filePath": "/root/opencami/src/routes/api/stream.ts" }, "/api/stt": { "filePath": "/root/opencami/src/routes/api/stt.ts" }, "/api/tts": { "filePath": "/root/opencami/src/routes/api/tts.ts" }, "/chat/$sessionKey": { "filePath": "/root/opencami/src/routes/chat/$sessionKey.tsx", "assets": [], "preloads": ["/assets/_sessionKey-yNQ57svB.js", "/assets/useQuery-k6EMRoMD.js", "/assets/tooltip-CcIdgcV0.js", "/assets/button-D0n2Qsd_.js", "/assets/useMutation-eQUrsn-X.js", "/assets/use-file-explorer-state-CN_IJGcd.js", "/assets/useBaseUiId-ClbEYEil.js", "/assets/useControlled-CyT-lqbs.js", "/assets/useOnFirstRender-CR_o2MK_.js", "/assets/event-CHpdjYFR.js", "/assets/CSPContext-CrlIQW7-.js", "/assets/DirectionContext-X-0CRn1O.js", "/assets/menu-BnSEqetd.js", "/assets/opencami-logo-B_hLbomw.js", "/assets/proxy-BnlGpgC1.js", "/assets/markdown-3Js_RbUp.js", "/assets/index-CTT0Y1ya.js", "/assets/react-BgjQyJHw.js"] }, "/api/dashboard/crons": { "filePath": "/root/opencami/src/routes/api/dashboard/crons.ts" }, "/api/dashboard/gateway": { "filePath": "/root/opencami/src/routes/api/dashboard/gateway.ts" }, "/api/dashboard/system": { "filePath": "/root/opencami/src/routes/api/dashboard/system.ts" }, "/api/files/delete": { "filePath": "/root/opencami/src/routes/api/files/delete.ts" }, "/api/files/download": { "filePath": "/root/opencami/src/routes/api/files/download.ts" }, "/api/files/info": { "filePath": "/root/opencami/src/routes/api/files/info.ts" }, "/api/files/list": { "filePath": "/root/opencami/src/routes/api/files/list.ts" }, "/api/files/mkdir": { "filePath": "/root/opencami/src/routes/api/files/mkdir.ts" }, "/api/files/read": { "filePath": "/root/opencami/src/routes/api/files/read.ts" }, "/api/files/rename": { "filePath": "/root/opencami/src/routes/api/files/rename.ts" }, "/api/files/save": { "filePath": "/root/opencami/src/routes/api/files/save.ts" }, "/api/files/upload": { "filePath": "/root/opencami/src/routes/api/files/upload.ts" } }, "clientEntry": "/assets/main-xPlWrMhO.js" });
2
- export {
3
- tsrStartManifest
4
- };
@@ -1,275 +0,0 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useState, useRef, useEffect, memo } from "react";
3
- import { HugeiconsIcon } from "@hugeicons/react";
4
- import { Loading03Icon, ArrowRight01Icon } from "@hugeicons/core-free-icons";
5
- import { c as cn } from "./button-kI8fEIZQ.js";
6
- import "@base-ui/react/merge-props";
7
- import "@base-ui/react/use-render";
8
- import "class-variance-authority";
9
- import "clsx";
10
- import "tailwind-merge";
11
- const CODE_PATTERNS = [
12
- /```[\s\S]*?```/g,
13
- /`[^`]+`/g,
14
- /\b(function|const|let|var|class|import|export|return|async|await)\b/g
15
- ];
16
- function extractTopics(text) {
17
- const topics = [];
18
- const quoted = text.match(/"([^"]+)"|'([^']+)'/g);
19
- if (quoted) {
20
- topics.push(...quoted.map((q) => q.replace(/['"]/g, "")));
21
- }
22
- const capitalized = text.match(/\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*\b/g);
23
- if (capitalized) {
24
- topics.push(
25
- ...capitalized.filter((t) => !["I", "The", "A", "An", "This"].includes(t))
26
- );
27
- }
28
- const backticked = text.match(/`([^`]+)`/g);
29
- if (backticked) {
30
- topics.push(...backticked.map((t) => t.replace(/`/g, "")));
31
- }
32
- return [...new Set(topics)].slice(0, 5);
33
- }
34
- function hasCode(text) {
35
- return CODE_PATTERNS.some((pattern) => pattern.test(text));
36
- }
37
- function hasList(text) {
38
- return /^[\s]*[-*•\d]+[.)\s]/m.test(text) || /\b(first|second|third|1\.|2\.|3\.)/i.test(text);
39
- }
40
- function hasAlternatives(text) {
41
- return /\b(alternatively|another|other option|could also|you might|consider)\b/i.test(text);
42
- }
43
- function isExplanatory(text) {
44
- return /\b(because|since|due to|reason|why|how|what|when|where)\b/i.test(text);
45
- }
46
- function hasCaveats(text) {
47
- return /\b(however|but|note|warning|caution|careful|important|keep in mind|be aware)\b/i.test(text);
48
- }
49
- function generateHeuristicFollowUps(responseText) {
50
- const suggestions = [];
51
- const topics = extractTopics(responseText);
52
- if (hasCode(responseText)) {
53
- suggestions.push({
54
- text: "Can you explain this code step by step?",
55
- type: "clarify"
56
- });
57
- suggestions.push({
58
- text: "How would I modify this for my use case?",
59
- type: "actionable"
60
- });
61
- }
62
- if (hasList(responseText)) {
63
- suggestions.push({
64
- text: "Can you elaborate on the first point?",
65
- type: "expand"
66
- });
67
- suggestions.push({
68
- text: "Which of these is most important to start with?",
69
- type: "actionable"
70
- });
71
- }
72
- if (hasAlternatives(responseText)) {
73
- suggestions.push({
74
- text: "What are the pros and cons of each approach?",
75
- type: "alternative"
76
- });
77
- suggestions.push({
78
- text: "Which option would you recommend and why?",
79
- type: "clarify"
80
- });
81
- }
82
- if (isExplanatory(responseText) && suggestions.length < 3) {
83
- suggestions.push({
84
- text: "Can you give me a practical example?",
85
- type: "example"
86
- });
87
- }
88
- if (hasCaveats(responseText) && suggestions.length < 3) {
89
- suggestions.push({
90
- text: "What potential issues should I watch out for?",
91
- type: "clarify"
92
- });
93
- }
94
- if (topics.length > 0 && suggestions.length < 3) {
95
- const topic = topics[0];
96
- suggestions.push({
97
- text: `Tell me more about ${topic}`,
98
- type: "expand"
99
- });
100
- }
101
- const fallbacks = [
102
- { text: "Can you give me a concrete example?", type: "example" },
103
- { text: "What would be the next steps?", type: "actionable" },
104
- { text: "How does this work in practice?", type: "expand" },
105
- { text: "Are there any common mistakes to avoid?", type: "clarify" },
106
- { text: "Can you simplify this explanation?", type: "clarify" }
107
- ];
108
- const usedTypes = new Set(suggestions.map((s) => s.type));
109
- for (const fallback of fallbacks) {
110
- if (suggestions.length >= 3) break;
111
- if (!usedTypes.has(fallback.type)) {
112
- suggestions.push(fallback);
113
- usedTypes.add(fallback.type);
114
- }
115
- }
116
- for (const fallback of fallbacks) {
117
- if (suggestions.length >= 3) break;
118
- if (!suggestions.some((s) => s.text === fallback.text)) {
119
- suggestions.push(fallback);
120
- }
121
- }
122
- return suggestions.slice(0, 3);
123
- }
124
- function getHeuristicFollowUpTexts(responseText) {
125
- return generateHeuristicFollowUps(responseText).map((s) => s.text);
126
- }
127
- async function fetchFollowUpsViaOpenclaw(conversationContext, signal) {
128
- const res = await fetch("/api/llm-features", {
129
- method: "POST",
130
- headers: {
131
- "Content-Type": "application/json"
132
- },
133
- body: JSON.stringify({
134
- action: "followups",
135
- conversationContext
136
- }),
137
- signal
138
- });
139
- if (!res.ok) {
140
- throw new Error(`API error: ${res.status}`);
141
- }
142
- const data = await res.json();
143
- if (data.ok && Array.isArray(data.suggestions) && data.suggestions.length > 0) {
144
- return data.suggestions;
145
- }
146
- return [];
147
- }
148
- function useFollowUpSuggestions(responseText, contextSummary, options) {
149
- const { minResponseLength = 50, heuristicsOnly = false } = options ?? {};
150
- const [suggestions, setSuggestions] = useState([]);
151
- const [isLoading, setIsLoading] = useState(false);
152
- const [error, setError] = useState(null);
153
- const [source, setSource] = useState(null);
154
- const lastResponseRef = useRef("");
155
- const abortControllerRef = useRef(null);
156
- useEffect(() => {
157
- if (!responseText || responseText.trim().length < minResponseLength) {
158
- setSuggestions([]);
159
- setSource(null);
160
- setIsLoading(false);
161
- setError(null);
162
- return;
163
- }
164
- const responseKey = responseText.slice(0, 200) + responseText.length;
165
- if (responseKey === lastResponseRef.current) {
166
- return;
167
- }
168
- lastResponseRef.current = responseKey;
169
- if (abortControllerRef.current) {
170
- abortControllerRef.current.abort();
171
- }
172
- if (heuristicsOnly) {
173
- const heuristicSuggestions2 = getHeuristicFollowUpTexts(responseText);
174
- setSuggestions(heuristicSuggestions2);
175
- setSource("heuristic");
176
- setIsLoading(false);
177
- setError(null);
178
- return;
179
- }
180
- const controller = new AbortController();
181
- abortControllerRef.current = controller;
182
- setIsLoading(true);
183
- setError(null);
184
- const heuristicSuggestions = getHeuristicFollowUpTexts(responseText);
185
- setSuggestions(heuristicSuggestions);
186
- setSource("heuristic");
187
- const conversationContext = contextSummary ? `Context: ${contextSummary}
188
-
189
- Assistant's response:
190
- ${responseText.slice(0, 2e3)}` : `Assistant's response:
191
- ${responseText.slice(0, 2e3)}`;
192
- fetchFollowUpsViaOpenclaw(conversationContext, controller.signal).then((openclawSuggestions) => {
193
- if (controller.signal.aborted) return;
194
- if (openclawSuggestions.length > 0) {
195
- setSuggestions(openclawSuggestions);
196
- setSource("openclaw");
197
- }
198
- setIsLoading(false);
199
- }).catch((err) => {
200
- if (controller.signal.aborted) return;
201
- setError(err instanceof Error ? err.message : String(err));
202
- setIsLoading(false);
203
- });
204
- }, [responseText, contextSummary, minResponseLength, heuristicsOnly]);
205
- return { suggestions, isLoading, error, source };
206
- }
207
- function FollowUpSuggestionsComponent({
208
- responseText,
209
- contextSummary,
210
- onSuggestionClick,
211
- disabled = false,
212
- className
213
- }) {
214
- const { suggestions, isLoading, source } = useFollowUpSuggestions(
215
- responseText,
216
- contextSummary,
217
- {
218
- minResponseLength: 50
219
- }
220
- );
221
- if (suggestions.length === 0 && !isLoading) {
222
- return null;
223
- }
224
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2 mt-3", className), children: [
225
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-xs text-primary-500", children: [
226
- /* @__PURE__ */ jsx("span", { className: "text-primary-400", children: "✨" }),
227
- /* @__PURE__ */ jsx("span", { children: isLoading ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1", children: [
228
- "Thinking of follow-ups",
229
- /* @__PURE__ */ jsx(
230
- HugeiconsIcon,
231
- {
232
- icon: Loading03Icon,
233
- size: 12,
234
- strokeWidth: 2,
235
- className: "animate-spin text-primary-400"
236
- }
237
- )
238
- ] }) : source === "openclaw" ? "AI suggestions" : "Follow-up suggestions" })
239
- ] }),
240
- /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: suggestions.map((suggestion, index) => /* @__PURE__ */ jsxs(
241
- "button",
242
- {
243
- type: "button",
244
- disabled,
245
- onClick: () => onSuggestionClick(suggestion),
246
- className: cn(
247
- "group inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full",
248
- "text-sm text-primary-700 bg-primary-50 border border-primary-200",
249
- "hover:bg-primary-100 hover:border-primary-300 hover:text-primary-900",
250
- "focus:outline-none focus:ring-2 focus:ring-primary-500/20 focus:ring-offset-1",
251
- "transition-all duration-150 cursor-pointer",
252
- "disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-primary-50 disabled:hover:border-primary-200",
253
- isLoading && "opacity-75"
254
- ),
255
- children: [
256
- /* @__PURE__ */ jsx("span", { children: suggestion }),
257
- /* @__PURE__ */ jsx(
258
- HugeiconsIcon,
259
- {
260
- icon: ArrowRight01Icon,
261
- size: 14,
262
- strokeWidth: 2,
263
- className: "text-primary-400 group-hover:text-primary-600 group-hover:translate-x-0.5 transition-all duration-150"
264
- }
265
- )
266
- ]
267
- },
268
- `${index}-${suggestion.slice(0, 20)}`
269
- )) })
270
- ] });
271
- }
272
- const MemoizedFollowUpSuggestions = memo(FollowUpSuggestionsComponent);
273
- export {
274
- MemoizedFollowUpSuggestions as FollowUpSuggestions
275
- };