@coffer-org/web 2.4.4 → 2.4.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.
@@ -13,4 +13,4 @@ import{r as e,t}from"./rolldown-runtime-QTnfLwEv.js";import{a as n,t as r}from".
13
13
  `});++r<e.length;)r&&n.push({type:`text`,value:`
14
14
  `}),n.push(e[r]);return t&&e.length>0&&n.push({type:`text`,value:`
15
15
  `}),n}function Yt(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function Xt(e,t){let n=Wt(e,t),r=n.one(e,void 0),i=Ht(n),a=Array.isArray(r)?{type:`root`,children:r}:r||{type:`root`,children:[]};return i&&(S(`children`in a),a.children.push({type:`text`,value:`
16
- `},i)),a}function Zt(e,t){return e&&`run`in e?async function(n,r){let i=Xt(n,{file:r,...t});await e.run(i,r)}:function(n,r){return Xt(n,{file:r,...e||t})}}var K=l(),Qt=[],$t={allowDangerousHtml:!0},en=/^(https?|ircs?|mailto|xmpp)$/i,tn=[{from:`astPlugins`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowDangerousHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowNode`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowElement`},{from:`allowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowedElements`},{from:`className`,id:`remove-classname`},{from:`disallowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`disallowedElements`},{from:`escapeHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`includeElementIndex`,id:`#remove-includeelementindex`},{from:`includeNodeIndex`,id:`change-includenodeindex-to-includeelementindex`},{from:`linkTarget`,id:`remove-linktarget`},{from:`plugins`,id:`change-plugins-to-remarkplugins`,to:`remarkPlugins`},{from:`rawSourcePos`,id:`#remove-rawsourcepos`},{from:`renderers`,id:`change-renderers-to-components`,to:`components`},{from:`source`,id:`change-source-to-children`,to:`children`},{from:`sourcePos`,id:`#remove-sourcepos`},{from:`transformImageUri`,id:`#add-urltransform`,to:`urlTransform`},{from:`transformLinkUri`,id:`#add-urltransform`,to:`urlTransform`}];function nn(e){let t=rn(e),n=an(e);return on(t.runSync(t.parse(n),n),e)}function rn(e){let t=e.rehypePlugins||Qt,n=e.remarkPlugins||Qt,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...$t}:$t;return O().use(ie).use(n).use(Zt,r).use(t)}function an(e){let t=e.children||``,n=new re;return typeof t==`string`?n.value=t:x("Unexpected value `"+t+"` for `children` prop, expected `string`"),n}function on(e,t){let n=t.allowedElements,r=t.allowElement,i=t.components,a=t.disallowedElements,o=t.skipHtml,s=t.unwrapDisallowed,c=t.urlTransform||sn;for(let e of tn)Object.hasOwn(t,e.from)&&x("Unexpected `"+e.from+"` prop, "+(e.to?"use `"+e.to+"` instead":`remove it`)+` (see <https://github.com/remarkjs/react-markdown/blob/main/changelog.md#`+e.id+`> for more info)`);return n&&a&&x("Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other"),A(e,l),Ie(e,{Fragment:K.Fragment,components:i,ignoreInvalidStyle:!0,jsx:K.jsx,jsxs:K.jsxs,passKeys:!0,passNode:!0});function l(e,t,i){if(e.type===`raw`&&i&&typeof t==`number`)return o?i.children.splice(t,1):i.children[t]={type:`text`,value:e.value},t;if(e.type===`element`){let t;for(t in z)if(Object.hasOwn(z,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=z[t];(r===null||r.includes(e.tagName))&&(e.properties[t]=c(String(n||``),t,e))}}if(e.type===`element`){let o=n?!n.includes(e.tagName):a?a.includes(e.tagName):!1;if(!o&&r&&typeof t==`number`&&(o=!r(e,t,i)),o&&i&&typeof t==`number`)return s&&e.children?i.children.splice(t,1,...e.children):i.children.splice(t,1),t}}}function sn(e){let t=e.indexOf(`:`),n=e.indexOf(`?`),r=e.indexOf(`#`),i=e.indexOf(`/`);return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||en.test(e.slice(0,t))?e:``}var cn=/^[A-Za-z0-9._~%-]+$/;function ln(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i={};for(let e=0;e<r.length;e++){let t=r[e];if(t===`*`)return n.length>=e?i:null;let a=n[e];if(a===void 0)return null;if(t.startsWith(`:`)){if(!cn.test(a))return null;i[t.slice(1)]=a}else if(t!==a)return null}return n.length===r.length?i:null}function un(e,t,n,r=[]){let i=e.trim();if(!i||i.startsWith(`//`)||!i.startsWith(`/`)&&!/^https?:\/\//i.test(i))return{kind:`text`};let a;try{a=new URL(i,t)}catch{return{kind:`text`}}if(a.origin!==t)return{kind:`external`,href:a.href};for(let e of n){let t=ln(a.pathname,e.pattern);if(t)return r.length&&t.library!==void 0&&t.shelf!==void 0&&!r.some(e=>e.library===t.library&&e.shelf===t.shelf)?{kind:`text`}:{kind:`internal`,to:`${a.pathname}${a.search}${a.hash}`}}return{kind:`text`}}var q=o(),dn=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/chat-nav.tsx`,fn=(0,M.createContext)(()=>{});function pn({onNavigate:e,children:t}){return(0,q.jsxDEV)(fn.Provider,{value:e,children:t},void 0,!1,{fileName:dn,lineNumber:9,columnNumber:10},this)}function mn(){return(0,M.useContext)(fn)}var J=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/chat-markdown.tsx`;function hn({text:e,className:t}){return(0,q.jsxDEV)(`div`,{className:t,children:(0,q.jsxDEV)(nn,{remarkPlugins:[ae],components:{a:gn},children:e},void 0,!1,{fileName:J,lineNumber:18,columnNumber:7},this)},void 0,!1,{fileName:J,lineNumber:17,columnNumber:5},this)}function gn({href:e,children:t}){let n=mn(),r=a(),i=[...u(),...y().map(e=>({pattern:`/${e.path}`}))],o=un(e??``,window.location.origin,i,f());return o.kind===`internal`?(0,q.jsxDEV)(`a`,{href:o.to,onClick:e=>{e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),n(),r(o.to))},children:t},void 0,!1,{fileName:J,lineNumber:33,columnNumber:7},this):o.kind===`external`?(0,q.jsxDEV)(`a`,{href:o.href,target:`_blank`,rel:`noopener noreferrer`,children:t},void 0,!1,{fileName:J,lineNumber:50,columnNumber:7},this):(0,q.jsxDEV)(q.Fragment,{children:t},void 0,!1,{fileName:J,lineNumber:55,columnNumber:10},this)}var Y=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatMessages.tsx`;function _n({messages:e,pending:t,pendingReasoning:n}){let{t:i}=r(),a=(0,M.useRef)(null);return(0,M.useEffect)(()=>{let e=a.current;e&&(e.scrollTop=e.scrollHeight)},[e.length,t]),!e.length&&t===null&&n===null?(0,q.jsxDEV)(`div`,{className:`flex-1 grid place-items-center text-muted text-sm`,children:i(`webchat.empty`)},void 0,!1,{fileName:Y,lineNumber:20,columnNumber:12},this):(0,q.jsxDEV)(`div`,{ref:a,"data-chat-list":!0,className:`flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-3`,children:[e.map(e=>(0,q.jsxDEV)(vn,{role:e.role,text:e.text,reasoning:e.reasoning,attachments:e.attachments},e.msgId,!1,{fileName:Y,lineNumber:27,columnNumber:9},this)),t!==null&&(0,q.jsxDEV)(vn,{role:`assistant`,text:t||i(`webchat.thinking`),reasoning:n},void 0,!1,{fileName:Y,lineNumber:29,columnNumber:28},this)]},void 0,!0,{fileName:Y,lineNumber:25,columnNumber:5},this)}var vn=(0,M.memo)(function({role:e,text:t,reasoning:n,attachments:i}){let{t:a}=r();return e===`user`?(0,q.jsxDEV)(`div`,{className:`self-end max-w-[85%] rounded-2xl rounded-br-sm bg-accent/15 px-3 py-2 text-sm whitespace-pre-wrap break-words`,children:[i?.length?(0,q.jsxDEV)(`div`,{className:`mb-1.5 flex flex-wrap gap-1`,children:i.map(e=>(0,q.jsxDEV)(`span`,{className:`inline-flex max-w-full items-center rounded-md bg-bg/60 px-1.5 py-0.5 text-xs`,title:e.name,children:e.label??e.name},e.name,!1,{fileName:Y,lineNumber:47,columnNumber:37},this))},void 0,!1,{fileName:Y,lineNumber:46,columnNumber:11},this):null,t]},void 0,!0,{fileName:Y,lineNumber:44,columnNumber:7},this):(0,q.jsxDEV)(`div`,{className:`self-start max-w-[95%] min-w-0 rounded-2xl rounded-bl-sm bg-elevated px-3 py-2 text-sm break-words`,children:[n?(0,q.jsxDEV)(`details`,{className:`mb-2 rounded-lg border border-border px-2 py-1`,children:[(0,q.jsxDEV)(`summary`,{className:`cursor-pointer select-none text-xs text-muted`,children:a(`webchat.reasoning`)},void 0,!1,{fileName:Y,lineNumber:59,columnNumber:11},this),(0,q.jsxDEV)(hn,{text:n,className:`md-static mt-1 text-xs text-muted`},void 0,!1,{fileName:Y,lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:Y,lineNumber:58,columnNumber:9},this):null,(0,q.jsxDEV)(hn,{text:t,className:`md-static`},void 0,!1,{fileName:Y,lineNumber:63,columnNumber:7},this)]},void 0,!0,{fileName:Y,lineNumber:55,columnNumber:5},this)}),X=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatComposer.tsx`;function yn({streaming:e,onSend:t,onStop:n,attachments:i,uploading:a,uploadError:o,uploadProgress:s,canRetryUpload:l,onRetryUpload:u,onPickFiles:f,onRemoveAttachment:p}){let{t:g}=r(),[_,y]=(0,M.useState)(``);function b(){!_.trim()||e||t(_.trim(),i)&&y(``)}return(0,q.jsxDEV)(`div`,{className:`flex shrink-0 flex-col gap-2 border-t border-border p-2`,children:[(i.length>0||a||o)&&(0,q.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-1.5 px-1`,"data-chat-attachments":!0,children:[i.map((e,t)=>(0,q.jsxDEV)(`span`,{className:`inline-flex min-w-0 max-w-full items-center gap-1 rounded-md bg-elevated px-2 py-1 text-xs`,children:[(0,q.jsxDEV)(d,{size:13,className:`shrink-0 text-muted`},void 0,!1,{fileName:X,lineNumber:50,columnNumber:15},this),(0,q.jsxDEV)(`span`,{className:`max-w-48 truncate`,children:e.label??e.name},void 0,!1,{fileName:X,lineNumber:51,columnNumber:15},this),(0,q.jsxDEV)(`button`,{type:`button`,"aria-label":g(`webchat.removeAttachment`,{name:e.label??e.name}),className:`shrink-0 rounded p-0.5 text-muted hover:text-danger`,onClick:()=>p(t),children:(0,q.jsxDEV)(c,{size:13},void 0,!1,{fileName:X,lineNumber:58,columnNumber:17},this)},void 0,!1,{fileName:X,lineNumber:52,columnNumber:15},this)]},`${e.name}-${t}`,!0,{fileName:X,lineNumber:49,columnNumber:13},this)),a&&(0,q.jsxDEV)(`div`,{className:`flex min-w-32 flex-1 items-center gap-2`,"aria-label":g(`webchat.uploading`),children:[(0,q.jsxDEV)(h,{size:14,className:`shrink-0 animate-spin text-muted`},void 0,!1,{fileName:X,lineNumber:64,columnNumber:15},this),(0,q.jsxDEV)(`div`,{role:`progressbar`,"aria-label":g(`webchat.uploadProgress`),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":s,className:`h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-border`,children:(0,q.jsxDEV)(`div`,{className:`h-full rounded-full bg-accent transition-[width]`,style:{width:`${s}%`}},void 0,!1,{fileName:X,lineNumber:66,columnNumber:17},this)},void 0,!1,{fileName:X,lineNumber:65,columnNumber:15},this),(0,q.jsxDEV)(`span`,{className:`text-xs tabular-nums text-muted`,children:[s,`%`]},void 0,!0,{fileName:X,lineNumber:68,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:63,columnNumber:13},this),o&&(0,q.jsxDEV)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2 text-xs text-danger`,children:[(0,q.jsxDEV)(`span`,{className:`min-w-0 flex-1`,children:g(o)},void 0,!1,{fileName:X,lineNumber:73,columnNumber:15},this),l&&(0,q.jsxDEV)(`button`,{type:`button`,className:`inline-flex shrink-0 items-center gap-1 rounded px-1.5 py-0.5 font-medium text-accent hover:bg-elevated`,onClick:u,children:[(0,q.jsxDEV)(m,{size:12},void 0,!1,{fileName:X,lineNumber:76,columnNumber:19},this),` `,g(`webchat.retryUpload`)]},void 0,!0,{fileName:X,lineNumber:75,columnNumber:17},this)]},void 0,!0,{fileName:X,lineNumber:72,columnNumber:13},this)]},void 0,!0,{fileName:X,lineNumber:47,columnNumber:9},this),(0,q.jsxDEV)(`div`,{className:`flex items-end gap-2`,children:[(0,q.jsxDEV)(`label`,{"aria-label":g(`webchat.attach`),className:`cursor-pointer rounded-lg p-2 text-muted hover:bg-elevated hover:text-accent ${a?`pointer-events-none opacity-60`:``}`,children:[(0,q.jsxDEV)(ue,{size:18},void 0,!1,{fileName:X,lineNumber:88,columnNumber:11},this),(0,q.jsxDEV)(`input`,{type:`file`,multiple:!0,className:`hidden`,disabled:a,onChange:e=>{e.target.files?.length&&f(e.target.files),e.currentTarget.value=``}},void 0,!1,{fileName:X,lineNumber:89,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:84,columnNumber:9},this),(0,q.jsxDEV)(`textarea`,{className:`flex-1 resize-none rounded-lg border border-border bg-bg px-3 py-2 text-sm max-h-32`,rows:1,value:_,placeholder:g(`webchat.placeholder`),onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),b())}},void 0,!1,{fileName:X,lineNumber:100,columnNumber:9},this),e?(0,q.jsxDEV)(`button`,{"aria-label":g(`webchat.stop`),className:`rounded-lg p-2 hover:bg-elevated`,onClick:n,children:(0,q.jsxDEV)(v,{size:18},void 0,!1,{fileName:X,lineNumber:116,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:115,columnNumber:11},this):(0,q.jsxDEV)(`button`,{"aria-label":g(`webchat.send`),className:`rounded-lg p-2 hover:bg-elevated`,onClick:b,children:(0,q.jsxDEV)(de,{size:18},void 0,!1,{fileName:X,lineNumber:120,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:119,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:83,columnNumber:7},this)]},void 0,!0,{fileName:X,lineNumber:45,columnNumber:5},this)}var Z=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatThreadList.tsx`;function bn({threads:e,activeId:t,onOpen:n,onNew:i,className:a=`w-[220px] shrink-0`}){let{t:o}=r();return(0,q.jsxDEV)(`aside`,{"aria-label":o(`webchat.threads`),className:`${a} border-r border-border flex flex-col`,children:[(0,q.jsxDEV)(`button`,{className:`flex items-center gap-2 px-3 py-2 text-sm hover:bg-elevated`,onClick:i,children:[(0,q.jsxDEV)(_,{size:16},void 0,!1,{fileName:Z,lineNumber:23,columnNumber:9},this),` `,o(`webchat.newConversation`)]},void 0,!0,{fileName:Z,lineNumber:22,columnNumber:7},this),(0,q.jsxDEV)(`div`,{className:`flex-1 overflow-y-auto`,children:e.map(e=>(0,q.jsxDEV)(`button`,{onClick:()=>n(e.convId),className:`block w-full truncate px-3 py-2 text-left text-sm hover:bg-elevated ${e.convId===t?`bg-elevated font-medium`:``}`,children:e.title||o(`webchat.newConversation`)},e.convId,!1,{fileName:Z,lineNumber:27,columnNumber:11},this))},void 0,!1,{fileName:Z,lineNumber:25,columnNumber:7},this)]},void 0,!0,{fileName:Z,lineNumber:21,columnNumber:5},this)}var Q=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatWidget.tsx`,xn=25*1024*1024;function $(e){return Array.from(e.dataTransfer.types).includes(`Files`)}function Sn({children:e,onFiles:t,className:n}){let{t:i}=r(),[a,o]=(0,M.useState)(!1),s=(0,M.useRef)(0);function c(e){$(e)&&(e.preventDefault(),s.current+=1,o(!0))}function l(e){$(e)&&(e.preventDefault(),s.current=Math.max(0,s.current-1),s.current===0&&o(!1))}function u(e){$(e)&&(e.preventDefault(),s.current=0,o(!1),t(Array.from(e.dataTransfer.files)))}return(0,q.jsxDEV)(`div`,{className:n,onDragEnter:c,onDragLeave:l,onDragOver:e=>{$(e)&&(e.preventDefault(),e.dataTransfer.dropEffect=`copy`)},onDrop:u,children:[e,a&&(0,q.jsxDEV)(`div`,{"data-chat-drop-overlay":!0,"data-testid":`chat-drop-overlay`,className:`pointer-events-none absolute inset-0 z-50 grid place-items-center bg-surface/95 p-6 text-center backdrop-blur-sm`,children:(0,q.jsxDEV)(`div`,{className:`flex h-full w-full flex-col items-center justify-center rounded-2xl border-2 border-dashed border-accent bg-accent/10 text-accent`,children:[(0,q.jsxDEV)(g,{size:34},void 0,!1,{fileName:Q,lineNumber:71,columnNumber:13},this),(0,q.jsxDEV)(`span`,{className:`mt-3 text-base font-medium`,children:i(`webchat.dropFiles`)},void 0,!1,{fileName:Q,lineNumber:72,columnNumber:13},this),(0,q.jsxDEV)(`span`,{className:`mt-1 text-xs text-muted`,children:i(`webchat.dropFilesHint`)},void 0,!1,{fileName:Q,lineNumber:73,columnNumber:13},this)]},void 0,!0,{fileName:Q,lineNumber:70,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:69,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:51,columnNumber:5},this)}function Cn(e){return e?`panel`:`bubble`}function wn(){let{t:e}=r(),t=_e(),n=ve(),[i,a]=(0,M.useState)(`bubble`),[o,s]=(0,M.useState)(!1),[l,u]=(0,M.useState)([]),[d,f]=(0,M.useState)(!1),[m,h]=(0,M.useState)(0),[g,v]=(0,M.useState)(null),[y,x]=(0,M.useState)([]),S=p(`sm`,640),C=p(`nav`,768),ne=(0,M.useCallback)(()=>{a(Cn(C))},[C]),w=(0,M.useRef)(null),T=(0,M.useRef)(`bubble`);(0,M.useEffect)(()=>{if(i!==`modal`)return;let e=e=>{e.key===`Escape`&&a(`panel`)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]),(0,M.useEffect)(()=>{i===`panel`&&T.current===`modal`&&w.current?.focus(),i!==`modal`&&s(!1),T.current=i},[i]),(0,M.useEffect)(()=>{if(i!==`modal`)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[i]);let E=i!==`bubble`;(0,M.useEffect)(()=>{E&&t.loadThreads()},[E,t.loadThreads]);function D(){t.newConversation(),u([]),v(null),x([]),s(!1)}let O=(0,M.useCallback)(async e=>{if(!e.length)return;v(null),x([]),f(!0),h(0);let t=[],n=[],r=null;for(let i of e){if(i.size>xn){r??=`webchat.uploadTooLarge`;continue}try{h(0);let e=await b(i,h);e?t.push({...e,label:i.name}):(n.push(i),r??=`webchat.uploadFailed`)}catch{n.push(i),r??=`webchat.uploadFailed`}}t.length&&u(e=>[...e,...t]),f(!1),h(0),x(n),r&&v(r)},[]),k=(0,M.useCallback)(()=>{y.length&&O(y)},[O,y]),re=t.messages.length>0||t.pending!==null,A=(0,q.jsxDEV)(`div`,{className:`flex shrink-0 items-center justify-between border-b border-border px-3 py-2`,children:[(0,q.jsxDEV)(`span`,{className:`text-sm font-medium`,children:e(`webchat.title`)},void 0,!1,{fileName:Q,lineNumber:204,columnNumber:7},this),(0,q.jsxDEV)(`div`,{className:`flex items-center gap-1`,children:[i===`modal`&&!S&&(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.threads`),"aria-expanded":o,className:`rounded p-1 hover:bg-elevated`,onClick:()=>s(e=>!e),children:(0,q.jsxDEV)(oe,{size:16},void 0,!1,{fileName:Q,lineNumber:215,columnNumber:13},this)},void 0,!1,{fileName:Q,lineNumber:209,columnNumber:11},this),re&&(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.newConversation`),className:`rounded p-1 hover:bg-elevated`,onClick:D,children:(0,q.jsxDEV)(_,{size:16},void 0,!1,{fileName:Q,lineNumber:224,columnNumber:13},this)},void 0,!1,{fileName:Q,lineNumber:223,columnNumber:11},this),(0,q.jsxDEV)(`button`,{ref:w,"aria-label":e(i===`modal`?`webchat.collapse`:`webchat.expand`),className:`rounded p-1 hover:bg-elevated`,onClick:()=>a(i===`modal`?`panel`:`modal`),children:i===`modal`?(0,q.jsxDEV)(le,{size:16},void 0,!1,{fileName:Q,lineNumber:233,columnNumber:31},this):(0,q.jsxDEV)(se,{size:16},void 0,!1,{fileName:Q,lineNumber:233,columnNumber:57},this)},void 0,!1,{fileName:Q,lineNumber:227,columnNumber:9},this),(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.close`),className:`rounded p-1 hover:bg-elevated`,onClick:()=>a(`bubble`),children:(0,q.jsxDEV)(c,{size:16},void 0,!1,{fileName:Q,lineNumber:236,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:235,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:205,columnNumber:7},this)]},void 0,!0,{fileName:Q,lineNumber:203,columnNumber:5},this),j=(0,q.jsxDEV)(pn,{onNavigate:ne,children:(0,q.jsxDEV)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[t.error&&(0,q.jsxDEV)(`div`,{className:`px-3 py-2 text-sm text-danger`,children:e(`webchat.error`,{message:t.error})},void 0,!1,{fileName:Q,lineNumber:247,columnNumber:24},this),(0,q.jsxDEV)(_n,{messages:t.messages,pending:t.pending,pendingReasoning:t.pendingReasoning},void 0,!1,{fileName:Q,lineNumber:248,columnNumber:9},this),(0,q.jsxDEV)(yn,{streaming:t.pending!==null,attachments:l,uploading:d,uploadProgress:m,uploadError:g,canRetryUpload:y.length>0&&!d,onRetryUpload:k,onPickFiles:e=>void O(Array.from(e)),onRemoveAttachment:e=>u(t=>t.filter((t,n)=>n!==e)),onSend:(e,r)=>{let i=r.length?t.send(e,n,r):t.send(e,n);return i&&(u([]),v(null),x([])),i},onStop:t.stop},void 0,!1,{fileName:Q,lineNumber:249,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:246,columnNumber:7},this)},void 0,!1,{fileName:Q,lineNumber:243,columnNumber:5},this);if(i===`bubble`)return(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.open`),onClick:()=>a(S?`panel`:`modal`),className:`fixed bottom-20 right-4 z-40 grid h-14 w-14 place-items-center rounded-full bg-accent text-white shadow-lg nav:bottom-4`,children:(0,q.jsxDEV)(ce,{size:24},void 0,!1,{fileName:Q,lineNumber:284,columnNumber:9},this)},void 0,!1,{fileName:Q,lineNumber:276,columnNumber:7},this);if(i===`panel`)return(0,q.jsxDEV)(Sn,{onFiles:O,className:`fixed bottom-20 right-4 z-40 flex h-[560px] max-h-[80dvh] w-[380px] max-w-[calc(100vw-2rem)] flex-col overflow-hidden rounded-2xl border border-border bg-surface shadow-xl nav:bottom-4`,children:[A,j]},void 0,!0,{fileName:Q,lineNumber:291,columnNumber:7},this);let ie=S||o;return(0,q.jsxDEV)(te,{open:!0,modal:!1,onOpenChange:e=>!e&&a(`panel`),children:[(0,q.jsxDEV)(`div`,{"data-chat-backdrop":!0,"aria-hidden":`true`,className:`fixed inset-0 z-[45] bg-black/50 backdrop-blur-sm`},void 0,!1,{fileName:Q,lineNumber:311,columnNumber:7},this),(0,q.jsxDEV)(ee,{hideClose:!0,className:`h-[85dvh] w-full p-0 md:h-[85dvh] md:w-[80vw] md:max-w-[1040px] md:overflow-y-hidden`,children:(0,q.jsxDEV)(Sn,{onFiles:O,className:`h-full`,children:(0,q.jsxDEV)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[A,(0,q.jsxDEV)(`div`,{className:`flex min-h-0 flex-1`,children:[ie&&(0,q.jsxDEV)(bn,{threads:t.threads,activeId:t.convId,onOpen:e=>{t.open(e),u([]),v(null),x([]),s(!1)},onNew:D,className:S?`w-[220px] shrink-0`:`w-full`},void 0,!1,{fileName:Q,lineNumber:326,columnNumber:17},this),(S||!o)&&j]},void 0,!0,{fileName:Q,lineNumber:324,columnNumber:13},this)]},void 0,!0,{fileName:Q,lineNumber:322,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:321,columnNumber:9},this)},void 0,!1,{fileName:Q,lineNumber:317,columnNumber:7},this)]},void 0,!0,{fileName:Q,lineNumber:308,columnNumber:5},this)}export{wn as ChatWidget,wn as default,Cn as nextModeAfterNav};
16
+ `},i)),a}function Zt(e,t){return e&&`run`in e?async function(n,r){let i=Xt(n,{file:r,...t});await e.run(i,r)}:function(n,r){return Xt(n,{file:r,...e||t})}}var K=l(),Qt=[],$t={allowDangerousHtml:!0},en=/^(https?|ircs?|mailto|xmpp)$/i,tn=[{from:`astPlugins`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowDangerousHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`allowNode`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowElement`},{from:`allowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`allowedElements`},{from:`className`,id:`remove-classname`},{from:`disallowedTypes`,id:`replace-allownode-allowedtypes-and-disallowedtypes`,to:`disallowedElements`},{from:`escapeHtml`,id:`remove-buggy-html-in-markdown-parser`},{from:`includeElementIndex`,id:`#remove-includeelementindex`},{from:`includeNodeIndex`,id:`change-includenodeindex-to-includeelementindex`},{from:`linkTarget`,id:`remove-linktarget`},{from:`plugins`,id:`change-plugins-to-remarkplugins`,to:`remarkPlugins`},{from:`rawSourcePos`,id:`#remove-rawsourcepos`},{from:`renderers`,id:`change-renderers-to-components`,to:`components`},{from:`source`,id:`change-source-to-children`,to:`children`},{from:`sourcePos`,id:`#remove-sourcepos`},{from:`transformImageUri`,id:`#add-urltransform`,to:`urlTransform`},{from:`transformLinkUri`,id:`#add-urltransform`,to:`urlTransform`}];function nn(e){let t=rn(e),n=an(e);return on(t.runSync(t.parse(n),n),e)}function rn(e){let t=e.rehypePlugins||Qt,n=e.remarkPlugins||Qt,r=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...$t}:$t;return O().use(ie).use(n).use(Zt,r).use(t)}function an(e){let t=e.children||``,n=new re;return typeof t==`string`?n.value=t:x("Unexpected value `"+t+"` for `children` prop, expected `string`"),n}function on(e,t){let n=t.allowedElements,r=t.allowElement,i=t.components,a=t.disallowedElements,o=t.skipHtml,s=t.unwrapDisallowed,c=t.urlTransform||sn;for(let e of tn)Object.hasOwn(t,e.from)&&x("Unexpected `"+e.from+"` prop, "+(e.to?"use `"+e.to+"` instead":`remove it`)+` (see <https://github.com/remarkjs/react-markdown/blob/main/changelog.md#`+e.id+`> for more info)`);return n&&a&&x("Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other"),A(e,l),Ie(e,{Fragment:K.Fragment,components:i,ignoreInvalidStyle:!0,jsx:K.jsx,jsxs:K.jsxs,passKeys:!0,passNode:!0});function l(e,t,i){if(e.type===`raw`&&i&&typeof t==`number`)return o?i.children.splice(t,1):i.children[t]={type:`text`,value:e.value},t;if(e.type===`element`){let t;for(t in z)if(Object.hasOwn(z,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=z[t];(r===null||r.includes(e.tagName))&&(e.properties[t]=c(String(n||``),t,e))}}if(e.type===`element`){let o=n?!n.includes(e.tagName):a?a.includes(e.tagName):!1;if(!o&&r&&typeof t==`number`&&(o=!r(e,t,i)),o&&i&&typeof t==`number`)return s&&e.children?i.children.splice(t,1,...e.children):i.children.splice(t,1),t}}}function sn(e){let t=e.indexOf(`:`),n=e.indexOf(`?`),r=e.indexOf(`#`),i=e.indexOf(`/`);return t===-1||i!==-1&&t>i||n!==-1&&t>n||r!==-1&&t>r||en.test(e.slice(0,t))?e:``}var cn=/^[A-Za-z0-9._~%-]+$/;function ln(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i={};for(let e=0;e<r.length;e++){let t=r[e];if(t===`*`)return n.length>=e?i:null;let a=n[e];if(a===void 0)return null;if(t.startsWith(`:`)){if(!cn.test(a))return null;i[t.slice(1)]=a}else if(t!==a)return null}return n.length===r.length?i:null}function un(e,t,n,r=[]){let i=e.trim();if(!i||i.startsWith(`//`)||!i.startsWith(`/`)&&!/^https?:\/\//i.test(i))return{kind:`text`};let a;try{a=new URL(i,t)}catch{return{kind:`text`}}if(a.origin!==t)return{kind:`external`,href:a.href};for(let e of n){let t=ln(a.pathname,e.pattern);if(t)return r.length&&t.library!==void 0&&t.shelf!==void 0&&!r.some(e=>e.library===t.library&&e.shelf===t.shelf)?{kind:`text`}:{kind:`internal`,to:`${a.pathname}${a.search}${a.hash}`}}return{kind:`text`}}var q=o(),dn=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/chat-nav.tsx`,fn=(0,M.createContext)(()=>{});function pn({onNavigate:e,children:t}){return(0,q.jsxDEV)(fn.Provider,{value:e,children:t},void 0,!1,{fileName:dn,lineNumber:9,columnNumber:10},this)}function mn(){return(0,M.useContext)(fn)}var J=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/chat-markdown.tsx`;function hn({text:e,className:t}){return(0,q.jsxDEV)(`div`,{className:t,children:(0,q.jsxDEV)(nn,{remarkPlugins:[ae],components:{a:gn},children:e},void 0,!1,{fileName:J,lineNumber:18,columnNumber:7},this)},void 0,!1,{fileName:J,lineNumber:17,columnNumber:5},this)}function gn({href:e,children:t}){let n=mn(),r=a(),i=[...u(),...y().map(e=>({pattern:`/${e.path}`}))],o=un(e??``,window.location.origin,i,f());return o.kind===`internal`?(0,q.jsxDEV)(`a`,{href:o.to,onClick:e=>{e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||(e.preventDefault(),n(),r(o.to))},children:t},void 0,!1,{fileName:J,lineNumber:33,columnNumber:7},this):o.kind===`external`?(0,q.jsxDEV)(`a`,{href:o.href,target:`_blank`,rel:`noopener noreferrer`,children:t},void 0,!1,{fileName:J,lineNumber:50,columnNumber:7},this):(0,q.jsxDEV)(q.Fragment,{children:t},void 0,!1,{fileName:J,lineNumber:55,columnNumber:10},this)}var Y=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatMessages.tsx`;function _n({messages:e,pending:t,pendingReasoning:n}){let{t:i}=r(),a=(0,M.useRef)(null);return(0,M.useEffect)(()=>{let e=a.current;e&&(e.scrollTop=e.scrollHeight)},[e.length,t]),!e.length&&t===null&&n===null?(0,q.jsxDEV)(`div`,{className:`flex-1 grid place-items-center text-muted text-sm`,children:i(`webchat.empty`)},void 0,!1,{fileName:Y,lineNumber:20,columnNumber:12},this):(0,q.jsxDEV)(`div`,{ref:a,"data-chat-list":!0,className:`flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto p-3`,children:[e.map(e=>(0,q.jsxDEV)(vn,{role:e.role,text:e.text,reasoning:e.reasoning,attachments:e.attachments},e.msgId,!1,{fileName:Y,lineNumber:27,columnNumber:9},this)),t!==null&&(0,q.jsxDEV)(vn,{role:`assistant`,text:t||i(`webchat.thinking`),reasoning:n},void 0,!1,{fileName:Y,lineNumber:29,columnNumber:28},this)]},void 0,!0,{fileName:Y,lineNumber:25,columnNumber:5},this)}var vn=(0,M.memo)(function({role:e,text:t,reasoning:n,attachments:i}){let{t:a}=r();return e===`user`?(0,q.jsxDEV)(`div`,{className:`self-end max-w-[85%] rounded-2xl rounded-br-sm bg-accent/15 px-3 py-2 text-sm whitespace-pre-wrap break-words`,children:[i?.length?(0,q.jsxDEV)(`div`,{className:`mb-1.5 flex flex-wrap gap-1`,children:i.map(e=>(0,q.jsxDEV)(`span`,{className:`inline-flex max-w-full items-center rounded-md bg-bg/60 px-1.5 py-0.5 text-xs`,title:e.name,children:e.label??e.name},e.name,!1,{fileName:Y,lineNumber:47,columnNumber:37},this))},void 0,!1,{fileName:Y,lineNumber:46,columnNumber:11},this):null,t]},void 0,!0,{fileName:Y,lineNumber:44,columnNumber:7},this):(0,q.jsxDEV)(`div`,{className:`self-start max-w-[95%] min-w-0 rounded-2xl rounded-bl-sm bg-elevated px-3 py-2 text-sm break-words`,children:[n?(0,q.jsxDEV)(`details`,{className:`mb-2 rounded-lg border border-border px-2 py-1`,children:[(0,q.jsxDEV)(`summary`,{className:`cursor-pointer select-none text-xs text-muted`,children:a(`webchat.reasoning`)},void 0,!1,{fileName:Y,lineNumber:59,columnNumber:11},this),(0,q.jsxDEV)(hn,{text:n,className:`md-static mt-1 text-xs text-muted`},void 0,!1,{fileName:Y,lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:Y,lineNumber:58,columnNumber:9},this):null,(0,q.jsxDEV)(hn,{text:t,className:`md-static`},void 0,!1,{fileName:Y,lineNumber:63,columnNumber:7},this)]},void 0,!0,{fileName:Y,lineNumber:55,columnNumber:5},this)}),X=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatComposer.tsx`;function yn({streaming:e,onSend:t,onStop:n,attachments:i,uploading:a,uploadError:o,uploadProgress:s,canRetryUpload:l,onRetryUpload:u,onPickFiles:f,onRemoveAttachment:p}){let{t:g}=r(),[_,y]=(0,M.useState)(``);function b(){!_.trim()||e||t(_.trim(),i)&&y(``)}return(0,q.jsxDEV)(`div`,{className:`flex shrink-0 flex-col gap-2 border-t border-border p-2`,children:[(i.length>0||a||o)&&(0,q.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-1.5 px-1`,"data-chat-attachments":!0,children:[i.map((e,t)=>(0,q.jsxDEV)(`span`,{className:`inline-flex min-w-0 max-w-full items-center gap-1 rounded-md bg-elevated px-2 py-1 text-xs`,children:[(0,q.jsxDEV)(d,{size:13,className:`shrink-0 text-muted`},void 0,!1,{fileName:X,lineNumber:50,columnNumber:15},this),(0,q.jsxDEV)(`span`,{className:`max-w-48 truncate`,children:e.label??e.name},void 0,!1,{fileName:X,lineNumber:51,columnNumber:15},this),(0,q.jsxDEV)(`button`,{type:`button`,"aria-label":g(`webchat.removeAttachment`,{name:e.label??e.name}),className:`shrink-0 rounded p-0.5 text-muted hover:text-danger`,onClick:()=>p(t),children:(0,q.jsxDEV)(c,{size:13},void 0,!1,{fileName:X,lineNumber:58,columnNumber:17},this)},void 0,!1,{fileName:X,lineNumber:52,columnNumber:15},this)]},`${e.name}-${t}`,!0,{fileName:X,lineNumber:49,columnNumber:13},this)),a&&(0,q.jsxDEV)(`div`,{className:`flex min-w-32 flex-1 items-center gap-2`,"aria-label":g(`webchat.uploading`),children:[(0,q.jsxDEV)(h,{size:14,className:`shrink-0 animate-spin text-muted`},void 0,!1,{fileName:X,lineNumber:64,columnNumber:15},this),(0,q.jsxDEV)(`div`,{role:`progressbar`,"aria-label":g(`webchat.uploadProgress`),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":s,className:`h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-border`,children:(0,q.jsxDEV)(`div`,{className:`h-full rounded-full bg-accent transition-[width]`,style:{width:`${s}%`}},void 0,!1,{fileName:X,lineNumber:66,columnNumber:17},this)},void 0,!1,{fileName:X,lineNumber:65,columnNumber:15},this),(0,q.jsxDEV)(`span`,{className:`text-xs tabular-nums text-muted`,children:[s,`%`]},void 0,!0,{fileName:X,lineNumber:68,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:63,columnNumber:13},this),o&&(0,q.jsxDEV)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2 text-xs text-danger`,children:[(0,q.jsxDEV)(`span`,{className:`min-w-0 flex-1`,children:g(o)},void 0,!1,{fileName:X,lineNumber:73,columnNumber:15},this),l&&(0,q.jsxDEV)(`button`,{type:`button`,className:`inline-flex shrink-0 items-center gap-1 rounded px-1.5 py-0.5 font-medium text-accent hover:bg-elevated`,onClick:u,children:[(0,q.jsxDEV)(m,{size:12},void 0,!1,{fileName:X,lineNumber:76,columnNumber:19},this),` `,g(`webchat.retryUpload`)]},void 0,!0,{fileName:X,lineNumber:75,columnNumber:17},this)]},void 0,!0,{fileName:X,lineNumber:72,columnNumber:13},this)]},void 0,!0,{fileName:X,lineNumber:47,columnNumber:9},this),(0,q.jsxDEV)(`div`,{className:`flex items-end gap-2`,children:[(0,q.jsxDEV)(`label`,{"aria-label":g(`webchat.attach`),className:`cursor-pointer rounded-lg p-2 text-muted hover:bg-elevated hover:text-accent ${a?`pointer-events-none opacity-60`:``}`,children:[(0,q.jsxDEV)(ue,{size:18},void 0,!1,{fileName:X,lineNumber:88,columnNumber:11},this),(0,q.jsxDEV)(`input`,{type:`file`,multiple:!0,className:`hidden`,disabled:a,onChange:e=>{e.target.files?.length&&f(e.target.files),e.currentTarget.value=``}},void 0,!1,{fileName:X,lineNumber:89,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:84,columnNumber:9},this),(0,q.jsxDEV)(`textarea`,{className:`flex-1 resize-none rounded-lg border border-border bg-bg px-3 py-2 text-sm max-h-32`,rows:1,value:_,placeholder:g(`webchat.placeholder`),onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),b())}},void 0,!1,{fileName:X,lineNumber:100,columnNumber:9},this),e?(0,q.jsxDEV)(`button`,{"aria-label":g(`webchat.stop`),className:`rounded-lg p-2 hover:bg-elevated`,onClick:n,children:(0,q.jsxDEV)(v,{size:18},void 0,!1,{fileName:X,lineNumber:116,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:115,columnNumber:11},this):(0,q.jsxDEV)(`button`,{"aria-label":g(`webchat.send`),className:`rounded-lg p-2 hover:bg-elevated`,onClick:b,children:(0,q.jsxDEV)(de,{size:18},void 0,!1,{fileName:X,lineNumber:120,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:119,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:83,columnNumber:7},this)]},void 0,!0,{fileName:X,lineNumber:45,columnNumber:5},this)}var Z=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatThreadList.tsx`;function bn({threads:e,activeId:t,onOpen:n,onNew:i,className:a=`w-[220px] shrink-0`}){let{t:o}=r();return(0,q.jsxDEV)(`aside`,{"aria-label":o(`webchat.threads`),className:`${a} border-r border-border flex flex-col`,children:[(0,q.jsxDEV)(`button`,{className:`flex items-center gap-2 px-3 py-2 text-sm hover:bg-elevated`,onClick:i,children:[(0,q.jsxDEV)(_,{size:16},void 0,!1,{fileName:Z,lineNumber:23,columnNumber:9},this),` `,o(`webchat.newConversation`)]},void 0,!0,{fileName:Z,lineNumber:22,columnNumber:7},this),(0,q.jsxDEV)(`div`,{className:`flex-1 overflow-y-auto`,children:e.map(e=>(0,q.jsxDEV)(`button`,{onClick:()=>n(e.convId),className:`block w-full truncate px-3 py-2 text-left text-sm hover:bg-elevated ${e.convId===t?`bg-elevated font-medium`:``}`,children:e.title||o(`webchat.newConversation`)},e.convId,!1,{fileName:Z,lineNumber:27,columnNumber:11},this))},void 0,!1,{fileName:Z,lineNumber:25,columnNumber:7},this)]},void 0,!0,{fileName:Z,lineNumber:21,columnNumber:5},this)}var Q=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/plugin-webchat/src/ui/ChatWidget.tsx`,xn=25*1024*1024;function $(e){return Array.from(e.dataTransfer.types).includes(`Files`)}function Sn({children:e,onFiles:t,className:n}){let{t:i}=r(),[a,o]=(0,M.useState)(!1),s=(0,M.useRef)(0);function c(e){$(e)&&(e.preventDefault(),s.current+=1,o(!0))}function l(e){$(e)&&(e.preventDefault(),s.current=Math.max(0,s.current-1),s.current===0&&o(!1))}function u(e){$(e)&&(e.preventDefault(),s.current=0,o(!1),t(Array.from(e.dataTransfer.files)))}return(0,q.jsxDEV)(`div`,{className:n,onDragEnter:c,onDragLeave:l,onDragOver:e=>{$(e)&&(e.preventDefault(),e.dataTransfer.dropEffect=`copy`)},onDrop:u,children:[e,a&&(0,q.jsxDEV)(`div`,{"data-chat-drop-overlay":!0,"data-testid":`chat-drop-overlay`,className:`pointer-events-none absolute inset-0 z-50 grid place-items-center bg-surface/95 p-6 text-center backdrop-blur-sm`,children:(0,q.jsxDEV)(`div`,{className:`flex h-full w-full flex-col items-center justify-center rounded-2xl border-2 border-dashed border-accent bg-accent/10 text-accent`,children:[(0,q.jsxDEV)(g,{size:34},void 0,!1,{fileName:Q,lineNumber:71,columnNumber:13},this),(0,q.jsxDEV)(`span`,{className:`mt-3 text-base font-medium`,children:i(`webchat.dropFiles`)},void 0,!1,{fileName:Q,lineNumber:72,columnNumber:13},this),(0,q.jsxDEV)(`span`,{className:`mt-1 text-xs text-muted`,children:i(`webchat.dropFilesHint`)},void 0,!1,{fileName:Q,lineNumber:73,columnNumber:13},this)]},void 0,!0,{fileName:Q,lineNumber:70,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:69,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:51,columnNumber:5},this)}function Cn(e){return e?`panel`:`modal`}function wn(){let{t:e}=r(),t=_e(),n=ve(),[i,a]=(0,M.useState)(`bubble`),[o,s]=(0,M.useState)(!1),[l,u]=(0,M.useState)([]),[d,f]=(0,M.useState)(!1),[m,h]=(0,M.useState)(0),[g,v]=(0,M.useState)(null),[y,x]=(0,M.useState)([]),S=p(`sm`,640),C=p(`nav`,768),ne=(0,M.useCallback)(()=>{a(Cn(C))},[C]),w=(0,M.useRef)(null),T=(0,M.useRef)(`bubble`);(0,M.useEffect)(()=>{if(i!==`modal`)return;let e=e=>{e.key===`Escape`&&a(`panel`)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]),(0,M.useEffect)(()=>{i===`panel`&&T.current===`modal`&&w.current?.focus(),i!==`modal`&&s(!1),T.current=i},[i]),(0,M.useEffect)(()=>{if(i!==`modal`)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[i]);let E=i!==`bubble`;(0,M.useEffect)(()=>{E&&t.loadThreads()},[E,t.loadThreads]);function D(){t.newConversation(),u([]),v(null),x([]),s(!1)}let O=(0,M.useCallback)(async e=>{if(!e.length)return;v(null),x([]),f(!0),h(0);let t=[],n=[],r=null;for(let i of e){if(i.size>xn){r??=`webchat.uploadTooLarge`;continue}try{h(0);let e=await b(i,h);e?t.push({...e,label:i.name}):(n.push(i),r??=`webchat.uploadFailed`)}catch{n.push(i),r??=`webchat.uploadFailed`}}t.length&&u(e=>[...e,...t]),f(!1),h(0),x(n),r&&v(r)},[]),k=(0,M.useCallback)(()=>{y.length&&O(y)},[O,y]),re=t.messages.length>0||t.pending!==null,A=(0,q.jsxDEV)(`div`,{className:`flex shrink-0 items-center justify-between border-b border-border px-3 py-2`,children:[(0,q.jsxDEV)(`span`,{className:`text-sm font-medium`,children:e(`webchat.title`)},void 0,!1,{fileName:Q,lineNumber:205,columnNumber:7},this),(0,q.jsxDEV)(`div`,{className:`flex items-center gap-1`,children:[i===`modal`&&!S&&(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.threads`),"aria-expanded":o,className:`rounded p-1 hover:bg-elevated`,onClick:()=>s(e=>!e),children:(0,q.jsxDEV)(oe,{size:16},void 0,!1,{fileName:Q,lineNumber:216,columnNumber:13},this)},void 0,!1,{fileName:Q,lineNumber:210,columnNumber:11},this),re&&(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.newConversation`),className:`rounded p-1 hover:bg-elevated`,onClick:D,children:(0,q.jsxDEV)(_,{size:16},void 0,!1,{fileName:Q,lineNumber:225,columnNumber:13},this)},void 0,!1,{fileName:Q,lineNumber:224,columnNumber:11},this),(0,q.jsxDEV)(`button`,{ref:w,"aria-label":e(i===`modal`?`webchat.collapse`:`webchat.expand`),className:`rounded p-1 hover:bg-elevated`,onClick:()=>a(i===`modal`?`panel`:`modal`),children:i===`modal`?(0,q.jsxDEV)(le,{size:16},void 0,!1,{fileName:Q,lineNumber:234,columnNumber:31},this):(0,q.jsxDEV)(se,{size:16},void 0,!1,{fileName:Q,lineNumber:234,columnNumber:57},this)},void 0,!1,{fileName:Q,lineNumber:228,columnNumber:9},this),(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.close`),className:`rounded p-1 hover:bg-elevated`,onClick:()=>a(`bubble`),children:(0,q.jsxDEV)(c,{size:16},void 0,!1,{fileName:Q,lineNumber:237,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:236,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:206,columnNumber:7},this)]},void 0,!0,{fileName:Q,lineNumber:204,columnNumber:5},this),j=(0,q.jsxDEV)(pn,{onNavigate:ne,children:(0,q.jsxDEV)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,children:[t.error&&(0,q.jsxDEV)(`div`,{className:`px-3 py-2 text-sm text-danger`,children:e(`webchat.error`,{message:t.error})},void 0,!1,{fileName:Q,lineNumber:248,columnNumber:24},this),(0,q.jsxDEV)(_n,{messages:t.messages,pending:t.pending,pendingReasoning:t.pendingReasoning},void 0,!1,{fileName:Q,lineNumber:249,columnNumber:9},this),(0,q.jsxDEV)(yn,{streaming:t.pending!==null,attachments:l,uploading:d,uploadProgress:m,uploadError:g,canRetryUpload:y.length>0&&!d,onRetryUpload:k,onPickFiles:e=>void O(Array.from(e)),onRemoveAttachment:e=>u(t=>t.filter((t,n)=>n!==e)),onSend:(e,r)=>{let i=r.length?t.send(e,n,r):t.send(e,n);return i&&(u([]),v(null),x([])),i},onStop:t.stop},void 0,!1,{fileName:Q,lineNumber:250,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:247,columnNumber:7},this)},void 0,!1,{fileName:Q,lineNumber:244,columnNumber:5},this);if(i===`bubble`)return(0,q.jsxDEV)(`button`,{"aria-label":e(`webchat.open`),onClick:()=>a(S?`panel`:`modal`),className:`fixed bottom-20 right-4 z-40 grid h-14 w-14 place-items-center rounded-full bg-accent text-white shadow-lg nav:bottom-4`,children:(0,q.jsxDEV)(ce,{size:24},void 0,!1,{fileName:Q,lineNumber:285,columnNumber:9},this)},void 0,!1,{fileName:Q,lineNumber:277,columnNumber:7},this);if(i===`panel`)return(0,q.jsxDEV)(Sn,{onFiles:O,className:`fixed bottom-20 right-4 z-40 flex h-[560px] max-h-[80dvh] w-[380px] max-w-[calc(100vw-2rem)] flex-col overflow-hidden rounded-2xl border border-border bg-surface shadow-xl nav:bottom-4`,children:[A,j]},void 0,!0,{fileName:Q,lineNumber:292,columnNumber:7},this);let ie=S||o;return(0,q.jsxDEV)(te,{open:!0,modal:!1,onOpenChange:e=>!e&&a(`panel`),children:[(0,q.jsxDEV)(`div`,{"data-chat-backdrop":!0,"aria-hidden":`true`,className:`fixed inset-0 z-[45] bg-black/50 backdrop-blur-sm`},void 0,!1,{fileName:Q,lineNumber:312,columnNumber:7},this),(0,q.jsxDEV)(ee,{hideClose:!0,className:`h-[85dvh] w-full p-0 md:h-[85dvh] md:w-[80vw] md:max-w-[1040px] md:overflow-y-hidden`,children:(0,q.jsxDEV)(Sn,{onFiles:O,className:`h-full`,children:(0,q.jsxDEV)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[A,(0,q.jsxDEV)(`div`,{className:`flex min-h-0 flex-1`,children:[ie&&(0,q.jsxDEV)(bn,{threads:t.threads,activeId:t.convId,onOpen:e=>{t.open(e),u([]),v(null),x([]),s(!1)},onNew:D,className:S?`w-[220px] shrink-0`:`w-full`},void 0,!1,{fileName:Q,lineNumber:327,columnNumber:17},this),(S||!o)&&j]},void 0,!0,{fileName:Q,lineNumber:325,columnNumber:13},this)]},void 0,!0,{fileName:Q,lineNumber:323,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:322,columnNumber:9},this)},void 0,!1,{fileName:Q,lineNumber:318,columnNumber:7},this)]},void 0,!0,{fileName:Q,lineNumber:309,columnNumber:5},this)}export{wn as ChatWidget,wn as default,Cn as nextModeAfterNav};
@@ -0,0 +1,3 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,t as n}from"./i18n-vendor-T6EnJ_TL.js";import{r,t as i}from"./react-vendor-BskHO5hY.js";import{r as a}from"./x-BFRg18Fi.js";import{n as o,t as s}from"./ui-vendor-EU9CHLyR.js";import{t as c}from"./Icon-wZ-Cwtc3.js";import{r as l,t as u}from"./ThemeSwitcher-BoIYJENA.js";import{t as d}from"./button-DsalTwxl.js";import{A as f,D as p,M as m,g as h,k as g,m as _}from"./api-DsJ6cAbe.js";import{n as ee,r as v}from"./auth-context-CpmpND1h.js";import{t as y}from"./PageBody-Y-cpiRMh.js";import{n as b,t as x}from"./version-BgluE_nc.js";var S=e(t(),1),C=i(),w=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/components/ui/switch.tsx`,T=S.forwardRef(({className:e,...t},n)=>(0,C.jsxDEV)(s,{ref:n,className:a(`peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background`,`disabled:cursor-not-allowed disabled:opacity-50`,`data-[state=checked]:bg-primary data-[state=unchecked]:bg-border`,e),...t,children:(0,C.jsxDEV)(o,{className:a(`pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0 transition-transform`,`data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0`)},void 0,!1,{fileName:w,lineNumber:20,columnNumber:5},void 0)},void 0,!1,{fileName:w,lineNumber:9,columnNumber:3},void 0));T.displayName=s.displayName;var E=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/SettingsPage.tsx`,D=null,O=null;function te(e=!1){if(!e&&D)return Promise.resolve(D);if(!e&&O)return O;let t=Promise.all([h(e?{refresh:!0}:void 0),_(e?{refresh:!0}:void 0)]).then(([e,t])=>{let n={plugins:e,runtime:t,checkedAt:Date.now()};return D=n,n});return e||(O=t,t.then(()=>{O===t&&(O=null)},()=>{O===t&&(O=null)})),t}async function k(){let e=Date.now();for(;Date.now()-e<6e4;){await new Promise(e=>setTimeout(e,1e3));try{if((await fetch(`/health`)).ok)return!0}catch{}}return!1}function A(){let{t:e}=n(),{role:t}=ee(),i=t===`admin`,[a,o]=(0,S.useState)(()=>D?.plugins??[]),[s,h]=(0,S.useState)(()=>D===null),[_,w]=(0,S.useState)(()=>D?.checkedAt??null),[O,A]=(0,S.useState)(null),[M,N]=(0,S.useState)(!1),P=e=>O===e||O===`*`,[F,I]=(0,S.useState)(()=>D?.runtime??null),L=a.filter(e=>e.latestVersion&&x(e.latestVersion,e.installedVersion)),R=!!(F?.latestVersion&&F.installedVersion&&x(F.latestVersion,F.installedVersion)),z=L.length+ +!!R,[B,V]=(0,S.useState)(null),[H,U]=(0,S.useState)(!1),W=t=>e(`${t}.plugin.label`,{defaultValue:t}),G=t=>e(`${t}.plugin.description`,{defaultValue:``}),K=t=>e(`${t}.library.label`,{defaultValue:t}),q=(t,n)=>e(`${t}.${n}.label`,{defaultValue:n}),J={core_required:()=>e(`plugins.errors.core_required`),has_dependents:t=>e(`plugins.errors.has_dependents`,{list:t.dependents.join(`, `)}),missing_deps:t=>e(`plugins.errors.missing_deps`,{list:t.deps.join(`, `)}),unknown_plugin:()=>e(`plugins.errors.unknown_plugin`)},Y=(e=!1)=>te(e).then(({plugins:e,runtime:t,checkedAt:n})=>{o(e),I(t),w(n),h(!1)});(0,S.useEffect)(()=>{Y()},[]);async function X(){N(!0),V(null);try{await Y(!0)}catch{V(e(`plugins.updateCheckError`))}finally{N(!1)}}async function Z(t){if(!await l({title:e(`plugins.purgeTitle`),description:e(`plugins.confirmPurge`,{id:t.id}),confirmLabel:e(`plugins.purgeButton`),variant:`destructive`}))return;A(t.id),V(null);let n=await fetch(`/api/plugins/${t.id}/data`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(A(null),!n.ok){V(J[r.error]?.(r)??e(`plugins.genericError`,{code:r.error??n.status}));return}U(!0),await Y()}async function ne(t){A(t.id),V(null);let n=await p(t.id,!t.enabled);if(!n.ok){A(null),V(J[n.error]?.(n.data??{})??e(`plugins.genericError`,{code:n.error}));return}window.location.reload()}async function re(t){if(!t.latestVersion||!await l({title:e(`plugins.updateTitle`,{from:t.installedVersion,to:t.latestVersion}),description:e(`plugins.confirmUpdate`,{id:t.id,from:t.installedVersion,to:t.latestVersion}),confirmLabel:e(`plugins.updateButton`)}))return;A(t.id),V(null);let n=await f(t.id);if(!n.ok){A(null),V(n.stderr?`${e(`plugins.updateError`)}: ${n.stderr}`:e(`plugins.genericError`,{code:n.error}));return}U(!0),await k()?(D=null,window.location.reload()):(A(null),V(e(`plugins.restartTimeout`)))}async function ie(){if(z===0)return;let t=L.map(e=>`${W(e.id)}: v${e.installedVersion} → v${e.latestVersion}`);R&&t.push(`${e(`plugins.runtimeLabel`)}: v${F.installedVersion} → v${F.latestVersion}`);let n=t.join(`
2
+ `);if(!await l({title:e(`plugins.updateAllButton`,{count:z}),description:e(`plugins.confirmUpdateAll`,{count:z,list:n}),confirmLabel:e(`plugins.updateButton`)}))return;A(`*`),V(null);let r=await g();if(!r.ok){A(null),V(r.stderr?`${e(`plugins.updateError`)}: ${r.stderr}`:e(`plugins.genericError`,{code:r.error}));return}U(!0),await k()?(D=null,window.location.reload()):(A(null),V(e(`plugins.restartTimeout`)))}let Q=a.find(e=>e.id===`core`),$=!!(Q?.latestVersion&&x(Q.latestVersion,Q.installedVersion)),ae=$||R;async function oe(){let t=[];if(Q&&$&&t.push(`${e(`core.settings.label`)}: v${Q.installedVersion} → v${Q.latestVersion}`),R&&t.push(`${e(`plugins.runtimeLabel`)}: v${F.installedVersion} → v${F.latestVersion}`),t.length===0||!await l({title:e(`plugins.updateAllButton`,{count:t.length}),description:e(`plugins.confirmUpdateAll`,{count:t.length,list:t.join(`
3
+ `)}),confirmLabel:e(`plugins.updateButton`)}))return;A(`*`),V(null);let n=await m();if(!n.ok){A(null),V(n.stderr?`${e(`plugins.updateError`)}: ${n.stderr}`:e(`plugins.genericError`,{code:n.error}));return}U(!0),await k()?(D=null,window.location.reload()):(A(null),V(e(`plugins.restartTimeout`)))}return(0,C.jsxDEV)(y,{children:[(0,C.jsxDEV)(`h1`,{className:`mb-6 text-2xl font-bold tracking-tight text-text`,children:e(`settings.title`)},void 0,!1,{fileName:E,lineNumber:280,columnNumber:7},this),(0,C.jsxDEV)(`section`,{className:`mb-6`,children:[(0,C.jsxDEV)(`h2`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted`,children:e(`settings.appearance`)},void 0,!1,{fileName:E,lineNumber:283,columnNumber:9},this),(0,C.jsxDEV)(v,{className:`flex items-center gap-4 px-4 py-2`,children:[(0,C.jsxDEV)(`span`,{className:`min-w-0 flex-1 font-semibold text-text`,children:e(`theme.label`)},void 0,!1,{fileName:E,lineNumber:285,columnNumber:11},this),(0,C.jsxDEV)(`div`,{className:`w-40 max-w-[45vw] shrink-0`,children:(0,C.jsxDEV)(u,{direction:`down`},void 0,!1,{fileName:E,lineNumber:287,columnNumber:13},this)},void 0,!1,{fileName:E,lineNumber:286,columnNumber:11},this)]},void 0,!0,{fileName:E,lineNumber:284,columnNumber:9},this)]},void 0,!0,{fileName:E,lineNumber:282,columnNumber:7},this),(0,C.jsxDEV)(`section`,{className:`mb-6`,children:[(0,C.jsxDEV)(`h2`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted`,children:e(`settings.personalTitle`)},void 0,!1,{fileName:E,lineNumber:294,columnNumber:9},this),(0,C.jsxDEV)(v,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,C.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,C.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`auth.accountTitle`)},void 0,!1,{fileName:E,lineNumber:297,columnNumber:13},this)},void 0,!1,{fileName:E,lineNumber:296,columnNumber:11},this),(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,C.jsxDEV)(r,{to:`/settings/account`,title:e(`auth.accountTitle`),"aria-label":e(`auth.accountTitle`),children:(0,C.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:E,lineNumber:301,columnNumber:15},this)},void 0,!1,{fileName:E,lineNumber:300,columnNumber:13},this)},void 0,!1,{fileName:E,lineNumber:299,columnNumber:11},this)]},void 0,!0,{fileName:E,lineNumber:295,columnNumber:9},this)]},void 0,!0,{fileName:E,lineNumber:293,columnNumber:7},this),i&&(0,C.jsxDEV)(C.Fragment,{children:[(0,C.jsxDEV)(`section`,{className:`mb-6`,children:[(0,C.jsxDEV)(`h2`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted`,children:e(`settings.usersTitle`)},void 0,!1,{fileName:E,lineNumber:311,columnNumber:11},this),(0,C.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.usersDescription`)},void 0,!1,{fileName:E,lineNumber:312,columnNumber:13},this),(0,C.jsxDEV)(v,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,C.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,C.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`settings.usersTitle`)},void 0,!1,{fileName:E,lineNumber:315,columnNumber:17},this)},void 0,!1,{fileName:E,lineNumber:314,columnNumber:15},this),(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,C.jsxDEV)(r,{to:`/settings/users`,title:e(`settings.usersTitle`),"aria-label":e(`settings.usersTitle`),children:(0,C.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:E,lineNumber:319,columnNumber:19},this)},void 0,!1,{fileName:E,lineNumber:318,columnNumber:17},this)},void 0,!1,{fileName:E,lineNumber:317,columnNumber:15},this)]},void 0,!0,{fileName:E,lineNumber:313,columnNumber:13},this)]},void 0,!0,{fileName:E,lineNumber:310,columnNumber:11},this),(0,C.jsxDEV)(`section`,{className:`mb-6`,children:[(0,C.jsxDEV)(`h2`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted`,children:e(`settings.diagnosticsTitle`)},void 0,!1,{fileName:E,lineNumber:326,columnNumber:13},this),(0,C.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.diagnosticsDescription`)},void 0,!1,{fileName:E,lineNumber:327,columnNumber:13},this),(0,C.jsxDEV)(v,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,C.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,C.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`diagnostics.title`)},void 0,!1,{fileName:E,lineNumber:330,columnNumber:17},this)},void 0,!1,{fileName:E,lineNumber:329,columnNumber:15},this),(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,className:`shrink-0 border border-border`,asChild:!0,children:(0,C.jsxDEV)(r,{to:`/settings/diagnostics`,title:e(`diagnostics.title`),"aria-label":e(`diagnostics.title`),children:(0,C.jsxDEV)(c,{name:`lucide:activity`,size:16},void 0,!1,{fileName:E,lineNumber:334,columnNumber:19},this)},void 0,!1,{fileName:E,lineNumber:333,columnNumber:17},this)},void 0,!1,{fileName:E,lineNumber:332,columnNumber:15},this)]},void 0,!0,{fileName:E,lineNumber:328,columnNumber:13},this)]},void 0,!0,{fileName:E,lineNumber:325,columnNumber:11},this),(0,C.jsxDEV)(`section`,{children:[(0,C.jsxDEV)(`div`,{className:`mb-1 flex items-center gap-3`,children:[(0,C.jsxDEV)(`h2`,{className:`text-xs font-semibold tracking-wide text-muted`,children:e(`settings.componentsTitle`)},void 0,!1,{fileName:E,lineNumber:343,columnNumber:15},this),(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,disabled:O!==null||M,onClick:X,title:e(`plugins.checkUpdates`),className:`shrink-0 border border-border`,children:[(0,C.jsxDEV)(c,{name:`lucide:refresh-cw`,size:14,className:M?`animate-spin`:void 0},void 0,!1,{fileName:E,lineNumber:353,columnNumber:17},this),e(M?`plugins.checkingUpdates`:`plugins.checkUpdates`)]},void 0,!0,{fileName:E,lineNumber:344,columnNumber:15},this),z>0&&(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,disabled:O!==null,onClick:ie,className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:e(`plugins.updateAllButton`,{count:z})},void 0,!1,{fileName:E,lineNumber:357,columnNumber:17},this)]},void 0,!0,{fileName:E,lineNumber:342,columnNumber:13},this),(0,C.jsxDEV)(`p`,{className:`mb-3 text-sm text-muted`,children:e(`settings.componentsDescription`)},void 0,!1,{fileName:E,lineNumber:369,columnNumber:13},this),!s&&_!==null&&(0,C.jsxDEV)(`p`,{className:`mb-3 text-xs text-muted`,"aria-live":`polite`,children:[z>0?e(`plugins.updatesAvailable`,{count:z}):e(`plugins.noUpdates`),` `,e(`plugins.lastChecked`,{time:new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`}).format(_)})]},void 0,!0,{fileName:E,lineNumber:371,columnNumber:15},this),s?(0,C.jsxDEV)(`p`,{className:`text-muted`,children:e(`plugins.loading`)},void 0,!1,{fileName:E,lineNumber:382,columnNumber:15},this):(0,C.jsxDEV)(C.Fragment,{children:[H&&(0,C.jsxDEV)(`div`,{className:`mb-5 rounded-xl border border-accent/40 bg-accent/10 px-4 py-3 text-sm text-accent`,children:[e(`plugins.restartBannerBefore`),(0,C.jsxDEV)(`b`,{children:e(`plugins.restartBannerBold`)},void 0,!1,{fileName:E,lineNumber:388,columnNumber:21},this),e(`plugins.restartBannerAfter`)]},void 0,!0,{fileName:E,lineNumber:386,columnNumber:19},this),B&&(0,C.jsxDEV)(`div`,{className:`mb-5 rounded-xl border border-danger/40 bg-danger/10 px-4 py-3 text-sm text-danger`,children:B},void 0,!1,{fileName:E,lineNumber:393,columnNumber:19},this),(0,C.jsxDEV)(`div`,{className:`overflow-hidden rounded-lg border border-border bg-card`,children:[(0,C.jsxDEV)(`div`,{className:`flex flex-col gap-3 border-b border-border px-4 py-3 sm:flex-row sm:items-center sm:gap-4`,children:[(0,C.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,C.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsxDEV)(`span`,{className:`font-semibold text-text`,children:e(`core.settings.label`)},void 0,!1,{fileName:E,lineNumber:403,columnNumber:25},this),Q&&(0,C.jsxDEV)(b,{variant:`secondary`,className:`text-[10px] font-medium`,children:[`v`,Q.installedVersion]},void 0,!0,{fileName:E,lineNumber:405,columnNumber:27},this),ae&&(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,disabled:O!==null,onClick:oe,title:e(`settings.systemUpdateTitle`),className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:e(`plugins.updateButton`)},void 0,!1,{fileName:E,lineNumber:410,columnNumber:27},this)]},void 0,!0,{fileName:E,lineNumber:402,columnNumber:23},this),(0,C.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:e(`settings.systemDescription`)},void 0,!1,{fileName:E,lineNumber:423,columnNumber:23},this)]},void 0,!0,{fileName:E,lineNumber:401,columnNumber:21},this),(0,C.jsxDEV)(`div`,{className:`flex w-full shrink-0 justify-end border-t border-border pt-3 sm:w-auto sm:border-t-0 sm:pt-0`,children:(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,className:`border border-border`,asChild:!0,children:(0,C.jsxDEV)(r,{to:`/settings/core`,title:e(`core.settings.label`),"aria-label":e(`core.settings.label`),children:(0,C.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:E,lineNumber:428,columnNumber:27},this)},void 0,!1,{fileName:E,lineNumber:427,columnNumber:25},this)},void 0,!1,{fileName:E,lineNumber:426,columnNumber:23},this)},void 0,!1,{fileName:E,lineNumber:425,columnNumber:21},this)]},void 0,!0,{fileName:E,lineNumber:400,columnNumber:19},this),a.filter(e=>e.id!==`core`).map(t=>{let n=G(t.id),i=t.enabled?a.filter(e=>e.enabled&&e.id!==t.id&&e.dependsOn.includes(t.id)):[],o=i.length>0,s=o?e(`plugins.blockedByDependents`,{list:i.map(e=>W(e.id)).join(`, `)}):t.enabled?e(`plugins.switchDisable`):e(`plugins.switchEnable`),l=[t.dependsOn.length>0&&`${e(`plugins.metaDepends`)} ${t.dependsOn.map(W).join(`, `)}`,t.libraries.length>0&&`${e(`plugins.metaLibraries`)} ${t.libraries.map(K).join(`, `)}`,t.extends.length>0&&`${e(`plugins.metaExtends`)} ${t.extends.map(e=>q(t.id,e)).join(`, `)}`].filter(Boolean).join(` · `)||`—`;return(0,C.jsxDEV)(`div`,{className:`flex flex-col gap-3 border-b border-border px-4 py-3 last:border-b-0 sm:flex-row sm:items-center sm:gap-4`,children:[(0,C.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,C.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,C.jsxDEV)(`span`,{className:`font-semibold text-text`,children:W(t.id)},void 0,!1,{fileName:E,lineNumber:464,columnNumber:31},this),(0,C.jsxDEV)(j,{plugin:t,busy:P(t.id),onUpdate:()=>re(t)},void 0,!1,{fileName:E,lineNumber:465,columnNumber:31},this)]},void 0,!0,{fileName:E,lineNumber:463,columnNumber:29},this),n&&(0,C.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:n},void 0,!1,{fileName:E,lineNumber:467,columnNumber:45},this),(0,C.jsxDEV)(`div`,{className:`text-xs text-muted mt-0.5 truncate`,children:l},void 0,!1,{fileName:E,lineNumber:468,columnNumber:29},this)]},void 0,!0,{fileName:E,lineNumber:462,columnNumber:27},this),(0,C.jsxDEV)(`div`,{className:`flex w-full shrink-0 items-center justify-end gap-2 border-t border-border pt-3 sm:w-auto sm:border-t-0 sm:pt-0`,children:[t.hasSettings&&(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,className:`border border-border`,asChild:!0,children:(0,C.jsxDEV)(r,{to:`/settings/${t.id}`,title:e(`plugins.settingsTitle`,{defaultValue:`Settings`}),"aria-label":e(`plugins.settingsTitle`,{defaultValue:`Settings`}),children:(0,C.jsxDEV)(c,{name:`lucide:settings`,size:16},void 0,!1,{fileName:E,lineNumber:478,columnNumber:35},this)},void 0,!1,{fileName:E,lineNumber:473,columnNumber:33},this)},void 0,!1,{fileName:E,lineNumber:472,columnNumber:31},this),(0,C.jsxDEV)(d,{variant:`ghost`,size:`iconSm`,type:`button`,disabled:P(t.id),onClick:()=>Z(t),title:e(`plugins.purgeTitle`),"aria-label":e(`plugins.purgeTitle`),className:`border border-danger/40 text-danger hover:bg-danger/10 hover:text-danger`,children:(0,C.jsxDEV)(c,{name:`lucide:trash-2`,size:16},void 0,!1,{fileName:E,lineNumber:492,columnNumber:31},this)},void 0,!1,{fileName:E,lineNumber:482,columnNumber:29},this),(0,C.jsxDEV)(`span`,{title:s,children:(0,C.jsxDEV)(T,{checked:t.enabled,disabled:P(t.id)||o,onCheckedChange:()=>ne(t),title:s},void 0,!1,{fileName:E,lineNumber:497,columnNumber:31},this)},void 0,!1,{fileName:E,lineNumber:496,columnNumber:29},this)]},void 0,!0,{fileName:E,lineNumber:470,columnNumber:27},this)]},t.id,!0,{fileName:E,lineNumber:461,columnNumber:25},this)})]},void 0,!0,{fileName:E,lineNumber:398,columnNumber:17},this)]},void 0,!0,{fileName:E,lineNumber:384,columnNumber:15},this)]},void 0,!0,{fileName:E,lineNumber:341,columnNumber:11},this)]},void 0,!0,{fileName:E,lineNumber:308,columnNumber:9},this)]},void 0,!0,{fileName:E,lineNumber:279,columnNumber:5},this)}function j({plugin:e,busy:t,onUpdate:r}){let{t:i}=n(),a=!!(e.latestVersion&&x(e.latestVersion,e.installedVersion));return(0,C.jsxDEV)(C.Fragment,{children:[(0,C.jsxDEV)(b,{variant:`secondary`,className:`text-[11px] font-medium`,children:[`v`,e.installedVersion]},void 0,!0,{fileName:E,lineNumber:531,columnNumber:7},this),a&&(0,C.jsxDEV)(d,{variant:`ghost`,size:`sm`,type:`button`,disabled:t,onClick:r,title:i(`plugins.updateTitle`,{from:e.installedVersion,to:e.latestVersion}),className:`shrink-0 border border-accent/40 text-accent hover:bg-accent/10 hover:text-accent`,children:i(`plugins.updateButton`)},void 0,!1,{fileName:E,lineNumber:535,columnNumber:9},this)]},void 0,!0,{fileName:E,lineNumber:530,columnNumber:5},this)}export{A as SettingsPage};